diff --git a/BetterDiscordApp/dist/index.js b/BetterDiscordApp/dist/index.js index 0f8eabb..a777cc4 100644 --- a/BetterDiscordApp/dist/index.js +++ b/BetterDiscordApp/dist/index.js @@ -12112,4 +12112,4 @@ module.exports = require("path"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3BvcG91dFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NQYW5lbFNpZGViYXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3RoZW1lTW9kdWxlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy91dGlscy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdjIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3ZvaWNlTW9kZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvd2VicGFja01vZHVsZXMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvYnVnX2h1bnRlci5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvY2lyY3VzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3N2Zy9saWdodGNvcmQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvQWNjb3VudEluZm9zLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FwaVByZXZpZXcuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYWRkb25jYXJkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9ubGlzdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9iZExvZ28uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jaGVja2JveC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvZHJvcGRvd24uanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zd2l0Y2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29udGVudENvbHVtbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvckRldGFjaGVkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvZXJyb3JCb3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kb3duYXJyb3cuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZWRpdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9oaXN0b3J5LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL3NlYXJjaC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9tYXJnaW50b3AuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHJlc2VuY2VTZXR0aW5ncy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL2xheWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9zZXJ2ZXJDYXJkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9zaWRlYmFyVmlldy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3JlbG9hZEljb24uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zY3JvbGxlci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NlY3Rpb25lZFNldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZXR0aW5nc0dyb3VwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NUaXRsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3N3aXRjaC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhckhlYWRlci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhckl0ZW0uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJTZXBhcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29scy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwV3JhcC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3hTdmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImNyeXB0b1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJlbGVjdHJvblwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJldmVudHNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibW9kdWxlXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm5vZGUtZmV0Y2hcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicGF0aFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsInR5cGUiLCJpdGVtcyIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwiY2hpbGRyZW4iLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwiam9pbiIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoQ2xhc3NNb2R1bGVzIiwibm9ybWFsaXplRWxlbWVudCIsInBhdGNoRE9NTWV0aG9kcyIsIm1vZHVsZXMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwiY29tcG9uZW50TmFtZSIsImNsYXNzTmFtZXMiLCJjbGFzc0xpc3QiLCJub3JtYWxDbGFzcyIsImNhbWVsQ2FzZSIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInRvUmVtb3ZlIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJ0b2tlbiIsInRva2VucyIsInQiLCJDb2xvcmVkVGV4dCIsImluamVjdENvbG9yZWRUZXh0IiwiY2FuY2VsQ29sb3JlZFRleHQiLCJNZXNzYWdlQ29tcG9uZW50IiwiYmVmb3JlIiwibWV0aG9kQXJndW1lbnRzIiwiY2hpbGRyZW5NZXNzYWdlQ29udGVudCIsIm1lc3NhZ2VDb250ZW50IiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsZW0iLCJzZXRQcm9wZXJ0eSIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwiYWRkb25DYWNoZSIsInRpbWVDYWNoZSIsIndhdGNoZXJzIiwicGF0Y2hFeHRlbnNpb25zIiwiZ2V0Q29udGVudFJlcXVpcmUiLCJwbHVnaW5zRm9sZGVyIiwiX3BsdWdpbnNGb2xkZXIiLCJyZWFscGF0aFN5bmMiLCJkYXRhUGF0aCIsInRoZW1lc0ZvbGRlciIsIl90aGVtZXNGb2xkZXIiLCJsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSIsImRhdGFTdG9yZSIsImdldFNldHRpbmdHcm91cCIsInNldFNldHRpbmdHcm91cCIsImVuY3J5cHRTZXR0aW5nc0NhY2hlIiwiSlNPTiIsInBhcnNlIiwiZGVjcnlwdFNldHRpbmdzQ2FjaGUiLCJoYXNoIiwicmVzdWx0Iiwic3VzcGVjdCIsInNhdmVBZGRvbkNhY2hlIiwic3RyaW5naWZ5Iiwid2F0Y2hDb250ZW50IiwiY29udGVudFR5cGUiLCJpc1BsdWdpbiIsImJhc2VGb2xkZXIiLCJmaWxlRW5kaW5nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJ1bmxvYWRQbHVnaW4iLCJ1bmxvYWRUaGVtZSIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZFBsdWdpbiIsImxvYWRUaGVtZSIsInJlbG9hZFBsdWdpbiIsInJlbG9hZFRoZW1lIiwidW53YXRjaENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwiaGFzT2xkTWV0YSIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJtZXRhIiwicmF3TWV0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsInBhcnNlZCIsImZvcm1hdCIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJjaGFyQXQiLCJsIiwic3Vic3RyIiwic2VsZiIsIm9yaWdpbmFsUmVxdWlyZSIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiYWRkZWQiLCJhdGltZU1zIiwibW9kaWZpZWQiLCJtdGltZU1zIiwic2l6ZSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImhhc1N0YXJ0ZWQiLCJmbGF0IiwidmVyc2lvbiIsIkVEIiwiV2ViU29ja2V0IiwicGF0Y2hBdHRyaWJ1dGVzIiwiaW5pdFNldHRpbmdzIiwiY2hlY2tGb3JHdWlsZHMiLCJpbml0aWFsaXplIiwiaW5pdGlhbGl6ZVNldHRpbmdzIiwiY29udGVudE1hbmFnZXIiLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsIkFuY2hvciIsIkFwaSIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsInNhdmVTZXR0aW5ncyIsImxvYWRTZXR0aW5ncyIsInNldHRpbmciLCJnZXRQcmVkaWNhdGVTZWN0aW9ucyIsInNldHRpbmdNb2R1bGUiLCJjYWxsIiwic2VjdGlvbiIsInBvcGVkIiwicG9wIiwicmVuZGVyU2lkZWJhciIsImNsYXNzTmFtZUxheWVyIiwiY2xhc3NOYW1lU29jaWFsTGlua3MiLCJjbGFzc05hbWVNb2RhbCIsIm1haW5PYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtbGVuIiwibXV0YXRpb24iLCJyYXdPYnNlcnZlciIsImFkZGVkTm9kZXMiLCJsYXllciIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwibW9kYWwiLCJpbm5lciIsInJlc3BvbnNpdmVXaWR0aE1vYmlsZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwic29jaWFsTW9kdWxlMSIsIm9yaWdpbmFsIiwibmV3T25lIiwicmV0dXJuVmFsIiwibGluayIsImNsYXNzTmFtZUNvbG9yTXV0ZWQiLCJzaXplcyIsImNsYXNzTmFtZVZlcnNpb25IYXNoIiwiY29sb3JNdXRlZCIsInNpemUzMiIsInZlcnNpb25IYXNoIiwiYnJhbmNoIiwiYWRkaXRpb25hbCIsInJlYWN0Iiwic2l6ZTEyIiwiZWxlY3Ryb24iLCJnZXRHbG9iYWwiLCJjb21taXQiLCJvcmlnaW5hbFZlcnNpb25zIiwic3BsaWNlIiwiZ2V0R3VpbGRDbGFzc2VzIiwiZ3VpbGRzV3JhcHBlciIsImZpbmRCeVByb3BzIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImNoYXQiLCJuZXh0VGljayIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGROb2RlcyIsImJsb2NrRGl2IiwiZGlzdGFudCIsImdldEJhZGdlcyIsImJhZGdlcyIsInN2ZyIsIndpZHRoIiwic2NvcGVzIiwic2NvcGUiLCJjb21wb25lbnQiLCJkaXYyIiwicmVhY3REb20iLCJyZW5kZXIiLCJtZW1iZXJMaXN0UGF0Y2giLCJNZW1iZXJMaXN0SXRlbSIsInJlbmRlckRlY29yYXRvcnMiLCJ1cGRhdGVJbmplY3RvciIsImluamVjdGlvblBhdGgiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInJlbGVhc2VDaGFubmVsIiwiZ2xvYmFscyIsImdldFJlbGVhc2VDaGFubmVsIiwiZW52IiwiQVBQREFUQSIsIkhPTUUiLCJYREdfQ09ORklHX0hPTUUiLCJzdGFibGUiLCJjYW5hcnkiLCJwdGIiLCJwbHVnaW5EYXRhIiwiQkRGaWxlIiwid3JpdGVGaWxlU3luYyIsInNldHRpbmdzRmlsZSIsInVubGlua1N5bmMiLCJfaW5qZWN0aW9uUGF0aCIsImJhc2UiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZWFsTG9jYXRpb24iLCJjb25maWdGaWxlIiwiX2NvbmZpZ0ZpbGUiLCJfQkRGaWxlIiwiX3NldHRpbmdzRmlsZSIsImdldFBsdWdpbkZpbGUiLCJEZXZNb2RlIiwiZGVidWdMaXN0ZW5lciIsImNvcHlTZWxlY3Rvckxpc3RlbmVyIiwic3RhcnREZWJ1Z0xpc3RlbmVyIiwic3RhcnRDb3B5U2VsZWN0b3IiLCJzdG9wRGVidWdMaXN0ZW5lciIsInN0b3BDb3B5U2VsZWN0b3IiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwid2hpY2giLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJjbGFzc0xheWVyIiwiY2xhc3NJdGVtcyIsImRpc2FibGVkUG9pbnRlckV2ZW50cyIsIm1lbnUiLCJhdHRhY2giLCJjbSIsInF1ZXJ5IiwiY29udGFpbmVyIiwibGF5ZXJDb250YWluZXIiLCJjbVdyYXAiLCJzdHlsZUZsZXhpYmxlIiwiYWNjb21tb2RhdGVTY3JvbGxiYXIiLCJhcHBlbmQiLCJjbGllbnRZIiwibGVmdCIsImNsaWVudFgiLCJzY3JvbGxlckNsYXNzZXMiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyIiwicmVtb3ZlQ00iLCJrZXlDb2RlIiwiY21nIiwiY21pIiwiaXRlbSIsImxhYmVsQ29udGFpbmVyIiwiY29sb3JEZWZhdWx0IiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5IiwiZWxlbWVudHMiLCJxdWVyeUFsbCIsImZvY3VzZWQiLCJzZXBhcmF0b3IiLCJzY3JvbGxIZWlnaHQiLCJmdWxsUGF0aCIsImVsIiwibmFtZXMiLCJwYXJlbnROb2RlIiwidW5zaGlmdCIsIm93bmVyRG9jdW1lbnQiLCJ0YWdOYW1lIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsInJlcyIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwicGVyZm9ybWFuY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJodG1sIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImNsb25lTm9kZSIsImVzY2FwZUhUTUwiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwic3BhbkVsZW1lbnQiLCJub2RlVmFsdWUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJjbGFzc25hbWUiLCJpbmRpY2F0b3IiLCJoYXNDbGFzcyIsImV2ZXJ5IiwicmVwbGFjZUNsYXNzIiwib2xkTmFtZSIsIm5ld05hbWUiLCJhcHBlbmRUbyIsInRoaXNOb2RlIiwidGhhdE5vZGUiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJ0YXJnZXROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJuZXdOb2RlIiwibmV4dCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJtYXRjaGVzIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwiaW5kZXgiLCJwYXJlbnQiLCJmaW5kQ2hpbGQiLCJmaW5kQ2hpbGRyZW4iLCJwYXJlbnRzIiwiY2xvc2VzdCIsInBhcmVudHNVbnRpbCIsInNpYmxpbmdzIiwiYXR0cmlidXRlIiwiZ2xvYmFsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsInRleHRDb250ZW50Iiwib3V0ZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwib24iLCJldmVudCIsImRlbGVnYXRlIiwibmFtZXNwYWNlIiwiaGFzRGVsZWdhdGUiLCJldmVudEZ1bmMiLCJjYW5jZWwiLCJuZXdDYW5jZWwiLCJmaW5kSW5kZXgiLCJvbmNlIiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsIm9uTW91bnRDaGFuZ2UiLCJvbk1vdW50Iiwid3JhcHBlZENhbGxiYWNrIiwib2JzZXJ2ZXIiLCJub2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwicGFyZW50TWF0Y2giLCJvblVubW91bnQiLCJvbkFkZGVkIiwid3JhcCIsImRvbVdyYXBwZXIiLCJyZXNvbHZlRWxlbWVudCIsIkVtb2ppUmVnZXgiLCJDdXN0b21FbW9qaU1vZHVsZSIsIkN1c3RvbUVtb2ppIiwiRW1vamlNb2R1bGVBcGkiLCJnZXRDdXN0b21FbW9qaUJ5SWQiLCJBdXRvY29tcGxldGVNb2R1bGUiLCJBdXRvQ29tcGxldGlvblRlbXBsYXRlcyIsImdldEF1dG9jb21wbGV0ZU9wdGlvbnMiLCJFbW9qaU1vZHVsZVF1ZXJ5IiwicXVlcnlFbW9qaVJlc3VsdHMiLCJNZXNzYWdlcyIsIkVNT0pJX01BVENISU5HIiwiZ3VpbGRNb2R1bGUiLCJnZXRHdWlsZCIsImdldEd1aWxkcyIsImlzRmV0Y2hpbmciLCJlbW9qaVNlYXJjaCIsImdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQiLCJMSUdIVENPUkRfRU1PSklTIiwiYXJnMSIsImFyZzIiLCJjb25kaXRpb24iLCJzZXRFbW9qaVVzYWJsZSIsInF1ZXJ5UmVzdWx0cyIsInJlc3VsdHMiLCJyZW5kZXJSZXN1bHRzIiwiRCIsImVtb2ppcyIsIkVNT0pJIiwiRW1vamkiLCJlbW9qaSIsInVuaXF1ZU5hbWUiLCJzZW50aW5lbCIsImd1aWxkSWQiLCJnZXRQbGFpblRleHQiLCJpc0FuaW1hdGVkIiwiYW5pbWF0ZWQiLCJtYW5hZ2VkIiwib3JpZ2luYWxOYW1lIiwiZ2V0UmF3VGV4dCIsImNhbmNlbEVtb2ppUmVuZGVyIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJuZXdDb250ZW50IiwiaGFzUGFyc2VkIiwiZXhlYyIsInJhdyIsIndvcmRzIiwid29yZCIsImFyciIsImVtb2ppSWQiLCJqdW1ib2FibGUiLCJyZWR1Y2UiLCJjdXJyZW50Iiwic2hpZnQiLCJvIiwidSIsImQiLCJvbkNsaWNrIiwib25Ib3ZlciIsIlIiLCJwcmVmaXgiLCJUaXRsZSIsIkVtb2ppRmlsdGVyTW9kdWxlIiwiaXNFbW9qaURpc2FibGVkIiwiaXNVc2FibGUiLCJ1c2FibGUiLCJzdXJyb2dhdGVzIiwiZGl2ZXJzaXR5IiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwia2V5d29yZCIsIm9vZiIsIm5vX2NvbW1lbnRzIiwicmVnZXhwcyIsInJlZ2V4IiwiaGFzaFRvVXJsIiwiY2hlY2tIYXNoIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwidXNlckFnZW50IiwiX19wYXRoIiwiaXNGcm9tTG9hZGVyIiwiY3J5cHRvIiwiYWxsb2MiLCJjcmVhdGVSZWFkU3RyZWFtIiwiY2h1bmsiLCJjb25jYXQiLCJoYXNoUmVzdWx0IiwiZGlnZXN0IiwicmVuZGVyVG9FbGVtZW50cyIsImZsb3dlclN0YXJNb2R1bGUiLCJmbG93ZXJTdGFyQ29udGFpbmVyIiwiY2hpbGRNb2R1bGUiLCJjaGlsZENvbnRhaW5lciIsImJvcmRlckNvbG9yIiwibmV4dE5vZGUiLCJjb25maXJtVGV4dCIsImRhbmdlciIsIm9uQ2FuY2VsIiwib25Db25maXJtIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJhdG9iIiwiZ2VuZXJhdGVLZXkiLCJkZWNpcGhlciIsImRlY3J5cHRlZCIsImZpbmFsIiwiY2lwaGVyIiwiZW5jcnlwdGVkIiwiUGx1Z2luTW9kdWxlIiwibG9hZFBsdWdpbkRhdGEiLCJsb2FkIiwic2F2ZVBsdWdpbkRhdGEiLCJjaGFubmVsU3dpdGNoIiwic3RhcnRQbHVnaW4iLCJzdG9wUGx1Z2luIiwiZW5hYmxlUGx1Z2luIiwiZGlzYWJsZVBsdWdpbiIsInRvZ2dsZVBsdWdpbiIsInAiLCJmaWxlbmFtZU9yTmFtZSIsImJkcGx1Z2luIiwiZGVsZXRlIiwiZWRpdCIsIm9wZW5JdGVtIiwidXBkYXRlUGx1Z2luTGlzdCIsInNhdmVkIiwibmV3TWVzc2FnZSIsIm9uTWVzc2FnZSIsIm9uU3dpdGNoIiwicG9wb3V0V2luZG93Iiwid2luZG93cyIsIk1hcCIsInBvcG91dE1vZHVsZSIsImdldFdpbmRvdyIsInNldEltbWVkaWF0ZSIsImJkRXZlbnRzIiwicmVtb3ZlVGhlbWVzIiwiYXBwbHlUaGVtZXMiLCJ0aGVtZU5hbWUiLCJ0aGVtZSIsImV4aXN0aW5nIiwidW5lc2NhcGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIkxheWVyIiwicm9vdElkIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290IiwiX3Jvb3QiLCJpbmplY3RSb290IiwiY2xhc3NOYW1lTGF5ZXJzIiwibGF5ZXJzIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInR1dG9yaWFsQ29udGFpbmVyIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQkRTaWRlYmFySGVhZGVyIiwiUHVyZUNvbXBvbmVudCIsInNpZGViYXJDb21wb25lbnRzIiwiSGVhZGVyIiwiSXRlbSIsImNoYW5nZWxvZ0J1dHRvbiIsIkhpc3RvcnkiLCJyZW5kZXJlZCIsImlzQ2xlYXJpbmdDYWNoZSIsIlYyX1NldHRpbmdzUGFuZWwiLCJ1cGRhdGVTZXR0aW5ncyIsInNpZGViYXIiLCJWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIiLCJyZWdpc3RlckNvbXBvbmVudHMiLCJyZWdpc3RlciIsIm1ha2VDb21wb25lbnQiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIkFwaVByZXZpZXdDb21wb25lbnQiLCJjb3JlQ29tcG9uZW50IiwiY3VzdG9tQ3NzQ29tcG9uZW50IiwicmVuZGVyQWRkb25QYW5lIiwiY29yZVNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJjYXRlZ29yaWVzIiwiU2V0Iiwic2VjdGlvbnMiLCJsaWdodGNvcmRTZXR0aW5ncyIsIlByZXNlbmNlU2V0dGluZ3MiLCJjaGVja2VkIiwicHVibGljU2VydmVyc01vZHVsZSIsInZvaWNlTW9kZSIsInRmSG91ciIsImNvbG9yZWRUZXh0IiwiZE1vZGUiLCJTZXR0aW5ncyIsImRldk1vZGUiLCJmb3JjZVVwZGF0ZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImdldEN1cnJlbnRXaW5kb3ciLCJzZXRBbHdheXNPblRvcCIsIkFudGlBZERNIiwiYmx1clByaXZhdGUiLCJkaXNhYmxlVHlwaW5nIiwiYXBwU2V0dGluZ3MiLCJyZWxhdW5jaCIsImV4aXQiLCJjb3JlIiwiTm90aWZpY2F0aW9uc1VzZVNoaW0iLCJTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiTWFyZ2luVG9wIiwiaXNDaGVja2VkIiwiU3dpdGNoIiwiQ29tcG9uZW50cyIsImlucHV0cyIsIkJ1dHRvbiIsImxvb2siLCJob3ZlckNvbG9yIiwiaXBjIiwic2VuZCIsImFyZ3YiLCJxdWl0Iiwic2Vzc2lvbiIsImNsZWFyQ2FjaGUiLCJWMkNfUHJlc2VuY2VTZXR0aW5ncyIsIlYyQ19BY2NvdW50SW5mb3MiLCJBcGlQcmV2aWV3IiwiQ3NzRWRpdG9yIiwiQ29udGVudExpc3QiLCJDb21wb25lbnQiLCJvcmlnaW5hbFJlbmRlciIsImVudW1lcmFibGUiLCJDYXJkTGlzdCIsIlNldHRpbmdDb21wb25lbnQiLCJwYW5lbHMiLCJwYW5lbCIsImdldENvbXBvbmVudCIsIkxDaXRlbXMiLCJMQ0Rldkl0ZW1zIiwiVGhlbWVNb2R1bGUiLCJsb2FkVGhlbWVEYXRhIiwic2F2ZVRoZW1lRGF0YSIsImVuYWJsZVRoZW1lIiwiZGlzYWJsZVRoZW1lIiwidG9nZ2xlVGhlbWUiLCJiZHRoZW1lIiwidXBkYXRlVGhlbWVMaXN0IiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJ0cmFuc3BhcmVudCIsImZyYW1lIiwiY2hhckNvZGVBdCIsImdldFRleHRBcmVhIiwiY2hhbm5lbFRleHRBcmVhIiwidGl0bGVXcmFwcGVyIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwiZm9jdXMiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImV4ZWNDb21tYW5kIiwibW9kdWxlTmFtZSIsImdyb3VwQ29sbGFwc2VkIiwiZ3JvdXBFbmQiLCJmb3JtYXRTdHJpbmciLCJzdHJpbmciLCJyZXBsYWNlbWVudCIsImVzY2FwZSIsInBhcmFtcyIsImluc3RlYWQiLCJzaWxlbnQiLCJmb3JjZSIsIm9yaWdNZXRob2QiLCJjYW5jZWxlZCIsImNhbmNlbFBhdGNoIiwib3JpZ2luYWxNZXRob2QiLCJjYWxsT3JpZ2luYWxNZXRob2QiLCJ0ZW1wUmV0IiwiX19tb25rZXlQYXRjaGVkIiwiZGlzY29ubmVjdCIsImhhc05vdGljZSIsImZvcm0iLCJib3R0b20iLCJ0b2FzdFdyYXBwZXIiLCJpY29uIiwidGltZW91dCIsInRvYXN0RWxlbSIsImlubmVyVGV4dCIsIm1vZGFsTW9kdWxlIiwiaGlkZU9uRnVsbHNjcmVlbiIsImhlYWRlck1vZHVsZSIsImhlYWRlciIsImZvb3RlcjJNb2R1bGUiLCJmb2N1c0xvY2siLCJiYWNrZHJvcCIsImJhY2tkcm9wV2l0aExheWVyIiwiY2xvc2luZ0xpc3RlbmVycyIsInBsdWdpbkVycm9ycyIsInRoZW1lRXJyb3JzIiwiZ2VuZXJhdGVUYWIiLCJ0YWJzIiwiTW9kYWxTdGFjayIsIkNoYW5nZWxvZ0NsYXNzZXMiLCJUZXh0RWxlbWVudCIsIkZsZXhDaGlsZCIsIlRpdGxlcyIsIkNoYW5nZWxvZyIsImRlZmF1bHRQcm9wcyIsInNlbGVjdGFibGUiLCJNYXJrZG93blBhcnNlciIsImltYWdlIiwic3VidGl0bGUiLCJjZSIsImNoYW5nZWxvZ0l0ZW1zIiwiZW50cnkiLCJtYXJnaW4iLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJTaXplcyIsIlNNQUxMIiwiQ29sb3JzIiwiU1RBTkRBUkQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsImpvaW5CRDIiLCJzdXBwb3J0TGluayIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1vZGFsQWN0aW9ucyIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwib3Blbk1vZGFsIiwicmVkIiwibW9kYWxLZXkiLCJWMiIsImVkaXRvckRldGFjaGVkIiwicmVxIiwid2VicGFja0pzb25wIiwiX19leHRyYV9pZF9fIiwic2hvdWxkUHJvdGVjdCIsInRoZU1vZHVsZSIsImNsZWFyIiwic29ydCIsImdldFRva2VuIiwiZ2V0RW1haWwiLCJzaG93VG9rZW4iLCJwcm90ZWN0IiwiaXNEZWZhdWx0IiwibW9kIiwicHJveHkiLCJmdW5jIiwiX19wcm90b19fIiwicHJvcE5hbWVzIiwicHJvdG9OYW1lcyIsInByb3RvUHJvcCIsImludGVybmFsIiwiam9pbkJEMSIsIkludml0ZUFjdGlvbnMiLCJhY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsIiwibGVhdmVCRDEiLCJHdWlsZEFjdGlvbnMiLCJsZWF2ZUd1aWxkIiwibGVhdmVCRDIiLCJqb2luTEMiLCJsZWF2ZUxDIiwicmVhY3RDb21wb25lbnQiLCJhbmNob3JDbGFzc2VzIiwic2xhdGVFZGl0b3JDbGFzc2VzIiwibWVzc2FnZUNsYXNzZXMiLCJ1bnJlYWRNZW50aW9uc0JhciIsImd1aWxkc0Vycm9yIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJUb29sdGlwV3JhcHBlciIsIlRvb2x0aXBzIiwiaGlkZSIsInNob3ciLCJzdWJtaXQiLCJhY3RpdmF0ZVJhZ2luZ0RlbW9uIiwiZGlzbWlzcyIsIktleUdlbmVyYXRvciIsIkxheWVyU3RhY2siLCJVc2VyU3RvcmUiLCJDaGFubmVsU3RvcmUiLCJDaGFubmVsQWN0aW9ucyIsIlByaXZhdGVDaGFubmVsQWN0aW9ucyIsIm9wZW5ETSIsInVzZXJJZCIsInNlbGZJZCIsInByaXZhdGVDaGFubmVsSWQiLCJnZXRETUZyb21Vc2VySWQiLCJzZWxlY3RQcml2YXRlQ2hhbm5lbCIsIm9wZW5Qcml2YXRlQ2hhbm5lbCIsInBhcnNlU2V0dGluZ3MiLCJWb2ljZU1vZGUiLCJtYXJnaW5Nb2R1bGUyIiwiZGVmYXVsdE1hcmdpbmg1IiwiY29sb3JNb2R1bGUiLCJjb2xvclN0YW5kYXJkIiwic2l6ZU1vZHVsZSIsInNjcm9sbGJhck1vZHVsZTEiLCJzY3JvbGxiYXJHaG9zdEhhaXJsaW5lIiwiR3VpbGRNb2R1bGUiLCJnZXRSZWxhdGlvbnNoaXBzIiwic2Vzc2lvbk1vZHVsZSIsImdldFNlc3Npb25zIiwic2l6ZTE0IiwiaDUiLCJnZXRQcm9maWxlVmFsdWUiLCJnZXRTdGF0aXN0aWNzIiwiZ2V0U2Vzc2lvblZhbHVlIiwibWFyZ2luQm90dG9tMjAiLCJzZXNzaW9uc1JhdyIsInNlc3Npb25zIiwic2Vzc2lvbklkIiwiY2xpZW50SW5mbyIsIm9zIiwiY2xpZW50IiwiYWN0aXZpdGllcyIsInJlcGVhdCIsImNyZWF0ZWRBdCIsImF2YXRhclVSTCIsImF2YXRhciIsImdldEF2YXRhclVSTCIsImdldERhdGUiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImZsYWdzIiwiaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiIsImVtYWlsIiwibWZhRW5hYmxlZCIsIm1vYmlsZSIsInBob25lIiwidmVyaWZpZWQiLCJyZWxhdGlvbnMiLCJmcmllbmRzIiwiaXNGcmllbmQiLCJpc0Jsb2NrZWQiLCJoaWdodGxpZ2h0SlMiLCJoaWdobGlnaHQiLCJtZXNzYWdlTW9kdWxlMSIsIm1lc3NhZ2VNb2R1bGUyIiwiQ29kZUNvbnRlbnQiLCJfX2h0bWwiLCJsYW5ndWFnZSIsIm1hcmdpbkJvdHRvbTgiLCJmb3JtTW9kdWxlIiwic3RhdGVzIiwiRm9ybVNlY3Rpb24iLCJhbGxDb21wb25lbnRzIiwiY29tcCIsImNvbXBOYW1lIiwiY29tcFBhdGgiLCJyZW5kZXJzIiwiQ29tcG9uZW50UHJldmlldyIsInRhYiIsIkFsbFByZXZpZXdzIiwiZ2V0UHJvcHMiLCJyZW5kZXJQcmV2aWV3IiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsImJvcmRlclJhZGl1cyIsInJlbmRlckNvZGUiLCJnZW5lcmF0ZUNvZGUiLCJnZXRTdHJGb3JQcm9wIiwibGFuZyIsIlN0cmluZyIsIiQkdHlwZW9mIiwiU3ltYm9sIiwiZm9yIiwiY29tcENhdGVnb3J5IiwicHJvcFN0cmluZ3MiLCJjaGlsZHJlblByb3AiLCJzdHIiLCJvcGVuVGFnIiwiY2xvc2VUYWciLCJ2aXNpYmxlS2V5IiwicHJvcE9iamVjdCIsImlzTGFzdCIsImlzRmlyc3QiLCJjaGlsZHJlbkRhdGEiLCJoZWxwIiwic3VjY2VzcyIsInNldFN0YXRlIiwibWFyZ2luQm90dG9tIiwiVjJDX1BsdWdpbkNhcmQiLCJzaG93U2V0dGluZ3MiLCJzZXRJbml0aWFsU3RhdGUiLCJoYXNTZXR0aW5ncyIsImFkZG9uIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInJlbG9hZHMiLCJ0cnVzdGVkIiwiY2xvc2VTZXR0aW5ncyIsInBhbmVsUmVmIiwic2V0dGluZ3NPcGVuIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVmcyIsInNldHRpbmdzcGFuZWwiLCJpc0hpZGRlbiIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJjYXJkTm9kZSIsInRoaXNOb2RlT2Zmc2V0IiwiY29udGFpbmVyT2Zmc2V0IiwiZW5kUG9pbnQiLCJnZXRTdHJpbmciLCJzZXR0aW5nc0NvbXBvbmVudCIsInJlZiIsIlhTdmciLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsImJ1aWxkVGl0bGUiLCJuYW1lSW5kZXgiLCJ2ZXJzaW9uSW5kZXgiLCJhdXRob3JJbmRleCIsInBvcExheWVyIiwibWFrZUxpbmsiLCJtYWtlQnV0dG9uIiwiYWN0aW9uIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bm1vdW50ZWQiLCJsaW5rcyIsImludml0ZSIsInRlc3RlciIsImRvbmF0ZSIsInBhdHJlb24iLCJhdXRob3JJZCIsImF1dGhvckxpbmsiLCJpc1NjYW5uaW5nIiwiVG9vbHRpcCIsImFzY2VuZGluZyIsImlzUGx1Z2lucyIsInJldmVyc2UiLCJvbkFkZG9uQ2hhbmdlcyIsImNvbXBvbmVudERpZE1vdW50Iiwib3BlbkZvbGRlciIsIm9wZW5QYXRoIiwic2hvdWxkRGVsZXRlIiwiY29uZmlybURlbGV0ZSIsInNvcnRPcHRpb25zIiwiZGlyZWN0aW9ucyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiZ2V0QWRkb25zIiwic29ydGVkQWRkb25zIiwiYiIsImNhcCIsImZpcnN0Iiwic2Vjb25kIiwibG9jYWxlQ29tcGFyZSIsInJlbmRlckNoZWNrVXBkYXRlcyIsIlplcmVzUGx1Z2luTGlicmFyeSIsIlBsdWdpblVwZGF0ZXMiLCJjaGVja0FsbCIsInRvb2x0aXBJc1Nob3dpbmciLCJ0b29sdGlwIiwibWFyZ2luTGVmdCIsImNoZWNrVXBkYXRlQnV0dG9uIiwiRW11bGF0ZWRUb29sdGlwIiwiYXR0YWNoRXZlbnRzIiwicmVmcmVzaEljb24iLCJhZGRvbkNhcmRzIiwiZmlsbFJ1bGUiLCJjbGlwUnVsZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsIm9wYWNpdHkiLCJWMkNfQ2hlY2tib3giLCJjaGVja2JveEVsZW1lbnQiLCJjaGVja2JveCIsImNoZWNrYm94SW5uZXIiLCJTZWxlY3QiLCJkcm9wZG93biIsImNyZWF0ZVJlZiIsInNob3dNZW51IiwiaGlkZU1lbnUiLCJvcHQiLCJpc09wZW4iLCJTZWFyY2giLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsInN3aXRjaCIsIlYyQ19Db250ZW50Q29sdW1uIiwiY29udGVudE1vZHVsZSIsImNvbnRlbnRDb2x1bW4iLCJjb250ZW50Q29sdW1uRGVmYXVsdCIsIlYyQ19Dc3NFZGl0b3IiLCJsaW5lcyIsImRldGFjaGVkRWRpdG9yIiwiVjJDX0Nzc0VkaXRvckRldGFjaGVkIiwidXBkYXRlQ3NzIiwic2F2ZUNzcyIsImRldGFjaCIsImRldGFjaGVkIiwiZWRpdG9yIiwiYWNlIiwic2V0VGhlbWUiLCJzZXRNb2RlIiwic2V0U2hvd1ByaW50TWFyZ2luIiwic2V0Rm9udFNpemUiLCJkZXN0cm95IiwicHJldlByb3BzIiwicHJldlN0YXRlIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImRldGFjaGVkUm9vdCIsImNvZGVNaXJyb3IiLCJsaW5lTnVtYmVycyIsIm1vZGUiLCJpbmRlbnRVbml0Iiwic2Nyb2xsYmFyU3R5bGUiLCJfY2NzcyIsImNjc3MiLCJ1cGRhdGVMaW5lQ291bnQiLCJsaW5lQ291bnQiLCJTZXR0aW5nc1RpdGxlIiwiQ2hlY2tib3giLCJib3JkZXJSaWdodCIsImJvcmRlckxlZnQiLCJmb250U2l6ZSIsImFyZyIsImdldFZhbHVlIiwiZHJvb3QiLCJpbmplY3REZXRhY2hlZFJvb3QiLCJCREVycm9yQm91bmRhcnkiLCJoYXNFcnJvciIsImNvbXBvbmVudERpZENhdGNoIiwiRGVsZXRlIiwiRG93bkFycm93IiwiRWRpdCIsIm1hcmdpbk1vZHVsZSIsIm1hcmdpblRvcDYwIiwiVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzIiwicHJldmlldyIsImlzZmV0Y2hpbmciLCJhc3NldENvbXBvbmVudHMiLCJ1cGRhdGVXaGVuRmV0Y2hlZCIsImRlZmF1bHRTZXR0aW5nIiwiUlBDUHJvcHMiLCJhc3NldCIsInVwZGF0ZVByZXZpZXciLCJvcHRpb25zQ29tcG9uZW50cyIsIm9oZ29kb2hmdWNrIiwiX29wdGlvbnNDb21wb25lbnRzIiwiYXJyYXkiLCJpbnB1dFRleHRNb2R1bGVzIiwiSW5wdXRUZXh0IiwicmVtb3ZlS2V5YmluZCIsIl9ob3Jpem9udGFsIiwiaW5wdXRNaW5pIiwic2l6ZTE2Iiwic2l6ZTIwIiwiaW5wdXQiLCJsYXN0RWRpdGVkIiwiaXNUaW1pbmciLCJyb3dNb2R1bGUiLCJmbGV4TW9kdWxlIiwiaW5wdXRNb2R1bGUiLCJzaXplTW9kdWxlMiIsInJvdyIsImZsZXhDaGlsZCIsIklucHV0TnVtYmVyTW9kdWxlcyIsIklucHV0TnVtYmVyIiwiY29sb3JUcmFuc3BhcmVudCIsInNldFZhbHVlIiwiY2xpcGJvYXJkIiwiSW5wdXRDaG9pY2VNb2R1bGVzIiwiSW5wdXRDaG9pY2UiLCJEaXZpZGVyTW9kdWxlcyIsIkRpdmlkZXIiLCJkaXZpZGVyIiwiZGl2aWRlckRlZmF1bHQiLCJEaXNjb3JkQnV0dG9uIiwiUnBjUHJldmlldyIsImFjdGl2ZSIsImNoYW5nZVRhYiIsImFuY2llbnRUYWIiLCJzZXRBY3RpdmUiLCJmbGV4IiwicnBjIiwiaXNBY3RpdmUiLCJQcm9maWxlIiwiUG9wb3V0IiwiVGFiIiwiZW1wdHlDbGFzc2VzIiwiUHJlc2VuY2VFcnJvckNhdGNoZXIiLCJlcnJJbmZvIiwiZW1wdHlTdGF0ZUltYWdlIiwiZW1wdHlTdGF0ZSIsImVtcHR5U3RhdGVIZWFkZXIiLCJlbXB0eVN0YXRlU3VidGV4dCIsInBvcG91dE1vZHVsZXMiLCJVc2VyUG9wb3V0Q29tcG9uZW50IiwiUG9wb3V0UHJvcHMiLCJVc2VyUG9wb3V0IiwicmVuZGVyMSIsImNoYW5uZWxJZCIsImRpc2FibGVVc2VyUHJvZmlsZUxpbmsiLCJfVXNlclBvcG91dCIsInBvcG91dCIsImV4Y2x1ZGVQcm9wZXJ0aWVzIiwicHJvZmlsZU1vZHVsZXMiLCJVc2VyUHJvZmlsZUNvbXBvbmVudCIsIlByb2ZpbGVQcm9wcyIsImNvbm5lY3RlZFByb2ZpbGVTdG9yZSIsIlVzZXJQcm9maWxlIiwicmVuZGVyMiIsInJlbmRlcjMiLCJyZW5kZXI0IiwicHJvZmlsZSIsIlYyQ19MYXllciIsImtleXVwTGlzdGVuZXIiLCJ0cmFuc2Zvcm0iLCJjb21wb25lbnRXaWxsTW91bnQiLCJjaGFuZ2VDYXRlZ29yeSIsInNlYXJjaEtleURvd24iLCJjaGVja0Nvbm5lY3Rpb24iLCJjb25uZWN0IiwiR3VpbGRTdG9yZSIsIkF2YXRhckRlZmF1bHRzIiwiU29ydGVkR3VpbGRTdG9yZSIsInNlbGVjdGVkQ2F0ZWdvcnkiLCJsb2FkaW5nIiwic2VydmVycyIsImNvbm5lY3Rpb24iLCJmZXRjaCIsInNlcnZlciIsImpvaW5lZCIsImVuZCIsInRlcm0iLCJjYXRlZ29yeUJ1dHRvbnMiLCJ0b3RhbCIsInNidiIsImNvbnRlbnRTY3JvbGxlciIsInNlcnZlckNhcmQiLCJwaW5uZWQiLCJhY2NlcHRJbnZpdGUiLCJpbnZpdGVfY29kZSIsImpvaW5FbmRQb2ludCIsImlkZW50aWZpZXIiLCJjcmVkZW50aWFscyIsIndpbmRvd09wdGlvbnMiLCJyb3VuZCIsInNjcmVlblgiLCJzY3JlZW5ZIiwiam9pbldpbmRvdyIsIkJyb3dzZXJXaW5kb3ciLCJ3ZWJDb250ZW50cyIsImxvYWRVUkwiLCJyZXNpemFibGUiLCJtYXhpbWl6YWJsZSIsIm1pbmltaXphYmxlIiwiYWx3YXlzT25Ub3AiLCJjZW50ZXIiLCJ3ZWJQcmVmZXJlbmNlcyIsIm5vZGVJbnRlZ3JhdGlvbiIsImJkU2VydmVyIiwib25saW5lIiwibWVtYmVycyIsImljb25VcmwiLCJuYXRpdmVqb2luIiwic2VydmVyMiIsImd1aWxkTGlzdCIsImdldEZsYXR0ZW5lZEd1aWxkSWRzIiwiZGVmYXVsdExpc3QiLCJERUZBVUxUX0FWQVRBUlMiLCJTZXJ2ZXJDYXJkIiwiZmFsbGJhY2siLCJmbG9vciIsImNvbm5lY3RFbmRQb2ludCIsInJlc3BvbnNlIiwiU2lkZWJhclZpZXciLCJ0b29scyIsIlRvb2xzIiwiVGFiQmFyU2VwYXJhdG9yIiwic2VhcmNoSW5wdXQiLCJUYWJCYXJIZWFkZXIiLCJUYWJCYXJJdGVtIiwibWF4TGVuZ3RoIiwic2VhcmNoaW5wdXQiLCJub3RDb25uZWN0ZWQiLCJjb2x1bW5Nb2R1bGUiLCJtaW5IZWlnaHQiLCJsaW5lSGVpZ2h0IiwiVjJDX1NlcnZlckNhcmQiLCJpbWFnZUVycm9yIiwiY2FyZE1vZHVsZSIsImNhcmQiLCJjYXJkUHJpbWFyeSIsIl9ob3Jpem9udGFsUmV2ZXJzZSIsIndyYXBNb2R1bGUiLCJub1dyYXAiLCJzdHJlYW1lck1vZGVFbmFibGVkIiwib25FcnJvciIsImhhbmRsZUVycm9yIiwiZHJhZ2dhYmxlIiwiaG9yaXpvbnRhbCIsIlYyQ19TaWRlYmFyVmlldyIsIlNjcm9sbGVyIiwiZmFkZSIsImRhcmsiLCJWMkNfUmVsb2FkSWNvbiIsInhtbG5zIiwiVjJDX1Njcm9sbGVyIiwic2Nyb2xsZXJNb2R1bGUxIiwic2Nyb2xsZXJIb3Jpem9udGFsIiwic2Nyb2xsZXJNb2R1bGUyIiwic2lkZWJhclJlZ2lvblNjcm9sbGVyIiwid3JhcHBlckNsYXNzIiwic2Nyb2xsZXJGYWRlIiwic2Nyb2xsZXJDbGFzcyIsImNvbnRlbnRSZWdpb25TY3JvbGxlciIsImNvbnRlbnRSZWdpb25TY3JvbGxlcldyYXAiLCJ0aGVtZUdob3N0Iiwic2Nyb2xsZXJUcmFjayIsIlYyQ19TZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiU2V0dGluZ3NHcm91cCIsIlYyQ19TZXR0aW5nc0dyb3VwIiwiYnV0dG9uQ29tcG9uZW50IiwiVjJDX1NldHRpbmdzVGl0bGUiLCJjbGFzc25hbWVzIiwiZ2V0Q2xhc3NOYW1lIiwiU3dpdGNoSXRlbSIsImJldGEiLCJ1c2VyU2V0dGluZ3NWb2ljZSIsIlYyQ19UYWJCYXJIZWFkZXIiLCJWMkNfVGFiQmFySXRlbSIsIlYyQ19UYWJCYXJTZXBhcmF0b3IiLCJWMkNfVG9vbHMiLCJ0b29sc01vZHVsZSIsInRvb2xzQ29udGFpbmVyIiwiY29udGFpbmVyTW9kdWxlIiwiY2xvc2VCdXR0b24iLCJjbG9zZUJ1dHRvbkJvbGQiLCJrZXliaW5kIiwia2V5YmluZEJvbGQiLCJUb29sdGlwQ2xhc3NlcyIsImdldFRvb2x0aXBDbGFzc2VzIiwiVG9vbHRpcExheWVycyIsImdldFRvb2x0aXBMYXllcnMiLCJnZXRDbGFzcyIsInNpZGVPckNvbG9yIiwidXBwZXJDYXNlIiwidG9vbHRpcENsYXNzIiwiY2xhc3NFeGlzdHMiLCJ0b1B4IiwicHJldmVudEZsaXAiLCJ0b29sdGlwRWxlbWVudCIsImxhYmVsRWxlbWVudCIsInRvb2x0aXBDb250ZW50IiwicG9pbnRlckVsZW1lbnQiLCJ0b29sdGlwUG9pbnRlciIsInBvcG91dHMiLCJjYW5TaG93QWJvdmUiLCJjYW5TaG93QmVsb3ciLCJjYW5TaG93TGVmdCIsImNhblNob3dSaWdodCIsIl9jbGFzc05hbWUiLCJzaG93QWJvdmUiLCJzaG93QmVsb3ciLCJzaG93TGVmdCIsInNob3dSaWdodCIsImNlbnRlckhvcml6b250YWxseSIsImNlbnRlclZlcnRpY2FsbHkiLCJub2RlY2VudGVyIiwiZmluZERPTU5vZGUiLCJWMkNfWFN2ZyJdLCJtYXBwaW5ncyI6Ijs7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7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YUFBTyxFQUFFLFdBQS9DO0FBQTREaHBCLFdBQUssRUFBRTtBQUFDcVQsYUFBSyxFQUFFLE1BQVI7QUFBZ0IyTSxjQUFNLEVBQUU7QUFBeEI7QUFBbkUsS0FGRyxFQUdIbjBCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXbmpCLGFBQVgsQ0FDSSxHQURKLEVBRUk7QUFBQ0MsZUFBUyxFQUFFLFlBQVo7QUFBMEJvOEIsVUFBSSxFQUFFLE1BQWhDO0FBQXdDdWYsY0FBUSxFQUFFO0FBQWxELEtBRkosRUFHSTk4QyxtREFBSSxDQUFDcWtCLEtBQUwsQ0FBV25qQixhQUFYLENBQXlCLE1BQXpCLEVBQWlDO0FBQUM4NEIsT0FBQyxFQUFFO0FBQUosS0FBakMsQ0FISixFQUlJaDZCLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXbmpCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQ0MsZUFBUyxFQUFFLE1BQVo7QUFBb0JvOEIsVUFBSSxFQUFFLFNBQTFCO0FBQXFDdkQsT0FBQyxFQUFFO0FBQXhDLEtBQWpDLENBSkosQ0FIRyxDQUFQO0FBVUg7O0FBaEJxRCxDOzs7Ozs7Ozs7OztBQ0YxRCxtQzs7Ozs7Ozs7Ozs7QUNBQSxxQzs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSwrQjs7Ozs7Ozs7Ozs7QUNBQSxtQzs7Ozs7Ozs7Ozs7QUNBQSx1Qzs7Ozs7Ozs7Ozs7QUNBQSxpQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiZXhwb3J0IGNvbnN0IG1pbmltdW1EaXNjb3JkVmVyc2lvbiA9IFwiMC4wLjMwNlwiO1xyXG5leHBvcnQgY29uc3QgY3VycmVudERpc2NvcmRWZXJzaW9uID0gKHdpbmRvdy5EaXNjb3JkTmF0aXZlICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcCAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbiAmJiB3aW5kb3cuRGlzY29yZE5hdGl2ZS5yZW1vdGVBcHAuZ2V0VmVyc2lvbigpKSB8fCBcIjAuMC4zMDZcIjtcclxuZXhwb3J0IGNvbnN0IG1pblN1cHBvcnRlZFZlcnNpb24gPSBcIjAuMy4wXCI7XHJcbmV4cG9ydCBjb25zdCBiYmRWZXJzaW9uID0gXCIwLjMuNVwiO1xyXG5leHBvcnQgY29uc3QgYmJkQ2hhbmdlbG9nID0ge1xyXG4gICAgZGVzY3JpcHRpb246IFwiQmlnIHRoaW5ncyBhcmUgY29taW5nLlwiLFxyXG4gICAgY2hhbmdlczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiQnVnIEZpeGVzXCIsXHJcbiAgICAgICAgICAgIHR5cGU6IFwiZml4ZWRcIixcclxuICAgICAgICAgICAgaXRlbXM6IFtcclxuICAgICAgICAgICAgICAgIFwiU29tZSBmaXhlcyByZWxhdGVkIHRvIHNob3dpbmcgbW9kYWxzIGluIHRoZSBgQmRBcGlgLlwiLFxyXG4gICAgICAgICAgICAgICAgXCJGaXhlZCB0aGUgb3BlbiBmb2xkZXIgYnV0dG9ucyBmb3IgcGx1Z2lucyBhbmQgdGhlbWVzXCJcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5ncyA9IHtcclxuICAgIFwiQ3VzdG9tIGNzcyBsaXZlIHVwZGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMFwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQ3VzdG9tIGNzcyBhdXRvIHVkcGF0ZVwiOiAgICAge2lkOiBcImJkYS1jc3MtMVwiLCBpbmZvOiBcIlwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IHRydWUsICBjYXQ6IFwiY29yZVwifSxcclxuICAgIFwiQmV0dGVyRGlzY29yZCBCbHVlXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy1iXCIsICBpbmZvOiBcIlJlcGxhY2UgRGlzY29yZCBibHVlIHdpdGggQkQgQmx1ZVwiLCAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IGZhbHNlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIn0sXHJcblxyXG4gICAgLyogQ29yZSAqL1xyXG4gICAgLyogPT09PT09ICovXHJcbiAgICBcIlB1YmxpYyBTZXJ2ZXJzXCI6ICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtMVwiLCAgaW5mbzogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiTWluaW1hbCBNb2RlXCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0yXCIsICBpbmZvOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50cy5cIiwgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBNb2RlXCI6ICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTRcIiwgIGluZm86IFwiT25seSBzaG93IHZvaWNlIGNoYXRcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIkhpZGUgQ2hhbm5lbHNcIjogICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtM1wiLCAgaW5mbzogXCJIaWRlIGNoYW5uZWxzIGluIG1pbmltYWwgbW9kZVwiLCAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiRGFyayBNb2RlXCI6ICAgICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy01XCIsICBpbmZvOiBcIk1ha2UgY2VydGFpbiBlbGVtZW50cyBkYXJrIGJ5IGRlZmF1bHQod2lwKVwiLCAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJWb2ljZSBEaXNjb25uZWN0XCI6ICAgICAgICAgICB7aWQ6IFwiYmRhLWRjLTBcIiwgIGluZm86IFwiRGlzY29ubmVjdCBmcm9tIHZvaWNlIHNlcnZlciB3aGVuIGNsb3NpbmcgRGlzY29yZFwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIjI0IEhvdXIgVGltZXN0YW1wc1wiOiAgICAgICAgIHtpZDogXCJiZGEtZ3MtNlwiLCAgaW5mbzogXCJSZXBsYWNlIDEyaHIgdGltZXN0YW1wcyB3aXRoIHByb3BlciBvbmVzXCIsICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiQ29sb3JlZCBUZXh0XCI6ICAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy03XCIsICBpbmZvOiBcIk1ha2UgdGV4dCBjb2xvciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCIsICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJOb3JtYWxpemUgQ2xhc3Nlc1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy00XCIsIGluZm86IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIiwgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG5cclxuICAgIC8qIENvbnRlbnQgKi9cclxuICAgIFwiQ29udGVudCBFcnJvciBNb2RhbFwiOiAgICAgICAge2lkOiBcImZvcmstcHMtMVwiLCBpbmZvOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlNjYW4gUGx1Z2luc1wiOiAgICAgICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTZcIiwgaW5mbzogXCJTY2FuIHBsdWdpbnMgZm9yIGFueSB0aHJlYXQgdGhhdCBjYW4gYmUgaGlkZGVuIGluc2lkZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2hvdyBUb2FzdHNcIjogICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtMlwiLCBpbmZvOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2Nyb2xsIFRvIFNldHRpbmdzXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtM1wiLCBpbmZvOiBcIkF1dG8tc2Nyb2xscyB0byBhIHBsdWdpbidzIHNldHRpbmdzIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIChvbmx5IGlmIG91dCBvZiB2aWV3KVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJBdXRvbWF0aWMgTG9hZGluZ1wiOiAgICAgICAgICB7aWQ6IFwiZm9yay1wcy01XCIsIGluZm86IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkVuYWJsZSBFZGl0IEJ1dHRvblwiOiAgICAgICAgIHtpZDogXCJmb3JrLXBzLTdcIiwgaW5mbzogXCJFbmFibGUgYW4gRWRpdCBCdXR0b24gb24gdGhlIHBsdWdpbiBhbmQgdGhlbWUgcGFuZWwuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIlRoZW1lcyBpbiBQb3BvdXQgV2luZG93XCI6ICAgIHtpZDogXCJsaWdodGNvcmQtOVwiLCBpbmZvOiBcIkVuYWJsZSB0aGVtZXMgaW4gUG9wb3V0IFdpbmRvdy4gKEZvciBleGFtcGxlLCB3aGVuIGRldGFjaGluZyBzY3JlZW5zaGFyZS4pXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIiwgZXhwZXJpbWVudGFsOiB0cnVlfSxcclxuXHJcbiAgICAvKiBEZXZlbG9wZXIgKi9cclxuICAgIFwiRGV2ZWxvcGVyIE1vZGVcIjogICAgICAgICBcdCAge2lkOiBcImJkYS1ncy04XCIsIGluZm86IFwiRGV2ZWxvcGVyIE1vZGUgVG9nZ2xlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcbiAgICBcIkNvcHkgU2VsZWN0b3JcIjpcdFx0XHQgIHtpZDogXCJmb3JrLWRtLTFcIiwgaW5mbzogXCJBZGRzIGEgXFxcIkNvcHkgU2VsZWN0b3JcXFwiIG9wdGlvbiB0byBjb250ZXh0IG1lbnVzIHdoZW4gZGV2ZWxvcGVyIG1vZGUgaXMgYWN0aXZlXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJkZXZlbG9wZXIgc2V0dGluZ3NcIn0sXHJcblxyXG4gICAgLyoqIExpZ2h0Y29yZCAqL1xyXG4gICAgXCJEaXNhYmxlIEJldHRlckRpc2NvcmRcIjogICAgICB7aWQ6IFwiYmQtZGlzYWJsZVwiLCAgaW5mbzogXCJEaXNhYmxlIEJldHRlcmRpc2NvcmQgKHBsdWdpbnMsIHRoZW1lcywgZXRjKSAoTm90IGltcGxlbWVudGVkKS5cIiwgaW1wbGVtZW50ZWQ6IGZhbHNlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQmx1ciBQZXJzb25hbCBJbmZvcm1hdGlvblwiOiAge2lkOiBcImxpZ2h0Y29yZC02XCIsIGluZm86IFwiQmx1ciBzZW5zaXRpdmUgaW5mb3JtYXRpb25zIGxpa2UgZW1haWwsIHBheW1lbnQgaW5mb3MgYW5kIG1vcmUuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiQ2FsbGluZyBSaW5nIEJlYXRcIjogICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC0yXCIsIGluZm86IFwiRW5hYmxlIERpc2NvcmQncyBzcGVjaWFsIGNhbGxpbmcgYmVhdC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJEZXZlbG9wZXIgT3B0aW9uc1wiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTFcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzICYgTGlnaHRjb3JkJ3MgSW50ZXJuYWwgRGV2ZWxvcGVyIE9wdGlvbnMuIFRoaXMgYWxsb3cgdGhlIFxcXCJFeHBlcmltZW50c1xcXCIgdGFiLCB0aGUgXFxcIkRldmVsb3BlciBPcHRpb25zXFxcIiB0YWIgYW5kIHRoZSBcXFwiTGlnaHRjb3JkIEFwaVxcXCIgc2VjdGlvbi5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJBZCBCbG9ja1wiOiAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTRcIiwgaW5mbzogXCJCbG9jayBhbnkgQk9UIHRoYXQgZG1zIHlvdSB3aXRoIGFuIGludml0ZSBsaW5rLiBFdmVuIGluIGFuIGVtYmVkLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkVuYWJsZSBMaWdodGNvcmQgU2VydmVyc1wiOiAgIHtpZDogXCJsaWdodGNvcmQtNVwiLCBpbmZvOiBcIkVuYWJsZSBMaWdodGNvcmQncyBzZXJ2ZXJzLiBEaXNhYmxpbmcgdGhpcyB3aWxsIGRpc2FibGUgY3VzdG9tIGJhZGdlcy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJEaXNhYmxlIHR5cGluZ1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTdcIiwgaW5mbzogXCJEb24ndCBsZXQgb3RoZXIgc2VlIHlvdSdyZSB0eXBpbmcuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiTGlnaHRjb3JkIFRhYnNcIjogICAgICAgICAgICAge2lkOiBcImxpZ2h0Y29yZC04XCIsIGluZm86IFwiQWxsb3dzIHlvdSB0byBsYXVuY2ggbXVsdGlwbGUgaW5zdGFuY2VzIG9mIExpZ2h0Y29yZCBpbiB0aGUgc2FtZSB3aW5kb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiLCBleHBlcmltZW50YWw6IHRydWV9LFxyXG4gICAgXCJVc2UgTm90aWZpY2F0aW9uIFNoaW1cIjogICAgICB7aWQ6IFwibGlnaHRjb3JkLTEwXCIsIGluZm86IFwiQmFzaWNhbGx5IGRvbid0IHVzZSBXaW5kb3dzJ3MgTm90aWZpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogcHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJ3aW4zMlwiLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwiLCBleHBlcmltZW50YWw6IGZhbHNlfSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkIFdpbmRvdyAqL1xyXG4gICAgXCJBbHdheXMtb24tVG9wXCI6ICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTNcIiwgaW5mbzogXCJFbmFibGUgdGhlIHdpbmRvdydzIEFsd2F5cy1vbi1Ub3AgbW9kZSwgd2hlcmUgTGlnaHRjb3JkIHN0YXlzIG9uIHRvcCBvZiBvdGhlciBhcHBsaWNhdGlvbnMuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFwiTm8gV2luZG93IEJvdW5kc1wiOiAgICAgICAgICAge2lkOiBcIm5vX3dpbmRvd19ib3VuZFwiLCBpbmZvOiBcIkRpc2FibGUgV2luZG93IEJvdW5kcy4gQ2FuIGJlIHVzZWZ1bCBpZiB5b3UgdXNlIGEgd2luZG93IG1hbmFnZXIuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IHByb2Nlc3MucGxhdGZvcm0gIT09IFwibGludXhcIiwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJXaW5kb3dcIn0sXHJcbiAgICBcIkVuYWJsZSBHbGFzc3Ryb25cIjogICAgICAgICAgIHtpZDogXCJlbmFibGVfZ2xhc3N0cm9uXCIsIGluZm86IFwiRW5hYmxlIEdsYXNzdHJvbi4gSWYgeW91J3JlIG5vdCB1c2luZyB0cmFuc3BhcmVudCB0aGVtZXMsIHRoaXMgY2FuIHJlZHVjZSBsYWcuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFxyXG4gICAgLyoqIFJpY2hQcmVzZW5jZSAqL1xyXG4gICAgXCJFbmFibGVcIjogICAgICAgICAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIiwgaW5mbzogXCJFbmFibGUgUmljaFByZXNlbmNlIGJlbG93LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcInN0YXR1c1wifVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb29raWUgPSB7XHJcbiAgICBcImJkYS1ncy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy0yXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtM1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy01XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy02XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtN1wiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLThcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy0wXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0xXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy0yXCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy00XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtNlwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZXMtN1wiOiB0cnVlLFxyXG4gICAgXCJiZGEtZ3MtYlwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLThcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWRjLTBcIjogZmFsc2UsXHJcbiAgICBcImJkYS1jc3MtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0xXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLWRtLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstcHMtMVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTJcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy0zXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNFwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTVcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy02XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtN1wiOiBmYWxzZSxcclxuICAgIFwiZm9yay1lcy0yXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay13cC0xXCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLXdwLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstYmV0YVwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTJcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLXByZXNlbmNlLTFcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC0zXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNFwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTVcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTZcIjogdHJ1ZSxcclxuICAgIFwibGlnaHRjb3JkLTdcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC04XCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtOVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTEwXCI6IGZhbHNlLFxyXG4gICAgXCJub193aW5kb3dfYm91bmRcIjogZmFsc2UsXHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzQ29va2llID0ge307XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSUEMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSUEMgPSB7XHJcbiAgICBcIm5hbWVcIjogXCJMaWdodGNvcmRcIixcclxuICAgIFwiYXBwbGljYXRpb25faWRcIjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIixcclxuICAgIFwic3RhdGVcIjogXCJMaWdodGNvcmQgQ2xpZW50XCIsXHJcbiAgICBcImRldGFpbHNcIjogXCJCcm93c2luZyBEaXNjb3JkXCIsXHJcbiAgICBcInRpbWVzdGFtcHMuc3RhcnRcIjogRGF0ZS5ub3coKSxcclxuICAgIFwiYXNzZXRzLnNtYWxsXCI6IG51bGwsXHJcbiAgICBcImFzc2V0cy5sYXJnZVwiOiBcIjcxMjMyMzgyMTAzNzY4Mjc5MVwiXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbkVycm9ycyA9IFtdO1xyXG5leHBvcnQgY29uc3QgYmR0aGVtZUVycm9ycyA9IFtdOyAvLyBkZWZpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XHJcblxyXG5leHBvcnQgY29uc3QgYmRDb25maWcgPSBPYmplY3QuY3JlYXRlKEJldHRlckRpc2NvcmRDb25maWcpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGJkdGhlbWVzID0ge307XHJcbmV4cG9ydCBjb25zdCBiZHBsdWdpbnMgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBwbHVnaW5Db29raWUgPSB7fTtcclxuZXhwb3J0IGNvbnN0IHRoZW1lQ29va2llID0ge307IiwiaW1wb3J0IGxvY2FsU3RvcmFnZUZpeCBmcm9tIFwiLi9sb2NhbFN0b3JhZ2VGaXhcIjtcclxuaW1wb3J0IGxvYWRpbmdJY29uIGZyb20gXCIuL2xvYWRpbmdJY29uXCI7XHJcbmxvY2FsU3RvcmFnZUZpeCgpO1xyXG5sb2FkaW5nSWNvbigpO1xyXG5cclxuY29uc3QgZGVwcmVjYXRlR2xvYmFsID0gKGtleSwgdmFsdWUpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csIGtleSwge1xyXG4gICAgICAgIGdldCgpIHtcclxuICAgICAgICAgICAgVXRpbHMud2FybihcIkRlcHJlY2F0ZWQgR2xvYmFsXCIsIGBcIiR7a2V5fVwiIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuIFBsZWFzZSBvbmx5IHVzZSBCZEFwaS5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH0pOyAgXHJcbn07XHJcblxyXG5cclxuaW1wb3J0ICogYXMgR2xvYmFscyBmcm9tIFwiLi8wZ2xvYmFsc1wiO1xyXG5cclxuY29uc3QgZ2xvYmFsS2V5cyA9IE9iamVjdC5rZXlzKEdsb2JhbHMpO1xyXG5mb3IgKGNvbnN0IGtleSBvZiBnbG9iYWxLZXlzKSBkZXByZWNhdGVHbG9iYWwoa2V5LCBHbG9iYWxzW2tleV0pO1xyXG5cclxuXHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi9tb2R1bGVzL2JkQXBpXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vbW9kdWxlcy90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQ2xhc3NOb3JtYWxpemVyIGZyb20gXCIuL21vZHVsZXMvY2xhc3NOb3JtYWxpemVyXCI7XHJcblxyXG5kZXByZWNhdGVHbG9iYWwoXCJCRFYyXCIsIEJEVjIpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJwbHVnaW5Nb2R1bGVcIiwgcGx1Z2luTW9kdWxlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwidGhlbWVNb2R1bGVcIiwgdGhlbWVNb2R1bGUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJVdGlsc1wiLCBVdGlscyk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkJERXZlbnRzXCIsIEJERXZlbnRzKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwic2V0dGluZ3NQYW5lbFwiLCBzZXR0aW5nc1BhbmVsKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiRGF0YVN0b3JlXCIsIERhdGFTdG9yZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIkNvbnRlbnRNYW5hZ2VyXCIsIENvbnRlbnRNYW5hZ2VyKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQ2xhc3NOb3JtYWxpemVyXCIsIENsYXNzTm9ybWFsaXplcik7XHJcblxyXG53aW5kb3cuQmRBcGkgPSBCZEFwaTtcclxuXHJcbmltcG9ydCBDb3JlIGZyb20gXCIuL21vZHVsZXMvY29yZVwiO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJtYWluQ29yZVwiLCBDb3JlKTtcclxuXHJcbi8vIFRPRE86IENoYW5nZSBJbml0IG1vZGUgYW5kIHN0b3AgdXNpbmcgQ29yZVdyYXBwZXIuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGJkQ29uZmlnLCBtZXRob2RzKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoYmRDb25maWcpO1xyXG4gICAgICAgIENvcmUuc2V0TWV0aG9kcyhtZXRob2RzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIC8vIGRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIHRoaXMubWFpbkNvcmUpO1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gICAgY29uc3QgdjJMb2FkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgdjJMb2FkZXIuY2xhc3NOYW1lID0gXCJiZC1sb2FkZXJ2MlwiO1xyXG4gICAgdjJMb2FkZXIudGl0bGUgPSBcIkJhbmRhZ2VkQkQgaXMgbG9hZGluZy4uLlwiO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2MkxvYWRlcik7XHJcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBjb250ZW50V2luZG93R2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiKS5nZXQ7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElGcmFtZUVsZW1lbnQucHJvdG90eXBlLCBcImNvbnRlbnRXaW5kb3dcIiwge1xyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50V2luZG93ID0gUmVmbGVjdC5hcHBseShjb250ZW50V2luZG93R2V0dGVyLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5KGNvbnRlbnRXaW5kb3csIHtcclxuICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImxvY2FsU3RvcmFnZVwiKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBvYmpbcHJvcF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbC5iaW5kKG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBpbnRlcmNlcHRpb24gYnkgcGF0Y2hpbmcgUmVmbGVjdC5hcHBseSBhbmQgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWZsZWN0LCBcImFwcGx5XCIsIHt2YWx1ZTogUmVmbGVjdC5hcHBseSwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLCBcImJpbmRcIiwge3ZhbHVlOiBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgd3JpdGFibGU6IGZhbHNlLCBjb25maWd1cmFibGU6IGZhbHNlfSk7XHJcblxyXG4gICAgY29uc3Qgb09wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjtcclxuICAgIFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYXJndW1lbnRzWzFdO1xyXG4gICAgICAgIGlmICh1cmwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImFwaS93ZWJob29rc1wiKSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkob09wZW4sIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICB9O1xyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRGSG91ciB7XHJcbiAgICBpbmplY3QyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHR3ZWx2ZUhvdXIgPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXFxcXHMoQU18UE0pYCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydCA9IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNlwiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gZGF0YS5yZXR1cm5WYWx1ZS5tYXRjaCh0d2VsdmVIb3VyKTtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaGVkIHx8IG1hdGNoZWQubGVuZ3RoICE9PSA0KSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGVkWzNdID09PSBcIkFNXCIpIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMDBcIiA6IG1hdGNoZWRbMV0ucGFkU3RhcnQoMiwgXCIwXCIpfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMTJcIiA6IHBhcnNlSW50KG1hdGNoZWRbMV0pICsgMTJ9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBjYW5jZWxDb3p5ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImNhbGVuZGFyRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ296eSBtb2RlXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ29tcGFjdCA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuVGltZUZvcm1hdHRlciwgXCJkYXRlRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ29tcGFjdCBtb2RlXHJcbiAgICAgICAgdGhpcy5jYW5jZWwyNEhvdXIgPSAoKSA9PiB7Y2FuY2VsQ296eSgpOyBjYW5jZWxDb21wYWN0KCk7fTsgLy8gQ2FuY2VsIGJvdGhcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmUyNEhvdXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsMjRIb3VyKSB0aGlzLmNhbmNlbDI0SG91cigpO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyXHJcbmNvbnN0IENoYW5uZWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDaGFubmVsICYmIGUuZGVmYXVsdC5oYXNDaGFubmVsKVswXS5kZWZhdWx0XHJcbmxldCByZWxhdGlvblNoaXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXApWzBdXHJcbmxldCBETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXHJcblxyXG5jb25zdCBibG9ja2VkID0ge31cclxuXHJcbmxldCB1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXHJcbmZ1bmN0aW9uIGdldEN1cnJlbnRVc2VyKCl7XHJcbiAgICBpZih1c2VyTW9kdWxlKXJldHVybiB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgcmV0dXJuIG51bGxcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEFudGlCb3RETSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuYW50aURNID0gdGhpcy5hbnRpRE0uYmluZCh0aGlzKVxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWVcclxuXHJcbiAgICAgICAgZGlzcGF0Y2hlci5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICBkaXNwYXRjaGVyLnVuc3Vic2NyaWJlKFwiTUVTU0FHRV9DUkVBVEVcIiwgdGhpcy5hbnRpRE0pXHJcbiAgICB9XHJcblxyXG4gICAgYW50aURNKGV2KXtcclxuICAgICAgICBpZighZXYubWVzc2FnZS5hdXRob3IuYm90KXJldHVyblxyXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkID09PSBnZXRDdXJyZW50VXNlcigpLmlkKVxyXG4gICAgICAgIGlmKGV2Lm1lc3NhZ2UuZ3VpbGRfaWQpcmV0dXJuXHJcblxyXG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSBDaGFubmVsTW9kdWxlLmdldENoYW5uZWwoZXYubWVzc2FnZS5jaGFubmVsX2lkKVxyXG4gICAgICAgIGlmKCFjaGFubmVsKXJldHVybiAvLyBtaWdodCBiZSBicm9rZW5cclxuXHJcbiAgICAgICAgaWYoY2hhbm5lbC50eXBlICE9PSAxKXJldHVyblxyXG5cclxuICAgICAgICBpZihibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSlyZXR1cm4gLy8gSWYgdGhlIHVzZXIgdW5ibG9jayB0aGUgYm90LCBEb24ndCBibG9jayBpdCBhZ2Fpbi5cclxuXHJcbiAgICAgICAgaWYoc2Nhbk1lc3NhZ2UoZXYubWVzc2FnZSkpe1xyXG4gICAgICAgICAgICBibG9ja2VkW2V2Lm1lc3NhZ2UuYXV0aG9yLmlkXSA9IHRydWVcclxuICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGBbQWRCbG9ja106IEJsb2NrZWQgJHtldi5tZXNzYWdlLmF1dGhvci51c2VybmFtZX0jJHtldi5tZXNzYWdlLmF1dGhvci5kaXNjcmltaW5hdG9yfWAsIHtcclxuICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcIndhcm5pbmdcIlxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZighcmVsYXRpb25TaGlwTW9kdWxlKXJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cclxuICAgICAgICAgICAgcmVsYXRpb25TaGlwTW9kdWxlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKGV2Lm1lc3NhZ2UuYXV0aG9yLmlkLCB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogXCJDb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgIH0sIDIpXHJcbiAgICAgICAgICAgIGlmKCFETU1vZHVsZSlETU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmNsb3NlUHJpdmF0ZUNoYW5uZWwpWzBdXHJcbiAgICAgICAgICAgIERNTW9kdWxlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbChjaGFubmVsLmlkLCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNjYW5NZXNzYWdlKG1lc3NhZ2Upe1xyXG4gICAgaWYoLyhkaXNjb3JkXFwuZ2d8ZGlzY29yZFxcLmNvbVxcL2ludml0ZVxcL3xkaXNjb3JkYXBwXFwuY29tXFwvaW52aXRlXFwvKS9nLnRlc3QobWVzc2FnZS5jb250ZW50KSlyZXR1cm4gdHJ1ZVxyXG4gICAgaWYoRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkLmdnL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuY29tL2ludml0ZS9cIikgfHwgRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgXCJkaXNjb3JkYXBwLmNvbS9pbnZpdGUvXCIpKXJldHVybiB0cnVlXHJcblxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbn1cclxuZnVuY3Rpb24gRW1iZWRzQ29udGFpbnMobWVzc2FnZSwgc2VhcmNoKXtcclxuICAgIGxldCBlbWJlZHMgPSBtZXNzYWdlLmVtYmVkcyB8fCBbXVxyXG4gICAgaWYoZW1iZWRzLmxlbmd0aCA9PT0gMClyZXR1cm4gZmFsc2VcclxuICAgIHJldHVybiBlbWJlZHMubWFwKGVtYmVkID0+IHtcclxuICAgICAgICBpZihlbWJlZC50eXBlICE9PSBcInJpY2hcIilyZXR1cm4gZmFsc2VcclxuICAgICAgICBpZigoZW1iZWQudGl0bGUgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKChlbWJlZC5kZXNjcmlwdGlvbiB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoKChlbWJlZC5mb290ZXIgfHwgXCJcIikgJiYgZW1iZWQuZm9vdGVyLnRleHQgfHwgXCJcIikuaW5jbHVkZXMoc2VhcmNoKSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgIGlmKChlbWJlZC5maWVsZHMgfHwgW10pLm1hcChlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWUuaW5jbHVkZXMoc2VhcmNoKSB8fCBlLm5hbWUuaW5jbHVkZXMoc2VhcmNoKVxyXG4gICAgICAgIH0pLmluY2x1ZGVzKHRydWUpKXJldHVybiB0cnVlXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgfSkuaW5jbHVkZXModHJ1ZSlcclxufSIsImltcG9ydCB7c2V0dGluZ3NSUEMsIGRlZmF1bHRSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5cclxuY29uc3QgZGlzcGF0Y2hlciA9IEJETW9kdWxlcy5nZXQobT0+bS5EaXNwYXRjaGVyJiZtLmRlZmF1bHQmJm0uZGVmYXVsdC5kaXNwYXRjaClbMF0uZGVmYXVsdFxyXG5jb25zdCBBY3Rpb25UeXBlcyA9IEJETW9kdWxlcy5nZXQobT0+bS5BY3Rpb25UeXBlcylbMF0uQWN0aW9uVHlwZXNcclxuXHJcbmNvbnN0IHNvY2tldElkID0gXCJsaWdodGNvcmQtc3Bvb2Ytc29ja2V0XCJcclxuY29uc3QgcGlkID0gcHJvY2Vzcy5waWRcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDdXN0b21SaWNoUHJlc2VuY2Uge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICB0aGlzLmdhbWUgPSBzZXR0aW5nc1JQQ1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZm9ybWF0ZWRHYW1lKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpcmV0dXJuIG51bGxcclxuICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5nYW1lLm5hbWUgfHwgZGVmYXVsdFJQQy5uYW1lLFxyXG4gICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZ2FtZS5zdGF0ZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICBzbWFsbF9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLnNtYWxsXCJdIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICB9IDogdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBnYW1lXHJcbiAgICB9XHJcblxyXG4gICAgc2VuZEdhbWUoKXtcclxuICAgICAgICBkaXNwYXRjaGVyLmRpc3BhdGNoKHtcclxuICAgICAgICAgICAgdHlwZTogQWN0aW9uVHlwZXMuTE9DQUxfQUNUSVZJVFlfVVBEQVRFLFxyXG4gICAgICAgICAgICBzb2NrZXRJZCxcclxuICAgICAgICAgICAgcGlkLFxyXG4gICAgICAgICAgICBhY3Rpdml0eTogdGhpcy5mb3JtYXRlZEdhbWVcclxuICAgICAgICB9KSAgIFxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpIHtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRW5hYmxpbmcgY3VzdG9tIFJpY2hQcmVzZW5jZVwiKVxyXG5cclxuICAgICAgICB0aGlzLnNldChzZXR0aW5nc1JQQyB8fCBPYmplY3QuY3JlYXRlKGRlZmF1bHRSUEMpKVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRHYW1lKClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCkge1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkRpc2FibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZldGNoQXNzZXRzKGFwcGxpY2F0aW9uSWQpe1xyXG4gICAgICAgIGxldCBhc3NldHMgPSBhd2FpdCBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBc3NldHMpWzBdLmdldEFzc2V0cyhhcHBsaWNhdGlvbklkKVxyXG4gICAgICAgIGlmKGFzc2V0cy51bmRlZmluZWQgJiYgdHlwZW9mIGFzc2V0cy51bmRlZmluZWQgPT09IFwibnVtYmVyXCIpe1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIEFwcGxpY2F0aW9uXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhc3NldHNcclxuICAgIH1cclxuXHJcbiAgICBzZXQoYWN0aXZpdHkpe1xyXG4gICAgICAgIHRoaXMuZ2FtZSA9IGFjdGl2aXR5XHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtwbHVnaW5Db29raWUsIHRoZW1lQ29va2llLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3N9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgbWFpbkNvcmUgZnJvbSBcIi4vY29yZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3QgQmRBcGkgPSB7XHJcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBCRFYyLlJlYWN0OyB9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkgeyByZXR1cm4gQkRWMi5SZWFjdERvbTsgfSxcclxuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gQkRWMi5SZWFjdENvbXBvbmVudDt9LFxyXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7cmV0dXJuIFV0aWxzLldpbmRvd0NvbmZpZ0ZpbGU7fSxcclxuICAgIGdldCBzZXR0aW5ncygpIHtyZXR1cm4gc2V0dGluZ3M7fSxcclxuICAgIGdldCBlbW90ZXMoKSB7cmV0dXJuIG51bGx9LCAvLyBkZXByZWNhdGVkLCBkZWxldGVkIGFsbCBlbW90ZXMgZnJvbSBiZXR0ZXJkaXNjb3JkLlxyXG4gICAgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfSxcclxuICAgIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxufTtcclxuXHJcbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRXaW5kb3dQcmVmZXJlbmNlKGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2Uoa2V5LCB2YWx1ZSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkuaW5qZWN0Q1NTID0gZnVuY3Rpb24gKGlkLCBjc3MpIHtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQoaWQpLCBjc3MpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLmNsZWFyQ1NTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU3R5bGUoRE9NLmVzY2FwZUlEKGlkKSk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIERPTS5hZGRTY3JpcHQoRE9NLmVzY2FwZUlEKGlkKSwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NLnJlbW92ZVNjcmlwdChET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vR2V0IGFub3RoZXIgcGx1Z2luXHJcbi8vbmFtZSA9IG5hbWUgb2YgcGx1Z2luXHJcbkJkQXBpLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICBpZiAoYmRwbHVnaW5zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGJkcGx1Z2luc1tuYW1lXS5wbHVnaW47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbi8vR2V0IEJldHRlckRpc2NvcmQgQ29yZVxyXG5CZEFwaS5nZXRDb3JlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgVXRpbHMud2FybihcIkRlcHJlY2F0aW9uIE5vdGljZVwiLCBgQmRBcGkuZ2V0Q29yZSgpIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuYCk7XHJcbiAgICByZXR1cm4gbWFpbkNvcmU7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBtb2RhbC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxyXG4gKi9cclxuQmRBcGkuYWxlcnQgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIHtjYW5jZWxUZXh0OiBudWxsfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIC0gb3B0aW9ucyB0byBtb2RpZnkgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY2FuY2VsVGV4dD1DYW5jZWxdIC0gdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmtleV0gLSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kYWwuIElmIG5vdCBwcm92aWRlZCwgb25lIGlzIGdlbmVyYXRlZCBhbmQgcmV0dXJuZWRcclxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcclxuICovXHJcbkJkQXBpLnNob3dDb25maXJtYXRpb25Nb2RhbCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vU2hvdyB0b2FzdCBhbGVydFxyXG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIFV0aWxzLnNob3dUb2FzdChjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRBbGwoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKHByb3BzKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3RvdHlwZXMgPSBmdW5jdGlvbiguLi5wcm90b3MpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3RvdHlwZXMocHJvdG9zKTtcclxufTtcclxuXHJcbkJkQXBpLmZpbmRNb2R1bGVCeURpc3BsYXlOYW1lID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUobmFtZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIHJlYWN0IGluc3RhbmNlXHJcbkJkQXBpLmdldEludGVybmFsSW5zdGFuY2UgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICBpZiAoIShub2RlIGluc3RhbmNlb2Ygd2luZG93LmpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgbm9kZSA9IG5vZGVbMF07XHJcbiAgICByZXR1cm4gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKG5vZGUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmxvYWREYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXREYXRhID0gQmRBcGkuc2F2ZURhdGE7XHJcblxyXG4vLyBEZWxldGVzIGRhdGFcclxuQmRBcGkuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5kZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG4vLyBQYXRjaGVzIG90aGVyIGZ1bmN0aW9uc1xyXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBVdGlscy5tb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEV2ZW50IHdoZW4gZWxlbWVudCBpcyByZW1vdmVkXHJcbkJkQXBpLm9uUmVtb3ZlZCA9IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gVXRpbHMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcclxufTtcclxuXHJcbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcclxuQmRBcGkuc3VwcHJlc3NFcnJvcnMgPSBmdW5jdGlvbihtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBVdGlscy5zdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpO1xyXG59O1xyXG5cclxuLy8gVGVzdHMgZm9yIHZhbGlkIEpTT05cclxuQmRBcGkudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICByZXR1cm4gVXRpbHMudGVzdEpTT04oZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gISFwbHVnaW5Db29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1RoZW1lRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXRoZW1lQ29va2llW25hbWVdO1xyXG59O1xyXG5cclxuQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGlkKSB7XHJcbiAgICByZXR1cm4gISFzZXR0aW5nc0Nvb2tpZVtpZF07XHJcbn07XHJcblxyXG5CZEFwaS5lbmFibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCB0cnVlKTtcclxufTtcclxuXHJcbkJkQXBpLmRpc2FibGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCBmYWxzZSk7XHJcbn07XHJcblxyXG5CZEFwaS50b2dnbGVTZXR0aW5nID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiBzZXR0aW5nc1BhbmVsLm9uQ2hhbmdlKGlkLCAhc2V0dGluZ3NDb29raWVbaWRdKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5nZXRCRERhdGEgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0QkREYXRhKGtleSk7XHJcbn07XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2V0QkREYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldEJERGF0YShrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuXHJcblxyXG5jb25zdCBtYWtlQWRkb25BUEkgPSAoY29va2llLCBsaXN0LCBtYW5hZ2VyKSA9PiBuZXcgY2xhc3MgQWRkb25BUEkge1xyXG5cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIG1hbmFnZXIuZm9sZGVyO31cclxuXHJcbiAgICBpc0VuYWJsZWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiAhIWNvb2tpZVtuYW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5kaXNhYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZShuYW1lKSB7XHJcbiAgICAgICAgaWYgKGNvb2tpZVtuYW1lXSkgdGhpcy5kaXNhYmxlKG5hbWUpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5lbmFibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gbWFuYWdlci5yZWxvYWQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KG5hbWUpIHtcclxuICAgICAgICBpZiAobGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtuYW1lXS5wbHVnaW4pIHJldHVybiBsaXN0W25hbWVdLnBsdWdpbjtcclxuICAgICAgICAgICAgcmV0dXJuIGxpc3RbbmFtZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbCgpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobGlzdCkubWFwKGsgPT4gdGhpcy5nZXQoaykpLmZpbHRlcihhID0+IGEpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQmRBcGkuUGx1Z2lucyA9IG1ha2VBZGRvbkFQSShwbHVnaW5Db29raWUsIGJkcGx1Z2lucywgcGx1Z2luTW9kdWxlKTtcclxuQmRBcGkuVGhlbWVzID0gbWFrZUFkZG9uQVBJKHRoZW1lQ29va2llLCBiZHRoZW1lcywgdGhlbWVNb2R1bGUpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmRBcGk7XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQmRBcGkgPSBCZEFwaSIsIi8qIEJERXZlbnRzICovXHJcbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoXCJldmVudHNcIik7XHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBCREV2ZW50cyBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKClcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQkRFdmVudHMgPSB0aGlzXHJcbiAgICB9XHJcbiAgICBkaXNwYXRjaChldmVudE5hbWUsIC4uLmFyZ3MpIHt0aGlzLmVtaXQoZXZlbnROYW1lLCAuLi5hcmdzKTt9XHJcbiAgICBvZmYoZXZlbnROYW1lLCBldmVudEFjdGlvbikge3RoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEFjdGlvbik7fVxyXG59OyIsIi8qKlxyXG4gKiBDcmVkaXRzIHRvIEBoZWxsYm91bmQxMzM3IG9uIGdpdGh1YiBmb3IgdGhlIGNzc1xyXG4gKi9cclxuXHJcbmltcG9ydCBET01Ub29scyBmcm9tIFwiLi9kb210b29sc1wiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcblxyXG5sZXQgc2VsZWN0b3JzXHJcbmNvbnN0IHJlbW92ZURhID0gVXRpbHMucmVtb3ZlRGFcclxuZnVuY3Rpb24gZ2V0U2VsZWN0b3JzKCl7XHJcbiAgICBsZXQgc3RhbmRhcmRTaWRlYmFyVmlldyA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnN0YW5kYXJkU2lkZWJhclZpZXcpWzBdXHJcbiAgICBpZighc3RhbmRhcmRTaWRlYmFyVmlldylyZXR1cm4gbnVsbFxyXG4gICAgbGV0IGRlZmF1bHRDbGFzc05hbWUgPSByZW1vdmVEYShzdGFuZGFyZFNpZGViYXJWaWV3LnN0YW5kYXJkU2lkZWJhclZpZXcpXHJcbiAgICBsZXQgc2VsZWN0cyA9IFtdXHJcbiAgICBsZXQgdXNlclNldHRpbmdzQWNjb3VudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnVzZXJTZXR0aW5nc0FjY291bnQpWzBdXHJcbiAgICBjb25zdCBjaGlsZHJlbiA9IEJETW9kdWxlcy5nZXQoZSA9PiB0eXBlb2YgZS5jaGlsZHJlbiA9PT0gXCJzdHJpbmdcIilbMF1cclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAucGF5bWVudC1pbmZvIC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlc2NyaXB0aW9uICYmIHR5cGVvZiBlLmRlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiICYmIGUuZGVzY3JpcHRpb24uaW5jbHVkZXMoXCJmb3JtVGV4dFwiKSlbMF0uZGVzY3JpcHRpb24pfWApXHJcbiAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUucGF5bWVudFNvdXJjZVJvdylbMF0ucGF5bWVudFNvdXJjZVJvdyl9IC4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnN1YlRleHQgJiYgZS5kZXNjcmlwdGlvbldyYXBwZXIpWzBdLnN1YlRleHQpfWApXHJcbiAgICBpZih1c2VyU2V0dGluZ3NBY2NvdW50KXtcclxuICAgICAgICBzZWxlY3RzLnB1c2goYCNhcHAtbW91bnQgLiR7ZGVmYXVsdENsYXNzTmFtZX0gLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NBY2NvdW50KX0gZGl2Om50aC1jaGlsZCgyKT5kaXY6bnRoLWNoaWxkKDIpPi4ke3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLnZpZXdCb2R5KVswXS52aWV3Qm9keSl9YClcclxuICAgICAgICBzZWxlY3RzLnB1c2goYC4ke3JlbW92ZURhKHVzZXJTZXR0aW5nc0FjY291bnQudXNlclNldHRpbmdzU2VjdXJpdHkpfSAuJHtyZW1vdmVEYShjaGlsZHJlbi5jaGlsZHJlbil9ID4gZGl2Om50aC1jaGlsZCgyKWApXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhzZWxlY3RzKVxyXG4gICAgcmV0dXJuIHNlbGVjdHNcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJsdXJQcml2YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9ycyB8fCBnZXRTZWxlY3RvcnMoKVxyXG5cclxuICAgICAgICBpZighc2VsZWN0b3JzKWNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBzZWxlY3RvcnMgdG8gYmx1ciBwZXJzb25uYWwgaW5mb3JtYXRpb25zLlwiKSlcclxuICAgICAgICBET01Ub29scy5hZGRTdHlsZShcImJsdXJQcml2YXRlXCIsIGBcclxuJHtzZWxlY3RvcnMuam9pbihcIiwgXCIpfSB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDg1LC42OCwuNTMpO1xyXG4gICAgZmlsdGVyOiBibHVyKDRweCk7XHJcbiAgICBvcGFjaXR5OiAuODtcclxufVxyXG5cclxuJHtzZWxlY3RvcnMubWFwKGUgPT4gZStcIjpob3ZlclwiKS5qb2luKFwiLCBcIil9ICB7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMTUwbXMgY3ViaWMtYmV6aWVyKC41NSwuMDksLjY4LC41Myk7XHJcbiAgICBmaWx0ZXI6IG5vbmU7XHJcbiAgICBvcGFjaXR5OiAxO1xyXG59YClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIERPTVRvb2xzLnJlbW92ZVN0eWxlKFwiYmx1clByaXZhdGVcIilcclxuICAgIH1cclxufSIsImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5cclxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcclxuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkNsYXNzTm9ybWFsaXplciA9IHRoaXNcclxuICAgIH1cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZmluZEFsbCh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXRjaERPTU1ldGhvZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIW1hdGNoLmxlbmd0aCB8fCBtYXRjaC5sZW5ndGggPCAyKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2hbMV0uc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hET01NZXRob2RzKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucztcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24odG9rZW4pIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgdG9rZW5zID0gdG9rZW4uc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShjb250YWlucywgdGhpcywgW3Rva2VuLnNwbGl0KFwiIFwiKVswXV0pO1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gdG9rZW5zLmV2ZXJ5KHQgPT4gY29udGFpbnMuY2FsbCh0aGlzLCB0KSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkoYWRkLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oLi4udG9rZW5zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgICAgICAgICAgICB0b2tlbnNbdF0gPSB0b2tlbnNbdF0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KHJlbW92ZSwgdGhpcywgdG9rZW5zKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29sb3JlZFRleHQge1xyXG4gICAgaW5qZWN0Q29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsQ29sb3JlZFRleHQpIHJldHVybjtcclxuICAgICAgICBpZiAoIUJEVjIuTWVzc2FnZUNvbXBvbmVudCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmNhbmNlbENvbG9yZWRUZXh0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2JlZm9yZTogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWYgKCFwcm9wcyB8fCAhcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlQ29udGVudCA9IHByb3BzLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1lc3NhZ2VDb250ZW50LnR5cGUgfHwgIW1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSB8fCBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuZGlzcGxheU5hbWUgIT0gXCJNZXNzYWdlQ29udGVudFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVHlwZSA9IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZTtcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsVHlwZS5fX29yaWdpbmFsTWV0aG9kKSByZXR1cm47IC8vIERvbid0IHBhdGNoIGFnYWluXHJcbiAgICAgICAgICAgIG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZSA9IGZ1bmN0aW9uKHByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG9yaWdpbmFsVHlwZShwcm9wcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSBzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy03XCJdID8gcHJvcHMubWVzc2FnZS5jb2xvclN0cmluZyB8fCBcIlwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLnN0eWxlID0ge2NvbG9yOiByb2xlQ29sb3J9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnaW5hbFR5cGU7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWVzc2FnZUNvbnRlbnQudHlwZS50eXBlLCBvcmlnaW5hbFR5cGUpO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBsZXQgY2xhc3NOYW1lTWFya3VwID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFya3VwKVswXS5tYXJrdXBcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLlwiK2NsYXNzTmFtZU1hcmt1cC5zcGxpdChcIiBcIilbMF0pLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge2JkQ29uZmlnLCBiZHBsdWdpbnMsIGJkdGhlbWVzLCBzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IGRhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IHsgZW5jcnlwdFNldHRpbmdzQ2FjaGUsIGRlY3J5cHRTZXR0aW5nc0NhY2hlLCBwcm9jZXNzRmlsZSB9IGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XHJcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcC5nZXRBcHBQYXRoKCksIFwibm9kZV9tb2R1bGVzXCIpKTtcclxuY2xhc3MgTWV0YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xyXG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IFwiTWV0YUVycm9yXCI7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb3JpZ2luYWxKU1JlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl07XHJcbmNvbnN0IG9yaWdpbmFsQ1NTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPyBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuY3NzXCJdIDogKCkgPT4ge3JldHVybiBudWxsO307XHJcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj8oPzpcXHJcXG58XFxuKVteXFxTXFxyXFxuXSo/XFwqW15cXFNcXHJcXG5dPy87XHJcbmNvbnN0IGVzY2FwZWRBdFJlZ2V4ID0gL15cXFxcQC87XHJcblxyXG5leHBvcnQgbGV0IGFkZG9uQ2FjaGUgPSB7fVxyXG5cclxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29udGVudE1hbmFnZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGltZUNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy53YXRjaGVycyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoRXh0ZW5zaW9ucygpe1xyXG4gICAgICAgIGlmKGhhc1BhdGNoZWQpcmV0dXJuXHJcbiAgICAgICAgaGFzUGF0Y2hlZCA9IHRydWVcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbXCIuanNcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwicGx1Z2luXCIpO1xyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKFwidGhlbWVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBsdWdpbnNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3BsdWdpbnNGb2xkZXIgfHwgKHRoaXMuX3BsdWdpbnNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJwbHVnaW5zL1wiKSkpO31cclxuICAgIGdldCB0aGVtZXNGb2xkZXIoKSB7cmV0dXJuIHRoaXMuX3RoZW1lc0ZvbGRlciB8fCAodGhpcy5fdGhlbWVzRm9sZGVyID0gZnMucmVhbHBhdGhTeW5jKHBhdGgucmVzb2x2ZShiZENvbmZpZy5kYXRhUGF0aCArIFwidGhlbWVzL1wiKSkpO31cclxuXHJcbiAgICBsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpICE9PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0gSlNPTi5wYXJzZShkZWNyeXB0U2V0dGluZ3NDYWNoZShkYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIpKSlcclxuICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShcInt9XCIpKVxyXG4gICAgICAgICAgICAgICAgYWRkb25DYWNoZSA9IHt9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgT2JqZWN0LmtleXMoYWRkb25DYWNoZSlcclxuICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgaWYoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSlyZXR1cm4gZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG5cclxuICAgICAgICAgICAgbGV0IHByb3BzID0gW3tcclxuICAgICAgICAgICAgICAgIGtleTogXCJ0aW1lc3RhbXBcIixcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAga2V5OiBcInJlc3VsdFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwiaGFzaFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIlxyXG4gICAgICAgICAgICB9XVxyXG4gICAgICAgICAgICBmb3IobGV0IHByb3Agb2YgcHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoIShwcm9wLmtleSBpbiB2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlW3Byb3Aua2V5XSAhPT0gcHJvcC50eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodmFsdWUuaGFzaCAhPT0ga2V5KXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnJlc3VsdC5zdXNwZWN0KXsgLy8gcmVmZXRjaCBmcm9tIHJlbW90ZSB0byBiZSBzdXJlIHlvdSdyZSB1cCB0byBkYXRlLlxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgfVxyXG5cclxuICAgIHNhdmVBZGRvbkNhY2hlKCl7XHJcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcIlBsdWdpbkNlcnRpZmllckhhc2hlc1wiLCBlbmNyeXB0U2V0dGluZ3NDYWNoZShKU09OLnN0cmluZ2lmeShhZGRvbkNhY2hlKSkpXHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSBjb250ZW50VHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdID0gZnMud2F0Y2goYmFzZUZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgcmV0dXJuIHBsdWdpbk1vZHVsZS51bmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoZW1lTW9kdWxlLnVubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNQbHVnaW4pIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUubG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLnJlbG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGF3YWl0IHRoZW1lTW9kdWxlLnJlbG9hZFRoZW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVud2F0Y2hDb250ZW50KGNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXJzW2NvbnRlbnRUeXBlXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCByYXdNZXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xyXG4gICAgICAgIGlmIChtZXRhLmluZGV4T2YoXCJNRVRBXCIpIDwgMCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbHMudGVzdEpTT04ocmF3TWV0YSk7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xyXG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcclxuICAgICAgICBwYXJzZWQuZm9ybWF0ID0gXCJqc29uXCI7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICBvdXQuZm9ybWF0ID0gXCJqc2RvY1wiO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFJlcXVpcmUodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSBpc1BsdWdpbiA/IG9yaWdpbmFsSlNSZXF1aXJlIDogb3JpZ2luYWxDU1NSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHNlbGYucGx1Z2luc0ZvbGRlciA6IHNlbGYudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgY29udGVudCA9IFV0aWxzLnN0cmlwQk9NKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIG1ldGEuYWRkZWQgPSBzdGF0cy5hdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLm1vZGlmaWVkID0gc3RhdHMubXRpbWVNcztcclxuICAgICAgICAgICAgbWV0YS5zaXplID0gc3RhdHMuc2l6ZTtcclxuICAgICAgICAgICAgaWYgKCFpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50O1xyXG4gICAgICAgICAgICAgICAgaWYgKG1ldGEuZm9ybWF0ID09IFwianNvblwiKSBtZXRhLmNzcyA9IG1ldGEuY3NzLnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEpLmpvaW4oXCJcXG5cIik7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gYG1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNQbHVnaW4pIHtcclxuICAgICAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlkRXhwb3J0ID0gIVV0aWxzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1ldGEudHlwZSA9IG1vZHVsZS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLndhcm4oXCJNb2R1bGUgTm90IEV4cG9ydGVkXCIsIGAke21ldGEubmFtZX0sIHBsZWFzZSBzdGFydCBzZXR0aW5nIG1vZHVsZS5leHBvcnRzYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlUGxhY2Vob2xkZXJQbHVnaW4oZGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7cGx1Z2luOiB7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICBnZXROYW1lOiAoKSA9PiB7cmV0dXJuIGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lO30sXHJcbiAgICAgICAgICAgICAgICBnZXRBdXRob3I6ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246ICgpID0+IHtyZXR1cm4gZGF0YS5tZXNzYWdlID8gZGF0YS5tZXNzYWdlIDogXCJUaGlzIHBsdWdpbiB3YXMgdW5hYmxlIHRvIGJlIGxvYWRlZC4gQ2hlY2sgdGhlIGF1dGhvcidzIHBhZ2UgZm9yIHVwZGF0ZXMuXCI7fSxcclxuICAgICAgICAgICAgICAgIGdldFZlcnNpb246ICgpID0+IHtyZXR1cm4gXCI/Pz9cIjt9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZSB8fCBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBmaWxlbmFtZTogZGF0YS5maWxlbmFtZSxcclxuICAgICAgICAgICAgc291cmNlOiBkYXRhLnNvdXJjZSA/IGRhdGEuc291cmNlIDogXCJcIixcclxuICAgICAgICAgICAgd2Vic2l0ZTogZGF0YS53ZWJzaXRlID8gZGF0YS53ZWJzaXRlIDogXCJcIlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YodHlwZSkgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcblxyXG4gICAgICAgIGlmKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy02XCJdKXtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcclxuICAgICAgICAgICAgICAgIH0sIChoYXNoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiBoYXNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sIHRydWUpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlW3Jlc3VsdC5oYXNoXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzaDogcmVzdWx0Lmhhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0LnN1c3BlY3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJUaGlzIHBsdWdpbiBtaWdodCBiZSBkYW5nZXJvdXMgKFwiK3Jlc3VsdC5oYXJtK1wiKS5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHt3aW5kb3cucmVxdWlyZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICBjb25zdCBjb250ZW50ID0gd2luZG93LnJlcXVpcmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgaWYoIWNvbnRlbnQubmFtZSlyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDYW5ub3QgZXNjYXBlIHRoZSBJRC5cIiwgZXJyb3I6IG5ldyBFcnJvcihcIkNhbm5vdCByZWFkIHByb3BlcnR5ICdyZXBsYWNlJyBvZiB1bmRlZmluZWRcIil9XHJcbiAgICAgICAgY29udGVudC5pZCA9IFV0aWxzLmVzY2FwZUlEKGNvbnRlbnQubmFtZSk7XHJcbiAgICAgICAgLy9pZighaWQpcmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiSW52YWxpZCBJRFwiLCBlcnJvcjogbmV3IEVycm9yKFwiUGxlYXNlIGZpeCB0aGUgbmFtZSBvZiBcIitmaWxlbmFtZStcIi4gQmV0dGVyRGlzY29yZCBjYW4ndCBlc2NhcGUgYW4gSUQuXCIpfVxyXG4gICAgICAgIGlmIChpc1BsdWdpbikge1xyXG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQudHlwZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29udGVudC5wbHVnaW4gPSBuZXcgY29udGVudC50eXBlKCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYmRwbHVnaW5zW2NvbnRlbnQucGx1Z2luLmdldE5hbWUoKV07XHJcbiAgICAgICAgICAgICAgICBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXSA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIHtuYW1lOiBmaWxlbmFtZSwgZmlsZTogZmlsZW5hbWUsIG1lc3NhZ2U6IFwiQ291bGQgbm90IGJlIGNvbnN0cnVjdGVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja319O31cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBiZHRoZW1lc1tjb250ZW50Lm5hbWVdO1xyXG4gICAgICAgICAgICBiZHRoZW1lc1tjb250ZW50Lm5hbWVdID0gY29udGVudDtcclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgdW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkZWxldGUgd2luZG93LnJlcXVpcmUuY2FjaGVbd2luZG93LnJlcXVpcmUucmVzb2x2ZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgdW5sb2FkZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fTt9XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoZmlsZW5hbWUsIHR5cGUpIHtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgdHJ5IHt3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiBmYWxzZTt9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGNhbnRVbmxvYWQgPSB0aGlzLnVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHR5cGUpO1xyXG4gICAgICAgIGlmIChjYW50VW5sb2FkKSByZXR1cm4gY2FudFVubG9hZDtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE5ld0NvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBmaWxlRW5kaW5nID0gaXNQbHVnaW4gPyBcIi5wbHVnaW4uanNcIiA6IFwiLnRoZW1lLmNzc1wiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VkaXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoYmFzZWRpcik7XHJcbiAgICAgICAgY29uc3QgY29udGVudExpc3QgPSBPYmplY3QudmFsdWVzKGlzUGx1Z2luID8gYmRwbHVnaW5zIDogYmR0aGVtZXMpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjb250ZW50TGlzdC5maWx0ZXIodCA9PiAhZmlsZXMuaW5jbHVkZXModC5maWxlbmFtZSkpLm1hcChjID0+IGlzUGx1Z2luID8gYy5wbHVnaW4uZ2V0TmFtZSgpIDogYy5uYW1lKTtcclxuICAgICAgICBjb25zdCBhZGRlZCA9IGZpbGVzLmZpbHRlcihmID0+ICFjb250ZW50TGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKGZpbGVFbmRpbmcpICYmIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmKSkuaXNGaWxlKCkpO1xyXG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRBbGxDb250ZW50KHR5cGUpIHtcclxuICAgICAgICB0aGlzLnBhdGNoRXh0ZW5zaW9ucygpXHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlZGlyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aChmaWxlRW5kaW5nKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gYXdhaXQgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikgZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICBsb2FkUGx1Z2lucygpIHtyZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudChcInBsdWdpblwiKTt9XHJcbiAgICBsb2FkVGhlbWVzKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwidGhlbWVcIik7fVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb250ZW50TWFuYWdlciAtIGNvdWxkIGJlIGRhbmdlcm91cyBmb3Igbm93XHJcbiAqLyIsImltcG9ydCB7YmRDb25maWcsIG1pblN1cHBvcnRlZFZlcnNpb24sIGJiZFZlcnNpb24sIHNldHRpbmdzQ29va2llLCBiZHBsdWdpbkVycm9ycywgYmR0aGVtZUVycm9ycywgYmJkQ2hhbmdlbG9nLCBkZWZhdWx0Q29va2llLCBjdXJyZW50RGlzY29yZFZlcnNpb24sIGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgc2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBwbHVnaW5Nb2R1bGUgZnJvbSBcIi4vcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvYmRMb2dvXCI7XHJcbmltcG9ydCBUb29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IExpZ2h0Y29yZExvZ28gZnJvbSBcIi4uL3N2Zy9saWdodGNvcmRcIjtcclxuaW1wb3J0IFBsdWdpbkNlcnRpZmllciBmcm9tIFwiLi9wbHVnaW5DZXJ0aWZpZXJcIjtcclxuaW1wb3J0IGRpc3RhbnQsIHsgdXVpZHY0IH0gZnJvbSBcIi4vZGlzdGFudFwiO1xyXG5pbXBvcnQgRW1vamlNb2R1bGUgZnJvbSBcIi4vZW1vamlNb2R1bGVcIlxyXG5pbXBvcnQge3JlbW90ZSBhcyBlbGVjdHJvbn0gZnJvbSBcImVsZWN0cm9uXCJcclxuaW1wb3J0IHYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5cclxubGV0IG1ldGhvZHNcclxuZnVuY3Rpb24gQ29yZSgpIHt9XHJcblxyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XHJcbiAgICBPYmplY3QuYXNzaWduKGJkQ29uZmlnLCBjb25maWcpO1xyXG59O1xyXG5cclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvcmUucHJvdG90eXBlLCBcIm1ldGhvZHNcIiwge1xyXG4gICAgZ2V0KCl7XHJcbiAgICAgICAgcmV0dXJuIG1ldGhvZHNcclxuICAgIH1cclxufSlcclxuXHJcbkNvcmUucHJvdG90eXBlLnNldE1ldGhvZHMgPSBmdW5jdGlvbihtKSB7XHJcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XHJcbiAgICBtZXRob2RzID0gbVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuaGFzU3RhcnRlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5oYXNTdGFydGVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5mbGF0KSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBiYmRWZXJzaW9uICsgXCIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9sZCB2ZXJzaW9uIChcIiArIGN1cnJlbnREaXNjb3JkVmVyc2lvbiArIFwiKSBvZiBEaXNjb3JkLiBQbGVhc2UgdXBkYXRlIHlvdXIgRGlzY29yZCBpbnN0YWxsYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmRDb25maWcudmVyc2lvbiA8IG1pblN1cHBvcnRlZFZlcnNpb24pIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJkQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIGJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5FRCkge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJhbmRhZ2VkQkQgZG9lcyBub3Qgd29yayB3aXRoIEVuaGFuY2VkRGlzY29yZC4gUGxlYXNlIHVuaW5zdGFsbCBvbmUgb2YgdGhlbS5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3aW5kb3cuV2ViU29ja2V0ICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZSAmJiB3aW5kb3cuV2ViU29ja2V0Lm5hbWUuaW5jbHVkZXMoXCJQYXRjaGVkXCIpKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggUG93ZXJjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEF0dHJpYnV0ZXMuYmluZCh0aGlzKSwgXCJMQyBQbHVnaW4gQ2VydGlmaWVyIFBhdGNoXCIpKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIHRoaXMuaW5pdFNldHRpbmdzKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xyXG4gICAgQkRWMi5pbml0aWFsaXplKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XHJcbiAgICBzZXR0aW5nc1BhbmVsLmluaXRpYWxpemVTZXR0aW5ncygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIEFkZG9ucyBDYWNoZVwiKVxyXG4gICAgYXdhaXQgY29udGVudE1hbmFnZXIubG9hZEFkZG9uQ2VydGlmaWVyQ2FjaGUoKVxyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XHJcbiAgICBhd2FpdCBwbHVnaW5Nb2R1bGUubG9hZFBsdWdpbnMoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWVzKCk7XHJcblxyXG4gICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIEJ1ZmZlci5mcm9tKERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiKSwgXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZGMtMFwiXSkgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idG4uYnRuLWRpc2Nvbm5lY3RcIikuY2xpY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIFBsdWdpbkNlcnRpZmllci5zdGFydCgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIikubGVuZ3RoKSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XHJcbiAgICB0aGlzLmluaXRPYnNlcnZlcigpO1xyXG5cclxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkge1xyXG4gICAgICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgICAgIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBiZHBsdWdpbkVycm9ycywgdGhlbWVzOiBiZHRoZW1lRXJyb3JzfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJldmlvdXNWZXJzaW9uID0gRGF0YVN0b3JlLmdldEJERGF0YShcInZlcnNpb25cIik7XHJcbiAgICBpZiAoYmJkVmVyc2lvbiA+IHByZXZpb3VzVmVyc2lvbikge1xyXG4gICAgICAgIGlmIChiYmRDaGFuZ2Vsb2cpIHRoaXMuc2hvd0NoYW5nZWxvZ01vZGFsKGJiZENoYW5nZWxvZyk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcInZlcnNpb25cIiwgYmJkVmVyc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgRW1vamlNb2R1bGUuc3RhcnQoKVxyXG5cclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hTb2NpYWwuYmluZCh0aGlzKSwgXCJCRCBTb2NpYWwgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFBpbGxzLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgUGlsbHMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFNlcGFyYXRvci5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFNlcGFyYXRvciBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaE1lc3NhZ2VIZWFkZXIuYmluZCh0aGlzKSwgXCJCRCBCYWRnZSBDaGF0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVtYmVyTGlzdC5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIE1lbWJlciBMaXN0IFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0YWNobWVudC5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcclxuXHJcbiAgICBpZihiZENvbmZpZy5oYXZlSW5zdGFsbGVkRGVmYXVsdCl7XHJcbiAgICAgICAgbGV0IGFsZXJ0ID0gVXRpbHMuYWxlcnQoXCJGaXJzdCBJbnN0YWxsYXRpb25cIiwgXCJBcyBpdCBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaW5zdGFsbCBMaWdodGNvcmQsIFdlIGFkZGVkIHR3byBkZWZhdWx0IHRoZW1lcyBhbmQgb25lIGRlZmF1bHQgcGx1Z2luIGluIHlvdXIgcGx1Z2luL3RoZW1lIGZvbGRlci4gQ2hlY2sgaXQgaW4gdGhlIFBsdWdpbi9UaGVtZSBzZXR0aW5ncy5cIilcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBhbGVydC5vbkNsb3NlKHJlc29sdmUpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IGxvZ28gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudCA+IGRpdi50eXBlV2luZG93cy0xemEtbjcud2l0aEZyYW1lLWhhWWx0SS50aXRsZUJhci1BQzRwR1YuaG9yaXpvbnRhbFJldmVyc2UtM3RSalk3LmZsZXgtMU8xR0tZLmRpcmVjdGlvblJvd1JldmVyc2UtbThJaklxLmp1c3RpZnlTdGFydC0yTkRGemkuYWxpZ25TdHJldGNoLURwR1BmMy5kYS10eXBlV2luZG93cy5kYS13aXRoRnJhbWUuZGEtdGl0bGVCYXIuZGEtaG9yaXpvbnRhbFJldmVyc2UuZGEtZmxleC5kYS1kaXJlY3Rpb25Sb3dSZXZlcnNlLmRhLWp1c3RpZnlTdGFydC5kYS1hbGlnblN0cmV0Y2ggPiBkaXYud29yZG1hcmtXaW5kb3dzLTF2MGxZRC53b3JkbWFyay0yaUREZm0uZGEtd29yZG1hcmtXaW5kb3dzLmRhLXdvcmRtYXJrXCIpXHJcbiAgICBpZihsb2dvKXtcclxuICAgICAgICBsb2dvLnN0eWxlLnRvcCA9IFwiM3B4XCJcclxuICAgICAgICBsb2dvLmlubmVySFRNTCA9IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIxMFwiIHdpZHRoPVwiNzBcIiB2aWV3Qm94PVwiMCAwIDcyLjU0IDEwXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTVweCwgbWFyZ2luLXRvcDogMTBweFwiPlxyXG4gICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNDQuODEsOS42N1Y2LjMzYzAtMS4yMSwyLjEzLTEuNDksMi43OC0uMjhsMi0uODFBMy41MywzLjUzLDAsMCwwLDQ2LjIsM2MtMS45MiwwLTMuODEsMS4xMy0zLjgxLDMuMzNWOS42N2MwLDIuMjEsMS44OSwzLjMzLDMuNzcsMy4zM2EzLjg3LDMuODcsMCwwLDAsMy40NS0yLjE4bC0yLjEyLTFDNDcsMTEuMTcsNDQuODEsMTAuODUsNDQuODEsOS42N1pNMTAuNjgsMTIuODloMi40MVYzLjE3SDEwLjY4Wk03MS43NiwzLjE0SDY4LjE5VjcuMjNMNzAuNTcsOS40di00aDEuMjdjLjgxLDAsMS4yMS40MSwxLjIxLDF2M2MwLC42My0uMzgsMS4wNS0xLjIxLDEuMDVINjguMTh2Mi4zMWgzLjU3YzEuOTIsMCwzLjcyLTEsMy43Mi0zLjJWNi4zOUM3NS40OCw0LjEzLDczLjY4LDMuMTQsNzEuNzYsMy4xNFpNNTQuMjIsM2MtMiwwLTQsMS4xLTQsMy4zNFY5LjY2YzAsMi4yMywyLDMuMzQsNCwzLjM0czMuOTUtMS4xMSwzLjk1LTMuMzRWNi4zNEM1OC4xOSw0LjExLDU2LjIsMyw1NC4yMiwzWm0xLjU1LDYuNjZjMCwuNy0uNzgsMS4wNi0xLjU0LDEuMDZzLTEuNTUtLjM1LTEuNTUtMS4wNlY2LjM0YzAtLjcyLjc1LTEuMSwxLjUtMS4xczEuNTkuMzUsMS41OSwxLjFaTTY2Ljg0LDYuMzRjMC0yLjI5LTEuNTgtMy4yLTMuNTUtMy4ySDU5LjQ2djkuNzNoMi40NVY5Ljc3aC40M2wyLjIyLDMuMDloM0w2NSw5LjUyQzY2LjEzLDkuMTUsNjYuODQsOC4xNCw2Ni44NCw2LjM0Wk02My4zMyw3LjY1SDYxLjkxVjUuNDNoMS40MkExLjExLDEuMTEsMCwxLDEsNjMuMzMsNy42NVpNMjkuODMsMTNoMi40MlYzLjA2SDI5LjgzVjYuNzNsLTMsMFYzLjA5SDI0Ljd2OS43OGgyLjE0VjguNjhsMywwWk0xNy4xNiw5Ljc2VjYuNDJjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MWEzLjU1LDMuNTUsMCwwLDAtMy4zNi0yLjI0Yy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5Ljc2YzAsMi4yMSwyLDMuMTUsMy45LDMuMTVzMy41OC0xLDMuNTgtM1Y3LjU4SDE4Ljc5bDAsMS4zNkgyMC4zdi43N0MyMC4zLDEwLjkyLDE3LjE2LDEwLjk0LDE3LjE2LDkuNzZaXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0yLjkzIC0zKVwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIzNS45MSAwLjA2IDM4LjQzIDAuMDYgMzguNDMgMS44NCAzNS45MiAxLjgxIDM1Ljk3IDEwIDMzLjU1IDEwIDMzLjQ5IDEuNzUgMzAuOTggMS43NCAzMC45OCAwLjA2IDMzLjQ5IDAuMDYgMzUuOTEgMC4wNlwiLz5cclxuICAgIDxwb2x5Z29uIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBwb2ludHM9XCIwIDkuOTcgNi41IDEwIDYuNSA3LjYzIDIuNDEgNy42MyAyLjQxIDAuMjYgMCAyLjI2IDAgOS45N1wiLz5cclxuPC9zdmc+YFxyXG4gICAgfVxyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hBdHRyaWJ1dGVzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgYXR0cmlic1BhdGNocyA9IFtdXHJcbiAgICB0aGlzLmNhbmNlbFBhdGNoQXR0cmlidXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGF0dHJpYnNQYXRjaHMuZm9yRWFjaChlID0+IGUoKSlcclxuICAgIH1cclxuXHJcbiAgICB3aGlsZSghdjIuTWVzc2FnZUNvbXBvbmVudClhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSlcclxuICAgIFxyXG4gICAgLy8gVE9ETzogdHJ5IHRvIHBhdGNoIGNvcnJlY3RseSB0aGUgdXNlciBwb3BvdXQgb24gYSBuZXh0IHVwZGF0ZVxyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRGlzY29yZFRhZ1wiKVxyXG4gICAgLnRoZW4oRGlzY29yZFRhZyA9PiB7XHJcbiAgICAgICAgbGV0IERpc2NvcmRUYWdDb21wID0gRGlzY29yZFRhZy5kZWZhdWx0XHJcbiAgICAgICAgRGlzY29yZFRhZy5kZWZhdWx0ID0gZnVuY3Rpb24ocHJvcHMpe1xyXG4gICAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgPSBEaXNjb3JkVGFnQ29tcChwcm9wcylcclxuXHJcbiAgICAgICAgICAgIGxldCBpZCA9IHV1aWR2NCgpXHJcblxyXG4gICAgICAgICAgICBsZXQgYmFkZ2VEaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCI1cHhcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIGtleTogXCJiYWRnZXMtXCIraWQsXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5oZXJpdFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKVxyXG5cclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW3JldHVyblZhbHVlXVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wcy51c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHByb3BzLnVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpeyAvLyBOb3QgVGhvbWl6OiBMaWdodGNvcmQgRGV2ZWxvcGVyLCBQaG9yY3lzOiBMaWdodGNvcmQgRGV2ZWxvcGVyXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goYmFkZ2VEaXYpXHJcbiAgICAgICAgICAgIGxldCBkaXYgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgY2hpbGRyZW4pXHJcbiAgICAgICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBwcm9wcy51c2VyLCBmYWxzZSlcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkaXZcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZSl7IC8vIHRoaXMgY2FuIGJlIGEgYmxvY2tlZCBtZXNzYWdlIChub3Qgb3BlbmVkKVxyXG4gICAgICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wiZGF0YS1tZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXHJcbiAgICAgICAgfVxyXG4gICAgfX0pKVxyXG4gICAgICAgIC8qXHJcbiAgICBhdHRyaWJzUGF0Y2hzLnB1c2goVXRpbHMubW9ua2V5UGF0Y2godjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzW1wibWVzc2FnZS1pZFwiXSA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMubWVzc2FnZS5pZFxyXG4gICAgfX0pKSovXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgdGltZXNDaGVja2VkID0gMDtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfWApLmxlbmd0aCA+IDApIHRpbWVzQ2hlY2tlZCsrO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoYmRDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAodGltZXNDaGVja2VkID49IDUwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJsb2FkaW5nXCIpIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKCkgPT4ge3NldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7fSk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluamVjdEV4dGVybmFscyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gTm8gZXh0ZXJuYWxzXHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xyXG4gICAgaWYoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSAmJiAhRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSl7XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc0Nvb2tpZSwgZGVmYXVsdENvb2tpZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCBkZWZhdWx0UlBDKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2V0dGluZ3NQYW5lbC5sb2FkU2V0dGluZ3MoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gZGVmYXVsdENvb2tpZSkge1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbc2V0dGluZ10gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9IGRlZmF1bHRDb29raWVbc2V0dGluZ107XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnByb3RvdHlwZSAmJiBlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zKVxyXG4gICAgLnRoZW4oc2V0dGluZ01vZHVsZSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBnZXRQcmVkaWNhdGVTZWN0aW9ucyA9IHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnNcclxuICAgICAgICBzZXR0aW5nTW9kdWxlLmRlZmF1bHQucHJvdG90eXBlLmdldFByZWRpY2F0ZVNlY3Rpb25zID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldFByZWRpY2F0ZVNlY3Rpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG5cclxuICAgICAgICAgICAgaWYoIXJlc3VsdFsxXSlyZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdFsxXS5zZWN0aW9uID09PSBcIk15IEFjY291bnRcIil7IC8vIHVzZXIgc2V0dGluZ3MsIG5vdCBndWlsZCBzZXR0aW5nc1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvcGVkID0gW11cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcblxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uc2V0dGluZ3NQYW5lbC5yZW5kZXJTaWRlYmFyKHRoaXMpKVxyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlKHBvcGVkWzBdKXtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwb3BlZC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgfSlcclxufTtcclxuXHJcblxyXG5sZXQgY2xhc3NOYW1lTGF5ZXJcclxubGV0IGNsYXNzTmFtZVNvY2lhbExpbmtzXHJcbmxldCBjbGFzc05hbWVNb2RhbFxyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdE9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgbWFpbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW5Nb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHBsdWdpbk1vZHVsZS5yYXdPYnNlcnZlcihtdXRhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxyXG4gICAgICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG5cclxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZUxheWVyKWNsYXNzTmFtZUxheWVyID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXJcclxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZVNvY2lhbExpbmtzKWNsYXNzTmFtZVNvY2lhbExpbmtzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zb2NpYWxMaW5rcyAmJiB0eXBlb2YgZS5zb2NpYWxMaW5rcyA9PT0gXCJzdHJpbmdcIilbMF0uc29jaWFsTGlua3NcclxuICAgICAgICAgICAgaWYoIWNsYXNzTmFtZU1vZGFsKWNsYXNzTmFtZU1vZGFsID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tb2RhbCAmJiB0eXBlb2YgZS5tb2RhbCA9PT0gXCJzdHJpbmdcIiAmJiBlLmlubmVyICYmIHR5cGVvZiBlLmlubmVyID09PSBcInN0cmluZ1wiICYmICFlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSlbMF0ubW9kYWxcclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIikgPT09IFwiR1VJTERfU0VUVElOR1NcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lU29jaWFsTGlua3MpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnRFbGVtZW50ID09IGRvY3VtZW50LmJvZHkgJiYgbm9kZS5xdWVyeVNlbGVjdG9yKFwiI2FjZV9zZXR0aW5nc21lbnVcIikpIG5vZGUuaWQgPSBcImFjZV9zZXR0aW5nc21lbnVfY29udGFpbmVyXCI7XHJcblxyXG4gICAgICAgICAgICAvLyBFbW9qaSBQaWNrZXJcclxuICAgICAgICAgICAgLy9ub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYW5pbWF0b3JMZWZ0LTFFUXhVMFwiKVxyXG4gICAgICAgICAgICAvL2lmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVMYXllcjIpICYmIG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVFbW9qaVBpY2tlcikubGVuZ3RoICAmJiAhbm9kZS5xdWVyeVNlbGVjdG9yKFwiLlwiK2NsYXNzTmFtZUVtb2ppUGlja2VyKS5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVBbmltYXRvckxlZnQpKSBxdWlja0Vtb3RlTWVudS5vYnNDYWxsYmFjayhub2RlKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbWFpbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zaG93Q2hhbmdlbG9nTW9kYWwgPSBmdW5jdGlvbihvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5hbGVydCA9IGZ1bmN0aW9uKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hTb2NpYWwgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNvY2lhbFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBUYWJCYXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIlRhYkJhclwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFUYWJCYXIpIHJldHVybjtcclxuICAgIHRoaXMuc29jaWFsUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChUYWJCYXIucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCB8fCBjaGlsZHJlbi5sZW5ndGggPCAzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDNdLnR5cGUuZGlzcGxheU5hbWUgIT09IFwiU2VwYXJhdG9yXCIpIHJldHVybjtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUudG9TdHJpbmcoKS5pbmNsdWRlcyhcInNvY2lhbExpbmtzXCIpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKEFuY2hvcikge1xyXG4gICAgICAgICAgICBsZXQgc29jaWFsTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNvY2lhbExpbmtzKVswXVxyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09uZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWwoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rIFwiK3NvY2lhbE1vZHVsZTEubGluaywgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZSA9IG5ld09uZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZUNvbG9yTXV0ZWQsXHJcbiAgICAgICAgICAgIHNpemVzLFxyXG4gICAgICAgICAgICBjbGFzc05hbWVWZXJzaW9uSGFzaFxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yTXV0ZWQpWzBdLmNvbG9yTXV0ZWQsXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnZlcnNpb25IYXNoKVswXS52ZXJzaW9uSGFzaFxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkhhc2ggPSBgKCR7YmRDb25maWcuaGFzaCA/IGJkQ29uZmlnLmhhc2guc3Vic3RyaW5nKDAsIDcpIDogYmRDb25maWcuYnJhbmNofSlgO1xyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWwgPSBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gfSwgYExpZ2h0Y29yZCAke2VsZWN0cm9uLmdldEdsb2JhbChcIkJ1aWxkSW5mb1wiKS52ZXJzaW9ufSBgLCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IGNsYXNzTmFtZVZlcnNpb25IYXNoK1wiIGRhLXZlcnNpb25IYXNoXCJ9LCBgKCR7KGVsZWN0cm9uLmdldEdsb2JhbChcIkJ1aWxkSW5mb1wiKS5jb21taXQgfHwgXCJVbmtub3duXCIpLnNsaWNlKDAsIDcpfSlgKSksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBgJHtjbGFzc05hbWVDb2xvck11dGVkfSAke3NpemVzLnNpemUxMn1gfSwgYEJCRCAke2JiZFZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIHZlcnNpb25IYXNoKSlcclxuICAgICAgICBdXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVmVyc2lvbnMgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlO1xyXG4gICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWxWZXJzaW9ucyguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4uc3BsaWNlKDEsIDAsIGFkZGl0aW9uYWwpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgIH07XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5jb25zdCBnZXRHdWlsZENsYXNzZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGd1aWxkc1dyYXBwZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIndyYXBwZXJcIiwgXCJ1bnJlYWRNZW50aW9uc0JhclwiKTtcclxuICAgIGNvbnN0IGd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZ3VpbGRzRXJyb3JcIiwgXCJzZWxlY3RlZFwiKTtcclxuICAgIGNvbnN0IHBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImJsb2JDb250YWluZXJcIik7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRMaXN0SXRlbXMgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmd1aWxkTGlzdEl0ZW1zUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEd1aWxkQ2xhc3NlcyA9IGdldEd1aWxkQ2xhc3NlcygpO1xyXG4gICAgY29uc3QgbGlzdEl0ZW1DbGFzcyA9IEd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICBjb25zdCBibG9iQ2xhc3MgPSBHdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICBjb25zdCByZWFjdEluc3RhbmNlID0gQkRWMi5nZXRJbnRlcm5hbEluc3RhbmNlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke2xpc3RJdGVtQ2xhc3N9IC4ke2Jsb2JDbGFzc31gKS5wYXJlbnRFbGVtZW50KTtcclxuICAgIGNvbnN0IEd1aWxkQ29tcG9uZW50ID0gcmVhY3RJbnN0YW5jZS5yZXR1cm4udHlwZTtcclxuICAgIGlmICghR3VpbGRDb21wb25lbnQpIHJldHVybjtcclxuICAgIHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkQ29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhLnJldHVyblZhbHVlICYmIGRhdGEudGhpc09iamVjdCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkRGF0YSA9IGRhdGEudGhpc09iamVjdC5wcm9wcztcclxuICAgICAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZVxyXG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIGNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIGNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSBjbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcclxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lID0gY2xhc3NOYW1lXHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEd1aWxkUGlsbHMgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmd1aWxkUGlsbFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBndWlsZFBpbGwgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmICFtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LnRvU3RyaW5nICYmIG0uZGVmYXVsdC50b1N0cmluZygpLmluY2x1ZGVzKFwidHJhbnNsYXRlM2RcIikpO1xyXG4gICAgaWYgKCFndWlsZFBpbGwpIHJldHVybjtcclxuICAgIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXTtcclxuICAgICAgICBpZiAocHJvcHMudW5yZWFkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICBpZiAocHJvcHMuc2VsZWN0ZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgaWYgKHByb3BzLmhvdmVyZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWhvdmVyZWRcIjtcclxuICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IEd1aWxkcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiR3VpbGRzXCIpO1xyXG4gICAgY29uc3QgZ3VpbGRDb21wb25lbnRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJyZW5kZXJMaXN0SXRlbVwiKTtcclxuICAgIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcclxuICAgIGNvbnN0IEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBndWlsZENvbXBvbmVudHMuU2VwYXJhdG9yKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xyXG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXS5wcm9wcy5jaGlsZHJlblszXS50eXBlID0gR3VpbGRTZXBhcmF0b3I7XHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEF0dGFjaG1lbnQgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICh0aGlzLkF0dGFjaG1lbnRQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgQXR0YWNobWVudCA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF0dGFjaG1lbnRcIilbMF0gLy8gdGVtcG9yYXJ5XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFBdHRhY2htZW50IHx8ICFBdHRhY2htZW50LmRlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuQXR0YWNobWVudFBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goQXR0YWNobWVudCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBpZighc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pcmV0dXJuXHJcbiAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdIHx8IG51bGxcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuXHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXR0YWNobWVudCB8fCAhYXR0YWNobWVudC51cmwpcmV0dXJuXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcclxuICAgICAgICAgICAgaWQ6IFwiY2VydGlmaWVkLVwiK2lkXHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgUGx1Z2luQ2VydGlmaWVyLnBhdGNoKGF0dGFjaG1lbnQsIFwiY2VydGlmaWVkLVwiK2lkKVxyXG4gICAgfX0pXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoTWVzc2FnZUhlYWRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMubWVzc2FnZUhlYWRlclBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBNZXNzYWdlSGVhZGVyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJNZXNzYWdlVGltZXN0YW1wXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIUFuY2hvciB8fCAhTWVzc2FnZUhlYWRlciB8fCAhTWVzc2FnZUhlYWRlci5kZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLm1lc3NhZ2VIZWFkZXJQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lc3NhZ2VIZWFkZXIsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXV0aG9yID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJtZXNzYWdlLmF1dGhvclwiKTtcclxuICAgICAgICAvLyBjb25zdCBoZWFkZXIgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW4uMS5wcm9wc1wiKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW5cIik7XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhYXV0aG9yIHx8ICFhdXRob3IuaWQpcmV0dXJuXHJcbiAgICAgICAgLy8gaWYgKGhlYWRlciAmJiBoZWFkZXIuY2xhc3NOYW1lKSBoZWFkZXIuY2xhc3NOYW1lICs9IFwiIFwiXHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChhdXRob3IuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHsgLy8gUmF1ZW56aTogQmFuZGFnZWRCRCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1jaGF0LWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYXV0aG9yLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IGF1dGhvci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiTGlnaHRjb3JkIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgYXV0aG9yLCB0cnVlKVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGNoYXQpe1xyXG4gICAgcHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiYWRnZXMtXCIraWQpXHJcbiAgICAgICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVyblxyXG4gICAgICAgIGlmKGRpdi5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm5cclxuICAgICAgICBsZXQgYmxvY2tEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXHJcbiAgICAgICAgYmxvY2tEaXYuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXHJcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGJsb2NrRGl2KVxyXG5cclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuXHJcbiAgICAgICAgZGlzdGFudC5nZXRCYWRnZXModXNlci5pZClcclxuICAgICAgICAudGhlbihiYWRnZXMgPT4ge1xyXG4gICAgICAgICAgICBiYWRnZXMuZm9yRWFjaChiYWRnZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzdmc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCIxNnB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiYmQtbG9nb1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxNnB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJhZGdlLnNjb3Blcy5mb3JFYWNoKHNjb3BlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihzY29wZSA9PT0gXCJ1c2VyXCIpey8vIHJlcXVpcmUgdXNlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy51c2VyID0gdXNlclxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pIFxyXG4gICAgICAgICAgICAgICAgaWYoIWJhZGdlLmhyZWYpe1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLkFuY2hvciA9IEFuY2hvclxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmhyZWYgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IGJhZGdlLm5hbWV9LFxyXG4gICAgICAgICAgICAgICAgICAgIGJhZGdlLmhyZWYgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IGJhZGdlLmhyZWYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY2hhdCA/IFwiYmQtY2hhdC1iYWRnZVwiIDogXCJiZC1tZW1iZXItYmFkZ2VcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBiYWRnZS5uYW1lLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBcIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgfSwgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpKSA6IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChiYWRnZS5jb21wb25lbnQsIHByb3BzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2MiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKGVsZW1lbnQsIGRpdjIpXHJcbiAgICAgICAgICAgICAgICBkaXYyLmNoaWxkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQobm9kZSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pXHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoTWVtYmVyTGlzdCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMubWVtYmVyTGlzdFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBNZW1iZXJMaXN0SXRlbSA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiTWVtYmVyTGlzdEl0ZW1cIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFNZW1iZXJMaXN0SXRlbSB8fCAhTWVtYmVyTGlzdEl0ZW0ucHJvdG90eXBlIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUucmVuZGVyRGVjb3JhdG9ycykgcmV0dXJuO1xyXG4gICAgdGhpcy5tZW1iZXJMaXN0UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUsIFwicmVuZGVyRGVjb3JhdG9yc1wiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS50aGlzT2JqZWN0LCBcInByb3BzLnVzZXJcIik7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEucmV0dXJuVmFsdWUsIFwicHJvcHMuY2hpbGRyZW5cIik7XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhdXNlciB8fCAhdXNlci5pZClyZXR1cm5cclxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHVzZXIuaWQgPT09IFwiMjQ5NzQ2MjM2MDA4MTY5NDczXCIpIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyLmlkID09PSBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiIHx8IHVzZXIuaWQgPT09IFwiNjk2MDAzNDU2NjExMzg1Mzk2XCIpe1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtbWVtYmVyLWJhZGdlXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0xpZ2h0Y29yZC9MaWdodGNvcmRcIiwgdGl0bGU6IFwiTGlnaHRjb3JkXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKVxyXG4gICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IFwiYmFkZ2VzLVwiK2lkfSlcclxuICAgICAgICApXHJcbiAgICAgICAgYXBwbHlCYWRnZXMoaWQsIHVzZXIsIGZhbHNlKVxyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUudXBkYXRlSW5qZWN0b3IgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIC8vIFRoZXJlIHdpbGwgbmV2ZXIgYmUgYW4gaW5qZWN0aW9uIHBhdGgsIHNvIHdlIGRvIG5vdCBuZWVkIHRoZSBjb2RlIGJlbG93LiBcclxuICAgIC8vIEluc2VydCBjb21tZW50cyBzbyBpdCB3aWxsIGJlIGVyYXNlZCB3aGVuIHByb2R1Y3Rpb24uXHJcbiAgICBcclxuICAgIGNvbnN0IGluamVjdGlvblBhdGggPSBEYXRhU3RvcmUuaW5qZWN0aW9uUGF0aDtcclxuICAgIGlmICghaW5qZWN0aW9uUGF0aCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIC8qXHJcblxyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbiAgICBjb25zdCBybXJmID0gcmVxdWlyZShcInJpbXJhZlwiKTtcclxuICAgIGNvbnN0IHlhdXpsID0gcmVxdWlyZShcInlhdXpsXCIpO1xyXG4gICAgY29uc3QgbWtkaXJwID0gcmVxdWlyZShcIm1rZGlycFwiKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFwicmVxdWVzdFwiKTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gcGF0aC5yZXNvbHZlKGluamVjdGlvblBhdGgsIFwiLi5cIik7XHJcbiAgICBjb25zdCBmb2xkZXJOYW1lID0gcGF0aC5iYXNlbmFtZShpbmplY3Rpb25QYXRoKTtcclxuICAgIGNvbnN0IHppcExpbmsgPSBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvYXJjaGl2ZS9pbmplY3Rvci56aXBcIjtcclxuICAgIGNvbnN0IHNhdmVkWmlwID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiaW5qZWN0b3IuemlwXCIpO1xyXG4gICAgY29uc3QgZXh0cmFjdGVkRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIFwiQmV0dGVyRGlzY29yZEFwcC1pbmplY3RvclwiKTtcclxuXHJcbiAgICAvLyBEb3dubG9hZCB0aGUgaW5qZWN0b3IgemlwIGZpbGVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIFwiRG93bmxvYWRpbmcgXCIgKyB6aXBMaW5rKTtcclxuICAgIGxldCBzdWNjZXNzID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgcmVxdWVzdC5nZXQoe3VybDogemlwTGluaywgZW5jb2Rpbmc6IG51bGx9LCBhc3luYyAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCByZXNwb25zZS5zdGF0dXNDb2RlICE9PSAyMDApIHJldHVybiByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgLy8gU2F2ZSBhIGJhY2t1cCBpbiBjYXNlIHNvbWVvbmUgaGFzIHRoZWlyIG93biBjb3B5XHJcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKHNhdmVkWmlwLCByZXMpKTtcclxuICAgICAgICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoc2F2ZWRaaXAsIGAke3NhdmVkWmlwfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWAsIHJlcykpO1xyXG5cclxuICAgICAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJXcml0aW5nIFwiICsgc2F2ZWRaaXApO1xyXG4gICAgICAgICAgICBmcy53cml0ZUZpbGUoc2F2ZWRaaXAsIGJvZHksIGVyciA9PiByZXNvbHZlKCFlcnIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKCFzdWNjZXNzKSByZXR1cm4gc3VjY2VzcztcclxuXHJcbiAgICAvLyBDaGVjayBhbmQgZGVsZXRlIHJlbmFtZSBleHRyYWN0aW9uXHJcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RzID0gYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLmV4aXN0cyhleHRyYWN0ZWRGb2xkZXIsIHJlcykpO1xyXG4gICAgaWYgKGFscmVhZHlFeGlzdHMpIGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5yZW5hbWUoZXh0cmFjdGVkRm9sZGVyLCBgJHtleHRyYWN0ZWRGb2xkZXJ9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcbiAgICBcclxuICAgIC8vIFVuemlwIHRoZSBkb3dubG9hZGVkIHppcCBmaWxlXHJcbiAgICBjb25zdCB6aXBmaWxlID0gYXdhaXQgbmV3IFByb21pc2UociA9PiB5YXV6bC5vcGVuKHNhdmVkWmlwLCB7bGF6eUVudHJpZXM6IHRydWV9LCAoZXJyLCB6aXApID0+ICByKHppcCkpKTtcclxuICAgIHppcGZpbGUub24oXCJlbnRyeVwiLCBmdW5jdGlvbihlbnRyeSkge1xyXG4gICAgICAgIC8vIFNraXAgZGlyZWN0b3JpZXMsIHRoZXkgYXJlIGhhbmRsZWQgd2l0aCBta2RpcnBcclxuICAgICAgICBpZiAoZW50cnkuZmlsZU5hbWUuZW5kc1dpdGgoXCIvXCIpKSByZXR1cm4gemlwZmlsZS5yZWFkRW50cnkoKTtcclxuXHJcbiAgICAgICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJFeHRyYWN0aW5nIFwiICsgZW50cnkuZmlsZU5hbWUpO1xyXG4gICAgICAgIC8vIE1ha2UgYW55IG5lZWRlZCBwYXJlbnQgZGlyZWN0b3JpZXNcclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgbWtkaXJwLnN5bmMocGF0aC5kaXJuYW1lKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgemlwZmlsZS5vcGVuUmVhZFN0cmVhbShlbnRyeSwgZnVuY3Rpb24oZXJyLCByZWFkU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBzdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJlYWRTdHJlYW0ub24oXCJlbmRcIiwgZnVuY3Rpb24oKSB7emlwZmlsZS5yZWFkRW50cnkoKTt9KTsgLy8gR28gdG8gbmV4dCBmaWxlIGFmdGVyIHRoaXNcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZ1bGxQYXRoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHppcGZpbGUucmVhZEVudHJ5KCk7IC8vIFN0YXJ0IHJlYWRpbmdcclxuXHJcbiAgICAvLyBXYWl0IGZvciB0aGUgZmluYWwgZmlsZSB0byBmaW5pc2hcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gemlwZmlsZS5vbmNlKFwiZW5kXCIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcgZHVyaW5nIGZpbmFsIHN0ZXBcclxuICAgIGNvbnN0IGJhY2t1cEZvbGRlciA9IHBhdGgucmVzb2x2ZShwYXJlbnRQYXRoLCBgJHtmb2xkZXJOYW1lfS5iYWske01hdGgucm91bmQocGVyZm9ybWFuY2Uubm93KCkpfWApO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoaW5qZWN0aW9uUGF0aCwgYmFja3VwRm9sZGVyLCByZXNvbHZlKSk7XHJcblxyXG4gICAgLy8gUmVuYW1lIHRoZSBleHRyYWN0ZWQgZm9sZGVyIHRvIHdoYXQgaXQgc2hvdWxkIGJlXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBgUmVuYW1pbmcgJHtwYXRoLmJhc2VuYW1lKGV4dHJhY3RlZEZvbGRlcil9IHRvICR7Zm9sZGVyTmFtZX1gKTtcclxuICAgIHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGluamVjdGlvblBhdGgsIGVyciA9PiByZXNvbHZlKCFlcnIpKSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIkZhaWxlZCB0byByZW5hbWUgdGhlIGZpbmFsIGRpcmVjdG9yeVwiKTtcclxuICAgICAgICByZXR1cm4gc3VjY2VzcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiByZW5hbWUgaGFkIGlzc3VlcywgZGVsZXRlIHdoYXQgd2UgdHJpZWQgdG8gcmVuYW1lIGFuZCByZXN0b3JlIGJhY2t1cFxyXG4gICAgaWYgKCFzdWNjZXNzKSB7XHJcbiAgICAgICAgVXRpbHMuZXJyKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uLiByZXN0b3JpbmcgYmFja3Vwcy5cIik7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGV4dHJhY3RlZEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGJhY2t1cEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgcmVzb2x2ZSkpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHdlJ3ZlIGdvdHRlbiB0byB0aGlzIHBvaW50LCBldmVyeXRoaW5nIHNob3VsZCBoYXZlIGdvbmUgc21vb3RobHkuXHJcbiAgICAvLyBDbGVhbnVwIHRoZSBiYWNrdXAgZm9sZGVyIHRoZW4gcmVtb3ZlIHRoZSB6aXBcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gcm1yZihiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMudW5saW5rKHNhdmVkWmlwLCByZXNvbHZlKSk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJJbmplY3RvciBVcGRhdGVkIVwiKTtcclxuICAgIHJldHVybiBzdWNjZXNzOyovXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpO1xyXG5cclxuLyoqXHJcbiAqIERvbid0IGV4cG9zZSBjb3JlIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiY29uc3QgX19ub25fd2VicGFja19yZXF1aXJlX18gPSB3aW5kb3cucmVxdWlyZVxyXG5cclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5cclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgcmVsZWFzZUNoYW5uZWwgPSBEaXNjb3JkTmF0aXZlLmdsb2JhbHMgPyBEaXNjb3JkTmF0aXZlLmdsb2JhbHMucmVsZWFzZUNoYW5uZWwgOiBEaXNjb3JkTmF0aXZlLmFwcCA/IERpc2NvcmROYXRpdmUuYXBwLmdldFJlbGVhc2VDaGFubmVsKCkgOiBcInN0YWJsZVwiO1xyXG5cclxubGV0IGRhdGFQYXRoID0gXCJcIjtcclxuaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikgZGF0YVBhdGggPSBwcm9jZXNzLmVudi5BUFBEQVRBO1xyXG5lbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcImRhcndpblwiKSBkYXRhUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FLCBcIkxpYnJhcnlcIiwgXCJQcmVmZXJlbmNlc1wiKTtcclxuZWxzZSBkYXRhUGF0aCA9IHByb2Nlc3MuZW52LlhER19DT05GSUdfSE9NRSA/IHByb2Nlc3MuZW52LlhER19DT05GSUdfSE9NRSA6IHBhdGguam9pbihwcm9jZXNzLmVudi5IT01FLCBcIi5jb25maWdcIik7XHJcbmRhdGFQYXRoID0gcGF0aC5qb2luKGRhdGFQYXRoLCBcIkJldHRlckRpc2NvcmRcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGF0YVN0b3JlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IHtzZXR0aW5nczoge3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGEgPSB7fTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGF0YVN0b3JlID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuQkRGaWxlKSkgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHRoaXMuQkRGaWxlLCBcInV0Zi04XCIpKVxyXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShcInNldHRpbmdzXCIpKSB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5zZXR0aW5nc0ZpbGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGxldCBzZXR0aW5ncyA9IF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHRoaXMuc2V0dGluZ3NGaWxlKTtcclxuICAgICAgICAgICAgZnMudW5saW5rU3luYyh0aGlzLnNldHRpbmdzRmlsZSk7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShcInNldHRpbmdzXCIpKSBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319LCB7W3JlbGVhc2VDaGFubmVsXTogc2V0dGluZ3N9KTtcclxuICAgICAgICAgICAgZWxzZSBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe3N0YWJsZToge30sIGNhbmFyeToge30sIHB0Yjoge319LCBzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QkREYXRhKFwic2V0dGluZ3NcIiwgc2V0dGluZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgVXRpbHMuYWxlcnQoXCJDb3JydXB0IFN0b3JhZ2VcIiwgXCJUaGUgYmQgc3RvcmFnZSBoYXMgc29tZWhvdyBiZWNvbWUgY29ycnVwdC4gWW91IG1heSBlaXRoZXIgdHJ5IHRvIHNhbHZhZ2UgdGhlIGZpbGUgb3IgZGVsZXRlIGl0IHRoZW4gcmVsb2FkLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGluamVjdGlvblBhdGgoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9pbmplY3Rpb25QYXRoKSByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aDtcclxuICAgICAgICBjb25zdCBlbGVjdHJvbiA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwO1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSBlbGVjdHJvbi5nZXRBcHBQYXRoKCk7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0Jhc2UgPSBlbGVjdHJvbi5nZXRQYXRoKFwidXNlckRhdGFcIik7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0xvY2F0aW9uID0gcGF0aC5yZXNvbHZlKHJvYW1pbmdCYXNlLCBlbGVjdHJvbi5nZXRWZXJzaW9uKCksIFwibW9kdWxlc1wiLCBcImRpc2NvcmRfZGVza3RvcF9jb3JlXCIsIFwiaW5qZWN0b3JcIik7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBwYXRoLnJlc29sdmUoYmFzZSwgXCIuLlwiLCBcImFwcFwiKTtcclxuICAgICAgICBjb25zdCByZWFsTG9jYXRpb24gPSBmcy5leGlzdHNTeW5jKGxvY2F0aW9uKSA/IGxvY2F0aW9uIDogZnMuZXhpc3RzU3luYyhyb2FtaW5nTG9jYXRpb24pID8gcm9hbWluZ0xvY2F0aW9uIDogbnVsbDtcclxuICAgICAgICBpZiAoIXJlYWxMb2NhdGlvbikgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoID0gcmVhbExvY2F0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25maWdGaWxlKCkge3JldHVybiB0aGlzLl9jb25maWdGaWxlIHx8ICh0aGlzLl9jb25maWdGaWxlID0gcGF0aC5yZXNvbHZlKHRoaXMuaW5qZWN0aW9uUGF0aCwgXCJiZXR0ZXJkaXNjb3JkXCIsIFwiY29uZmlnLmpzb25cIikpO31cclxuICAgIGdldCBCREZpbGUoKSB7cmV0dXJuIHRoaXMuX0JERmlsZSB8fCAodGhpcy5fQkRGaWxlID0gcGF0aC5yZXNvbHZlKGRhdGFQYXRoLCBcImJkc3RvcmFnZS5qc29uXCIpKTt9XHJcbiAgICBnZXQgc2V0dGluZ3NGaWxlKCkge3JldHVybiB0aGlzLl9zZXR0aW5nc0ZpbGUgfHwgKHRoaXMuX3NldHRpbmdzRmlsZSA9IHBhdGgucmVzb2x2ZShkYXRhUGF0aCwgXCJiZHNldHRpbmdzLmpzb25cIikpO31cclxuICAgIGdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkge3JldHVybiBwYXRoLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgcGx1Z2luTmFtZSArIFwiLmNvbmZpZy5qc29uXCIpO31cclxuXHJcbiAgICBnZXRTZXR0aW5nR3JvdXAoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5zZXR0aW5nc1tyZWxlYXNlQ2hhbm5lbF1ba2V5XSB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNldHRpbmdHcm91cChrZXksIGRhdGEpIHtcclxuICAgICAgICB0aGlzLmRhdGEuc2V0dGluZ3NbcmVsZWFzZUNoYW5uZWxdW2tleV0gPSBkYXRhO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwidXRmLThcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QkREYXRhKGtleSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFba2V5XSB8fCBcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJERGF0YShrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcInV0Zi04XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpLCBKU09OLnN0cmluZ2lmeSh0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0sIG51bGwsIDQpLCBcInV0Zi04XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9PT0gdW5kZWZpbmVkKSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSB7fTtcclxuICAgICAgICBkZWxldGUgdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSksIEpTT04uc3RyaW5naWZ5KHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSwgbnVsbCwgNCksIFwidXRmLThcIik7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGV2TW9kZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRlYnVnTGlzdGVuZXIgPSB0aGlzLmRlYnVnTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyID0gdGhpcy5jb3B5U2VsZWN0b3JMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSB0aGlzLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0RGVidWdMaXN0ZW5lcigpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5kZWJ1Z0xpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wRGVidWdMaXN0ZW5lcigpIHtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0Q29weVNlbGVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9wQ29weVNlbGVjdG9yKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWJ1Z0xpc3RlbmVyKGUpIHtcclxuICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7Ly9GOFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjWyVjRGV2TW9kZSVjXSAlY0JyZWFrL1Jlc3VtZVwiLCBcImNvbG9yOiByZWQ7XCIsIFwiY29sb3I6ICMzMDMwMzA7IGZvbnQtd2VpZ2h0OjcwMDtcIiwgXCJjb2xvcjpyZWQ7XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICBkZWJ1Z2dlcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1kZWJ1Z2dlclxyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb3B5U2VsZWN0b3JMaXN0ZW5lcihlKSB7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoZS50YXJnZXQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgICAgICBjbGFzc0xheWVyLCBcclxuICAgICAgICAgICAgICAgIGNsYXNzSXRlbXNcclxuICAgICAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoKGUpID0+IGUubGF5ZXIgJiYgdHlwZW9mIGUubGF5ZXIgPT09IFwic3RyaW5nXCIgJiYgZS5kaXNhYmxlZFBvaW50ZXJFdmVudHMpWzBdLFxyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5tZW51KVswXVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBhdHRhY2goKSB7XHJcbiAgICAgICAgICAgICAgICBpZighY2xhc3NJdGVtcyB8fCAhY2xhc3NMYXllci5sYXllcilyZXR1cm4gY29uc29sZS5sb2coY2xhc3NJdGVtcywgY2xhc3NMYXllci5sYXllcilcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY20gPSBET00ucXVlcnkoXCIuXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5tZW51KSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudCA+IC5cIitVdGlscy5yZW1vdmVEYShjbGFzc0xheWVyLmxheWVyQ29udGFpbmVyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY21XcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzTGF5ZXIubGF5ZXJ9XCI+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY20gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5tZW51fSAke2NsYXNzSXRlbXMuc3R5bGVGbGV4aWJsZX0gJHtjbGFzc0l0ZW1zLmFjY29tbW9kYXRlU2Nyb2xsYmFyfSBiZC1jb250ZXh0LW1lbnVcIiBzdHlsZT1cIlwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5hcHBlbmQoY20pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoY21XcmFwKTtcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuc3R5bGUudG9wID0gZS5jbGllbnRZICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwibWVudVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLCBcIi0xXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmlkID0gXCJiZC1jb3B5LXNlbGVjdG9yLWNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIFwiQ29weSBTZWxlY3RvciBBY3Rpb25zXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyQ2xhc3NlcyA9IEJETW9kdWxlcy5nZXQoKGUpID0+IGUuc2Nyb2xsZXJXcmFwKVswXVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyV3JhcCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtzY3JvbGxlckNsYXNzZXMuc2Nyb2xsZXJXcmFwfSAke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlclRoZW1lZH0gJHtzY3JvbGxlckNsYXNzZXMudGhlbWVHaG9zdEhhaXJsaW5lfVwiPjwvZGl2PmApXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7QkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsZXIpWzBdLnNjcm9sbGVyfSAke2NsYXNzSXRlbXMuc2Nyb2xsZXJ9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlcldyYXAuYXBwZW5kKHNjcm9sbGVyKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZChzY3JvbGxlcldyYXApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNNID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5rZXlDb2RlICYmIGUua2V5Q29kZSAhPT0gMjcpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY21XcmFwLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBjbS5wYXJlbnRFbGVtZW50XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gY20uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbWcgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiByb2xlPVwiZ3JvdXBcIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjbWkgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5pdGVtfSAke2NsYXNzSXRlbXMubGFiZWxDb250YWluZXJ9ICR7Y2xhc3NJdGVtcy5jb2xvckRlZmF1bHR9XCIgcm9sZT1cIm1lbnVpdGVtXCIgaWQ9XCJiZC1jb3B5LXNlbGVjdG9yLWl0ZW0tY21cIj48L2Rpdj5gKTtcclxuICAgICAgICAgICAgICAgIGNtaS5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke2NsYXNzSXRlbXMubGFiZWx9XCI+Q29weSBTZWxlY3RvcjwvZGl2PmApKTtcclxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuTmF0aXZlTW9kdWxlLmNvcHkoc2VsZWN0b3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVudHMgPSBET00ucXVlcnlBbGwoXCJkaXZbcm9sZT1tZW51aXRlbV0uXCIrVXRpbHMucmVtb3ZlRGEoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyAmJiBlbGVtZW50cy5mb3JFYWNoKGVsZW0gPT4gZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgY21pLmNsYXNzTGlzdC5hZGQoY2xhc3NJdGVtcy5mb2N1c2VkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNtaS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VvdXRcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21nLmFwcGVuZChjbWkpO1xyXG4gICAgICAgICAgICAgICAgaWYoc2Nyb2xsZXIuY2hpbGROb2Rlcy5sZW5ndGgpeyAvLyBhcGVuZCBhIHNlcGFyYXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJzZXBhcmF0b3JcIiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5zZXBhcmF0b3J9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuYXBwZW5kKGNtZyk7XHJcbiAgICAgICAgICAgICAgICBpZihjbVdyYXAuY2xpZW50SGVpZ2h0IDwgY21XcmFwLnNjcm9sbEhlaWdodCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZyBcIitjbVdyYXAuc3R5bGUudG9wKVxyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSAoY21XcmFwLnN0eWxlLnRvcCAtIGNtZy5jbGllbnRIZWlnaHQpICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3ZlcmZsb3dpbmdcIitjbVdyYXAuc3R5bGUudG9wKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgc2V0VGltZW91dChhdHRhY2gsIDEpO1xyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RvcihlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaWQpIHJldHVybiBgIyR7ZWxlbWVudC5pZH1gO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFxyXG4gICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGxQYXRoKGVsKXtcclxuICAgICAgICAgICAgdmFyIG5hbWVzID0gW107XHJcbiAgICAgICAgICAgIHdoaWxlIChlbC5wYXJlbnROb2RlKXtcclxuICAgICAgICAgICAgICBpZiAoZWwuaWQpe1xyXG4gICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdCgnIycrZWwuaWQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWw9PWVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSBuYW1lcy51bnNoaWZ0KGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKStBcnJheS5mcm9tKGVsLmNsYXNzTGlzdC5lbnRyaWVzKCkpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikpO1xyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYz0xLGU9ZWw7ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2U9ZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLGMrKyk7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKygodHlwZW9mIGVsLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbC5jbGFzc05hbWUpIHx8IFwiXCIpLnNwbGl0KFwiIFwiKS5maWx0ZXIoZSA9PiAhIWUpLm1hcChlID0+IFwiLlwiK2UpLmpvaW4oXCJcIikrXCI6bnRoLWNoaWxkKFwiK2MrXCIpXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWw9ZWwucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5hbWVzLmpvaW4oXCIgPiBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmdWxsUGF0aChlbGVtZW50KVxyXG4gICAgfVxyXG59OyIsImV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXNhYmxlVHlwaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnN0YXJ0VHlwaW5nKVxyXG4gICAgICAgIC50aGVuKHR5cGluZ01vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpc1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0YXJ0VHlwaW5nID0gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHNlbGYuZGlzYWJsZWQpcmV0dXJuIHN0YXJ0VHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3BUeXBpbmcgPSB0eXBpbmdNb2R1bGUuZGVmYXVsdC5zdG9wVHlwaW5nXHJcbiAgICAgICAgICAgIHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RvcFR5cGluZy5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc2FibGVUeXBpbmcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQnVnSHVudGVyQmFkZ2UgZnJvbSBcIi4uL3N2Zy9idWdfaHVudGVyXCJcclxuaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCB7IHNldHRpbmdzQ29va2llIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDaXJjdXMgZnJvbSBcIi4uL3N2Zy9jaXJjdXNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7IC8vIEdlbmVyYXRlIFVVSUQgKE5vIGNyeXB0byBybmcpXHJcbiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG59ICBcclxuXHJcbmNvbnN0IGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXMgPSB7fVxyXG5sZXQgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGlzdGFudFNlcnZlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2NhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRpc3RhbnRTZXJ2ZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhY2hlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlXHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGNhY2hlKGRhdGEpe1xyXG4gICAgICAgIGlmKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiB0aGlzLl9jYWNoZSAhPT0gXCJvYmplY3RcIilyZXR1cm4gdGhpcy5fY2FjaGUgPSBkYXRhXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlID0gT2JqZWN0LmFzc2lnbih0aGlzLl9jYWNoZSwgZGF0YSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBjdXN0b20gYmFkZ2VzIGZyb20gdGhlIHVzZXIgSUQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlciBUaGUgdXNlciBJRCBcclxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnN0YW50c1tcImJhZGdlc1wiXT59XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEJhZGdlcyh1c2VyKXtcclxuICAgICAgICBpZih0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXSlyZXR1cm4gdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cclxuICAgICAgICBpZihhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdKXJldHVybiBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdXHJcblxyXG4gICAgICAgIGxldCByZXNvbHZlXHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXMpID0+IChyZXNvbHZlID0gcmVzKSlcclxuICAgICAgICBhd2FpdGluZ0JhZGdlc1Byb21pc2VzW3VzZXJdID0gbmV3UHJvbWlzZVxyXG5cclxuICAgICAgICBjb25zdCBiYWRnZXMgPSBbXVxyXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgQ29uc3RhbnRzLmJhZGdlcyl7XHJcbiAgICAgICAgICAgIGlmKGJhZGdlLmRlZmF1bHRVc2Vycy5pbmNsdWRlcyh1c2VyKSliYWRnZXMucHVzaChiYWRnZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmV0Y2hlZEJhZGdlcyA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXJldHVybiByZXNvbHZlKFtdKVxyXG4gICAgICAgICAgICBiYWRnZXNUb0ZldGNoLnB1c2goW3VzZXIsIHJlc29sdmVdKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB1c2VycyA9IGJhZGdlc1RvRmV0Y2hcclxuICAgICAgICAgICAgICAgIGlmKHVzZXJzLmxlbmd0aCA9PT0gMClyZXR1cm5cclxuICAgICAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2ggPSBbXVxyXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdChSb3V0ZXMuYmFkZ2VzLCBcIlBPU1RcIiwgSlNPTi5zdHJpbmdpZnkodXNlcnMubWFwKGUgPT4gZVswXSkpKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApey8vIENvdWxkbid0IGZldGNoIGJhZGdlczogc2VydmVyIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdKFtdKS8vIHJlc29sdmUgbm8gYmFkZ2UgZmV0Y2hlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCB1c2VyIG9mIHJlc3BvbnNlQm9keSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdXNlcnMuZmluZChwcm9taXNlID0+IHByb21pc2VbMF0gPT09IHVzZXIudXNlcl9pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZVsxXSh1c2VyLmJhZGdlcylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCEoZXJyIGluc3RhbmNlb2YgTGlnaHRjb3JkRXJyb3IpKWNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sIDApXHJcbiAgICAgICAgfSlcclxuICAgICAgICBmb3IobGV0IGJhZGdlIG9mIGZldGNoZWRCYWRnZXMpe1xyXG4gICAgICAgICAgICBpZighQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIFdlIGRvIG5vdCBoYXZlIHRoZSBDb21wb25lbnQsIHNraXAgaXQuXHJcbiAgICAgICAgICAgIGlmKGJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKWNvbnRpbnVlIC8vIEFscmVhZHkgaW5zZXJ0ZWQuXHJcbiAgICAgICAgICAgIGJhZGdlcy5wdXNoKENvbnN0YW50cy5iYWRnZXMuZmluZChlID0+IGUuaWQgPT09IGJhZGdlKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWNoZSA9IHtcclxuICAgICAgICAgICAgYmFkZ2VzOiBPYmplY3QuYXNzaWduKHRoaXMuY2FjaGUuYmFkZ2VzLCB7W3VzZXJdOiBiYWRnZXN9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdXHJcbiAgICAgICAgfSwgNjAwMDAwKTtcclxuXHJcbiAgICAgICAgcmVzb2x2ZShiYWRnZXMpXHJcbiAgICAgICAgZGVsZXRlIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuICAgICAgICByZXR1cm4gYmFkZ2VzXHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZVJlcXVlc3QgPSBmdW5jdGlvbihyb3V0ZSwgbWV0aG9kLCBkYXRhKXtcclxuICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC01XCJdKXtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IExpZ2h0Y29yZEVycm9yKFwiVGhlIGN1cnJlbnQgc2V0dGluZ3MgYmxvY2tlZCB0aGUgcmVxdWVzdC5cIikpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZUZldGNoKGAke0NvbnN0YW50cy5TRVJWRVJfVVJMfS9hcGkvdjEke3JvdXRlfWAsIHtcclxuICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIkNMSUVOVFwiOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogd2luZG93LkxpZ2h0Y29yZC5BcGkuQXV0aG9yaXphdGlvbiB8fCBcIk5vbmU6OkFub255bW91c1wiXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi4oZGF0YSA/IHtcclxuICAgICAgICAgICAgYm9keTogZGF0YVxyXG4gICAgICAgIH0gOiB7fSlcclxuICAgIH0pXHJcbn1cclxuXHJcbmNsYXNzIExpZ2h0Y29yZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJMaWdodGNvcmRFcnJvclwiXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBTRVJWRVJfVVJMOiBcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXpcIixcclxuICAgIGJhZGdlczogWyAvLyBUT0RPOiBBZGQgbW9yZSBiYWRnZXMgKyBzZXJ2ZXIgc2lkZSBzdmdcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkIEJ1ZyBIdW50ZXJcIixcclxuICAgICAgICAgICAgaWQ6IFwiZjA0Njk4ZjUtODE2Yi00MWUzLWJkMDEtOTIyOTExOTNkN2E1XCIsXHJcbiAgICAgICAgICAgIGRlZmF1bHRVc2VyczogW1xyXG4gICAgICAgICAgICAgICAgXCI2OTY0ODExOTQ0NDMwMTQxNzRcIixcclxuICAgICAgICAgICAgICAgIFwiNjk2MDAzNDU2NjExMzg1Mzk2XCJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc2NvcGVzOiBbXSxcclxuICAgICAgICAgICAgY29tcG9uZW50OiBCdWdIdW50ZXJCYWRnZSxcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vbGlnaHRjb3JkL2xpZ2h0Y29yZC93aWtpL2JhZGdlcyNidWdfaHVudGVyXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQnVmZm9vblwiLFxyXG4gICAgICAgICAgICBpZDogXCIwNjkwNGQzMS02NWI0LTQxZWMtYTUwYy04NjU4YmJkMWFmOTZcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBcIjM4OTAxNjg5NTU0MzcwNTYwMlwiLFxyXG4gICAgICAgICAgICAgICAgXCI2NjQ2MDAxMzQ1Mjg2NjM1NjVcIixcclxuICAgICAgICAgICAgICAgIFwiNjI1MzUwNjU3ODI5ODk2MjI0XCJcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgc2NvcGVzOiBbXSxcclxuICAgICAgICAgICAgY29tcG9uZW50OiBDaXJjdXMsXHJcbiAgICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly95b3V0dS5iZS9FSnRiNnotZGxUOD90PTE0NVwiXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUm91dGVzID0ge1xyXG4gICAgYmFkZ2VzOiBgL3VzZXJzL2JhZGdlc2BcclxufSIsIi8qKlxyXG4gKiBDb3B5cmlnaHQgMjAxOCBaYWNoYXJ5IFJhdWVuXHJcbiAqXHJcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xyXG4gKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSxcclxuICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcclxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcclxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZFxyXG4gKiB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XHJcbiAqXHJcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxyXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxyXG4gKlxyXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsXHJcbiAqIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBXHJcbiAqIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFRcclxuICogSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GXHJcbiAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRVxyXG4gKiBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cclxuICogXHJcbiAqIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JEUGx1Z2luTGlicmFyeVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJmYWNlXHJcbiAqIEBuYW1lIE9mZnNldFxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIC0gVG9wIG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByaWdodCAtIFJpZ2h0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib3R0b20gLSBCb3R0b20gb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgLSBMZWZ0IG9mZnNldCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWlnaHQgLSBPdXRlciBoZWlnaHQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2lkdGggLSBPdXRlciB3aWR0aCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqL1xyXG5cclxuIC8qKlxyXG4gKiBGdW5jdGlvbiB0aGF0IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyBhZGRlZCBsaXN0ZW5lci5cclxuICogQGNhbGxiYWNrIG1vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lclxyXG4gKi9cclxuIFxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Ub29scyB7XHJcblxyXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcblx0ICogQWRkcyBhIHN0eWxlIHRvIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBhcyB0aGUgZWxlbWVudCBpZFxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjc3MgLSBjc3MgdG8gYWRkIHRvIHRoZSBkb2N1bWVudFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTdHlsZShpZCwgY3NzKSB7XHJcblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChET01Ub29scy5jcmVhdGVFbGVtZW50KGA8c3R5bGUgaWQ9XCIke2lkfVwiPiR7Y3NzfTwvc3R5bGU+YCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHN0eWxlIGZyb20gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIG9yaWdpbmFsIGlkZW50aWZpZXIgdXNlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyByZW1vdmVTdHlsZShpZCkge1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcclxuXHRcdGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQWRkcy9yZXF1aXJlcyBhIHJlbW90ZSBzY3JpcHQgdG8gYmUgbG9hZGVkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gaWRlbnRpZmllciB0byB1c2UgZm9yIHRoaXMgc2NyaXB0XHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIHVybCBmcm9tIHdoaWNoIHRvIGxvYWQgdGhlIHNjcmlwdFxyXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgc2NyaXB0IGlzIGxvYWRlZFxyXG5cdCAqL1xyXG5cdHN0YXRpYyBhZGRTY3JpcHQoaWQsIHVybCkge1xyXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG5cdFx0XHRjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xyXG5cdFx0XHRzY3JpcHQuaWQgPSBpZDtcclxuXHRcdFx0c2NyaXB0LnNyYyA9IHVybDtcclxuXHRcdFx0c2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xyXG5cdFx0XHRzY3JpcHQub25sb2FkID0gcmVzb2x2ZTtcclxuXHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmQoc2NyaXB0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVtb3ZlcyBhIHJlbW90ZSBzY3JpcHQgZnJvbSB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZVNjcmlwdChpZCkge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIGh0dHBzOi8vamF2YXNjcmlwdC5pbmZvL2pzLWFuaW1hdGlvblxyXG4gICAgc3RhdGljIGFuaW1hdGUoe3RpbWluZyA9IF8gPT4gXywgdXBkYXRlLCBkdXJhdGlvbn0pIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgICBcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gYW5pbWF0ZSh0aW1lKSB7XHJcbiAgICAgICAgICAvLyB0aW1lRnJhY3Rpb24gZ29lcyBmcm9tIDAgdG8gMVxyXG4gICAgICAgICAgbGV0IHRpbWVGcmFjdGlvbiA9ICh0aW1lIC0gc3RhcnQpIC8gZHVyYXRpb247XHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uID4gMSkgdGltZUZyYWN0aW9uID0gMTtcclxuICAgICAgXHJcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlXHJcbiAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IHRpbWluZyh0aW1lRnJhY3Rpb24pO1xyXG4gICAgICBcclxuICAgICAgICAgIHVwZGF0ZShwcm9ncmVzcyk7IC8vIGRyYXcgaXRcclxuICAgICAgXHJcbiAgICAgICAgICBpZiAodGltZUZyYWN0aW9uIDwgMSkge1xyXG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIG15IHNoaXQgdmVyc2lvbiBvZiBub3QgaGF2aW5nIHRvIHVzZSBgJGAgZnJvbSBqUXVlcnkuIE1lYW5pbmdcclxuICAgICAqIHRoYXQgeW91IGNhbiBwYXNzIGEgc2VsZWN0b3IgYW5kIGl0IHdpbGwgYXV0b21hdGljYWxseSBydW4ge0BsaW5rIG1vZHVsZTpET01Ub29scy5xdWVyeX0uXHJcbiAgICAgKiBJdCBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbiBwYXNzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGl0IHdpbGwgcGVyZm9ybSBhbmQgcmV0dXJuIGBwYXJzZUhUTUxgLlxyXG4gICAgICogQHNlZSBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MXHJcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5xdWVyeVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnkgb3IgSFRNTCB0byBwYXJzZVxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBFaXRoZXIgdGhlIHJlc3VsdCBvZiBgcGFyc2VIVE1MYCBvciBgcXVlcnlgXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBRKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMucGFyc2VIVE1MKHNlbGVjdG9yKTtcclxuICAgICAgICBjb25zdCBpc0hUTUwgPSBlbGVtZW50IGluc3RhbmNlb2YgTm9kZUxpc3QgPyBBcnJheS5mcm9tKGVsZW1lbnQpLnNvbWUobiA9PiBuLm5vZGVUeXBlID09PSAxKSA6IGVsZW1lbnQubm9kZVR5cGUgPT09IDE7XHJcbiAgICAgICAgaWYgKGlzSFRNTCkgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXNzZW50aWFsbHkgYSBzaG9ydGhhbmQgZm9yIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYC4gSWYgdGhlIGBiYXNlRWxlbWVudGAgaXMgbm90IHByb3ZpZGVkXHJcbiAgICAgKiBgZG9jdW1lbnRgIGlzIHVzZWQgYnkgZGVmYXVsdC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IFtiYXNlRWxlbWVudF0gLSBFbGVtZW50IHRvIGJhc2UgdGhlIHF1ZXJ5IGZyb21cclxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgZm91bmQgZWxlbWVudCBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnkoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGxgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIEFycmF5IG9mIGFsbCBmb3VuZCBlbGVtZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcXVlcnlBbGwoc2VsZWN0b3IsIGJhc2VFbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCFiYXNlRWxlbWVudCkgYmFzZUVsZW1lbnQgPSBkb2N1bWVudDtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSBzdHJpbmcgb2YgSFRNTCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cy4gSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdHJ1ZSxcclxuICAgICAqIHRoZSBwYXJzZWQgSFRNTCB3aWxsIGJlIHJldHVybmVkIGFzIGEgZG9jdW1lbnQgZnJhZ21lbnQge0BzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50RnJhZ21lbnR9LlxyXG4gICAgICogVGhpcyBpcyBleHRyZW1lbHkgdXNlZnVsIGlmIHlvdSBoYXZlIGEgbGlzdCBvZiBlbGVtZW50cyBhdCB0aGUgdG9wIGxldmVsLCB0aGV5IGNhbiB0aGVuIGJlIGFwcGVuZGVkIGFsbCBhdCBvbmNlIHRvIGFub3RoZXIgbm9kZS5cclxuICAgICAqIFxyXG4gICAgICogSWYgdGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgZmFsc2UsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBsaXN0IG9mIHBhcnNlZFxyXG4gICAgICogbm9kZXMgYW5kIHRoZXJlIHdlcmUgbXVsdGlwbGUgdG9wIGxldmVsIG5vZGVzLCBvdGhlcndpc2UgdGhlIHNpbmdsZSBub2RlIGlzIHJldHVybmVkLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBIVE1MIHRvIGJlIHBhcnNlZFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJhZ21lbnQ9ZmFsc2VdIC0gV2hldGhlciBvciBub3QgdGhlIHJldHVybiBzaG91bGQgYmUgdGhlIHJhdyBgRG9jdW1lbnRGcmFnbWVudGBcclxuICAgICAqIEByZXR1cm5zIHsoRG9jdW1lbnRGcmFnbWVudHxOb2RlTGlzdHxIVE1MRWxlbWVudCl9IC0gVGhlIHJlc3VsdCBvZiBIVE1MIHBhcnNpbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcnNlSFRNTChodG1sLCBmcmFnbWVudCA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIik7XHJcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcclxuICAgICAgICBjb25zdCBub2RlID0gdGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGZyYWdtZW50KSByZXR1cm4gbm9kZTtcclxuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDEgPyBub2RlLmNoaWxkTm9kZXMgOiBub2RlLmNoaWxkTm9kZXNbMF07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEFsdGVybmF0ZSBuYW1lIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnBhcnNlSFRNTH0gKi9cclxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtyZXR1cm4gdGhpcy5wYXJzZUhUTUwoaHRtbCwgZnJhZ21lbnQpO31cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBUYWtlcyBhIHN0cmluZyBvZiBodG1sIGFuZCBlc2NhcGVzIGl0IHVzaW5nIHRoZSBicm93ZXIncyBvd24gZXNjYXBpbmcgbWVjaGFuaXNtLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGh0bWwgLSBodG1sIHRvIGJlIGVzY2FwZWRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGVzY2FwZUhUTUwoaHRtbCkge1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XHJcbiAgICAgICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcclxuICAgICAgICBzcGFuRWxlbWVudC5hcHBlbmQodGV4dE5vZGUpO1xyXG4gICAgICAgIHRleHROb2RlLm5vZGVWYWx1ZSA9IGh0bWw7XHJcbiAgICAgICAgcmV0dXJuIHNwYW5FbGVtZW50LmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIGFkZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWRkQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIGEgbGlzdCBvZiBjbGFzc2VzIGZyb20gdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBjbGFzc2VzIC0gTmFtZXMgb2YgY2xhc3NlcyB0byByZW1vdmVcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIGBlbGVtZW50YCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlbW92ZUNsYXNzKGVsZW1lbnQsIC4uLmNsYXNzZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIGNsYXNzZXNbY10gPSBjbGFzc2VzW2NdLnRvU3RyaW5nKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzLmZsYXQoKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGVuIG9ubHkgb25lIGFyZ3VtZW50IGlzIHByZXNlbnQ6IFRvZ2dsZSBjbGFzcyB2YWx1ZTtcclxuICAgICAqIGkuZS4sIGlmIGNsYXNzIGV4aXN0cyB0aGVuIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGZhbHNlLCBpZiBub3QsIHRoZW4gYWRkIGl0IGFuZCByZXR1cm4gdHJ1ZS5cclxuICAgICAqIFdoZW4gYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudDpcclxuICAgICAqIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgZXZhbHVhdGVzIHRvIHRydWUsIGFkZCBzcGVjaWZpZWQgY2xhc3MgdmFsdWUsIGFuZCBpZiBpdCBldmFsdWF0ZXMgdG8gZmFsc2UsIHJlbW92ZSBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byB0b2dnbGVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luZGljYXRvcl0gLSBPcHRpb25hbCBpbmRpY2F0b3IgZm9yIGlmIHRoZSBjbGFzcyBzaG91bGQgYmUgdG9nZ2xlZFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgdG9nZ2xlQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lLCBpbmRpY2F0b3IpIHtcclxuICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZihpbmRpY2F0b3IpICE9PSBcInVuZGVmaW5lZFwiKSBjbGFzc25hbWUuZm9yRWFjaChjID0+IGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShjLCBpbmRpY2F0b3IpKTtcclxuICAgICAgICBlbHNlIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGhhcyBhIHNwZWNpZmljIGNsYXNzXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzbmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGNsYXNzLCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzbmFtZSkge1xyXG4gICAgICAgIHJldHVybiBjbGFzc25hbWUudG9TdHJpbmcoKS5zcGxpdChcIiBcIikuZmlsdGVyKGMgPT4gYykuZXZlcnkoYyA9PiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXBsYWNlcyBvbmUgY2xhc3Mgd2l0aCBhbm90aGVyXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9sZE5hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHJlcGxhY2VcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdOYW1lIC0gTmV3IG5hbWUgZm9yIHRoZSBjbGFzc1xyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVwbGFjZUNsYXNzKGVsZW1lbnQsIG9sZE5hbWUsIG5ld05hbWUpIHtcclxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKG9sZE5hbWUsIG5ld05hbWUpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXBwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIGFwcGVuZGVkIHRvIGFub3RoZXIgbm9kZVxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGF0Tm9kZSAtIE5vZGUgZm9yIGB0aGlzTm9kZWAgdG8gYmUgYXBwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhcHBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xyXG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRoYXROb2RlLmFwcGVuZCh0aGlzTm9kZSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGVuZHMgYHRoaXNOb2RlYCB0byBgdGhhdE5vZGVgXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gTm9kZSB0byBiZSBwcmVwZW5kZWQgdG8gYW5vdGhlciBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBwcmVwZW5kZWQgdG9cclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmVwZW5kVG8odGhpc05vZGUsIHRoYXROb2RlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih0aGF0Tm9kZSkgPT0gXCJzdHJpbmdcIikgdGhhdE5vZGUgPSB0aGlzLnF1ZXJ5KHRoYXROb2RlKTtcclxuICAgICAgICBpZiAoIXRoYXROb2RlKSByZXR1cm4gbnVsbDtcclxuICAgICAgICB0aGF0Tm9kZS5wcmVwZW5kKHRoaXNOb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5pbnNlcnRBZnRlcihvdGhlckVsZW1lbnQpYC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5zZXJ0QWZ0ZXIodGhpc05vZGUsIHRhcmdldE5vZGUpIHtcclxuICAgICAgICB0YXJnZXROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNOb2RlLCB0YXJnZXROb2RlLm5leHRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbnNlcnQgYWZ0ZXIgYSBzcGVjaWZpYyBlbGVtZW50LCBzaW1pbGFyIHRvIGpRdWVyeSdzIGB0aGlzRWxlbWVudC5hZnRlcihuZXdFbGVtZW50KWAuXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoaXNOb2RlIC0gVGhlIG5vZGUgdG8gaW5zZXJ0XHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5ld05vZGUgLSBOb2RlIHRvIGluc2VydCBhZnRlciBpbiB0aGUgdHJlZVxyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFmdGVyKHRoaXNOb2RlLCBuZXdOb2RlKSB7XHJcbiAgICAgICAgdGhpc05vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpc05vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIG5leHQgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgbmV4dCBzaWJsaW5nIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gT3B0aW9uYWwgc2VsZWN0b3JcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBzaWJsaW5nIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG5leHQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiKyBcIiArIHNlbGVjdG9yKSA6IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgc3Vic2VxdWVudCBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IG5leHQgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dEFsbChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIn4gKlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHN1YnNlcXVlbnQgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBmb2xsb3dpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dFVudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgbmV4dCA9IFtdOyBcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcgJiYgIWVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBuZXh0LnB1c2goZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XHJcbiAgICAgICAgaWYgKHNlbGVjdG9yKSByZXR1cm4gcHJldmlvdXMgJiYgcHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikgPyBwcmV2aW91cyA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgcHJlY2VlZGluZyBzaWJsaW5ncy5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHByZWNlZWRpbmcgc2libGluZ3Mgb2ZcclxuICAgICAqIEByZXR1cm5zIHtOb2RlTGlzdH0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHJldmlvdXNBbGwoZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZykgcHJldmlvdXMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIHVudGlsIGFuIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91c1VudGlsKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTsgXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm1hdGNoZXMoc2VsZWN0b3IpKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgd2hpY2ggaW5kZXggaW4gY2hpbGRyZW4gYSBjZXJ0YWluIG5vZGUgaXMuIFNpbWlsYXIgdG8galF1ZXJ5J3MgYCQuaW5kZXgoKWBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBUaGUgbm9kZSB0byBmaW5kIGl0cyBpbmRleCBpbiBwYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IEluZGV4IG9mIHRoZSBub2RlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbmRleEluUGFyZW50KG5vZGUpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGxldCBudW0gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldID09IG5vZGUpIHJldHVybiBudW07XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSA9PSAxKSBudW0rKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBTaG9ydGhhbmQgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMuaW5kZXhJblBhcmVudH0gKi9cclxuICAgIHN0YXRpYyBpbmRleChub2RlKSB7cmV0dXJuIHRoaXMuaW5kZXhJblBhcmVudChub2RlKTt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnQgaWYgaXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyBudWxsLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcGFyZW50IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggcGFyZW50XHJcbiAgICAgKiBAcmV0dXJucyB7KEVsZW1lbnR8bnVsbCl9IC0gVGhlIHNpYmxpbmcgZWxlbWVudCBvciBudWxsXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnQoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuICFzZWxlY3RvciB8fCBlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikgPyBlbGVtZW50LnBhcmVudEVsZW1lbnQgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRDaGlsZChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGNoaWxkcmVuIG9mIEVsZW1lbnQgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IgaWYgcHJvdmlkZWQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBhbGwgY2hpbGRyZW4gb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBjaGlsZHJlbiB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIGNoaWxkcmVuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBmaW5kQ2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlID4gXCIgKyBzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBhbmNlc3RvcnMgb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBwYXJlbnRzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiXCJdIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIHBhcmVudHMgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5jbG9zZXN0KHNlbGVjdG9yKSk7XHJcbiAgICAgICAgZWxzZSB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBhbmNlc3RvcnMgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBhbmNlc3RvcnMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFNlbGVjdG9yIHRvIHN0b3AgYXRcclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBwYXJlbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwYXJlbnRzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiAhZWxlbWVudC5wYXJlbnRFbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBzaWJsaW5ncyBvZiB0aGUgZWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIipcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgc2libGluZ3MgdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBzaWJsaW5nc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgc2libGluZ3MoZWxlbWVudCwgc2VsZWN0b3IgPSBcIipcIikge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQucGFyZW50RWxlbWVudC5jaGlsZHJlbikuZmlsdGVyKGUgPT4gZSAhPSBlbGVtZW50ICYmIGUubWF0Y2hlcyhzZWxlY3RvcikpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIGNzcyBzdHlsZXMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBzdHlsZSBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgc3R5bGUuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBBdHRyaWJ1dGUgdG8gZ2V0IG9yIHNldFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBWYWx1ZSB0byBzZXQgZm9yIGF0dHJpYnV0ZVxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNzcyhlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGdsb2JhbC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW2F0dHJpYnV0ZV07XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZVthdHRyaWJ1dGVdID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIHdpZHRoIGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgd2lkdGggYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIHdpZHRoLiAgXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHNldCB0aGUgQ1NTIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFdpZHRoIHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdpZHRoKGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkud2lkdGgpO1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgaGVpZ2h0IGZvciBhIHNwZWNpZmljIGVsZW1lbnQuIElmIGB2YWx1ZWAgaXMgcHJvdmlkZWRcclxuICAgICAqIHRoZW4gaXQgc2V0cyB0aGUgaGVpZ2h0IGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBoZWlnaHQuICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gSGVpZ2h0IHRvIHNldFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8c3RyaW5nfSAtIFdoZW4gc2V0dGluZyBhIHZhbHVlLCBlbGVtZW50IGlzIHJldHVybmVkIGZvciBjaGFpbmluZywgb3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGhlaWdodChlbGVtZW50LCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmhlaWdodCk7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGlubmVyIHRleHQgb2YgYW4gZWxlbWVudCBpZiBnaXZlbiBhIHZhbHVlLCBvdGhlcndpc2UgcmV0dXJucyBpdC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSB0ZXh0IG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RleHRdIC0gQ29udGVudCB0byBzZXRcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gRWl0aGVyIHRoZSBzdHJpbmcgc2V0IGJ5IHRoaXMgY2FsbCBvciB0aGUgY3VycmVudCB0ZXh0IGNvbnRlbnQgb2YgdGhlIG5vZGUuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0ZXh0KGVsZW1lbnQsIHRleHQpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRleHQpID09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50O1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGlubmVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIGlubmVyIHdpZHRoIG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5uZXJXaWR0aChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBpbm5lckhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgaGVpZ2h0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIGlubmVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGlubmVySGVpZ2h0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlcldpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBvdXRlciB3aWR0aCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciB3aWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIG91dGVyV2lkdGgoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgb3V0ZXJIZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIGhlaWdodCBvZlxyXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAtIFRoZSBvdXRlciBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvdXRlckhlaWdodChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IGluIHRoZSBwYWdlLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgb2Zmc2V0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtPZmZzZXR9IC0gVGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb2Zmc2V0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxpc3RlbmVycygpIHsgcmV0dXJuIHRoaXMuX2xpc3RlbmVycyB8fCAodGhpcy5fbGlzdGVuZXJzID0ge30pOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8galF1ZXJ5J3MgYG9uYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiY2xpY2tlZCFcIik7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgYWRkIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGlja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YCB0aGF0IG9ubHkgZmlyZXMgb25jZS5cclxuICAgICAqIGBjb25zdCBjYW5jZWwgPSBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImZpcmVkIVwiKTsgY2FuY2VsKCk7fSk7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QgbWF0Y2hlcyB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9ufSBidXQgYXV0b21hdGljYWxseSBjYW5jZWxzIGl0c2VsZlxyXG4gICAgICogYW5kIHJlbW92ZXMgdGhlIGxpc3RlbmVyIHVwb24gdGhlIGZpcnN0IGZpcmluZyBvZiB0aGUgZGVzaXJlZCBldmVudC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhZGQgbGlzdGVuZXIgdG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IGRlbGVnYXRlIC0gU2VsZWN0b3IgdG8gcnVuIG9uIGVsZW1lbnQgdG8gbGlzdGVuIHRvXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbY2FsbGJhY2tdIC0gRnVuY3Rpb24gdG8gZmlyZSBvbiBldmVudFxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpET01Ub29sc35DYW5jZWxMaXN0ZW5lcn0gLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCB1bmRvIHRoZSBsaXN0ZW5lclxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25jZShlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfSA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdKSB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0NhbmNlbCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5zcGxpY2UodGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5maW5kSW5kZXgobCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQpLCAxKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGV2ZW50OiB0eXBlLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcclxuICAgICAgICAgICAgICAgIGNhbmNlbDogbmV3Q2FuY2VsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3Q2FuY2VsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FuY2VsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBfX29mZkFsbChldmVudCwgZWxlbWVudCkge1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGxldCBtYXRjaEZpbHRlciA9IGxpc3RlbmVyID0+IGxpc3RlbmVyLmV2ZW50ID09IHR5cGUsIGRlZmF1bHRGaWx0ZXIgPSBfID0+IF87XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIG1hdGNoRmlsdGVyID0gbCA9PiBsLmV2ZW50ID09IHR5cGUgJiYgbC5lbGVtZW50ID09IGVsZW1lbnQsIGRlZmF1bHRGaWx0ZXIgPSBsID0+IGwuZWxlbWVudCA9PSBlbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gfHwgW107XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHR5cGUgPyBsaXN0ZW5lcnMuZmlsdGVyKG1hdGNoRmlsdGVyKSA6IGxpc3RlbmVycy5maWx0ZXIoZGVmYXVsdEZpbHRlcik7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBsaXN0Lmxlbmd0aDsgYysrKSBsaXN0W2NdLmNhbmNlbCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb2ZmYCBmdW5jdGlvbiBhbmQgY2FuICpob3BlZnVsbHkqIGJlIHVzZWQgaW4gdGhlIHNhbWUgd2F5LlxyXG4gICAgICogXHJcbiAgICAgKiBSYXRoZXIgdGhhbiBhdHRlbXB0IHRvIGV4cGxhaW4sIEknbGwgc2hvdyBzb21lIGV4YW1wbGUgdXNhZ2VzLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgY2FsbGVkIGBvbkNsaWNrYCAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlZCB3aGVuIHRoZSB0YXJnZXQgaXMgYSBgLmJsb2NrYCBlbGVtZW50LlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIFwiLmJsb2NrXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2tcIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiLm15UGx1Z2luXCIpO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhbGwgY2xpY2sgbGlzdGVuZXJzIGluIG5hbWVzcGFjZSBgbXlQbHVnaW5gIGZyb20gKmFsbCBlbGVtZW50cyouXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKFwiY2xpY2subXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cclxuICAgICAqIGBET01Ub29scy5vZmYoXCIubXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geyhFbGVtZW50fHN0cmluZyl9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJlbW92ZSBsaXN0ZW5lciBmcm9tXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2V2ZW50XSAtIEV2ZW50IHRvIGxpc3RlbiB0byB3aXRoIG9wdGlvbiBuYW1lc3BhY2UgKGUuZy4gXCJldmVudC5uYW1lc3BhY2VcIilcclxuICAgICAqIEBwYXJhbSB7KHN0cmluZ3xjYWxsYWJsZSl9IFtkZWxlZ2F0ZV0gLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgb3JpZ2luYWwgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9mZihlbGVtZW50LCBldmVudCwgZGVsZWdhdGUsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihlbGVtZW50KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gdGhpcy5fX29mZkFsbChlbGVtZW50KTtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBpZiAobmFtZXNwYWNlKSByZXR1cm4gdGhpcy5fX29mZkFsbChldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0RlbGVnYXRlID0gZGVsZWdhdGUgJiYgY2FsbGJhY2s7XHJcbiAgICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBkZWxlZ2F0ZTtcclxuICAgICAgICBjb25zdCBldmVudEZ1bmMgPSAhaGFzRGVsZWdhdGUgPyBjYWxsYmFjayA6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIGZvciB3aGVuIHRoZSBub2RlIGlzIGFkZGVkL3JlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQgYm9keS5cclxuICAgICAqIFRoZSBsaXN0ZW5lciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdXBvbiBmaXJpbmcuXHJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIC0gbm9kZSB0byB3YWl0IGZvclxyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gY2FsbGJhY2sgLSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgb24gZXZlbnRcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25Nb3VudCAtIGRldGVybWluZXMgaWYgaXQgc2hvdWxkIGZpcmUgb24gTW91bnQgb3Igb24gVW5tb3VudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgb25Nb3VudCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCB3cmFwcGVkQ2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXIudW5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrKTtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuc3Vic2NyaWJlKHdyYXBwZWRDYWxsYmFjaywgbXV0YXRpb24gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20ob25Nb3VudCA/IG11dGF0aW9uLmFkZGVkTm9kZXMgOiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xyXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RNYXRjaCA9IG5vZGVzLmluZGV4T2Yobm9kZSkgPiAtMTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2g7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgdHJ1ZWAgKi9cclxuICAgIHN0YXRpYyBvbk1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2spOyB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50Q2hhbmdlfSB3aXRoIHRoaXJkIHBhcmFtZXRlciBgZmFsc2VgICovXHJcbiAgICBzdGF0aWMgb25Vbm1vdW50KG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uTW91bnRDaGFuZ2Uobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vbk1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uQWRkZWQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudChub2RlLCBjYWxsYmFjayk7IH1cclxuXHJcbiAgICAvKiogQWxpYXMgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub25Vbm1vdW50fSAqL1xyXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vblVubW91bnQobm9kZSwgY2FsbGJhY2ssIGZhbHNlKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbWJpbmVzIG11bHRpcGxlIGVsZW1lbnRzIGludG8gb25lIHBhcmVudCBlbGVtZW50XHJcbiAgICAgKiBAcGFyYW0ge0FycmF5PEhUTUxFbGVtZW50Pn0gZWxlbWVudHMgLSBhcnJheSBvZiBlbGVtZW50cyB0byBwdXQgaW50byBhIHNpbmdsZSBwYXJlbnRcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHdyYXAoZWxlbWVudHMpIHtcclxuICAgICAgICBjb25zdCBkb21XcmFwcGVyID0gdGhpcy5wYXJzZUhUTUwoYDxkaXYgY2xhc3M9XCJkb20td3JhcHBlclwiPjwvZGl2PmApO1xyXG4gICAgICAgIGZvciAobGV0IGUgPSAwOyBlIDwgZWxlbWVudHMubGVuZ3RoOyBlKyspIGRvbVdyYXBwZXIuYXBwZW5kQ2hpbGQoZWxlbWVudHNbZV0pO1xyXG4gICAgICAgIHJldHVybiBkb21XcmFwcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzb2x2ZXMgdGhlIG5vZGUgdG8gYW4gSFRNTEVsZW1lbnQuIFRoaXMgaXMgbWFpbmx5IHVzZWQgYnkgbGlicmFyeSBtb2R1bGVzLlxyXG4gICAgICogQHBhcmFtIHsoalF1ZXJ5fEVsZW1lbnQpfSBub2RlIC0gbm9kZSB0byByZXNvbHZlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXNvbHZlRWxlbWVudChub2RlKSB7XHJcbiAgICAgICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIGpRdWVyeSkgJiYgIShub2RlIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkgPyBub2RlWzBdIDogbm9kZTtcclxuICAgIH1cclxufVxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLkRPTSA9IERPTVRvb2xzIiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5jb25zdCBDb25zdGFudHMgPSB7XHJcbiAgICBFbW9qaVJlZ2V4OiAvPGE/XFwuKFxcdyspXFwuKFxcZCspPi9nXHJcbn1cclxuXHJcbmxldCBDdXN0b21FbW9qaU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLkN1c3RvbUVtb2ppKVswXVxyXG5sZXQgRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdXHJcbmxldCBBdXRvY29tcGxldGVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJBdXRvY29tcGxldGVcIilbMF1cclxubGV0IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucylbMF1cclxubGV0IEVtb2ppTW9kdWxlUXVlcnkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylbMF1cclxubGV0IE1lc3NhZ2VzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVswXVxyXG5sZXQgZ3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZylbMF1cclxubGV0IGVtb2ppU2VhcmNoID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dClcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW9qaU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuaW5pdCgpLmNhdGNoKGVyciA9PiBVdGlscy5lcnIoXCJFbW9qaU1vZHVsZVwiLCBcIkFuIGVycm9yIG9jY3VyZWRcIiwgZXJyKSkgLy8gYmV0dGVyIGxvZ2dpbmdcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KCl7XHJcbiAgICAgICAgLyoqIEVtb2ppIEF1dG9Db21wbGV0ZSAqL1xyXG4gICAgICAgIGlmKCFBdXRvY29tcGxldGVNb2R1bGUpQXV0b2NvbXBsZXRlTW9kdWxlID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVxyXG4gICAgICAgIGlmKCFBdXRvQ29tcGxldGlvblRlbXBsYXRlcylBdXRvQ29tcGxldGlvblRlbXBsYXRlcyA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVxyXG4gICAgICAgIGlmKCFFbW9qaU1vZHVsZVF1ZXJ5KUVtb2ppTW9kdWxlUXVlcnkgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucXVlcnlFbW9qaVJlc3VsdHMpXHJcbiAgICAgICAgaWYoIU1lc3NhZ2VzKU1lc3NhZ2VzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzICYmIGUuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORylcclxuICAgICAgICBpZighZ3VpbGRNb2R1bGUpZ3VpbGRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGQgJiYgZS5kZWZhdWx0LmdldEd1aWxkcyAmJiAhZS5kZWZhdWx0LmlzRmV0Y2hpbmcpXHJcbiAgICAgICAgaWYoIWVtb2ppU2VhcmNoKWVtb2ppU2VhcmNoID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQpXHJcblxyXG4gICAgICAgIGlmKEF1dG9jb21wbGV0ZU1vZHVsZSAmJiBBdXRvQ29tcGxldGlvblRlbXBsYXRlcyAmJiBFbW9qaU1vZHVsZVF1ZXJ5ICYmIE1lc3NhZ2VzICYmIGd1aWxkTW9kdWxlICYmIGVtb2ppU2VhcmNoKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFBhdGNoaW5nIGdldEF1dG9jb21wbGV0ZU9wdGlvbnMgb2YgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXNgLCBBdXRvQ29tcGxldGlvblRlbXBsYXRlcylcclxuICAgICAgICAgICAgY29uc3QgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzLmdldEF1dG9jb21wbGV0ZU9wdGlvbnNcclxuICAgICAgICAgICAgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyA9IGZ1bmN0aW9uKGUsIHQsIG4sIHIsIGEpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRBdXRvY29tcGxldGVPcHRpb25zLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICAgICAgdmFsdWUuTElHSFRDT1JEX0VNT0pJUyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzKGFyZzEsIGFyZzIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZGl0aW9uID0gYXJnMi5sZW5ndGggPiAxICYmIFwiLlwiID09PSBhcmcxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEVtb2ppVXNhYmxlKGNvbmRpdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHRzKHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IEVtb2ppTW9kdWxlUXVlcnkuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cyh0LCBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUmVzdWx0cyhlLCB0LCBuLCByLCBhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQoZSwgdCwgYS5lbW9qaXMsIG4sIHIsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcsIE1lc3NhZ2VzLmRlZmF1bHQuTWVzc2FnZXMuRU1PSkksIEF1dG9jb21wbGV0ZU1vZHVsZS5kZWZhdWx0LkVtb2ppLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaTogZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGUuaWQgfHwgZS51bmlxdWVOYW1lIHx8IGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50aW5lbDogXCIuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbGQ6IG51bGwgIT0gZS5ndWlsZElkID8gZ3VpbGRNb2R1bGUuZGVmYXVsdC5nZXRHdWlsZChlLmd1aWxkSWQpIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi5cIiArIGUgKyBcIi5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFBsYWluVGV4dChpZCwgZ3VpbGQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamlzID0gZ3VpbGQuZW1vamlzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBlbW9qaXMgfHwgbnVsbCA9PSBlbW9qaXNbaWRdKSByZXR1cm4gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppID0gZW1vamlzW2lkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0ZWQgPSBlbW9qaS5hbmltYXRlZCA/IFwiYVwiIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVtb2ppLm1hbmFnZWQgfHwgbnVsbCA9PSBlbW9qaS5pZCA/IFwiLlwiICsgZW1vamkubmFtZSArIFwiLlwiIDogXCI8XCIgKyBpc0FuaW1hdGVkICsgXCIuXCIgKyAoZW1vamkub3JpZ2luYWxOYW1lIHx8IGVtb2ppLm5hbWUpICsgXCIuXCIgKyBlbW9qaS5pZCArIFwiPlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXRSYXdUZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihcIkNvdWxkbid0IHN0YXJ0IGF1dG9jb21wbGV0aW9uIG9mIExpZ2h0Y29yZCdzIGVtb2ppcy5cIikpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiogRW1vamkgZGlzcGxheSAqL1xyXG4gICAgICAgIHdoaWxlICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW9qaVJlbmRlcil7IC8vIFRPRE86IFByb3BlciBlbW9qaSBmb3JtYXR0aW5nIC8gcmVuZGVyaW5nXHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwiY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlXCIpXHJcbiAgICAgICAgICAgICAgICBpZighbWVzc2FnZSlyZXR1cm5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcImNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudFwiKVxyXG4gICAgICAgICAgICAgICAgaWYoIWNvbnRlbnQgfHwgIWNvbnRlbnQubGVuZ3RoKXJldHVyblxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEB0eXBlIHt7XHJcbiAgICAgICAgICAgICAgICAgKiAgcmF3OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICogIGlkOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgYW5pbWF0ZWQ6IGJvb2xlYW5cclxuICAgICAgICAgICAgICAgICAqIH1bXX1cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgbGV0IGVtb2ppcyA9IFtdXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBbXVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBub2RlIG9mIGNvbnRlbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFyc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNQYXJzZWQgPSBmYWxzZVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gQ29uc3RhbnRzLkVtb2ppUmVnZXguZXhlYyhub2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFyc2VkID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUVtb2ppTW9kdWxlQXBpKUVtb2ppTW9kdWxlQXBpID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vamkgPSBFbW9qaU1vZHVsZUFwaS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZChwYXJzZWRbMl0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihlbW9qaSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogZW1vamkuYW5pbWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGVtb2ppLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3OiBwYXJzZWRbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogcGFyc2VkWzBdLnN0YXJ0c1dpdGgoXCI8YVwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGFyc2VkWzFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFyc2VkWzJdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChwYXJzZWQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaGFzUGFyc2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KFwiIFwiKS5tYXAoKHdvcmQsIGluZGV4LCBhcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF3b3JkKXJldHVybiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IGVtb2ppcy5maW5kKGUgPT4gZS5yYXcgPT0gd29yZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFlbW9qaSlyZXR1cm4gd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIUN1c3RvbUVtb2ppTW9kdWxlKUN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDdXN0b21FbW9qaU1vZHVsZS5DdXN0b21FbW9qaSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAuJHtlbW9qaS5uYW1lfS5gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaUlkOiBlbW9qaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQ6IGVtb2ppLmFuaW1hdGVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1ib2FibGU6IGFyci5sZW5ndGggPT09IDEgJiYgY29udGVudC5sZW5ndGggPT09IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwcmV2aW91cy5sZW5ndGggPT09IDApcmV0dXJuIFtjdXJyZW50XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXSA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdICs9IGAgJHtjdXJyZW50fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIrY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzLnB1c2goXCIgXCIsIGN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbnRlbnQucHVzaCguLi53b3JkcylcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKG5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQuc2hpZnQoKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2hpbGUobmV3Q29udGVudFswXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50LnB1c2gobmV3Q29udGVudC5zaGlmdCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfS8qXHJcbiAgICAgICAgbGV0IHVzZXJNb2R1bGVcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiRW1vamlQaWNrZXJMaXN0Um93XCIpXHJcbiAgICAgICAgLnRoZW4oRW1vamlQaWNrZXJMaXN0Um93ID0+IHtcclxuICAgICAgICAgICAgbGV0IGNsYXNzcyA9IEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0XHJcbiAgICAgICAgICAgIEVtb2ppUGlja2VyTGlzdFJvdy5kZWZhdWx0ID0gY2xhc3MgRW1vamlQaWNrZXJMaXN0Um93IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICAgICAgICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlck1vZHVsZSl1c2VyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIXVzZXJNb2R1bGUpcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCB0aGlzLnByb3BzKVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB1c2VyID0gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uKXJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNsYXNzcywgdGhpcy5wcm9wcylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppRGVzY3JpcHRvcnM6IHRoaXMucHJvcHMuZW1vamlEZXNjcmlwdG9ycy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlzRGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHQuZGlzcGxheU5hbWUgPSBcIkVtb2ppUGlja2VyTGlzdFJvd1wiXHJcbiAgICAgICAgfSkqL1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKXtcclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gRChlLCB0LCBuLCByLCBvLCBpLCBzLCB1LCBsLCBjKSB7XHJcbiAgICBpZiAobnVsbCA9PSBuIHx8IDAgPT09IG4ubGVuZ3RoKSByZXR1cm4gbnVsbDtcclxuICAgIHZhciBkID0gbi5tYXAoKGZ1bmN0aW9uKGUsIG4pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCh1LCBPYmplY3QuYXNzaWduKHtcclxuICAgICAgICAgICAgb25DbGljazogbyxcclxuICAgICAgICAgICAgb25Ib3ZlcjogcixcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHQgPT09IG4sXHJcbiAgICAgICAgICAgIGluZGV4OiBuXHJcbiAgICAgICAgfSwgbChlLCBuKSkpXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4gW1IoaSwgcywgZSwgYyksIGRdXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFIoZSwgdCwgbiwgcikge1xyXG4gICAgdmFyIGEgPSAobi5sZW5ndGggPiAwID8gZS5mb3JtYXQoe1xyXG4gICAgICAgIHByZWZpeDogcihuKVxyXG4gICAgfSkgOiB0KVxyXG4gICAgaWYoQXJyYXkuaXNBcnJheShhKSl7XHJcbiAgICAgICAgYS51bnNoaWZ0KFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwge30sIFwiW0xpZ2h0Y29yZF0gXCIpKVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgYSA9IFwiW0xJR0hUQ09SRF0gXCIrYVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuVGl0bGUsIHtcclxuICAgICAgICB0aXRsZTogYVxyXG4gICAgfSwgYSlcclxufVxyXG5SLmRpc3BsYXlOYW1lID0gXCJyZW5kZXJIZWFkZXJcIjtcclxuXHJcbmxldCBFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxubGV0IGlzRW1vamlEaXNhYmxlZCA9IEVtb2ppRmlsdGVyTW9kdWxlICYmIEVtb2ppRmlsdGVyTW9kdWxlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkXHJcbmxldCBpc1VzYWJsZSA9IGZhbHNlXHJcbmxldCBoYXNQYXRjaGVkID0gZmFsc2VcclxuXHJcbmZ1bmN0aW9uIHNldEVtb2ppVXNhYmxlKHVzYWJsZSl7XHJcbiAgICBpc1VzYWJsZSA9IHVzYWJsZVxyXG4gICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlFbW9qaUZpbHRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZClbMF1cclxuICAgIGlmKCFFbW9qaUZpbHRlck1vZHVsZSlyZXR1cm5cclxuICAgIGlmKCFpc0Vtb2ppRGlzYWJsZWQpaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxuXHJcbiAgICBoYXNQYXRjaGVkID0gdHJ1ZVxyXG4gICAgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWQgPSBmdW5jdGlvbihlbW9qaSl7XHJcbiAgICAgICAgaWYoaXNVc2FibGUpe1xyXG4gICAgICAgICAgICBpZihlbW9qaS5zdXJyb2dhdGVzIHx8IGVtb2ppLmRpdmVyc2l0eSlyZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzRW1vamlEaXNhYmxlZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcclxuICAgIH1cclxufSIsImltcG9ydCBub2RlRmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxyXG5pbXBvcnQgKiBhcyBlbGVjdHJvbiBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSBcImNyeXB0b1wiXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCJcclxuaW1wb3J0IHRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiXHJcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwiZnNcIlxyXG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCJcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCJcclxuaW1wb3J0IHsgYWRkb25DYWNoZSB9IGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCJcclxuXHJcbmNvbnN0IGNhY2hlID0ge31cclxuY29uc3QgY2FjaGUyID0ge31cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBQbHVnaW5DZXJ0aWZpZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuUGx1Z2luQ2VydGlmaWVyID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoKGF0dGFjaG1lbnQsIGlkKXtcclxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICAgICAgcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpe1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpc1RydXN0ZWQoaGFzaCl7XHJcbiAgICAgICAgcmV0dXJuIGNhY2hlW2hhc2hdICYmICFjYWNoZVtoYXNoXS5zdXNwZWN0XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSl7XHJcbiAgICBkYXRhID0gZGF0YS50b1N0cmluZyhcInV0ZjhcIilcclxuICAgIGxldCBpc0hhcm1mdWwgPSBmYWxzZVxyXG4gICAgZm9yKGxldCBrZXl3b3JkIG9mIGRhdGEuc3BsaXQoL1teXFx3XFxkXSsvZykpe1xyXG4gICAgICAgIGZvcihsZXQgb29mIG9mIFtcclxuICAgICAgICAgICAgXCJ0b2tlblwiLFxyXG4gICAgICAgICAgICBcImVtYWlsXCIsXHJcbiAgICAgICAgICAgIFwicGhvbmVcIixcclxuICAgICAgICAgICAgXCJNRkFcIixcclxuICAgICAgICAgICAgXCIyZmFcIixcclxuICAgICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXHJcbiAgICAgICAgICAgIFwibG9jYWxTdG9yYWdlXCIsXHJcbiAgICAgICAgICAgIFwiZXZhbFwiLFxyXG4gICAgICAgICAgICBcImdldEdsb2JhbFwiLFxyXG4gICAgICAgICAgICBcIkJyb3dzZXJXaW5kb3dcIlxyXG4gICAgICAgIF0pe1xyXG4gICAgICAgICAgICBpZihrZXl3b3JkLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMob29mLnRvTG93ZXJDYXNlKCkpICYmICFrZXl3b3JkLnRvTG93ZXJDYXNlKCkgPT09IFwiZG9tdG9rZW5saXN0XCIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cob29mLCBrZXl3b3JkKVxyXG4gICAgICAgICAgICAgICAgaXNIYXJtZnVsID0gXCJ0b2tlbiBzdGVhbGVyL3ZpcnVzXCJcclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGlzSGFybWZ1bClicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpe1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3Qgbm9fY29tbWVudHMgPSBkYXRhLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98KFteXFxcXDpdfF4pXFwvXFwvLiokL2dtLCBcIlwiKS50cmltKCkvLyByZW1vdmluZyB0aGUgTUVUQSBjb21tZW50IGZyb20gcGx1Z2luc1xyXG4gICAgICAgIGlmKCgvdmFyIFtcXHdcXGRfJF0rPVxcW1wiL2dpKS50ZXN0KG5vX2NvbW1lbnRzKSl7XHJcbiAgICAgICAgICAgIGlzSGFybWZ1bCA9IFwib2JmdXNjYXRpb24vaGlkZGVuIGNvZGVcIlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIWlzSGFybWZ1bCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlZ2V4cHMgPSBbXHJcbiAgICAgICAgICAgICAgICAvKiogaGV4YWRlY2ltYWwgKi9cclxuICAgICAgICAgICAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnXFwpL2csXHJcbiAgICAgICAgICAgICAgICAvXzB4XFx3ezR9XFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2csIC8vIF8weDhkYjcoJzB4MCcsICd4MV1mJylcclxuICAgICAgICAgICAgICAgIC8qKiBtYW5nbGVkICovXHJcbiAgICAgICAgICAgICAgICAvXFx3K1xcKCcweFtcXGRhYmNkZWZdKydcXCkvZywgLy8gYignMHgwJylcclxuICAgICAgICAgICAgICAgIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1ssIF0rJ1teJ117NH0nXFwpL2csIC8vIGIoJzB4MCcsICd4MV1mJylcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBmb3IobGV0IHJlZ2V4IG9mIHJlZ2V4cHMpe1xyXG4gICAgICAgICAgICAgICAgaWYoaXNIYXJtZnVsKWJyZWFrXHJcbiAgICAgICAgICAgICAgICBpZihyZWdleC50ZXN0KG5vX2NvbW1lbnRzKSlpc0hhcm1mdWwgPSBcIm9iZnVzY2F0aW9uL2hpZGRlbiBjb2RlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZighaXNIYXJtZnVsKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxyXG4gICAgY2FjaGVbaGFzaF0gPSB7XHJcbiAgICAgICAgc3VzcGVjdDogdHJ1ZSxcclxuICAgICAgICBuYW1lOiBoYXNoVG9VcmxbaGFzaF0uc3BsaXQoXCIvXCIpLnBvcCgpLFxyXG4gICAgICAgIHR5cGU6IGhhc2hUb1VybFtoYXNoXS5lbmRzV2l0aChcIi5qc1wiKSA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCIsXHJcbiAgICAgICAgaGFybTogaXNIYXJtZnVsLFxyXG4gICAgICAgIGhhc2g6IGhhc2gsXHJcbiAgICAgICAgZmlsZW5hbWVcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc29sZS5sb2coYEZvdW5kIHBvdGVudGlhbGx5IGRhbmdlcm91cyAke2NhY2hlW2hhc2hdLnR5cGUudG9Mb3dlckNhc2UoKX06ICR7Y2FjaGVbaGFzaF0ubmFtZX1gKVxyXG5cclxuICAgIHJlc3VsdENhbGxiYWNrKGNhY2hlW2hhc2hdKVxyXG59XHJcblxyXG5jb25zdCBoYXNoVG9VcmwgPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSGFzaChoYXNoLCBkYXRhLCBmaWxlbmFtZSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrKXtcclxuICAgIGNvbnNvbGUubG9nKGBGaWxlOiAke2ZpbGVuYW1lfSBoYXNoOiAke2hhc2h9YClcclxuICAgIGlmKCFjYWNoZVtoYXNoXSl7XHJcbiAgICAgICAgbm9kZUZldGNoKFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL0xpZ2h0Y29yZC9maWxlaGFzaGVzQG1hc3Rlci9oYXNoZXMvXCIraGFzaCwgeyAvLyBVc2luZyBub2RlLWZldGNoIHRvIGJ5cGFzcyBjb3JzXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50IC8vIGhhdmUgdG8gc2V0IHVzZXItYWdlbnRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXtcclxuICAgICAgICAgICAgICAgIGlmKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRoZW1lLmNzc1wiKSlyZXR1cm4gcmVtb3ZlQ2FsbGJhY2soaGFzaClcclxuICAgICAgICAgICAgICAgIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICByZXN1bHQuaGFzaCA9IGhhc2hcclxuICAgICAgICAgICAgcmVzdWx0LmZpbGVuYW1lID0gZmlsZW5hbWVcclxuXHJcbiAgICAgICAgICAgIGNhY2hlW2hhc2hdID0gcmVzdWx0XHJcblxyXG4gICAgICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBDb3VsZCBub3QgcmVhZCBmcm9tIGdpdGh1Yi4gJHtlcnJ9YClcclxuICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxyXG4gICAgICAgICAgICBjaGVja1ZpcnVzZXMoaGFzaCwgZGF0YSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrLCBmaWxlbmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FjaGVbaGFzaF1cclxuXHJcbiAgICAgICAgcmVzdWx0Q2FsbGJhY2socmVzdWx0KVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0ZpbGUoX19wYXRoLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2sgPSAoaGFzaCkgPT4ge30sIGlzRnJvbUxvYWRlciA9IGZhbHNlKXsgICAgXHJcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgIGxldCBkYXRhID0gQnVmZmVyLmFsbG9jKDApXHJcblxyXG4gICAgY3JlYXRlUmVhZFN0cmVhbShfX3BhdGgpLm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW2RhdGEsIGNodW5rXSlcclxuICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgIH0pLm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgaGFzaFRvVXJsW2hhc2hSZXN1bHRdID0gX19wYXRoXHJcblxyXG4gICAgICAgIGlmKGlzRnJvbUxvYWRlciAmJiBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdKXtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICBpZih2YWx1ZS50aW1lc3RhbXAgPCAoRGF0ZS5ub3coKSAtIDYuMDQ4ZSs4KSl7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtoYXNoUmVzdWx0XVxyXG4gICAgICAgICAgICAgICAgY29udGVudE1hbmFnZXIuc2F2ZUFkZG9uQ2FjaGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHZhbHVlLnJlc3VsdClcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYmFzZW5hbWUoX19wYXRoKSwgcmVzdWx0Q2FsbGJhY2ssIHJlbW92ZUNhbGxiYWNrKVxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NBdHRhY2htZW50KGF0dGFjaG1lbnQsIGlkKXtcclxuICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkpcmV0dXJuXHJcbiAgICBpZighYXR0YWNobWVudC51cmwuc3RhcnRzV2l0aChcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL1wiKSlyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpXHJcbiAgICBpZighYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi5wbHVnaW4uanNcIikgJiYgIWF0dGFjaG1lbnQuZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuXHJcbiAgICBub2RlRmV0Y2goYXR0YWNobWVudC51cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiVXNlci1BZ2VudFwiOiBlbGVjdHJvbi5yZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkudXNlckFnZW50XHJcbiAgICAgICAgfVxyXG4gICAgfSkudGhlbihyZXMgPT4ge1xyXG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJGaWxlIGRvZXNuJ3QgZXhpc3QuXCIpXHJcbiAgICAgICAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpXHJcbiAgICAgICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuICAgICAgICByZXMuYm9keS5vbihcImRhdGFcIiwgY2h1bmsgPT4ge1xyXG4gICAgICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgICAgICBoYXNoLnVwZGF0ZShjaHVuaylcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGFzaFJlc3VsdCA9IGhhc2guZGlnZXN0KFwiaGV4XCIpXHJcblxyXG4gICAgICAgICAgICBjYWNoZTJbYXR0YWNobWVudC51cmxdID0gaGFzaFJlc3VsdFxyXG4gICAgICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBhdHRhY2htZW50LnVybFxyXG5cclxuICAgICAgICAgICAgY2hlY2tIYXNoKGhhc2hSZXN1bHQsIGRhdGEsIGF0dGFjaG1lbnQuZmlsZW5hbWUsIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgYXR0YWNobWVudC5maWxlbmFtZSlcclxuICAgICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcclxuICAgICAgICAgICAgICAgIGlmKGVsZW0pZWxlbS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KS5jYXRjaCgoKT0+e30pXHJcbn1cclxuXHJcbmxldCBmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxubGV0IGNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcblxyXG4vKipcclxuICogXHJcbiAqIEBwYXJhbSB7SFRNTERpdkVsZW1lbnRbXX0gZWxlbWVudHMgXHJcbiAqIEBwYXJhbSB7e3R5cGU6IFwiVGhlbWVcInxcIlBsdWdpblwiLCBuYW1lOiBzdHJpbmcsIG9mZmljaWFsPzogYm9vbGVhbn18e3N1c3BlY3Q6dHJ1ZSwgdHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgaGFybTogc3RyaW5nfX0gcmVzdWx0XHJcbiAqL1xyXG5mdW5jdGlvbiByZW5kZXJUb0VsZW1lbnRzKGlkLCByZXN1bHQsIGZpbGVuYW1lKXtcclxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgaWYoIWRpdiB8fCBkaXYuY2hpbGROb2Rlcy5sZW5ndGggPiAwKXJldHVybiAvLyBhbHJlYWR5IGNlcnRpZmllZC9kaXYgZG9lcyBub3QgZXhpc3QgYW55bW9yZS5cclxuXHJcbiAgICBpZighZmxvd2VyU3Rhck1vZHVsZSlmbG93ZXJTdGFyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZmxvd2VyU3RhckNvbnRhaW5lcilbMF1cclxuICAgIGlmKCFjaGlsZE1vZHVsZSljaGlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoaWxkQ29udGFpbmVyKVswXVxyXG4gICAgXHJcbiAgICBpZihyZXN1bHQuc3VzcGVjdCl7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBcclxuICAgICAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSBcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGxldCBuZXh0Tm9kZSA9IChub2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNoaWxkLnRhZ05hbWUgPT09IFwiQVwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVGhlIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgKipcIitmaWxlbmFtZStcIioqIG1pZ2h0IGJlIGRhbmdlcm91cyAqKihcIityZXN1bHQuaGFybStcIikqKi4gXFxuXFxuKipXZSBkb24ndCByZWNvbW1hbmQgdG8gZG93bmxvYWQgaXQqKi4gSG93ZXZlciwgeW91IGNhbiBzdGlsbCBkbyBpdCBiZWxvdy5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBBbnl3YXlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJEb24ndCAhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZWN0cm9uLnJlbW90ZS5zaGVsbC5vcGVuRXh0ZXJuYWwoY2hpbGQuaHJlZilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihbXCJkaXZcIl0uaW5jbHVkZXMoY2hpbGQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb2RlKGNoaWxkKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuZXh0Tm9kZShkaXYucGFyZW50Tm9kZSlcclxuICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLlwifSwgXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogQkRNb2R1bGVzLmdldChlID0+IGUuc3ZnKVswXS5zdmcsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgNDAgMzJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6XCIwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OlwiMzJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stYXZhdGFyLXN0YXR1cy1yb3VuZC0zMilcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDpcIiNmMDQ3NDdcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazpcInVybCgjc3ZnLW1hc2stc3RhdHVzLWRuZClcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOkJETW9kdWxlcy5nZXQoZSA9PiBlLnBvaW50ZXJFdmVudHMpWzBdLnBvaW50ZXJFdmVudHNcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSwgZGl2KVxyXG4gICAgfWVsc2UgaWYoIXJlc3VsdC5vZmZpY2lhbCl7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIGlzIGNlcnRpZmllZCBieSBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwiLCBmbG9hdDogXCJsZWZ0XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjNGY1NDVjXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTcuNCwxMS4xNyw0LDguNjIsNSw3LjI2bDIsMS41M0wxMC42NCw0bDEuMzYsMVpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhbmQgbGF1bmNoIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIi4gWW91IGRvbid0IGhhdmUgYW55dGhpbmcgdG8gZG8uXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVGZXRjaChsaW5rKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBuZXcgRXJyb3IoXCJTdGF0dXMgd2FzIG5vdCAyMDBcIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBhd2FpdCByZXMuYnVmZmVyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc3RhbGxQYXRoID0gam9pbihyZXN1bHQudHlwZSA9PT0gXCJQbHVnaW5cIiA/IGNvbnRlbnRNYW5hZ2VyLl9wbHVnaW5zRm9sZGVyIDogY29udGVudE1hbmFnZXIuX3RoZW1lc0ZvbGRlciwgcmVzdWx0LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhpbnN0YWxsUGF0aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlU3luYyhpbnN0YWxsUGF0aCwgY29udGVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KHJlc3VsdC50eXBlK1wiIHN1Y2Nlc2Z1bGx5IGluc3RhbGxlZC5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChlcnIubWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMjQgMjRcIixzdHlsZTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYig2NywgMTgxLCAxMjkpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPVwiZmlsbFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICBdKVxyXG4gICAgICAgIEJEVjIucmVhY3REb20ucmVuZGVyKHNwYW4sIGRpdilcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCIjNDA4N2VkXCJcclxuICAgICAgICBsZXQgc3BhbiA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZGlzcGxheTogXCJpbmhlcml0XCJ9fSwgW1xyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiB3YXMgbWFkZSBieSB0aGUgZGV2ZWxvcGVycyBvZiBMaWdodGNvcmQuXCIsIHN0eWxlOlwiYnJhbmRcIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwiLHN0cm9rZTpcIiMzNjM5M2ZcIixzdHlsZTp7Y29sb3I6XCIjNDA4N2VkXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcImN1cnJlbnRDb2xvclwiLCBcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLGQ6XCJtMTYgNy42YzAgLjc5LTEuMjggMS4zOC0xLjUyIDIuMDlzLjQ0IDIgMCAyLjU5LTEuODQuMzUtMi40Ni44LS43OSAxLjg0LTEuNTQgMi4wOS0xLjY3LS44LTIuNDctLjgtMS43NSAxLTIuNDcuOC0uOTItMS42NC0xLjU0LTIuMDktMi0uMTgtMi40Ni0uOC4yMy0xLjg0IDAtMi41OS0xLjU0LTEuMy0xLjU0LTIuMDkgMS4yOC0xLjM4IDEuNTItMi4wOS0uNDQtMiAwLTIuNTkgMS44NS0uMzUgMi40OC0uOC43OC0xLjg0IDEuNTMtMi4xMiAxLjY3LjgzIDIuNDcuODMgMS43NS0xIDIuNDctLjguOTEgMS42NCAxLjUzIDIuMDkgMiAuMTggMi40Ni44LS4yMyAxLjg0IDAgMi41OSAxLjU0IDEuMyAxLjU0IDIuMDl6XCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNoaWxkTW9kdWxlLmNoaWxkQ29udGFpbmVyfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2ZpbGw6XCIjZmZmZmZmXCIsZDpcIk0xMC43LDUuMjhhMi45LDIuOSwwLDAsMC0yLjExLjg2LjExLjExLDAsMCwwLDAsLjE2bDEuMDUuOTRhLjExLjExLDAsMCwwLC4xNSwwLDEuMjcsMS4yNywwLDAsMSwuOS0uMzNjLjY1LDAsLjY1LjczLjY1LjczYS42NC42NCwwLDAsMS0uNjUuNjUsMS43MywxLjczLDAsMCwxLTEuMTgtLjU0Yy0uMzEtLjI2LS4zNi0uMzItLjczLS42NlM3LjA2LDUuMjgsNS42NSw1LjI4QTIuMjYsMi4yNiwwLDAsMCwzLjM3LDcuNTYsMi41OSwyLjU5LDAsMCwwLDMuODIsOWEyLjE4LDIuMTgsMCwwLDAsMS44My44OSwyLjk0LDIuOTQsMCwwLDAsMi4xLS44MS4xMS4xMSwwLDAsMCwwLS4xNkw2Ljc0LDhBLjExLjExLDAsMCwwLDYuNiw4YTEuNTgsMS41OCwwLDAsMS0uOTQuMjloMEEuNzEuNzEsMCwwLDEsNSw3LjU2SDVhLjYzLjYzLDAsMCwxLC42NS0uNjRjLjcxLDAsMS40Mi43NSwxLjk0LDEuMjcuNzUuNzYsMS42NiwxLjc5LDMuMTEsMS43NEEyLjI4LDIuMjgsMCwwLDAsMTMsNy42NGEyLjU5LDIuNTksMCwwLDAtLjQ1LTEuNDdBMi4xNCwyLjE0LDAsMCwwLDEwLjcsNS4yOFpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IFwiSW5zdGFsbCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIgb24gTGlnaHRjb3JkLlwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIn0sIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiA/XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkxpZ2h0Y29yZCB3aWxsIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgbXVzdCBlbmFibGUgaXQgaW4gdGhlIHNldHRpbmdzLlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRG93bmxvYWQgYW5kIEluc3RhbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IFwiSSd2ZSBjaGFuZ2VkIG15IG1pbmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbmdlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluayA9IGdldEtleWVkQXJyYXkoY2FjaGUyKS5maW5kKGUgPT4gZVsxXSA9PT0gcmVzdWx0Lmhhc2gpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRLZXllZEFycmF5KG9iail7XHJcbiAgICBsZXQgYXJyID0gW11cclxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChrID0+IHtcclxuICAgICAgICBhcnIucHVzaChbaywgb2JqW2tdXSlcclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXJyXHJcbn1cclxuXHJcbmxldCBrZXkgPSBudWxsXHJcbmxldCBzYXZlID0gbnVsbFxyXG5cclxud2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQobT0+bS5PYmplY3RTdG9yYWdlKVxyXG4udGhlbihsb2NhbFN0b3JhZ2VNb2R1bGUgPT4ge1xyXG4gICAgbGV0IGxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZU1vZHVsZS5pbXBsXHJcbiAgICBzYXZlID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIsIGJ0b2EoSlNPTi5zdHJpbmdpZnkoa2V5KSkpXHJcbiAgICB9XHJcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9LCAxMDAwMDApO1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCB2YWwgPSBzYWZlSlNPTlBhcnNlKGF0b2IobG9jYWxTdG9yYWdlLmdldChcIlBsdWdpbkNlcnRpZmllcktleUVuY3J5cHRpb25fX1wiKSkpXHJcbiAgICAgICAgaWYodmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgIUFycmF5LmlzQXJyYXkodmFsKSB8fCB2YWwubGVuZ3RoICE9PSAyIHx8IHZhbC5maW5kKGUgPT4gdHlwZW9mIGUgIT09IFwic3RyaW5nXCIpIHx8IEJ1ZmZlci5mcm9tKHZhbFswXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAxNiB8fCBCdWZmZXIuZnJvbSh2YWxbMV0sIFwiYmFzZTY0XCIpLmxlbmd0aCAhPT0gMzIpe1xyXG4gICAgICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgICAgIHNhdmUoKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAga2V5ID0gdmFsXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgZ2VuZXJhdGVLZXkoKVxyXG4gICAgICAgIHNhdmUoKVxyXG4gICAgfVxyXG59KVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhdGVLZXkoKXtcclxuICAgIGtleSA9IFtjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLCBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXVxyXG59XHJcblxyXG5mdW5jdGlvbiBzYWZlSlNPTlBhcnNlKGpzb24pe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvciA/IG5ldyBFcnJvcihlKSA6IGVcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGEpe1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIGxldCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KFwiYWVzLTI1Ni1jYmNcIiwgQnVmZmVyLmZyb20oa2V5WzFdLCBcImJhc2U2NFwiKSwgQnVmZmVyLmZyb20oa2V5WzBdLCBcImJhc2U2NFwiKSlcclxuICAgICAgICBsZXQgZGVjcnlwdGVkID0gZGVjaXBoZXIudXBkYXRlKEJ1ZmZlci5mcm9tKGRhdGEsIFwiYmFzZTY0XCIpKTtcclxuICAgICAgICBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtkZWNyeXB0ZWQsIGRlY2lwaGVyLmZpbmFsKCldKTtcclxuICAgICAgICByZXR1cm4gZGVjcnlwdGVkLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgfWNhdGNoKGUpe1xyXG4gICAgICAgIHJldHVybiBcInt9XCJcclxuICAgIH1cclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZW5jcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICBsZXQgYXJncyA9IFtCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpXVxyXG4gICAgXHJcbiAgICBsZXQgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KCdhZXMtMjU2LWNiYycsIC4uLmFyZ3MpO1xyXG4gICAgbGV0IGVuY3J5cHRlZCA9IGNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJ1dGY4XCIpKTtcclxuICAgIGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2VuY3J5cHRlZCwgY2lwaGVyLmZpbmFsKCldKTtcclxuICAgIHJldHVybiBlbmNyeXB0ZWQudG9TdHJpbmcoXCJiYXNlNjRcIilcclxufSIsImltcG9ydCB7YmRwbHVnaW5FcnJvcnMsIHBsdWdpbkNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBQbHVnaW5Nb2R1bGUge1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5Nb2R1bGUgPSB0aGlzXG4gICAgfVxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXI7fVxufVxuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5zID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIHRoaXMubG9hZFBsdWdpbkRhdGEoKTtcbiAgICBiZHBsdWdpbkVycm9ycy5zcGxpY2UoMCwgMCwgLi4uKGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRQbHVnaW5zKCkpKTtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHBsdWdpbiwgbmFtZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4uZ2V0TmFtZSgpO1xuICAgICAgICAgICAgaWYgKHBsdWdpbi5sb2FkICYmIHR5cGVvZihwbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBwbHVnaW4ubG9hZCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIGxvYWRlZC5cIiwgZXJyKTtcbiAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtuYW1lXSkgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHBsdWdpbkNvb2tpZVtuYW1lXSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHBsdWdpbkNvb2tpZVtuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIlBsdWdpbnNcIiwgbmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgICAgIGJkcGx1Z2luRXJyb3JzLnB1c2goe25hbWU6IG5hbWUsIGZpbGU6IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5maWxlbmFtZSwgbWVzc2FnZTogXCJzdGFydCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSlcbiAgICB9XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuXG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMuY2hhbm5lbFN3aXRjaC5iaW5kKHRoaXMpKTtcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RhcnRQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0YXJ0KCk7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gaGFzIHN0YXJ0ZWQuYCk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBjb3VsZCBub3QgYmUgc3RhcnRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBwbHVnaW4gKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnN0b3BQbHVnaW4gPSBmdW5jdGlvbihwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLnN0b3AoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RvcHBlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lbmFibGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gdHJ1ZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luXSkgcmV0dXJuO1xuICAgIHBsdWdpbkNvb2tpZVtwbHVnaW5dID0gZmFsc2U7XG4gICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAocGx1Z2luLCByZWxvYWQgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS50b2dnbGVQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luKTtcbiAgICBlbHNlIHRoaXMuZW5hYmxlUGx1Z2luKHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBjb25zdCBwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IChjb25zb2xlLmxvZyhwLmZpbGVuYW1lLCBmaWxlbmFtZSkpIHx8IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWUpLnBsdWdpbjtcbiAgICB0cnkgeyBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7fVxuICAgIGNhdGNoIChlcnIpIHtpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyXX0pO31cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW4uZ2V0TmFtZSgpfSB2JHtwbHVnaW4uZ2V0VmVyc2lvbigpfSB3YXMgbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJwbHVnaW4tbG9hZGVkXCIsIHBsdWdpbi5nZXROYW1lKCkpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51bmxvYWRQbHVnaW4gPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGlmIChwbHVnaW5Db29raWVbcGx1Z2luXSkgdGhpcy5kaXNhYmxlUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBkZWxldGUgYmRwbHVnaW5zW3BsdWdpbl07XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi11bmxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHBsdWdpbnMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHBsdWdpbnNbZmlsZW5hbWVPck5hbWVdO1xuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcbiAgICB0aGlzLnVubG9hZFBsdWdpbihiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICByZXF1aXJlKFwiZnNcIikudW5saW5rU3luYyhmdWxsUGF0aCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW4ucGx1Z2luLmdldE5hbWUoKTtcbiAgICBjb25zdCBlbmFibGVkID0gcGx1Z2luQ29va2llW3BsdWdpbl07XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RvcFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIucmVsb2FkQ29udGVudChiZHBsdWdpbnNbcGx1Z2luXS5maWxlbmFtZSwgXCJwbHVnaW5cIik7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7cGx1Z2lufSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQgJiYgdHlwZW9mKGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5sb2FkKCk7XG4gICAgaWYgKGVuYWJsZWQpIHRoaXMuc3RhcnRQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gKTtcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1yZWxvYWRlZFwiLCBwbHVnaW4pO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMucmVsb2FkUGx1Z2luKG5hbWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmaWxlbmFtZU9yTmFtZSk7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XG4gICAgY29uc29sZS5sb2coXCJFZGl0IFwiICsgZnVsbFBhdGgpO1xuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlUGx1Z2luTGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInBsdWdpblwiKTtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZFBsdWdpbihmaWxlbmFtZSk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmxvYWRQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInBsdWdpbnNcIik7XG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGx1Z2luQ29va2llLCBzYXZlZCk7XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zYXZlUGx1Z2luRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiLCBwbHVnaW5Db29raWUpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5uZXdNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uTWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25NZXNzYWdlKCk7IH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBmaXJlIG9uTWVzc2FnZSBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuY2hhbm5lbFN3aXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoYmRwbHVnaW5zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGx1Z2luID0gYmRwbHVnaW5zW3BsdWdpbnNbaV1dLnBsdWdpbjtcbiAgICAgICAgaWYgKCFwbHVnaW5Db29raWVbcGx1Z2luLmdldE5hbWUoKV0pIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vblN3aXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25Td2l0Y2goKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJhd09ic2VydmVyID0gZnVuY3Rpb24oZSkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vYnNlcnZlcihlKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgcGx1Z2luLmdldE5hbWUoKSArIFwiLlwiLCBlcnIpOyB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGx1Z2luTW9kdWxlKCk7IiwiaW1wb3J0IHsgdGhlbWVDb29raWUgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIlxyXG5pbXBvcnQgYmRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIlxyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCJcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBwb3BvdXRXaW5kb3cge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBAdHlwZSB7TWFwPHN0cmluZywgV2luZG93Pn1cclxuICAgICAgICAgKi9cclxuICAgICAgICB0aGlzLndpbmRvd3MgPSBuZXcgTWFwKClcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuaW5pdCgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIGxldCBwb3BvdXRNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0V2luZG93KVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuRGlzY29yZE1vZHVsZXMuZGlzcGF0Y2hlci5zdWJzY3JpYmUoXCJQT1BPVVRfV0lORE9XX09QRU5cIiwgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEB0eXBlIHtXaW5kb3d9XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvdyA9IHBvcG91dE1vZHVsZS5kZWZhdWx0LmdldFdpbmRvdyhldi5rZXkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLndpbmRvd3Muc2V0KGV2LmtleSwgd2luZG93KVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbGFzc0xpc3QgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3RcclxuICAgICAgICAgICAgICAgIGNsYXNzTGlzdC5hZGQoXCJ3aW5kb3ctcG9wb3V0XCIpXHJcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwibGlnaHRjb3JkXCIpXHJcbiAgICAgICAgICAgICAgICBjbGFzc0xpc3QuYWRkKFwibGlnaHRjb3JkXCIpXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoZXYua2V5KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIlBPUE9VVF9XSU5ET1dfQ0xPU0VcIiwgKGV2KSA9PiB7XHJcbiAgICAgICAgICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndpbmRvd3MuZGVsZXRlKGV2LmtleSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtZW5hYmxlZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtZGlzYWJsZWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICAgICAgfSlcclxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLXJlbG9hZGVkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS11bmxvYWRlZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtbG9hZGVkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlKGtleSl7XHJcbiAgICAgICAgaWYoIXRoaXMud2luZG93cy5zaXplKXJldHVyblxyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpe1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVUaGVtZXMoa2V5KVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseVRoZW1lcyhrZXkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVRoZW1lcyhrZXkpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICBpZihrZXkpe1xyXG4gICAgICAgICAgICBsZXQgd2luZG93ID0gdGhpcy53aW5kb3dzLmdldChrZXkpXHJcbiAgICAgICAgICAgIGlmKCF3aW5kb3cpcmV0dXJuXHJcbiAgICAgICAgICAgIGxldCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxyXG5cclxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1saWdodGNvcmQtdGhlbWU9dHJ1ZV1cIikpe1xyXG4gICAgICAgICAgICAgICAgc3R5bGUucmVtb3ZlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBmb3IobGV0IGtleSBvZiB0aGlzLndpbmRvd3Mua2V5cygpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVGhlbWVzKGtleSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhcHBseVRoZW1lcyhrZXkpe1xyXG4gICAgICAgIGlmKCF0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgaWYoa2V5KXtcclxuICAgICAgICAgICAgbGV0IHdpbmRvdyA9IHRoaXMud2luZG93cy5nZXQoa2V5KVxyXG4gICAgICAgICAgICBpZighd2luZG93KXJldHVyblxyXG4gICAgICAgICAgICBsZXQgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnRcclxuXHJcbiAgICAgICAgICAgIGZvcihsZXQgc3R5bGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtbGlnaHRjb3JkLXRoZW1lPXRydWVdXCIpKXtcclxuICAgICAgICAgICAgICAgIHN0eWxlLnNldEF0dHJpYnV0ZShcIndpbGwtcmVtb3ZlXCIsIFwidHJ1ZVwiKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhiZHRoZW1lcylcclxuICAgICAgICAgICAgLmZvckVhY2godGhlbWVOYW1lID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCF0aGVtZUNvb2tpZVt0aGVtZU5hbWVdKXJldHVybiAvLyB0aGVtZSBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1t0aGVtZU5hbWVdXHJcbiAgICAgICAgICAgICAgICBpZighdGhlbWUpcmV0dXJuIC8vOnNocnVnOlxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXSNcIitET00uZXNjYXBlSUQodGhlbWUuaWQpKVxyXG4gICAgICAgICAgICAgICAgaWYoZXhpc3Rpbmcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmlubmVySFRNTCA9IHVuZXNjYXBlKHRoZW1lLmNzcylcclxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmVBdHRyaWJ1dGUoXCJ3aWxsLXJlbW92ZVwiKVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIilcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5pZCA9IERPTS5lc2NhcGVJRCh0aGVtZS5pZClcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5pbm5lckhUTUwgPSB1bmVzY2FwZSh0aGVtZS5jc3MpXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuc2V0QXR0cmlidXRlKFwiZGF0YS1saWdodGNvcmQtdGhlbWVcIiwgXCJ0cnVlXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVt3aWxsLXJlbW92ZT10cnVlXVwiKSl7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGZvcihsZXQga2V5IG9mIHRoaXMud2luZG93cy5rZXlzKCkpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVRoZW1lcyhrZXkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgVjJDX1B1YmxpY1NlcnZlcnMgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvcHVibGljU2VydmVyc1wiO1xyXG5pbXBvcnQgTGF5ZXIgZnJvbSBcIi4uL3VpL3B1YmxpY3NlcnZlcnMvbGF5ZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9QdWJsaWNTZXJ2ZXJzIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24gPSB0aGlzLl9hcHBlbmRCdXR0b24uYmluZCh0aGlzKTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjJfUHVibGljU2VydmVycyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5ZXIsIHtyb290SWQ6IFwicHVic2xheWVycm9vdFwiLCBpZDogXCJwdWJzbGF5ZXJcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfUHVibGljU2VydmVycywge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCJ9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInB1YnNsYXllcnJvb3RcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIF9yb290O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdFJvb3QoKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lTGF5ZXJzXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUubGF5ZXJzICYmIGUubGF5ZXIpWzBdLmxheWVycylcclxuICAgICAgICBdXHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gRE9NLnF1ZXJ5KFwiLmxheWVycywgLlwiK2NsYXNzTmFtZUxheWVycyk7XHJcbiAgICAgICAgaWYgKCFsYXllcnMpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsYXllcnMuYXBwZW5kKERPTS5jcmVhdGVFbGVtZW50KFwiPGRpdiBpZD0ncHVic2xheWVycm9vdCc+XCIpKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMucm9vdDtcclxuICAgICAgICBpZiAoIXJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gTE9DQVRFIFJPT1Q6IC5sYXllcnNcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIodGhpcy5jb21wb25lbnQsIHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b24oKSB7XHJcbiAgICAgICAgY29uc3QgYnRuID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItbGlcIiBjbGFzcz1cIiR7QkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW19XCI+YCk7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBidG4uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1wdWItYnV0dG9uXCIgY2xhc3M9XCIke1wid3JhcHBlci0yNWVWSW4gXCIgKyBCRFYyLmd1aWxkQ2xhc3Nlcy5jaXJjbGVCdXR0b25NYXNrfVwiPnB1YmxpYzwvZGl2PmApO1xyXG4gICAgICAgIGxhYmVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7dGhpcy5yZW5kZXIoKTt9KTtcclxuICAgICAgICBidG4uYXBwZW5kKGxhYmVsKTtcclxuICAgICAgICByZXR1cm4gYnRuO1xyXG4gICAgfVxyXG5cclxuICAgIF9hcHBlbmRCdXR0b24oKSB7XHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kb3dubG9hZFByb2dyZXNzICYmIGUudHV0b3JpYWxDb250YWluZXIpWzBdLnR1dG9yaWFsQ29udGFpbmVyKVxyXG4gICAgICAgIF1cclxuICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IERPTS5xdWVyeShgZGl2LiR7Y2xhc3NOYW1ldHV0b3JpYWxDb250YWluZXJ9ID4gZGl2YCk7XHJcbiAgICAgICAgRE9NLmFmdGVyKGd1aWxkcywgdGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEJ1dHRvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0ID0gd2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdCAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJOYXZpZ2FibGVHdWlsZHNcIik7XHJcbiAgICAgICAgY29uc3QgR3VpbGRMaXN0T2xkID0gd2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICAgICAgaWYgKCFHdWlsZExpc3QgJiYgIUd1aWxkTGlzdE9sZCkgVXRpbHMud2FybihcIlB1YmxpY1NlcnZlclwiLCBcIkNhbid0IGZpbmQgR3VpbGRMaXN0IGNvbXBvbmVudFwiKTtcclxuICAgICAgICB0aGlzLmd1aWxkUGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChHdWlsZExpc3QgPyBHdWlsZExpc3QgOiBHdWlsZExpc3RPbGQucHJvdG90eXBlLCBHdWlsZExpc3QgPyBcImRlZmF1bHRcIiA6IFwicmVuZGVyXCIsIHthZnRlcjogdGhpcy5fYXBwZW5kQnV0dG9ufSk7XHJcbiAgICAgICAgdGhpcy5fYXBwZW5kQnV0dG9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQnV0dG9uKCkge1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmd1aWxkUGF0Y2g7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gRE9NLnF1ZXJ5KFwiI2JkLXB1Yi1saVwiKTtcclxuICAgICAgICBpZiAoYnV0dG9uKSBidXR0b24ucmVtb3ZlKCk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IHtzZXR0aW5ncywgc2V0dGluZ3NDb29raWUsIHNldHRpbmdzUlBDfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciBmcm9tIFwiLi9zZXR0aW5nc1BhbmVsU2lkZWJhclwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBjb2xvcmVkVGV4dCBmcm9tIFwiLi9jb2xvcmVkVGV4dFwiO1xyXG5pbXBvcnQgdGZIb3VyIGZyb20gXCIuLzI0aG91clwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgcHVibGljU2VydmVyc01vZHVsZSBmcm9tIFwiLi9wdWJsaWNTZXJ2ZXJzXCI7XHJcbmltcG9ydCB2b2ljZU1vZGUgZnJvbSBcIi4vdm9pY2VNb2RlXCI7XHJcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vY2xhc3NOb3JtYWxpemVyXCI7XHJcbmltcG9ydCBkTW9kZSBmcm9tIFwiLi9kZXZNb2RlXCI7XHJcblxyXG5pbXBvcnQgU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi4vdWkvc2VjdGlvbmVkU2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQ3NzRWRpdG9yIGZyb20gXCIuLi91aS9jc3NFZGl0b3JcIjtcclxuaW1wb3J0IENhcmRMaXN0IGZyb20gXCIuLi91aS9hZGRvbmxpc3RcIjtcclxuaW1wb3J0IFYyQ19QcmVzZW5jZVNldHRpbmdzIGZyb20gXCIuLi91aS9wcmVzZW5jZVNldHRpbmdzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4vQ3VzdG9tUmljaFByZXNlbmNlXCI7XHJcbmltcG9ydCBWMkNfQWNjb3VudEluZm9zIGZyb20gXCIuLi91aS9BY2NvdW50SW5mb3NcIjtcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBBbnRpQWRETSBmcm9tIFwiLi9BbnRpQWRETVwiO1xyXG5pbXBvcnQgYmx1clByaXZhdGUgZnJvbSBcIi4vYmx1clByaXZhdGVcIjtcclxuaW1wb3J0IGRpc2FibGVUeXBpbmcgZnJvbSBcIi4vZGlzYWJsZVR5cGluZ1wiO1xyXG5pbXBvcnQgQXBpUHJldmlldyBmcm9tIFwiLi4vdWkvQXBpUHJldmlld1wiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuLi91aS9zd2l0Y2hcIjtcclxuaW1wb3J0IE1hcmdpblRvcCBmcm9tIFwiLi4vdWkvbWFyZ2ludG9wXCI7XHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBIaXN0b3J5IGZyb20gXCIuLi91aS9pY29ucy9oaXN0b3J5XCI7XHJcbmltcG9ydCBjb3JlIGZyb20gXCIuL2NvcmVcIjtcclxuaW1wb3J0IHBvcG91dFdpbmRvdyBmcm9tIFwiLi9wb3BvdXRXaW5kb3dcIjtcclxuXHJcbmNsYXNzIEJEU2lkZWJhckhlYWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNpZGViYXJDb21wb25lbnRzID0gd2VicGFja01vZHVsZXMuZmluZChlID0+IGUuU2VwYXJhdG9yICYmIGUuSGVhZGVyICYmIGUuSXRlbSlcclxuXHJcbiAgICAgICAgY29uc3QgY2hhbmdlbG9nQnV0dG9uID0gUmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQ2hhbmdlbG9nXCJ9LCBcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge3N0eWxlOiB7ZmxvYXQ6IFwicmlnaHRcIiwgY3Vyc29yOiBcInBvaW50ZXJcIn0sIGNsYXNzTmFtZTogXCJiZC1jaGFuZ2Vsb2ctYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IHtVdGlscy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTt9fSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSGlzdG9yeSwge2NsYXNzTmFtZTogXCJiZC1pY29uXCIsIHNpemU6IFwiMTZweFwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHJlbmRlcmVkID0gbmV3IHNpZGViYXJDb21wb25lbnRzLkhlYWRlcih7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCBcIkJhbmRhZ2VkIEJEXCIsIGNoYW5nZWxvZ0J1dHRvbiksXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwiXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gcmVuZGVyZWRcclxuICAgIH1cclxufVxyXG5cclxubGV0IGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzID0gdGhpcy51cGRhdGVTZXR0aW5ncy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2lkZWJhciA9IG5ldyBWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNvbXBvbmVudHMoKVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ29tcG9uZW50cygpe1xyXG4gICAgICAgIC8qKiBMaWdodGNvcmQgKi9cclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsaWdodGNvcmRcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmxpZ2h0Y29yZENvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJzdGF0dXNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLlByZXNlbmNlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImFjY291bnRpbmZvXCIsIG1ha2VDb21wb25lbnQodGhpcy5BY2NvdW50SW5mb3NDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwibGNhcGlwcmV2aWV3XCIsIG1ha2VDb21wb25lbnQodGhpcy5BcGlQcmV2aWV3Q29tcG9uZW50LmJpbmQodGhpcykpKVxyXG5cclxuICAgICAgICAvKiBCYW5kYWdlZCBCRCAqL1xyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcIkJEQ2hhbmdlbG9nVGl0bGVcIiwgbWFrZUNvbXBvbmVudCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQkRTaWRlYmFySGVhZGVyKCkucmVuZGVyKClcclxuICAgICAgICB9KSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJjb3JlXCIsIG1ha2VDb21wb25lbnQodGhpcy5jb3JlQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImN1c3RvbWNzc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuY3VzdG9tQ3NzQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInBsdWdpbnNcIiwgbWFrZUNvbXBvbmVudCh0aGlzLnJlbmRlckFkZG9uUGFuZShcInBsdWdpbnNcIikpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInRoZW1lc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwidGhlbWVzXCIpKSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgZ2V0IGNvcmVTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJjb3JlXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGlnaHRjb3JkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmdldFNldHRpbmdzKFwibGlnaHRjb3JkXCIpO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4ubmV3IFNldChzZXR0aW5ncy5tYXAocyA9PiBzLmNhdGVnb3J5KSldO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gY2F0ZWdvcmllcy5tYXAoYyA9PiB7cmV0dXJuIHt0aXRsZTogYywgc2V0dGluZ3M6IHNldHRpbmdzLmZpbHRlcihzID0+IHMuY2F0ZWdvcnkgPT0gYyl9O30pO1xyXG4gICAgICAgIHJldHVybiBzZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgUHJlc2VuY2VTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5ncyhcInN0YXR1c1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmdzKGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdGVnb3J5ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKGlkLCBjaGVja2VkLCBzaWRlYmFyKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVTZXR0aW5ncyhpZCwgZW5hYmxlZCwgc2lkZWJhcikge1xyXG4gICAgICAgIGlmKCFbXCJsaWdodGNvcmQtOFwiLCBcIm5vX3dpbmRvd19ib3VuZFwiLCBcImVuYWJsZV9nbGFzc3Ryb25cIiwgXCJsaWdodGNvcmQtMTBcIl0uaW5jbHVkZXMoaWQpKXNldHRpbmdzQ29va2llW2lkXSA9IGVuYWJsZWQ7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xyXG4gICAgICAgICAgICBlbHNlIHB1YmxpY1NlcnZlcnNNb2R1bGUucmVtb3ZlQnV0dG9uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB2b2ljZU1vZGUuc3RhcnQoKTtcclxuICAgICAgICAgICAgZWxzZSB2b2ljZU1vZGUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgICAgIGVsc2UgRE9NLnJlbW92ZUNsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW5hYmxlZCAmJiBpZCA9PSBcImJkYS1ncy02XCIpIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTdcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgICAgICAgICAgZWxzZSBjb2xvcmVkVGV4dC5yZW1vdmVDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1wcy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIENsYXNzTm9ybWFsaXplci5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTVcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci51bndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XHJcbiAgICAgICAgICAgIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiLCBlbmFibGVkKTtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIFV0aWxzLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGVsc2UgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBcIiMyZjMxMzZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLThcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstZG0tMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgICAgICBlbHNlIGRNb2RlLnN0b3BDb3B5U2VsZWN0b3IoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXHJcbiAgICAgICAgICAgIGVsc2Ugd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gZmFsc2VcclxuICAgICAgICAgICAgc2lkZWJhci5mb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKClcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzU3RvcmUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIHR5cGVvZiBlLmRlZmF1bHQgPT09IFwib2JqZWN0XCIgJiYgXCJzaG93Q3VycmVudEdhbWVcIiBpbiBlLmRlZmF1bHQpWzBdXHJcbiAgICAgICAgICAgICAgICBpZihzZXR0aW5nc1N0b3JlICYmICFzZXR0aW5nc1N0b3JlLmRlZmF1bHQuc2hvd0N1cnJlbnRHYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncylbMF0uZGVmYXVsdC51cGRhdGVSZW1vdGVTZXR0aW5ncyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDdXJyZW50R2FtZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBDdXN0b21SaWNoUHJlc2VuY2UuZGlzYWJsZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtM1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKHRydWUpXHJcbiAgICAgICAgICAgIGVsc2UgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcChmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC00XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBBbnRpQWRETS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtNlwiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5kaXNhYmxlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTdcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUeXBpbmcuZW5hYmxlKClcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHlwaW5nLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtOFwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcImlzVGFic1wiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtOVwiKSB7XHJcbiAgICAgICAgICAgIHBvcG91dFdpbmRvd1tlbmFibGVkID8gXCJlbmFibGVcIiA6IFwiZGlzYWJsZVwiXSgpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtMTBcIil7XHJcbiAgICAgICAgICAgIGNvcmUubWV0aG9kcy5Ob3RpZmljYXRpb25zVXNlU2hpbShlbmFibGVkKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZW5hYmxlZClcclxuXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLmRlbGV0ZShcIklTX01BWElNSVpFRFwiKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5kZWxldGUoXCJJU19NSU5JTUlaRURcIikgXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLmRlbGV0ZShcIldJTkRPV19CT1VORFNcIilcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5leGl0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImVuYWJsZV9nbGFzc3Ryb25cIil7XHJcbiAgICAgICAgICAgIGxldCBhcHBTZXR0aW5ncyA9IHJlbW90ZS5nZXRHbG9iYWwoXCJhcHBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zZXQoXCJHTEFTU1RST05cIiwgZW5hYmxlZClcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0aWFsaXplU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTJcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTNcIl0pIERPTS5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMVwiXSkgcHVibGljU2VydmVyc01vZHVsZS5hZGRCdXR0b24oKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNFwiXSkgdm9pY2VNb2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTVcIl0pIERPTS5hZGRDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkYS1kYXJrXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSB0ZkhvdXIuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0pIGNvbG9yZWRUZXh0LmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy00XCJdKSBDbGFzc05vcm1hbGl6ZXIuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtMVwiXSkgd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0yXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmNhbGxSaW5naW5nQmVhdCA9IHRydWVcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiXSkgQ3VzdG9tUmljaFByZXNlbmNlLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTNcIl0pIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNFwiXSkgQW50aUFkRE0uZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtNlwiXSkgYmx1clByaXZhdGUuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtN1wiXSkgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC05XCJdKSBwb3BvdXRXaW5kb3cuZW5hYmxlKClcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdKSB7XHJcbiAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInBsdWdpblwiKTtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtOFwiXSkgZE1vZGUuc3RhcnREZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1kbS0xXCJdKSBkTW9kZS5zdGFydENvcHlTZWxlY3RvcigpO1xyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTZXR0aW5ncygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIiwgc2V0dGluZ3NDb29raWUpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJycGNcIiwgc2V0dGluZ3NSUEMpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRTZXR0aW5ncygpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwic2V0dGluZ3NcIikpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJycGNcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlclNpZGViYXIoc2lkZWJhcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNpZGViYXIucmVuZGVyKHNpZGViYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvcmVDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uZWRTZXR0aW5nc1BhbmVsLCB7a2V5OiBcImNzcGFuZWxcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIHNlY3Rpb25zOiB0aGlzLmNvcmVTZXR0aW5nc30pXHJcbiAgICB9XHJcblxyXG4gICAgbGlnaHRjb3JkQ29tcG9uZW50KHNpZGViYXIsIGZvcmNlVXBkYXRlKSB7XHJcbiAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgdGhpcy5saWdodGNvcmRTZXR0aW5ncy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09IDAgPyBudWxsIDogQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KE1hcmdpblRvcCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImgyXCIsIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSwgc2VjdGlvbi50aXRsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbi5zZXR0aW5ncy5tYXAoc2V0dGluZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpc0NoZWNrZWQgPSBzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nLmlkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImxpZ2h0Y29yZC04XCIpaXNDaGVja2VkID0gYXBwU2V0dGluZ3MuZ2V0KFwiaXNUYWJzXCIsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJub193aW5kb3dfYm91bmRcIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJOT19XSU5ET1dTX0JPVU5EXCIsIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImVuYWJsZV9nbGFzc3Ryb25cIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJHTEFTU1RST05cIiwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PT0gXCJsaWdodGNvcmQtMTBcIilpc0NoZWNrZWQgPSAhYXBwU2V0dGluZ3MuZ2V0KFwiREVGQVVMVF9OT1RJRklDQVRJT05TXCIsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtpZDogc2V0dGluZy5pZCwga2V5OiBzZXR0aW5nLmlkLCBkYXRhOiBzZXR0aW5nLCBjaGVja2VkOiBpc0NoZWNrZWQsIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2V0dGluZy5pZCA9PSBcImxpZ2h0Y29yZC04XCIgJiYgaXNDaGVja2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJncmVlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rOiBcIm91dGxpbmVkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJicmFuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTmF0aXZlLmlwYy5zZW5kKFwiTkVXX1RBQlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgXCJPcGVuIGEgbmV3IFRhYlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0pLCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXHJcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxyXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2soKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlNob3VsZCByZWxhdW5jaFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiByZW1vdGUucHJvY2Vzcy5hcmd2LnNsaWNlKDEpLmNvbmNhdChbXCItLWRpc2FibGUtYmV0dGVyZGlzY29yZFwiXSlcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5hcHAucXVpdCgpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZVxyXG4gICAgICAgICAgICB9LCBcIlJlbGF1bmNoIHdpdGhvdXQgQmV0dGVyRGlzY29yZFwiKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiwge1xyXG4gICAgICAgICAgICAgICAgY29sb3I6IFwieWVsbG93XCIsXHJcbiAgICAgICAgICAgICAgICBsb29rOiBcImdob3N0XCIsXHJcbiAgICAgICAgICAgICAgICBzaXplOiBcIm1lZGl1bVwiLFxyXG4gICAgICAgICAgICAgICAgaG92ZXJDb2xvcjogXCJyZWRcIixcclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZihpc0NsZWFyaW5nQ2FjaGUpcmV0dXJuXHJcbiAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNsZWFyaW5nIGNhY2hlLi4uXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCJcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICByZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkuc2Vzc2lvbi5jbGVhckNhY2hlKClcclxuICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkNhY2hlIGlzIGNsZWFyZWQgIVwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQuIENoZWNrIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0NsZWFyaW5nQ2FjaGVcclxuICAgICAgICAgICAgfSwgXCJDbGVhciBjYWNoZVwiKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBQcmVzZW5jZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QcmVzZW5jZVNldHRpbmdzLCB7XHJcbiAgICAgICAgICAgIGtleTogXCJscHBhbm5lbFwiLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiB0aGlzLlByZXNlbmNlU2V0dGluZ3NcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFjY291bnRJbmZvc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19BY2NvdW50SW5mb3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIEFwaVByZXZpZXdDb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBcGlQcmV2aWV3LCB7XHJcbiAgICAgICAgICAgIGtleTogXCJsYXBpcGFubmVsXCJcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGN1c3RvbUNzc0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENzc0VkaXRvciwge2tleTogXCJjc3NlZGl0b3JcIn0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyQWRkb25QYW5lKHR5cGUpIHtcclxuICAgICAgICAvLyBJIGtub3cgdGhpcyBzaG91bGRuJ3QgYmUgaGVyZSwgYnV0IHdoZW4gaXQgaXNuJ3QsXHJcbiAgICAgICAgLy8gUmVhY3QgcmVmdXNlcyB0byBjaGFuZ2UgdGhlIGJ1dHRvbiB3aGVuIGdvaW5nXHJcbiAgICAgICAgLy8gYmV0d2VlbiBwbHVnaW5zIGFuZCB0aGVtZXMgcGFnZS4uLiBzb21ldGhpbmdcclxuICAgICAgICAvLyB0byBkZWJ1ZyBsYXRlci5cclxuICAgICAgICBjbGFzcyBDb250ZW50TGlzdCBleHRlbmRzIEJEVjIucmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZml4ID0gdGhpcy5wcm9wcy50eXBlLnJlcGxhY2UoXCJzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZSh0aGlzLnByb3BzLnR5cGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHJlbmRlcigpIHtyZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjt9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVuZGVyID0gQ29udGVudExpc3QucHJvdG90eXBlLnJlbmRlcjtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29udGVudExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgICAgICAgICBnZXQ6ICgpID0+IG9yaWdpbmFsUmVuZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QsIHt0eXBlfSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENhcmRMaXN0LCB7dHlwZX0pKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsIG9uIHdpbmRvd1xyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIG1ha2VDb21wb25lbnQoY2hpbGRyZW4pe1xyXG4gICAgY2xhc3MgU2V0dGluZ0NvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICAgICAgcmVuZGVyKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihzaWRlYmFyLCAoKSA9PiB0aGlzLmZvcmNlVXBkYXRlKCkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHNpZGViYXJcclxuICAgIHJldHVybiAocykgPT4ge1xyXG4gICAgICAgIHNpZGViYXIgPSBzXHJcbiAgICAgICAgcmV0dXJuIFNldHRpbmdDb21wb25lbnRcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMgPSB7fVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKHBhbmVsLCBjb21wb25lbnQpe1xyXG4gICAgICAgIHRoaXMucGFuZWxzW3BhbmVsXSA9IGNvbXBvbmVudFxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudChwYW5lbCwgc2lkZWJhcil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuZWxzW3BhbmVsXShzaWRlYmFyKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBpdGVtcygpIHtcclxuICAgICAgICByZXR1cm4gW3tcclxuICAgICAgICAgICAgdGV4dDogXCJCZXR0ZXJEaXNjb3JkIFNldHRpbmdzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjb3JlXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiUGx1Z2luc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwicGx1Z2luc1wiXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICB0ZXh0OiBcIlRoZW1lc1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwidGhlbWVzXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiQ3VzdG9tIENTU1wiLCBcclxuICAgICAgICAgICAgaWQ6IFwiY3VzdG9tY3NzXCJcclxuICAgICAgICB9XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTENpdGVtcygpe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJMaWdodGNvcmQgU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImxpZ2h0Y29yZFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiUmljaFByZXNlbmNlXCIsIFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwic3RhdHVzXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJBY2NvdW50IEluZm9cIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImFjY291bnRpbmZvXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgICByZXR1cm4gaXRlbXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgTENEZXZJdGVtcygpe1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdXHJcbiAgICAgICAgaWYoIXdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSlyZXR1cm4gaXRlbXNcclxuICAgICAgICBpdGVtcy5wdXNoKC4uLltcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJIRUFERVJcIixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkxpZ2h0Y29yZCBBcGlcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkNvbXBvbmVudHMgUHJldmlld1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGNhcGlwcmV2aWV3XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKHNpZGViYXIpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4udGhpcy5MQ2l0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAuLi50aGlzLkxDRGV2SXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoZS5zZWN0aW9uKXJldHVybiBlXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGUudGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0aGlzLmdldENvbXBvbmVudChlLmlkLCBzaWRlYmFyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJESVZJREVSXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbjogXCJDVVNUT01cIixcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KFwiQkRDaGFuZ2Vsb2dUaXRsZVwiKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogTm8gbmVlZCB0byBleHBvcnQgc2V0dGluZ3NQYW5lbFNpZGViYXIgb24gd2luZG93XHJcbiAqLyIsImltcG9ydCB7YmR0aGVtZUVycm9ycywgdGhlbWVDb29raWUsIHNldHRpbmdzQ29va2llLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgQkRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuaW1wb3J0IGJkRXZlbnRzIGZyb20gXCIuL2JkRXZlbnRzXCI7XHJcblxyXG5jbGFzcyBUaGVtZU1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5UaGVtZU1vZHVsZSA9IHRoaXNcclxuICAgIH1cclxuICAgIGdldCBmb2xkZXIoKSB7cmV0dXJuIENvbnRlbnRNYW5hZ2VyLnRoZW1lc0ZvbGRlcjt9XHJcbn1cclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVzID0gYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5sb2FkVGhlbWVEYXRhKCk7XHJcbiAgICBiZHRoZW1lRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFRoZW1lcygpKSk7XHJcbiAgICBjb25zdCB0aGVtZXMgPSBPYmplY3Qua2V5cyhiZHRoZW1lcyk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGVtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lc1tpXV07XHJcbiAgICAgICAgaWYgKCF0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgdGhlbWVDb29raWVbdGhlbWUubmFtZV0gPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhlbWVDb29raWVbdGhlbWUubmFtZV0pIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB0aGVtZSBpbiB0aGVtZUNvb2tpZSkge1xyXG4gICAgICAgIGlmICghYmR0aGVtZXNbdGhlbWVdKSBkZWxldGUgdGhlbWVDb29raWVbdGhlbWVdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICAvLyBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIENvbnRlbnRNYW5hZ2VyLndhdGNoQ29udGVudChcInRoZW1lXCIpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZVRoZW1lID0gZnVuY3Rpb24obmFtZSwgcmVsb2FkID0gZmFsc2UpIHtcclxuICAgIHRoZW1lQ29va2llW25hbWVdID0gdHJ1ZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5hZGRTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpLCB1bmVzY2FwZSh0aGVtZS5jc3MpKTtcclxuICAgIGJkRXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtZW5hYmxlZFwiKVxyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBhcHBsaWVkLmApO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMuc2F2ZVRoZW1lRGF0YSgpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lc1tuYW1lXTtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQodGhlbWUuaWQpKTtcclxuICAgIGJkRXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtZGlzYWJsZWRcIilcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gaGFzIGJlZW4gZGlzYWJsZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVRoZW1lKG5hbWUsIHJlbG9hZCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudG9nZ2xlVGhlbWUgPSBmdW5jdGlvbih0aGVtZSkge1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUpO1xyXG4gICAgZWxzZSB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAobmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUubG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcclxuICAgIGNvbnN0IGVycm9yID0gYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZENvbnRlbnQoZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC4gSXQgbWF5IG5vdCBoYXZlIGJlZW4gbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7ZmlsZW5hbWV9IGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZSk7XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWUubmFtZX0gdiR7dGhlbWUudmVyc2lvbn0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtbG9hZGVkXCIsIHRoZW1lLm5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnVubG9hZFRoZW1lID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm47XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWUubmFtZTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGNvbnN0IGVycm9yID0gQ29udGVudE1hbmFnZXIudW5sb2FkQ29udGVudChiZHRoZW1lc1t0aGVtZV0uZmlsZW5hbWUsIFwidGhlbWVcIik7XHJcbiAgICBkZWxldGUgYmR0aGVtZXNbdGhlbWVdO1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAgICAgcmV0dXJuIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSBjb3VsZCBub3QgYmUgdW5sb2FkZWQuIEl0IG1heSBoYXZlIG5vdCBiZWVuIGxvYWRlZCB5ZXQuYCwgZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgVXRpbHMubG9nKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB3YXMgdW5sb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXVubG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kZWxldGUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcclxuICAgIHRoaXMudW5sb2FkVGhlbWUoYmR0aGVtZS5maWxlbmFtZSk7XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCBiZHRoZW1lLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWRUaGVtZSA9IGFzeW5jIGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuIHRoaXMubG9hZFRoZW1lKGZpbGVuYW1lT3JOYW1lKTtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZV0pIHRoaXMuZGlzYWJsZVRoZW1lKHRoZW1lLCB0cnVlKSwgdGhpcy5lbmFibGVUaGVtZSh0aGVtZSwgdHJ1ZSk7XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gdiR7YmR0aGVtZXNbdGhlbWVdLnZlcnNpb259IHdhcyByZWxvYWRlZC5gKTtcclxuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1yZWxvYWRlZFwiLCB0aGVtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUucmVsb2FkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVsb2FkVGhlbWUobmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZWRpdCA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XHJcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyLCBiZHBsdWdpbi5maWxlbmFtZSk7XHJcbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oYCR7ZnVsbFBhdGh9YCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudXBkYXRlVGhlbWVMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gQ29udGVudE1hbmFnZXIubG9hZE5ld0NvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWVEYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIik7XHJcbiAgICBpZiAoc2F2ZWQpIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoZW1lQ29va2llLCBzYXZlZCk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuc2F2ZVRoZW1lRGF0YSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJ0aGVtZXNcIiwgdGhlbWVDb29raWUpO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IFRoZW1lTW9kdWxlKCk7IiwiaW1wb3J0IHtiYmRWZXJzaW9ufSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzIHtcbiAgICAvKiogRG9jdW1lbnQvd2luZG93IHdpZHRoICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5XaWR0aCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCwgd2luZG93LmlubmVyV2lkdGggfHwgMCk7IH1cbiAgICAvKiogRG9jdW1lbnQvd2luZG93IGhlaWdodCAqL1xuICAgIHN0YXRpYyBnZXQgc2NyZWVuSGVpZ2h0KCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApOyB9XG5cbiAgICBzdGF0aWMgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgICAgICAgIGZyYW1lOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgZ2V0V2luZG93UHJlZmVyZW5jZShrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidHJhbnNwYXJlbnRcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZnJhbWVcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3RyaXBCT00oY29udGVudCkge1xuICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRUZXh0QXJlYSgpIHtcbiAgICAgICAgcmV0dXJuIERPTS5xdWVyeShcIi5cIityZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGFubmVsVGV4dEFyZWEgJiYgZS50aXRsZVdyYXBwZXIpWzBdLmNoYW5uZWxUZXh0QXJlYSkrXCIgdGV4dGFyZWFcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGluc2VydFRleHQodGV4dGFyZWEsIHRleHQpIHtcbiAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTtcbiAgICAgICAgdGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQgPSAwO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25FbmQgPSB0ZXh0YXJlYS52YWx1ZS5sZW5ndGg7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiaW5zZXJ0VGV4dFwiLCBmYWxzZSwgdGV4dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGVzY2FwZUlEKGlkKSB7XG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBsb2cobW9kdWxlTmFtZSwgbWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogIzNhNzFjMTsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogIzNhNzFjMTtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHdhcm4obW9kdWxlTmFtZSwgbWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6ICNFOEE0MDA7IGZvbnQtd2VpZ2h0OiA3MDA7XCIsIFwiY29sb3I6ICNFOEE0MDA7XCIsIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBlcnIobW9kdWxlTmFtZSwgbWVzc2FnZSwgZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coYCVjW0JhbmRhZ2VkQkRdJWMgWyR7bW9kdWxlTmFtZX1dJWMgJHttZXNzYWdlfWAsIFwiY29sb3I6IHJlZDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogcmVkO1wiLCBcIlwiKTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKFwiJWNFcnJvcjogXCIgKyBlcnJvci5tZXNzYWdlLCBcImNvbG9yOiByZWQ7XCIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5zdGFjayk7XG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXQgc3RyaW5ncyB3aXRoIHBsYWNlaG9sZGVycyAoYHt7cGxhY2Vob2xkZXJ9fWApIGludG8gZnVsbCBzdHJpbmdzLlxuICAgICAqIFF1aWNrIGV4YW1wbGU6IGBQbHVnaW5VdGlsaXRpZXMuZm9ybWF0U3RyaW5nKFwiSGVsbG8sIHt7dXNlcn19XCIsIHt1c2VyOiBcIlplcmVib3NcIn0pYFxuICAgICAqIHdvdWxkIHJldHVybiBcIkhlbGxvLCBaZXJlYm9zXCIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIHN0cmluZyB0byBmb3JtYXRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIC0gb2JqZWN0IGxpdGVyYWwgb2YgcGxhY2Vob2xkZXJzIHRvIHJlcGxhY2VtZW50c1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBwcm9wZXJseSBmb3JtYXR0ZWQgc3RyaW5nXG4gICAgICovXG4gICAgc3RhdGljIGZvcm1hdFN0cmluZyhzdHJpbmcsIHZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBpbiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGxldCByZXBsYWNlbWVudCA9IHZhbHVlc1t2YWxdO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVwbGFjZW1lbnQpKSByZXBsYWNlbWVudCA9IEpTT04uc3RyaW5naWZ5KHJlcGxhY2VtZW50KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YocmVwbGFjZW1lbnQpID09PSBcIm9iamVjdFwiICYmIHJlcGxhY2VtZW50ICE9PSBudWxsKSByZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShuZXcgUmVnRXhwKGB7eyR7dmFsfX19YCwgXCJnXCIpLCByZXBsYWNlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZywgXCJcXFxcJCZcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHRlc3RKU09OKGRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBpc0VtcHR5KG9iaikge1xuICAgICAgICBpZiAob2JqID09IG51bGwgfHwgb2JqID09IHVuZGVmaW5lZCB8fCBvYmogPT0gXCJcIikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLmxlbmd0aCA9PSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuICguLi5wYXJhbXMpID0+IHtcbiAgICAgICAgICAgIHRyeSB7IHJldHVybiBtZXRob2QoLi4ucGFyYW1zKTtcdH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7IHRoaXMuZXJyKFwiU3VwcHJlc3NlZEVycm9yXCIsIFwiRXJyb3Igb2NjdXJyZWQgaW4gXCIgKyBtZXNzYWdlLCBlKTsgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBtb25rZXlQYXRjaCh3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHtiZWZvcmUsIGFmdGVyLCBpbnN0ZWFkLCBvbmNlID0gZmFsc2UsIHNpbGVudCA9IGZhbHNlLCBmb3JjZSA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZSB8fCB3aGF0LmRpc3BsYXlOYW1lIHx8IHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgfHwgd2hhdC5uYW1lIHx8IHdoYXQuY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJwYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXSkge1xuICAgICAgICAgICAgaWYgKGZvcmNlKSB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7fTtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGNvbnNvbGUuZXJyb3IobWV0aG9kTmFtZSwgXCJkb2VzIG5vdCBleGlzdCBmb3JcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmlnTWV0aG9kID0gd2hhdFttZXRob2ROYW1lXTtcbiAgICAgICAgbGV0IGNhbmNlbGVkID0gZmFsc2VcbiAgICAgICAgY29uc3QgY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUubG9nKFwidW5wYXRjaFwiLCBtZXRob2ROYW1lLCBcIm9mXCIsIGRpc3BsYXlOYW1lKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAvL3doYXRbbWV0aG9kTmFtZV0gPSBvcmlnTWV0aG9kO1xuICAgICAgICAgICAgY2FuY2VsZWQgPSB0cnVlIC8vIHRoaXMgYWxsb3cgdG8gbW9ua2V5cGF0Y2ggbW9yZSB0aGFuIG9uZSB0aW1lLlxuICAgICAgICB9O1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZihjYW5jZWxlZCl7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdNZXRob2QuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIHRoaXNPYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgbWV0aG9kQXJndW1lbnRzOiBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgY2FuY2VsUGF0Y2g6IGNhbmNlbCxcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE1ldGhvZDogb3JpZ01ldGhvZCxcbiAgICAgICAgICAgICAgICBjYWxsT3JpZ2luYWxNZXRob2Q6ICgpID0+IGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLm9yaWdpbmFsTWV0aG9kLmFwcGx5KGRhdGEudGhpc09iamVjdCwgZGF0YS5tZXRob2RBcmd1bWVudHMpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGluc3RlYWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wUmV0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoaW5zdGVhZCwgXCJgaW5zdGVhZGAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtcFJldCAhPT0gdW5kZWZpbmVkKSBkYXRhLnJldHVyblZhbHVlID0gdGVtcFJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmUpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGJlZm9yZSwgXCJgYmVmb3JlYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRhdGEuY2FsbE9yaWdpbmFsTWV0aG9kKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFmdGVyKSBVdGlscy5zdXBwcmVzc0Vycm9ycyhhZnRlciwgXCJgYWZ0ZXJgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob25jZSkgY2FuY2VsKCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih3aGF0W21ldGhvZE5hbWVdLCBvcmlnTWV0aG9kKTtcbiAgICAgICAgd2hhdFttZXRob2ROYW1lXS5fX21vbmtleVBhdGNoZWQgPSB0cnVlO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICAgIGlmICghd2hhdFttZXRob2ROYW1lXS5fX29yaWdpbmFsTWV0aG9kKSB7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QgPSBvcmlnTWV0aG9kO1xuICAgICAgICAgICAgd2hhdFttZXRob2ROYW1lXS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge3JldHVybiBvcmlnTWV0aG9kLnRvU3RyaW5nKCk7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuY2VsO1xuICAgIH1cblxuICAgIHN0YXRpYyBvblJlbW92ZWQobm9kZSwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11dGF0aW9ucy5sZW5ndGg7IG0rKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW21dO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShtdXRhdGlvbi5yZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKG5vZGUpKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7c3VidHJlZTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5lc3RlZFByb3Aob2JqLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KC9cXHM/XFwuXFxzPy8pLnJlZHVjZShmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqW3Byb3BdO1xuICAgICAgICB9LCBvYmopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgc2hvd3MgYSB0b2FzdCBzaW1pbGFyIHRvIGFuZHJvaWQgdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0LiBPcHRpb25hbCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmljb24gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBpY29uIHNob3VsZCBzaG93IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUuIEEgdG9hc3Qgd2l0aG91dCB0eXBlIHdpbGwgYWx3YXlzIGhhdmUgbm8gaWNvbi4gRGVmYXVsdDogdHJ1ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLnRpbWVvdXQgQWRqdXN0cyB0aGUgdGltZSAoaW4gbXMpIHRoZSB0b2FzdCBzaG91bGQgYmUgc2hvd24gZm9yIGJlZm9yZSBkaXNhcHBlYXJpbmcgYXV0b21hdGljYWxseS4gRGVmYXVsdDogMzAwMFxuICAgICAqL1xuICAgIHN0YXRpYyBzaG93VG9hc3QoY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrcmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuc2lkZWJhciAmJiBlLmhhc05vdGljZSlbMF0uc2lkZWJhcikrXCIgKyBkaXZcIikgfHwgbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBjb250YWluZXIgPyBjb250YWluZXIucXVlcnlTZWxlY3RvcihcImZvcm1cIikgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gZm9ybSA/IGZvcm0ub2Zmc2V0SGVpZ2h0IDogODA7XG4gICAgICAgICAgICBjb25zdCB0b2FzdFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgdG9hc3RXcmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdHNcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJib3R0b21cIiwgYm90dG9tK1wicHhcIik7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKS5hcHBlbmRDaGlsZCh0b2FzdFdyYXBwZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpXG4gICAgICAgIGNvbnN0IHt0eXBlID0gXCJcIiwgaWNvbiA9IHRydWUsIHRpbWVvdXQgPSAzMDAwfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHRvYXN0RWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiYmQtdG9hc3RcIik7XG4gICAgICAgIGlmICh0eXBlKSB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcInRvYXN0LVwiICsgdHlwZSk7XG4gICAgICAgIGlmICh0eXBlICYmIGljb24pIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiaWNvblwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmlubmVyVGV4dCA9IGNvbnRlbnQ7XG4gICAgICAgIHRvYXN0V3JhcHBlci5hcHBlbmRDaGlsZCh0b2FzdEVsZW0pO1xuICAgICAgICB0b2FzdFdyYXBwZXIuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIGBjYWxjKDUwJSAtICR7dG9hc3RXcmFwcGVyLm9mZnNldFdpZHRoIC8gMn1weClgKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0b2FzdEVsZW0uY2xhc3NMaXN0LmFkZChcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0b2FzdEVsZW0ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJkLXRvYXN0cyAuYmQtdG9hc3RcIikubGVuZ3RoKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhbGVydCh0aXRsZSwgY29udGVudCkge1xuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgJHttb2RhbE1vZHVsZS5tb2RhbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtaW5uZXIgJHttb2RhbE1vZHVsZS5pbm5lcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciAke2hlYWRlck1vZHVsZS5oZWFkZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyIGJ1dHRvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IFxuICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGNvbnN0IGNsb3NpbmdMaXN0ZW5lcnMgPSBbXVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLnJlbW92ZSgpOyBcbiAgICAgICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNsb3NlOiAobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycyA9IFtdLCB0aGVtZXM6IHRoZW1lRXJyb3JzID0gW119KSB7XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzIHx8ICF0aGVtZUVycm9ycykgcmV0dXJuO1xuICAgICAgICBpZiAoIXBsdWdpbkVycm9ycy5sZW5ndGggJiYgIXRoZW1lRXJyb3JzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBsZXQgbW9kYWxNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tb2RhbCAmJiBlLmlubmVyICYmICFlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBoZWFkZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oZWFkZXIgJiYgZS5yZXNwb25zaXZlV2lkdGhNb2JpbGUgJiYgZS5oaWRlT25GdWxsc2NyZWVuKVswXVxuICAgICAgICBsZXQgZm9vdGVyMk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmZvY3VzTG9jaylbMF1cbiAgICAgICAgY29uc3QgbW9kYWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cImJkLW1vZGFsLXdyYXBwZXIgdGhlbWUtZGFya1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLWJhY2tkcm9wICR7QkRNb2R1bGVzLmdldChlID0+IGUuYmFja2Ryb3AgJiYgZS5iYWNrZHJvcFdpdGhMYXllcilbMF0uYmFja2Ryb3B9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwgYmQtY29udGVudC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj48ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250ZW50IEVycm9yczwvZGl2PjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXIgVE9QXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5QbHVnaW5zPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItYmFyLWl0ZW1cIj5UaGVtZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj5OYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPk1lc3NhZ2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPkVycm9yPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIGZhZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXJcIj5cbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciAke2hlYWRlck1vZHVsZS5mb290ZXJ9ICR7Zm9vdGVyMk1vZHVsZS5mb290ZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIj5Pa2F5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgIFxuICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZVRhYihlcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JzXCI+YCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW5hbWVcIj4ke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLW1lc3NhZ2VcIj4ke2Vyci5tZXNzYWdlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tZXJyb3JcIj48YSBjbGFzcz1cImVycm9yLWxpbmtcIiBocmVmPVwiXCI+JHtlcnIuZXJyb3IgPyBlcnIuZXJyb3IubWVzc2FnZSA6IFwiXCJ9PC9hPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuYXBwZW5kKGVycm9yKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goZWwgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgRXJyb3IgZGV0YWlscyBmb3IgJHtlcnIubmFtZSA/IGVyci5uYW1lIDogZXJyLmZpbGV9LmAsIGVyci5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIGNvbnN0IHRhYnMgPSBbZ2VuZXJhdGVUYWIocGx1Z2luRXJyb3JzKSwgZ2VuZXJhdGVUYWIodGhlbWVFcnJvcnMpXTtcbiAgICBcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvckFsbChcIi50YWItYmFyLWl0ZW1cIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW0uc2VsZWN0ZWRcIik7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIERPTS5yZW1vdmVDbGFzcyhzZWxlY3RlZCwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhlLnRhcmdldCwgXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGVyID0gbW9kYWwucXVlcnlTZWxlY3RvcihcIi5zY3JvbGxlclwiKTtcbiAgICAgICAgICAgIHNjcm9sbGVyLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQodGFic1tET00uaW5kZXgoZS50YXJnZXQpXSk7XG4gICAgICAgIH0pKTtcbiAgICBcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBtb2RhbC5yZW1vdmUoKTsgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1vZGFsLnF1ZXJ5U2VsZWN0b3IoXCIuYmQtYmFja2Ryb3BcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKS5hcHBlbmQobW9kYWwpO1xuICAgICAgICBpZiAocGx1Z2luRXJyb3JzLmxlbmd0aCkgbW9kYWwucXVlcnlTZWxlY3RvcihcIi50YWItYmFyLWl0ZW1cIikuY2xpY2soKTtcbiAgICAgICAgZWxzZSBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKVsxXS5jbGljaygpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q2hhbmdlbG9nTW9kYWwob3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IE1vZGFsU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInB1c2hcIiwgXCJ1cGRhdGVcIiwgXCJwb3BcIiwgXCJwb3BXaXRoS2V5XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2dDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJmaXhlZFwiLCBcImltcHJvdmVkXCIpO1xuICAgICAgICBjb25zdCBUZXh0RWxlbWVudCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVGV4dFwiKTtcbiAgICAgICAgY29uc3QgRmxleENoaWxkID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJDaGlsZFwiKTtcbiAgICAgICAgY29uc3QgVGl0bGVzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJUYWdzXCIsIFwiZGVmYXVsdFwiKTtcbiAgICAgICAgY29uc3QgQ2hhbmdlbG9nID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLnNlbGVjdGFibGUgPT0gZmFsc2UpO1xuICAgICAgICBjb25zdCBNYXJrZG93blBhcnNlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiZGVmYXVsdFJ1bGVzXCIsIFwicGFyc2VcIik7XG4gICAgICAgIGlmICghQ2hhbmdlbG9nIHx8ICFNb2RhbFN0YWNrIHx8ICFDaGFuZ2Vsb2dDbGFzc2VzIHx8ICFUZXh0RWxlbWVudCB8fCAhRmxleENoaWxkIHx8ICFUaXRsZXMgfHwgIU1hcmtkb3duUGFyc2VyKSByZXR1cm47XG4gICAgXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGltYWdlID0gXCJodHRwczovL3JlcG9zaXRvcnktaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMDU0NzM1MzcvOTU3YjU0ODAtN2MyNi0xMWU5LTg0MDEtNTBmYTgyMGNiYWU1XCIsIFxuICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBcIlwiLCBcbiAgICAgICAgICAgIGNoYW5nZXMgPSBbXSwgXG4gICAgICAgICAgICB0aXRsZSA9IFwiQmFuZGFnZWRCRFwiLCBcbiAgICAgICAgICAgIHN1YnRpdGxlID0gYHYke2JiZFZlcnNpb259YCwgXG4gICAgICAgICAgICBmb290ZXJcbiAgICAgICAgfSA9IG9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNlID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dJdGVtcyA9IFtjZShcImltZ1wiLCB7c3JjOiBpbWFnZX0pXTtcbiAgICAgICAgaWYgKGRlc2NyaXB0aW9uKSBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwicFwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShkZXNjcmlwdGlvbikpKTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjaGFuZ2VzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNoYW5nZXNbY107XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA/IENoYW5nZWxvZ0NsYXNzZXNbZW50cnkudHlwZV0gOiBDaGFuZ2Vsb2dDbGFzc2VzLmFkZGVkO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luID0gYyA9PSAwID8gQ2hhbmdlbG9nQ2xhc3Nlcy5tYXJnaW5Ub3AgOiBcIlwiO1xuICAgICAgICAgICAgY2hhbmdlbG9nSXRlbXMucHVzaChjZShcImgxXCIsIHtjbGFzc05hbWU6IGAke3R5cGV9ICR7bWFyZ2lufWAsfSwgZW50cnkudGl0bGUpKTtcbiAgICAgICAgICAgIGNvbnN0IGxpc3QgPSBjZShcInVsXCIsIG51bGwsIGVudHJ5Lml0ZW1zLm1hcChpID0+IGNlKFwibGlcIiwgbnVsbCwgTWFya2Rvd25QYXJzZXIucGFyc2UoaSkpKSk7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGxpc3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sXG4gICAgICAgICAgICAgICAgY2UoVGl0bGVzLmRlZmF1bHQsIHt0YWc6IFRpdGxlcy5UYWdzLkg0fSwgdGl0bGUpLFxuICAgICAgICAgICAgICAgIGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRCwgY2xhc3NOYW1lOiBDaGFuZ2Vsb2dDbGFzc2VzLmRhdGV9LCBzdWJ0aXRsZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgXG4gICAgICAgIGNvbnN0IHJlbmRlckZvb3RlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yQ2xhc3NlcyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTtcbiAgICAgICAgICAgIGNvbnN0IGpvaW5TdXBwb3J0U2VydmVyID0gKGNsaWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xpY2sucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjbGljay5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBNb2RhbFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgIEJEVjIuam9pbkJEMigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gQW5jaG9yID8gY2UoQW5jaG9yLCB7b25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKSA6IGNlKFwiYVwiLCB7Y2xhc3NOYW1lOiBgJHtBbmNob3JDbGFzc2VzLmFuY2hvcn0gJHtBbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YCwgb25DbGljazogam9pblN1cHBvcnRTZXJ2ZXJ9LCBcIkpvaW4gb3VyIERpc2NvcmQgU2VydmVyLlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGb290ZXIgPSBjZShUZXh0RWxlbWVudCx7c2l6ZTogVGV4dEVsZW1lbnQuU2l6ZXMuU01BTEwsIGNvbG9yOiBUZXh0RWxlbWVudC5Db2xvcnMuU1RBTkRBUkR9LCBcIk5lZWQgc3VwcG9ydD8gXCIsIHN1cHBvcnRMaW5rKTtcbiAgICAgICAgICAgIHJldHVybiBjZShGbGV4Q2hpbGQuQ2hpbGQsIHtncm93OiAxLCBzaHJpbms6IDF9LCBmb290ZXIgPyBmb290ZXIgOiBkZWZhdWx0Rm9vdGVyKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gTW9kYWxTdGFjay5wdXNoKGZ1bmN0aW9uKHByb3BzKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoQ2hhbmdlbG9nLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgb25TY3JvbGw6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICBvbkNsb3NlOiBfID0+IF8sXG4gICAgICAgICAgICAgICAgcmVuZGVySGVhZGVyOiByZW5kZXJIZWFkZXIsXG4gICAgICAgICAgICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IGNoYW5nZWxvZ0l0ZW1zXG4gICAgICAgICAgICB9LCBwcm9wcykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5IHN0cmluZyBpcyB3cmFwcGVkIGluIERpc2NvcmQncyBgTWFya2Rvd25gIGNvbXBvbmVudCBzbyBzdHJpbmdzIHdpbGwgc2hvdyBhbmQgcmVuZGVyIHByb3Blcmx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jb25maXJtVGV4dD1Pa2F5XSAtIHRleHQgZm9yIHRoZSBjb25maXJtYXRpb24vc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNhbmNlbD1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIGNhbmNlbCBidXR0b25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGtleSB1c2VkIGZvciB0aGlzIG1vZGFsXG4gICAgICovXG4gICAgc3RhdGljIHNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IE1vZGFsQWN0aW9ucyA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwib3Blbk1vZGFsXCIsIFwidXBkYXRlTW9kYWxcIik7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNYXJrZG93blwiKTtcbiAgICAgICAgY29uc3QgQ29uZmlybWF0aW9uTW9kYWwgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkNvbmZpcm1Nb2RhbFwiKTtcbiAgICAgICAgaWYgKCFNb2RhbEFjdGlvbnMgfHwgIUNvbmZpcm1hdGlvbk1vZGFsIHx8ICFNYXJrZG93bikgcmV0dXJuIFV0aWxzLmFsZXJ0KHRpdGxlLCBjb250ZW50KTtcblxuICAgICAgICBjb25zdCBlbXB0eUZ1bmN0aW9uID0gKCkgPT4ge307XG4gICAgICAgIGNvbnN0IHtvbkNvbmZpcm0gPSBlbXB0eUZ1bmN0aW9uLCBvbkNhbmNlbCA9IGVtcHR5RnVuY3Rpb24sIGNvbmZpcm1UZXh0ID0gXCJPa2F5XCIsIGNhbmNlbFRleHQgPSBcIkNhbmNlbFwiLCBkYW5nZXIgPSBmYWxzZSwga2V5ID0gdW5kZWZpbmVkfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSBjb250ZW50ID0gW2NvbnRlbnRdO1xuICAgICAgICBjb250ZW50ID0gY29udGVudC5tYXAoYyA9PiB0eXBlb2YoYykgPT09IFwic3RyaW5nXCIgPyBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFya2Rvd24sIG51bGwsIGMpIDogYyk7XG4gICAgICAgIHJldHVybiBNb2RhbEFjdGlvbnMub3Blbk1vZGFsKHByb3BzID0+IHtcbiAgICAgICAgICAgIHJldHVybiBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29uZmlybWF0aW9uTW9kYWwsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGhlYWRlcjogdGl0bGUsXG4gICAgICAgICAgICAgICAgcmVkOiBkYW5nZXIsXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IGNvbmZpcm1UZXh0LFxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IGNhbmNlbFRleHQsXG4gICAgICAgICAgICAgICAgb25Db25maXJtOiBvbkNvbmZpcm0sXG4gICAgICAgICAgICAgICAgb25DYW5jZWw6IG9uQ2FuY2VsXG4gICAgICAgICAgICB9LCBwcm9wcyksIGNvbnRlbnQpO1xuICAgICAgICB9LCB7bW9kYWxLZXk6IGtleX0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgcmVtb3ZlRGEoKXtcbiAgICAgICAgcmV0dXJuIHJlbW92ZURhXG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVEYShjbGFzc05hbWUpe1xuICAgIGlmKCFjbGFzc05hbWUpcmV0dXJuIGNsYXNzTmFtZVxuICAgIHJldHVybiBjbGFzc05hbWUuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICFlLnN0YXJ0c1dpdGgoXCJkYS1cIikpLmpvaW4oXCIgXCIpXG59XG5cblV0aWxzLnNob3dUb2FzdCA9IFV0aWxzLnN1cHByZXNzRXJyb3JzKFV0aWxzLnNob3dUb2FzdCwgXCJDb3VsZCBub3Qgc2hvdyB0b2FzdC5cIik7XG5cbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5VdGlscyA9IFV0aWxzIiwiaW1wb3J0IHtzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi90aGVtZU1vZHVsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5XZWJwYWNrTW9kdWxlcyA9ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbiAgICAgICAgICAgIGRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzaG91bGRQcm90ZWN0ID0gdGhlTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUucmVtb3ZlICYmIHRoZU1vZHVsZS5zZXQgJiYgdGhlTW9kdWxlLmNsZWFyICYmIHRoZU1vZHVsZS5nZXQgJiYgIXRoZU1vZHVsZS5zb3J0KSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGVNb2R1bGUuZ2V0VG9rZW4gfHwgdGhlTW9kdWxlLmdldEVtYWlsIHx8IHRoZU1vZHVsZS5zaG93VG9rZW4pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvdGVjdCA9ICh0aGVNb2R1bGUsIGlzRGVmYXVsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1vZCA9ICFpc0RlZmF1bHQgPyB0aGVNb2R1bGUuZGVmYXVsdCA6IHRoZU1vZHVsZVxyXG4gICAgICAgICAgICAgICAgaWYoIW1vZClyZXR1cm4gdGhlTW9kdWxlXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kLnJlbW92ZSAmJiBtb2Quc2V0ICYmIG1vZC5jbGVhciAmJiBtb2QuZ2V0ICYmICFtb2Quc29ydCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1vZC5nZXRUb2tlbiAmJiAhbW9kLmdldEVtYWlsICYmICFtb2Quc2hvd1Rva2VuKXJldHVybiB0aGVNb2R1bGVcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm94eSA9IG5ldyBQcm94eShtb2QsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJnZXRUb2tlblwiIHx8IHByb3AgPT09IFwiZ2V0RW1haWxcIiB8fCBwcm9wID09PSBcInNob3dUb2tlblwiKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbihvYmosIGZ1bmMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJnZXRUb2tlblwiICYmIG9iai5nZXRUb2tlbikgcmV0dXJuICgpID0+IFwibWZhLlhDbmJLem8wQ0xJcWRKekJuTDBEOFBmRHJ1cWtKTkhqd0hYdHIzOVVVM0Y4aEh4NDNqb2pJU3lpNWpkak81MmU5X2U5TWptYWZaRkZwYy1zZU9NYVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldEVtYWlsXCIgJiYgb2JqLmdldEVtYWlsKSByZXR1cm4gKCkgPT4gXCJwdXBwZXQxMTExMkBnbWFpbC5jb21cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJzaG93VG9rZW5cIiAmJiBvYmouc2hvd1Rva2VuKSByZXR1cm4gKCkgPT4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmMgPT0gXCJfX3Byb3RvX19cIiAmJiBvYmouX19wcm90b19fKSByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2Z1bmNdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCFpc0RlZmF1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGVNb2R1bGUsIHtkZWZhdWx0OiBwcm94eX0pXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5O1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIHByb3RlY3QobSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChwcm90ZWN0KG0uZGVmYXVsdCwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobSwgZmFsc2UpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlcztcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMgPSAocHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKHByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzLCBmaW5kQnlQcm90b3R5cGVzLCBmaW5kQnlEaXNwbGF5TmFtZX07XHJcbiAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbCA9IHtcclxuICAgICAgICAgICAgcmVhY3Q6IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJDb21wb25lbnRcIiwgXCJQdXJlQ29tcG9uZW50XCIsIFwiQ2hpbGRyZW5cIiwgXCJjcmVhdGVFbGVtZW50XCIsIFwiY2xvbmVFbGVtZW50XCJdKSxcclxuICAgICAgICAgICAgcmVhY3REb206IHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJmaW5kRE9NTm9kZVwiXSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGUgPT4gZVtPYmplY3Qua2V5cyhlKS5maW5kKGsgPT4gay5zdGFydHNXaXRoKFwiX19yZWFjdEludGVybmFsSW5zdGFuY2VcIikpXTtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuVjIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgam9pbkJEMSgpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjBUbWZvNVpiT1JDUnFiQWRcIik7fVxyXG4gICAgbGVhdmVCRDEoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIpO31cclxuXHJcbiAgICBqb2luQkQyKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMkhTY204alwiKTt9XHJcbiAgICBsZWF2ZUJEMigpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiMjgwODA2NDcyOTI4MTk4NjU2XCIpO31cclxuXHJcbiAgICBqb2luTEMoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCI3ZUZmZjJBXCIpO31cclxuICAgIGxlYXZlTEMoKSB7dGhpcy5HdWlsZEFjdGlvbnMubGVhdmVHdWlsZChcIjcwNTkwODM1MDIxODY2NjExN1wiKTt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3QoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3Q7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0fVxyXG4gICAgICovXHJcbiAgICBnZXQgUmVhY3QoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3Q7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCJyZWFjdC1kb21cIil9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdERvbSgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdERvbTt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3QuQ29tcG9uZW50fVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3RDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3QuQ29tcG9uZW50O31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxyXG5cclxuICAgIGdldCBhbmNob3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYW5jaG9yVW5kZXJsaW5lT25Ib3ZlclwiXSkgfHwge2FuY2hvcjogXCJhbmNob3ItM1otOEJiXCIsIGFuY2hvclVuZGVybGluZU9uSG92ZXI6IFwiYW5jaG9yVW5kZXJsaW5lT25Ib3Zlci0yRVNIUUJcIn07fVxyXG4gICAgZ2V0IHNsYXRlRWRpdG9yQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNsYXRlVGV4dEFyZWFcIl0pO31cclxuICAgIGdldCBtZXNzYWdlQ2xhc3NlcygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm1lc3NhZ2VcIiwgXCJjb250YWluZXJDb3p5XCJdKTt9XHJcbiAgICBnZXQgZ3VpbGRDbGFzc2VzKCkge1xyXG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLndyYXBwZXIgJiYgZS51bnJlYWRNZW50aW9uc0JhcilbMF07XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gQkRNb2R1bGVzLmdldChlID0+IGUuZ3VpbGRzRXJyb3IgJiYgZS5zZWxlY3RlZClbMF1cclxuICAgICAgICBjb25zdCBwaWxsID0gQkRNb2R1bGVzLmdldChlID0+IGUuYmxvYkNvbnRhaW5lcilbMF1cclxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ3VpbGRzV3JhcHBlciwgZ3VpbGRzLCBwaWxsKTtcclxuXHR9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcbiAgICBnZXQgTWVzc2FnZUNvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQuZGlzcGxheU5hbWUgPT0gXCJNZXNzYWdlXCIpO31cclxuICAgIGdldCBUaW1lRm9ybWF0dGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZGF0ZUZvcm1hdFwiXSk7fVxyXG4gICAgZ2V0IFRvb2x0aXBXcmFwcGVyKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcFwiKTt9XHJcbiAgICBnZXQgTmF0aXZlTW9kdWxlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2V0QmFkZ2VcIl0pO31cclxuICAgIGdldCBJbnZpdGVBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTt9XHJcbiAgICBnZXQgR3VpbGRBY3Rpb25zKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibGVhdmVHdWlsZFwiXSk7fVxyXG4gICAgZ2V0IFRvb2x0aXBzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmhpZGUgJiYgbS5zaG93ICYmICFtLnNlYXJjaCAmJiAhbS5zdWJtaXQgJiYgIW0uc2VhcmNoICYmICFtLmFjdGl2YXRlUmFnaW5nRGVtb24gJiYgIW0uZGlzbWlzcyk7fVxyXG4gICAgZ2V0IEtleUdlbmVyYXRvcigpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS50b1N0cmluZyAmJiAvXCJiaW5hcnlcIi8udGVzdChtLnRvU3RyaW5nKCkpKTt9XHJcbiAgICBnZXQgTGF5ZXJTdGFjaygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInBvcExheWVyXCJdKTt9XHJcbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0Q3VycmVudFVzZXJcIl0pO31cclxuICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRDaGFubmVsXCJdKTt9XHJcbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJvcGVuUHJpdmF0ZUNoYW5uZWxcIl0pO31cclxuICAgIGdldCBQcml2YXRlQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZWxlY3RQcml2YXRlQ2hhbm5lbFwiXSk7fVxyXG5cclxuICAgIG9wZW5ETSh1c2VySWQpIHtcclxuICAgICAgICBjb25zdCBzZWxmSWQgPSB0aGlzLlVzZXJTdG9yZS5nZXRDdXJyZW50VXNlcigpLmlkO1xyXG4gICAgICAgIGlmIChzZWxmSWQgPT0gdXNlcklkKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcHJpdmF0ZUNoYW5uZWxJZCA9IHRoaXMuQ2hhbm5lbFN0b3JlLmdldERNRnJvbVVzZXJJZCh1c2VySWQpO1xyXG4gICAgICAgIGlmIChwcml2YXRlQ2hhbm5lbElkKSByZXR1cm4gdGhpcy5Qcml2YXRlQ2hhbm5lbEFjdGlvbnMuc2VsZWN0UHJpdmF0ZUNoYW5uZWwocHJpdmF0ZUNoYW5uZWxJZCk7XHJcbiAgICAgICAgdGhpcy5DaGFubmVsQWN0aW9ucy5vcGVuUHJpdmF0ZUNoYW5uZWwoc2VsZklkLCB1c2VySWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlU2V0dGluZ3MoY2F0KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNldHRpbmdzKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1trZXldO1xyXG4gICAgICAgICAgICBpZiAoc2V0dGluZy5jYXQgPT09IGNhdCAmJiBzZXR0aW5nLmltcGxlbWVudGVkICYmICFzZXR0aW5nLmhpZGRlbikge1xyXG4gICAgICAgICAgICAgICAgc2V0dGluZy50ZXh0ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2V0dGluZyk7XHJcbiAgICAgICAgICAgIH0gcmV0dXJuIGFycjtcclxuICAgICAgICB9LCBbXSk7XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmNvbnN0IHN0eWxlID0gYFxyXG4gICAgLmNvbnRhaW5lci0yUmwwMXUge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmUhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5cclxuICAgIC5jaGF0LTNiUnh4dSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLnNpZGViYXItMks4cEZoIHtcclxuICAgICAgICBmbGV4LWdyb3c6IDEhaW1wb3J0YW50O1xyXG4gICAgfVxyXG5gO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFZvaWNlTW9kZSB7XHJcbiAgICBzdGFydCgpIHtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJWb2ljZU1vZGVcIiwgc3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgRE9NLnJlbW92ZVN0eWxlKFwiVm9pY2VNb2RlXCIpO1xyXG4gICAgfVxyXG59OyIsImNvbnN0IHJlcSA9IHdlYnBhY2tKc29ucC5wdXNoKFtbXSwge19fZXh0cmFfaWRfXzogKG1vZHVsZSwgZXhwb3J0cywgcmVxKSA9PiBtb2R1bGUuZXhwb3J0cyA9IHJlcX0sIFtbXCJfX2V4dHJhX2lkX19cIl1dXSk7XHJcbmRlbGV0ZSByZXEubS5fX2V4dHJhX2lkX187XHJcbmRlbGV0ZSByZXEuYy5fX2V4dHJhX2lkX187XHJcbmNvbnN0IGZpbmQgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIHJldHVybiBtLmRlZmF1bHQ7XHJcbiAgICAgICAgICAgIGlmIChtICYmIGZpbHRlcihtKSlcdHJldHVybiBtO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUud2FybihcIkNhbm5vdCBmaW5kIGxvYWRlZCBtb2R1bGUgaW4gY2FjaGVcIik7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGZpbmRBbGwgPSAoZmlsdGVyKSA9PiB7XHJcbiAgICBjb25zdCBtb2R1bGVzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGkgaW4gcmVxLmMpIHtcclxuICAgICAgICBpZiAocmVxLmMuaGFzT3duUHJvcGVydHkoaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbSA9IHJlcS5jW2ldLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmIChtICYmIG0uX19lc01vZHVsZSAmJiBtLmRlZmF1bHQgJiYgZmlsdGVyKG0uZGVmYXVsdCkpIG1vZHVsZXMucHVzaChtLmRlZmF1bHQpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChtICYmIGZpbHRlcihtKSkgbW9kdWxlcy5wdXNoKG0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtb2R1bGVzO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEJ5UHJvcHMgPSAoLi4ucHJvcE5hbWVzKSA9PiBmaW5kKG1vZHVsZSA9PiBwcm9wTmFtZXMuZXZlcnkocHJvcCA9PiBtb2R1bGVbcHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlQcm90b3R5cGVzID0gKC4uLnByb3RvTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5wcm90b3R5cGUgJiYgcHJvdG9OYW1lcy5ldmVyeShwcm90b1Byb3AgPT4gbW9kdWxlLnByb3RvdHlwZVtwcm90b1Byb3BdICE9PSB1bmRlZmluZWQpKTtcclxuY29uc3QgZmluZEJ5RGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWUpID0+IGZpbmQobW9kdWxlID0+IG1vZHVsZS5kaXNwbGF5TmFtZSA9PT0gZGlzcGxheU5hbWUpO1xyXG5cclxubGV0IG1vZCA9ICB7ZmluZCwgZmluZEFsbCwgZmluZEJ5UHJvcHMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuZXhwb3J0IGRlZmF1bHQgbW9kXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuV2VicGFja01vZHVsZXMgPSBtb2QiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCdWdIdW50ZXJCYWRnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHNcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDMxLjMgMjkuNVwiIHsuLi5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjIuOCAxczEyIDguMiA3LjQgMTkuN1MxNi42IDI5IDIwIDI1LjZzLTQtNS42LTguNy0xMEwyMi44IDFcIiBmaWxsPVwicmdiYSgyMjcsNiwxOSwuNilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi4xIDEyLjNjLTIuNSAzLjItNi4xIDQuOC04LjkgNC4zTDMuNiAyOC44Yy0uNy45LTEuOSAxLTIuOC4zLS45LS43LTEtMS45LS40LTIuOEwxMCAxNC4xYy0xLjMtMi41LS42LTYuNCAyLTkuNyAzLjItNCA4LTUuNSAxMC44LTMuNHMyLjQgNy4yLS43IDExLjN6XCIgZmlsbD1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9IFxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY3VzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIHJldHVybiAoPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiICB7Li4udGhpcy5wcm9wcy5zdmd9IGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNERDJFNDRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMzMgMzNhMiAyIDAgMDEtMiAySDVhMiAyIDAgMDEtMi0ybDEtMTJoMjhsMSAxMnpcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNFQTU5NkVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgMzVjLS43OTItMS44NzUtMS43NS0zLjI5MS0zLjQxNy00LjY2NiAxLjc1LTEuNDU5IDQuNTQyLTUuNSA1LjI1LTguMjkyczIuNzUgOC4xMjUgMi4wNDIgMTAuNjI1UzEzIDM1IDEzIDM1em0xMC4zMDMgMGMuNzkxLTEuODc1IDEuNzUtMy4yOTEgMy40MTYtNC42NjYtMS43NS0xLjQ1OS00LjU0MS01LjUtNS4yNS04LjI5Mi0uNzA3LTIuNzkyLTIuNzUgOC4xMjUtMi4wNCAxMC42MjUuNzA4IDIuNSAzLjg3NCAyLjMzMyAzLjg3NCAyLjMzM3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNCRTE5MzFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43MjggMjQuMjYzQTIuNSAyLjUgMCAwMDggMjIuNWMwLS41NjUtLjE5NS0xLjA4MS0uNTExLTEuNUg0bC0uMjcyIDMuMjYzem0yOC41NDQgMEwzMiAyMWgtMy40ODlBMi40ODIgMi40ODIgMCAwMDI4IDIyLjVhMi41IDIuNSAwIDAwNC4yNzIgMS43NjN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTRcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjIyXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjZcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMyAzNUgxM3MyLTYgMi0xM2g2YzAgNyAyIDEzIDIgMTN6TTE3IDJoMnY3aC0yelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM1NUFDRUVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNMTguODM4LjIwNkMxNy42NjcuMDQyIDE3IC4zMTggMTcgMS40MTh2MWMwIDEuMS44NjUgMS43NTMgMS45MjMgMS40NTFsNS4xNTQtLjkwMWMxLjcxNS0uMzQzIDEuNTQ4LTEuNTkzLjA4NS0xLjg4NEwxOC44MzguMjA2elwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0NDRDZERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOCA2bC0uMDgxLjEyM0MxMC45MzggMTYuOTgxIDMgMTUuMDE1IDMgMTl2Mi41YTIuNSAyLjUgMCAwMDQuOTUuNUgxMmEyIDIgMCAwMDQgMGg0YTIgMiAwIDAwNCAwaDQuMDVhMi41IDIuNSAwIDAwNC45NS0uNVYxOWMwLTQtOC0yLTE1LTEzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPGcgZmlsbD1cIiNGNUY4RkFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk0OCA2LjA3OGwtLjAzLjA0NUMxNy4xMzIgMTEuNjE5IDEwLjgxMSAxNi4xMjYgOCAxOHY0YTIgMiAwIDAwNCAwdi00Yy45ODItLjk4MiA1LjgxMy02Ljc4NyA1Ljk4NC0xMS43MzItLjAxLS4wNjQtLjAyNy0uMTI2LS4wMzYtLjE5em0uMDguMzk4QzE4LjMyNCAxMS4zNzQgMjMuMDMxIDE3LjAzMSAyNCAxOHY0YTIgMiAwIDAwNCAwdi00Yy0yLjc1LTEuODMzLTguOTUzLTYuMTktOS45NzItMTEuNTI0elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3Ljk4NCA2LjI3QzE3LjkyMiA4LjM0NiAxNy42MDYgMTYuMzk0IDE2IDE4djRhMiAyIDAgMDA0IDB2LTRjLTEuNTY0LTEuNTY0LTEuOTA1LTkuMjQxLTEuOTc5LTExLjU1OS0uMDExLS4wNTctLjAyNy0uMTEzLS4wMzctLjE3MXpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodGNvcmRMb2dvIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNjggMTY4LjY5XCIgey4uLnByb3BzfSBoZWlnaHQ9XCIxMDAlXCIgd2lkdGg9e3Byb3BzLnNpemV9PlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19hXCIgeDE9ezY2Ljd9IHkxPXstNDg3Ljd9IHgyPXs2Ni43fSB5Mj17LTUwOC43M30gZ3JhZGllbnRUcmFuc2Zvcm09XCJtYXRyaXgoMSAwIDAgLTEgMCAtNDA4KVwiIGdyYWRpZW50VW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezB9IHN0b3BDb2xvcj1cIiNlMzA2MTNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9ezF9IHN0b3BDb2xvcj1cIiM3MzFhMTRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPVwicHJlZml4X19iXCIgeDE9ezEwMS43fSB5MT17LTQ4Ny43fSB4Mj17MTAxLjd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UyMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2NcIiB4MT17ODR9IHkxPXstNDA4fSB4Mj17ODR9IHkyPXstNTc2LjY5fSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjZmZmXCIgZD1cIk0xNC45IDM1LjNoMTM5LjJWMTMzSDE0Ljl6XCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNjYuNyA3OS43Yy01LjQgMC05LjggNC43LTkuOCAxMC41czQuNCAxMC41IDkuOCAxMC41IDkuOC00LjcgOS44LTEwLjUtNC40LTEwLjUtOS44LTEwLjV6XCIgZmlsbD1cInVybCgjcHJlZml4X19hKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMS43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2IpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwdjE2OGwxNjggLjY5VjB6bTExMS4zIDEyNC4xcy0zLjQtNC4xLTYuMy03LjdjMTIuNi0zLjUgMTcuNC0xMS4zIDE3LjQtMTEuM2E1Mi41MiA1Mi41MiAwIDAxLTExLjEgNS42IDY4LjYzIDY4LjYzIDAgMDEtMzguOSA0IDcwLjEyIDcwLjEyIDAgMDEtMTQuMS00LjEgNDguODggNDguODggMCAwMS03LjEtMy4zYy0uMy0uMi0uNi0uMy0uOS0uNWEuNzYuNzYgMCAwMC0uNC0uMmMtMS43LTEtMi42LTEuNi0yLjYtMS42czQuNiA3LjYgMTYuOCAxMS4yYy0yLjkgMy42LTYuNCA3LjktNi40IDcuOS0yMS4yLS42LTI5LjMtMTQuNS0yOS4zLTE0LjUgMC0zMC42IDEzLjgtNTUuNCAxMy44LTU1LjQgMTMuOC0xMC4zIDI2LjktMTAgMjYuOS0xMGwxIDEuMUM1Mi44IDUwLjMgNDUgNTcuOSA0NSA1Ny45YTU2LjIgNTYuMiAwIDAxNS43LTIuNyA3Mi4xOSA3Mi4xOSAwIDAxMjEuOC02IDguNzUgOC43NSAwIDAxMS42LS4yIDg5LjEgODkuMSAwIDAxMTkuNC0uMiA3OC40NSA3OC40NSAwIDAxMjguOSA5LjFzLTcuNS03LjItMjMuOS0xMi4xbDEuMy0xLjVzMTMuMS0uMyAyNi45IDEwYzAgMCAxMy44IDI0LjggMTMuOCA1NS40LjEtLjEtOCAxMy44LTI5LjIgMTQuNHpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2MpXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFYyQ19TZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzVGl0bGVcIjtcclxuXHJcbi8qKlxyXG4gKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0XCIpfVxyXG4gKi9cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IG1hcmdpbk1vZHVsZTIgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdXHJcbmxldCBjb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbmxldCBzaXplTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXVxyXG5sZXQgc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbmNvbnN0IEd1aWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzKVswXS5kZWZhdWx0XHJcbmNvbnN0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFJlbGF0aW9uc2hpcHMpWzBdLmRlZmF1bHRcclxuY29uc3Qgc2Vzc2lvbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldFNlc3Npb25zKVswXS5kZWZhdWx0XHJcbmNvbnN0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF0uZGVmYXVsdFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0FjY291bnRJbmZvcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgaWYoIW1hcmdpbk1vZHVsZTIpbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxuICAgICAgICBpZighY29sb3JNb2R1bGUpY29sb3JNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXVxyXG4gICAgICAgIGlmKCFzaXplTW9kdWxlKXNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJBY2NvdW50IEluZm9zXCIvPixcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzc05hbWU9e2NvbG9yTW9kdWxlLmNvbG9yU3RhbmRhcmQrXCIgXCIrc2l6ZU1vZHVsZS5zaXplMTQrXCIgXCIrbWFyZ2luTW9kdWxlMi5oNStcIiBcIittYXJnaW5Nb2R1bGUyLmRlZmF1bHRNYXJnaW5oNX0+XHJcbiAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFByb2ZpbGVWYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBTdGF0aXN0aWNzXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0U3RhdGlzdGljcygpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBDb25uZWN0ZWQgU2Vzc2lvbnNcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTZXNzaW9uVmFsdWUoKX0gbGFuZ3VhZ2U9XCJkaWZmXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj5cclxuICAgICAgICBdXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2Vzc2lvblZhbHVlKCl7XHJcbiAgICAgICAgY29uc3Qgc2Vzc2lvbnNSYXcgPSBzZXNzaW9uTW9kdWxlLmdldFNlc3Npb25zKClcclxuICAgICAgICBjb25zdCBzZXNzaW9ucyA9IE9iamVjdC5rZXlzKHNlc3Npb25zUmF3KS5maWx0ZXIoZSA9PiBlICE9PSBcImFsbFwiKS5tYXAoZSA9PiBzZXNzaW9uc1Jhd1tlXSlcclxuXHJcbiAgICAgICAgaWYoc2Vzc2lvbnMubGVuZ3RoID09PSAwKXJldHVybiBcIi0gTm8gc2Vzc2lvbiBkZXRlY3RlZC4gUGxlYXNlIHRyeSBpbiBhIGZldyBzZWNvbmRzXCJcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gc2Vzc2lvbnMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYCsgaWQ6ICR7ZS5zZXNzaW9uSWR9XHJcbisgb3M6ICR7ZS5jbGllbnRJbmZvLm9zWzBdLnRvVXBwZXJDYXNlKCkrZS5jbGllbnRJbmZvLm9zLnNsaWNlKDEpfVxyXG4rIGNsaWVudDogJHtlLmNsaWVudEluZm8uY2xpZW50fVxyXG4rIHN0YXR1czogJHtlLnN0YXR1c31cclxuKyBBY3Rpdml0aWVzOiAke2UuYWN0aXZpdGllcy5sZW5ndGh9YFxyXG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIitcIi1cIi5yZXBlYXQoMzgpK1wiXFxuXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvZmlsZVZhbHVlKCl7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHVzZXJNb2R1bGUuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtEYXRlfVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRBdCA9IHVzZXIuY3JlYXRlZEF0XHJcblxyXG4gICAgICAgIGxldCBhdmF0YXJVUkwgPSB1c2VyLmF2YXRhclVSTFxyXG4gICAgICAgIGlmKHVzZXIuYXZhdGFyICYmIHVzZXIuYXZhdGFyLnN0YXJ0c1dpdGgoXCJhX1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IHVzZXIuZ2V0QXZhdGFyVVJMKFwiZ2lmXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihhdmF0YXJVUkwuc3RhcnRzV2l0aChcIi9cIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBcImh0dHBzOi8vZGlzY29yZC5jb21cIithdmF0YXJVUkxcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoYXZhdGFyVVJMLmVuZHNXaXRoKFwiP3NpemU9MTI4XCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gYXZhdGFyVVJMLnJlcGxhY2UoXCI/c2l6ZT0xMjhcIiwgXCI/c2l6ZT00MDk2XCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gYCsgVXNlcm5hbWU6ICR7dXNlci51c2VybmFtZX1cclxuKyBEaXNjcmltaW5hdG9yOiAke3VzZXIuZGlzY3JpbWluYXRvcn1cclxuKyBUYWc6ICR7dXNlci50YWd9XHJcbisgSUQ6ICR7dXNlci5pZH1cclxuKyBBdmF0YXI6ICR7dXNlci5hdmF0YXJ9XHJcbisgQXZhdGFyIFVSTDogJHthdmF0YXJVUkx9XHJcbisgQ3JlYXRpb24gRGF0ZTogJHsoY3JlYXRlZEF0LmdldERhdGUoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRNb250aCgpKzEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpfS8keyhjcmVhdGVkQXQuZ2V0RnVsbFllYXIoKSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9ICR7Y3JlYXRlZEF0LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9aCAke2NyZWF0ZWRBdC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9bWluICR7Y3JlYXRlZEF0LmdldFNlY29uZHMoKX1zXHJcbisgRmxhZ3M6ICR7dXNlci5mbGFnc31cclxuKyBIYXMgTml0cm86ICR7dXNlci5oYXNQcmVtaXVtU3Vic2NyaXB0aW9uID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBFbWFpbDogJHt1c2VyLmVtYWlsfVxyXG4tIDJGQTogJHt1c2VyLm1mYUVuYWJsZWQgPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEhhcyBCZWVuIE9uIE1vYmlsZTogJHt1c2VyLm1vYmlsZSA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gUGhvbmU6ICR7dXNlci5waG9uZSB8fCBcIk5vbmVcIn1cclxuLSBWZXJpZmllZDogJHt1c2VyLnZlcmlmaWVkfWBcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0aXN0aWNzKCl7XHJcblxyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IE9iamVjdC52YWx1ZXMoR3VpbGRNb2R1bGUuZ2V0R3VpbGRzKCkpXHJcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSlcclxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcclxuICAgICAgICBjb25zdCBibG9ja2VkID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0Jsb2NrZWQoZSkpXHJcblxyXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xyXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcclxuKyBGcmllbmRzIENvdW50OiAke2ZyaWVuZHMubGVuZ3RofSBmcmllbmRzXHJcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmxldCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcblxyXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTEpbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcbiAgICAgICAgaWYoIXNjcm9sbGJhck1vZHVsZTEpc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbiAgICAgICAgaWYoIWhpZ2h0bGlnaHRKUyloaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YH0+XHJcbiAgICAgICAgICAgIDxwcmU+XHJcbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvY29kZT5cclxuICAgICAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn0iLCIvLyBHb29kIGx1Y2sgdG8gcmVhZCBteSBjb2RlLCBFdmVuIG1lIGNhbid0IHJlYWQgaXQgcHJvcGVybHkuXHJcblxyXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4uL21vZHVsZXMvZGlzdGFudFwiXHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiXHJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCJcclxuXHJcbmxldCBmb3JtTW9kdWxlXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaVByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXRlczogW11cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIWZvcm1Nb2R1bGUpZm9ybU1vZHVsZSA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLkZvcm1TZWN0aW9uKVxyXG4gICAgICAgIC8qKiBcclxuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb25bXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBhbGxDb21wb25lbnRzID0gWy4uLm5ldyBTZXQoT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cykubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXSkubWFwKGsgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtrXSlcclxuICAgICAgICB9KS5mbGF0KCkpXVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9XCJMaWdodGNvcmQncyBBcGkgQXZhaWxsYWJsZSBjb21wb25lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtVGV4dCB0eXBlPVwiZGVzY3JpcHRpb25cIiBjbGFzc05hbWU9XCJcIiBzZWxlY3RhYmxlPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29tcG9uZW50cyBhcmUgaGVyZSBmb3IgdGhlIHBsdWdpbiBkZXZzLiBUaGV5IGNhbiBxdWlja2x5IGVtYmVkIGFueSBjb21wb25lbnQgYmVsb3cgd2l0aCB0aGlzIHBhbmVsLlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6IFwiMjBweFwifX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJpbmZvXCI+QWxsIHRoZXNlIGNvbXBvbmVudHMgaGF2ZSBlcnJvciBoYW5kbGluZy4gSWYgeW91IHdhbnQgbm9uZSwgYWRkIGAub3JpZ2luYWxgIGFmdGVyIHRoZSBjb21wb25lbnQgcGF0aC48L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwid2FyblwiPldlIGRvIG5vdCByZWNvbW1lbmQgbW9kaWZ5aW5nIHRoZXNlIGNvbXBvbmVudCB3aXRoIHBsdWdpbnMuIE9ubHkgZG8gdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD5cclxuICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD5cclxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3A+PC9NYXJnaW5Ub3A+XHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gY29sb3I9XCJicmFuZFwiIGxvb2s9XCJvdXRsaW5lZFwiIHNpemU9XCJtZWRpdW1cIiBob3ZlckNvbG9yPVwiZ3JlZW5cIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXovTGlnaHRjb3JkQXBpL2RvY3NcIilcclxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxyXG4gICAgICAgICAgICBhbGxDb21wb25lbnRzLm1hcChjb21wID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBQYXRoID0gYExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy4ke09iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpLmZpbmQoZSA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2NvbXBOYW1lXSl9LiR7Y29tcE5hbWV9YFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxDb21wb25lbnRQcmV2aWV3IGtleT17Y29tcFBhdGh9IGNvbXA9e2NvbXB9IC8+XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW5kZXJzKCl7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBDb21wb25lbnRQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICB0YWI6IFwicHJldmlld1wiLFxyXG4gICAgICAgICAgICBlbGVtOiBwcm9wcy5jb21wLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5wcm9wcy5jb21wXHJcbiAgICAgICAgbGV0IEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xyXG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICBsZXQgZ2V0UHJvcHMgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaW5hbCA9IHt9XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmluYWxbT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXSA9IGNhdGVnb3J5WzBdW09iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXV1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmluYWxba2V5XSA9IEFsbFByZXZpZXdzLmZpbmQoZSA9PiBlLmZpbmQoZSA9PiBlW2tleV0pKVtzdGF0ZS5vcHRpb25zW2tleV1dW2tleV1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZW5kZXJQcmV2aWV3ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlbmRlckNvZGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjIwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU1hcclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzeFwiIGNvbnRlbnQ9e2dlbmVyYXRlQ29kZShcImpzeFwiKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzXCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwicmVhY3RcIil9Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZ2V0U3RyRm9yUHJvcCA9ICh2YWx1ZSwgY29tcFBhdGgsIGxhbmcpID0+IHtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIil7XHJcbiAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihjb21wUGF0aCA9PT0gXCJMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihsYW5nID09PSBcInJlYWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG5tYXJnaW5Ub3A6IFwiMjBweFwiLCBtYXJnaW5Cb3R0b206IFwiMjBweFwiXHJcbn19LFxyXG5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG5iYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsXHJcbnBhZGRpbmc6IFwiMzBweCAzMHB4XCIsXHJcbmJvcmRlclJhZGl1czogXCI4cHhcIlxyXG59LCBjbGFzc05hbWU6IFwibGMtdGFiLWJveC1zaGFkb3dcIiB9LFxyXG5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlLCBudWxsLCBcIlByZXZpZXcgdGFic1wiKVxyXG4pXHJcbilgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwianN4XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPXt7XHJcbm1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxufX0+XHJcbjxkaXYgc3R5bGU9e3tcclxuICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXHJcbiAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG59fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlByZXZpZXcgdGFiczwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGU+XHJcbjwvZGl2PlxyXG48L2Rpdj5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiWW91ciBjb21wb25lbnRzIGhlcmUuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgXCIgICAgXCIpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBnZW5lcmF0ZUNvZGUgPSBmdW5jdGlvbihsYW5nKXsgLy8gY29kZSBmb3JtYXR0aW5nIGlzIGhhcmRcclxuICAgICAgICAgICAgY29uc3QgY29tcE5hbWUgPSBjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZVxyXG4gICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBDYXRlZ29yeSA9IGNhdGVnb3JpZXMuZmluZChlID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1bY29tcE5hbWVdKVxyXG4gICAgICAgICAgICBjb25zdCBjb21wUGF0aCA9IGBMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuJHtjb21wQ2F0ZWdvcnl9LiR7Y29tcE5hbWV9YFxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcclxuXHJcbiAgICAgICAgICAgIGlmKGxhbmcgPT09IFwianN4XCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGtleSA9PSBcImNoaWxkcmVuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0ga2V5K1wiPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgbGV0IG9wZW5UYWdcclxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0+YFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9zZVRhZyA9IGA8LyR7Y29tcFBhdGh9PmBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfS8+YFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHMuY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuICYmIGNoaWxkcmVuLiQkdHlwZW9mICYmIChjaGlsZHJlbi4kJHR5cGVvZiA9PT0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgfHwgY2hpbGRyZW4uJCR0eXBlb2YgPT09IDB4ZWFjNykpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFN0cmluZ3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmlzaWJsZUtleSA9IC9bXlxcd1xcZF9dL2cudGVzdChrZXkpID8gSlNPTi5zdHJpbmdpZnkoa2V5KSA6IGtleVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSB2aXNpYmxlS2V5K1wiOiBcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA9PT0gMClyZXR1cm4gc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIgICAgXCIgKyBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcE9iamVjdCA9IFwie1wiXHJcbiAgICAgICAgICAgICAgICBpZihwcm9wU3RyaW5ncy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNMYXN0ID0gaSA9PT0gcHJvcFN0cmluZ3MubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IGkgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIixcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNMYXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJ9XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KCR7Y29tcFBhdGh9LCAke3Byb3BPYmplY3R9LCAke2NoaWxkcmVuRGF0YX0pYFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBoZWxwID0gY29tcC5oZWxwIHx8IHt9XHJcbiAgICAgICAgbGV0IGluZm8gPSBoZWxwLmluZm8gPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgIHtoZWxwLmluZm99XHJcbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgIGxldCB3YXJuID0gaGVscC53YXJuID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwid2FyblwiPlxyXG4gICAgICAgICAgICB7aGVscC53YXJufVxyXG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICBsZXQgZGFuZ2VyID0gaGVscC5kYW5nZXIgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJkYW5nZXJcIj5cclxuICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxyXG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICBsZXQgZXJyb3IgPSBoZWxwLmVycm9yID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAge2hlbHAuZXJyb3J9XHJcbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgIGxldCBzdWNjZXNzID0gaGVscC5zdWNjZXNzID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwic3VjY2Vzc1wiPlxyXG4gICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxyXG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICByZXR1cm4gKDxkaXY+XHJcbiAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgIHtjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZX1cclxuICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgIHtzdWNjZXNzfVxyXG4gICAgICAgICAgICB7d2Fybn1cclxuICAgICAgICAgICAge2Vycm9yfVxyXG4gICAgICAgICAgICB7ZGFuZ2VyfVxyXG4gICAgICAgICAgICB7QWxsUHJldmlld3MubWFwKGNhdGVnb3J5ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLnRleHQpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLmNoaWxkcmVuKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2tleX1cclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biBvcHRpb25zPXtjYXRlZ29yeS5tYXAoKGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogSlNPTi5zdHJpbmdpZnkoZVtPYmplY3Qua2V5cyhlKVswXV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUub3B0aW9ucywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiAodmFsdWUudmFsdWUgfHwgXCIwXCIpLnJlcGxhY2UoXCJvcHQtXCIsIFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH19IHNlYXJjaGFibGU9e3RydWV9Lz4sXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXHJcbiAgICAgICAgICAgICAgICBhY3RpdmU9e3N0YXRlLnRhYn0gY2hpbGRyZW49e3N0YXRlLnRhYiA9PT0gXCJwcmV2aWV3XCIgPyByZW5kZXJQcmV2aWV3KCkgOiByZW5kZXJDb2RlKCl9IG9uQ2hhbmdlPXsodGFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYlxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9fS8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXHJcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCFjb250YWluZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGBDb250YWluZXIgaXMgdW5kZWZpbmVkLmApKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCJkaXZbY2xhc3MqPVxcXCJjb250ZW50UmVnaW9uU2Nyb2xsZXItXFxcIl1cIilcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW5rcygpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xyXG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxyXG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxyXG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XHJcblxyXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xyXG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcclxuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgRW11bGF0ZWRUb29sdGlwIGZyb20gXCIuL3Rvb2x0aXBcIjtcclxuXHJcbmNvbnN0IFRvb2x0aXAgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5pc1BsdWdpbnMgPSB0aGlzLnByb3BzLnR5cGUgPT0gXCJwbHVnaW5zXCI7XHJcbiAgICAgICAgdGhpcy5jb29raWUgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbkNvb2tpZSA6IHRoZW1lQ29va2llO1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XHJcblxyXG4gICAgICAgIHRoaXMuc29ydCA9IHRoaXMuc29ydC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkFkZG9uQ2hhbmdlcyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gdGhpcy5vbkFkZG9uQ2hhbmdlcy5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgICAgICBjb25zdCB0eXBlID0gKHRoaXMuaXNQbHVnaW5zID8gXCJwbHVnaW5cIiA6IFwidGhlbWVcIikgKyBcIi1cIlxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXJlbG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXHJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX11bmxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Gb2xkZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGwgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGw7XHJcbiAgICAgICAgY29uc3Qgb3BlbiA9IHNoZWxsLm9wZW5QYXRoIHx8IHNoZWxsLm9wZW5JdGVtO1xyXG4gICAgICAgIG9wZW4odGhpcy5pc1BsdWdpbnMgPyBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KG5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZWRpdChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUobmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShuYW1lKTtcclxuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJOYW1lXCIsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiVmVyc2lvblwiLCB2YWx1ZTogXCJ2ZXJzaW9uXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiUmVjZW50bHkgQWRkZWRcIiwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRmlsZSBTaXplXCIsIHZhbHVlOiBcInNpemVcIn0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXNjZW5kaW5nXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkRlc2NlbmRpbmdcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9wcyhhZGRvbikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleTogdGhpcy5nZXROYW1lKGFkZG9uKSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXHJcbiAgICAgICAgICAgIHRvZ2dsZTogdGhpcy5tYW5hZ2VyLnRvZ2dsZS5iaW5kKHRoaXMubWFuYWdlciksXHJcbiAgICAgICAgICAgIGVkaXQ6IHNldHRpbmdzQ29va2llW1wiZm9yay1wcy03XCJdID8gdGhpcy5lZGl0LmJpbmQodGhpcykgOiBudWxsLFxyXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvbixcclxuICAgICAgICAgICAgaGFzaDogYWRkb24uaGFzaFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaXN0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IHRoaXMuZ2V0U3RyaW5nKGFbdGhpcy5zdGF0ZS5zb3J0XSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IGIucGx1Z2luICYmIGIucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGIucGx1Z2luW2BnZXQke2NhcH1gXSgpKSAgOiB0aGlzLmdldFN0cmluZyhiW3RoaXMuc3RhdGUuc29ydF0pO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGZpcnN0KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gZmlyc3QudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHNlY29uZC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+IGZpcnN0KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5hc2NlbmRpbmcpIHNvcnRlZEFkZG9ucy5yZXZlcnNlKCk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHNvcnRlZEFkZG9ucy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHNvcnRlZEFkZG9uc1thXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRBdXRob3IoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIG1hdGNoZXMgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCB2ZXJzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhhZGRvbik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVkLnB1c2goPEVycm9yQm91bmRhcnk+PEFkZG9uQ2FyZCB7Li4ucHJvcHN9IHJlbG9hZD17IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHRoaXMubWFuYWdlci5yZWxvYWQuYmluZCh0aGlzLm1hbmFnZXIpfSAvPjwvRXJyb3JCb3VuZGFyeT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVuZGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmFtZShhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0QXV0aG9yKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IGFkZG9uLmF1dGhvcik7fVxyXG4gICAgZ2V0RGVzY3JpcHRpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiBhZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0VmVyc2lvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlckNoZWNrVXBkYXRlcygpe1xyXG4gICAgICAgIGlmKCF3aW5kb3cuWmVyZXNQbHVnaW5MaWJyYXJ5KXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXdpbmRvdy5QbHVnaW5VcGRhdGVzKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsICE9PSBcImZ1bmN0aW9uXCIpcmV0dXJuIG51bGxcclxuICAgICAgICBpZighdGhpcy5pc1BsdWdpbnMpcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgbGV0IHRvb2x0aXBJc1Nob3dpbmcgPSBmYWxzZVxyXG4gICAgICAgIGxldCB0b29sdGlwXHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCB0ZXh0PVwiQ2hlY2tzIGZvciB1cGRhdGVzIG9mIHBsdWdpbnMgdGhhdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gUmlnaHQtY2xpY2sgZm9yIGEgbGlzdC5cIj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiBcIjEwcHhcIn19IG9uTW91c2VMZWF2ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBJc1Nob3dpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuaGlkZSgpXHJcbiAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiByZWY9XCJjaGVja1VwZGF0ZUJ1dHRvblwiIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBpbiBwcm9ncmVzcy5cIiwge3R5cGU6IFwiaW5mb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBsdWdpblVwZGF0ZXMuY2hlY2tBbGwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJQbHVnaW4gdXBkYXRlIGNoZWNrIGNvbXBsZXRlLlwiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgY2hlY2tpbmcgdXBkYXRlLlwiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0gZGlzYWJsZWQ9e2ZhbHNlfSBvblJpZ2h0Q2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5yZWZzLmNoZWNrVXBkYXRlQnV0dG9uKXJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LlBsdWdpblVwZGF0ZXMgfHwgIXdpbmRvdy5QbHVnaW5VcGRhdGVzLnBsdWdpbnMpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZih0b29sdGlwSXNTaG93aW5nKXJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBuZXcgRW11bGF0ZWRUb29sdGlwKHRoaXMucmVmcy5jaGVja1VwZGF0ZUJ1dHRvbi5yZWZzLm9yaWdpbmFsLnJlZnMuYnV0dG9uLCBPYmplY3QudmFsdWVzKHdpbmRvdy5QbHVnaW5VcGRhdGVzLnBsdWdpbnMpLm1hcChwID0+IHAubmFtZSkuam9pbihcIiwgXCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZGU6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaEV2ZW50czogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuc2hvdygpXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcElzU2hvd2luZyA9IHRydWVcclxuICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBVcGRhdGVzXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9Ub29sdGlwV3JhcD5cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgcmVmcmVzaEljb24gPSA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PVwiUmVsb2FkIExpc3RcIj5cclxuICAgICAgICAgICAgeyhwcm9wcykgPT4gXHJcbiAgICAgICAgICAgIDxSZWxvYWRJY29uIHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtaWNvbiBiZC1yZWxvYWQgYmQtcmVsb2FkLWhlYWRlclwiIHNpemU9XCIxOHB4XCIgb25DbGljaz17YXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQbHVnaW5zKSBwbHVnaW5Nb2R1bGUudXBkYXRlUGx1Z2luTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGVtZU1vZHVsZS51cGRhdGVUaGVtZUxpc3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgfTwvVG9vbHRpcD47XHJcbiAgICAgICAgY29uc3QgYWRkb25DYXJkcyA9IHRoaXMuZ2V0QWRkb25zKCk7XHJcblxyXG4gICAgICAgIHJldHVybiA8Q29udGVudENvbHVtbiB0aXRsZT17YCR7dGhpcy5wcm9wcy50eXBlLnRvVXBwZXJDYXNlKCl94oCUJHthZGRvbkNhcmRzLmxlbmd0aH1gfT5cclxuICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjb2xvcj1cImJyYW5kXCIgXHJcbiAgICAgICAgICAgICAgICBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17dGhpcy5vcGVuRm9sZGVyLmJpbmQodGhpcyl9IHdyYXBwZXI9e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIlxyXG4gICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICBPcGVuIHt0aGlzLmlzUGx1Z2lucyA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCJ9IEZvbGRlclxyXG4gICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJDaGVja1VwZGF0ZXMoKX1cclxuICAgICAgICAgICAgeyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiByZWZyZXNoSWNvbn1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgPFNlYXJjaCBvbkNoYW5nZT17dGhpcy5zZWFyY2h9IHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7dGhpcy5wcm9wcy50eXBlfS4uLmB9IC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWRyb3Bkb3duc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+U29ydCBieTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5PcmRlcjo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZGEtc2xpc3QgYmQtYWRkb24tbGlzdFwiPnthZGRvbkNhcmRzfTwvZGl2PlxyXG4gICAgICAgIDwvQ29udGVudENvbHVtbj5cclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDYXJkTGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FyZExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRMb2dvIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge2hlaWdodDogXCIxMDAlXCIsIHdpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7ZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIiwgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIn0sIHZpZXdCb3g6IFwiMCAwIDIwMDAgMjAwMFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwibWV0YWRhdGFcIiwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MVwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMjBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxNVwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzNcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjEwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzMpXCJ9LCBkOiBcIk0xMTk1LjQ0KzEzNS40NDJMMTE5NS40NCsxMzUuNDQyTDk5Ny42KzEzNi40NDJDMTAyNC4yKzE0OS43NDIrMTE3MC4zNCsxNjMuNTQyKzExOTMuNjQrMTc5Ljc0MkMxMjY0LjM0KzIyOC44NDIrMTMxOS43NCsyOTEuMjQyKzEzNTguMjQrMzY1LjA0MkMxMzk4LjE0KzQ0MS42NDIrMTQxOS43NCs1MzAuNjQyKzE0MjIuNTQrNjI5LjY0MkwxNDIyLjU0KzYzMC44NDJMMTQyMi41NCs2MzIuMDQyQzE0MjIuNTQrNzczLjE0MisxNDIyLjU0KzEyMjguMTQrMTQyMi41NCsxMzY5LjE0TDE0MjIuNTQrMTM3MC4zNEwxNDIyLjU0KzEzNzEuNTRDMTQxOS44NCsxNDcwLjU0KzEzOTguMjQrMTU1OS41NCsxMzU4LjI0KzE2MzYuMTRDMTMxOS43NCsxNzA5Ljk0KzEyNjQuNDQrMTc3Mi4zNCsxMTkzLjY0KzE4MjEuNDRDMTE3MS4wNCsxODM3LjE0KzEwMjUuNysxODUwLjU0KzEwMDArMTg2My41NEwxMTkzLjU0KzE4NjQuNTRDMTUzOS43NCsxODY2LjQ0KzE4NjQuNTQrMTY5My4zNCsxODY0LjU0KzEyOTYuNjRMMTg2NC41NCs3MTYuOTQyQzE4NjYuNDQrMzEyLjQ0MisxNTQxLjY0KzEzNS40NDIrMTE5NS40NCsxMzUuNDQyWlwiLCBmaWxsOiBcIiMxNzE3MTdcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MilcIn0sIGQ6IFwiTTE2OTUuNTQrNjMxLjQ0MkMxNjg1Ljg0KzI3OC4wNDIrMTQwOS4zNCsxMzUuNDQyKzEwNTIuOTQrMTM1LjQ0MkwzNjEuNzQrMTM2LjQ0Mkw4MDMuNzQrNDkwLjQ0MkwxMDYwLjc0KzQ5MC40NDJDMTMzNS4yNCs0OTAuNDQyKzEzMzUuMjQrODM1LjM0MisxMDYwLjc0KzgzNS4zNDJMMTA2MC43NCsxMTY0Ljg0QzExNTAuMjIrMTE2NC44NCsxMjEwLjUzKzEyMDEuNDgrMTI0MS42OCsxMjUwLjg3QzEzMDYuMDcrMTM1MysxMjQ1Ljc2KzE1MDkuNjQrMTA2MC43NCsxNTA5LjY0TDM2MS43NCsxODYzLjU0TDEwNTIuOTQrMTg2NC41NEMxNDA5LjI0KzE4NjQuNTQrMTY4NS43NCsxNzIxLjk0KzE2OTUuNTQrMTM2OC41NEMxNjk1LjU0KzEyMDUuOTQrMTY1MS4wNCsxMDg0LjQ0KzE1NzIuNjQrOTk5Ljk0MkMxNjUxLjA0KzkxNS41NDIrMTY5NS41NCs3OTQuMDQyKzE2OTUuNTQrNjMxLjQ0MlpcIiwgZmlsbDogXCIjM0U4MkU1XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzEpXCJ9LCBkOiBcIk0xNDY5LjI1KzYzMS40NDJDMTQ1OS41NSsyNzguMDQyKzExODMuMDUrMTM1LjQ0Mis4MjYuNjUrMTM1LjQ0MkwxMzUuNDUrMTM1LjQ0MkwxMzUuNDUrMTAwNEMxMzUuNDUrMTAwNCsxMzUuNDI3KzEyNTUuMjErMzU1LjYyNisxMjU1LjIxQzU3NS44MjUrMTI1NS4yMSs1NzUuODQ4KzEwMDQrNTc1Ljg0OCsxMDA0TDU3Ny40NSs0OTAuNDQyTDgzNC40NSs0OTAuNDQyQzExMDguOTUrNDkwLjQ0MisxMTA4Ljk1KzgzNS4zNDIrODM0LjQ1KzgzNS4zNDJMNjY0LjY1KzgzNS4zNDJMNjY0LjY1KzExNjQuODRMODM0LjQ1KzExNjQuODRDOTIzLjkzMisxMTY0Ljg0Kzk4NC4yNDQrMTIwMS40OCsxMDE1LjM5KzEyNTAuODdDMTA3OS43OCsxMzUzKzEwMTkuNDcrMTUwOS42NCs4MzQuNDUrMTUwOS42NEwxMzUuNDUrMTUwOS42NEwxMzUuNDUrMTg2NC41NEw4MjYuNjUrMTg2NC41NEMxMTgyLjk1KzE4NjQuNTQrMTQ1OS40NSsxNzIxLjk0KzE0NjkuMjUrMTM2OC41NEMxNDY5LjI1KzEyMDUuOTQrMTQyNC43NSsxMDg0LjQ0KzEzNDYuMzUrOTk5Ljk0MkMxNDI0Ljc1KzkxNS41NDIrMTQ2OS4yNSs3OTQuMDQyKzE0NjkuMjUrNjMxLjQ0MlpcIiwgZmlsbDogXCIjRkZGRkZGXCIsIG9wYWNpdHk6IFwiMVwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NoZWNrYm94IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImxpXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94IFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3gsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWlubmVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94SW5uZXIpWzBdLmNoZWNrYm94SW5uZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3hFbGVtZW50LCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJjaGVja2JveFwifSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgIXRoaXMuc3RhdGUuY2hlY2tlZCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBBcnJvdyBmcm9tIFwiLi4vaWNvbnMvZG93bmFycm93XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7b3BlbjogZmFsc2UsIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMub3B0aW9uc1swXS52YWx1ZX07XHJcbiAgICAgICAgdGhpcy5kcm9wZG93biA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVudSA9IHRoaXMuc2hvd01lbnUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhpZGVNZW51ID0gdGhpcy5oaWRlTWVudS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNZW51KGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiB0cnVlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogZmFsc2V9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3RlZCgpIHtyZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQobyA9PiBvLnZhbHVlID09IHRoaXMuc3RhdGUudmFsdWUpO31cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LW9wdGlvbnNcIj5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAob3B0ID0+IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qtb3B0aW9uJHtzZWxlY3RlZC52YWx1ZSA9PSBvcHQudmFsdWUgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gfSBvbkNsaWNrPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcywgb3B0LnZhbHVlKX0+e29wdC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5wcm9wcy5zdHlsZSA9PSBcInRyYW5zcGFyZW50XCIgPyBcIiBiZC1zZWxlY3QtdHJhbnNwYXJlbnRcIiA6IFwiXCI7XHJcbiAgICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5zdGF0ZS5vcGVuID8gXCIgbWVudS1vcGVuXCIgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuLy8gcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBcIj5cclxuLy8gPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e3RoaXMucHJvcHMubGFiZWx9PC9sYWJlbD5cclxuLy8gPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbi8vICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1jb250cm9sc1wiPlxyXG4vLyAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbi8vICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbi8vICAgICA8L2Rpdj5cclxuLy8gPC9kaXY+XHJcbi8vIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4vLyA8L2Rpdj47IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIi4uL2ljb25zL3NlYXJjaFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBmb2N1c2VkOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBbXCJiZC1zZWFyY2gtd3JhcHBlclwiXVxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZm9jdXNlZCljbGFzc05hbWUucHVzaChcImZvY3VzZWRcIilcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZS5qb2luKFwiIFwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZDogdHJ1ZX0pXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gb25CbHVyPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2ZvY3VzZWQ6IGZhbHNlfSlcclxuICAgICAgICAgICAgICAgICAgICB9fS8+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9O1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zd2l0Y2ggPSA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN3aXRjaFxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Db250ZW50Q29sdW1uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGRpc3BsYXlOYW1lKCkge3JldHVybiBcIkNvbnRlbnRDb2x1bW5cIjt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vbGV0IGNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMucHJvcHMudGl0bGUgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHRoaXMucHJvcHMudGl0bGUpIDogbnVsbFxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbiArIFwiIFwiK2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwiLCBzdHlsZToge3BhZGRpbmc6IFwiNjBweCA0MHB4IDBweFwifX0sXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiXHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5pbXBvcnQgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGZyb20gXCIuL2Nzc0VkaXRvckRldGFjaGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5wcm9wcy5saW5lcyA9IDA7XHJcbiAgICAgICAgc2VsZi5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICBzZWxmLmF0dGFjaCA9IHNlbGYuYXR0YWNoLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2hlZEVkaXRvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQ3NzRWRpdG9yRGV0YWNoZWQsIHthdHRhY2g6IHNlbGYuYXR0YWNofSk7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuZGV0YWNoID0gc2VsZi5kZXRhY2guYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRoaXMucHJvcHMuZGV0YWNoZWQgfHwgQkRWMi5lZGl0b3JEZXRhY2hlZFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9kaXNjb3JkXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChwcmV2U3RhdGUuZGV0YWNoZWQgJiYgIXNlbGYuc3RhdGUuZGV0YWNoZWQpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYuZGV0YWNoZWRSb290KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZU1pcnJvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gQnVmZmVyLmZyb20oX2Njc3MsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGFyZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBCdWZmZXIuZnJvbSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCksIFwidXRmLThcIikudG9TdHJpbmcoXCJiYXNlNjRcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIGlmICghZHJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK1V0aWxzLnJlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwKSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIlxyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9kaXNjb3JkXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gQnVmZmVyLmZyb20oX2Njc3MsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHApKTtcclxuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmQtZGV0YWNoZWQtY3NzLWVkaXRvclwiLCBpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWVkaXRvclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtaW5uZXJwYW5lXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHNlbGYub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJhdHRhY2hcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBhdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYXR0YWNoXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2VkaXRvci1kZXRhY2hlZFwiKSkgc2VsZi5wcm9wcy5hdHRhY2goKTtcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLnJvb3QpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yb290LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNzcygpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgQnVmZmVyLmZyb20odGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpLCBcInV0Zi04XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVycm9yQm91bmRhcnkgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtoYXNFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJyZWFjdC1lcnJvclwifSwgXCJDb21wb25lbnQgRXJyb3JcIik7ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxldGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjEyIDkuMjlMMTIgMTMuMTdsMy44OC0zLjg4Yy4zOS0uMzkgMS4wMi0uMzkgMS40MSAwIC4zOS4zOS4zOSAxLjAyIDAgMS40MWwtNC41OSA0LjU5Yy0uMzkuMzktMS4wMi4zOS0xLjQxIDBMNi43IDEwLjdjLS4zOS0uMzktLjM5LTEuMDIgMC0xLjQxLjM5LS4zOCAxLjAzLS4zOSAxLjQyIDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3pcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsInsvKiA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIndoaXRlXCIgd2lkdGg9XCIxOHB4XCIgaGVpZ2h0PVwiMThweFwiPlxyXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuPC9zdmc+ICovfVxyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxOHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmdpblRvcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlKW1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXVxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpblRvcDYwfT48L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4uL21vZHVsZXMvQ3VzdG9tUmljaFByZXNlbmNlXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHJlc2VuY2VTZXR0aW5ncyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxyXG4gICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByZXZpZXcgPSBudWxsXHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzID0gbmV3IFNldCgpXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlV2hlbkZldGNoZWQoY29tcCl7XHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuYWRkKGNvbXApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SW5wdXRUZXh0fSBzZXR0aW5nIFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRTZXR0aW5nID0gUlBDUHJvcHMuZmluZChlID0+IGUuaWQgPT09IHNldHRpbmcucHJvcHMuaWQpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCB0aGlzLnN0YXRlLmRhdGEsIHtcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0U2V0dGluZy5pZF06ICEhdmFsdWUgPyB2YWx1ZSA6IG51bGxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5zdGF0ZS5hc3NldHNcclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHNldHRpbmcucHJvcHMuaWQgPT09IFwiYXBwbGljYXRpb25faWRcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3LmZvcmNlVXBkYXRlKClcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKVxyXG4gICAgfVxyXG5cclxuICAgIGZldGNoQXNzZXRzKCl7XHJcbiAgICAgICAgaWYodGhpcy5pc2ZldGNoaW5nID09PSB0cnVlKXtcclxuICAgICAgICAgICAgbGV0IGFwcCA9IHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCAhPT0gYXBwKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IHRydWVcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZmV0Y2hBc3NldHModGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKVxyXG4gICAgICAgIC50aGVuKGFzc2V0cyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBPYmplY3Qua2V5cyhhc3NldHMpLm1hcChrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzZXQgPSBhc3NldHNba11cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYXNzZXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzc2V0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByZXZpZXcoZGF0YSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyB8fCAoVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc0dyb3VwIHRpdGxlPVwiUmljaFByZXNlbmNlIFNldHRpbmdzXCIgc2V0dGluZ3M9e3RoaXMucHJvcHMuc2V0dGluZ3N9IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfS8+LFxyXG4gICAgICAgICAgICA8TWFyZ2luVG9wIC8+LFxyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlJpY2hQcmVzZW5jZVwiLz4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICB7LyoqIG9wdGlvbnMgKi99XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29tcG9uZW50c31cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPE1hcmdpblRvcCAvPlxyXG4gICAgICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJQcmV2aWV3XCIvPlxyXG4gICAgICAgICAgICAgICAgey8qKiBwcmV2aWV3ICovfVxyXG4gICAgICAgICAgICAgICAgPFJwY1ByZXZpZXcgc2V0dGluZ3M9e3RoaXN9Lz5cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj4sXHJcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17d2luZG93Lm9oZ29kb2hmdWNrfT5cclxuICAgICAgICAgICAgICAgIE9oIGdvZCBPaCBmdWNrXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPixcclxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1Ma1lhN3Jwc19nNFwiKVxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIFNlZSA/IEkgcHVsbGVkIGEgbGl0bGUgc25lYWt5IG9uIHlhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9uc0NvbXBvbmVudHMoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgfHwgKHRoaXMuX29wdGlvbnNDb21wb25lbnRzID0gUlBDUHJvcHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBpZihlLnR5cGUgPT09IFwidGV4dFwiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRUZXh0IHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfS8+XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBbPElucHV0TnVtYmVyIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfS8+XS8qXHJcbiAgICAgICAgICAgICAgICBpZihlLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkudW5zaGlmdCg8RGlzY29yZEJ1dHRvbiB0aXRsZT1cIkNvcHkgQ3VycmVudCBUaW1lc3RhbXBcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKStcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH19IC8+KVxyXG4gICAgICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlcclxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcImNob2ljZVwiKXtcclxuICAgICAgICAgICAgICAgIGlmKFtcImFzc2V0cy5zbWFsbFwiLCBcImFzc2V0cy5sYXJnZVwiXS5pbmNsdWRlcyhlLmlkKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dENob2ljZSBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0gY2hvaWNlcz17W3t2YWx1ZTogXCJub25lXCIsIGxhYmVsOiBcIk5vIGFzc2V0c1wifV0uY29uY2F0KHRoaXMuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSl9Lz5cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlVua25vd24gY2hvaWNlLlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgIH1cclxufVxyXG5jb25zdCBSUENQcm9wcyA9IFtcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJBcHBsaWNhdGlvbiBJRFwiLFxyXG4gICAgICAgIGlkOiBcImFwcGxpY2F0aW9uX2lkXCIsXHJcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJOYW1lXCIsXHJcbiAgICAgICAgaWQ6IFwibmFtZVwiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkRldGFpbHNcIixcclxuICAgICAgICBpZDogXCJkZXRhaWxzXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiQnJvd3NpbmcgRGlzY29yZFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlN0YXRlXCIsXHJcbiAgICAgICAgaWQ6IFwic3RhdGVcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJMaWdodGNvcmQgQ2xpZW50XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiVGltZXN0YW1wIFN0YXJ0XCIsXHJcbiAgICAgICAgaWQ6IFwidGltZXN0YW1wcy5zdGFydFwiLFxyXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgZ2V0IHBsYWNlaG9sZGVyKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJMYXJnZUFzc2V0XCIsXHJcbiAgICAgICAgaWQ6IFwiYXNzZXRzLmxhcmdlXCIsXHJcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJTbWFsbEFzc2V0XCIsXHJcbiAgICAgICAgaWQ6IFwiYXNzZXRzLnNtYWxsXCIsXHJcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxyXG4gICAgfSxcclxuXVxyXG5cclxubGV0IGlucHV0VGV4dE1vZHVsZXNcclxuY2xhc3MgSW5wdXRUZXh0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIGlmKGlucHV0VGV4dE1vZHVsZXMgJiYgaW5wdXRUZXh0TW9kdWxlc1swXSlyZXR1cm4gaW5wdXRUZXh0TW9kdWxlc1xyXG4gICAgICAgIHJldHVybiBpbnB1dFRleHRNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdLFxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQgcGxhY2Vob2xkZXI9e3NldHRpbmcucGxhY2Vob2xkZXJ9IG5hbWU9e3NldHRpbmcuaWR9IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9uQ2hhbmdlPXsodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXHJcbiAgICAgICAgICAgIGlucHV0TW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlMixcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBJbnB1dE51bWJlck1vZHVsZXNcclxuY2xhc3MgSW5wdXROdW1iZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIElucHV0TnVtYmVyTW9kdWxlcyB8fCAoSW5wdXROdW1iZXJNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclRyYW5zcGFyZW50KVswXSxcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gdHlwZT1cIm51bWJlclwiIG9uQ2hhbmdlPXsodmFsdWUsIG5hbWUsIGlucHV0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXGRdKy9nLCBcIlwiKVxyXG4gICAgICAgICAgICBpZih2YWx1ZSA9PSB0aGlzLnN0YXRlLmRhdGEpe1xyXG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0VmFsdWUodmFsdWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxyXG4gICAgICAgICAgICAgICAge3NldHRpbmcuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiID8gXHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKStcIlwiKVxyXG4gICAgICAgICAgICAgICAgfX0gY29sb3I9XCJicmFuZFwiPkNvcHkgY3VycmVudCB0aW1lc3RhbXA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgSW5wdXRDaG9pY2VNb2R1bGVzXHJcbmNsYXNzIElucHV0Q2hvaWNlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA/IFwiYXNzZXQtXCIrdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0gOiBcIm5vbmVcIlxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIudXBkYXRlV2hlbkZldGNoZWQodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShkYXRhKXtcclxuICAgICAgICBsZXQgdmFsdWUgPSBkYXRhLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSA9PT0gXCJub25lXCIgPyBudWxsIDogdmFsdWUucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcclxuICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSA9PT0gXCJub25lXCIgPyBudWxsIDogdGhpcy5zdGF0ZS5kYXRhLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YTogdmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBJbnB1dENob2ljZU1vZHVsZXMgfHwgKElucHV0Q2hvaWNlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgb3B0aW9ucy51bnNoaWZ0KHtcclxuICAgICAgICAgICAgdmFsdWU6IFwibm9uZVwiLFxyXG4gICAgICAgICAgICBsYWJlbDogXCJObyBhc3NldHNcIlxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb3B0aW9ucz17b3B0aW9uc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX0gLz5cclxuICAgICAgICAgICAgICAgIHsvKjxTZWxlY3QgdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX0gb3B0aW9ucz17b3B0aW9uc30vPiovfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IERpdmlkZXJNb2R1bGVzID0gW11cclxuY2xhc3MgRGl2aWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gRGl2aWRlck1vZHVsZXMmJkRpdmlkZXJNb2R1bGVzWzBdID8gRGl2aWRlck1vZHVsZXMgOiAoRGl2aWRlck1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlckRlZmF1bHQpWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBkaXZpZGVyLFxyXG4gICAgICAgICAgICBkaXZpZGVyRGVmYXVsdFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2Ake2RpdmlkZXIuZGl2aWRlcn0gJHtkaXZpZGVyRGVmYXVsdC5kaXZpZGVyRGVmYXVsdH1gfT48L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgRGlzY29yZEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF1cclxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSBjb2xvcj1cImJyYW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFJwY1ByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMgPSB7fSl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBcInByb2ZpbGVcIlxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYnMgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLnByb3BzLnNldHRpbmdzLnByZXZpZXcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGFiKHRhYil7XHJcbiAgICAgICAgbGV0IGFuY2llbnRUYWIgPSB0aGlzLnN0YXRlLmFjdGl2ZVxyXG4gICAgICAgIGlmKGFuY2llbnRUYWIgPT09IHRhYi5wcm9wcy5pZClyZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50YWJzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGUuc2V0QWN0aXZlKGZhbHNlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGFiLnNldEFjdGl2ZSh0cnVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6IHRhYi5wcm9wcy5pZFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYldyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJuYXZcIiBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIkZ1bGwgUHJvZmlsZVwiIGlkPVwicHJvZmlsZVwiLz5cclxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJVc2VyIFBvcG91dFwiIGlkPVwicG9wb3V0XCIvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPFByZXNlbmNlRXJyb3JDYXRjaGVyIHByZXZpZXc9e3RoaXMucHJldmlld30gc3RhdGU9e3RoaXMuc3RhdGUucnBjfSBwcm9wcz17e3ByZXZpZXc6IHRoaXN9fSBrZXk9e3RoaXMuc3RhdGUuYWN0aXZlfSAvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH0gICBcclxuXHJcbiAgICBpc0FjdGl2ZSh0YWIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gdGFiXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByZXZpZXcoKXtcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gXCJwcm9maWxlXCIpcmV0dXJuIFByb2ZpbGVcclxuICAgICAgICByZXR1cm4gUG9wb3V0XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRhYiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogcHJvcHMucHJldmlldy5pc0FjdGl2ZShwcm9wcy5pZClcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvcHMucHJldmlldy50YWJzLnB1c2godGhpcylcclxuICAgIH1cclxuXHJcbiAgICBzZXRBY3RpdmUoaXNBY3RpdmUpe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6ICEhaXNBY3RpdmVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWBcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1BY3RpdmVgXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1JbmFjdGl2ZWBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnByZXZpZXcuY2hhbmdlVGFiKHRoaXMpXHJcbiAgICAgICAgfX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IGVtcHR5Q2xhc3Nlc1xyXG5jbGFzcyBQcmVzZW5jZUVycm9yQ2F0Y2hlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb21wb25lbnREaWRDYXRjaChlcnIsIGVyckluZm8pe1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnJJbmZvKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBlcnJvcjogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighdGhpcy5zdGF0ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5lcnJvcil7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSBuZXcgdGhpcy5wcm9wcy5wcmV2aWV3KHRoaXMucHJvcHMucHJvcHMpXHJcbiAgICAgICAgICAgICAgICBwcmV2aWV3LnNldFN0YXRlKHRoaXMucHJvcHMuc3RhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlldy5yZW5kZXIoKVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5lcnJvciA9IHRydWVcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcigpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZW1wdHlDbGFzc2VzID0gZW1wdHlDbGFzc2VzIHx8IEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZW1wdHlTdGF0ZUltYWdlICYmIGUuZW1wdHlTdGF0ZSlcclxuICAgICAgICAgICAgaWYoIWVtcHR5Q2xhc3Nlcyl7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLiBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLlwiKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBcIjIwcHhcIlxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcclxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT17YGxjLXRhYi1ib3gtc2hhZG93ICR7ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSW1hZ2V9IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCIyMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9fT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSGVhZGVyfT5BbiBlcnJvciBvY2N1cmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZVN1YnRleHR9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLiBKb2luIG91ciDCrVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e2Ake0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QkRWMi5hbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PXswfSBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLmpvaW5MQygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBzZXJ2ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDCrSBmb3IgaGVscC5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcG9wb3V0TW9kdWxlc1xyXG5sZXQgVXNlclBvcG91dENvbXBvbmVudFxyXG5sZXQgUG9wb3V0UHJvcHNcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZXMgfHwgKHBvcG91dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclBvcG91dFwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudCgpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlbmRlcjEgPSBVc2VyUG9wb3V0LmRlZmF1bHQoe1xyXG4gICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyLmlkLCBcclxuICAgICAgICAgICAgICAgIGd1aWxkSWQ6IG51bGwsIFxyXG4gICAgICAgICAgICAgICAgY2hhbm5lbElkOiBudWxsLCBcclxuICAgICAgICAgICAgICAgIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgVXNlclBvcG91dENvbXBvbmVudCA9IHJlbmRlcjEudHlwZVxyXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcclxuICAgICAgICB9LCBudWxsKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXJldHVybiB0aGlzLmdldENvbXBvbmVudCgpXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgX1VzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHksXHJcbiAgICAgICAgICAgIHVzZXJJZDogdXNlci5pZFxyXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcclxuXHJcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBzdG9wIHByb3BhZ2F0aW9uIHNoaXQuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gPGRpdiB7Li4ud2luZG93LkxpZ2h0Y29yZC5BcGkuXy5leGNsdWRlUHJvcGVydGllcyhwb3BvdXQucHJvcHMsIFtcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCJdKX0gLz5cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICB7Y29udGFpbmVyfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcHJvZmlsZU1vZHVsZXNcclxubGV0IFVzZXJQcm9maWxlQ29tcG9uZW50XHJcbmxldCBQcm9maWxlUHJvcHNcclxubGV0IGNvbm5lY3RlZFByb2ZpbGVTdG9yZVxyXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHByb2ZpbGVNb2R1bGVzIHx8IChwcm9maWxlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJVc2VyUHJvZmlsZVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlLFxyXG4gICAgICAgICAgICB1c2VyTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBpZighVXNlclByb2ZpbGVDb21wb25lbnQpe1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQcm9maWxlLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlclxyXG4gICAgICAgICAgICB9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBjb25uZWN0ZWRQcm9maWxlU3RvcmUgPSByZW5kZXIxLnR5cGVcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IG5ldyByZW5kZXIxLnR5cGUocmVuZGVyMS5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IHJlbmRlcjIudHlwZS5yZW5kZXIocmVuZGVyMi5wcm9wcywgbnVsbClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyNCA9IG5ldyByZW5kZXIzLnR5cGUocmVuZGVyMy5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgVXNlclByb2ZpbGVDb21wb25lbnQgPSByZW5kZXI0LnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCB0aGUgVXNlclByb2ZpbGVDb21wb25lbnQgY29tcG9uZW50LmApXHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgICAgICB9KS5jYWxsKHtcclxuICAgICAgICAgICAgZ2FtZTogZGF0YVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIFByb2ZpbGVQcm9wcyA9IG5ldyBjb25uZWN0ZWRQcm9maWxlU3RvcmUoe1xyXG4gICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge31cclxuICAgICAgICB9KS5yZW5kZXIoKS5wcm9wc1xyXG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBuZXcgVXNlclByb2ZpbGVDb21wb25lbnQoT2JqZWN0LmFzc2lnbih7fSwgUHJvZmlsZVByb3BzLCB7XHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxyXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcclxuXHJcbiAgICAgICAgcHJvZmlsZS5wcm9wcy5zdHlsZSA9IHtcclxuICAgICAgICAgICAgd2lkdGg6IFwiYXV0b1wiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAge3Byb2ZpbGV9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi8uLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfTGF5ZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmtleXVwTGlzdGVuZXIgPSB0aGlzLmtleXVwTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBrZXl1cExpc3RlbmVyKGUpIHtcclxuICAgICAgICBpZiAoZS53aGljaCA9PT0gMjcpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMucmVmcy5yb290LnBhcmVudE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogcHJvZ3Jlc3N9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5rZXl1cExpc3RlbmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGhpc05vZGUgPSBET00ucXVlcnkoYCMke3RoaXMucHJvcHMuaWR9YCk7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHsxLjEgLSAwLjEgKiAoMSAtIHByb2dyZXNzKX0pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBsYXllciA9IERPTS5xdWVyeShcIi5wdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBsYXllci5jbGFzc0xpc3QucmVtb3ZlKFwicHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHswLjA3ICogcHJvZ3Jlc3MgKyAwLjkzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCJbY2xhc3MqPVxcXCJsYXllci1cXFwiXVwiKTtcclxuICAgICAgICBsYXllci5jbGFzc0xpc3QuYWRkKFwicHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHswLjA3ICogKDEgLSBwcm9ncmVzcykgKyAwLjkzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSAxIC0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJsYXllciBiZC1sYXllciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIsIGlkOiB0aGlzLnByb3BzLmlkLCByZWY6IFwicm9vdFwiLCBzdHlsZToge29wYWNpdHk6IDAsIHRyYW5zZm9ybTogXCJzY2FsZSgxLjEpIHRyYW5zbGF0ZVooMHB4KVwifX0sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdG9vbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFRhYkJhclNlcGFyYXRvciBmcm9tIFwiLi4vdGFiQmFyU2VwYXJhdG9yXCI7XHJcbmltcG9ydCBUYWJCYXJIZWFkZXIgZnJvbSBcIi4uL3RhYkJhckhlYWRlclwiO1xyXG5pbXBvcnQgVGFiQmFySXRlbSBmcm9tIFwiLi4vdGFiQmFySXRlbVwiO1xyXG5cclxuaW1wb3J0IFNlcnZlckNhcmQgZnJvbSBcIi4vc2VydmVyQ2FyZFwiO1xyXG5pbXBvcnQgU2lkZWJhclZpZXcgZnJvbSBcIi4vc2lkZWJhclZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QdWJsaWNTZXJ2ZXJzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoS2V5RG93biA9IHRoaXMuc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uID0gdGhpcy5jaGVja0Nvbm5lY3Rpb24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmpvaW4gPSB0aGlzLmpvaW4uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3QgPSB0aGlzLmNvbm5lY3QuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5HdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEd1aWxkc1wiXSk7XHJcbiAgICAgICAgdGhpcy5BdmF0YXJEZWZhdWx0cyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCJdKTtcclxuICAgICAgICB0aGlzLkludml0ZUFjdGlvbnMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTtcclxuICAgICAgICB0aGlzLlNvcnRlZEd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0U29ydGVkR3VpbGRzXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VydmVyczogW10sXHJcbiAgICAgICAgICAgIG5leHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiAwLFxyXG4gICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wcm9wcy5yb290SWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2gocXVlcnksIGNsZWFyKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgZmV0Y2goYCR7c2VsZi5lbmRQb2ludH0ke3F1ZXJ5fSR7cXVlcnkgPyBcIiZzY2hlbWE9bmV3XCIgOiBcIj9zY2hlbWE9bmV3XCJ9YCwge1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiZ2V0XCJcclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBhd2FpdCByZXMudGV4dCgpXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBkYXRhLnJlc3VsdHMucmVkdWNlKChhcnIsIHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2VydmVyLmpvaW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2VydmVyKTtcclxuICAgICAgICAgICAgICAgIC8vIGFyci5wdXNoKDxTZXJ2ZXJDYXJkIHNlcnZlcj17c2VydmVyfSBqb2luPXtzZWxmLmpvaW59Lz4pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICAgICAgfSwgW10pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgc2VydmVycyA9IHNlbGYuc3RhdGUuc2VydmVycy5jb25jYXQoc2VydmVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvL3NlcnZlcnMudW5zaGlmdChzZWxmLmJkU2VydmVyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVuZCA9IGRhdGEuc2l6ZSArIGRhdGEuZnJvbTtcclxuICAgICAgICAgICAgZGF0YS5uZXh0ID0gYD9mcm9tPSR7ZW5kfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIGRhdGEubmV4dCArPSBgJnRlcm09JHtzZWxmLnN0YXRlLnRlcm19YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSkgZGF0YS5uZXh0ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChlbmQgPj0gZGF0YS50b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS50b3RhbDtcclxuICAgICAgICAgICAgICAgIGRhdGEubmV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGBTaG93aW5nIDEtJHtlbmR9IG9mICR7ZGF0YS50b3RhbH0gcmVzdWx0cyBpbiAke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgdGl0bGUgKz0gYCBmb3IgJHtzZWxmLnN0YXRlLnRlcm19YDtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBzZXJ2ZXJzLFxyXG4gICAgICAgICAgICAgICAgbmV4dDogZGF0YS5uZXh0XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWZzLnNidi5yZWZzLmNvbnRlbnRTY3JvbGxlci5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJGYWlsZWQgdG8gbG9hZCBzZXJ2ZXJzLiBDaGVjayBjb25zb2xlIGZvciBkZXRhaWxzXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBqb2luKHNlcnZlckNhcmQpIHtcclxuICAgICAgICBpZiAoc2VydmVyQ2FyZC5wcm9wcy5waW5uZWQpIHJldHVybiB0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlKHNlcnZlckNhcmQucHJvcHMuaW52aXRlX2NvZGUpO1xyXG5cclxuICAgICAgICBhd2FpdCBmZXRjaChgJHt0aGlzLmpvaW5FbmRQb2ludH0vJHtzZXJ2ZXJDYXJkLnByb3BzLnNlcnZlci5pZGVudGlmaWVyfWAse1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZXJ2ZXJDYXJkLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25uZWN0KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxmLndpbmRvd09wdGlvbnM7XHJcbiAgICAgICAgb3B0aW9ucy54ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWCArIHdpbmRvdy5pbm5lcldpZHRoIC8gMiAtIG9wdGlvbnMud2lkdGggLyAyKTtcclxuICAgICAgICBvcHRpb25zLnkgPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5ZICsgd2luZG93LmlubmVySGVpZ2h0IC8gMiAtIG9wdGlvbnMuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdyA9IG5ldyAod2luZG93LnJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuQnJvd3NlcldpbmRvdykob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3Q/c2NvcGVzPWd1aWxkcy5qb2luJnByZXZpb3VzVXJsPWh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy53ZWJDb250ZW50cy5vbihcImRpZC1uYXZpZ2F0ZVwiLCAoZXZlbnQsIHVybCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXJsICE9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCIpIHJldHVybjtcclxuICAgICAgICAgICAgc2VsZi5qb2luV2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHNlbGYuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93LmxvYWRVUkwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgd2luZG93T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB3aWR0aDogNTAwLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDU1MCxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiMyODJiMzBcIixcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtaW5pbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsd2F5c09uVG9wOiB0cnVlLFxyXG4gICAgICAgICAgICBmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHdlYlByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBiZFNlcnZlcigpIHtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQmV0dGVyRGlzY29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiNzUwMCtcIixcclxuICAgICAgICAgICAgbWVtYmVyczogXCIyMDAwMCtcIixcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBCZXR0ZXJEaXNjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2ljb25zLzg2MDA0NzQ0OTY2OTE0MDQ4LzI5MmU3ZjZiZmZmMmI3MWRmZDEzZTUwOGE4NTlhZWRkLndlYnBcIixcclxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcclxuICAgICAgICAgICAgaW52aXRlX2NvZGU6IFwiMFRtZm81WmJPUkNScWJBZFwiLFxyXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHNlcnZlcjIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCIzMCtcIixcclxuICAgICAgICAgICAgbWVtYmVyczogXCI1MCtcIixcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBMaWdodGNvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9hdmF0YXJzMy5naXRodWJ1c2VyY29udGVudC5jb20vdS82NTY5MDA1OD9zPTIwMCZ2PTRcIixcclxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcclxuICAgICAgICAgICAgaW52aXRlX2NvZGU6IFwiN2VGZmYyQVwiLFxyXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHRoaXMuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlcjIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9zZWFyY2guZGlzY29yZHNlcnZlcnMuY29tXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGpvaW5FbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL2ouZGlzY29yZHNlcnZlcnMuY29tXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3RFbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL2pvaW4uZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3RcIjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0Nvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvYCx7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAwLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IGRhdGFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMSxcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyVmlldywge3JlZjogXCJzYnZcIn0sIHRoaXMuY29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNpZGViYXI6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5zaWRlYmFyXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5jb250ZW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvb2xzOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJwdFwiLCByZWY6IFwidG9vbHNcIiwgb25DbGljazogdGhpcy5jbG9zZX0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWRlYmFyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2lkZWJhclwiLCBrZXk6IFwicHNcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXIgU0lERVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIiwgc3R5bGU6IHtmb250U2l6ZTogXCIxNnB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIlB1YmxpYyBTZXJ2ZXJzXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJIZWFkZXIsIHt0ZXh0OiBcIkNhdGVnb3JpZXNcIn0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeUJ1dHRvbnMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhckl0ZW0sIHtpZDogaW5kZXgsIG9uQ2xpY2s6IHRoaXMuY2hhbmdlQ2F0ZWdvcnksIGtleTogaW5kZXgsIHRleHQ6IHZhbHVlLCBzZWxlY3RlZDogdGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ID09PSBpbmRleH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0taXRlbVwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGV4dC1pbnB1dCBmbGV4LXZlcnRpY2FsXCIsIHN0eWxlOiB7d2lkdGg6IFwiMTcycHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtyZWY6IFwic2VhcmNoaW5wdXRcIiwgb25LZXlEb3duOiB0aGlzLnNlYXJjaEtleURvd24sIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJ0ZXh0XCIsIGNsYXNzTmFtZTogXCJpbnB1dCBkZWZhdWx0XCIsIHBsYWNlaG9sZGVyOiBcIlNlYXJjaC4uLlwiLCBtYXhMZW5ndGg6IFwiNTBcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaEtleURvd24oZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcgfHwgZS53aGljaCAhPT0gMTMpIHJldHVybjtcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBxdWVyeSA9IGA/dGVybT0ke2UudGFyZ2V0LnZhbHVlfWA7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSAhPT0gMCkge1xyXG4gICAgICAgICAgICBxdWVyeSArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnNlYXJjaChxdWVyeSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhdGVnb3J5QnV0dG9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1wiQWxsXCIsIFwiRlBTIEdhbWVzXCIsIFwiTU1PIEdhbWVzXCIsIFwiU3RyYXRlZ3kgR2FtZXNcIiwgXCJNT0JBIEdhbWVzXCIsIFwiUlBHIEdhbWVzXCIsIFwiVGFibGV0b3AgR2FtZXNcIiwgXCJTYW5kYm94IEdhbWVzXCIsIFwiU2ltdWxhdGlvbiBHYW1lc1wiLCBcIk11c2ljXCIsIFwiQ29tbXVuaXR5XCIsIFwiTGFuZ3VhZ2VcIiwgXCJQcm9ncmFtbWluZ1wiLCBcIk90aGVyXCJdO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUNhdGVnb3J5KGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIHNlbGYucmVmcy5zZWFyY2hpbnB1dC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IGlkLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaWQgPT09IDApIHtcclxuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2goYD9jYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW2lkXX1gLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGVudCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmNvbm5lY3Rpb24uc3RhdGUgPT09IDEpIHJldHVybiBzZWxmLm5vdENvbm5lY3RlZDtcclxuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtyZWY6IFwiY29udGVudFwiLCBrZXk6IFwicGNcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KSxcclxuICAgICAgICAgICAgc2VsZi5iZFNlcnZlcixcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLm1hcCgoc2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtrZXk6IHNlcnZlci5pZGVudGlmaWVyLCBzZXJ2ZXI6IHNlcnZlciwgam9pbjogc2VsZi5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5uZXh0ICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47c2VsZi5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0pOyBzZWxmLnNlYXJjaChzZWxmLnN0YXRlLm5leHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsIHN0eWxlOiB7d2lkdGg6IFwiMTAwJVwiLCBtYXJnaW5Ub3A6IFwiMTBweFwiLCBtYXJnaW5Cb3R0b206IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLmxvYWRpbmcgPyBcIkxvYWRpbmdcIiA6IFwiTG9hZCBNb3JlXCJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLmxlbmd0aCA+IDAgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSlcclxuICAgICAgICApXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm90Q29ubmVjdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7IHRleHQ6IHNlbGYuc3RhdGUudGl0bGUgfSk7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7a2V5OiBcIm5jY1wiLCByZWY6IFwiY29udGVudFwiLCBjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgICAgIFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHNlbGYuY29ubmVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCIxOHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFwiMTRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLCBzZWxmLmJkU2VydmVyXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZvb3RlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImFcIixcclxuICAgICAgICAgICAgICAgIHtocmVmOiBcImh0dHBzOi8vZGlzY29yZHNlcnZlcnMuY29tXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICBcIkRpc2NvcmRzZXJ2ZXJzLmNvbVwiXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHtjb25uZWN0aW9ufSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uc3RhdGUgIT09IDIpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAge3N0eWxlOiB7Y29sb3I6IFwiI2I5YmJiZVwiLCBmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBcIkNvbm5lY3RlZCBhczogXCIsXHJcbiAgICAgICAgICAgICAgICBgJHtjb25uZWN0aW9uLnVzZXIudXNlcm5hbWV9IyR7Y29ubmVjdGlvbi51c2VyLmRpc2NyaW1pbmF0b3J9YFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge3N0eWxlOiB7cGFkZGluZzogXCI1cHggMTBweCAwIDEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7d2lkdGg6IFwiMTAwJVwiLCBtaW5IZWlnaHQ6IFwiMjBweFwifSwgdHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCIsIG9uQ2xpY2s6IHNlbGYuY29ubmVjdH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUmVjb25uZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG59XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlcnZlckNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCkgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgaW1hZ2VFcnJvcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGpvaW5lZDogdGhpcy5wcm9wcy5ndWlsZExpc3QuaW5jbHVkZXModGhpcy5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2VydmVyfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgbGV0IGNhcmRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jYXJkICYmIGUuY2FyZFByaW1hcnkpWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4Q2hpbGQgJiYgZS5faG9yaXpvbnRhbFJldmVyc2UpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub1dyYXAgJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLCAvLyBjYXJkUHJpbWFyeS0xSHYtdG9cclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYCR7Y2FyZE1vZHVsZS5jYXJkfSAke2NhcmRNb2R1bGUuY2FyZFByaW1hcnl9ICR7QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0gYmQtc2VydmVyLWNhcmQke3NlcnZlci5waW5uZWQgPyBcIiBiZC1zZXJ2ZXItY2FyZC1waW5uZWRcIiA6IFwiXCJ9YH0sXHJcbiAgICAgICAgICAgIC8vIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIC8vIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAvLyB7IGNsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBmbGV4LTFPMUdLWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIGp1c3RpZnlTdGFydC0yeUlabzAgYWxpZ25TdHJldGNoLTFod3hNYSBub1dyYXAtM2p5bnY2XCIgfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7cmVmOiBcImltZ1wiLCBjbGFzc05hbWU6IFwiYmQtc2VydmVyLWltYWdlXCIsIHNyYzogc2VydmVyLmljb25VcmwsIG9uRXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKSwgZHJhZ2dhYmxlOiBmYWxzZX0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5mbGV4Q2hpbGQrXCIgYmQtc2VydmVyLWNvbnRlbnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXArXCIgYmQtc2VydmVyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW5hbWVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbWVtYmVyLWNvdW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm1lbWJlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBNZW1iZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXkgYmQtc2VydmVyLWRlc2NyaXB0aW9uLWNvbnRhaW5lclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXItMkZLRlBHIHNjcm9sbGVyIGJkLXNlcnZlci1kZXNjcmlwdGlvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIG5vV3JhcC0zanludjYgYmQtc2VydmVyLWZvb3RlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleENoaWxkLWZhb1ZXMyBiZC1zZXJ2ZXItdGFnc1wiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmNhdGVnb3JpZXMuam9pbihcIiwgXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gY29sb3JHcmVlbi0yOWlBS1lcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjM2FjMTVjXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmVycm9yICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gZGlzYWJsZWQtOWFGMnVnXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiI2MxM2EzYVwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlcnZlci5lcnJvciAmJiAhdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTlwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIn0sIG9uQ2xpY2s6ICgpID0+IHt0aGlzLmpvaW4oKTt9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBqb2luKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuam9pbih0aGlzKTtcclxuICAgICAgICAvL3RoaXMuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vc2Nyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TaWRlYmFyVmlldyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2lkZWJhciwgY29udGVudCwgdG9vbHN9ID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpIHVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2lkZWJhclJlZ2lvbi1WRlRVa04gc2lkZWJhci1yZWdpb25cIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtrZXk6IFwic2lkZWJhclNjcm9sbGVyXCIsIHJlZjogXCJzaWRlYmFyU2Nyb2xsZXJcIiwgc2lkZWJhcjogdHJ1ZSwgZmFkZTogc2lkZWJhci5mYWRlIHx8IHRydWUsIGRhcms6IHNpZGViYXIuZGFyayB8fCB0cnVlfSwgc2lkZWJhci5jb21wb25lbnQpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRSZWdpb24tM25EdVl5IGNvbnRlbnQtcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudFRyYW5zaXRpb25XcmFwLTNocU9FVyBjb250ZW50LXRyYW5zaXRpb24td3JhcFwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIGZpcmVmb3hGaXhTY3JvbGxGbGV4LWNuSTJpeCBjb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwLTNZWlhkbSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlci13cmFwIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0LTI4TVNuMCBzY3JvbGxlclRyYWNrLTFaSXBzdlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXItMkZLRlBHIGZpcmVmb3hGaXhTY3JvbGxGbGV4LWNuSTJpeCBjb250ZW50UmVnaW9uU2Nyb2xsZXItMjZuYzFlIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyIHNjcm9sbGVyXCIsIHJlZjogXCJjb250ZW50U2Nyb2xsZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50Q29sdW1uLTJocklZSCBjb250ZW50Q29sdW1uRGVmYXVsdC0xVlFrR00gY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSwgY29udGVudC5jb21wb25lbnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19SZWxvYWRJY29uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XHJcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiI2RjZGRkZVwiLFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXJlbG9hZCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5wcm9wcy5vbkNsaWNrLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHt3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIn1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6XCJ9KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDogXCJub25lXCIsIGQ6IFwiTTAgMGgyNHYyNEgwelwifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TY3JvbGxlciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICAvL3Njcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckhvcml6b250YWwpWzBdXHJcbiAgICAgICAgbGV0IHNjcm9sbGVyTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpZGViYXJSZWdpb25TY3JvbGxlcilbMF1cclxuICAgICAgICBsZXQgd3JhcHBlckNsYXNzID0gYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3RIYWlybGluZX0ke3RoaXMucHJvcHMuZmFkZSA/IFwiIFwiK3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGUgOiBcIlwifWA7XHJcbiAgICAgICAgbGV0IHNjcm9sbGVyQ2xhc3MgPSBzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXIrXCIgc2Nyb2xsZXJcIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2lkZWJhcikgc2Nyb2xsZXJDbGFzcyArPSBgICR7c2Nyb2xsZXJNb2R1bGUyLnNpZGViYXJSZWdpb25TY3JvbGxlcn0gc2lkZWJhci1yZWdpb24tc2Nyb2xsZXJgXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuY29udGVudENvbHVtbikge1xyXG4gICAgICAgICAgICBzY3JvbGxlckNsYXNzICs9IFwiIFwiK3Njcm9sbGVyTW9kdWxlMi5jb250ZW50UmVnaW9uU2Nyb2xsZXIrXCIgY29udGVudC1yZWdpb24tc2Nyb2xsZXJcIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1Y2sgKi9cclxuICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcH0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCAgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3R9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVHJhY2t9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qge2NoaWxkcmVufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJzY3JvbGxlcndyYXBcIiwgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3N9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2tleTogXCJzY3JvbGxlclwiLCByZWY6IFwic2Nyb2xsZXJcIiwgY2xhc3NOYW1lOiBzY3JvbGxlckNsYXNzfSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IFYyQ19TY3JvbGxlci5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVjJDX1Njcm9sbGVyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzR3JvdXAgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3RpdGxlLCBzZXR0aW5ncywgYnV0dG9ufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQ29tcG9uZW50ID0gYnV0dG9uID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiBidXR0b24ub25DbGlja30sIGJ1dHRvbi50aXRsZSkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF0sIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShpZCwgY2hlY2tlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgfSldO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1RpdGxlIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuLy9oMi0yZ1dFLW8gdGl0bGUtM3NaV1lRIHNpemUxNi0xNGNHejUgaGVpZ2h0MjAtbU8yZUlOIHdlaWdodFNlbWlCb2xkLU5KZXh6aSBkYS1oMiBkYS10aXRsZSBkYS1zaXplMTYgZGEtaGVpZ2h0MjAgZGEtd2VpZ2h0U2VtaUJvbGQgZGVmYXVsdENvbG9yLTFfYWpYMCBkYS1kZWZhdWx0Q29sb3IgbWFyZ2luVG9wNjAtM1BHYnRLIGRhLW1hcmdpblRvcDYwIG1hcmdpbkJvdHRvbTIwLTMycUlENyBkYS1tYXJnaW5Cb3R0b20yMFxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5cclxubGV0IGNsYXNzbmFtZXMgPSBbXVxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxyXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlW25hbWVdKVswXVtuYW1lXVxyXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcclxuICAgIHJldHVybiBjbGFzc05hbWVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoSXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHRoaXMucHJvcHMuY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XHJcbiAgICAgICAgICAgIGNsYXNzbmFtZXMucHVzaChCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVswXS5iZXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcclxuICAgICAgICAgICAgaW5mbyA9IFtcclxuICAgICAgICAgICAgICAgIGluZm8sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3VwXCIsIHtjbGFzc05hbWU6IGdldENsYXNzTmFtZShcImJldGFcIil9LCBcIihFWFBFUklNRU5UQUwpXCIpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2tleTogXCJ0aXRsZVwiLCBjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMyBtYXJnaW4tcmVzZXQgbWFyZ2luLXJlc2V0IHVpLWZsZXgtY2hpbGRcIn0sIHRleHQpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2tleTogXCJzd2l0Y2hcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxubGV0IFRvb2x0aXBDbGFzc2VzXHJcbmZ1bmN0aW9uIGdldFRvb2x0aXBDbGFzc2VzKCl7XHJcblx0aWYoVG9vbHRpcENsYXNzZXMpcmV0dXJuIFRvb2x0aXBDbGFzc2VzXHJcblx0cmV0dXJuIFRvb2x0aXBDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ0b29sdGlwXCIsIFwidG9vbHRpcEJsYWNrXCIpO1xyXG59XHJcbmxldCBUb29sdGlwTGF5ZXJzXHJcbmZ1bmN0aW9uIGdldFRvb2x0aXBMYXllcnMoKXtcclxuXHRpZihUb29sdGlwTGF5ZXJzKXJldHVybiBUb29sdGlwTGF5ZXJzXHJcblx0cmV0dXJuIFRvb2x0aXBMYXllcnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImxheWVyXCIsIFwibGF5ZXJDb250YWluZXJcIik7XHJcbn1cclxuXHJcbmNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcclxuICAgIGNvbnN0IHVwcGVyQ2FzZSA9IHNpZGVPckNvbG9yWzBdLnRvVXBwZXJDYXNlKCkgKyBzaWRlT3JDb2xvci5zbGljZSgxKTtcclxuICAgIGNvbnN0IHRvb2x0aXBDbGFzcyA9IGdldFRvb2x0aXBDbGFzc2VzKClbYHRvb2x0aXAke3VwcGVyQ2FzZX1gXTtcclxuICAgIGlmICh0b29sdGlwQ2xhc3MpIHJldHVybiB0b29sdGlwQ2xhc3M7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGNsYXNzRXhpc3RzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcclxuICAgIHJldHVybiBnZXRDbGFzcyhzaWRlT3JDb2xvcikgPyB0cnVlIDogZmFsc2U7XHJcbn07XHJcblxyXG5jb25zdCB0b1B4ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1weGA7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRlZFRvb2x0aXAge1xyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQGNvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8alF1ZXJ5KX0gbm9kZSAtIERPTSBub2RlIHRvIG1vbml0b3IgYW5kIHNob3cgdGhlIHRvb2x0aXAgb25cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlwIC0gc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9YmxhY2tdIC0gY29ycmVsYXRlcyB0byB0aGUgZGlzY29yZCBzdHlsaW5nL2NvbG9ycyAoYmxhY2ssIGJyYW5kLCBncmVlbiwgZ3JleSwgcmVkLCB5ZWxsb3cpXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNpZGU9dG9wXSAtIGNhbiBiZSBhbnkgb2YgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XHJcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmV2ZW50RmxpcD1mYWxzZV0gLSBwcmV2ZW50cyBtb3ZpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgaXQgaXMgdG9vIGJpZyBvciBnb2VzIG9mZnNjcmVlblxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kaXNhYmxlZD1mYWxzZV0gLSB3aGV0aGVyIHRoZSB0b29sdGlwIHNob3VsZCBiZSBkaXNhYmxlZCBmcm9tIHNob3dpbmcgb24gaG92ZXJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXR0YWNoRXZlbnRzPXRydWVdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgbGlzdGVuIHRvIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKG5vZGUsIHRleHQsIG9wdGlvbnMgPSB7fSkge1xyXG5cdFx0Y29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgcHJldmVudEZsaXAgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgYXR0YWNoRXZlbnRzID0gdHJ1ZX0gPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5ub2RlID0gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xyXG4gICAgICAgIHRoaXMubGFiZWwgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0dGhpcy5zaWRlID0gc2lkZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMucHJldmVudEZsaXAgPSBwcmV2ZW50RmxpcDtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcblxyXG4gICAgICAgIGlmICghY2xhc3NFeGlzdHModGhpcy5zaWRlKSkgcmV0dXJuIFV0aWxzLmVycihcIkVtdWxhdGVkVG9vbHRpcFwiLCBgU2lkZSAke3RoaXMuc2lkZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc3R5bGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTdHlsZSAke3RoaXMuc3R5bGV9IGRvZXMgbm90IGV4aXN0LmApO1xyXG5cdFx0XHJcblx0XHR0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBMYXllcnMoKS5sYXllciArIFwiIFwiICsgZ2V0VG9vbHRpcExheWVycygpLmRpc2FibGVkUG9pbnRlckV2ZW50cztcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XHJcblxyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwQ29udGVudFxyXG5cclxuXHRcdGNvbnN0IHBvaW50ZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHBvaW50ZXJFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcFBvaW50ZXI7XHJcblxyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQocG9pbnRlckVsZW1lbnQpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQodGhpcy5sYWJlbEVsZW1lbnQpO1xyXG5cdFx0dGhpcy5lbGVtZW50LmFwcGVuZCh0aGlzLnRvb2x0aXBFbGVtZW50KTtcclxuXHJcblx0XHRpZihhdHRhY2hFdmVudHMpe1xyXG5cdFx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblx0XHRcdFx0dGhpcy5zaG93KCk7XHJcblx0XHJcblx0XHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKHRoaXMubm9kZSkpO1xyXG5cdFx0XHRcdFx0XHRpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFxyXG5cdFx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0XHR9KTtcclxuXHRcclxuXHRcdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbnRhaW5lciB3aGVyZSB0aGUgdG9vbHRpcCB3aWxsIGJlIGFwcGVuZGVkLiAqL1xyXG4gICAgZ2V0IGNvbnRhaW5lcigpIHsgXHJcblx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzKStcIiB+IC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIpKTsgXHJcblx0fVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgdGV4dCA9IFwiXCJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICB0aGlzLm5vZGUgPSBCRFYyLnJlYWN0RG9tLmZpbmRET01Ob2RlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKHRoaXMubm9kZSwgdGV4dCwge3N0eWxlLCBzaWRlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy50b29sdGlwO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfWFN2ZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHt4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLCBzdHlsZToge3dpZHRoOiBcIjE4cHhcIiwgaGVpZ2h0OiBcIjE4cHhcIn19LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImdcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmFja2dyb3VuZFwiLCBmaWxsOiBcIm5vbmVcIiwgZmlsbFJ1bGU6IFwiZXZlbm9kZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTAgMGgxMnYxMkgwXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2NsYXNzTmFtZTogXCJmaWxsXCIsIGZpbGw6IFwiI2RjZGRkZVwiLCBkOiBcIk05LjUgMy4yMDVMOC43OTUgMi41IDYgNS4yOTUgMy4yMDUgMi41bC0uNzA1LjcwNUw1LjI5NSA2IDIuNSA4Ljc5NWwuNzA1LjcwNUw2IDYuNzA1IDguNzk1IDkuNWwuNzA1LS43MDVMNi43MDUgNlwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXZlbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vZHVsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvMGdsb2JhbHMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL2xvYWRpbmdJY29uLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbG9jYWxTdG9yYWdlRml4LmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy8yNGhvdXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL0FudGlBZERNLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9DdXN0b21SaWNoUHJlc2VuY2UuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2JkQXBpLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9iZEV2ZW50cy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvYmx1clByaXZhdGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NsYXNzTm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvY29sb3JlZFRleHQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9jb3JlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9kYXRhU3RvcmUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rldk1vZGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc2FibGVUeXBpbmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2Rpc3RhbnQuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL2RvbXRvb2xzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9lbW9qaU1vZHVsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy9wbHVnaW5Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3BvcG91dFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvcHVibGljU2VydmVycy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NQYW5lbC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NQYW5lbFNpZGViYXIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3RoZW1lTW9kdWxlLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvbW9kdWxlcy91dGlscy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvdjIuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9tb2R1bGVzL3ZvaWNlTW9kZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL21vZHVsZXMvd2VicGFja01vZHVsZXMuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvYnVnX2h1bnRlci5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy9zdmcvY2lyY3VzLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3N2Zy9saWdodGNvcmQuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvQWNjb3VudEluZm9zLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL0FwaVByZXZpZXcuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvYWRkb25jYXJkLmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2FkZG9ubGlzdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9iZExvZ28uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9jaGVja2JveC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2NvbXBvbmVudHMvZHJvcGRvd24uanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zZWFyY2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29tcG9uZW50cy9zd2l0Y2guanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvY29udGVudENvbHVtbi5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2Nzc0VkaXRvckRldGFjaGVkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvZXJyb3JCb3VuZGFyeS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL2RlbGV0ZS5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9kb3duYXJyb3cuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvaWNvbnMvZWRpdC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9pY29ucy9oaXN0b3J5LmpzeCIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL2ljb25zL3NlYXJjaC5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9tYXJnaW50b3AuanN4Iiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHJlc2VuY2VTZXR0aW5ncy5qc3giLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9wdWJsaWNzZXJ2ZXJzL2xheWVyLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9zZXJ2ZXJDYXJkLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvcHVibGljc2VydmVycy9zaWRlYmFyVmlldy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3JlbG9hZEljb24uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zY3JvbGxlci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3NlY3Rpb25lZFNldHRpbmdzUGFuZWwuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS9zZXR0aW5nc0dyb3VwLmpzIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvLi9zcmMvdWkvc2V0dGluZ3NUaXRsZS5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3N3aXRjaC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhckhlYWRlci5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3RhYkJhckl0ZW0uanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90YWJCYXJTZXBhcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29scy5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3Rvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC8uL3NyYy91aS90b29sdGlwV3JhcC5qcyIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkLy4vc3JjL3VpL3hTdmcuanMiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcImNyeXB0b1wiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJlbGVjdHJvblwiIiwid2VicGFjazovL0JldHRlckRpc2NvcmQvZXh0ZXJuYWwgXCJldmVudHNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwiZnNcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwibW9kdWxlXCIiLCJ3ZWJwYWNrOi8vQmV0dGVyRGlzY29yZC9leHRlcm5hbCBcIm5vZGUtZmV0Y2hcIiIsIndlYnBhY2s6Ly9CZXR0ZXJEaXNjb3JkL2V4dGVybmFsIFwicGF0aFwiIl0sIm5hbWVzIjpbIm1pbmltdW1EaXNjb3JkVmVyc2lvbiIsImN1cnJlbnREaXNjb3JkVmVyc2lvbiIsIndpbmRvdyIsIkRpc2NvcmROYXRpdmUiLCJyZW1vdGVBcHAiLCJnZXRWZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsImJiZFZlcnNpb24iLCJiYmRDaGFuZ2Vsb2ciLCJkZXNjcmlwdGlvbiIsImNoYW5nZXMiLCJ0aXRsZSIsInR5cGUiLCJpdGVtcyIsInNldHRpbmdzIiwiaWQiLCJpbmZvIiwiaW1wbGVtZW50ZWQiLCJoaWRkZW4iLCJjYXQiLCJjYXRlZ29yeSIsImV4cGVyaW1lbnRhbCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImRlZmF1bHRDb29raWUiLCJzZXR0aW5nc0Nvb2tpZSIsInNldHRpbmdzUlBDIiwiZGVmYXVsdFJQQyIsIkRhdGUiLCJub3ciLCJiZHBsdWdpbkVycm9ycyIsImJkdGhlbWVFcnJvcnMiLCJiZENvbmZpZyIsIk9iamVjdCIsImNyZWF0ZSIsIkJldHRlckRpc2NvcmRDb25maWciLCJiZHRoZW1lcyIsImJkcGx1Z2lucyIsInBsdWdpbkNvb2tpZSIsInRoZW1lQ29va2llIiwibG9jYWxTdG9yYWdlRml4IiwibG9hZGluZ0ljb24iLCJkZXByZWNhdGVHbG9iYWwiLCJrZXkiLCJ2YWx1ZSIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiVXRpbHMiLCJ3YXJuIiwiZ2xvYmFsS2V5cyIsImtleXMiLCJHbG9iYWxzIiwiQkRWMiIsInBsdWdpbk1vZHVsZSIsInRoZW1lTW9kdWxlIiwiQkRFdmVudHMiLCJzZXR0aW5nc1BhbmVsIiwiRGF0YVN0b3JlIiwiQ29udGVudE1hbmFnZXIiLCJDbGFzc05vcm1hbGl6ZXIiLCJCZEFwaSIsIkNvcmUiLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwibWV0aG9kcyIsInNldENvbmZpZyIsInNldE1ldGhvZHMiLCJpbml0IiwidjJMb2FkZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjb250ZW50V2luZG93R2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJwcm90b3R5cGUiLCJjb250ZW50V2luZG93IiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiUHJveHkiLCJvYmoiLCJwcm9wIiwidW5kZWZpbmVkIiwidmFsIiwiYmluZCIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiRnVuY3Rpb24iLCJvT3BlbiIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInVybCIsInRvTG93ZXJDYXNlIiwiaW5jbHVkZXMiLCJURkhvdXIiLCJpbmplY3QyNEhvdXIiLCJjYW5jZWwyNEhvdXIiLCJ0d2VsdmVIb3VyIiwiUmVnRXhwIiwiY29udmVydCIsImRhdGEiLCJtYXRjaGVkIiwicmV0dXJuVmFsdWUiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiY2FuY2VsQ296eSIsIm1vbmtleVBhdGNoIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCIsInJlbW92ZTI0SG91ciIsImRpc3BhdGNoZXIiLCJMaWdodGNvcmQiLCJEaXNjb3JkTW9kdWxlcyIsIkNoYW5uZWxNb2R1bGUiLCJCRE1vZHVsZXMiLCJlIiwiZGVmYXVsdCIsImdldENoYW5uZWwiLCJoYXNDaGFubmVsIiwicmVsYXRpb25TaGlwTW9kdWxlIiwiYWRkUmVsYXRpb25zaGlwIiwiRE1Nb2R1bGUiLCJjbG9zZVByaXZhdGVDaGFubmVsIiwiYmxvY2tlZCIsInVzZXJNb2R1bGUiLCJnZXRDdXJyZW50VXNlciIsIkFudGlCb3RETSIsImFudGlETSIsImVuYWJsZWQiLCJlbmFibGUiLCJzdWJzY3JpYmUiLCJkaXNhYmxlIiwidW5zdWJzY3JpYmUiLCJldiIsIm1lc3NhZ2UiLCJhdXRob3IiLCJib3QiLCJndWlsZF9pZCIsImNoYW5uZWwiLCJjaGFubmVsX2lkIiwic2Nhbk1lc3NhZ2UiLCJzaG93VG9hc3QiLCJ1c2VybmFtZSIsImRpc2NyaW1pbmF0b3IiLCJsb2NhdGlvbiIsInRlc3QiLCJjb250ZW50IiwiRW1iZWRzQ29udGFpbnMiLCJzZWFyY2giLCJlbWJlZHMiLCJtYXAiLCJlbWJlZCIsImZvb3RlciIsInRleHQiLCJmaWVsZHMiLCJuYW1lIiwibSIsIkRpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvblR5cGVzIiwic29ja2V0SWQiLCJwaWQiLCJDdXN0b21SaWNoUHJlc2VuY2UiLCJnYW1lIiwiZm9ybWF0ZWRHYW1lIiwiYXBwbGljYXRpb25faWQiLCJkZXRhaWxzIiwic3RhdGUiLCJ0aW1lc3RhbXBzIiwic3RhcnQiLCJhc3NldHMiLCJsYXJnZV9pbWFnZSIsInNtYWxsX2ltYWdlIiwic2VuZEdhbWUiLCJMT0NBTF9BQ1RJVklUWV9VUERBVEUiLCJhY3Rpdml0eSIsImNvbnNvbGUiLCJsb2ciLCJzZXQiLCJmZXRjaEFzc2V0cyIsImFwcGxpY2F0aW9uSWQiLCJnZXRBc3NldHMiLCJFcnJvciIsIlJlYWN0IiwiUmVhY3RET00iLCJSZWFjdERvbSIsIlJlYWN0Q29tcG9uZW50IiwiV2luZG93Q29uZmlnRmlsZSIsImVtb3RlcyIsInNjcmVlbldpZHRoIiwiTWF0aCIsIm1heCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiaW5uZXJXaWR0aCIsInNjcmVlbkhlaWdodCIsImNsaWVudEhlaWdodCIsImlubmVySGVpZ2h0IiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJnZXRXaW5kb3dQcmVmZXJlbmNlIiwic2V0V2luZG93UHJlZmVyZW5jZSIsImluamVjdENTUyIsImNzcyIsIkRPTSIsImFkZFN0eWxlIiwiZXNjYXBlSUQiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwiYWRkU2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJnZXRQbHVnaW4iLCJoYXNPd25Qcm9wZXJ0eSIsInBsdWdpbiIsImdldENvcmUiLCJtYWluQ29yZSIsImFsZXJ0Iiwic2hvd0NvbmZpcm1hdGlvbk1vZGFsIiwiY2FuY2VsVGV4dCIsIm9wdGlvbnMiLCJmaW5kTW9kdWxlIiwiZmlsdGVyIiwiV2VicGFja01vZHVsZXMiLCJmaW5kIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kQWxsIiwiZmluZE1vZHVsZUJ5UHJvcHMiLCJwcm9wcyIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJmaW5kTW9kdWxlQnlQcm90b3R5cGVzIiwicHJvdG9zIiwiZmluZEJ5UHJvdG90eXBlcyIsImZpbmRNb2R1bGVCeURpc3BsYXlOYW1lIiwiZmluZEJ5RGlzcGxheU5hbWUiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwibm9kZSIsImpRdWVyeSIsIkVsZW1lbnQiLCJsb2FkRGF0YSIsInBsdWdpbk5hbWUiLCJnZXRQbHVnaW5EYXRhIiwiZ2V0RGF0YSIsInNhdmVEYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIndoYXQiLCJtZXRob2ROYW1lIiwib25SZW1vdmVkIiwiY2FsbGJhY2siLCJzdXBwcmVzc0Vycm9ycyIsIm1ldGhvZCIsInRlc3RKU09OIiwiaXNQbHVnaW5FbmFibGVkIiwiaXNUaGVtZUVuYWJsZWQiLCJpc1NldHRpbmdFbmFibGVkIiwiZW5hYmxlU2V0dGluZyIsIm9uQ2hhbmdlIiwiZGlzYWJsZVNldHRpbmciLCJ0b2dnbGVTZXR0aW5nIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwibWFrZUFkZG9uQVBJIiwiY29va2llIiwibGlzdCIsIm1hbmFnZXIiLCJBZGRvbkFQSSIsImZvbGRlciIsImlzRW5hYmxlZCIsInRvZ2dsZSIsInJlbG9hZCIsImdldEFsbCIsImsiLCJhIiwiUGx1Z2lucyIsIlRoZW1lcyIsIkJldHRlckRpc2NvcmQiLCJFdmVudEVtaXR0ZXIiLCJyZXF1aXJlIiwiZXZlbnROYW1lIiwiYXJncyIsImVtaXQiLCJvZmYiLCJldmVudEFjdGlvbiIsInJlbW92ZUxpc3RlbmVyIiwic2VsZWN0b3JzIiwicmVtb3ZlRGEiLCJnZXRTZWxlY3RvcnMiLCJzdGFuZGFyZFNpZGViYXJWaWV3IiwiZGVmYXVsdENsYXNzTmFtZSIsInNlbGVjdHMiLCJ1c2VyU2V0dGluZ3NBY2NvdW50IiwiY2hpbGRyZW4iLCJwdXNoIiwicGF5bWVudFNvdXJjZVJvdyIsInN1YlRleHQiLCJkZXNjcmlwdGlvbldyYXBwZXIiLCJ2aWV3Qm9keSIsInVzZXJTZXR0aW5nc1NlY3VyaXR5IiwiQmx1clByaXZhdGUiLCJlcnJvciIsIkRPTVRvb2xzIiwiam9pbiIsIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJzdG9wIiwiaGFzUGF0Y2hlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJtb2R1bGVGaWx0ZXIiLCJyZXZlcnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInBhdGNoQ2xhc3NNb2R1bGVzIiwibm9ybWFsaXplRWxlbWVudCIsInBhdGNoRE9NTWV0aG9kcyIsIm1vZHVsZXMiLCJtb2R1bGUiLCJwYXRjaENsYXNzTW9kdWxlIiwidW5wYXRjaENsYXNzTW9kdWxlIiwic2hvdWxkSWdub3JlIiwiaXNOYU4iLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiYmFzZUNsYXNzTmFtZSIsInNwbGl0IiwiY29tcG9uZW50TmFtZSIsImNsYXNzTmFtZXMiLCJjbGFzc0xpc3QiLCJub3JtYWxDbGFzcyIsImNhbWVsQ2FzZSIsInMiLCJpIiwidG9VcHBlckNhc2UiLCJzbGljZSIsIm5ld1N0cmluZyIsInRyaW0iLCJlbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInRvUmVtb3ZlIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJ0b2tlbiIsInRva2VucyIsInQiLCJDb2xvcmVkVGV4dCIsImluamVjdENvbG9yZWRUZXh0IiwiY2FuY2VsQ29sb3JlZFRleHQiLCJNZXNzYWdlQ29tcG9uZW50IiwiYmVmb3JlIiwibWV0aG9kQXJndW1lbnRzIiwiY2hpbGRyZW5NZXNzYWdlQ29udGVudCIsIm1lc3NhZ2VDb250ZW50IiwiZGlzcGxheU5hbWUiLCJvcmlnaW5hbFR5cGUiLCJfX29yaWdpbmFsTWV0aG9kIiwicm9sZUNvbG9yIiwiY29sb3JTdHJpbmciLCJzdHlsZSIsImNvbG9yIiwiYXNzaWduIiwicmVtb3ZlQ29sb3JlZFRleHQiLCJjbGFzc05hbWVNYXJrdXAiLCJtYXJrdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImVsZW0iLCJzZXRQcm9wZXJ0eSIsInBhdGgiLCJmcyIsIk1vZHVsZSIsImdsb2JhbFBhdGhzIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJNZXRhRXJyb3IiLCJvcmlnaW5hbEpTUmVxdWlyZSIsIl9leHRlbnNpb25zIiwib3JpZ2luYWxDU1NSZXF1aXJlIiwic3BsaXRSZWdleCIsImVzY2FwZWRBdFJlZ2V4IiwiYWRkb25DYWNoZSIsInRpbWVDYWNoZSIsIndhdGNoZXJzIiwicGF0Y2hFeHRlbnNpb25zIiwiZ2V0Q29udGVudFJlcXVpcmUiLCJwbHVnaW5zRm9sZGVyIiwiX3BsdWdpbnNGb2xkZXIiLCJyZWFscGF0aFN5bmMiLCJkYXRhUGF0aCIsInRoZW1lc0ZvbGRlciIsIl90aGVtZXNGb2xkZXIiLCJsb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSIsImRhdGFTdG9yZSIsImdldFNldHRpbmdHcm91cCIsInNldFNldHRpbmdHcm91cCIsImVuY3J5cHRTZXR0aW5nc0NhY2hlIiwiSlNPTiIsInBhcnNlIiwiZGVjcnlwdFNldHRpbmdzQ2FjaGUiLCJoYXNoIiwicmVzdWx0Iiwic3VzcGVjdCIsInNhdmVBZGRvbkNhY2hlIiwic3RyaW5naWZ5Iiwid2F0Y2hDb250ZW50IiwiY29udGVudFR5cGUiLCJpc1BsdWdpbiIsImJhc2VGb2xkZXIiLCJmaWxlRW5kaW5nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJ1bmxvYWRQbHVnaW4iLCJ1bmxvYWRUaGVtZSIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZFBsdWdpbiIsImxvYWRUaGVtZSIsInJlbG9hZFBsdWdpbiIsInJlbG9hZFRoZW1lIiwidW53YXRjaENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwiaGFzT2xkTWV0YSIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJtZXRhIiwicmF3TWV0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiaW5kZXhPZiIsInBhcnNlZCIsImZvcm1hdCIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJjaGFyQXQiLCJsIiwic3Vic3RyIiwic2VsZiIsIm9yaWdpbmFsUmVxdWlyZSIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiYWRkZWQiLCJhdGltZU1zIiwibW9kaWZpZWQiLCJtdGltZU1zIiwic2l6ZSIsIl9jb21waWxlIiwiZGlkRXhwb3J0IiwiaXNFbXB0eSIsImV4cG9ydHMiLCJtYWtlUGxhY2Vob2xkZXJQbHVnaW4iLCJnZXROYW1lIiwiZ2V0QXV0aG9yIiwiZ2V0RGVzY3JpcHRpb24iLCJzb3VyY2UiLCJ3ZWJzaXRlIiwibG9hZENvbnRlbnQiLCJwcm9jZXNzRmlsZSIsInRpbWVzdGFtcCIsImZpbGUiLCJoYXJtIiwic3RhY2siLCJ1bmxvYWRDb250ZW50IiwiY2FjaGUiLCJpc0xvYWRlZCIsInJlbG9hZENvbnRlbnQiLCJjYW50VW5sb2FkIiwibG9hZE5ld0NvbnRlbnQiLCJiYXNlZGlyIiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsImNvbnRlbnRMaXN0IiwidmFsdWVzIiwicmVtb3ZlZCIsImYiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImxvYWRQbHVnaW5zIiwibG9hZFRoZW1lcyIsImNvbmZpZyIsImhhc1N0YXJ0ZWQiLCJmbGF0IiwidmVyc2lvbiIsIkVEIiwiV2ViU29ja2V0IiwicGF0Y2hBdHRyaWJ1dGVzIiwiaW5pdFNldHRpbmdzIiwiY2hlY2tGb3JHdWlsZHMiLCJpbml0aWFsaXplIiwiaW5pdGlhbGl6ZVNldHRpbmdzIiwiY29udGVudE1hbmFnZXIiLCJCdWZmZXIiLCJmcm9tIiwidG9TdHJpbmciLCJhZGRFdmVudExpc3RlbmVyIiwiY2xpY2siLCJQbHVnaW5DZXJ0aWZpZXIiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiaW5pdE9ic2VydmVyIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwicHJldmlvdXNWZXJzaW9uIiwic2hvd0NoYW5nZWxvZ01vZGFsIiwiRW1vamlNb2R1bGUiLCJwYXRjaFNvY2lhbCIsInBhdGNoR3VpbGRQaWxscyIsInBhdGNoR3VpbGRMaXN0SXRlbXMiLCJwYXRjaEd1aWxkU2VwYXJhdG9yIiwicGF0Y2hNZXNzYWdlSGVhZGVyIiwicGF0Y2hNZW1iZXJMaXN0IiwicGF0Y2hBdHRhY2htZW50IiwiaGF2ZUluc3RhbGxlZERlZmF1bHQiLCJvbkNsb3NlIiwibG9nbyIsInRvcCIsImlubmVySFRNTCIsImF0dHJpYnNQYXRjaHMiLCJjYW5jZWxQYXRjaEF0dHJpYnV0ZXMiLCJ2MiIsIkFuY2hvciIsIkFwaSIsImVuc3VyZUV4cG9ydGVkIiwidGhlbiIsIkRpc2NvcmRUYWciLCJEaXNjb3JkVGFnQ29tcCIsInV1aWR2NCIsImJhZGdlRGl2IiwiZGlzcGxheSIsIm1hcmdpblRvcCIsInVzZXIiLCJUb29sdGlwV3JhcCIsInNpZGUiLCJocmVmIiwidGFyZ2V0IiwiQkRMb2dvIiwiTGlnaHRjb3JkTG9nbyIsImRpdiIsImFwcGx5QmFkZ2VzIiwidGltZXNDaGVja2VkIiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsImRlZmVyTG9hZGVkIiwicmVhZHlTdGF0ZSIsImluamVjdEV4dGVybmFscyIsInNhdmVTZXR0aW5ncyIsImxvYWRTZXR0aW5ncyIsInNldHRpbmciLCJnZXRQcmVkaWNhdGVTZWN0aW9ucyIsInNldHRpbmdNb2R1bGUiLCJjYWxsIiwic2VjdGlvbiIsInBvcGVkIiwicG9wIiwicmVuZGVyU2lkZWJhciIsImNsYXNzTmFtZUxheWVyIiwiY2xhc3NOYW1lU29jaWFsTGlua3MiLCJjbGFzc05hbWVNb2RhbCIsIm1haW5PYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJtbGVuIiwibXV0YXRpb24iLCJyYXdPYnNlcnZlciIsImFkZGVkTm9kZXMiLCJsYXllciIsImFuaW1hdGluZyIsInNvY2lhbExpbmtzIiwibW9kYWwiLCJpbm5lciIsInJlc3BvbnNpdmVXaWR0aE1vYmlsZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInBhcmVudEVsZW1lbnQiLCJvYnNlcnZlIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsInNvY2lhbFBhdGNoIiwiVGFiQmFyIiwic29jaWFsTW9kdWxlMSIsIm9yaWdpbmFsIiwibmV3T25lIiwicmV0dXJuVmFsIiwibGluayIsImNsYXNzTmFtZUNvbG9yTXV0ZWQiLCJzaXplcyIsImNsYXNzTmFtZVZlcnNpb25IYXNoIiwiY29sb3JNdXRlZCIsInNpemUzMiIsInZlcnNpb25IYXNoIiwiYnJhbmNoIiwiYWRkaXRpb25hbCIsInJlYWN0Iiwic2l6ZTEyIiwiZWxlY3Ryb24iLCJnZXRHbG9iYWwiLCJjb21taXQiLCJvcmlnaW5hbFZlcnNpb25zIiwic3BsaWNlIiwiZ2V0R3VpbGRDbGFzc2VzIiwiZ3VpbGRzV3JhcHBlciIsImZpbmRCeVByb3BzIiwiZ3VpbGRzIiwicGlsbCIsImd1aWxkTGlzdEl0ZW1zUGF0Y2giLCJHdWlsZENsYXNzZXMiLCJsaXN0SXRlbUNsYXNzIiwiYmxvYkNsYXNzIiwicmVhY3RJbnN0YW5jZSIsIkd1aWxkQ29tcG9uZW50IiwicmV0dXJuIiwidGhpc09iamVjdCIsImd1aWxkRGF0YSIsInVucmVhZCIsInNlbGVjdGVkIiwiYXVkaW8iLCJ2aWRlbyIsImJhZGdlIiwiYW5pbWF0YWJsZSIsImd1aWxkUGlsbFBhdGNoIiwiZ3VpbGRQaWxsIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJndWlsZENvbXBvbmVudHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsIkF0dGFjaG1lbnRQYXRjaCIsIkF0dGFjaG1lbnQiLCJhdHRhY2htZW50IiwiZ2V0TmVzdGVkUHJvcCIsInBhdGNoIiwibWVzc2FnZUhlYWRlclBhdGNoIiwiTWVzc2FnZUhlYWRlciIsImNoYXQiLCJuZXh0VGljayIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGROb2RlcyIsImJsb2NrRGl2IiwiZGlzdGFudCIsImdldEJhZGdlcyIsImJhZGdlcyIsInN2ZyIsIndpZHRoIiwic2NvcGVzIiwic2NvcGUiLCJjb21wb25lbnQiLCJkaXYyIiwicmVhY3REb20iLCJyZW5kZXIiLCJtZW1iZXJMaXN0UGF0Y2giLCJNZW1iZXJMaXN0SXRlbSIsInJlbmRlckRlY29yYXRvcnMiLCJ1cGRhdGVJbmplY3RvciIsImluamVjdGlvblBhdGgiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsInJlbGVhc2VDaGFubmVsIiwiZ2xvYmFscyIsImdldFJlbGVhc2VDaGFubmVsIiwiZW52IiwiQVBQREFUQSIsIkhPTUUiLCJYREdfQ09ORklHX0hPTUUiLCJzdGFibGUiLCJjYW5hcnkiLCJwdGIiLCJwbHVnaW5EYXRhIiwiQkRGaWxlIiwid3JpdGVGaWxlU3luYyIsInNldHRpbmdzRmlsZSIsInVubGlua1N5bmMiLCJfaW5qZWN0aW9uUGF0aCIsImJhc2UiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZWFsTG9jYXRpb24iLCJjb25maWdGaWxlIiwiX2NvbmZpZ0ZpbGUiLCJfQkRGaWxlIiwiX3NldHRpbmdzRmlsZSIsImdldFBsdWdpbkZpbGUiLCJEZXZNb2RlIiwiZGVidWdMaXN0ZW5lciIsImNvcHlTZWxlY3Rvckxpc3RlbmVyIiwic3RhcnREZWJ1Z0xpc3RlbmVyIiwic3RhcnRDb3B5U2VsZWN0b3IiLCJzdG9wRGVidWdMaXN0ZW5lciIsInN0b3BDb3B5U2VsZWN0b3IiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwid2hpY2giLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsInNlbGVjdG9yIiwiZ2V0U2VsZWN0b3IiLCJjbGFzc0xheWVyIiwiY2xhc3NJdGVtcyIsImRpc2FibGVkUG9pbnRlckV2ZW50cyIsIm1lbnUiLCJhdHRhY2giLCJjbSIsInF1ZXJ5IiwiY29udGFpbmVyIiwibGF5ZXJDb250YWluZXIiLCJjbVdyYXAiLCJzdHlsZUZsZXhpYmxlIiwiYWNjb21tb2RhdGVTY3JvbGxiYXIiLCJhcHBlbmQiLCJjbGllbnRZIiwibGVmdCIsImNsaWVudFgiLCJzY3JvbGxlckNsYXNzZXMiLCJzY3JvbGxlcldyYXAiLCJzY3JvbGxlclRoZW1lZCIsInRoZW1lR2hvc3RIYWlybGluZSIsInNjcm9sbGVyIiwicmVtb3ZlQ00iLCJrZXlDb2RlIiwiY21nIiwiY21pIiwiaXRlbSIsImxhYmVsQ29udGFpbmVyIiwiY29sb3JEZWZhdWx0IiwibGFiZWwiLCJOYXRpdmVNb2R1bGUiLCJjb3B5IiwiZWxlbWVudHMiLCJxdWVyeUFsbCIsImZvY3VzZWQiLCJzZXBhcmF0b3IiLCJzY3JvbGxIZWlnaHQiLCJmdWxsUGF0aCIsImVsIiwibmFtZXMiLCJwYXJlbnROb2RlIiwidW5zaGlmdCIsIm93bmVyRG9jdW1lbnQiLCJ0YWdOYW1lIiwiZW50cmllcyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJEaXNhYmxlVHlwaW5nIiwic3RhcnRUeXBpbmciLCJ0eXBpbmdNb2R1bGUiLCJkaXNhYmxlZCIsInN0b3BUeXBpbmciLCJyYW5kb20iLCJ2IiwiYXdhaXRpbmdCYWRnZXNQcm9taXNlcyIsImJhZGdlc1RvRmV0Y2giLCJEaXN0YW50U2VydmVyIiwiX2NhY2hlIiwibmV3UHJvbWlzZSIsInJlcyIsIkNvbnN0YW50cyIsImRlZmF1bHRVc2VycyIsImZldGNoZWRCYWRnZXMiLCJ1c2VycyIsImhhbmRsZVJlcXVlc3QiLCJSb3V0ZXMiLCJzdGF0dXMiLCJyZXNwb25zZUJvZHkiLCJqc29uIiwicHJvbWlzZSIsInVzZXJfaWQiLCJjYXRjaCIsIkxpZ2h0Y29yZEVycm9yIiwicm91dGUiLCJyZWplY3QiLCJub2RlRmV0Y2giLCJTRVJWRVJfVVJMIiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJCdWdIdW50ZXJCYWRnZSIsIkNpcmN1cyIsImhlYWQiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiLCJhbmltYXRlIiwidGltaW5nIiwiXyIsInVwZGF0ZSIsImR1cmF0aW9uIiwicGVyZm9ybWFuY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aW1lIiwidGltZUZyYWN0aW9uIiwicHJvZ3Jlc3MiLCJRIiwicGFyc2VIVE1MIiwiaXNIVE1MIiwiTm9kZUxpc3QiLCJzb21lIiwibiIsIm5vZGVUeXBlIiwiYmFzZUVsZW1lbnQiLCJodG1sIiwiZnJhZ21lbnQiLCJ0ZW1wbGF0ZSIsImNsb25lTm9kZSIsImVzY2FwZUhUTUwiLCJ0ZXh0Tm9kZSIsImNyZWF0ZVRleHROb2RlIiwic3BhbkVsZW1lbnQiLCJub2RlVmFsdWUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJjbGFzc25hbWUiLCJpbmRpY2F0b3IiLCJoYXNDbGFzcyIsImV2ZXJ5IiwicmVwbGFjZUNsYXNzIiwib2xkTmFtZSIsIm5ld05hbWUiLCJhcHBlbmRUbyIsInRoaXNOb2RlIiwidGhhdE5vZGUiLCJwcmVwZW5kVG8iLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJ0YXJnZXROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJuZXdOb2RlIiwibmV4dCIsIm5leHRBbGwiLCJuZXh0VW50aWwiLCJtYXRjaGVzIiwicHJldmlvdXMiLCJwcmV2aW91c0FsbCIsInByZXZpb3VzVW50aWwiLCJpbmRleEluUGFyZW50IiwibnVtIiwiaW5kZXgiLCJwYXJlbnQiLCJmaW5kQ2hpbGQiLCJmaW5kQ2hpbGRyZW4iLCJwYXJlbnRzIiwiY2xvc2VzdCIsInBhcmVudHNVbnRpbCIsInNpYmxpbmdzIiwiYXR0cmlidXRlIiwiZ2xvYmFsIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsInRleHRDb250ZW50Iiwib3V0ZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJsaXN0ZW5lcnMiLCJfbGlzdGVuZXJzIiwib24iLCJldmVudCIsImRlbGVnYXRlIiwibmFtZXNwYWNlIiwiaGFzRGVsZWdhdGUiLCJldmVudEZ1bmMiLCJjYW5jZWwiLCJuZXdDYW5jZWwiLCJmaW5kSW5kZXgiLCJvbmNlIiwiX19vZmZBbGwiLCJtYXRjaEZpbHRlciIsImxpc3RlbmVyIiwiZGVmYXVsdEZpbHRlciIsIm9uTW91bnRDaGFuZ2UiLCJvbk1vdW50Iiwid3JhcHBlZENhbGxiYWNrIiwib2JzZXJ2ZXIiLCJub2RlcyIsInJlbW92ZWROb2RlcyIsImRpcmVjdE1hdGNoIiwicGFyZW50TWF0Y2giLCJvblVubW91bnQiLCJvbkFkZGVkIiwid3JhcCIsImRvbVdyYXBwZXIiLCJyZXNvbHZlRWxlbWVudCIsIkVtb2ppUmVnZXgiLCJDdXN0b21FbW9qaU1vZHVsZSIsIkN1c3RvbUVtb2ppIiwiRW1vamlNb2R1bGVBcGkiLCJnZXRDdXN0b21FbW9qaUJ5SWQiLCJBdXRvY29tcGxldGVNb2R1bGUiLCJBdXRvQ29tcGxldGlvblRlbXBsYXRlcyIsImdldEF1dG9jb21wbGV0ZU9wdGlvbnMiLCJFbW9qaU1vZHVsZVF1ZXJ5IiwicXVlcnlFbW9qaVJlc3VsdHMiLCJNZXNzYWdlcyIsIkVNT0pJX01BVENISU5HIiwiZ3VpbGRNb2R1bGUiLCJnZXRHdWlsZCIsImdldEd1aWxkcyIsImlzRmV0Y2hpbmciLCJlbW9qaVNlYXJjaCIsImdldERpc2FtYmlndWF0ZWRFbW9qaUNvbnRleHQiLCJMSUdIVENPUkRfRU1PSklTIiwiYXJnMSIsImFyZzIiLCJjb25kaXRpb24iLCJzZXRFbW9qaVVzYWJsZSIsInF1ZXJ5UmVzdWx0cyIsInJlc3VsdHMiLCJyZW5kZXJSZXN1bHRzIiwiRCIsImVtb2ppcyIsIkVNT0pJIiwiRW1vamkiLCJlbW9qaSIsInVuaXF1ZU5hbWUiLCJzZW50aW5lbCIsImd1aWxkSWQiLCJnZXRQbGFpblRleHQiLCJpc0FuaW1hdGVkIiwiYW5pbWF0ZWQiLCJtYW5hZ2VkIiwib3JpZ2luYWxOYW1lIiwiZ2V0UmF3VGV4dCIsImNhbmNlbEVtb2ppUmVuZGVyIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJuZXdDb250ZW50IiwiaGFzUGFyc2VkIiwiZXhlYyIsInJhdyIsIndvcmRzIiwid29yZCIsImFyciIsImVtb2ppSWQiLCJqdW1ib2FibGUiLCJyZWR1Y2UiLCJjdXJyZW50Iiwic2hpZnQiLCJvIiwidSIsImQiLCJvbkNsaWNrIiwib25Ib3ZlciIsIlIiLCJwcmVmaXgiLCJUaXRsZSIsIkVtb2ppRmlsdGVyTW9kdWxlIiwiaXNFbW9qaURpc2FibGVkIiwiaXNVc2FibGUiLCJ1c2FibGUiLCJzdXJyb2dhdGVzIiwiZGl2ZXJzaXR5IiwiY2FjaGUyIiwicHJvY2Vzc0F0dGFjaG1lbnQiLCJpc1RydXN0ZWQiLCJjaGVja1ZpcnVzZXMiLCJyZXN1bHRDYWxsYmFjayIsInJlbW92ZUNhbGxiYWNrIiwiaXNIYXJtZnVsIiwia2V5d29yZCIsIm9vZiIsIm5vX2NvbW1lbnRzIiwicmVnZXhwcyIsInJlZ2V4IiwiaGFzaFRvVXJsIiwiY2hlY2tIYXNoIiwiZ2V0Q3VycmVudFdlYkNvbnRlbnRzIiwidXNlckFnZW50IiwiX19wYXRoIiwiaXNGcm9tTG9hZGVyIiwiY3J5cHRvIiwiYWxsb2MiLCJjcmVhdGVSZWFkU3RyZWFtIiwiY2h1bmsiLCJjb25jYXQiLCJoYXNoUmVzdWx0IiwiZGlnZXN0IiwicmVuZGVyVG9FbGVtZW50cyIsImZsb3dlclN0YXJNb2R1bGUiLCJmbG93ZXJTdGFyQ29udGFpbmVyIiwiY2hpbGRNb2R1bGUiLCJjaGlsZENvbnRhaW5lciIsImJvcmRlckNvbG9yIiwibmV4dE5vZGUiLCJjb25maXJtVGV4dCIsImRhbmdlciIsIm9uQ2FuY2VsIiwib25Db25maXJtIiwic2hlbGwiLCJvcGVuRXh0ZXJuYWwiLCJ0b29sdGlwV3JhcCIsInZpZXdCb3giLCJ4IiwieSIsIm1hc2siLCJmaWxsIiwicG9pbnRlckV2ZW50cyIsIm9mZmljaWFsIiwic3BhbiIsImZsb2F0IiwiZmxvd2VyU3RhciIsImdldEtleWVkQXJyYXkiLCJidWZmZXIiLCJpbnN0YWxsUGF0aCIsImN1cnNvciIsInN0cm9rZSIsInNhdmUiLCJPYmplY3RTdG9yYWdlIiwibG9jYWxTdG9yYWdlTW9kdWxlIiwibG9jYWxTdG9yYWdlIiwiaW1wbCIsImJ0b2EiLCJzZXRJbnRlcnZhbCIsInNhZmVKU09OUGFyc2UiLCJhdG9iIiwiZ2VuZXJhdGVLZXkiLCJkZWNpcGhlciIsImRlY3J5cHRlZCIsImZpbmFsIiwiY2lwaGVyIiwiZW5jcnlwdGVkIiwiUGx1Z2luTW9kdWxlIiwibG9hZFBsdWdpbkRhdGEiLCJsb2FkIiwic2F2ZVBsdWdpbkRhdGEiLCJjaGFubmVsU3dpdGNoIiwic3RhcnRQbHVnaW4iLCJzdG9wUGx1Z2luIiwiZW5hYmxlUGx1Z2luIiwiZGlzYWJsZVBsdWdpbiIsInRvZ2dsZVBsdWdpbiIsInAiLCJmaWxlbmFtZU9yTmFtZSIsImJkcGx1Z2luIiwiZGVsZXRlIiwiZWRpdCIsIm9wZW5JdGVtIiwidXBkYXRlUGx1Z2luTGlzdCIsInNhdmVkIiwibmV3TWVzc2FnZSIsIm9uTWVzc2FnZSIsIm9uU3dpdGNoIiwicG9wb3V0V2luZG93Iiwid2luZG93cyIsIk1hcCIsInBvcG91dE1vZHVsZSIsImdldFdpbmRvdyIsInNldEltbWVkaWF0ZSIsImJkRXZlbnRzIiwicmVtb3ZlVGhlbWVzIiwiYXBwbHlUaGVtZXMiLCJ0aGVtZU5hbWUiLCJ0aGVtZSIsImV4aXN0aW5nIiwidW5lc2NhcGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJWMl9QdWJsaWNTZXJ2ZXJzIiwiX2FwcGVuZEJ1dHRvbiIsIkxheWVyIiwicm9vdElkIiwiVjJDX1B1YmxpY1NlcnZlcnMiLCJyb290IiwiX3Jvb3QiLCJpbmplY3RSb290IiwiY2xhc3NOYW1lTGF5ZXJzIiwibGF5ZXJzIiwiYnV0dG9uIiwiYnRuIiwiY2lyY2xlQnV0dG9uTWFzayIsImNsYXNzTmFtZXR1dG9yaWFsQ29udGFpbmVyIiwiZG93bmxvYWRQcm9ncmVzcyIsInR1dG9yaWFsQ29udGFpbmVyIiwiYWRkQnV0dG9uIiwiZ3VpbGRQYXRjaCIsIkd1aWxkTGlzdCIsIndlYnBhY2tNb2R1bGVzIiwiR3VpbGRMaXN0T2xkIiwicmVtb3ZlQnV0dG9uIiwiQkRTaWRlYmFySGVhZGVyIiwiUHVyZUNvbXBvbmVudCIsInNpZGViYXJDb21wb25lbnRzIiwiSGVhZGVyIiwiSXRlbSIsImNoYW5nZWxvZ0J1dHRvbiIsIkhpc3RvcnkiLCJyZW5kZXJlZCIsImlzQ2xlYXJpbmdDYWNoZSIsIlYyX1NldHRpbmdzUGFuZWwiLCJ1cGRhdGVTZXR0aW5ncyIsInNpZGViYXIiLCJWMl9TZXR0aW5nc1BhbmVsX1NpZGViYXIiLCJyZWdpc3RlckNvbXBvbmVudHMiLCJyZWdpc3RlciIsIm1ha2VDb21wb25lbnQiLCJsaWdodGNvcmRDb21wb25lbnQiLCJQcmVzZW5jZUNvbXBvbmVudCIsIkFjY291bnRJbmZvc0NvbXBvbmVudCIsIkFwaVByZXZpZXdDb21wb25lbnQiLCJjb3JlQ29tcG9uZW50IiwiY3VzdG9tQ3NzQ29tcG9uZW50IiwicmVuZGVyQWRkb25QYW5lIiwiY29yZVNldHRpbmdzIiwiZ2V0U2V0dGluZ3MiLCJjYXRlZ29yaWVzIiwiU2V0Iiwic2VjdGlvbnMiLCJsaWdodGNvcmRTZXR0aW5ncyIsIlByZXNlbmNlU2V0dGluZ3MiLCJjaGVja2VkIiwicHVibGljU2VydmVyc01vZHVsZSIsInZvaWNlTW9kZSIsInRmSG91ciIsImNvbG9yZWRUZXh0IiwiZE1vZGUiLCJTZXR0aW5ncyIsImRldk1vZGUiLCJmb3JjZVVwZGF0ZSIsImNhbGxSaW5naW5nQmVhdCIsInNldHRpbmdzU3RvcmUiLCJzaG93Q3VycmVudEdhbWUiLCJ1cGRhdGVSZW1vdGVTZXR0aW5ncyIsImdldEN1cnJlbnRXaW5kb3ciLCJzZXRBbHdheXNPblRvcCIsIkFudGlBZERNIiwiYmx1clByaXZhdGUiLCJkaXNhYmxlVHlwaW5nIiwiYXBwU2V0dGluZ3MiLCJyZWxhdW5jaCIsImV4aXQiLCJjb3JlIiwiTm90aWZpY2F0aW9uc1VzZVNoaW0iLCJTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIiwiTWFyZ2luVG9wIiwiaXNDaGVja2VkIiwiU3dpdGNoIiwiQ29tcG9uZW50cyIsImlucHV0cyIsIkJ1dHRvbiIsImxvb2siLCJob3ZlckNvbG9yIiwiaXBjIiwic2VuZCIsImFyZ3YiLCJxdWl0Iiwic2Vzc2lvbiIsImNsZWFyQ2FjaGUiLCJWMkNfUHJlc2VuY2VTZXR0aW5ncyIsIlYyQ19BY2NvdW50SW5mb3MiLCJBcGlQcmV2aWV3IiwiQ3NzRWRpdG9yIiwiQ29udGVudExpc3QiLCJDb21wb25lbnQiLCJvcmlnaW5hbFJlbmRlciIsImVudW1lcmFibGUiLCJDYXJkTGlzdCIsIlNldHRpbmdDb21wb25lbnQiLCJwYW5lbHMiLCJwYW5lbCIsImdldENvbXBvbmVudCIsIkxDaXRlbXMiLCJMQ0Rldkl0ZW1zIiwiVGhlbWVNb2R1bGUiLCJsb2FkVGhlbWVEYXRhIiwic2F2ZVRoZW1lRGF0YSIsImVuYWJsZVRoZW1lIiwiZGlzYWJsZVRoZW1lIiwidG9nZ2xlVGhlbWUiLCJiZHRoZW1lIiwidXBkYXRlVGhlbWVMaXN0IiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJ0cmFuc3BhcmVudCIsImZyYW1lIiwiY2hhckNvZGVBdCIsImdldFRleHRBcmVhIiwiY2hhbm5lbFRleHRBcmVhIiwidGl0bGVXcmFwcGVyIiwiaW5zZXJ0VGV4dCIsInRleHRhcmVhIiwiZm9jdXMiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsImV4ZWNDb21tYW5kIiwibW9kdWxlTmFtZSIsImdyb3VwQ29sbGFwc2VkIiwiZ3JvdXBFbmQiLCJmb3JtYXRTdHJpbmciLCJzdHJpbmciLCJyZXBsYWNlbWVudCIsImVzY2FwZSIsInBhcmFtcyIsImluc3RlYWQiLCJzaWxlbnQiLCJmb3JjZSIsIm9yaWdNZXRob2QiLCJjYW5jZWxlZCIsImNhbmNlbFBhdGNoIiwib3JpZ2luYWxNZXRob2QiLCJjYWxsT3JpZ2luYWxNZXRob2QiLCJ0ZW1wUmV0IiwiX19tb25rZXlQYXRjaGVkIiwiZGlzY29ubmVjdCIsImhhc05vdGljZSIsImZvcm0iLCJib3R0b20iLCJ0b2FzdFdyYXBwZXIiLCJpY29uIiwidGltZW91dCIsInRvYXN0RWxlbSIsImlubmVyVGV4dCIsIm1vZGFsTW9kdWxlIiwiaGlkZU9uRnVsbHNjcmVlbiIsImhlYWRlck1vZHVsZSIsImhlYWRlciIsImZvb3RlcjJNb2R1bGUiLCJmb2N1c0xvY2siLCJiYWNrZHJvcCIsImJhY2tkcm9wV2l0aExheWVyIiwiY2xvc2luZ0xpc3RlbmVycyIsInBsdWdpbkVycm9ycyIsInRoZW1lRXJyb3JzIiwiZ2VuZXJhdGVUYWIiLCJ0YWJzIiwiTW9kYWxTdGFjayIsIkNoYW5nZWxvZ0NsYXNzZXMiLCJUZXh0RWxlbWVudCIsIkZsZXhDaGlsZCIsIlRpdGxlcyIsIkNoYW5nZWxvZyIsImRlZmF1bHRQcm9wcyIsInNlbGVjdGFibGUiLCJNYXJrZG93blBhcnNlciIsImltYWdlIiwic3VidGl0bGUiLCJjZSIsImNoYW5nZWxvZ0l0ZW1zIiwiZW50cnkiLCJtYXJnaW4iLCJyZW5kZXJIZWFkZXIiLCJDaGlsZCIsImdyb3ciLCJzaHJpbmsiLCJ0YWciLCJUYWdzIiwiSDQiLCJTaXplcyIsIlNNQUxMIiwiQ29sb3JzIiwiU1RBTkRBUkQiLCJkYXRlIiwicmVuZGVyRm9vdGVyIiwiQW5jaG9yQ2xhc3NlcyIsImFuY2hvciIsImFuY2hvclVuZGVybGluZU9uSG92ZXIiLCJqb2luU3VwcG9ydFNlcnZlciIsImpvaW5CRDIiLCJzdXBwb3J0TGluayIsImRlZmF1bHRGb290ZXIiLCJvblNjcm9sbCIsIk1vZGFsQWN0aW9ucyIsIk1hcmtkb3duIiwiQ29uZmlybWF0aW9uTW9kYWwiLCJlbXB0eUZ1bmN0aW9uIiwib3Blbk1vZGFsIiwicmVkIiwibW9kYWxLZXkiLCJWMiIsImVkaXRvckRldGFjaGVkIiwicmVxIiwid2VicGFja0pzb25wIiwiX19leHRyYV9pZF9fIiwic2hvdWxkUHJvdGVjdCIsInRoZU1vZHVsZSIsImNsZWFyIiwic29ydCIsImdldFRva2VuIiwiZ2V0RW1haWwiLCJzaG93VG9rZW4iLCJwcm90ZWN0IiwiaXNEZWZhdWx0IiwibW9kIiwicHJveHkiLCJmdW5jIiwiX19wcm90b19fIiwicHJvcE5hbWVzIiwicHJvdG9OYW1lcyIsInByb3RvUHJvcCIsImludGVybmFsIiwiam9pbkJEMSIsIkludml0ZUFjdGlvbnMiLCJhY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsIiwibGVhdmVCRDEiLCJHdWlsZEFjdGlvbnMiLCJsZWF2ZUd1aWxkIiwibGVhdmVCRDIiLCJqb2luTEMiLCJsZWF2ZUxDIiwicmVhY3RDb21wb25lbnQiLCJhbmNob3JDbGFzc2VzIiwic2xhdGVFZGl0b3JDbGFzc2VzIiwibWVzc2FnZUNsYXNzZXMiLCJ1bnJlYWRNZW50aW9uc0JhciIsImd1aWxkc0Vycm9yIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJUb29sdGlwV3JhcHBlciIsIlRvb2x0aXBzIiwiaGlkZSIsInNob3ciLCJzdWJtaXQiLCJhY3RpdmF0ZVJhZ2luZ0RlbW9uIiwiZGlzbWlzcyIsIktleUdlbmVyYXRvciIsIkxheWVyU3RhY2siLCJVc2VyU3RvcmUiLCJDaGFubmVsU3RvcmUiLCJDaGFubmVsQWN0aW9ucyIsIlByaXZhdGVDaGFubmVsQWN0aW9ucyIsIm9wZW5ETSIsInVzZXJJZCIsInNlbGZJZCIsInByaXZhdGVDaGFubmVsSWQiLCJnZXRETUZyb21Vc2VySWQiLCJzZWxlY3RQcml2YXRlQ2hhbm5lbCIsIm9wZW5Qcml2YXRlQ2hhbm5lbCIsInBhcnNlU2V0dGluZ3MiLCJWb2ljZU1vZGUiLCJtYXJnaW5Nb2R1bGUyIiwiZGVmYXVsdE1hcmdpbmg1IiwiY29sb3JNb2R1bGUiLCJjb2xvclN0YW5kYXJkIiwic2l6ZU1vZHVsZSIsInNjcm9sbGJhck1vZHVsZTEiLCJzY3JvbGxiYXJHaG9zdEhhaXJsaW5lIiwiR3VpbGRNb2R1bGUiLCJnZXRSZWxhdGlvbnNoaXBzIiwic2Vzc2lvbk1vZHVsZSIsImdldFNlc3Npb25zIiwic2l6ZTE0IiwiaDUiLCJnZXRQcm9maWxlVmFsdWUiLCJnZXRTdGF0aXN0aWNzIiwiZ2V0U2Vzc2lvblZhbHVlIiwibWFyZ2luQm90dG9tMjAiLCJzZXNzaW9uc1JhdyIsInNlc3Npb25zIiwic2Vzc2lvbklkIiwiY2xpZW50SW5mbyIsIm9zIiwiY2xpZW50IiwiYWN0aXZpdGllcyIsInJlcGVhdCIsImNyZWF0ZWRBdCIsImF2YXRhclVSTCIsImF2YXRhciIsImdldEF2YXRhclVSTCIsImdldERhdGUiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImZsYWdzIiwiaGFzUHJlbWl1bVN1YnNjcmlwdGlvbiIsImVtYWlsIiwibWZhRW5hYmxlZCIsIm1vYmlsZSIsInBob25lIiwidmVyaWZpZWQiLCJuc2Z3QWxsb3dlZCIsInJlbGF0aW9ucyIsImZyaWVuZHMiLCJpc0ZyaWVuZCIsImlzQmxvY2tlZCIsImhpZ2h0bGlnaHRKUyIsImhpZ2hsaWdodCIsIm1lc3NhZ2VNb2R1bGUxIiwibWVzc2FnZU1vZHVsZTIiLCJDb2RlQ29udGVudCIsIl9faHRtbCIsImxhbmd1YWdlIiwibWFyZ2luQm90dG9tOCIsImZvcm1Nb2R1bGUiLCJzdGF0ZXMiLCJGb3JtU2VjdGlvbiIsImFsbENvbXBvbmVudHMiLCJjb21wIiwiY29tcE5hbWUiLCJjb21wUGF0aCIsInJlbmRlcnMiLCJDb21wb25lbnRQcmV2aWV3IiwidGFiIiwiQWxsUHJldmlld3MiLCJnZXRQcm9wcyIsInJlbmRlclByZXZpZXciLCJiYWNrZ3JvdW5kQ29sb3IiLCJwYWRkaW5nIiwiYm9yZGVyUmFkaXVzIiwicmVuZGVyQ29kZSIsImdlbmVyYXRlQ29kZSIsImdldFN0ckZvclByb3AiLCJsYW5nIiwiU3RyaW5nIiwiJCR0eXBlb2YiLCJTeW1ib2wiLCJmb3IiLCJjb21wQ2F0ZWdvcnkiLCJwcm9wU3RyaW5ncyIsImNoaWxkcmVuUHJvcCIsInN0ciIsIm9wZW5UYWciLCJjbG9zZVRhZyIsInZpc2libGVLZXkiLCJwcm9wT2JqZWN0IiwiaXNMYXN0IiwiaXNGaXJzdCIsImNoaWxkcmVuRGF0YSIsImhlbHAiLCJzdWNjZXNzIiwic2V0U3RhdGUiLCJtYXJnaW5Cb3R0b20iLCJWMkNfUGx1Z2luQ2FyZCIsInNob3dTZXR0aW5ncyIsInNldEluaXRpYWxTdGF0ZSIsImhhc1NldHRpbmdzIiwiYWRkb24iLCJnZXRTZXR0aW5nc1BhbmVsIiwicmVsb2FkcyIsInRydXN0ZWQiLCJjbG9zZVNldHRpbmdzIiwicGFuZWxSZWYiLCJzZXR0aW5nc09wZW4iLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWZzIiwic2V0dGluZ3NwYW5lbCIsImlzSGlkZGVuIiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsImNhcmROb2RlIiwidGhpc05vZGVPZmZzZXQiLCJjb250YWluZXJPZmZzZXQiLCJlbmRQb2ludCIsImdldFN0cmluZyIsInNldHRpbmdzQ29tcG9uZW50IiwicmVmIiwiWFN2ZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiYnVpbGRUaXRsZSIsIm5hbWVJbmRleCIsInZlcnNpb25JbmRleCIsImF1dGhvckluZGV4IiwicG9wTGF5ZXIiLCJtYWtlTGluayIsIm1ha2VCdXR0b24iLCJhY3Rpb24iLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInVubW91bnRlZCIsImxpbmtzIiwiaW52aXRlIiwidGVzdGVyIiwiZG9uYXRlIiwicGF0cmVvbiIsImF1dGhvcklkIiwiYXV0aG9yTGluayIsImlzU2Nhbm5pbmciLCJUb29sdGlwIiwiYXNjZW5kaW5nIiwiaXNQbHVnaW5zIiwicmV2ZXJzZSIsIm9uQWRkb25DaGFuZ2VzIiwiY29tcG9uZW50RGlkTW91bnQiLCJvcGVuRm9sZGVyIiwib3BlblBhdGgiLCJzaG91bGREZWxldGUiLCJjb25maXJtRGVsZXRlIiwic29ydE9wdGlvbnMiLCJkaXJlY3Rpb25zIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJnZXRBZGRvbnMiLCJzb3J0ZWRBZGRvbnMiLCJiIiwiY2FwIiwiZmlyc3QiLCJzZWNvbmQiLCJsb2NhbGVDb21wYXJlIiwicmVuZGVyQ2hlY2tVcGRhdGVzIiwiWmVyZXNQbHVnaW5MaWJyYXJ5IiwiUGx1Z2luVXBkYXRlcyIsImNoZWNrQWxsIiwidG9vbHRpcElzU2hvd2luZyIsInRvb2x0aXAiLCJtYXJnaW5MZWZ0IiwiY2hlY2tVcGRhdGVCdXR0b24iLCJFbXVsYXRlZFRvb2x0aXAiLCJhdHRhY2hFdmVudHMiLCJyZWZyZXNoSWNvbiIsImFkZG9uQ2FyZHMiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwib3BhY2l0eSIsIlYyQ19DaGVja2JveCIsImNoZWNrYm94RWxlbWVudCIsImNoZWNrYm94IiwiY2hlY2tib3hJbm5lciIsIlNlbGVjdCIsImRyb3Bkb3duIiwiY3JlYXRlUmVmIiwic2hvd01lbnUiLCJoaWRlTWVudSIsIm9wdCIsImlzT3BlbiIsIlNlYXJjaCIsIm9uS2V5RG93biIsInBsYWNlaG9sZGVyIiwic3dpdGNoIiwiVjJDX0NvbnRlbnRDb2x1bW4iLCJjb250ZW50TW9kdWxlIiwiY29udGVudENvbHVtbiIsImNvbnRlbnRDb2x1bW5EZWZhdWx0IiwiVjJDX0Nzc0VkaXRvciIsImxpbmVzIiwiZGV0YWNoZWRFZGl0b3IiLCJWMkNfQ3NzRWRpdG9yRGV0YWNoZWQiLCJ1cGRhdGVDc3MiLCJzYXZlQ3NzIiwiZGV0YWNoIiwiZGV0YWNoZWQiLCJlZGl0b3IiLCJhY2UiLCJzZXRUaGVtZSIsInNldE1vZGUiLCJzZXRTaG93UHJpbnRNYXJnaW4iLCJzZXRGb250U2l6ZSIsImRlc3Ryb3kiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwiZGV0YWNoZWRSb290IiwiY29kZU1pcnJvciIsImxpbmVOdW1iZXJzIiwibW9kZSIsImluZGVudFVuaXQiLCJzY3JvbGxiYXJTdHlsZSIsIl9jY3NzIiwiY2NzcyIsInVwZGF0ZUxpbmVDb3VudCIsImxpbmVDb3VudCIsIlNldHRpbmdzVGl0bGUiLCJDaGVja2JveCIsImJvcmRlclJpZ2h0IiwiYm9yZGVyTGVmdCIsImZvbnRTaXplIiwiYXJnIiwiZ2V0VmFsdWUiLCJkcm9vdCIsImluamVjdERldGFjaGVkUm9vdCIsIkJERXJyb3JCb3VuZGFyeSIsImhhc0Vycm9yIiwiY29tcG9uZW50RGlkQ2F0Y2giLCJEZWxldGUiLCJEb3duQXJyb3ciLCJFZGl0IiwibWFyZ2luTW9kdWxlIiwibWFyZ2luVG9wNjAiLCJWMkNfUHJlc2VuY2VTZXR0aW5nc01vZHVsZXMiLCJwcmV2aWV3IiwiaXNmZXRjaGluZyIsImFzc2V0Q29tcG9uZW50cyIsInVwZGF0ZVdoZW5GZXRjaGVkIiwiZGVmYXVsdFNldHRpbmciLCJSUENQcm9wcyIsImFzc2V0IiwidXBkYXRlUHJldmlldyIsIm9wdGlvbnNDb21wb25lbnRzIiwib2hnb2RvaGZ1Y2siLCJfb3B0aW9uc0NvbXBvbmVudHMiLCJhcnJheSIsImlucHV0VGV4dE1vZHVsZXMiLCJJbnB1dFRleHQiLCJyZW1vdmVLZXliaW5kIiwiX2hvcml6b250YWwiLCJpbnB1dE1pbmkiLCJzaXplMTYiLCJzaXplMjAiLCJpbnB1dCIsImxhc3RFZGl0ZWQiLCJpc1RpbWluZyIsInJvd01vZHVsZSIsImZsZXhNb2R1bGUiLCJpbnB1dE1vZHVsZSIsInNpemVNb2R1bGUyIiwicm93IiwiZmxleENoaWxkIiwiSW5wdXROdW1iZXJNb2R1bGVzIiwiSW5wdXROdW1iZXIiLCJjb2xvclRyYW5zcGFyZW50Iiwic2V0VmFsdWUiLCJjbGlwYm9hcmQiLCJJbnB1dENob2ljZU1vZHVsZXMiLCJJbnB1dENob2ljZSIsIkRpdmlkZXJNb2R1bGVzIiwiRGl2aWRlciIsImRpdmlkZXIiLCJkaXZpZGVyRGVmYXVsdCIsIkRpc2NvcmRCdXR0b24iLCJScGNQcmV2aWV3IiwiYWN0aXZlIiwiY2hhbmdlVGFiIiwiYW5jaWVudFRhYiIsInNldEFjdGl2ZSIsImZsZXgiLCJycGMiLCJpc0FjdGl2ZSIsIlByb2ZpbGUiLCJQb3BvdXQiLCJUYWIiLCJlbXB0eUNsYXNzZXMiLCJQcmVzZW5jZUVycm9yQ2F0Y2hlciIsImVyckluZm8iLCJlbXB0eVN0YXRlSW1hZ2UiLCJlbXB0eVN0YXRlIiwiZW1wdHlTdGF0ZUhlYWRlciIsImVtcHR5U3RhdGVTdWJ0ZXh0IiwicG9wb3V0TW9kdWxlcyIsIlVzZXJQb3BvdXRDb21wb25lbnQiLCJQb3BvdXRQcm9wcyIsIlVzZXJQb3BvdXQiLCJyZW5kZXIxIiwiY2hhbm5lbElkIiwiZGlzYWJsZVVzZXJQcm9maWxlTGluayIsIl9Vc2VyUG9wb3V0IiwicG9wb3V0IiwiZXhjbHVkZVByb3BlcnRpZXMiLCJwcm9maWxlTW9kdWxlcyIsIlVzZXJQcm9maWxlQ29tcG9uZW50IiwiUHJvZmlsZVByb3BzIiwiY29ubmVjdGVkUHJvZmlsZVN0b3JlIiwiVXNlclByb2ZpbGUiLCJyZW5kZXIyIiwicmVuZGVyMyIsInJlbmRlcjQiLCJwcm9maWxlIiwiVjJDX0xheWVyIiwia2V5dXBMaXN0ZW5lciIsInRyYW5zZm9ybSIsImNvbXBvbmVudFdpbGxNb3VudCIsImNoYW5nZUNhdGVnb3J5Iiwic2VhcmNoS2V5RG93biIsImNoZWNrQ29ubmVjdGlvbiIsImNvbm5lY3QiLCJHdWlsZFN0b3JlIiwiQXZhdGFyRGVmYXVsdHMiLCJTb3J0ZWRHdWlsZFN0b3JlIiwic2VsZWN0ZWRDYXRlZ29yeSIsImxvYWRpbmciLCJzZXJ2ZXJzIiwiY29ubmVjdGlvbiIsImZldGNoIiwic2VydmVyIiwiam9pbmVkIiwiZW5kIiwidGVybSIsImNhdGVnb3J5QnV0dG9ucyIsInRvdGFsIiwic2J2IiwiY29udGVudFNjcm9sbGVyIiwic2VydmVyQ2FyZCIsInBpbm5lZCIsImFjY2VwdEludml0ZSIsImludml0ZV9jb2RlIiwiam9pbkVuZFBvaW50IiwiaWRlbnRpZmllciIsImNyZWRlbnRpYWxzIiwid2luZG93T3B0aW9ucyIsInJvdW5kIiwic2NyZWVuWCIsInNjcmVlblkiLCJqb2luV2luZG93IiwiQnJvd3NlcldpbmRvdyIsIndlYkNvbnRlbnRzIiwibG9hZFVSTCIsInJlc2l6YWJsZSIsIm1heGltaXphYmxlIiwibWluaW1pemFibGUiLCJhbHdheXNPblRvcCIsImNlbnRlciIsIndlYlByZWZlcmVuY2VzIiwibm9kZUludGVncmF0aW9uIiwiYmRTZXJ2ZXIiLCJvbmxpbmUiLCJtZW1iZXJzIiwiaWNvblVybCIsIm5hdGl2ZWpvaW4iLCJzZXJ2ZXIyIiwiZ3VpbGRMaXN0IiwiZ2V0RmxhdHRlbmVkR3VpbGRJZHMiLCJkZWZhdWx0TGlzdCIsIkRFRkFVTFRfQVZBVEFSUyIsIlNlcnZlckNhcmQiLCJmYWxsYmFjayIsImZsb29yIiwiY29ubmVjdEVuZFBvaW50IiwicmVzcG9uc2UiLCJTaWRlYmFyVmlldyIsInRvb2xzIiwiVG9vbHMiLCJUYWJCYXJTZXBhcmF0b3IiLCJzZWFyY2hJbnB1dCIsIlRhYkJhckhlYWRlciIsIlRhYkJhckl0ZW0iLCJtYXhMZW5ndGgiLCJzZWFyY2hpbnB1dCIsIm5vdENvbm5lY3RlZCIsImNvbHVtbk1vZHVsZSIsIm1pbkhlaWdodCIsImxpbmVIZWlnaHQiLCJWMkNfU2VydmVyQ2FyZCIsImltYWdlRXJyb3IiLCJjYXJkTW9kdWxlIiwiY2FyZCIsImNhcmRQcmltYXJ5IiwiX2hvcml6b250YWxSZXZlcnNlIiwid3JhcE1vZHVsZSIsIm5vV3JhcCIsInN0cmVhbWVyTW9kZUVuYWJsZWQiLCJvbkVycm9yIiwiaGFuZGxlRXJyb3IiLCJkcmFnZ2FibGUiLCJob3Jpem9udGFsIiwiVjJDX1NpZGViYXJWaWV3IiwiU2Nyb2xsZXIiLCJmYWRlIiwiZGFyayIsIlYyQ19SZWxvYWRJY29uIiwieG1sbnMiLCJWMkNfU2Nyb2xsZXIiLCJzY3JvbGxlck1vZHVsZTEiLCJzY3JvbGxlckhvcml6b250YWwiLCJzY3JvbGxlck1vZHVsZTIiLCJzaWRlYmFyUmVnaW9uU2Nyb2xsZXIiLCJ3cmFwcGVyQ2xhc3MiLCJzY3JvbGxlckZhZGUiLCJzY3JvbGxlckNsYXNzIiwiY29udGVudFJlZ2lvblNjcm9sbGVyIiwiY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcCIsInRoZW1lR2hvc3QiLCJzY3JvbGxlclRyYWNrIiwiVjJDX1NlY3Rpb25lZFNldHRpbmdzUGFuZWwiLCJTZXR0aW5nc0dyb3VwIiwiVjJDX1NldHRpbmdzR3JvdXAiLCJidXR0b25Db21wb25lbnQiLCJWMkNfU2V0dGluZ3NUaXRsZSIsImNsYXNzbmFtZXMiLCJnZXRDbGFzc05hbWUiLCJTd2l0Y2hJdGVtIiwiYmV0YSIsInVzZXJTZXR0aW5nc1ZvaWNlIiwiVjJDX1RhYkJhckhlYWRlciIsIlYyQ19UYWJCYXJJdGVtIiwiVjJDX1RhYkJhclNlcGFyYXRvciIsIlYyQ19Ub29scyIsInRvb2xzTW9kdWxlIiwidG9vbHNDb250YWluZXIiLCJjb250YWluZXJNb2R1bGUiLCJjbG9zZUJ1dHRvbiIsImNsb3NlQnV0dG9uQm9sZCIsImtleWJpbmQiLCJrZXliaW5kQm9sZCIsIlRvb2x0aXBDbGFzc2VzIiwiZ2V0VG9vbHRpcENsYXNzZXMiLCJUb29sdGlwTGF5ZXJzIiwiZ2V0VG9vbHRpcExheWVycyIsImdldENsYXNzIiwic2lkZU9yQ29sb3IiLCJ1cHBlckNhc2UiLCJ0b29sdGlwQ2xhc3MiLCJjbGFzc0V4aXN0cyIsInRvUHgiLCJwcmV2ZW50RmxpcCIsInRvb2x0aXBFbGVtZW50IiwibGFiZWxFbGVtZW50IiwidG9vbHRpcENvbnRlbnQiLCJwb2ludGVyRWxlbWVudCIsInRvb2x0aXBQb2ludGVyIiwicG9wb3V0cyIsImNhblNob3dBYm92ZSIsImNhblNob3dCZWxvdyIsImNhblNob3dMZWZ0IiwiY2FuU2hvd1JpZ2h0IiwiX2NsYXNzTmFtZSIsInNob3dBYm92ZSIsInNob3dCZWxvdyIsInNob3dMZWZ0Iiwic2hvd1JpZ2h0IiwiY2VudGVySG9yaXpvbnRhbGx5IiwiY2VudGVyVmVydGljYWxseSIsIm5vZGVjZW50ZXIiLCJmaW5kRE9NTm9kZSIsIlYyQ19YU3ZnIl0sIm1hcHBpbmdzIjoiOztRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFD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REcsRUFFSDtBQUFDNHFELFdBQUssRUFBRSw0QkFBUjtBQUFzQzN1QixhQUFPLEVBQUUsV0FBL0M7QUFBNERocEIsV0FBSyxFQUFFO0FBQUNxVCxhQUFLLEVBQUUsTUFBUjtBQUFnQjJNLGNBQU0sRUFBRTtBQUF4QjtBQUFuRSxLQUZHLEVBR0huMEIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVduakIsYUFBWCxDQUNJLEdBREosRUFFSTtBQUFDQyxlQUFTLEVBQUUsWUFBWjtBQUEwQm84QixVQUFJLEVBQUUsTUFBaEM7QUFBd0N3ZixjQUFRLEVBQUU7QUFBbEQsS0FGSixFQUdJLzhDLG1EQUFJLENBQUNxa0IsS0FBTCxDQUFXbmpCLGFBQVgsQ0FBeUIsTUFBekIsRUFBaUM7QUFBQzg0QixPQUFDLEVBQUU7QUFBSixLQUFqQyxDQUhKLEVBSUloNkIsbURBQUksQ0FBQ3FrQixLQUFMLENBQVduakIsYUFBWCxDQUF5QixNQUF6QixFQUFpQztBQUFDQyxlQUFTLEVBQUUsTUFBWjtBQUFvQm84QixVQUFJLEVBQUUsU0FBMUI7QUFBcUN2RCxPQUFDLEVBQUU7QUFBeEMsS0FBakMsQ0FKSixDQUhHLENBQVA7QUFVSDs7QUFoQnFELEM7Ozs7Ozs7Ozs7O0FDRjFELG1DOzs7Ozs7Ozs7OztBQ0FBLHFDOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLCtCOzs7Ozs7Ozs7OztBQ0FBLG1DOzs7Ozs7Ozs7OztBQ0FBLHVDOzs7Ozs7Ozs7OztBQ0FBLGlDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJleHBvcnQgY29uc3QgbWluaW11bURpc2NvcmRWZXJzaW9uID0gXCIwLjAuMzA2XCI7XHJcbmV4cG9ydCBjb25zdCBjdXJyZW50RGlzY29yZFZlcnNpb24gPSAod2luZG93LkRpc2NvcmROYXRpdmUgJiYgd2luZG93LkRpc2NvcmROYXRpdmUucmVtb3RlQXBwICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uICYmIHdpbmRvdy5EaXNjb3JkTmF0aXZlLnJlbW90ZUFwcC5nZXRWZXJzaW9uKCkpIHx8IFwiMC4wLjMwNlwiO1xyXG5leHBvcnQgY29uc3QgbWluU3VwcG9ydGVkVmVyc2lvbiA9IFwiMC4zLjBcIjtcclxuZXhwb3J0IGNvbnN0IGJiZFZlcnNpb24gPSBcIjAuMy41XCI7XHJcbmV4cG9ydCBjb25zdCBiYmRDaGFuZ2Vsb2cgPSB7XHJcbiAgICBkZXNjcmlwdGlvbjogXCJCaWcgdGhpbmdzIGFyZSBjb21pbmcuXCIsXHJcbiAgICBjaGFuZ2VzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogXCJCdWcgRml4ZXNcIixcclxuICAgICAgICAgICAgdHlwZTogXCJmaXhlZFwiLFxyXG4gICAgICAgICAgICBpdGVtczogW1xyXG4gICAgICAgICAgICAgICAgXCJTb21lIGZpeGVzIHJlbGF0ZWQgdG8gc2hvd2luZyBtb2RhbHMgaW4gdGhlIGBCZEFwaWAuXCIsXHJcbiAgICAgICAgICAgICAgICBcIkZpeGVkIHRoZSBvcGVuIGZvbGRlciBidXR0b25zIGZvciBwbHVnaW5zIGFuZCB0aGVtZXNcIlxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzID0ge1xyXG4gICAgXCJDdXN0b20gY3NzIGxpdmUgdXBkYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0wXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJDdXN0b20gY3NzIGF1dG8gdWRwYXRlXCI6ICAgICB7aWQ6IFwiYmRhLWNzcy0xXCIsIGluZm86IFwiXCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogdHJ1ZSwgIGNhdDogXCJjb3JlXCJ9LFxyXG4gICAgXCJCZXR0ZXJEaXNjb3JkIEJsdWVcIjogICAgICAgICB7aWQ6IFwiYmRhLWdzLWJcIiwgIGluZm86IFwiUmVwbGFjZSBEaXNjb3JkIGJsdWUgd2l0aCBCRCBCbHVlXCIsICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZDogZmFsc2UsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwifSxcclxuXHJcbiAgICAvKiBDb3JlICovXHJcbiAgICAvKiA9PT09PT0gKi9cclxuICAgIFwiUHVibGljIFNlcnZlcnNcIjogICAgICAgICAgICAge2lkOiBcImJkYS1ncy0xXCIsICBpbmZvOiBcIkRpc3BsYXkgcHVibGljIHNlcnZlcnMgYnV0dG9uXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJNaW5pbWFsIE1vZGVcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTJcIiwgIGluZm86IFwiSGlkZSBlbGVtZW50cyBhbmQgcmVkdWNlIHRoZSBzaXplIG9mIGVsZW1lbnRzLlwiLCAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIE1vZGVcIjogICAgICAgICAgICAgICAgIHtpZDogXCJiZGEtZ3MtNFwiLCAgaW5mbzogXCJPbmx5IHNob3cgdm9pY2UgY2hhdFwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiSGlkZSBDaGFubmVsc1wiOiAgICAgICAgICAgICAge2lkOiBcImJkYS1ncy0zXCIsICBpbmZvOiBcIkhpZGUgY2hhbm5lbHMgaW4gbWluaW1hbCBtb2RlXCIsICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJEYXJrIE1vZGVcIjogICAgICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTVcIiwgIGluZm86IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdCh3aXApXCIsICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIlZvaWNlIERpc2Nvbm5lY3RcIjogICAgICAgICAgIHtpZDogXCJiZGEtZGMtMFwiLCAgaW5mbzogXCJEaXNjb25uZWN0IGZyb20gdm9pY2Ugc2VydmVyIHdoZW4gY2xvc2luZyBEaXNjb3JkXCIsIGltcGxlbWVudGVkOiB0cnVlLCAgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwibW9kdWxlc1wifSxcclxuICAgIFwiMjQgSG91ciBUaW1lc3RhbXBzXCI6ICAgICAgICAge2lkOiBcImJkYS1ncy02XCIsICBpbmZvOiBcIlJlcGxhY2UgMTJociB0aW1lc3RhbXBzIHdpdGggcHJvcGVyIG9uZXNcIiwgICAgICAgICAgaW1wbGVtZW50ZWQ6IHRydWUsICBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJtb2R1bGVzXCJ9LFxyXG4gICAgXCJDb2xvcmVkIFRleHRcIjogICAgICAgICAgICAgICB7aWQ6IFwiYmRhLWdzLTdcIiwgIGluZm86IFwiTWFrZSB0ZXh0IGNvbG9yIHRoZSBzYW1lIGFzIHJvbGUgY29sb3JcIiwgICAgICAgICAgICBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcbiAgICBcIk5vcm1hbGl6ZSBDbGFzc2VzXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTRcIiwgaW5mbzogXCJBZGRzIHN0YWJsZSBjbGFzc2VzIHRvIGVsZW1lbnRzIHRvIGhlbHAgdGhlbWVzLiAoZS5nLiBhZGRzIC5kYS1jaGFubmVscyB0byAuY2hhbm5lbHMtSWUybDZBKVwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcIm1vZHVsZXNcIn0sXHJcblxyXG4gICAgLyogQ29udGVudCAqL1xyXG4gICAgXCJDb250ZW50IEVycm9yIE1vZGFsXCI6ICAgICAgICB7aWQ6IFwiZm9yay1wcy0xXCIsIGluZm86IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiU2NhbiBQbHVnaW5zXCI6ICAgICAgICAgICAgICAge2lkOiBcImZvcmstcHMtNlwiLCBpbmZvOiBcIlNjYW4gcGx1Z2lucyBmb3IgYW55IHRocmVhdCB0aGF0IGNhbiBiZSBoaWRkZW4gaW5zaWRlLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJTaG93IFRvYXN0c1wiOiAgICAgICAgICAgICAgICB7aWQ6IFwiZm9yay1wcy0yXCIsIGluZm86IFwiU2hvd3MgYSBzbWFsbCBub3RpZmljYXRpb24gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvblwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImNvcmVcIiwgY2F0ZWdvcnk6IFwiY29udGVudCBtYW5hZ2VyXCJ9LFxyXG4gICAgXCJTY3JvbGwgVG8gU2V0dGluZ3NcIjogICAgICAgICB7aWQ6IFwiZm9yay1wcy0zXCIsIGluZm86IFwiQXV0by1zY3JvbGxzIHRvIGEgcGx1Z2luJ3Mgc2V0dGluZ3Mgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgKG9ubHkgaWYgb3V0IG9mIHZpZXcpXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwiY29yZVwiLCBjYXRlZ29yeTogXCJjb250ZW50IG1hbmFnZXJcIn0sXHJcbiAgICBcIkF1dG9tYXRpYyBMb2FkaW5nXCI6ICAgICAgICAgIHtpZDogXCJmb3JrLXBzLTVcIiwgaW5mbzogXCJBdXRvbWF0aWNhbGx5IGxvYWRzLCByZWxvYWRzLCBhbmQgdW5sb2FkcyBwbHVnaW5zIGFuZCB0aGVtZXNcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiRW5hYmxlIEVkaXQgQnV0dG9uXCI6ICAgICAgICAge2lkOiBcImZvcmstcHMtN1wiLCBpbmZvOiBcIkVuYWJsZSBhbiBFZGl0IEJ1dHRvbiBvbiB0aGUgcGx1Z2luIGFuZCB0aGVtZSBwYW5lbC5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwifSxcclxuICAgIFwiVGhlbWVzIGluIFBvcG91dCBXaW5kb3dcIjogICAge2lkOiBcImxpZ2h0Y29yZC05XCIsIGluZm86IFwiRW5hYmxlIHRoZW1lcyBpbiBQb3BvdXQgV2luZG93LiAoRm9yIGV4YW1wbGUsIHdoZW4gZGV0YWNoaW5nIHNjcmVlbnNoYXJlLilcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImNvbnRlbnQgbWFuYWdlclwiLCBleHBlcmltZW50YWw6IHRydWV9LFxyXG5cclxuICAgIC8qIERldmVsb3BlciAqL1xyXG4gICAgXCJEZXZlbG9wZXIgTW9kZVwiOiAgICAgICAgIFx0ICB7aWQ6IFwiYmRhLWdzLThcIiwgaW5mbzogXCJEZXZlbG9wZXIgTW9kZSBUb2dnbGVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuICAgIFwiQ29weSBTZWxlY3RvclwiOlx0XHRcdCAge2lkOiBcImZvcmstZG0tMVwiLCBpbmZvOiBcIkFkZHMgYSBcXFwiQ29weSBTZWxlY3RvclxcXCIgb3B0aW9uIHRvIGNvbnRleHQgbWVudXMgd2hlbiBkZXZlbG9wZXIgbW9kZSBpcyBhY3RpdmVcIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJjb3JlXCIsIGNhdGVnb3J5OiBcImRldmVsb3BlciBzZXR0aW5nc1wifSxcclxuXHJcbiAgICAvKiogTGlnaHRjb3JkICovXHJcbiAgICBcIkRpc2FibGUgQmV0dGVyRGlzY29yZFwiOiAgICAgIHtpZDogXCJiZC1kaXNhYmxlXCIsICBpbmZvOiBcIkRpc2FibGUgQmV0dGVyZGlzY29yZCAocGx1Z2lucywgdGhlbWVzLCBldGMpIChOb3QgaW1wbGVtZW50ZWQpLlwiLCBpbXBsZW1lbnRlZDogZmFsc2UsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJCbHVyIFBlcnNvbmFsIEluZm9ybWF0aW9uXCI6ICB7aWQ6IFwibGlnaHRjb3JkLTZcIiwgaW5mbzogXCJCbHVyIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbnMgbGlrZSBlbWFpbCwgcGF5bWVudCBpbmZvcyBhbmQgbW9yZS5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJDYWxsaW5nIFJpbmcgQmVhdFwiOiAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLTJcIiwgaW5mbzogXCJFbmFibGUgRGlzY29yZCdzIHNwZWNpYWwgY2FsbGluZyBiZWF0LlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRldmVsb3BlciBPcHRpb25zXCI6ICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtMVwiLCBpbmZvOiBcIkVuYWJsZSBEaXNjb3JkJ3MgJiBMaWdodGNvcmQncyBJbnRlcm5hbCBEZXZlbG9wZXIgT3B0aW9ucy4gVGhpcyBhbGxvdyB0aGUgXFxcIkV4cGVyaW1lbnRzXFxcIiB0YWIsIHRoZSBcXFwiRGV2ZWxvcGVyIE9wdGlvbnNcXFwiIHRhYiBhbmQgdGhlIFxcXCJMaWdodGNvcmQgQXBpXFxcIiBzZWN0aW9uLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkFkIEJsb2NrXCI6ICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtNFwiLCBpbmZvOiBcIkJsb2NrIGFueSBCT1QgdGhhdCBkbXMgeW91IHdpdGggYW4gaW52aXRlIGxpbmsuIEV2ZW4gaW4gYW4gZW1iZWQuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIkxpZ2h0Y29yZFwifSxcclxuICAgIFwiRW5hYmxlIExpZ2h0Y29yZCBTZXJ2ZXJzXCI6ICAge2lkOiBcImxpZ2h0Y29yZC01XCIsIGluZm86IFwiRW5hYmxlIExpZ2h0Y29yZCdzIHNlcnZlcnMuIERpc2FibGluZyB0aGlzIHdpbGwgZGlzYWJsZSBjdXN0b20gYmFkZ2VzLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBmYWxzZSwgY2F0OiBcImxpZ2h0Y29yZFwiLCBjYXRlZ29yeTogXCJMaWdodGNvcmRcIn0sXHJcbiAgICBcIkRpc2FibGUgdHlwaW5nXCI6ICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtN1wiLCBpbmZvOiBcIkRvbid0IGxldCBvdGhlciBzZWUgeW91J3JlIHR5cGluZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCJ9LFxyXG4gICAgXCJMaWdodGNvcmQgVGFic1wiOiAgICAgICAgICAgICB7aWQ6IFwibGlnaHRjb3JkLThcIiwgaW5mbzogXCJBbGxvd3MgeW91IHRvIGxhdW5jaCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgTGlnaHRjb3JkIGluIHRoZSBzYW1lIHdpbmRvdy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogdHJ1ZX0sXHJcbiAgICBcIlVzZSBOb3RpZmljYXRpb24gU2hpbVwiOiAgICAgIHtpZDogXCJsaWdodGNvcmQtMTBcIiwgaW5mbzogXCJCYXNpY2FsbHkgZG9uJ3QgdXNlIFdpbmRvd3MncyBOb3RpZmljYXRpb25zLlwiLCBpbXBsZW1lbnRlZDogdHJ1ZSwgaGlkZGVuOiBwcm9jZXNzLnBsYXRmb3JtICE9PSBcIndpbjMyXCIsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiTGlnaHRjb3JkXCIsIGV4cGVyaW1lbnRhbDogZmFsc2V9LFxyXG5cclxuICAgIC8qKiBMaWdodGNvcmQgV2luZG93ICovXHJcbiAgICBcIkFsd2F5cy1vbi1Ub3BcIjogICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtM1wiLCBpbmZvOiBcIkVuYWJsZSB0aGUgd2luZG93J3MgQWx3YXlzLW9uLVRvcCBtb2RlLCB3aGVyZSBMaWdodGNvcmQgc3RheXMgb24gdG9wIG9mIG90aGVyIGFwcGxpY2F0aW9ucy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXCJObyBXaW5kb3cgQm91bmRzXCI6ICAgICAgICAgICB7aWQ6IFwibm9fd2luZG93X2JvdW5kXCIsIGluZm86IFwiRGlzYWJsZSBXaW5kb3cgQm91bmRzLiBDYW4gYmUgdXNlZnVsIGlmIHlvdSB1c2UgYSB3aW5kb3cgbWFuYWdlci5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogcHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJsaW51eFwiLCBjYXQ6IFwibGlnaHRjb3JkXCIsIGNhdGVnb3J5OiBcIldpbmRvd1wifSxcclxuICAgIFwiRW5hYmxlIEdsYXNzdHJvblwiOiAgICAgICAgICAge2lkOiBcImVuYWJsZV9nbGFzc3Ryb25cIiwgaW5mbzogXCJFbmFibGUgR2xhc3N0cm9uLiBJZiB5b3UncmUgbm90IHVzaW5nIHRyYW5zcGFyZW50IHRoZW1lcywgdGhpcyBjYW4gcmVkdWNlIGxhZy5cIiwgaW1wbGVtZW50ZWQ6IHRydWUsIGhpZGRlbjogZmFsc2UsIGNhdDogXCJsaWdodGNvcmRcIiwgY2F0ZWdvcnk6IFwiV2luZG93XCJ9LFxyXG4gICAgXHJcbiAgICAvKiogUmljaFByZXNlbmNlICovXHJcbiAgICBcIkVuYWJsZVwiOiAgICAgICAgICAgICAgICAgICAgIHtpZDogXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiLCBpbmZvOiBcIkVuYWJsZSBSaWNoUHJlc2VuY2UgYmVsb3cuXCIsIGltcGxlbWVudGVkOiB0cnVlLCBoaWRkZW46IGZhbHNlLCBjYXQ6IFwic3RhdHVzXCJ9XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdENvb2tpZSA9IHtcclxuICAgIFwiYmRhLWdzLTFcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLTJcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy0zXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtNFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWdzLTVcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWdzLTZcIjogZmFsc2UsXHJcbiAgICBcImJkYS1ncy03XCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZ3MtOFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWVzLTBcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTFcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTJcIjogdHJ1ZSxcclxuICAgIFwiYmRhLWVzLTRcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy02XCI6IHRydWUsXHJcbiAgICBcImJkYS1lcy03XCI6IHRydWUsXHJcbiAgICBcImJkYS1ncy1iXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtZXMtOFwiOiB0cnVlLFxyXG4gICAgXCJiZGEtZGMtMFwiOiBmYWxzZSxcclxuICAgIFwiYmRhLWNzcy0wXCI6IGZhbHNlLFxyXG4gICAgXCJiZGEtY3NzLTFcIjogZmFsc2UsXHJcbiAgICBcImJkYS1lcy05XCI6IHRydWUsXHJcbiAgICBcImZvcmstZG0tMVwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1wcy0xXCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtMlwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTNcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy00XCI6IHRydWUsXHJcbiAgICBcImZvcmstcHMtNVwiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXBzLTZcIjogdHJ1ZSxcclxuICAgIFwiZm9yay1wcy03XCI6IGZhbHNlLFxyXG4gICAgXCJmb3JrLWVzLTJcIjogZmFsc2UsXHJcbiAgICBcImZvcmstZXMtM1wiOiB0cnVlLFxyXG4gICAgXCJmb3JrLXdwLTFcIjogZmFsc2UsXHJcbiAgICBcImZvcmstd3AtMlwiOiBmYWxzZSxcclxuICAgIFwiZm9yay1iZXRhXCI6IHRydWUsXHJcbiAgICBcImxpZ2h0Y29yZC0xXCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMlwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtcHJlc2VuY2UtMVwiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLTNcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC00XCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtNVwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtNlwiOiB0cnVlLFxyXG4gICAgXCJsaWdodGNvcmQtN1wiOiBmYWxzZSxcclxuICAgIFwibGlnaHRjb3JkLThcIjogZmFsc2UsXHJcbiAgICBcImxpZ2h0Y29yZC05XCI6IGZhbHNlLFxyXG4gICAgXCJsaWdodGNvcmQtMTBcIjogZmFsc2UsXHJcbiAgICBcIm5vX3dpbmRvd19ib3VuZFwiOiBmYWxzZSxcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NDb29raWUgPSB7fTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5nc1JQQyA9IHt9O1xyXG5leHBvcnQgY29uc3QgZGVmYXVsdFJQQyA9IHtcclxuICAgIFwibmFtZVwiOiBcIkxpZ2h0Y29yZFwiLFxyXG4gICAgXCJhcHBsaWNhdGlvbl9pZFwiOiBcIjcxMTQxNjk1NzcxODc1NzQxOFwiLFxyXG4gICAgXCJzdGF0ZVwiOiBcIkxpZ2h0Y29yZCBDbGllbnRcIixcclxuICAgIFwiZGV0YWlsc1wiOiBcIkJyb3dzaW5nIERpc2NvcmRcIixcclxuICAgIFwidGltZXN0YW1wcy5zdGFydFwiOiBEYXRlLm5vdygpLFxyXG4gICAgXCJhc3NldHMuc21hbGxcIjogbnVsbCxcclxuICAgIFwiYXNzZXRzLmxhcmdlXCI6IFwiNzEyMzIzODIxMDM3NjgyNzkxXCJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGJkcGx1Z2luRXJyb3JzID0gW107XHJcbmV4cG9ydCBjb25zdCBiZHRoZW1lRXJyb3JzID0gW107IC8vIGRlZmluZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcclxuXHJcbmV4cG9ydCBjb25zdCBiZENvbmZpZyA9IE9iamVjdC5jcmVhdGUoQmV0dGVyRGlzY29yZENvbmZpZyk7XHJcblxyXG5leHBvcnQgY29uc3QgYmR0aGVtZXMgPSB7fTtcclxuZXhwb3J0IGNvbnN0IGJkcGx1Z2lucyA9IHt9O1xyXG5cclxuZXhwb3J0IGNvbnN0IHBsdWdpbkNvb2tpZSA9IHt9O1xyXG5leHBvcnQgY29uc3QgdGhlbWVDb29raWUgPSB7fTsiLCJpbXBvcnQgbG9jYWxTdG9yYWdlRml4IGZyb20gXCIuL2xvY2FsU3RvcmFnZUZpeFwiO1xyXG5pbXBvcnQgbG9hZGluZ0ljb24gZnJvbSBcIi4vbG9hZGluZ0ljb25cIjtcclxubG9jYWxTdG9yYWdlRml4KCk7XHJcbmxvYWRpbmdJY29uKCk7XHJcblxyXG5jb25zdCBkZXByZWNhdGVHbG9iYWwgPSAoa2V5LCB2YWx1ZSkgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywga2V5LCB7XHJcbiAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRlZCBHbG9iYWxcIiwgYFwiJHtrZXl9XCIgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gUGxlYXNlIG9ubHkgdXNlIEJkQXBpLmApO1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7ICBcclxufTtcclxuXHJcblxyXG5pbXBvcnQgKiBhcyBHbG9iYWxzIGZyb20gXCIuLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBnbG9iYWxLZXlzID0gT2JqZWN0LmtleXMoR2xvYmFscyk7XHJcbmZvciAoY29uc3Qga2V5IG9mIGdsb2JhbEtleXMpIGRlcHJlY2F0ZUdsb2JhbChrZXksIEdsb2JhbHNba2V5XSk7XHJcblxyXG5cclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL21vZHVsZXMvYmRBcGlcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL21vZHVsZXMvcGx1Z2luTW9kdWxlXCI7XHJcbmltcG9ydCB0aGVtZU1vZHVsZSBmcm9tIFwiLi9tb2R1bGVzL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi9tb2R1bGVzL3V0aWxzXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9tb2R1bGVzL2JkRXZlbnRzXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBDbGFzc05vcm1hbGl6ZXIgZnJvbSBcIi4vbW9kdWxlcy9jbGFzc05vcm1hbGl6ZXJcIjtcclxuXHJcbmRlcHJlY2F0ZUdsb2JhbChcIkJEVjJcIiwgQkRWMik7XHJcbmRlcHJlY2F0ZUdsb2JhbChcInBsdWdpbk1vZHVsZVwiLCBwbHVnaW5Nb2R1bGUpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJ0aGVtZU1vZHVsZVwiLCB0aGVtZU1vZHVsZSk7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIlV0aWxzXCIsIFV0aWxzKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQkRFdmVudHNcIiwgQkRFdmVudHMpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJzZXR0aW5nc1BhbmVsXCIsIHNldHRpbmdzUGFuZWwpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJEYXRhU3RvcmVcIiwgRGF0YVN0b3JlKTtcclxuZGVwcmVjYXRlR2xvYmFsKFwiQ29udGVudE1hbmFnZXJcIiwgQ29udGVudE1hbmFnZXIpO1xyXG5kZXByZWNhdGVHbG9iYWwoXCJDbGFzc05vcm1hbGl6ZXJcIiwgQ2xhc3NOb3JtYWxpemVyKTtcclxuXHJcbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xyXG5cclxuaW1wb3J0IENvcmUgZnJvbSBcIi4vbW9kdWxlcy9jb3JlXCI7XHJcbmRlcHJlY2F0ZUdsb2JhbChcIm1haW5Db3JlXCIsIENvcmUpO1xyXG5cclxuLy8gVE9ETzogQ2hhbmdlIEluaXQgbW9kZSBhbmQgc3RvcCB1c2luZyBDb3JlV3JhcHBlci5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29yZVdyYXBwZXIge1xyXG4gICAgY29uc3RydWN0b3IoYmRDb25maWcsIG1ldGhvZHMpIHtcclxuICAgICAgICBDb3JlLnNldENvbmZpZyhiZENvbmZpZyk7XHJcbiAgICAgICAgQ29yZS5zZXRNZXRob2RzKG1ldGhvZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKSB7XHJcbiAgICAgICAgLy8gZGVwcmVjYXRlR2xvYmFsKFwibWFpbkNvcmVcIiwgdGhpcy5tYWluQ29yZSk7XHJcbiAgICAgICAgQ29yZS5pbml0KCk7XHJcbiAgICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCAoKSA9PiB7XHJcbiAgICBjb25zdCB2MkxvYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB2MkxvYWRlci5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XHJcbiAgICB2MkxvYWRlci50aXRsZSA9IFwiQmFuZGFnZWRCRCBpcyBsb2FkaW5nLi4uXCI7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHYyTG9hZGVyKTtcclxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRXaW5kb3dHZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxJRnJhbWVFbGVtZW50LnByb3RvdHlwZSwgXCJjb250ZW50V2luZG93XCIpLmdldDtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShIVE1MSUZyYW1lRWxlbWVudC5wcm90b3R5cGUsIFwiY29udGVudFdpbmRvd1wiLCB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRXaW5kb3cgPSBSZWZsZWN0LmFwcGx5KGNvbnRlbnRXaW5kb3dHZXR0ZXIsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHkoY29udGVudFdpbmRvdywge1xyXG4gICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbihvYmosIHByb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PT0gXCJsb2NhbFN0b3JhZ2VcIikgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwibG9jYWxTdG9yYWdlXCIpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IG9ialtwcm9wXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdmFsLmJpbmQob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGludGVyY2VwdGlvbiBieSBwYXRjaGluZyBSZWZsZWN0LmFwcGx5IGFuZCBGdW5jdGlvbi5wcm90b3R5cGUuYmluZFxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZmxlY3QsIFwiYXBwbHlcIiwge3ZhbHVlOiBSZWZsZWN0LmFwcGx5LCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIFwiYmluZFwiLCB7dmFsdWU6IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCB3cml0YWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogZmFsc2V9KTtcclxuXHJcbiAgICBjb25zdCBvT3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuO1xyXG4gICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgaWYgKHVybC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYXBpL3dlYmhvb2tzXCIpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShvT3BlbiwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVEZIb3VyIHtcclxuICAgIGluamVjdDI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdHdlbHZlSG91ciA9IG5ldyBSZWdFeHAoYChbMC05XXsxLDJ9KTooWzAtOV17MSwyfSlcXFxccyhBTXxQTSlgKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy02XCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBkYXRhLnJldHVyblZhbHVlLm1hdGNoKHR3ZWx2ZUhvdXIpO1xyXG4gICAgICAgICAgICBpZiAoIW1hdGNoZWQgfHwgbWF0Y2hlZC5sZW5ndGggIT09IDQpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZWRbM10gPT09IFwiQU1cIikgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIwMFwiIDogbWF0Y2hlZFsxXS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWF0Y2hlZFsyXX1gKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGEucmV0dXJuVmFsdWUgPSBkYXRhLnJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIxMlwiIDogcGFyc2VJbnQobWF0Y2hlZFsxXSkgKyAxMn06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGNhbmNlbENvenkgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLlRpbWVGb3JtYXR0ZXIsIFwiY2FsZW5kYXJGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb3p5IG1vZGVcclxuICAgICAgICBjb25zdCBjYW5jZWxDb21wYWN0ID0gVXRpbHMubW9ua2V5UGF0Y2goQkRWMi5UaW1lRm9ybWF0dGVyLCBcImRhdGVGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb21wYWN0IG1vZGVcclxuICAgICAgICB0aGlzLmNhbmNlbDI0SG91ciA9ICgpID0+IHtjYW5jZWxDb3p5KCk7IGNhbmNlbENvbXBhY3QoKTt9OyAvLyBDYW5jZWwgYm90aFxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZTI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHRoaXMuY2FuY2VsMjRIb3VyKCk7XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuXHJcbmNvbnN0IGRpc3BhdGNoZXIgPSB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXJcclxuY29uc3QgQ2hhbm5lbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldENoYW5uZWwgJiYgZS5kZWZhdWx0Lmhhc0NoYW5uZWwpWzBdLmRlZmF1bHRcclxubGV0IHJlbGF0aW9uU2hpcE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmFkZFJlbGF0aW9uc2hpcClbMF1cclxubGV0IERNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cclxuXHJcbmNvbnN0IGJsb2NrZWQgPSB7fVxyXG5cclxubGV0IHVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF1cclxuZnVuY3Rpb24gZ2V0Q3VycmVudFVzZXIoKXtcclxuICAgIGlmKHVzZXJNb2R1bGUpcmV0dXJuIHVzZXJNb2R1bGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcigpXHJcbiAgICByZXR1cm4gbnVsbFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQW50aUJvdERNIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5hbnRpRE0gPSB0aGlzLmFudGlETS5iaW5kKHRoaXMpXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICBpZih0aGlzLmVuYWJsZWQpcmV0dXJuXHJcbiAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxyXG5cclxuICAgICAgICBkaXNwYXRjaGVyLnN1YnNjcmliZShcIk1FU1NBR0VfQ1JFQVRFXCIsIHRoaXMuYW50aURNKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIGRpc3BhdGNoZXIudW5zdWJzY3JpYmUoXCJNRVNTQUdFX0NSRUFURVwiLCB0aGlzLmFudGlETSlcclxuICAgIH1cclxuXHJcbiAgICBhbnRpRE0oZXYpe1xyXG4gICAgICAgIGlmKCFldi5tZXNzYWdlLmF1dGhvci5ib3QpcmV0dXJuXHJcbiAgICAgICAgaWYoZXYubWVzc2FnZS5hdXRob3IuaWQgPT09IGdldEN1cnJlbnRVc2VyKCkuaWQpXHJcbiAgICAgICAgaWYoZXYubWVzc2FnZS5ndWlsZF9pZClyZXR1cm5cclxuXHJcbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IENoYW5uZWxNb2R1bGUuZ2V0Q2hhbm5lbChldi5tZXNzYWdlLmNoYW5uZWxfaWQpXHJcbiAgICAgICAgaWYoIWNoYW5uZWwpcmV0dXJuIC8vIG1pZ2h0IGJlIGJyb2tlblxyXG5cclxuICAgICAgICBpZihjaGFubmVsLnR5cGUgIT09IDEpcmV0dXJuXHJcblxyXG4gICAgICAgIGlmKGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdKXJldHVybiAvLyBJZiB0aGUgdXNlciB1bmJsb2NrIHRoZSBib3QsIERvbid0IGJsb2NrIGl0IGFnYWluLlxyXG5cclxuICAgICAgICBpZihzY2FuTWVzc2FnZShldi5tZXNzYWdlKSl7XHJcbiAgICAgICAgICAgIGJsb2NrZWRbZXYubWVzc2FnZS5hdXRob3IuaWRdID0gdHJ1ZVxyXG4gICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoYFtBZEJsb2NrXTogQmxvY2tlZCAke2V2Lm1lc3NhZ2UuYXV0aG9yLnVzZXJuYW1lfSMke2V2Lm1lc3NhZ2UuYXV0aG9yLmRpc2NyaW1pbmF0b3J9YCwge1xyXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwid2FybmluZ1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGlmKCFyZWxhdGlvblNoaXBNb2R1bGUpcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuYWRkUmVsYXRpb25zaGlwKVswXVxyXG4gICAgICAgICAgICByZWxhdGlvblNoaXBNb2R1bGUuZGVmYXVsdC5hZGRSZWxhdGlvbnNoaXAoZXYubWVzc2FnZS5hdXRob3IuaWQsIHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBcIkNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgfSwgMilcclxuICAgICAgICAgICAgaWYoIURNTW9kdWxlKURNTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuY2xvc2VQcml2YXRlQ2hhbm5lbClbMF1cclxuICAgICAgICAgICAgRE1Nb2R1bGUuZGVmYXVsdC5jbG9zZVByaXZhdGVDaGFubmVsKGNoYW5uZWwuaWQsIGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2Nhbk1lc3NhZ2UobWVzc2FnZSl7XHJcbiAgICBpZigvKGRpc2NvcmRcXC5nZ3xkaXNjb3JkXFwuY29tXFwvaW52aXRlXFwvfGRpc2NvcmRhcHBcXC5jb21cXC9pbnZpdGVcXC8pL2cudGVzdChtZXNzYWdlLmNvbnRlbnQpKXJldHVybiB0cnVlXHJcbiAgICBpZihFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmQuZ2cvXCIpIHx8IEVtYmVkc0NvbnRhaW5zKG1lc3NhZ2UsIFwiZGlzY29yZC5jb20vaW52aXRlL1wiKSB8fCBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBcImRpc2NvcmRhcHAuY29tL2ludml0ZS9cIikpcmV0dXJuIHRydWVcclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxufVxyXG5mdW5jdGlvbiBFbWJlZHNDb250YWlucyhtZXNzYWdlLCBzZWFyY2gpe1xyXG4gICAgbGV0IGVtYmVkcyA9IG1lc3NhZ2UuZW1iZWRzIHx8IFtdXHJcbiAgICBpZihlbWJlZHMubGVuZ3RoID09PSAwKXJldHVybiBmYWxzZVxyXG4gICAgcmV0dXJuIGVtYmVkcy5tYXAoZW1iZWQgPT4ge1xyXG4gICAgICAgIGlmKGVtYmVkLnR5cGUgIT09IFwicmljaFwiKXJldHVybiBmYWxzZVxyXG4gICAgICAgIGlmKChlbWJlZC50aXRsZSB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoKGVtYmVkLmRlc2NyaXB0aW9uIHx8IFwiXCIpLmluY2x1ZGVzKHNlYXJjaCkpcmV0dXJuIHRydWVcclxuICAgICAgICBpZigoKGVtYmVkLmZvb3RlciB8fCBcIlwiKSAmJiBlbWJlZC5mb290ZXIudGV4dCB8fCBcIlwiKS5pbmNsdWRlcyhzZWFyY2gpKXJldHVybiB0cnVlXHJcbiAgICAgICAgaWYoKGVtYmVkLmZpZWxkcyB8fCBbXSkubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZS52YWx1ZS5pbmNsdWRlcyhzZWFyY2gpIHx8IGUubmFtZS5pbmNsdWRlcyhzZWFyY2gpXHJcbiAgICAgICAgfSkuaW5jbHVkZXModHJ1ZSkpcmV0dXJuIHRydWVcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICB9KS5pbmNsdWRlcyh0cnVlKVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc1JQQywgZGVmYXVsdFJQQ30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcblxyXG5jb25zdCBkaXNwYXRjaGVyID0gQkRNb2R1bGVzLmdldChtPT5tLkRpc3BhdGNoZXImJm0uZGVmYXVsdCYmbS5kZWZhdWx0LmRpc3BhdGNoKVswXS5kZWZhdWx0XHJcbmNvbnN0IEFjdGlvblR5cGVzID0gQkRNb2R1bGVzLmdldChtPT5tLkFjdGlvblR5cGVzKVswXS5BY3Rpb25UeXBlc1xyXG5cclxuY29uc3Qgc29ja2V0SWQgPSBcImxpZ2h0Y29yZC1zcG9vZi1zb2NrZXRcIlxyXG5jb25zdCBwaWQgPSBwcm9jZXNzLnBpZFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEN1c3RvbVJpY2hQcmVzZW5jZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgICAgIHRoaXMuZ2FtZSA9IHNldHRpbmdzUlBDXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGdldCBmb3JtYXRlZEdhbWUoKXtcclxuICAgICAgICBpZighdGhpcy5nYW1lKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkID09PSBmYWxzZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgIGxldCBnYW1lID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgZGV0YWlsczogdGhpcy5nYW1lLmRldGFpbHMgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmdhbWVbXCJ0aW1lc3RhbXBzLnN0YXJ0XCJdXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgbGFyZ2VfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSxcclxuICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgIH0gOiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgIH1cclxuXHJcbiAgICBzZW5kR2FtZSgpe1xyXG4gICAgICAgIGRpc3BhdGNoZXIuZGlzcGF0Y2goe1xyXG4gICAgICAgICAgICB0eXBlOiBBY3Rpb25UeXBlcy5MT0NBTF9BQ1RJVklUWV9VUERBVEUsXHJcbiAgICAgICAgICAgIHNvY2tldElkLFxyXG4gICAgICAgICAgICBwaWQsXHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiB0aGlzLmZvcm1hdGVkR2FtZVxyXG4gICAgICAgIH0pICAgXHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlKCkge1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJFbmFibGluZyBjdXN0b20gUmljaFByZXNlbmNlXCIpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0KHNldHRpbmdzUlBDIHx8IE9iamVjdC5jcmVhdGUoZGVmYXVsdFJQQykpXHJcblxyXG4gICAgICAgIHRoaXMuc2VuZEdhbWUoKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRGlzYWJsaW5nIGN1c3RvbSBSaWNoUHJlc2VuY2VcIilcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmV0Y2hBc3NldHMoYXBwbGljYXRpb25JZCl7XHJcbiAgICAgICAgbGV0IGFzc2V0cyA9IGF3YWl0IEJETW9kdWxlcy5nZXQoZSA9PiBlLmdldEFzc2V0cylbMF0uZ2V0QXNzZXRzKGFwcGxpY2F0aW9uSWQpXHJcbiAgICAgICAgaWYoYXNzZXRzLnVuZGVmaW5lZCAmJiB0eXBlb2YgYXNzZXRzLnVuZGVmaW5lZCA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQXBwbGljYXRpb25cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFzc2V0c1xyXG4gICAgfVxyXG5cclxuICAgIHNldChhY3Rpdml0eSl7XHJcbiAgICAgICAgdGhpcy5nYW1lID0gYWN0aXZpdHlcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kR2FtZSgpXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3BsdWdpbkNvb2tpZSwgdGhlbWVDb29raWUsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llLCBzZXR0aW5nc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBtYWluQ29yZSBmcm9tIFwiLi9jb3JlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4vdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IHNldHRpbmdzUGFuZWwgZnJvbSBcIi4vc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5jb25zdCBCZEFwaSA9IHtcclxuICAgIGdldCBSZWFjdCgpIHsgcmV0dXJuIEJEVjIuUmVhY3Q7IH0sXHJcbiAgICBnZXQgUmVhY3RET00oKSB7IHJldHVybiBCRFYyLlJlYWN0RG9tOyB9LFxyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiBCRFYyLlJlYWN0Q29tcG9uZW50O30sXHJcbiAgICBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtyZXR1cm4gVXRpbHMuV2luZG93Q29uZmlnRmlsZTt9LFxyXG4gICAgZ2V0IHNldHRpbmdzKCkge3JldHVybiBzZXR0aW5nczt9LFxyXG4gICAgZ2V0IGVtb3RlcygpIHtyZXR1cm4gbnVsbH0sIC8vIGRlcHJlY2F0ZWQsIGRlbGV0ZWQgYWxsIGVtb3RlcyBmcm9tIGJldHRlcmRpc2NvcmQuXHJcbiAgICBnZXQgc2NyZWVuV2lkdGgoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApOyB9LFxyXG4gICAgZ2V0IHNjcmVlbkhlaWdodCgpIHsgcmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTsgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBVdGlscy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLmdldFdpbmRvd1ByZWZlcmVuY2Uoa2V5KTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICByZXR1cm4gVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShrZXksIHZhbHVlKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRChpZCksIGNzcyk7XHJcbn07XHJcblxyXG4vL0NsZWFyIGNzcy9yZW1vdmUgYW55IGVsZW1lbnRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuQmRBcGkuY2xlYXJDU1MgPSBmdW5jdGlvbiAoaWQpIHtcclxuICAgIERPTS5yZW1vdmVTdHlsZShET00uZXNjYXBlSUQoaWQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgRE9NLmFkZFNjcmlwdChET00uZXNjYXBlSUQoaWQpLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET00ucmVtb3ZlU2NyaXB0KERPTS5lc2NhcGVJRChpZCkpO1xyXG59O1xyXG5cclxuLy9HZXQgYW5vdGhlciBwbHVnaW5cclxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cclxuQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuICAgIGlmIChiZHBsdWdpbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gYmRwbHVnaW5zW25hbWVdLnBsdWdpbjtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuLy9HZXQgQmV0dGVyRGlzY29yZCBDb3JlXHJcbkJkQXBpLmdldENvcmUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBVdGlscy53YXJuKFwiRGVwcmVjYXRpb24gTm90aWNlXCIsIGBCZEFwaS5nZXRDb3JlKCkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy5gKTtcclxuICAgIHJldHVybiBtYWluQ29yZTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIG1vZGFsLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgLSBhIHN0cmluZyBvZiB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIG1vZGFsXHJcbiAqL1xyXG5CZEFwaS5hbGVydCA9IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbCh0aXRsZSwgY29udGVudCwge2NhbmNlbFRleHQ6IG51bGx9KTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBTaG93cyBhIGdlbmVyaWMgYnV0IHZlcnkgY3VzdG9taXphYmxlIGNvbmZpcm1hdGlvbiBtb2RhbCB3aXRoIG9wdGlvbmFsIGNvbmZpcm0gYW5kIGNhbmNlbCBjYWxsYmFja3MuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMua2V5XSAtIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2RhbC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgaXMgZ2VuZXJhdGVkIGFuZCByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBrZXkgdXNlZCBmb3IgdGhpcyBtb2RhbFxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBVdGlscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy9TaG93IHRvYXN0IGFsZXJ0XHJcbkJkQXBpLnNob3dUb2FzdCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgVXRpbHMuc2hvd1RvYXN0KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmQoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEFsbChmaWx0ZXIpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGVCeVByb3BzID0gZnVuY3Rpb24oLi4ucHJvcHMpIHtcclxuICAgIHJldHVybiBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMocHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5UHJvdG90eXBlcyhwcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBCRFYyLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSk7XHJcbn07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkubG9hZERhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuQmRBcGkuZ2V0RGF0YSA9IEJkQXBpLmxvYWREYXRhO1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNhdmVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5LCBkYXRhKSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLnNldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5LCBkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLnNldERhdGEgPSBCZEFwaS5zYXZlRGF0YTtcclxuXHJcbi8vIERlbGV0ZXMgZGF0YVxyXG5CZEFwaS5kZWxldGVEYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmRlbGV0ZVBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbi8vIFBhdGNoZXMgb3RoZXIgZnVuY3Rpb25zXHJcbkJkQXBpLm1vbmtleVBhdGNoID0gZnVuY3Rpb24od2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucykge1xyXG4gICAgcmV0dXJuIFV0aWxzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlscy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxyXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSk7XHJcbn07XHJcblxyXG4vLyBUZXN0cyBmb3IgdmFsaWQgSlNPTlxyXG5CZEFwaS50ZXN0SlNPTiA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBVdGlscy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbkJkQXBpLmlzUGx1Z2luRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiAhIXBsdWdpbkNvb2tpZVtuYW1lXTtcclxufTtcclxuXHJcbkJkQXBpLmlzVGhlbWVFbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4gICAgcmV0dXJuICEhdGhlbWVDb29raWVbbmFtZV07XHJcbn07XHJcblxyXG5CZEFwaS5pc1NldHRpbmdFbmFibGVkID0gZnVuY3Rpb24oaWQpIHtcclxuICAgIHJldHVybiAhIXNldHRpbmdzQ29va2llW2lkXTtcclxufTtcclxuXHJcbkJkQXBpLmVuYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIHRydWUpO1xyXG59O1xyXG5cclxuQmRBcGkuZGlzYWJsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsIGZhbHNlKTtcclxufTtcclxuXHJcbkJkQXBpLnRvZ2dsZVNldHRpbmcgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzUGFuZWwub25DaGFuZ2UoaWQsICFzZXR0aW5nc0Nvb2tpZVtpZF0pO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcclxufTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5cclxuXHJcbmNvbnN0IG1ha2VBZGRvbkFQSSA9IChjb29raWUsIGxpc3QsIG1hbmFnZXIpID0+IG5ldyBjbGFzcyBBZGRvbkFQSSB7XHJcblxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gbWFuYWdlci5mb2xkZXI7fVxyXG5cclxuICAgIGlzRW5hYmxlZChuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuICEhY29va2llW25hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmRpc2FibGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlKG5hbWUpIHtcclxuICAgICAgICBpZiAoY29va2llW25hbWVdKSB0aGlzLmRpc2FibGUobmFtZSk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQobmFtZSkge1xyXG4gICAgICAgIHJldHVybiBtYW5hZ2VyLnJlbG9hZChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQobmFtZSkge1xyXG4gICAgICAgIGlmIChsaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W25hbWVdLnBsdWdpbikgcmV0dXJuIGxpc3RbbmFtZV0ucGx1Z2luO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlzdFtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhsaXN0KS5tYXAoayA9PiB0aGlzLmdldChrKSkuZmlsdGVyKGEgPT4gYSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5CZEFwaS5QbHVnaW5zID0gbWFrZUFkZG9uQVBJKHBsdWdpbkNvb2tpZSwgYmRwbHVnaW5zLCBwbHVnaW5Nb2R1bGUpO1xyXG5CZEFwaS5UaGVtZXMgPSBtYWtlQWRkb25BUEkodGhlbWVDb29raWUsIGJkdGhlbWVzLCB0aGVtZU1vZHVsZSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCZEFwaTtcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CZEFwaSA9IEJkQXBpIiwiLyogQkRFdmVudHMgKi9cclxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZShcImV2ZW50c1wiKTtcclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEJERXZlbnRzIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoKVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5CREV2ZW50cyA9IHRoaXNcclxuICAgIH1cclxuICAgIGRpc3BhdGNoKGV2ZW50TmFtZSwgLi4uYXJncykge3RoaXMuZW1pdChldmVudE5hbWUsIC4uLmFyZ3MpO31cclxuICAgIG9mZihldmVudE5hbWUsIGV2ZW50QWN0aW9uKSB7dGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50QWN0aW9uKTt9XHJcbn07IiwiLyoqXHJcbiAqIENyZWRpdHMgdG8gQGhlbGxib3VuZDEzMzcgb24gZ2l0aHViIGZvciB0aGUgY3NzXHJcbiAqL1xyXG5cclxuaW1wb3J0IERPTVRvb2xzIGZyb20gXCIuL2RvbXRvb2xzXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuXHJcbmxldCBzZWxlY3RvcnNcclxuY29uc3QgcmVtb3ZlRGEgPSBVdGlscy5yZW1vdmVEYVxyXG5mdW5jdGlvbiBnZXRTZWxlY3RvcnMoKXtcclxuICAgIGxldCBzdGFuZGFyZFNpZGViYXJWaWV3ID0gQkRNb2R1bGVzLmdldChlID0+IGUuc3RhbmRhcmRTaWRlYmFyVmlldylbMF1cclxuICAgIGlmKCFzdGFuZGFyZFNpZGViYXJWaWV3KXJldHVybiBudWxsXHJcbiAgICBsZXQgZGVmYXVsdENsYXNzTmFtZSA9IHJlbW92ZURhKHN0YW5kYXJkU2lkZWJhclZpZXcuc3RhbmRhcmRTaWRlYmFyVmlldylcclxuICAgIGxldCBzZWxlY3RzID0gW11cclxuICAgIGxldCB1c2VyU2V0dGluZ3NBY2NvdW50ID0gQkRNb2R1bGVzLmdldChlID0+IGUudXNlclNldHRpbmdzQWNjb3VudClbMF1cclxuICAgIGNvbnN0IGNoaWxkcmVuID0gQkRNb2R1bGVzLmdldChlID0+IHR5cGVvZiBlLmNoaWxkcmVuID09PSBcInN0cmluZ1wiKVswXVxyXG4gICAgc2VsZWN0cy5wdXNoKGAjYXBwLW1vdW50IC4ke2RlZmF1bHRDbGFzc05hbWV9IC5wYXltZW50LWluZm8gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuZGVzY3JpcHRpb24gJiYgdHlwZW9mIGUuZGVzY3JpcHRpb24gPT09IFwic3RyaW5nXCIgJiYgZS5kZXNjcmlwdGlvbi5pbmNsdWRlcyhcImZvcm1UZXh0XCIpKVswXS5kZXNjcmlwdGlvbil9YClcclxuICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wYXltZW50U291cmNlUm93KVswXS5wYXltZW50U291cmNlUm93KX0gLiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuc3ViVGV4dCAmJiBlLmRlc2NyaXB0aW9uV3JhcHBlcilbMF0uc3ViVGV4dCl9YClcclxuICAgIGlmKHVzZXJTZXR0aW5nc0FjY291bnQpe1xyXG4gICAgICAgIHNlbGVjdHMucHVzaChgI2FwcC1tb3VudCAuJHtkZWZhdWx0Q2xhc3NOYW1lfSAuJHtyZW1vdmVEYSh1c2VyU2V0dGluZ3NBY2NvdW50LnVzZXJTZXR0aW5nc0FjY291bnQpfSBkaXY6bnRoLWNoaWxkKDIpPmRpdjpudGgtY2hpbGQoMik+LiR7cmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUudmlld0JvZHkpWzBdLnZpZXdCb2R5KX1gKVxyXG4gICAgICAgIHNlbGVjdHMucHVzaChgLiR7cmVtb3ZlRGEodXNlclNldHRpbmdzQWNjb3VudC51c2VyU2V0dGluZ3NTZWN1cml0eSl9IC4ke3JlbW92ZURhKGNoaWxkcmVuLmNoaWxkcmVuKX0gPiBkaXY6bnRoLWNoaWxkKDIpYClcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKHNlbGVjdHMpXHJcbiAgICByZXR1cm4gc2VsZWN0c1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQmx1clByaXZhdGUge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZSgpe1xyXG4gICAgICAgIGlmKHRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3JzIHx8IGdldFNlbGVjdG9ycygpXHJcblxyXG4gICAgICAgIGlmKCFzZWxlY3RvcnMpY29uc29sZS5lcnJvcihuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIHNlbGVjdG9ycyB0byBibHVyIHBlcnNvbm5hbCBpbmZvcm1hdGlvbnMuXCIpKVxyXG4gICAgICAgIERPTVRvb2xzLmFkZFN0eWxlKFwiYmx1clByaXZhdGVcIiwgYFxyXG4ke3NlbGVjdG9ycy5qb2luKFwiLCBcIil9IHtcclxuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wODUsLjY4LC41Myk7XHJcbiAgICBmaWx0ZXI6IGJsdXIoNHB4KTtcclxuICAgIG9wYWNpdHk6IC44O1xyXG59XHJcblxyXG4ke3NlbGVjdG9ycy5tYXAoZSA9PiBlK1wiOmhvdmVyXCIpLmpvaW4oXCIsIFwiKX0gIHtcclxuICAgIHRyYW5zaXRpb246IGFsbCAxNTBtcyBjdWJpYy1iZXppZXIoLjU1LC4wOSwuNjgsLjUzKTtcclxuICAgIGZpbHRlcjogbm9uZTtcclxuICAgIG9wYWNpdHk6IDE7XHJcbn1gKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICBpZighdGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgRE9NVG9vbHMucmVtb3ZlU3R5bGUoXCJibHVyUHJpdmF0ZVwiKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcblxyXG5jb25zdCBub3JtYWxpemVkUHJlZml4ID0gXCJkYVwiO1xyXG5jb25zdCByYW5kQ2xhc3MgPSBuZXcgUmVnRXhwKGBeKD8hJHtub3JtYWxpemVkUHJlZml4fS0pKCg/OltBLVphLXpdfFswLTldfC0pKyktKD86W0EtWmEtel18WzAtOV18LXxfKXs2fSRgKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDbGFzc05vcm1hbGl6ZXIge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuQ2xhc3NOb3JtYWxpemVyID0gdGhpc1xyXG4gICAgfVxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzUGF0Y2hlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5maW5kQWxsKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLnJldmVydEVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmZpbmRBbGwodGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGVzKG1vZHVsZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudW5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3VsZElnbm9yZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghaXNOYU4odmFsdWUpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuZW5kc1dpdGgoXCJweFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImNoXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiZW1cIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJtc1wiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJsYXllckNvbnRhaW5lci1cIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiI1wiKSAmJiAodmFsdWUubGVuZ3RoID09IDcgfHwgdmFsdWUubGVuZ3RoID09IDQpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoXCJjYWxjKFwiKSB8fCB2YWx1ZS5pbmNsdWRlcyhcInJnYmFcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGVGaWx0ZXIobW9kdWxlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1vZHVsZS5fX2VzTW9kdWxlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhtb2R1bGUpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBtb2R1bGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2R1bGVbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5zcGxpdChcIi1cIikubGVuZ3RoID09PSAxKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QodmFsdWUuc3BsaXQoXCIgXCIpWzBdKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vcm1hbENsYXNzIG9mIGNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBub3JtYWxDbGFzcy5tYXRjaChyYW5kQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAhbWF0Y2gubGVuZ3RoIHx8IG1hdGNoLmxlbmd0aCA8IDIpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaFsxXS5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaERPTU1ldGhvZHMoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbnMgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmNvbnRhaW5zO1xyXG4gICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICAvLyBjb25zdCB0b2tlbnMgPSB0b2tlbi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmFwcGx5KGNvbnRhaW5zLCB0aGlzLCBbdG9rZW4uc3BsaXQoXCIgXCIpWzBdXSk7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiB0b2tlbnMuZXZlcnkodCA9PiBjb250YWlucy5jYWxsKHRoaXMsIHQpKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBhZGQgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZDtcclxuICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKC4uLnRva2Vucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IHRva2Vucy5sZW5ndGg7IHQrKykge1xyXG4gICAgICAgICAgICAgICAgdG9rZW5zW3RdID0gdG9rZW5zW3RdLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5hcHBseShhZGQsIHRoaXMsIHRva2Vucyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiguLi50b2tlbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcclxuICAgICAgICAgICAgICAgIHRva2Vuc1t0XSA9IHRva2Vuc1t0XS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuYXBwbHkocmVtb3ZlLCB0aGlzLCB0b2tlbnMpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59OyIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCB7XHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxDb2xvcmVkVGV4dCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghQkRWMi5NZXNzYWdlQ29tcG9uZW50KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ29sb3JlZFRleHQgPSBVdGlscy5tb25rZXlQYXRjaChCRFYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YmVmb3JlOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoIXByb3BzIHx8ICFwcm9wcy5jaGlsZHJlbk1lc3NhZ2VDb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50ID0gcHJvcHMuY2hpbGRyZW5NZXNzYWdlQ29udGVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICghbWVzc2FnZUNvbnRlbnQudHlwZSB8fCAhbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlIHx8IG1lc3NhZ2VDb250ZW50LnR5cGUudHlwZS5kaXNwbGF5TmFtZSAhPSBcIk1lc3NhZ2VDb250ZW50XCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUeXBlID0gbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlO1xyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxUeXBlLl9fb3JpZ2luYWxNZXRob2QpIHJldHVybjsgLy8gRG9uJ3QgcGF0Y2ggYWdhaW5cclxuICAgICAgICAgICAgbWVzc2FnZUNvbnRlbnQudHlwZS50eXBlID0gZnVuY3Rpb24ocHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gb3JpZ2luYWxUeXBlKHByb3BzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvbGVDb2xvciA9IHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTdcIl0gPyBwcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nIHx8IFwiXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZXNzYWdlQ29udGVudC50eXBlLnR5cGUuX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdpbmFsVHlwZTtcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihtZXNzYWdlQ29udGVudC50eXBlLnR5cGUsIG9yaWdpbmFsVHlwZSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGxldCBjbGFzc05hbWVNYXJrdXAgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdLm1hcmt1cFxyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIrY2xhc3NOYW1lTWFya3VwLnNwbGl0KFwiIFwiKVswXSkuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgZWxlbS5zdHlsZS5zZXRQcm9wZXJ0eShcImNvbG9yXCIsIFwiXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59OyIsImltcG9ydCB7YmRDb25maWcsIGJkcGx1Z2lucywgYmR0aGVtZXMsIHNldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgZGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgeyBlbmNyeXB0U2V0dGluZ3NDYWNoZSwgZGVjcnlwdFNldHRpbmdzQ2FjaGUsIHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4vcGx1Z2luQ2VydGlmaWVyXCI7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpLk1vZHVsZTtcclxuTW9kdWxlLmdsb2JhbFBhdGhzLnB1c2gocGF0aC5yZXNvbHZlKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwLmdldEFwcFBhdGgoKSwgXCJub2RlX21vZHVsZXNcIikpO1xyXG5jbGFzcyBNZXRhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJNZXRhRXJyb3JcIjtcclxuICAgIH1cclxufVxyXG5jb25zdCBvcmlnaW5hbEpTUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXTtcclxuY29uc3Qgb3JpZ2luYWxDU1NSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA/IE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5jc3NcIl0gOiAoKSA9PiB7cmV0dXJuIG51bGw7fTtcclxuY29uc3Qgc3BsaXRSZWdleCA9IC9bXlxcU1xcclxcbl0qPyg/OlxcclxcbnxcXG4pW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcclxuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcclxuXHJcbmV4cG9ydCBsZXQgYWRkb25DYWNoZSA9IHt9XHJcblxyXG5sZXQgaGFzUGF0Y2hlZCA9IGZhbHNlXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLndhdGNoZXJzID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hFeHRlbnNpb25zKCl7XHJcbiAgICAgICAgaWYoaGFzUGF0Y2hlZClyZXR1cm5cclxuICAgICAgICBoYXNQYXRjaGVkID0gdHJ1ZVxyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1tcIi5qc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW1wiLmNzc1wiXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoXCJ0aGVtZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGx1Z2luc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fcGx1Z2luc0ZvbGRlciB8fCAodGhpcy5fcGx1Z2luc0ZvbGRlciA9IGZzLnJlYWxwYXRoU3luYyhwYXRoLnJlc29sdmUoYmRDb25maWcuZGF0YVBhdGggKyBcInBsdWdpbnMvXCIpKSk7fVxyXG4gICAgZ2V0IHRoZW1lc0ZvbGRlcigpIHtyZXR1cm4gdGhpcy5fdGhlbWVzRm9sZGVyIHx8ICh0aGlzLl90aGVtZXNGb2xkZXIgPSBmcy5yZWFscGF0aFN5bmMocGF0aC5yZXNvbHZlKGJkQ29uZmlnLmRhdGFQYXRoICsgXCJ0aGVtZXMvXCIpKSk7fVxyXG5cclxuICAgIGxvYWRBZGRvbkNlcnRpZmllckNhY2hlKCl7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikgIT09IFwic3RyaW5nXCIpe1xyXG4gICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGUgPSBKU09OLnBhcnNlKGRlY3J5cHRTZXR0aW5nc0NhY2hlKGRhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJQbHVnaW5DZXJ0aWZpZXJIYXNoZXNcIikpKVxyXG4gICAgICAgICAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKFwie31cIikpXHJcbiAgICAgICAgICAgICAgICBhZGRvbkNhY2hlID0ge31cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBPYmplY3Qua2V5cyhhZGRvbkNhY2hlKVxyXG4gICAgICAgIC5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICBpZighdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKXJldHVybiBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcblxyXG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbe1xyXG4gICAgICAgICAgICAgICAga2V5OiBcInRpbWVzdGFtcFwiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBrZXk6IFwicmVzdWx0XCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIGtleTogXCJoYXNoXCIsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiXHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBvZiBwcm9wcyl7XHJcbiAgICAgICAgICAgICAgICBpZighKHByb3Aua2V5IGluIHZhbHVlKSB8fCB0eXBlb2YgdmFsdWVbcHJvcC5rZXldICE9PSBwcm9wLnR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2tleV1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2YWx1ZS5oYXNoICE9PSBrZXkpe1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFkZG9uQ2FjaGVba2V5XVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodmFsdWUucmVzdWx0LnN1c3BlY3QpeyAvLyByZWZldGNoIGZyb20gcmVtb3RlIHRvIGJlIHN1cmUgeW91J3JlIHVwIHRvIGRhdGUuXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYWRkb25DYWNoZVtrZXldXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUFkZG9uQ2FjaGUoKXtcclxuICAgICAgICBkYXRhU3RvcmUuc2V0U2V0dGluZ0dyb3VwKFwiUGx1Z2luQ2VydGlmaWVySGFzaGVzXCIsIGVuY3J5cHRTZXR0aW5nc0NhY2hlKEpTT04uc3RyaW5naWZ5KGFkZG9uQ2FjaGUpKSlcclxuICAgIH1cclxuXHJcbiAgICB3YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcclxuICAgICAgICBpZiAodGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IGNvbnRlbnRUeXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0gPSBmcy53YXRjaChiYXNlRm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xyXG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSByZXR1cm4gcGx1Z2luTW9kdWxlLnVubG9hZFBsdWdpbihmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhlbWVNb2R1bGUudW5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1BsdWdpbikgYXdhaXQgcGx1Z2luTW9kdWxlLmxvYWRQbHVnaW4oZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBhd2FpdCB0aGVtZU1vZHVsZS5sb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzUGx1Z2luKSBhd2FpdCBwbHVnaW5Nb2R1bGUucmVsb2FkUGx1Z2luKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgYXdhaXQgdGhlbWVNb2R1bGUucmVsb2FkVGhlbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaENvbnRlbnQoY29udGVudFR5cGUpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcnNbY29udGVudFR5cGVdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV0uY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyc1tjb250ZW50VHlwZV07XHJcbiAgICB9XHJcblxyXG4gICAgZXh0cmFjdE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcclxuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIGNvbnN0IGhhc05ld01ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvKipcIik7XHJcbiAgICAgICAgaWYgKGhhc05ld01ldGEpIHJldHVybiB0aGlzLnBhcnNlTmV3TWV0YShjb250ZW50KTtcclxuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU9sZE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IHJhd01ldGEgPSBtZXRhLnN1YnN0cmluZyhtZXRhLmxhc3RJbmRleE9mKFwiLy9NRVRBXCIpICsgNiwgbWV0YS5sYXN0SW5kZXhPZihcIiovL1wiKSk7XHJcbiAgICAgICAgaWYgKG1ldGEuaW5kZXhPZihcIk1FVEFcIikgPCAwKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlscy50ZXN0SlNPTihyYXdNZXRhKTtcclxuICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xyXG4gICAgICAgIHBhcnNlZC5mb3JtYXQgPSBcImpzb25cIjtcclxuICAgICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlTmV3TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2sgPSBjb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XHJcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XHJcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcclxuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xyXG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcclxuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcclxuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xyXG4gICAgICAgIG91dC5mb3JtYXQgPSBcImpzZG9jXCI7XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250ZW50UmVxdWlyZSh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWlyZSA9IGlzUGx1Z2luID8gb3JpZ2luYWxKU1JlcXVpcmUgOiBvcmlnaW5hbENTU1JlcXVpcmU7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZSwgZmlsZW5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgYmFzZUZvbGRlciA9IGlzUGx1Z2luID8gc2VsZi5wbHVnaW5zRm9sZGVyIDogc2VsZi50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aCA9IHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgXCJ1dGY4XCIpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gVXRpbHMuc3RyaXBCT00oY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNlbGYuZXh0cmFjdE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgICAgIG1ldGEuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgbWV0YS5hZGRlZCA9IHN0YXRzLmF0aW1lTXM7XHJcbiAgICAgICAgICAgIG1ldGEubW9kaWZpZWQgPSBzdGF0cy5tdGltZU1zO1xyXG4gICAgICAgICAgICBtZXRhLnNpemUgPSBzdGF0cy5zaXplO1xyXG4gICAgICAgICAgICBpZiAoIWlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgICAgICBtZXRhLmNzcyA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICBpZiAobWV0YS5mb3JtYXQgPT0gXCJqc29uXCIpIG1ldGEuY3NzID0gbWV0YS5jc3Muc3BsaXQoXCJcXG5cIikuc2xpY2UoMSkuam9pbihcIlxcblwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBgbW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpc1BsdWdpbikge1xyXG4gICAgICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIG1vZHVsZS5maWxlbmFtZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaWRFeHBvcnQgPSAhVXRpbHMuaXNFbXB0eShtb2R1bGUuZXhwb3J0cyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlkRXhwb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YS50eXBlID0gbW9kdWxlLmV4cG9ydHM7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMud2FybihcIk1vZHVsZSBOb3QgRXhwb3J0ZWRcIiwgYCR7bWV0YS5uYW1lfSwgcGxlYXNlIHN0YXJ0IHNldHRpbmcgbW9kdWxlLmV4cG9ydHNgKTtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ICs9IGBcXG5tb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O1xcbm1vZHVsZS5leHBvcnRzLnR5cGUgPSAke21ldGEuZXhwb3J0cyB8fCBtZXRhLm5hbWV9O2A7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIGZpbGVuYW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG1ha2VQbGFjZWhvbGRlclBsdWdpbihkYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtwbHVnaW46IHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIGdldE5hbWU6ICgpID0+IHtyZXR1cm4gZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWU7fSxcclxuICAgICAgICAgICAgICAgIGdldEF1dGhvcjogKCkgPT4ge3JldHVybiBcIj8/P1wiO30sXHJcbiAgICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogKCkgPT4ge3JldHVybiBkYXRhLm1lc3NhZ2UgPyBkYXRhLm1lc3NhZ2UgOiBcIlRoaXMgcGx1Z2luIHdhcyB1bmFibGUgdG8gYmUgbG9hZGVkLiBDaGVjayB0aGUgYXV0aG9yJ3MgcGFnZSBmb3IgdXBkYXRlcy5cIjt9LFxyXG4gICAgICAgICAgICAgICAgZ2V0VmVyc2lvbjogKCkgPT4ge3JldHVybiBcIj8/P1wiO31cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbmFtZTogZGF0YS5uYW1lIHx8IGRhdGEuZmlsZW5hbWUsXHJcbiAgICAgICAgICAgIGZpbGVuYW1lOiBkYXRhLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICBzb3VyY2U6IGRhdGEuc291cmNlID8gZGF0YS5zb3VyY2UgOiBcIlwiLFxyXG4gICAgICAgICAgICB3ZWJzaXRlOiBkYXRhLndlYnNpdGUgPyBkYXRhLndlYnNpdGUgOiBcIlwiXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZih0eXBlKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuXHJcbiAgICAgICAgaWYoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTZcIl0pe1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRmlsZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgfSwgKGhhc2gpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVjdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6IGhhc2gsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSwgdHJ1ZSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgaWYocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIGFkZG9uQ2FjaGVbcmVzdWx0Lmhhc2hdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNoOiByZXN1bHQuaGFzaCxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHQuc3VzcGVjdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIlRoaXMgcGx1Z2luIG1pZ2h0IGJlIGRhbmdlcm91cyAoXCIrcmVzdWx0Lmhhcm0rXCIpLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiVGhpcyBwbHVnaW4gbWlnaHQgYmUgZGFuZ2Vyb3VzIChcIityZXN1bHQuaGFybStcIikuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29tcGlsZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB3aW5kb3cucmVxdWlyZShwYXRoLnJlc29sdmUoYmFzZUZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICBpZighY29udGVudC5uYW1lKXJldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNhbm5vdCBlc2NhcGUgdGhlIElELlwiLCBlcnJvcjogbmV3IEVycm9yKFwiQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlcGxhY2UnIG9mIHVuZGVmaW5lZFwiKX1cclxuICAgICAgICBjb250ZW50LmlkID0gVXRpbHMuZXNjYXBlSUQoY29udGVudC5uYW1lKTtcclxuICAgICAgICAvL2lmKCFpZClyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJJbnZhbGlkIElEXCIsIGVycm9yOiBuZXcgRXJyb3IoXCJQbGVhc2UgZml4IHRoZSBuYW1lIG9mIFwiK2ZpbGVuYW1lK1wiLiBCZXR0ZXJEaXNjb3JkIGNhbid0IGVzY2FwZSBhbiBJRC5cIil9XHJcbiAgICAgICAgaWYgKGlzUGx1Z2luKSB7XHJcbiAgICAgICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50LnBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBiZHBsdWdpbnNbY29udGVudC5wbHVnaW4uZ2V0TmFtZSgpXTtcclxuICAgICAgICAgICAgICAgIGJkcGx1Z2luc1tjb250ZW50LnBsdWdpbi5nZXROYW1lKCldID0gY29udGVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4ge25hbWU6IGZpbGVuYW1lLCBmaWxlOiBmaWxlbmFtZSwgbWVzc2FnZTogXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07fVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVsZXRlIGJkdGhlbWVzW2NvbnRlbnQubmFtZV07XHJcbiAgICAgICAgICAgIGJkdGhlbWVzW2NvbnRlbnQubmFtZV0gPSBjb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihmaWxlbmFtZSkgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mKHR5cGUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb2xkZXIgPSBpc1BsdWdpbiA/IHRoaXMucGx1Z2luc0ZvbGRlciA6IHRoaXMudGhlbWVzRm9sZGVyO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3aW5kb3cucmVxdWlyZS5jYWNoZVt3aW5kb3cucmVxdWlyZS5yZXNvbHZlKHBhdGgucmVzb2x2ZShiYXNlRm9sZGVyLCBmaWxlbmFtZSkpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge3JldHVybiB7bmFtZTogZmlsZW5hbWUsIGZpbGU6IGZpbGVuYW1lLCBtZXNzYWdlOiBcIkNvdWxkIG5vdCBiZSB1bmxvYWRlZC5cIiwgZXJyb3I6IHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja319O31cclxuICAgIH1cclxuXHJcbiAgICBpc0xvYWRlZChmaWxlbmFtZSwgdHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZSA9PT0gXCJwbHVnaW5cIjtcclxuICAgICAgICBjb25zdCBiYXNlRm9sZGVyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICB0cnkge3dpbmRvdy5yZXF1aXJlLmNhY2hlW3dpbmRvdy5yZXF1aXJlLnJlc29sdmUocGF0aC5yZXNvbHZlKGJhc2VGb2xkZXIsIGZpbGVuYW1lKSldO31cclxuICAgICAgICBjYXRjaCAoZXJyKSB7cmV0dXJuIGZhbHNlO31cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgY2FudFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHlwZSk7XHJcbiAgICAgICAgaWYgKGNhbnRVbmxvYWQpIHJldHVybiBjYW50VW5sb2FkO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3Q29udGVudCh0eXBlKSB7XHJcbiAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlID09PSBcInBsdWdpblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGVFbmRpbmcgPSBpc1BsdWdpbiA/IFwiLnBsdWdpbi5qc1wiIDogXCIudGhlbWUuY3NzXCI7XHJcbiAgICAgICAgY29uc3QgYmFzZWRpciA9IGlzUGx1Z2luID8gdGhpcy5wbHVnaW5zRm9sZGVyIDogdGhpcy50aGVtZXNGb2xkZXI7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhiYXNlZGlyKTtcclxuICAgICAgICBjb25zdCBjb250ZW50TGlzdCA9IE9iamVjdC52YWx1ZXMoaXNQbHVnaW4gPyBiZHBsdWdpbnMgOiBiZHRoZW1lcyk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gaXNQbHVnaW4gPyBjLnBsdWdpbi5nZXROYW1lKCkgOiBjLm5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIWNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgoZmlsZUVuZGluZykgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEFsbENvbnRlbnQodHlwZSkge1xyXG4gICAgICAgIHRoaXMucGF0Y2hFeHRlbnNpb25zKClcclxuICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGUgPT09IFwicGx1Z2luXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZUVuZGluZyA9IGlzUGx1Z2luID8gXCIucGx1Z2luLmpzXCIgOiBcIi50aGVtZS5jc3NcIjtcclxuICAgICAgICBjb25zdCBiYXNlZGlyID0gaXNQbHVnaW4gPyB0aGlzLnBsdWdpbnNGb2xkZXIgOiB0aGlzLnRoZW1lc0ZvbGRlcjtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGJhc2VkaXIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKGJhc2VkaXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKGZpbGVFbmRpbmcpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0eXBlKTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSBlcnJvcnMucHVzaChlcnJvcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQbHVnaW5zKCkge3JldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KFwicGx1Z2luXCIpO31cclxuICAgIGxvYWRUaGVtZXMoKSB7cmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoXCJ0aGVtZVwiKTt9XHJcbn07XHJcblxyXG4vKipcclxuICogRG9uJ3QgZXhwb3NlIGNvbnRlbnRNYW5hZ2VyIC0gY291bGQgYmUgZGFuZ2Vyb3VzIGZvciBub3dcclxuICovIiwiaW1wb3J0IHtiZENvbmZpZywgbWluU3VwcG9ydGVkVmVyc2lvbiwgYmJkVmVyc2lvbiwgc2V0dGluZ3NDb29raWUsIGJkcGx1Z2luRXJyb3JzLCBiZHRoZW1lRXJyb3JzLCBiYmRDaGFuZ2Vsb2csIGRlZmF1bHRDb29raWUsIGN1cnJlbnREaXNjb3JkVmVyc2lvbiwgZGVmYXVsdFJQQywgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL3YyXCI7XHJcbmltcG9ydCBzZXR0aW5nc1BhbmVsIGZyb20gXCIuL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IHBsdWdpbk1vZHVsZSBmcm9tIFwiLi9wbHVnaW5Nb2R1bGVcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrTW9kdWxlc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgQkRMb2dvIGZyb20gXCIuLi91aS9iZExvZ29cIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuLi91aS90b29sdGlwV3JhcFwiO1xyXG5pbXBvcnQgTGlnaHRjb3JkTG9nbyBmcm9tIFwiLi4vc3ZnL2xpZ2h0Y29yZFwiO1xyXG5pbXBvcnQgUGx1Z2luQ2VydGlmaWVyIGZyb20gXCIuL3BsdWdpbkNlcnRpZmllclwiO1xyXG5pbXBvcnQgZGlzdGFudCwgeyB1dWlkdjQgfSBmcm9tIFwiLi9kaXN0YW50XCI7XHJcbmltcG9ydCBFbW9qaU1vZHVsZSBmcm9tIFwiLi9lbW9qaU1vZHVsZVwiXHJcbmltcG9ydCB7cmVtb3RlIGFzIGVsZWN0cm9ufSBmcm9tIFwiZWxlY3Ryb25cIlxyXG5pbXBvcnQgdjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IGNvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5sZXQgbWV0aG9kc1xyXG5mdW5jdGlvbiBDb3JlKCkge31cclxuXHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcclxuICAgIE9iamVjdC5hc3NpZ24oYmRDb25maWcsIGNvbmZpZyk7XHJcbn07XHJcblxyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ29yZS5wcm90b3R5cGUsIFwibWV0aG9kc1wiLCB7XHJcbiAgICBnZXQoKXtcclxuICAgICAgICByZXR1cm4gbWV0aG9kc1xyXG4gICAgfVxyXG59KVxyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0TWV0aG9kcyA9IGZ1bmN0aW9uKG0pIHtcclxuICAgIGlmICh0aGlzLmhhc1N0YXJ0ZWQpIHJldHVybjtcclxuICAgIG1ldGhvZHMgPSBtXHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5oYXNTdGFydGVkKSByZXR1cm47XHJcbiAgICB0aGlzLmhhc1N0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmICghQXJyYXkucHJvdG90eXBlLmZsYXQpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIGJiZFZlcnNpb24gKyBcIiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgb2xkIHZlcnNpb24gKFwiICsgY3VycmVudERpc2NvcmRWZXJzaW9uICsgXCIpIG9mIERpc2NvcmQuIFBsZWFzZSB1cGRhdGUgeW91ciBEaXNjb3JkIGluc3RhbGxhdGlvbiBiZWZvcmUgcHJvY2VlZGluZy5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChiZENvbmZpZy52ZXJzaW9uIDwgbWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIFV0aWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgYmRDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAod2luZG93LkVEKSB7XHJcbiAgICAgICAgVXRpbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmFuZGFnZWRCRCBkb2VzIG5vdCB3b3JrIHdpdGggRW5oYW5jZWREaXNjb3JkLiBQbGVhc2UgdW5pbnN0YWxsIG9uZSBvZiB0aGVtLlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpbmRvdy5XZWJTb2NrZXQgJiYgd2luZG93LldlYlNvY2tldC5uYW1lICYmIHdpbmRvdy5XZWJTb2NrZXQubmFtZS5pbmNsdWRlcyhcIlBhdGNoZWRcIikpIHtcclxuICAgICAgICBVdGlscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCYW5kYWdlZEJEIGRvZXMgbm90IHdvcmsgd2l0aCBQb3dlcmNvcmQuIFBsZWFzZSB1bmluc3RhbGwgb25lIG9mIHRoZW0uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoQXR0cmlidXRlcy5iaW5kKHRoaXMpLCBcIkxDIFBsdWdpbiBDZXJ0aWZpZXIgUGF0Y2hcIikoKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgdGhpcy5pbml0U2V0dGluZ3MoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XHJcbiAgICBCRFYyLmluaXRpYWxpemUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJVcGRhdGluZyBTZXR0aW5nc1wiKTtcclxuICAgIHNldHRpbmdzUGFuZWwuaW5pdGlhbGl6ZVNldHRpbmdzKCk7XHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgQWRkb25zIENhY2hlXCIpXHJcbiAgICBhd2FpdCBjb250ZW50TWFuYWdlci5sb2FkQWRkb25DZXJ0aWZpZXJDYWNoZSgpXHJcblxyXG4gICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcclxuICAgIGF3YWl0IHBsdWdpbk1vZHVsZS5sb2FkUGx1Z2lucygpO1xyXG5cclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcclxuICAgIGF3YWl0IHRoZW1lTW9kdWxlLmxvYWRUaGVtZXMoKTtcclxuXHJcbiAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgQnVmZmVyLmZyb20oRGF0YVN0b3JlLmdldEJERGF0YShcImJkY3VzdG9tY3NzXCIpLCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIikpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JldW5sb2FkXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1kYy0wXCJdKSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ0bi5idG4tZGlzY29ubmVjdFwiKS5jbGljaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgUGx1Z2luQ2VydGlmaWVyLnN0YXJ0KClcclxuXHJcbiAgICBVdGlscy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKS5sZW5ndGgpIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuICAgIFV0aWxzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSB7XHJcbiAgICAgICAgVXRpbHMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICAgICAgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IGJkcGx1Z2luRXJyb3JzLCB0aGVtZXM6IGJkdGhlbWVFcnJvcnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c1ZlcnNpb24gPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwidmVyc2lvblwiKTtcclxuICAgIGlmIChiYmRWZXJzaW9uID4gcHJldmlvdXNWZXJzaW9uKSB7XHJcbiAgICAgICAgaWYgKGJiZENoYW5nZWxvZykgdGhpcy5zaG93Q2hhbmdlbG9nTW9kYWwoYmJkQ2hhbmdlbG9nKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwidmVyc2lvblwiLCBiYmRWZXJzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBFbW9qaU1vZHVsZS5zdGFydCgpXHJcblxyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaFNvY2lhbC5iaW5kKHRoaXMpLCBcIkJEIFNvY2lhbCBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkTGlzdEl0ZW1zLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgTGlzdCBJdGVtcyBQYXRjaFwiKSgpO1xyXG4gICAgVXRpbHMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkU2VwYXJhdG9yLmJpbmQodGhpcyksIFwiQkQgR3VpbGQgU2VwYXJhdG9yIFBhdGNoXCIpKCk7XHJcbiAgICBVdGlscy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoTWVzc2FnZUhlYWRlci5iaW5kKHRoaXMpLCBcIkJEIEJhZGdlIENoYXQgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hNZW1iZXJMaXN0LmJpbmQodGhpcyksIFwiQkQgQmFkZ2UgTWVtYmVyIExpc3QgUGF0Y2hcIikoKTtcclxuICAgIFV0aWxzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hBdHRhY2htZW50LmJpbmQodGhpcyksIFwiTEMgUGx1Z2luIENlcnRpZmllciBQYXRjaFwiKSgpO1xyXG5cclxuICAgIGlmKGJkQ29uZmlnLmhhdmVJbnN0YWxsZWREZWZhdWx0KXtcclxuICAgICAgICBsZXQgYWxlcnQgPSBVdGlscy5hbGVydChcIkZpcnN0IEluc3RhbGxhdGlvblwiLCBcIkFzIGl0IGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBpbnN0YWxsIExpZ2h0Y29yZCwgV2UgYWRkZWQgdHdvIGRlZmF1bHQgdGhlbWVzIGFuZCBvbmUgZGVmYXVsdCBwbHVnaW4gaW4geW91ciBwbHVnaW4vdGhlbWUgZm9sZGVyLiBDaGVjayBpdCBpbiB0aGUgUGx1Z2luL1RoZW1lIHNldHRpbmdzLlwiKVxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGFsZXJ0Lm9uQ2xvc2UocmVzb2x2ZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgY29uc3QgbG9nbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50ID4gZGl2LnR5cGVXaW5kb3dzLTF6YS1uNy53aXRoRnJhbWUtaGFZbHRJLnRpdGxlQmFyLUFDNHBHVi5ob3Jpem9udGFsUmV2ZXJzZS0zdFJqWTcuZmxleC0xTzFHS1kuZGlyZWN0aW9uUm93UmV2ZXJzZS1tOElqSXEuanVzdGlmeVN0YXJ0LTJOREZ6aS5hbGlnblN0cmV0Y2gtRHBHUGYzLmRhLXR5cGVXaW5kb3dzLmRhLXdpdGhGcmFtZS5kYS10aXRsZUJhci5kYS1ob3Jpem9udGFsUmV2ZXJzZS5kYS1mbGV4LmRhLWRpcmVjdGlvblJvd1JldmVyc2UuZGEtanVzdGlmeVN0YXJ0LmRhLWFsaWduU3RyZXRjaCA+IGRpdi53b3JkbWFya1dpbmRvd3MtMXYwbFlELndvcmRtYXJrLTJpRERmbS5kYS13b3JkbWFya1dpbmRvd3MuZGEtd29yZG1hcmtcIilcclxuICAgIGlmKGxvZ28pe1xyXG4gICAgICAgIGxvZ28uc3R5bGUudG9wID0gXCIzcHhcIlxyXG4gICAgICAgIGxvZ28uaW5uZXJIVE1MID0gYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCI3MFwiIHZpZXdCb3g9XCIwIDAgNzIuNTQgMTBcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAtNXB4LCBtYXJnaW4tdG9wOiAxMHB4XCI+XHJcbiAgICA8cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00NC44MSw5LjY3VjYuMzNjMC0xLjIxLDIuMTMtMS40OSwyLjc4LS4yOGwyLS44MUEzLjUzLDMuNTMsMCwwLDAsNDYuMiwzYy0xLjkyLDAtMy44MSwxLjEzLTMuODEsMy4zM1Y5LjY3YzAsMi4yMSwxLjg5LDMuMzMsMy43NywzLjMzYTMuODcsMy44NywwLDAsMCwzLjQ1LTIuMThsLTIuMTItMUM0NywxMS4xNyw0NC44MSwxMC44NSw0NC44MSw5LjY3Wk0xMC42OCwxMi44OWgyLjQxVjMuMTdIMTAuNjhaTTcxLjc2LDMuMTRINjguMTlWNy4yM0w3MC41Nyw5LjR2LTRoMS4yN2MuODEsMCwxLjIxLjQxLDEuMjEsMXYzYzAsLjYzLS4zOCwxLjA1LTEuMjEsMS4wNUg2OC4xOHYyLjMxaDMuNTdjMS45MiwwLDMuNzItMSwzLjcyLTMuMlY2LjM5Qzc1LjQ4LDQuMTMsNzMuNjgsMy4xNCw3MS43NiwzLjE0Wk01NC4yMiwzYy0yLDAtNCwxLjEtNCwzLjM0VjkuNjZjMCwyLjIzLDIsMy4zNCw0LDMuMzRzMy45NS0xLjExLDMuOTUtMy4zNFY2LjM0QzU4LjE5LDQuMTEsNTYuMiwzLDU0LjIyLDNabTEuNTUsNi42NmMwLC43LS43OCwxLjA2LTEuNTQsMS4wNnMtMS41NS0uMzUtMS41NS0xLjA2VjYuMzRjMC0uNzIuNzUtMS4xLDEuNS0xLjFzMS41OS4zNSwxLjU5LDEuMVpNNjYuODQsNi4zNGMwLTIuMjktMS41OC0zLjItMy41NS0zLjJINTkuNDZ2OS43M2gyLjQ1VjkuNzdoLjQzbDIuMjIsMy4wOWgzTDY1LDkuNTJDNjYuMTMsOS4xNSw2Ni44NCw4LjE0LDY2Ljg0LDYuMzRaTTYzLjMzLDcuNjVINjEuOTFWNS40M2gxLjQyQTEuMTEsMS4xMSwwLDEsMSw2My4zMyw3LjY1Wk0yOS44MywxM2gyLjQyVjMuMDZIMjkuODNWNi43M2wtMywwVjMuMDlIMjQuN3Y5Ljc4aDIuMTRWOC42OGwzLDBaTTE3LjE2LDkuNzZWNi40MmMwLTEuMjEsMi4xMy0xLjQ5LDIuNzgtLjI4bDItLjgxYTMuNTUsMy41NSwwLDAsMC0zLjM2LTIuMjRjLTEuOTIsMC0zLjgxLDEuMTMtMy44MSwzLjMzVjkuNzZjMCwyLjIxLDIsMy4xNSwzLjksMy4xNXMzLjU4LTEsMy41OC0zVjcuNThIMTguNzlsMCwxLjM2SDIwLjN2Ljc3QzIwLjMsMTAuOTIsMTcuMTYsMTAuOTQsMTcuMTYsOS43NlpcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoLTIuOTMgLTMpXCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjM1LjkxIDAuMDYgMzguNDMgMC4wNiAzOC40MyAxLjg0IDM1LjkyIDEuODEgMzUuOTcgMTAgMzMuNTUgMTAgMzMuNDkgMS43NSAzMC45OCAxLjc0IDMwLjk4IDAuMDYgMzMuNDkgMC4wNiAzNS45MSAwLjA2XCIvPlxyXG4gICAgPHBvbHlnb24gZmlsbD1cImN1cnJlbnRDb2xvclwiIHBvaW50cz1cIjAgOS45NyA2LjUgMTAgNi41IDcuNjMgMi40MSA3LjYzIDIuNDEgMC4yNiAwIDIuMjYgMCA5Ljk3XCIvPlxyXG48L3N2Zz5gXHJcbiAgICB9XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaEF0dHJpYnV0ZXMgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGxldCBhdHRyaWJzUGF0Y2hzID0gW11cclxuICAgIHRoaXMuY2FuY2VsUGF0Y2hBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgYXR0cmlic1BhdGNocy5mb3JFYWNoKGUgPT4gZSgpKVxyXG4gICAgfVxyXG5cclxuICAgIHdoaWxlKCF2Mi5NZXNzYWdlQ29tcG9uZW50KWF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKVxyXG4gICAgXHJcbiAgICAvLyBUT0RPOiB0cnkgdG8gcGF0Y2ggY29ycmVjdGx5IHRoZSB1c2VyIHBvcG91dCBvbiBhIG5leHQgdXBkYXRlXHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJEaXNjb3JkVGFnXCIpXHJcbiAgICAudGhlbihEaXNjb3JkVGFnID0+IHtcclxuICAgICAgICBsZXQgRGlzY29yZFRhZ0NvbXAgPSBEaXNjb3JkVGFnLmRlZmF1bHRcclxuICAgICAgICBEaXNjb3JkVGFnLmRlZmF1bHQgPSBmdW5jdGlvbihwcm9wcyl7XHJcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IERpc2NvcmRUYWdDb21wKHByb3BzKVxyXG5cclxuICAgICAgICAgICAgbGV0IGlkID0gdXVpZHY0KClcclxuXHJcbiAgICAgICAgICAgIGxldCBiYWRnZURpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiBcIjVweFwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAga2V5OiBcImJhZGdlcy1cIitpZCxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmhlcml0XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSkpXHJcblxyXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBbcmV0dXJuVmFsdWVdXHJcblxyXG4gICAgICAgICAgICBpZiAocHJvcHMudXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkJhbmRhZ2VkQkQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgcHJvcHMudXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7IC8vIE5vdCBUaG9taXo6IExpZ2h0Y29yZCBEZXZlbG9wZXIsIFBob3JjeXM6IExpZ2h0Y29yZCBEZXZlbG9wZXJcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChMaWdodGNvcmRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChiYWRnZURpdilcclxuICAgICAgICAgICAgbGV0IGRpdiA9IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IFwiYmxvY2tcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCBjaGlsZHJlbilcclxuICAgICAgICAgICAgYXBwbHlCYWRnZXMoaWQsIHByb3BzLnVzZXIsIGZhbHNlKVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRpdlxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgYXR0cmlic1BhdGNocy5wdXNoKFV0aWxzLm1vbmtleVBhdGNoKHYyLk1lc3NhZ2VDb21wb25lbnQsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlKXsgLy8gdGhpcyBjYW4gYmUgYSBibG9ja2VkIG1lc3NhZ2UgKG5vdCBvcGVuZWQpXHJcbiAgICAgICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJkYXRhLW1lc3NhZ2UtaWRcIl0gPSBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2UuaWRcclxuICAgICAgICB9XHJcbiAgICB9fSkpXHJcbiAgICAgICAgLypcclxuICAgIGF0dHJpYnNQYXRjaHMucHVzaChVdGlscy5tb25rZXlQYXRjaCh2Mi5NZXNzYWdlQ29tcG9uZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHNbXCJtZXNzYWdlLWlkXCJdID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0uY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5tZXNzYWdlLmlkXHJcbiAgICB9fSkpKi9cclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUuY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgIGxldCB0aW1lc0NoZWNrZWQgPSAwO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSBCRFYyLmd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3dyYXBwZXJ9YCkubGVuZ3RoID4gMCkgdGltZXNDaGVja2VkKys7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShiZENvbmZpZy5kZWZlckxvYWRlZCA9IHRydWUpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lc0NoZWNrZWQgPj0gNTApIHJldHVybiByZXNvbHZlKGJkQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPSBcImxvYWRpbmdcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7c2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTt9KTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5qZWN0RXh0ZXJuYWxzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICAvLyBObyBleHRlcm5hbHNcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRTZXR0aW5ncyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICBpZighRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInNldHRpbmdzXCIpICYmICFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKXtcclxuICAgICAgICBpZiAoIURhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzQ29va2llLCBkZWZhdWx0Q29va2llKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicnBjXCIpKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NSUEMsIGRlZmF1bHRSUEMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXR0aW5nc1BhbmVsLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBzZXR0aW5nc1BhbmVsLmxvYWRTZXR0aW5ncygpO1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiBkZWZhdWx0Q29va2llKSB7XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtzZXR0aW5nXSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzQ29va2llW3NldHRpbmddID0gZGVmYXVsdENvb2tpZVtzZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzUGFuZWwuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQucHJvdG90eXBlICYmIGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMpXHJcbiAgICAudGhlbihzZXR0aW5nTW9kdWxlID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGdldFByZWRpY2F0ZVNlY3Rpb25zID0gc2V0dGluZ01vZHVsZS5kZWZhdWx0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVTZWN0aW9uc1xyXG4gICAgICAgIHNldHRpbmdNb2R1bGUuZGVmYXVsdC5wcm90b3R5cGUuZ2V0UHJlZGljYXRlU2VjdGlvbnMgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0UHJlZGljYXRlU2VjdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcblxyXG4gICAgICAgICAgICBpZighcmVzdWx0WzFdKXJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgaWYocmVzdWx0WzFdLnNlY3Rpb24gPT09IFwiTXkgQWNjb3VudFwiKXsgLy8gdXNlciBzZXR0aW5ncywgbm90IGd1aWxkIHNldHRpbmdzXHJcbiAgICAgICAgICAgICAgICBsZXQgcG9wZWQgPSBbXVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuICAgICAgICAgICAgICAgIHBvcGVkLnB1c2gocmVzdWx0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgcG9wZWQucHVzaChyZXN1bHQucG9wKCkpXHJcbiAgICAgICAgICAgICAgICBwb3BlZC5wdXNoKHJlc3VsdC5wb3AoKSlcclxuXHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5zZXR0aW5nc1BhbmVsLnJlbmRlclNpZGViYXIodGhpcykpXHJcblxyXG4gICAgICAgICAgICAgICAgd2hpbGUocG9wZWRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvcGVkLnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59O1xyXG5cclxuXHJcbmxldCBjbGFzc05hbWVMYXllclxyXG5sZXQgY2xhc3NOYW1lU29jaWFsTGlua3NcclxubGV0IGNsYXNzTmFtZU1vZGFsXHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbk1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikgcGx1Z2luTW9kdWxlLnJhd09ic2VydmVyKG11dGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXHJcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcblxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTGF5ZXIpY2xhc3NOYW1lTGF5ZXIgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLmxheWVyICYmIHR5cGVvZiBlLmxheWVyID09PSBcInN0cmluZ1wiICYmIGUuYW5pbWF0aW5nKVswXS5sYXllclxyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lU29jaWFsTGlua3MpY2xhc3NOYW1lU29jaWFsTGlua3MgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLnNvY2lhbExpbmtzICYmIHR5cGVvZiBlLnNvY2lhbExpbmtzID09PSBcInN0cmluZ1wiKVswXS5zb2NpYWxMaW5rc1xyXG4gICAgICAgICAgICBpZighY2xhc3NOYW1lTW9kYWwpY2xhc3NOYW1lTW9kYWwgPSBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1vZGFsICYmIHR5cGVvZiBlLm1vZGFsID09PSBcInN0cmluZ1wiICYmIGUuaW5uZXIgJiYgdHlwZW9mIGUuaW5uZXIgPT09IFwic3RyaW5nXCIgJiYgIWUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlKVswXS5tb2RhbFxyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSA9PT0gXCJHVUlMRF9TRVRUSU5HU1wiKXtcclxuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWVTb2NpYWxMaW5rcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudEVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSAmJiBub2RlLnF1ZXJ5U2VsZWN0b3IoXCIjYWNlX3NldHRpbmdzbWVudVwiKSkgbm9kZS5pZCA9IFwiYWNlX3NldHRpbmdzbWVudV9jb250YWluZXJcIjtcclxuXHJcbiAgICAgICAgICAgIC8vIEVtb2ppIFBpY2tlclxyXG4gICAgICAgICAgICAvL25vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGggJiYgIW5vZGUucXVlcnlTZWxlY3RvcihcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRvckxlZnQtMUVReFUwXCIpXHJcbiAgICAgICAgICAgIC8vaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUxheWVyMikgJiYgbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZUVtb2ppUGlja2VyKS5sZW5ndGggICYmICFub2RlLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrY2xhc3NOYW1lRW1vamlQaWNrZXIpLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZUFuaW1hdG9yTGVmdCkpIHF1aWNrRW1vdGVNZW51Lm9ic0NhbGxiYWNrKG5vZGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBtYWluT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnNob3dDaGFuZ2Vsb2dNb2RhbCA9IGZ1bmN0aW9uKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIFV0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmFsZXJ0ID0gZnVuY3Rpb24odGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBVdGlscy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5wYXRjaFNvY2lhbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IFRhYkJhciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiVGFiQmFyXCIpO1xyXG4gICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XHJcbiAgICBpZiAoIVRhYkJhcikgcmV0dXJuO1xyXG4gICAgdGhpcy5zb2NpYWxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW47XHJcbiAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoIHx8IGNoaWxkcmVuLmxlbmd0aCA8IDMpIHJldHVybjtcclxuICAgICAgICBpZiAoY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gM10udHlwZS5kaXNwbGF5TmFtZSAhPT0gXCJTZXBhcmF0b3JcIikgcmV0dXJuO1xyXG4gICAgICAgIGlmICghY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZS50b1N0cmluZygpLmluY2x1ZGVzKFwic29jaWFsTGlua3NcIikpIHJldHVybjtcclxuICAgICAgICBpZiAoQW5jaG9yKSB7XHJcbiAgICAgICAgICAgIGxldCBzb2NpYWxNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc29jaWFsTGlua3MpWzBdXHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMl0udHlwZTtcclxuICAgICAgICAgICAgY29uc3QgbmV3T25lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbCguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsLnByb3BzLmNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxpbmsgXCIrc29jaWFsTW9kdWxlMS5saW5rLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwV3JhcCwge2NvbG9yOiBcImJsYWNrXCIsIHNpZGU6IFwidG9wXCIsIHRleHQ6IFwiQmFuZGFnZWRCRFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGluayBcIitzb2NpYWxNb2R1bGUxLmxpbmssIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1zb2NpYWwtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlID0gbmV3T25lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgY2xhc3NOYW1lQ29sb3JNdXRlZCxcclxuICAgICAgICAgICAgc2l6ZXMsXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZVZlcnNpb25IYXNoXHJcbiAgICAgICAgXSA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JNdXRlZClbMF0uY29sb3JNdXRlZCxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUudmVyc2lvbkhhc2gpWzBdLnZlcnNpb25IYXNoXHJcbiAgICAgICAgXVxyXG5cclxuICAgICAgICBjb25zdCB2ZXJzaW9uSGFzaCA9IGAoJHtiZENvbmZpZy5oYXNoID8gYmRDb25maWcuaGFzaC5zdWJzdHJpbmcoMCwgNykgOiBiZENvbmZpZy5icmFuY2h9KWA7XHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbCA9IFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgTGlnaHRjb3JkICR7ZWxlY3Ryb24uZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLnZlcnNpb259IGAsIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogY2xhc3NOYW1lVmVyc2lvbkhhc2grXCIgZGEtdmVyc2lvbkhhc2hcIn0sIGAoJHsoZWxlY3Ryb24uZ2V0R2xvYmFsKFwiQnVpbGRJbmZvXCIpLmNvbW1pdCB8fCBcIlVua25vd25cIikuc2xpY2UoMCwgNyl9KWApKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGAke2NsYXNzTmFtZUNvbG9yTXV0ZWR9ICR7c2l6ZXMuc2l6ZTEyfWB9LCBgQkJEICR7YmJkVmVyc2lvbn0gYCwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBjbGFzc05hbWVWZXJzaW9uSGFzaCtcIiBkYS12ZXJzaW9uSGFzaFwifSwgdmVyc2lvbkhhc2gpKVxyXG4gICAgICAgIF1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWZXJzaW9ucyA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGU7XHJcbiAgICAgICAgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWwgPSBvcmlnaW5hbFZlcnNpb25zKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5zcGxpY2UoMSwgMCwgYWRkaXRpb25hbCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgfTtcclxuICAgIH19KTtcclxufTtcclxuXHJcbmNvbnN0IGdldEd1aWxkQ2xhc3NlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgY29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwid3JhcHBlclwiLCBcInVucmVhZE1lbnRpb25zQmFyXCIpO1xyXG4gICAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJndWlsZHNFcnJvclwiLCBcInNlbGVjdGVkXCIpO1xyXG4gICAgY29uc3QgcGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwiYmxvYkNvbnRhaW5lclwiKTtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZExpc3RJdGVtcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRDbGFzc2VzID0gZ2V0R3VpbGRDbGFzc2VzKCk7XHJcbiAgICBjb25zdCBsaXN0SXRlbUNsYXNzID0gR3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgIGNvbnN0IGJsb2JDbGFzcyA9IEd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgIGNvbnN0IHJlYWN0SW5zdGFuY2UgPSBCRFYyLmdldEludGVybmFsSW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgY29uc3QgR3VpbGRDb21wb25lbnQgPSByZWFjdEluc3RhbmNlLnJldHVybi50eXBlO1xyXG4gICAgaWYgKCFHdWlsZENvbXBvbmVudCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEucmV0dXJuVmFsdWUgJiYgZGF0YS50aGlzT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGREYXRhID0gZGF0YS50aGlzT2JqZWN0LnByb3BzO1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NOYW1lID0gcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lXHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSBjbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIGNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSBjbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSBjbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgPSBjbGFzc05hbWVcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoR3VpbGRQaWxscyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRQaWxsUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IGd1aWxkUGlsbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgIW0uZGVmYXVsdC5kaXNwbGF5TmFtZSAmJiBtLmRlZmF1bHQudG9TdHJpbmcgJiYgbS5kZWZhdWx0LnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJ0cmFuc2xhdGUzZFwiKSk7XHJcbiAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xyXG4gICAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKGd1aWxkUGlsbCwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEubWV0aG9kQXJndW1lbnRzWzBdO1xyXG4gICAgICAgIGlmIChwcm9wcy51bnJlYWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICBpZiAocHJvcHMuaG92ZXJlZCkgZGF0YS5yZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xyXG4gICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgfX0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCkgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJHdWlsZHNcIik7XHJcbiAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xyXG4gICAgaWYgKCFndWlsZENvbXBvbmVudHMgfHwgIUd1aWxkcykgcmV0dXJuO1xyXG4gICAgY29uc3QgR3VpbGRTZXBhcmF0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XHJcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkcy5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdLnByb3BzLmNoaWxkcmVuWzNdLnR5cGUgPSBHdWlsZFNlcGFyYXRvcjtcclxuICAgIH19KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLnBhdGNoQXR0YWNobWVudCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuQXR0YWNobWVudFBhdGNoKSByZXR1cm47XHJcbiAgICBjb25zdCBBdHRhY2htZW50ID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXR0YWNobWVudFwiKVswXSAvLyB0ZW1wb3JhcnlcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIUF0dGFjaG1lbnQgfHwgIUF0dGFjaG1lbnQuZGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5BdHRhY2htZW50UGF0Y2ggPSBVdGlscy5tb25rZXlQYXRjaChBdHRhY2htZW50LCBcImRlZmF1bHRcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmKCFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSlyZXR1cm5cclxuICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF0gfHwgbnVsbFxyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuXCIpO1xyXG5cclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdHRhY2htZW50IHx8ICFhdHRhY2htZW50LnVybClyZXR1cm5cclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xyXG4gICAgICAgICAgICBpZDogXCJjZXJ0aWZpZWQtXCIraWRcclxuICAgICAgICB9KSlcclxuICAgICAgICBQbHVnaW5DZXJ0aWZpZXIucGF0Y2goYXR0YWNobWVudCwgXCJjZXJ0aWZpZWQtXCIraWQpXHJcbiAgICB9fSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZXNzYWdlSGVhZGVyID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyUGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lc3NhZ2VIZWFkZXIgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIk1lc3NhZ2VUaW1lc3RhbXBcIik7XHJcbiAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgIGlmICghQW5jaG9yIHx8ICFNZXNzYWdlSGVhZGVyIHx8ICFNZXNzYWdlSGVhZGVyLmRlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMubWVzc2FnZUhlYWRlclBhdGNoID0gVXRpbHMubW9ua2V5UGF0Y2goTWVzc2FnZUhlYWRlciwgXCJkZWZhdWx0XCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSBVdGlscy5nZXROZXN0ZWRQcm9wKGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLCBcIm1lc3NhZ2UuYXV0aG9yXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IGhlYWRlciA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlbi4xLnByb3BzXCIpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnJldHVyblZhbHVlLCBcInByb3BzLmNoaWxkcmVuLjEucHJvcHMuY2hpbGRyZW4uMS5wcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFhdXRob3IgfHwgIWF1dGhvci5pZClyZXR1cm5cclxuICAgICAgICAvLyBpZiAoaGVhZGVyICYmIGhlYWRlci5jbGFzc05hbWUpIGhlYWRlci5jbGFzc05hbWUgKz0gXCIgXCJcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGF1dGhvci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikgeyAvLyBSYXVlbnppOiBCYW5kYWdlZEJEIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLWNoYXQtYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhdXRob3IuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgYXV0aG9yLmlkID09PSBcIjY5NjAwMzQ1NjYxMTM4NTM5NlwiKXsgLy8gTm90IFRob21pejogTGlnaHRjb3JkIERldmVsb3BlciwgUGhvcmN5czogTGlnaHRjb3JkIERldmVsb3BlclxyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJMaWdodGNvcmQgRGV2ZWxvcGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtjbGFzc05hbWU6IFwiYmQtY2hhdC1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9MaWdodGNvcmQvTGlnaHRjb3JkXCIsIHRpdGxlOiBcIkxpZ2h0Y29yZFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlnaHRjb3JkTG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtbG9nb1wifSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KClcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYmFkZ2VzLVwiK2lkLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImlubGluZVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGFwcGx5QmFkZ2VzKGlkLCBhdXRob3IsIHRydWUpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBhcHBseUJhZGdlcyhpZCwgdXNlciwgY2hhdCl7XHJcbiAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhZGdlcy1cIitpZClcclxuICAgICAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuXHJcbiAgICAgICAgaWYoZGl2LmNoaWxkTm9kZXMubGVuZ3RoKXJldHVyblxyXG4gICAgICAgIGxldCBibG9ja0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcclxuICAgICAgICBibG9ja0Rpdi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcclxuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoYmxvY2tEaXYpXHJcblxyXG4gICAgICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG5cclxuICAgICAgICBkaXN0YW50LmdldEJhZGdlcyh1c2VyLmlkKVxyXG4gICAgICAgIC50aGVuKGJhZGdlcyA9PiB7XHJcbiAgICAgICAgICAgIGJhZGdlcy5mb3JFYWNoKGJhZGdlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN2Zzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJiZC1sb2dvXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjE2cHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYmFkZ2Uuc2NvcGVzLmZvckVhY2goc2NvcGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHNjb3BlID09PSBcInVzZXJcIil7Ly8gcmVxdWlyZSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVzZXIgPSB1c2VyXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkgXHJcbiAgICAgICAgICAgICAgICBpZighYmFkZ2UuaHJlZil7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuQW5jaG9yID0gQW5jaG9yXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMuaHJlZiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogYmFkZ2UubmFtZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgYmFkZ2UuaHJlZiA/IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogYmFkZ2UuaHJlZixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjaGF0ID8gXCJiZC1jaGF0LWJhZGdlXCIgOiBcImJkLW1lbWJlci1iYWRnZVwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGJhZGdlLm5hbWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICB9LCBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoYmFkZ2UuY29tcG9uZW50LCBwcm9wcykpIDogQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KGJhZGdlLmNvbXBvbmVudCwgcHJvcHMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoZWxlbWVudCwgZGl2MilcclxuICAgICAgICAgICAgICAgIGRpdjIuY2hpbGROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChub2RlKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSlcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUucGF0Y2hNZW1iZXJMaXN0ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tZW1iZXJMaXN0UGF0Y2gpIHJldHVybjtcclxuICAgIGNvbnN0IE1lbWJlckxpc3RJdGVtID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJNZW1iZXJMaXN0SXRlbVwiKTtcclxuICAgIGNvbnN0IEFuY2hvciA9IFdlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRpc3BsYXlOYW1lID09IFwiQW5jaG9yXCIpO1xyXG4gICAgaWYgKCFBbmNob3IgfHwgIU1lbWJlckxpc3RJdGVtIHx8ICFNZW1iZXJMaXN0SXRlbS5wcm90b3R5cGUgfHwgIU1lbWJlckxpc3RJdGVtLnByb3RvdHlwZS5yZW5kZXJEZWNvcmF0b3JzKSByZXR1cm47XHJcbiAgICB0aGlzLm1lbWJlckxpc3RQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKE1lbWJlckxpc3RJdGVtLnByb3RvdHlwZSwgXCJyZW5kZXJEZWNvcmF0b3JzXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLnRoaXNPYmplY3QsIFwicHJvcHMudXNlclwiKTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5yZXR1cm5WYWx1ZSwgXCJwcm9wcy5jaGlsZHJlblwiKTtcclxuICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICF1c2VyIHx8ICF1c2VyLmlkKXJldHVyblxyXG4gICAgICAgIC8vIGlmIChoZWFkZXIgJiYgaGVhZGVyLmNsYXNzTmFtZSkgaGVhZGVyLmNsYXNzTmFtZSArPSBcIiBcIlxyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHJldHVybjtcclxuICAgICAgICBpZiAodXNlci5pZCA9PT0gXCIyNDk3NDYyMzYwMDgxNjk0NzNcIikge1xyXG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxyXG4gICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJCYW5kYWdlZEJEIERldmVsb3BlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLW1lbWJlci1iYWRnZVwiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgdGl0bGU6IFwiQmFuZGFnZWRCRFwiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRMb2dvLCB7c2l6ZTogXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHVzZXIuaWQgPT09IFwiNjk2NDgxMTk0NDQzMDE0MTc0XCIgfHwgdXNlci5pZCA9PT0gXCI2OTYwMDM0NTY2MTEzODUzOTZcIil7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXHJcbiAgICAgICAgICAgICAgICBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXAsIHtjb2xvcjogXCJibGFja1wiLCBzaWRlOiBcInRvcFwiLCB0ZXh0OiBcIkxpZ2h0Y29yZCBEZXZlbG9wZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1tZW1iZXItYmFkZ2VcIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vTGlnaHRjb3JkL0xpZ2h0Y29yZFwiLCB0aXRsZTogXCJMaWdodGNvcmRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpXHJcbiAgICAgICAgY2hpbGRyZW4ucHVzaChcclxuICAgICAgICAgICAgQkRWMi5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiYWRnZXMtXCIraWR9KVxyXG4gICAgICAgIClcclxuICAgICAgICBhcHBseUJhZGdlcyhpZCwgdXNlciwgZmFsc2UpXHJcbiAgICB9fSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS51cGRhdGVJbmplY3RvciA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gVGhlcmUgd2lsbCBuZXZlciBiZSBhbiBpbmplY3Rpb24gcGF0aCwgc28gd2UgZG8gbm90IG5lZWQgdGhlIGNvZGUgYmVsb3cuIFxyXG4gICAgLy8gSW5zZXJ0IGNvbW1lbnRzIHNvIGl0IHdpbGwgYmUgZXJhc2VkIHdoZW4gcHJvZHVjdGlvbi5cclxuICAgIFxyXG4gICAgY29uc3QgaW5qZWN0aW9uUGF0aCA9IERhdGFTdG9yZS5pbmplY3Rpb25QYXRoO1xyXG4gICAgaWYgKCFpbmplY3Rpb25QYXRoKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgLypcclxuXHJcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuICAgIGNvbnN0IHJtcmYgPSByZXF1aXJlKFwicmltcmFmXCIpO1xyXG4gICAgY29uc3QgeWF1emwgPSByZXF1aXJlKFwieWF1emxcIik7XHJcbiAgICBjb25zdCBta2RpcnAgPSByZXF1aXJlKFwibWtkaXJwXCIpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xyXG5cclxuICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLnJlc29sdmUoaW5qZWN0aW9uUGF0aCwgXCIuLlwiKTtcclxuICAgIGNvbnN0IGZvbGRlck5hbWUgPSBwYXRoLmJhc2VuYW1lKGluamVjdGlvblBhdGgpO1xyXG4gICAgY29uc3QgemlwTGluayA9IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9hcmNoaXZlL2luamVjdG9yLnppcFwiO1xyXG4gICAgY29uc3Qgc2F2ZWRaaXAgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJpbmplY3Rvci56aXBcIik7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGb2xkZXIgPSBwYXRoLnJlc29sdmUocGFyZW50UGF0aCwgXCJCZXR0ZXJEaXNjb3JkQXBwLWluamVjdG9yXCIpO1xyXG5cclxuICAgIC8vIERvd25sb2FkIHRoZSBpbmplY3RvciB6aXAgZmlsZVxyXG4gICAgVXRpbHMubG9nKFwiSW5qZWN0b3JVcGRhdGVcIiwgXCJEb3dubG9hZGluZyBcIiArIHppcExpbmspO1xyXG4gICAgbGV0IHN1Y2Nlc3MgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICByZXF1ZXN0LmdldCh7dXJsOiB6aXBMaW5rLCBlbmNvZGluZzogbnVsbH0sIGFzeW5jIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkgcmV0dXJuIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICAvLyBTYXZlIGEgYmFja3VwIGluIGNhc2Ugc29tZW9uZSBoYXMgdGhlaXIgb3duIGNvcHlcclxuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlcyA9PiBmcy5leGlzdHMoc2F2ZWRaaXAsIHJlcykpO1xyXG4gICAgICAgICAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShzYXZlZFppcCwgYCR7c2F2ZWRaaXB9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCwgcmVzKSk7XHJcblxyXG4gICAgICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIldyaXRpbmcgXCIgKyBzYXZlZFppcCk7XHJcbiAgICAgICAgICAgIGZzLndyaXRlRmlsZShzYXZlZFppcCwgYm9keSwgZXJyID0+IHJlc29sdmUoIWVycikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHJldHVybiBzdWNjZXNzO1xyXG5cclxuICAgIC8vIENoZWNrIGFuZCBkZWxldGUgcmVuYW1lIGV4dHJhY3Rpb25cclxuICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4gZnMuZXhpc3RzKGV4dHJhY3RlZEZvbGRlciwgcmVzKSk7XHJcbiAgICBpZiAoYWxyZWFkeUV4aXN0cykgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IGZzLnJlbmFtZShleHRyYWN0ZWRGb2xkZXIsIGAke2V4dHJhY3RlZEZvbGRlcn0uYmFrJHtNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLm5vdygpKX1gLCByZXMpKTtcclxuICAgIFxyXG4gICAgLy8gVW56aXAgdGhlIGRvd25sb2FkZWQgemlwIGZpbGVcclxuICAgIGNvbnN0IHppcGZpbGUgPSBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHlhdXpsLm9wZW4oc2F2ZWRaaXAsIHtsYXp5RW50cmllczogdHJ1ZX0sIChlcnIsIHppcCkgPT4gIHIoemlwKSkpO1xyXG4gICAgemlwZmlsZS5vbihcImVudHJ5XCIsIGZ1bmN0aW9uKGVudHJ5KSB7XHJcbiAgICAgICAgLy8gU2tpcCBkaXJlY3RvcmllcywgdGhleSBhcmUgaGFuZGxlZCB3aXRoIG1rZGlycFxyXG4gICAgICAgIGlmIChlbnRyeS5maWxlTmFtZS5lbmRzV2l0aChcIi9cIikpIHJldHVybiB6aXBmaWxlLnJlYWRFbnRyeSgpO1xyXG5cclxuICAgICAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkV4dHJhY3RpbmcgXCIgKyBlbnRyeS5maWxlTmFtZSk7XHJcbiAgICAgICAgLy8gTWFrZSBhbnkgbmVlZGVkIHBhcmVudCBkaXJlY3Rvcmllc1xyXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGVudHJ5LmZpbGVOYW1lKTtcclxuICAgICAgICBta2RpcnAuc3luYyhwYXRoLmRpcm5hbWUoZnVsbFBhdGgpKTtcclxuICAgICAgICB6aXBmaWxlLm9wZW5SZWFkU3RyZWFtKGVudHJ5LCBmdW5jdGlvbihlcnIsIHJlYWRTdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKGVycikgcmV0dXJuIHN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVhZFN0cmVhbS5vbihcImVuZFwiLCBmdW5jdGlvbigpIHt6aXBmaWxlLnJlYWRFbnRyeSgpO30pOyAvLyBHbyB0byBuZXh0IGZpbGUgYWZ0ZXIgdGhpc1xyXG4gICAgICAgICAgICByZWFkU3RyZWFtLnBpcGUoZnMuY3JlYXRlV3JpdGVTdHJlYW0oZnVsbFBhdGgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgemlwZmlsZS5yZWFkRW50cnkoKTsgLy8gU3RhcnQgcmVhZGluZ1xyXG5cclxuICAgIC8vIFdhaXQgZm9yIHRoZSBmaW5hbCBmaWxlIHRvIGZpbmlzaFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB6aXBmaWxlLm9uY2UoXCJlbmRcIiwgcmVzb2x2ZSkpO1xyXG5cclxuICAgIC8vIFNhdmUgYSBiYWNrdXAgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZyBkdXJpbmcgZmluYWwgc3RlcFxyXG4gICAgY29uc3QgYmFja3VwRm9sZGVyID0gcGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIGAke2ZvbGRlck5hbWV9LmJhayR7TWF0aC5yb3VuZChwZXJmb3JtYW5jZS5ub3coKSl9YCk7XHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGZzLnJlbmFtZShpbmplY3Rpb25QYXRoLCBiYWNrdXBGb2xkZXIsIHJlc29sdmUpKTtcclxuXHJcbiAgICAvLyBSZW5hbWUgdGhlIGV4dHJhY3RlZCBmb2xkZXIgdG8gd2hhdCBpdCBzaG91bGQgYmVcclxuICAgIFV0aWxzLmxvZyhcIkluamVjdG9yVXBkYXRlXCIsIGBSZW5hbWluZyAke3BhdGguYmFzZW5hbWUoZXh0cmFjdGVkRm9sZGVyKX0gdG8gJHtmb2xkZXJOYW1lfWApO1xyXG4gICAgc3VjY2VzcyA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZnMucmVuYW1lKGV4dHJhY3RlZEZvbGRlciwgaW5qZWN0aW9uUGF0aCwgZXJyID0+IHJlc29sdmUoIWVycikpKTtcclxuICAgIGlmICghc3VjY2Vzcykge1xyXG4gICAgICAgIFV0aWxzLmVycihcIkluamVjdG9yVXBkYXRlXCIsIFwiRmFpbGVkIHRvIHJlbmFtZSB0aGUgZmluYWwgZGlyZWN0b3J5XCIpO1xyXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHJlbmFtZSBoYWQgaXNzdWVzLCBkZWxldGUgd2hhdCB3ZSB0cmllZCB0byByZW5hbWUgYW5kIHJlc3RvcmUgYmFja3VwXHJcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcclxuICAgICAgICBVdGlscy5lcnIoXCJJbmplY3RvclVwZGF0ZVwiLCBcIlNvbWV0aGluZyB3ZW50IHdyb25nLi4uIHJlc3RvcmluZyBiYWNrdXBzLlwiKTtcclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJtcmYoZXh0cmFjdGVkRm9sZGVyLCByZXNvbHZlKSk7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy5yZW5hbWUoYmFja3VwRm9sZGVyLCBpbmplY3Rpb25QYXRoLCByZXNvbHZlKSk7XHJcbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgd2UndmUgZ290dGVuIHRvIHRoaXMgcG9pbnQsIGV2ZXJ5dGhpbmcgc2hvdWxkIGhhdmUgZ29uZSBzbW9vdGhseS5cclxuICAgIC8vIENsZWFudXAgdGhlIGJhY2t1cCBmb2xkZXIgdGhlbiByZW1vdmUgdGhlIHppcFxyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBybXJmKGJhY2t1cEZvbGRlciwgcmVzb2x2ZSkpO1xyXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBmcy51bmxpbmsoc2F2ZWRaaXAsIHJlc29sdmUpKTtcclxuXHJcbiAgICBVdGlscy5sb2coXCJJbmplY3RvclVwZGF0ZVwiLCBcIkluamVjdG9yIFVwZGF0ZWQhXCIpO1xyXG4gICAgcmV0dXJuIHN1Y2Nlc3M7Ki9cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlKCk7XHJcblxyXG4vKipcclxuICogRG9uJ3QgZXhwb3NlIGNvcmUgLSBjb3VsZCBiZSBkYW5nZXJvdXMgZm9yIG5vd1xyXG4gKi8iLCJjb25zdCBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyA9IHdpbmRvdy5yZXF1aXJlXHJcblxyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcblxyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCByZWxlYXNlQ2hhbm5lbCA9IERpc2NvcmROYXRpdmUuZ2xvYmFscyA/IERpc2NvcmROYXRpdmUuZ2xvYmFscy5yZWxlYXNlQ2hhbm5lbCA6IERpc2NvcmROYXRpdmUuYXBwID8gRGlzY29yZE5hdGl2ZS5hcHAuZ2V0UmVsZWFzZUNoYW5uZWwoKSA6IFwic3RhYmxlXCI7XHJcblxyXG5sZXQgZGF0YVBhdGggPSBcIlwiO1xyXG5pZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSBkYXRhUGF0aCA9IHByb2Nlc3MuZW52LkFQUERBVEE7XHJcbmVsc2UgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpIGRhdGFQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUsIFwiTGlicmFyeVwiLCBcIlByZWZlcmVuY2VzXCIpO1xyXG5lbHNlIGRhdGFQYXRoID0gcHJvY2Vzcy5lbnYuWERHX0NPTkZJR19IT01FID8gcHJvY2Vzcy5lbnYuWERHX0NPTkZJR19IT01FIDogcGF0aC5qb2luKHByb2Nlc3MuZW52LkhPTUUsIFwiLmNvbmZpZ1wiKTtcclxuZGF0YVBhdGggPSBwYXRoLmpvaW4oZGF0YVBhdGgsIFwiQmV0dGVyRGlzY29yZFwiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEYXRhU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0ge3NldHRpbmdzOiB7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX19O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YSA9IHt9O1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5EYXRhU3RvcmUgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5CREZpbGUpKSBmcy53cml0ZUZpbGVTeW5jKHRoaXMuQkRGaWxlLCBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGEsIG51bGwsIDQpLCBcInV0Zi04XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGhpcy5CREZpbGUsIFwidXRmLThcIikpXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnNldHRpbmdzRmlsZSkpIHJldHVybjtcclxuICAgICAgICAgICAgbGV0IHNldHRpbmdzID0gX19ub25fd2VicGFja19yZXF1aXJlX18odGhpcy5zZXR0aW5nc0ZpbGUpO1xyXG4gICAgICAgICAgICBmcy51bmxpbmtTeW5jKHRoaXMuc2V0dGluZ3NGaWxlKTtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KFwic2V0dGluZ3NcIikpIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHtbcmVsZWFzZUNoYW5uZWxdOiBzZXR0aW5nc30pO1xyXG4gICAgICAgICAgICBlbHNlIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7c3RhYmxlOiB7fSwgY2FuYXJ5OiB7fSwgcHRiOiB7fX0sIHNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRCRERhdGEoXCJzZXR0aW5nc1wiLCBzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICBVdGlscy5hbGVydChcIkNvcnJ1cHQgU3RvcmFnZVwiLCBcIlRoZSBiZCBzdG9yYWdlIGhhcyBzb21laG93IGJlY29tZSBjb3JydXB0LiBZb3UgbWF5IGVpdGhlciB0cnkgdG8gc2FsdmFnZSB0aGUgZmlsZSBvciBkZWxldGUgaXQgdGhlbiByZWxvYWQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgaW5qZWN0aW9uUGF0aCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2luamVjdGlvblBhdGgpIHJldHVybiB0aGlzLl9pbmplY3Rpb25QYXRoO1xyXG4gICAgICAgIGNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGVsZWN0cm9uLmdldEFwcFBhdGgoKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nQmFzZSA9IGVsZWN0cm9uLmdldFBhdGgoXCJ1c2VyRGF0YVwiKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nTG9jYXRpb24gPSBwYXRoLnJlc29sdmUocm9hbWluZ0Jhc2UsIGVsZWN0cm9uLmdldFZlcnNpb24oKSwgXCJtb2R1bGVzXCIsIFwiZGlzY29yZF9kZXNrdG9wX2NvcmVcIiwgXCJpbmplY3RvclwiKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShiYXNlLCBcIi4uXCIsIFwiYXBwXCIpO1xyXG4gICAgICAgIGNvbnN0IHJlYWxMb2NhdGlvbiA9IGZzLmV4aXN0c1N5bmMobG9jYXRpb24pID8gbG9jYXRpb24gOiBmcy5leGlzdHNTeW5jKHJvYW1pbmdMb2NhdGlvbikgPyByb2FtaW5nTG9jYXRpb24gOiBudWxsO1xyXG4gICAgICAgIGlmICghcmVhbExvY2F0aW9uKSByZXR1cm4gdGhpcy5faW5qZWN0aW9uUGF0aCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luamVjdGlvblBhdGggPSByZWFsTG9jYXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbmZpZ0ZpbGUoKSB7cmV0dXJuIHRoaXMuX2NvbmZpZ0ZpbGUgfHwgKHRoaXMuX2NvbmZpZ0ZpbGUgPSBwYXRoLnJlc29sdmUodGhpcy5pbmplY3Rpb25QYXRoLCBcImJldHRlcmRpc2NvcmRcIiwgXCJjb25maWcuanNvblwiKSk7fVxyXG4gICAgZ2V0IEJERmlsZSgpIHtyZXR1cm4gdGhpcy5fQkRGaWxlIHx8ICh0aGlzLl9CREZpbGUgPSBwYXRoLnJlc29sdmUoZGF0YVBhdGgsIFwiYmRzdG9yYWdlLmpzb25cIikpO31cclxuICAgIGdldCBzZXR0aW5nc0ZpbGUoKSB7cmV0dXJuIHRoaXMuX3NldHRpbmdzRmlsZSB8fCAodGhpcy5fc2V0dGluZ3NGaWxlID0gcGF0aC5yZXNvbHZlKGRhdGFQYXRoLCBcImJkc2V0dGluZ3MuanNvblwiKSk7fVxyXG4gICAgZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSB7cmV0dXJuIHBhdGgucmVzb2x2ZShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyLCBwbHVnaW5OYW1lICsgXCIuY29uZmlnLmpzb25cIik7fVxyXG5cclxuICAgIGdldFNldHRpbmdHcm91cChrZXkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnNldHRpbmdzW3JlbGVhc2VDaGFubmVsXVtrZXldIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2V0dGluZ0dyb3VwKGtleSwgZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZGF0YS5zZXR0aW5nc1tyZWxlYXNlQ2hhbm5lbF1ba2V5XSA9IGRhdGE7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLkJERmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCRERhdGEoa2V5KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldIHx8IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QkREYXRhKGtleSwgdmFsdWUpIHtcclxuICAgICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5CREZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSwgbnVsbCwgNCksIFwidXRmLThcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmModGhpcy5nZXRQbHVnaW5GaWxlKHBsdWdpbk5hbWUpKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV0gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSkpKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdW2tleV07XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xyXG4gICAgICAgIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLmdldFBsdWdpbkZpbGUocGx1Z2luTmFtZSksIEpTT04uc3RyaW5naWZ5KHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSwgbnVsbCwgNCksIFwidXRmLThcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdID09PSB1bmRlZmluZWQpIHRoaXMucGx1Z2luRGF0YVtwbHVnaW5OYW1lXSA9IHt9O1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnBsdWdpbkRhdGFbcGx1Z2luTmFtZV1ba2V5XTtcclxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZ2V0UGx1Z2luRmlsZShwbHVnaW5OYW1lKSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW5EYXRhW3BsdWdpbk5hbWVdLCBudWxsLCA0KSwgXCJ1dGYtOFwiKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZNb2RlIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZGVidWdMaXN0ZW5lciA9IHRoaXMuZGVidWdMaXN0ZW5lci5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIgPSB0aGlzLmNvcHlTZWxlY3Rvckxpc3RlbmVyLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIHRoaXMuc3RhcnRDb3B5U2VsZWN0b3IoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICB0aGlzLnN0b3BEZWJ1Z0xpc3RlbmVyKCk7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnREZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIHRoaXMuc3RvcERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmRlYnVnTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BEZWJ1Z0xpc3RlbmVyKCkge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMuZGVidWdMaXN0ZW5lcik7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3BDb3B5U2VsZWN0b3IoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMuY29weVNlbGVjdG9yTGlzdGVuZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlYnVnTGlzdGVuZXIoZSkge1xyXG4gICAgICAgIGlmIChlLndoaWNoID09PSAxMTkgfHwgZS53aGljaCA9PSAxMTgpIHsvL0Y4XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbJWNEZXZNb2RlJWNdICVjQnJlYWsvUmVzdW1lXCIsIFwiY29sb3I6IHJlZDtcIiwgXCJjb2xvcjogIzMwMzAzMDsgZm9udC13ZWlnaHQ6NzAwO1wiLCBcImNvbG9yOnJlZDtcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIGRlYnVnZ2VyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWRlYnVnZ2VyXHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvcHlTZWxlY3Rvckxpc3RlbmVyKGUpIHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvcihlLnRhcmdldCk7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgICAgIGNsYXNzTGF5ZXIsIFxyXG4gICAgICAgICAgICAgICAgY2xhc3NJdGVtc1xyXG4gICAgICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICAgICAgQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5sYXllciAmJiB0eXBlb2YgZS5sYXllciA9PT0gXCJzdHJpbmdcIiAmJiBlLmRpc2FibGVkUG9pbnRlckV2ZW50cylbMF0sXHJcbiAgICAgICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KChlKSA9PiBlLm1lbnUpWzBdXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaCgpIHtcclxuICAgICAgICAgICAgICAgIGlmKCFjbGFzc0l0ZW1zIHx8ICFjbGFzc0xheWVyLmxheWVyKXJldHVybiBjb25zb2xlLmxvZyhjbGFzc0l0ZW1zLCBjbGFzc0xheWVyLmxheWVyKVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjbSA9IERPTS5xdWVyeShcIi5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLm1lbnUpKTtcclxuICAgICAgICAgICAgICAgIGlmICghY20pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBET00ucXVlcnkoXCIjYXBwLW1vdW50ID4gLlwiK1V0aWxzLnJlbW92ZURhKGNsYXNzTGF5ZXIubGF5ZXJDb250YWluZXIpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbVdyYXAgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NMYXllci5sYXllcn1cIj5gKTtcclxuICAgICAgICAgICAgICAgICAgICBjbSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLm1lbnV9ICR7Y2xhc3NJdGVtcy5zdHlsZUZsZXhpYmxlfSAke2NsYXNzSXRlbXMuYWNjb21tb2RhdGVTY3JvbGxiYXJ9IGJkLWNvbnRleHQtbWVudVwiIHN0eWxlPVwiXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLmFwcGVuZChjbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChjbVdyYXApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNtV3JhcC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJtZW51XCIpXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsIFwiLTFcIilcclxuICAgICAgICAgICAgICAgICAgICBjbVdyYXAuaWQgPSBcImJkLWNvcHktc2VsZWN0b3ItY29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgXCJDb3B5IFNlbGVjdG9yIEFjdGlvbnNcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJDbGFzc2VzID0gQkRNb2R1bGVzLmdldCgoZSkgPT4gZS5zY3JvbGxlcldyYXApWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJXcmFwID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCIke3Njcm9sbGVyQ2xhc3Nlcy5zY3JvbGxlcldyYXB9ICR7c2Nyb2xsZXJDbGFzc2VzLnNjcm9sbGVyVGhlbWVkfSAke3Njcm9sbGVyQ2xhc3Nlcy50aGVtZUdob3N0SGFpcmxpbmV9XCI+PC9kaXY+YClcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlcilbMF0uc2Nyb2xsZXJ9ICR7Y2xhc3NJdGVtcy5zY3JvbGxlcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyV3JhcC5hcHBlbmQoc2Nyb2xsZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgY20uYXBwZW5kKHNjcm9sbGVyV3JhcClcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ00gPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgZS5rZXlDb2RlICE9PSAyNykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbVdyYXAucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcmVtb3ZlQ00pO1xyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCByZW1vdmVDTSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHJlbW92ZUNNKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtV3JhcCA9IGNtLnBhcmVudEVsZW1lbnRcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBjbS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtZyA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IHJvbGU9XCJncm91cFwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiJHtjbGFzc0l0ZW1zLml0ZW19ICR7Y2xhc3NJdGVtcy5sYWJlbENvbnRhaW5lcn0gJHtjbGFzc0l0ZW1zLmNvbG9yRGVmYXVsdH1cIiByb2xlPVwibWVudWl0ZW1cIiBpZD1cImJkLWNvcHktc2VsZWN0b3ItaXRlbS1jbVwiPjwvZGl2PmApO1xyXG4gICAgICAgICAgICAgICAgY21pLmFwcGVuZChET00uY3JlYXRlRWxlbWVudChgPGRpdiBjbGFzcz1cIiR7Y2xhc3NJdGVtcy5sYWJlbH1cIj5Db3B5IFNlbGVjdG9yPC9kaXY+YCkpO1xyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5OYXRpdmVNb2R1bGUuY29weShzZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjbWkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlb3ZlclwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50cyA9IERPTS5xdWVyeUFsbChcImRpdltyb2xlPW1lbnVpdGVtXS5cIitVdGlscy5yZW1vdmVEYShjbGFzc0l0ZW1zLmZvY3VzZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzICYmIGVsZW1lbnRzLmZvckVhY2goZWxlbSA9PiBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NJdGVtcy5mb2N1c2VkKSlcclxuICAgICAgICAgICAgICAgICAgICBjbWkuY2xhc3NMaXN0LmFkZChjbGFzc0l0ZW1zLmZvY3VzZWQpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgY21pLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNtaS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzSXRlbXMuZm9jdXNlZClcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBjbWcuYXBwZW5kKGNtaSk7XHJcbiAgICAgICAgICAgICAgICBpZihzY3JvbGxlci5jaGlsZE5vZGVzLmxlbmd0aCl7IC8vIGFwZW5kIGEgc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgcm9sZT1cInNlcGFyYXRvclwiIGNsYXNzPVwiJHtjbGFzc0l0ZW1zLnNlcGFyYXRvcn1cIj48L2Rpdj5gKVxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZChzZXBhcmF0b3IpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlci5hcHBlbmQoY21nKTtcclxuICAgICAgICAgICAgICAgIGlmKGNtV3JhcC5jbGllbnRIZWlnaHQgPCBjbVdyYXAuc2Nyb2xsSGVpZ2h0KXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm92ZXJmbG93aW5nIFwiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICAgICAgY21XcmFwLnN0eWxlLnRvcCA9IChjbVdyYXAuc3R5bGUudG9wIC0gY21nLmNsaWVudEhlaWdodCkgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVyZmxvd2luZ1wiK2NtV3JhcC5zdHlsZS50b3ApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGF0dGFjaCwgMSk7XHJcbiAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZnVuY3Rpb24gZnVsbFBhdGgoZWwpe1xyXG4gICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKGVsLnBhcmVudE5vZGUpe1xyXG4gICAgICAgICAgICAgIGlmIChlbC5pZCl7XHJcbiAgICAgICAgICAgICAgICBuYW1lcy51bnNoaWZ0KCcjJytlbC5pZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmIChlbD09ZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIG5hbWVzLnVuc2hpZnQoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpK0FycmF5LmZyb20oZWwuY2xhc3NMaXN0LmVudHJpZXMoKSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTEsZT1lbDtlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7ZT1lLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsYysrKTtcclxuICAgICAgICAgICAgICAgICAgbmFtZXMudW5zaGlmdChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrKCh0eXBlb2YgZWwuY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsLmNsYXNzTmFtZSkgfHwgXCJcIikuc3BsaXQoXCIgXCIpLmZpbHRlcihlID0+ICEhZSkubWFwKGUgPT4gXCIuXCIrZSkuam9pbihcIlwiKStcIjpudGgtY2hpbGQoXCIrYytcIilcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbD1lbC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmFtZXMuam9pbihcIiA+IFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bGxQYXRoKGVsZW1lbnQpXHJcbiAgICB9XHJcbn07IiwiZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIERpc2FibGVUeXBpbmcge1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuc3RhcnRUeXBpbmcpXHJcbiAgICAgICAgLnRoZW4odHlwaW5nTW9kdWxlID0+IHtcclxuICAgICAgICAgICAgbGV0IHNlbGYgPSB0aGlzXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VHlwaW5nID0gdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RhcnRUeXBpbmdcclxuICAgICAgICAgICAgdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RhcnRUeXBpbmcgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgaWYoc2VsZi5kaXNhYmxlZClyZXR1cm4gc3RhcnRUeXBpbmcuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RvcFR5cGluZyA9IHR5cGluZ01vZHVsZS5kZWZhdWx0LnN0b3BUeXBpbmdcclxuICAgICAgICAgICAgdHlwaW5nTW9kdWxlLmRlZmF1bHQuc3RvcFR5cGluZyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihzZWxmLmRpc2FibGVkKXJldHVybiBzdG9wVHlwaW5nLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGlzYWJsZVR5cGluZyA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlKCl7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2VcclxuICAgIH1cclxufSIsImltcG9ydCBCdWdIdW50ZXJCYWRnZSBmcm9tIFwiLi4vc3ZnL2J1Z19odW50ZXJcIlxyXG5pbXBvcnQgbm9kZUZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcclxuaW1wb3J0IHsgc2V0dGluZ3NDb29raWUgfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENpcmN1cyBmcm9tIFwiLi4vc3ZnL2NpcmN1c1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHsgLy8gR2VuZXJhdGUgVVVJRCAoTm8gY3J5cHRvIHJuZylcclxuICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcclxuICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcbn0gIFxyXG5cclxuY29uc3QgYXdhaXRpbmdCYWRnZXNQcm9taXNlcyA9IHt9XHJcbmxldCBiYWRnZXNUb0ZldGNoID0gW11cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEaXN0YW50U2VydmVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7XHJcbiAgICAgICAgICAgIGJhZGdlczoge1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRGlzdGFudFNlcnZlciA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FjaGUoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVcclxuICAgIH1cclxuXHJcbiAgICBzZXQgY2FjaGUoZGF0YSl7XHJcbiAgICAgICAgaWYodHlwZW9mIGRhdGEgIT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIHRoaXMuX2NhY2hlICE9PSBcIm9iamVjdFwiKXJldHVybiB0aGlzLl9jYWNoZSA9IGRhdGFcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGUgPSBPYmplY3QuYXNzaWduKHRoaXMuX2NhY2hlLCBkYXRhKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGN1c3RvbSBiYWRnZXMgZnJvbSB0aGUgdXNlciBJRC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyIFRoZSB1c2VyIElEIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8Q29uc3RhbnRzW1wiYmFkZ2VzXCJdPn1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0QmFkZ2VzKHVzZXIpe1xyXG4gICAgICAgIGlmKHRoaXMuY2FjaGUuYmFkZ2VzW3VzZXJdKXJldHVybiB0aGlzLmNhY2hlLmJhZGdlc1t1c2VyXVxyXG4gICAgICAgIGlmKGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0pcmV0dXJuIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl1cclxuXHJcbiAgICAgICAgbGV0IHJlc29sdmVcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gbmV3IFByb21pc2UoKHJlcykgPT4gKHJlc29sdmUgPSByZXMpKVxyXG4gICAgICAgIGF3YWl0aW5nQmFkZ2VzUHJvbWlzZXNbdXNlcl0gPSBuZXdQcm9taXNlXHJcblxyXG4gICAgICAgIGNvbnN0IGJhZGdlcyA9IFtdXHJcbiAgICAgICAgZm9yKGxldCBiYWRnZSBvZiBDb25zdGFudHMuYmFkZ2VzKXtcclxuICAgICAgICAgICAgaWYoYmFkZ2UuZGVmYXVsdFVzZXJzLmluY2x1ZGVzKHVzZXIpKWJhZGdlcy5wdXNoKGJhZGdlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmZXRjaGVkQmFkZ2VzID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pcmV0dXJuIHJlc29sdmUoW10pXHJcbiAgICAgICAgICAgIGJhZGdlc1RvRmV0Y2gucHVzaChbdXNlciwgcmVzb2x2ZV0pXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVzZXJzID0gYmFkZ2VzVG9GZXRjaFxyXG4gICAgICAgICAgICAgICAgaWYodXNlcnMubGVuZ3RoID09PSAwKXJldHVyblxyXG4gICAgICAgICAgICAgICAgYmFkZ2VzVG9GZXRjaCA9IFtdXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVSZXF1ZXN0KFJvdXRlcy5iYWRnZXMsIFwiUE9TVFwiLCBKU09OLnN0cmluZ2lmeSh1c2Vycy5tYXAoZSA9PiBlWzBdKSkpXHJcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl7Ly8gQ291bGRuJ3QgZmV0Y2ggYmFkZ2VzOiBzZXJ2ZXIgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0oW10pLy8gcmVzb2x2ZSBubyBiYWRnZSBmZXRjaGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJlcy5qc29uKClcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHVzZXIgb2YgcmVzcG9uc2VCb2R5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB1c2Vycy5maW5kKHByb21pc2UgPT4gcHJvbWlzZVswXSA9PT0gdXNlci51c2VyX2lkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlWzFdKHVzZXIuYmFkZ2VzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHsvLyBDb3VsZG4ndCBmZXRjaCBiYWRnZXM6IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIShlcnIgaW5zdGFuY2VvZiBMaWdodGNvcmRFcnJvcikpY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcnMuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXShbXSkvLyByZXNvbHZlIG5vIGJhZGdlIGZldGNoZWRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSwgMClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGZvcihsZXQgYmFkZ2Ugb2YgZmV0Y2hlZEJhZGdlcyl7XHJcbiAgICAgICAgICAgIGlmKCFDb25zdGFudHMuYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gV2UgZG8gbm90IGhhdmUgdGhlIENvbXBvbmVudCwgc2tpcCBpdC5cclxuICAgICAgICAgICAgaWYoYmFkZ2VzLmZpbmQoZSA9PiBlLmlkID09PSBiYWRnZSkpY29udGludWUgLy8gQWxyZWFkeSBpbnNlcnRlZC5cclxuICAgICAgICAgICAgYmFkZ2VzLnB1c2goQ29uc3RhbnRzLmJhZGdlcy5maW5kKGUgPT4gZS5pZCA9PT0gYmFkZ2UpKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhY2hlID0ge1xyXG4gICAgICAgICAgICBiYWRnZXM6IE9iamVjdC5hc3NpZ24odGhpcy5jYWNoZS5iYWRnZXMsIHtbdXNlcl06IGJhZGdlc30pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWNoZS5iYWRnZXNbdXNlcl1cclxuICAgICAgICB9LCA2MDAwMDApO1xyXG5cclxuICAgICAgICByZXNvbHZlKGJhZGdlcylcclxuICAgICAgICBkZWxldGUgYXdhaXRpbmdCYWRnZXNQcm9taXNlc1t1c2VyXVxyXG4gICAgICAgIHJldHVybiBiYWRnZXNcclxuICAgIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlUmVxdWVzdCA9IGZ1bmN0aW9uKHJvdXRlLCBtZXRob2QsIGRhdGEpe1xyXG4gICAgaWYoIXNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTVcIl0pe1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgTGlnaHRjb3JkRXJyb3IoXCJUaGUgY3VycmVudCBzZXR0aW5ncyBibG9ja2VkIHRoZSByZXF1ZXN0LlwiKSlcclxuICAgIH1cclxuICAgIHJldHVybiBub2RlRmV0Y2goYCR7Q29uc3RhbnRzLlNFUlZFUl9VUkx9L2FwaS92MSR7cm91dGV9YCwge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgIFwiQ0xJRU5UXCI6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIFwiQXV0aG9yaXphdGlvblwiOiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5BdXRob3JpemF0aW9uIHx8IFwiTm9uZTo6QW5vbnltb3VzXCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLihkYXRhID8ge1xyXG4gICAgICAgICAgICBib2R5OiBkYXRhXHJcbiAgICAgICAgfSA6IHt9KVxyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgTGlnaHRjb3JkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cylcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIkxpZ2h0Y29yZEVycm9yXCJcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIFNFUlZFUl9VUkw6IFwiaHR0cHM6Ly9saWdodGNvcmQuZGVyb2t1Lnh5elwiLFxyXG4gICAgYmFkZ2VzOiBbIC8vIFRPRE86IEFkZCBtb3JlIGJhZGdlcyArIHNlcnZlciBzaWRlIHN2Z1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJMaWdodGNvcmQgQnVnIEh1bnRlclwiLFxyXG4gICAgICAgICAgICBpZDogXCJmMDQ2OThmNS04MTZiLTQxZTMtYmQwMS05MjI5MTE5M2Q3YTVcIixcclxuICAgICAgICAgICAgZGVmYXVsdFVzZXJzOiBbXHJcbiAgICAgICAgICAgICAgICBcIjY5NjQ4MTE5NDQ0MzAxNDE3NFwiLFxyXG4gICAgICAgICAgICAgICAgXCI2OTYwMDM0NTY2MTEzODUzOTZcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IEJ1Z0h1bnRlckJhZGdlLFxyXG4gICAgICAgICAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9saWdodGNvcmQvbGlnaHRjb3JkL3dpa2kvYmFkZ2VzI2J1Z19odW50ZXJcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJCdWZmb29uXCIsXHJcbiAgICAgICAgICAgIGlkOiBcIjA2OTA0ZDMxLTY1YjQtNDFlYy1hNTBjLTg2NThiYmQxYWY5NlwiLFxyXG4gICAgICAgICAgICBkZWZhdWx0VXNlcnM6IFtcclxuICAgICAgICAgICAgICAgIFwiMzg5MDE2ODk1NTQzNzA1NjAyXCIsXHJcbiAgICAgICAgICAgICAgICBcIjY2NDYwMDEzNDUyODY2MzU2NVwiLFxyXG4gICAgICAgICAgICAgICAgXCI2MjUzNTA2NTc4Mjk4OTYyMjRcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBzY29wZXM6IFtdLFxyXG4gICAgICAgICAgICBjb21wb25lbnQ6IENpcmN1cyxcclxuICAgICAgICAgICAgaHJlZjogXCJodHRwczovL3lvdXR1LmJlL0VKdGI2ei1kbFQ4P3Q9MTQ1XCJcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBSb3V0ZXMgPSB7XHJcbiAgICBiYWRnZXM6IGAvdXNlcnMvYmFkZ2VzYFxyXG59IiwiLyoqXHJcbiAqIENvcHlyaWdodCAyMDE4IFphY2hhcnkgUmF1ZW5cclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nXHJcbiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLFxyXG4gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxyXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkXHJcbiAqIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCxcclxuICogSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEFcclxuICogUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVFxyXG4gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0ZcclxuICogQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFXHJcbiAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxyXG4gKiBcclxuICogRnJvbTogaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQkRQbHVnaW5MaWJyYXJ5XHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcmZhY2VcclxuICogQG5hbWUgT2Zmc2V0XHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgLSBUb3Agb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IC0gUmlnaHQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSAtIEJvdHRvbSBvZmZzZXQgb2YgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCAtIExlZnQgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodCAtIE91dGVyIGhlaWdodCBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aCAtIE91dGVyIHdpZHRoIG9mIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICovXHJcblxyXG4gLyoqXHJcbiAqIEZ1bmN0aW9uIHRoYXQgYXV0b21hdGljYWxseSByZW1vdmVzIGFkZGVkIGxpc3RlbmVyLlxyXG4gKiBAY2FsbGJhY2sgbW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyXHJcbiAqL1xyXG4gXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTVRvb2xzIHtcclxuXHJcbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcclxuICAgICAgICByZXR1cm4gaWQucmVwbGFjZSgvXlteYS16XSt8W15cXHctXSsvZ2ksIFwiLVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuXHQgKiBBZGRzIGEgc3R5bGUgdG8gdGhlIGRvY3VtZW50LlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkZW50aWZpZXIgdG8gdXNlIGFzIHRoZSBlbGVtZW50IGlkXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNzcyAtIGNzcyB0byBhZGQgdG8gdGhlIGRvY3VtZW50XHJcblx0ICovXHJcblx0c3RhdGljIGFkZFN0eWxlKGlkLCBjc3MpIHtcclxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKERPTVRvb2xzLmNyZWF0ZUVsZW1lbnQoYDxzdHlsZSBpZD1cIiR7aWR9XCI+JHtjc3N9PC9zdHlsZT5gKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgc3R5bGUgZnJvbSB0aGUgZG9jdW1lbnQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gb3JpZ2luYWwgaWRlbnRpZmllciB1c2VkXHJcblx0ICovXHJcblx0c3RhdGljIHJlbW92ZVN0eWxlKGlkKSB7XHJcblx0XHRjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG5cdFx0aWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBBZGRzL3JlcXVpcmVzIGEgcmVtb3RlIHNjcmlwdCB0byBiZSBsb2FkZWRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZGVudGlmaWVyIHRvIHVzZSBmb3IgdGhpcyBzY3JpcHRcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gdXJsIGZyb20gd2hpY2ggdG8gbG9hZCB0aGUgc2NyaXB0XHJcblx0ICogQHJldHVybnMge1Byb21pc2V9IHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBzY3JpcHQgaXMgbG9hZGVkXHJcblx0ICovXHJcblx0c3RhdGljIGFkZFNjcmlwdChpZCwgdXJsKSB7XHJcblx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcblx0XHRcdGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcblx0XHRcdHNjcmlwdC5pZCA9IGlkO1xyXG5cdFx0XHRzY3JpcHQuc3JjID0gdXJsO1xyXG5cdFx0XHRzY3JpcHQudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCI7XHJcblx0XHRcdHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xyXG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZChzY3JpcHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZW1vdmVzIGEgcmVtb3RlIHNjcmlwdCBmcm9tIHRoZSBkb2N1bWVudC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBvcmlnaW5hbCBpZGVudGlmaWVyIHVzZWRcclxuXHQgKi9cclxuXHRzdGF0aWMgcmVtb3ZlU2NyaXB0KGlkKSB7XHJcbiAgICAgICAgaWQgPSB0aGlzLmVzY2FwZUlEKGlkKTtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcblx0XHRpZiAoZWxlbWVudCkgZWxlbWVudC5yZW1vdmUoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gaHR0cHM6Ly9qYXZhc2NyaXB0LmluZm8vanMtYW5pbWF0aW9uXHJcbiAgICBzdGF0aWMgYW5pbWF0ZSh7dGltaW5nID0gXyA9PiBfLCB1cGRhdGUsIGR1cmF0aW9ufSkge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICAgIFxyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiBhbmltYXRlKHRpbWUpIHtcclxuICAgICAgICAgIC8vIHRpbWVGcmFjdGlvbiBnb2VzIGZyb20gMCB0byAxXHJcbiAgICAgICAgICBsZXQgdGltZUZyYWN0aW9uID0gKHRpbWUgLSBzdGFydCkgLyBkdXJhdGlvbjtcclxuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPiAxKSB0aW1lRnJhY3Rpb24gPSAxO1xyXG4gICAgICBcclxuICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBhbmltYXRpb24gc3RhdGVcclxuICAgICAgICAgIGNvbnN0IHByb2dyZXNzID0gdGltaW5nKHRpbWVGcmFjdGlvbik7XHJcbiAgICAgIFxyXG4gICAgICAgICAgdXBkYXRlKHByb2dyZXNzKTsgLy8gZHJhdyBpdFxyXG4gICAgICBcclxuICAgICAgICAgIGlmICh0aW1lRnJhY3Rpb24gPCAxKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgbXkgc2hpdCB2ZXJzaW9uIG9mIG5vdCBoYXZpbmcgdG8gdXNlIGAkYCBmcm9tIGpRdWVyeS4gTWVhbmluZ1xyXG4gICAgICogdGhhdCB5b3UgY2FuIHBhc3MgYSBzZWxlY3RvciBhbmQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5fS5cclxuICAgICAqIEl0IGFsc28gbWVhbnMgdGhhdCB5b3UgY2FuIHBhc3MgYSBzdHJpbmcgb2YgaHRtbCBhbmQgaXQgd2lsbCBwZXJmb3JtIGFuZCByZXR1cm4gYHBhcnNlSFRNTGAuXHJcbiAgICAgKiBAc2VlIG1vZHVsZTpET01Ub29scy5wYXJzZUhUTUxcclxuICAgICAqIEBzZWUgbW9kdWxlOkRPTVRvb2xzLnF1ZXJ5XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeSBvciBIVE1MIHRvIHBhcnNlXHJcbiAgICAgKiBAcmV0dXJucyB7KERvY3VtZW50RnJhZ21lbnR8Tm9kZUxpc3R8SFRNTEVsZW1lbnQpfSAtIEVpdGhlciB0aGUgcmVzdWx0IG9mIGBwYXJzZUhUTUxgIG9yIGBxdWVyeWBcclxuICAgICAqL1xyXG4gICAgc3RhdGljIFEoc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUhUTUwoc2VsZWN0b3IpO1xyXG4gICAgICAgIGNvbnN0IGlzSFRNTCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCA/IEFycmF5LmZyb20oZWxlbWVudCkuc29tZShuID0+IG4ubm9kZVR5cGUgPT09IDEpIDogZWxlbWVudC5ub2RlVHlwZSA9PT0gMTtcclxuICAgICAgICBpZiAoaXNIVE1MKSByZXR1cm4gZWxlbWVudDtcclxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFc3NlbnRpYWxseSBhIHNob3J0aGFuZCBmb3IgYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgLiBJZiB0aGUgYGJhc2VFbGVtZW50YCBpcyBub3QgcHJvdmlkZWRcclxuICAgICAqIGBkb2N1bWVudGAgaXMgdXNlZCBieSBkZWZhdWx0LlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gcXVlcnlcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gW2Jhc2VFbGVtZW50XSAtIEVsZW1lbnQgdG8gYmFzZSB0aGUgcXVlcnkgZnJvbVxyXG4gICAgICogQHJldHVybnMgeyhFbGVtZW50fG51bGwpfSAtIFRoZSBmb3VuZCBlbGVtZW50IG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBxdWVyeShzZWxlY3RvciwgYmFzZUVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWJhc2VFbGVtZW50KSBiYXNlRWxlbWVudCA9IGRvY3VtZW50O1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzc2VudGlhbGx5IGEgc2hvcnRoYW5kIGZvciBgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbGAuIElmIHRoZSBgYmFzZUVsZW1lbnRgIGlzIG5vdCBwcm92aWRlZFxyXG4gICAgICogYGRvY3VtZW50YCBpcyB1c2VkIGJ5IGRlZmF1bHQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBxdWVyeVxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBbYmFzZUVsZW1lbnRdIC0gRWxlbWVudCB0byBiYXNlIHRoZSBxdWVyeSBmcm9tXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gQXJyYXkgb2YgYWxsIGZvdW5kIGVsZW1lbnRzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBxdWVyeUFsbChzZWxlY3RvciwgYmFzZUVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIWJhc2VFbGVtZW50KSBiYXNlRWxlbWVudCA9IGRvY3VtZW50O1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhIHN0cmluZyBvZiBIVE1MIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzLiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0cnVlLFxyXG4gICAgICogdGhlIHBhcnNlZCBIVE1MIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBkb2N1bWVudCBmcmFnbWVudCB7QHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRGcmFnbWVudH0uXHJcbiAgICAgKiBUaGlzIGlzIGV4dHJlbWVseSB1c2VmdWwgaWYgeW91IGhhdmUgYSBsaXN0IG9mIGVsZW1lbnRzIGF0IHRoZSB0b3AgbGV2ZWwsIHRoZXkgY2FuIHRoZW4gYmUgYXBwZW5kZWQgYWxsIGF0IG9uY2UgdG8gYW5vdGhlciBub2RlLlxyXG4gICAgICogXHJcbiAgICAgKiBJZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBmYWxzZSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIGxpc3Qgb2YgcGFyc2VkXHJcbiAgICAgKiBub2RlcyBhbmQgdGhlcmUgd2VyZSBtdWx0aXBsZSB0b3AgbGV2ZWwgbm9kZXMsIG90aGVyd2lzZSB0aGUgc2luZ2xlIG5vZGUgaXMgcmV0dXJuZWQuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIEhUTUwgdG8gYmUgcGFyc2VkXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcmFnbWVudD1mYWxzZV0gLSBXaGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuIHNob3VsZCBiZSB0aGUgcmF3IGBEb2N1bWVudEZyYWdtZW50YFxyXG4gICAgICogQHJldHVybnMgeyhEb2N1bWVudEZyYWdtZW50fE5vZGVMaXN0fEhUTUxFbGVtZW50KX0gLSBUaGUgcmVzdWx0IG9mIEhUTUwgcGFyc2luZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcGFyc2VIVE1MKGh0bWwsIGZyYWdtZW50ID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcclxuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICBpZiAoZnJhZ21lbnQpIHJldHVybiBub2RlO1xyXG4gICAgICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXMubGVuZ3RoID4gMSA/IG5vZGUuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2Rlc1swXTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQWx0ZXJuYXRlIG5hbWUgZm9yIHtAbGluayBtb2R1bGU6RE9NVG9vbHMucGFyc2VIVE1MfSAqL1xyXG4gICAgc3RhdGljIGNyZWF0ZUVsZW1lbnQoaHRtbCwgZnJhZ21lbnQgPSBmYWxzZSkge3JldHVybiB0aGlzLnBhcnNlSFRNTChodG1sLCBmcmFnbWVudCk7fVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFRha2VzIGEgc3RyaW5nIG9mIGh0bWwgYW5kIGVzY2FwZXMgaXQgdXNpbmcgdGhlIGJyb3dlcidzIG93biBlc2NhcGluZyBtZWNoYW5pc20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaHRtbCAtIGh0bWwgdG8gYmUgZXNjYXBlZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZXNjYXBlSFRNTChodG1sKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcclxuICAgICAgICBjb25zdCBzcGFuRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xyXG4gICAgICAgIHNwYW5FbGVtZW50LmFwcGVuZCh0ZXh0Tm9kZSk7XHJcbiAgICAgICAgdGV4dE5vZGUubm9kZVZhbHVlID0gaHRtbDtcclxuICAgICAgICByZXR1cm4gc3BhbkVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkcyBhIGxpc3Qgb2YgY2xhc3NlcyBmcm9tIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gY2xhc3NlcyAtIE5hbWVzIG9mIGNsYXNzZXMgdG8gYWRkXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZGRDbGFzcyhlbGVtZW50LCAuLi5jbGFzc2VzKSB7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBsaXN0IG9mIGNsYXNzZXMgZnJvbSB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGVkaXQgY2xhc3NlcyBvZlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IGNsYXNzZXMgLSBOYW1lcyBvZiBjbGFzc2VzIHRvIHJlbW92ZVxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gYGVsZW1lbnRgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgLi4uY2xhc3Nlcykge1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY2xhc3Nlcy5sZW5ndGg7IGMrKykgY2xhc3Nlc1tjXSA9IGNsYXNzZXNbY10udG9TdHJpbmcoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgY2xhc3NlcyA9IGNsYXNzZXMuZmxhdCgpLmZpbHRlcihjID0+IGMpO1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi5jbGFzc2VzKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZW4gb25seSBvbmUgYXJndW1lbnQgaXMgcHJlc2VudDogVG9nZ2xlIGNsYXNzIHZhbHVlO1xyXG4gICAgICogaS5lLiwgaWYgY2xhc3MgZXhpc3RzIHRoZW4gcmVtb3ZlIGl0IGFuZCByZXR1cm4gZmFsc2UsIGlmIG5vdCwgdGhlbiBhZGQgaXQgYW5kIHJldHVybiB0cnVlLlxyXG4gICAgICogV2hlbiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50OlxyXG4gICAgICogSWYgdGhlIHNlY29uZCBhcmd1bWVudCBldmFsdWF0ZXMgdG8gdHJ1ZSwgYWRkIHNwZWNpZmllZCBjbGFzcyB2YWx1ZSwgYW5kIGlmIGl0IGV2YWx1YXRlcyB0byBmYWxzZSwgcmVtb3ZlIGl0LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBlZGl0IGNsYXNzZXMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc25hbWUgLSBOYW1lIG9mIGNsYXNzIHRvIHRvZ2dsZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaW5kaWNhdG9yXSAtIE9wdGlvbmFsIGluZGljYXRvciBmb3IgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSB0b2dnbGVkXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB0b2dnbGVDbGFzcyhlbGVtZW50LCBjbGFzc25hbWUsIGluZGljYXRvcikge1xyXG4gICAgICAgIGNsYXNzbmFtZSA9IGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKTtcclxuICAgICAgICBpZiAodHlwZW9mKGluZGljYXRvcikgIT09IFwidW5kZWZpbmVkXCIpIGNsYXNzbmFtZS5mb3JFYWNoKGMgPT4gZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGMsIGluZGljYXRvcikpO1xyXG4gICAgICAgIGVsc2UgY2xhc3NuYW1lLmZvckVhY2goYyA9PiBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoYykpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaGFzIGEgc3BlY2lmaWMgY2xhc3NcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NuYW1lIC0gTmFtZSBvZiBjbGFzcyB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IC0gYHRydWVgIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgY2xhc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzbmFtZS50b1N0cmluZygpLnNwbGl0KFwiIFwiKS5maWx0ZXIoYyA9PiBjKS5ldmVyeShjID0+IGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGMpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlcGxhY2VzIG9uZSBjbGFzcyB3aXRoIGFub3RoZXJcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZWRpdCBjbGFzc2VzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTmFtZSAtIE5hbWUgb2YgY2xhc3MgdG8gcmVwbGFjZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld05hbWUgLSBOZXcgbmFtZSBmb3IgdGhlIGNsYXNzXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBgZWxlbWVudGAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByZXBsYWNlQ2xhc3MoZWxlbWVudCwgb2xkTmFtZSwgbmV3TmFtZSkge1xyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2Uob2xkTmFtZSwgbmV3TmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBlbmRzIGB0aGlzTm9kZWAgdG8gYHRoYXROb2RlYFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIE5vZGUgdG8gYmUgYXBwZW5kZWQgdG8gYW5vdGhlciBub2RlXHJcbiAgICAgKiBAcGFyYW0ge05vZGV9IHRoYXROb2RlIC0gTm9kZSBmb3IgYHRoaXNOb2RlYCB0byBiZSBhcHBlbmRlZCB0b1xyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGFwcGVuZFRvKHRoaXNOb2RlLCB0aGF0Tm9kZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGhhdE5vZGUpID09IFwic3RyaW5nXCIpIHRoYXROb2RlID0gdGhpcy5xdWVyeSh0aGF0Tm9kZSk7XHJcbiAgICAgICAgaWYgKCF0aGF0Tm9kZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhhdE5vZGUuYXBwZW5kKHRoaXNOb2RlKTtcclxuICAgICAgICByZXR1cm4gdGhpc05vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwZW5kcyBgdGhpc05vZGVgIHRvIGB0aGF0Tm9kZWBcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBOb2RlIHRvIGJlIHByZXBlbmRlZCB0byBhbm90aGVyIG5vZGVcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhhdE5vZGUgLSBOb2RlIGZvciBgdGhpc05vZGVgIHRvIGJlIHByZXBlbmRlZCB0b1xyXG4gICAgICogQHJldHVybnMge05vZGV9IC0gYHRoaXNOb2RlYCB0byBhbGxvdyBmb3IgY2hhaW5pbmdcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXBlbmRUbyh0aGlzTm9kZSwgdGhhdE5vZGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHRoYXROb2RlKSA9PSBcInN0cmluZ1wiKSB0aGF0Tm9kZSA9IHRoaXMucXVlcnkodGhhdE5vZGUpO1xyXG4gICAgICAgIGlmICghdGhhdE5vZGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRoYXROb2RlLnByZXBlbmQodGhpc05vZGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50Lmluc2VydEFmdGVyKG90aGVyRWxlbWVudClgLlxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0aGlzTm9kZSAtIFRoZSBub2RlIHRvIGluc2VydFxyXG4gICAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXROb2RlIC0gTm9kZSB0byBpbnNlcnQgYWZ0ZXIgaW4gdGhlIHRyZWVcclxuICAgICAqIEByZXR1cm5zIHtOb2RlfSAtIGB0aGlzTm9kZWAgdG8gYWxsb3cgZm9yIGNoYWluaW5nXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbnNlcnRBZnRlcih0aGlzTm9kZSwgdGFyZ2V0Tm9kZSkge1xyXG4gICAgICAgIHRhcmdldE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc05vZGUsIHRhcmdldE5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzTm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluc2VydCBhZnRlciBhIHNwZWNpZmljIGVsZW1lbnQsIHNpbWlsYXIgdG8galF1ZXJ5J3MgYHRoaXNFbGVtZW50LmFmdGVyKG5ld0VsZW1lbnQpYC5cclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gdGhpc05vZGUgLSBUaGUgbm9kZSB0byBpbnNlcnRcclxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbmV3Tm9kZSAtIE5vZGUgdG8gaW5zZXJ0IGFmdGVyIGluIHRoZSB0cmVlXHJcbiAgICAgKiBAcmV0dXJucyB7Tm9kZX0gLSBgdGhpc05vZGVgIHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYWZ0ZXIodGhpc05vZGUsIG5ld05vZGUpIHtcclxuICAgICAgICB0aGlzTm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCB0aGlzTm9kZS5uZXh0U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNOb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBuZXh0IHNpYmxpbmcgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBPcHRpb25hbCBzZWxlY3RvclxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IC0gVGhlIHNpYmxpbmcgZWxlbWVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgbmV4dChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0b3IgPyBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIrIFwiICsgc2VsZWN0b3IpIDogZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBzdWJzZXF1ZW50IHNpYmxpbmdzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgbmV4dCBzaWJsaW5ncyBvZlxyXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0QWxsKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwifiAqXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgc3Vic2VxdWVudCBzaWJsaW5ncyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGZvbGxvd2luZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBuZXh0VW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gW107IFxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyAmJiAhZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIG5leHQucHVzaChlbGVtZW50ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyB0aGUgcHJldmlvdXMgc2libGluZyBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCB0aGUgcHJldmlvdXMgc2libGluZyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcj1cIlwiXSAtIE9wdGlvbmFsIHNlbGVjdG9yXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gLSBUaGUgc2libGluZyBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91cyhlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHJldHVybiBwcmV2aW91cyAmJiBwcmV2aW91cy5tYXRjaGVzKHNlbGVjdG9yKSA/IHByZXZpb3VzIDogbnVsbDtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBwcmVjZWVkaW5nIHNpYmxpbmdzLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgcHJlY2VlZGluZyBzaWJsaW5ncyBvZlxyXG4gICAgICogQHJldHVybnMge05vZGVMaXN0fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBwcmV2aW91c0FsbChlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBbXTtcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSBwcmV2aW91cy5wdXNoKGVsZW1lbnQgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpO1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHByZWNlZWRpbmcgc2libGluZ3MgdW50aWwgYW4gZWxlbWVudCBtYXRjaGVzIHRoZSBzZWxlY3Rvci5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcmVjZWVkaW5nIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBzdG9wIGF0XHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2Ygc2libGluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHByZXZpb3VzVW50aWwoZWxlbWVudCwgc2VsZWN0b3IpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91cyA9IFtdOyBcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICFlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcubWF0Y2hlcyhzZWxlY3RvcikpIHByZXZpb3VzLnB1c2goZWxlbWVudCA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCB3aGljaCBpbmRleCBpbiBjaGlsZHJlbiBhIGNlcnRhaW4gbm9kZSBpcy4gU2ltaWxhciB0byBqUXVlcnkncyBgJC5pbmRleCgpYFxyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZSAtIFRoZSBub2RlIHRvIGZpbmQgaXRzIGluZGV4IGluIHBhcmVudFxyXG4gICAgICogQHJldHVybnMge251bWJlcn0gSW5kZXggb2YgdGhlIG5vZGVcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluZGV4SW5QYXJlbnQobm9kZSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgbGV0IG51bSA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0gPT0gbm9kZSkgcmV0dXJuIG51bTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlID09IDEpIG51bSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFNob3J0aGFuZCBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5pbmRleEluUGFyZW50fSAqL1xyXG4gICAgc3RhdGljIGluZGV4KG5vZGUpIHtyZXR1cm4gdGhpcy5pbmRleEluUGFyZW50KG5vZGUpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIHBhcmVudCBvZiB0aGUgZWxlbWVudCBpZiBpdCBtYXRjaGVzIHRoZSBzZWxlY3RvcixcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIG51bGwuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBwYXJlbnQgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCBwYXJlbnRcclxuICAgICAqIEByZXR1cm5zIHsoRWxlbWVudHxudWxsKX0gLSBUaGUgc2libGluZyBlbGVtZW50IG9yIG51bGxcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudChlbGVtZW50LCBzZWxlY3RvciA9IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gIXNlbGVjdG9yIHx8IGVsZW1lbnQucGFyZW50RWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSA/IGVsZW1lbnQucGFyZW50RWxlbWVudCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGFsbCBjaGlsZHJlbiBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIGNoaWxkcmVuIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3IgLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgY2hpbGRyZW4gdG9cclxuICAgICAqIEByZXR1cm5zIHtBcnJheTxFbGVtZW50Pn0gLSBUaGUgbGlzdCBvZiBjaGlsZHJlblxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZmluZENoaWxkKGVsZW1lbnQsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IFwiICsgc2VsZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBhbGwgY2hpbGRyZW4gb2YgRWxlbWVudCB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBpZiBwcm92aWRlZC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gZ2V0IGFsbCBjaGlsZHJlbiBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGNoaWxkcmVuIHRvXHJcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8RWxlbWVudD59IC0gVGhlIGxpc3Qgb2YgY2hpbGRyZW5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGZpbmRDaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6c2NvcGUgPiBcIiArIHNlbGVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIGFuY2VzdG9ycyBvZiBFbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yIGlmIHByb3ZpZGVkLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHBhcmVudHMgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VsZWN0b3I9XCJcIl0gLSBTZWxlY3RvciB0byBtYXRjaCB0aGUgcGFyZW50cyB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICAgIGlmIChzZWxlY3Rvcikgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xvc2VzdChzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpKTtcclxuICAgICAgICBlbHNlIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gcGFyZW50cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgdGhlIGFuY2VzdG9ycyB1bnRpbCBhbiBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgdGhlIGFuY2VzdG9ycyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gc3RvcCBhdFxyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHBhcmVudHNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHBhcmVudHNVbnRpbChlbGVtZW50LCBzZWxlY3Rvcikge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcclxuICAgICAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICYmICFlbGVtZW50LnBhcmVudEVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gcGFyZW50cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgYWxsIHNpYmxpbmdzIG9mIHRoZSBlbGVtZW50IHRoYXQgbWF0Y2ggdGhlIHNlbGVjdG9yLlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBnZXQgYWxsIHNpYmxpbmdzIG9mXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yPVwiKlwiXSAtIFNlbGVjdG9yIHRvIG1hdGNoIHRoZSBzaWJsaW5ncyB0b1xyXG4gICAgICogQHJldHVybnMge0FycmF5PEVsZW1lbnQ+fSAtIFRoZSBsaXN0IG9mIHNpYmxpbmdzXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBzaWJsaW5ncyhlbGVtZW50LCBzZWxlY3RvciA9IFwiKlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5wYXJlbnRFbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoZSA9PiBlICE9IGVsZW1lbnQgJiYgZS5tYXRjaGVzKHNlbGVjdG9yKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIG9yIGdldHMgY3NzIHN0eWxlcyBmb3IgYSBzcGVjaWZpYyBlbGVtZW50LiBJZiBgdmFsdWVgIGlzIHByb3ZpZGVkXHJcbiAgICAgKiB0aGVuIGl0IHNldHMgdGhlIHN0eWxlIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZyxcclxuICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBzdHlsZS4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZSAtIEF0dHJpYnV0ZSB0byBnZXQgb3Igc2V0XHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlXSAtIFZhbHVlIHRvIHNldCBmb3IgYXR0cmlidXRlXHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY3NzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClbYXR0cmlidXRlXTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlW2F0dHJpYnV0ZV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgd2lkdGggZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSB3aWR0aCBhbmQgcmV0dXJucyB0aGUgZWxlbWVudCB0byBhbGxvdyBmb3IgY2hhaW5pbmcsXHJcbiAgICAgKiBvdGhlcndpc2UgcmV0dXJucyB0aGUgd2lkdGguICBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gc2V0IHRoZSBDU1Mgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdIC0gV2lkdGggdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgd2lkdGgoZWxlbWVudCwgdmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS53aWR0aCk7XHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBoZWlnaHQgZm9yIGEgc3BlY2lmaWMgZWxlbWVudC4gSWYgYHZhbHVlYCBpcyBwcm92aWRlZFxyXG4gICAgICogdGhlbiBpdCBzZXRzIHRoZSBoZWlnaHQgYW5kIHJldHVybnMgdGhlIGVsZW1lbnQgdG8gYWxsb3cgZm9yIGNoYWluaW5nLFxyXG4gICAgICogb3RoZXJ3aXNlIHJldHVybnMgdGhlIGhlaWdodC4gIFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIENTUyBvZlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gLSBIZWlnaHQgdG8gc2V0XHJcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudHxzdHJpbmd9IC0gV2hlbiBzZXR0aW5nIGEgdmFsdWUsIGVsZW1lbnQgaXMgcmV0dXJuZWQgZm9yIGNoYWluaW5nLCBvdGhlcndpc2UgdGhlIHZhbHVlIGlzIHJldHVybmVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaGVpZ2h0KGVsZW1lbnQsIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuaGVpZ2h0KTtcclxuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHZhbHVlO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgaW5uZXIgdGV4dCBvZiBhbiBlbGVtZW50IGlmIGdpdmVuIGEgdmFsdWUsIG90aGVyd2lzZSByZXR1cm5zIGl0LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBzZXQgdGhlIHRleHQgb2ZcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGV4dF0gLSBDb250ZW50IHRvIHNldFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSBFaXRoZXIgdGhlIHN0cmluZyBzZXQgYnkgdGhpcyBjYWxsIG9yIHRoZSBjdXJyZW50IHRleHQgY29udGVudCBvZiB0aGUgbm9kZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIHRleHQoZWxlbWVudCwgdGV4dCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YodGV4dCkgPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgaW5uZXJXaWR0aCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgaW5uZXIgd2lkdGggb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgd2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBpbm5lcldpZHRoKGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGlubmVySGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byByZXRyaWV2ZSBpbm5lciBoZWlnaHQgb2ZcclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gLSBUaGUgaW5uZXIgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgaW5uZXJIZWlnaHQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIG91dGVyV2lkdGggb2YgdGhlIGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIHJldHJpZXZlIG91dGVyIHdpZHRoIG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb3V0ZXJXaWR0aChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBvdXRlckhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmV0cmlldmUgb3V0ZXIgaGVpZ2h0IG9mXHJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IC0gVGhlIG91dGVyIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIG91dGVySGVpZ2h0KGVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBvZmZzZXQgb2YgdGhlIGVsZW1lbnQgaW4gdGhlIHBhZ2UuXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGdldCBvZmZzZXQgb2ZcclxuICAgICAqIEByZXR1cm4ge09mZnNldH0gLSBUaGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvZmZzZXQoZWxlbWVudCkge1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgbGlzdGVuZXJzKCkgeyByZXR1cm4gdGhpcy5fbGlzdGVuZXJzIHx8ICh0aGlzLl9saXN0ZW5lcnMgPSB7fSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgaXMgc2ltaWxhciB0byBqUXVlcnkncyBgb25gIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXHJcbiAgICAgKiBcclxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAoaW4gdGhlIGBteVBsdWdpbmAgbmFtZXNwYWNlKSB0byBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVzIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXHJcbiAgICAgKiBgRE9NVG9vbHMub24oZWxlbWVudCwgXCJjbGljay5teVBsdWdpblwiLCBcIi5ibG9ja1wiLCAoKSA9PiB7Y29uc29sZS5sb2coXCJjbGlja2VkIVwiKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCBhZGQgYSBjbGljayBsaXN0ZW5lciAod2l0aG91dCBuYW1lc3BhY2UpIHRvIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vbihlbGVtZW50LCBcImNsaWNrXCIsICgpID0+IHtjb25zb2xlLmxvZyhcImNsaWNrZWQhXCIpO30pO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIGFkZCBhIGNsaWNrIGxpc3RlbmVyICh3aXRob3V0IG5hbWVzcGFjZSkgdG8gYGVsZW1lbnRgIHRoYXQgb25seSBmaXJlcyBvbmNlLlxyXG4gICAgICogYGNvbnN0IGNhbmNlbCA9IERPTVRvb2xzLm9uKGVsZW1lbnQsIFwiY2xpY2tcIiwgKCkgPT4ge2NvbnNvbGUubG9nKFwiZmlyZWQhXCIpOyBjYW5jZWwoKTt9KTtgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYWRkIGxpc3RlbmVyIHRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBFdmVudCB0byBsaXN0ZW4gdG8gd2l0aCBvcHRpb24gbmFtZXNwYWNlIChlLmcuIFwiZXZlbnQubmFtZXNwYWNlXCIpXHJcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8Y2FsbGFibGUpfSBkZWxlZ2F0ZSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6RE9NVG9vbHN+Q2FuY2VsTGlzdGVuZXJ9IC0gQSBmdW5jdGlvbiB0aGF0IHdpbGwgdW5kbyB0aGUgbGlzdGVuZXJcclxuICAgICAqL1xyXG4gICAgc3RhdGljIG9uKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gY2FsbGJhY2sgOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0Lm1hdGNoZXMoZGVsZWdhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbmFsaXR5IGZvciB0aGlzIG1ldGhvZCBtYXRjaGVzIHtAbGluayBtb2R1bGU6RE9NVG9vbHMub259IGJ1dCBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgaXRzZWxmXHJcbiAgICAgKiBhbmQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIgdXBvbiB0aGUgZmlyc3QgZmlyaW5nIG9mIHRoZSBkZXNpcmVkIGV2ZW50LlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFkZCBsaXN0ZW5lciB0b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50IC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gZGVsZWdhdGUgLSBTZWxlY3RvciB0byBydW4gb24gZWxlbWVudCB0byBsaXN0ZW4gdG9cclxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtjYWxsYmFja10gLSBGdW5jdGlvbiB0byBmaXJlIG9uIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyB7bW9kdWxlOkRPTVRvb2xzfkNhbmNlbExpc3RlbmVyfSAtIEEgZnVuY3Rpb24gdGhhdCB3aWxsIHVuZG8gdGhlIGxpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbmNlKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBbdHlwZSwgbmFtZXNwYWNlXSA9IGV2ZW50LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBoYXNEZWxlZ2F0ZSA9IGRlbGVnYXRlICYmIGNhbGxiYWNrO1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIGNhbGxiYWNrID0gZGVsZWdhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnRGdW5jID0gIWhhc0RlbGVnYXRlID8gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9IDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKCFldmVudC50YXJnZXQubWF0Y2hlcyhkZWxlZ2F0ZSkpIHJldHVybjtcclxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZXZlbnRGdW5jKTtcclxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBldmVudEZ1bmMpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKG5hbWVzcGFjZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0pIHRoaXMubGlzdGVuZXJzW25hbWVzcGFjZV0gPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2FuY2VsID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnNwbGljZSh0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLmZpbmRJbmRleChsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCksIDEpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyc1tuYW1lc3BhY2VdLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQ6IHR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBuZXdDYW5jZWxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdDYW5jZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYW5jZWw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIF9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVzcGFjZV0gPSBldmVudC5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgbGV0IG1hdGNoRmlsdGVyID0gbGlzdGVuZXIgPT4gbGlzdGVuZXIuZXZlbnQgPT0gdHlwZSwgZGVmYXVsdEZpbHRlciA9IF8gPT4gXztcclxuICAgICAgICBpZiAoZWxlbWVudCkgbWF0Y2hGaWx0ZXIgPSBsID0+IGwuZXZlbnQgPT0gdHlwZSAmJiBsLmVsZW1lbnQgPT0gZWxlbWVudCwgZGVmYXVsdEZpbHRlciA9IGwgPT4gbC5lbGVtZW50ID09IGVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnNbbmFtZXNwYWNlXSB8fCBbXTtcclxuICAgICAgICBjb25zdCBsaXN0ID0gdHlwZSA/IGxpc3RlbmVycy5maWx0ZXIobWF0Y2hGaWx0ZXIpIDogbGlzdGVuZXJzLmZpbHRlcihkZWZhdWx0RmlsdGVyKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGxpc3QubGVuZ3RoOyBjKyspIGxpc3RbY10uY2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIGpRdWVyeSdzIGBvZmZgIGZ1bmN0aW9uIGFuZCBjYW4gKmhvcGVmdWxseSogYmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkuXHJcbiAgICAgKiBcclxuICAgICAqIFJhdGhlciB0aGFuIGF0dGVtcHQgdG8gZXhwbGFpbiwgSSdsbCBzaG93IHNvbWUgZXhhbXBsZSB1c2FnZXMuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYSBjbGljayBsaXN0ZW5lciBjYWxsZWQgYG9uQ2xpY2tgIChpbiB0aGUgYG15UGx1Z2luYCBuYW1lc3BhY2UpIGZyb20gYGVsZW1lbnRgLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihlbGVtZW50LCBcImNsaWNrLm15UGx1Z2luXCIsIG9uQ2xpY2spO2BcclxuICAgICAqIFxyXG4gICAgICogVGhlIGZvbGxvd2luZyB3aWxsIHJlbW92ZSBhIGNsaWNrIGxpc3RlbmVyIGNhbGxlZCBgb25DbGlja2AgKGluIHRoZSBgbXlQbHVnaW5gIG5hbWVzcGFjZSkgZnJvbSBgZWxlbWVudGAgdGhhdCBvbmx5IGZpcmVkIHdoZW4gdGhlIHRhcmdldCBpcyBhIGAuYmxvY2tgIGVsZW1lbnQuXHJcbiAgICAgKiBgRE9NVG9vbHMub2ZmKGVsZW1lbnQsIFwiY2xpY2subXlQbHVnaW5cIiwgXCIuYmxvY2tcIiwgb25DbGljayk7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGEgY2xpY2sgbGlzdGVuZXIgKHdpdGhvdXQgbmFtZXNwYWNlKSBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCJjbGlja1wiLCBvbkNsaWNrKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tIGBlbGVtZW50YC5cclxuICAgICAqIGBET01Ub29scy5vZmYoZWxlbWVudCwgXCIubXlQbHVnaW5cIik7YFxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgZm9sbG93aW5nIHdpbGwgcmVtb3ZlIGFsbCBjbGljayBsaXN0ZW5lcnMgaW4gbmFtZXNwYWNlIGBteVBsdWdpbmAgZnJvbSAqYWxsIGVsZW1lbnRzKi5cclxuICAgICAqIGBET01Ub29scy5vZmYoXCJjbGljay5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBmb2xsb3dpbmcgd2lsbCByZW1vdmUgYWxsIGxpc3RlbmVycyBpbiBuYW1lc3BhY2UgYG15UGx1Z2luYCBmcm9tICphbGwgZWxlbWVudHMqLlxyXG4gICAgICogYERPTVRvb2xzLm9mZihcIi5teVBsdWdpblwiKTtgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7KEVsZW1lbnR8c3RyaW5nKX0gZWxlbWVudCAtIEVsZW1lbnQgdG8gcmVtb3ZlIGxpc3RlbmVyIGZyb21cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXZlbnRdIC0gRXZlbnQgdG8gbGlzdGVuIHRvIHdpdGggb3B0aW9uIG5hbWVzcGFjZSAoZS5nLiBcImV2ZW50Lm5hbWVzcGFjZVwiKVxyXG4gICAgICogQHBhcmFtIHsoc3RyaW5nfGNhbGxhYmxlKX0gW2RlbGVnYXRlXSAtIFNlbGVjdG9yIHRvIHJ1biBvbiBlbGVtZW50IHRvIGxpc3RlbiB0b1xyXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW2NhbGxiYWNrXSAtIEZ1bmN0aW9uIHRvIGZpcmUgb24gZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSAtIFRoZSBvcmlnaW5hbCBlbGVtZW50IHRvIGFsbG93IGZvciBjaGFpbmluZ1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgb2ZmKGVsZW1lbnQsIGV2ZW50LCBkZWxlZ2F0ZSwgY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAodHlwZW9mKGVsZW1lbnQpID09IFwic3RyaW5nXCIpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IFt0eXBlLCBuYW1lc3BhY2VdID0gZXZlbnQuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHJldHVybiB0aGlzLl9fb2ZmQWxsKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgaGFzRGVsZWdhdGUgPSBkZWxlZ2F0ZSAmJiBjYWxsYmFjaztcclxuICAgICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IGRlbGVnYXRlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RnVuYyA9ICFoYXNEZWxlZ2F0ZSA/IGNhbGxiYWNrIDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5tYXRjaGVzKGRlbGVnYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50RnVuYyk7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIHdoZW4gdGhlIG5vZGUgaXMgYWRkZWQvcmVtb3ZlZCBmcm9tIHRoZSBkb2N1bWVudCBib2R5LlxyXG4gICAgICogVGhlIGxpc3RlbmVyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB1cG9uIGZpcmluZy5cclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGUgLSBub2RlIHRvIHdhaXQgZm9yXHJcbiAgICAgKiBAcGFyYW0ge2NhbGxhYmxlfSBjYWxsYmFjayAtIGZ1bmN0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiBldmVudFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvbk1vdW50IC0gZGV0ZXJtaW5lcyBpZiBpdCBzaG91bGQgZmlyZSBvbiBNb3VudCBvciBvbiBVbm1vdW50XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBvbk1vdW50Q2hhbmdlKG5vZGUsIGNhbGxiYWNrLCBvbk1vdW50ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vYnNlcnZlci51bnN1YnNjcmliZSh3cmFwcGVkQ2FsbGJhY2spO1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5zdWJzY3JpYmUod3JhcHBlZENhbGxiYWNrLCBtdXRhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShvbk1vdW50ID8gbXV0YXRpb24uYWRkZWROb2RlcyA6IG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZihub2RlKSA+IC0xO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRNYXRjaCA9IG5vZGVzLnNvbWUocGFyZW50ID0+IHBhcmVudC5jb250YWlucyhub2RlKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaDtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGB0cnVlYCAqL1xyXG4gICAgc3RhdGljIG9uTW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjayk7IH1cclxuXHJcbiAgICAvKiogU2hvcnRoYW5kIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnRDaGFuZ2V9IHdpdGggdGhpcmQgcGFyYW1ldGVyIGBmYWxzZWAgKi9cclxuICAgIHN0YXRpYyBvblVubW91bnQobm9kZSwgY2FsbGJhY2spIHsgcmV0dXJuIHRoaXMub25Nb3VudENoYW5nZShub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XHJcblxyXG4gICAgLyoqIEFsaWFzIGZvciB7QGxpbmsgbW9kdWxlOkRPTVRvb2xzLm9uTW91bnR9ICovXHJcbiAgICBzdGF0aWMgb25BZGRlZChub2RlLCBjYWxsYmFjaykgeyByZXR1cm4gdGhpcy5vbk1vdW50KG5vZGUsIGNhbGxiYWNrKTsgfVxyXG5cclxuICAgIC8qKiBBbGlhcyBmb3Ige0BsaW5rIG1vZHVsZTpET01Ub29scy5vblVubW91bnR9ICovXHJcbiAgICBzdGF0aWMgb25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKSB7IHJldHVybiB0aGlzLm9uVW5tb3VudChub2RlLCBjYWxsYmFjaywgZmFsc2UpOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY29tYmluZXMgbXVsdGlwbGUgZWxlbWVudHMgaW50byBvbmUgcGFyZW50IGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7QXJyYXk8SFRNTEVsZW1lbnQ+fSBlbGVtZW50cyAtIGFycmF5IG9mIGVsZW1lbnRzIHRvIHB1dCBpbnRvIGEgc2luZ2xlIHBhcmVudFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgd3JhcChlbGVtZW50cykge1xyXG4gICAgICAgIGNvbnN0IGRvbVdyYXBwZXIgPSB0aGlzLnBhcnNlSFRNTChgPGRpdiBjbGFzcz1cImRvbS13cmFwcGVyXCI+PC9kaXY+YCk7XHJcbiAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBlbGVtZW50cy5sZW5ndGg7IGUrKykgZG9tV3JhcHBlci5hcHBlbmRDaGlsZChlbGVtZW50c1tlXSk7XHJcbiAgICAgICAgcmV0dXJuIGRvbVdyYXBwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXNvbHZlcyB0aGUgbm9kZSB0byBhbiBIVE1MRWxlbWVudC4gVGhpcyBpcyBtYWlubHkgdXNlZCBieSBsaWJyYXJ5IG1vZHVsZXMuXHJcbiAgICAgKiBAcGFyYW0geyhqUXVlcnl8RWxlbWVudCl9IG5vZGUgLSBub2RlIHRvIHJlc29sdmVcclxuICAgICAqL1xyXG4gICAgc3RhdGljIHJlc29sdmVFbGVtZW50KG5vZGUpIHtcclxuICAgICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xyXG4gICAgfVxyXG59XHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkJldHRlckRpc2NvcmQuRE9NID0gRE9NVG9vbHMiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuXHJcbmNvbnN0IENvbnN0YW50cyA9IHtcclxuICAgIEVtb2ppUmVnZXg6IC88YT9cXC4oXFx3KylcXC4oXFxkKyk+L2dcclxufVxyXG5cclxubGV0IEN1c3RvbUVtb2ppTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuQ3VzdG9tRW1vamkpWzBdXHJcbmxldCBFbW9qaU1vZHVsZUFwaSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1c3RvbUVtb2ppQnlJZClbMF1cclxubGV0IEF1dG9jb21wbGV0ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmRpc3BsYXlOYW1lID09PSBcIkF1dG9jb21wbGV0ZVwiKVswXVxyXG5sZXQgQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5nZXRBdXRvY29tcGxldGVPcHRpb25zKVswXVxyXG5sZXQgRW1vamlNb2R1bGVRdWVyeSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKVswXVxyXG5sZXQgTWVzc2FnZXMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5NZXNzYWdlcyAmJiBlLmRlZmF1bHQuTWVzc2FnZXMuRU1PSklfTUFUQ0hJTkcpWzBdXHJcbmxldCBndWlsZE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEd1aWxkICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMgJiYgIWUuZGVmYXVsdC5pc0ZldGNoaW5nKVswXVxyXG5sZXQgZW1vamlTZWFyY2ggPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXREaXNhbWJpZ3VhdGVkRW1vamlDb250ZXh0KVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb2ppTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5pbml0KCkuY2F0Y2goZXJyID0+IFV0aWxzLmVycihcIkVtb2ppTW9kdWxlXCIsIFwiQW4gZXJyb3Igb2NjdXJlZFwiLCBlcnIpKSAvLyBiZXR0ZXIgbG9nZ2luZ1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXQoKXtcclxuICAgICAgICAvKiogRW1vamkgQXV0b0NvbXBsZXRlICovXHJcbiAgICAgICAgaWYoIUF1dG9jb21wbGV0ZU1vZHVsZSlBdXRvY29tcGxldGVNb2R1bGUgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiQXV0b2NvbXBsZXRlXCIpXHJcbiAgICAgICAgaWYoIUF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKUF1dG9Db21wbGV0aW9uVGVtcGxhdGVzID0gYXdhaXQgd2luZG93LkxpZ2h0Y29yZC5BcGkuZW5zdXJlRXhwb3J0ZWQoZSA9PiBlLmdldEF1dG9jb21wbGV0ZU9wdGlvbnMpXHJcbiAgICAgICAgaWYoIUVtb2ppTW9kdWxlUXVlcnkpRW1vamlNb2R1bGVRdWVyeSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5xdWVyeUVtb2ppUmVzdWx0cylcclxuICAgICAgICBpZighTWVzc2FnZXMpTWVzc2FnZXMgPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuTWVzc2FnZXMgJiYgZS5kZWZhdWx0Lk1lc3NhZ2VzLkVNT0pJX01BVENISU5HKVxyXG4gICAgICAgIGlmKCFndWlsZE1vZHVsZSlndWlsZE1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZCAmJiBlLmRlZmF1bHQuZ2V0R3VpbGRzICYmICFlLmRlZmF1bHQuaXNGZXRjaGluZylcclxuICAgICAgICBpZighZW1vamlTZWFyY2gpZW1vamlTZWFyY2ggPSBhd2FpdCB3aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0RGlzYW1iaWd1YXRlZEVtb2ppQ29udGV4dClcclxuXHJcbiAgICAgICAgaWYoQXV0b2NvbXBsZXRlTW9kdWxlICYmIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzICYmIEVtb2ppTW9kdWxlUXVlcnkgJiYgTWVzc2FnZXMgJiYgZ3VpbGRNb2R1bGUgJiYgZW1vamlTZWFyY2gpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUGF0Y2hpbmcgZ2V0QXV0b2NvbXBsZXRlT3B0aW9ucyBvZiBBdXRvQ29tcGxldGlvblRlbXBsYXRlc2AsIEF1dG9Db21wbGV0aW9uVGVtcGxhdGVzKVxyXG4gICAgICAgICAgICBjb25zdCBnZXRBdXRvY29tcGxldGVPcHRpb25zID0gQXV0b0NvbXBsZXRpb25UZW1wbGF0ZXMuZ2V0QXV0b2NvbXBsZXRlT3B0aW9uc1xyXG4gICAgICAgICAgICBBdXRvQ29tcGxldGlvblRlbXBsYXRlcy5nZXRBdXRvY29tcGxldGVPcHRpb25zID0gZnVuY3Rpb24oZSwgdCwgbiwgciwgYSl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldEF1dG9jb21wbGV0ZU9wdGlvbnMuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpXHJcbiAgICAgICAgICAgICAgICB2YWx1ZS5MSUdIVENPUkRfRU1PSklTID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMoYXJnMSwgYXJnMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBhcmcyLmxlbmd0aCA+IDEgJiYgXCIuXCIgPT09IGFyZzFcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW1vamlVc2FibGUoY29uZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdHModCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRzID0gRW1vamlNb2R1bGVRdWVyeS5kZWZhdWx0LnF1ZXJ5RW1vamlSZXN1bHRzKHQsIGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJSZXN1bHRzKGUsIHQsIG4sIHIsIGEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRChlLCB0LCBhLmVtb2ppcywgbiwgciwgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSV9NQVRDSElORywgTWVzc2FnZXMuZGVmYXVsdC5NZXNzYWdlcy5FTU9KSSwgQXV0b2NvbXBsZXRlTW9kdWxlLmRlZmF1bHQuRW1vamksIChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppOiBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZS5pZCB8fCBlLnVuaXF1ZU5hbWUgfHwgZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnRpbmVsOiBcIi5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlsZDogbnVsbCAhPSBlLmd1aWxkSWQgPyBndWlsZE1vZHVsZS5kZWZhdWx0LmdldEd1aWxkKGUuZ3VpbGRJZCkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiLlwiICsgZSArIFwiLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGxhaW5UZXh0KGlkLCBndWlsZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaXMgPSBndWlsZC5lbW9qaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGVtb2ppcyB8fCBudWxsID09IGVtb2ppc1tpZF0pIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1vamkgPSBlbW9qaXNbaWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmltYXRlZCA9IGVtb2ppLmFuaW1hdGVkID8gXCJhXCIgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW1vamkubWFuYWdlZCB8fCBudWxsID09IGVtb2ppLmlkID8gXCIuXCIgKyBlbW9qaS5uYW1lICsgXCIuXCIgOiBcIjxcIiArIGlzQW5pbWF0ZWQgKyBcIi5cIiArIChlbW9qaS5vcmlnaW5hbE5hbWUgfHwgZW1vamkubmFtZSkgKyBcIi5cIiArIGVtb2ppLmlkICsgXCI+XCJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGdldFJhd1RleHQoaWQsIGd1aWxkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVtb2ppcyA9IGd1aWxkLmVtb2ppcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gZW1vamlzIHx8IG51bGwgPT0gZW1vamlzW2lkXSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbW9qaSA9IGVtb2ppc1tpZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGVkID0gZW1vamkuYW5pbWF0ZWQgPyBcImFcIiA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbW9qaS5tYW5hZ2VkIHx8IG51bGwgPT0gZW1vamkuaWQgPyBcIi5cIiArIGVtb2ppLm5hbWUgKyBcIi5cIiA6IFwiPFwiICsgaXNBbmltYXRlZCArIFwiLlwiICsgKGVtb2ppLm9yaWdpbmFsTmFtZSB8fCBlbW9qaS5uYW1lKSArIFwiLlwiICsgZW1vamkuaWQgKyBcIj5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKFwiQ291bGRuJ3Qgc3RhcnQgYXV0b2NvbXBsZXRpb24gb2YgTGlnaHRjb3JkJ3MgZW1vamlzLlwiKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiBFbW9qaSBkaXNwbGF5ICovXHJcbiAgICAgICAgd2hpbGUgKCFCRFYyLk1lc3NhZ2VDb21wb25lbnQpIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEVtb2ppUmVuZGVyKXsgLy8gVE9ETzogUHJvcGVyIGVtb2ppIGZvcm1hdHRpbmcgLyByZW5kZXJpbmdcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IFV0aWxzLm1vbmtleVBhdGNoKEJEVjIuTWVzc2FnZUNvbXBvbmVudCwgXCJkZWZhdWx0XCIsIHtiZWZvcmU6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gVXRpbHMuZ2V0TmVzdGVkUHJvcChkYXRhLm1ldGhvZEFyZ3VtZW50c1swXSwgXCJjaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLm1lc3NhZ2VcIilcclxuICAgICAgICAgICAgICAgIGlmKCFtZXNzYWdlKXJldHVyblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IFV0aWxzLmdldE5lc3RlZFByb3AoZGF0YS5tZXRob2RBcmd1bWVudHNbMF0sIFwiY2hpbGRyZW5NZXNzYWdlQ29udGVudC5wcm9wcy5jb250ZW50XCIpXHJcbiAgICAgICAgICAgICAgICBpZighY29udGVudCB8fCAhY29udGVudC5sZW5ndGgpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQHR5cGUge3tcclxuICAgICAgICAgICAgICAgICAqICByYXc6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBuYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgKiAgaWQ6IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAqICBhbmltYXRlZDogYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgICogfVtdfVxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBsZXQgZW1vamlzID0gW11cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IFtdXHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IG5vZGUgb2YgY29udGVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJzZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1BhcnNlZCA9IGZhbHNlXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBDb25zdGFudHMuRW1vamlSZWdleC5leGVjKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQYXJzZWQgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighRW1vamlNb2R1bGVBcGkpRW1vamlNb2R1bGVBcGkgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXN0b21FbW9qaUJ5SWQpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW9qaSA9IEVtb2ppTW9kdWxlQXBpLmRlZmF1bHQuZ2V0Q3VzdG9tRW1vamlCeUlkKHBhcnNlZFsyXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGVtb2ppKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBlbW9qaS5hbmltYXRlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogZW1vamkubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVtb2ppLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc6IHBhcnNlZFswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbW9qaXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkOiBwYXJzZWRbMF0uc3RhcnRzV2l0aChcIjxhXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBwYXJzZWRbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYXJzZWRbMl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdzogcGFyc2VkWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHBhcnNlZCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZihoYXNQYXJzZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoXCIgXCIpLm1hcCgod29yZCwgaW5kZXgsIGFycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXdvcmQpcmV0dXJuIFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb2ppID0gZW1vamlzLmZpbmQoZSA9PiBlLnJhdyA9PSB3b3JkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWVtb2ppKXJldHVybiB3b3JkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighQ3VzdG9tRW1vamlNb2R1bGUpQ3VzdG9tRW1vamlNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5DdXN0b21FbW9qaSlbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEN1c3RvbUVtb2ppTW9kdWxlLkN1c3RvbUVtb2ppLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYC4ke2Vtb2ppLm5hbWV9LmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppSWQ6IGVtb2ppLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlZDogZW1vamkuYW5pbWF0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1bWJvYWJsZTogYXJyLmxlbmd0aCA9PT0gMSAmJiBjb250ZW50Lmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByZXZpb3VzLmxlbmd0aCA9PT0gMClyZXR1cm4gW2N1cnJlbnRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgY3VycmVudCA9PT0gXCJzdHJpbmdcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNbcHJldmlvdXMubGVuZ3RoIC0gMV0gKz0gYCAke2N1cnJlbnR9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIitjdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMucHVzaChcIiBcIiwgY3VycmVudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29udGVudC5wdXNoKC4uLndvcmRzKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb250ZW50LnB1c2gobm9kZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZShkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnRbMF0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWV0aG9kQXJndW1lbnRzWzBdLmNoaWxkcmVuTWVzc2FnZUNvbnRlbnQucHJvcHMuY29udGVudC5zaGlmdCgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aGlsZShuZXdDb250ZW50WzBdKXtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm1ldGhvZEFyZ3VtZW50c1swXS5jaGlsZHJlbk1lc3NhZ2VDb250ZW50LnByb3BzLmNvbnRlbnQucHVzaChuZXdDb250ZW50LnNoaWZ0KCkpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9LypcclxuICAgICAgICBsZXQgdXNlck1vZHVsZVxyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJFbW9qaVBpY2tlckxpc3RSb3dcIilcclxuICAgICAgICAudGhlbihFbW9qaVBpY2tlckxpc3RSb3cgPT4ge1xyXG4gICAgICAgICAgICBsZXQgY2xhc3NzID0gRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHRcclxuICAgICAgICAgICAgRW1vamlQaWNrZXJMaXN0Um93LmRlZmF1bHQgPSBjbGFzcyBFbW9qaVBpY2tlckxpc3RSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKHByb3BzKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlbmRlcigpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyTW9kdWxlKXVzZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilbMF1cclxuICAgICAgICAgICAgICAgICAgICBpZighdXNlck1vZHVsZSlyZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIHRoaXMucHJvcHMpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24pcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY2xhc3NzLCB0aGlzLnByb3BzKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChjbGFzc3MsIE9iamVjdC5hc3NpZ24oe30sIHRoaXMucHJvcHMsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vamlEZXNjcmlwdG9yczogdGhpcy5wcm9wcy5lbW9qaURlc2NyaXB0b3JzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaXNEaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBFbW9qaVBpY2tlckxpc3RSb3cuZGVmYXVsdC5kaXNwbGF5TmFtZSA9IFwiRW1vamlQaWNrZXJMaXN0Um93XCJcclxuICAgICAgICB9KSovXHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZSgpe1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCgpe1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBEKGUsIHQsIG4sIHIsIG8sIGksIHMsIHUsIGwsIGMpIHtcclxuICAgIGlmIChudWxsID09IG4gfHwgMCA9PT0gbi5sZW5ndGgpIHJldHVybiBudWxsO1xyXG4gICAgdmFyIGQgPSBuLm1hcCgoZnVuY3Rpb24oZSwgbikge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHUsIE9iamVjdC5hc3NpZ24oe1xyXG4gICAgICAgICAgICBvbkNsaWNrOiBvLFxyXG4gICAgICAgICAgICBvbkhvdmVyOiByLFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogdCA9PT0gbixcclxuICAgICAgICAgICAgaW5kZXg6IG5cclxuICAgICAgICB9LCBsKGUsIG4pKSlcclxuICAgIH0pKTtcclxuICAgIHJldHVybiBbUihpLCBzLCBlLCBjKSwgZF1cclxufVxyXG5cclxuZnVuY3Rpb24gUihlLCB0LCBuLCByKSB7XHJcbiAgICB2YXIgYSA9IChuLmxlbmd0aCA+IDAgPyBlLmZvcm1hdCh7XHJcbiAgICAgICAgcHJlZml4OiByKG4pXHJcbiAgICB9KSA6IHQpXHJcbiAgICBpZihBcnJheS5pc0FycmF5KGEpKXtcclxuICAgICAgICBhLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCB7fSwgXCJbTGlnaHRjb3JkXSBcIikpXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBhID0gXCJbTElHSFRDT1JEXSBcIithXHJcbiAgICB9XHJcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChBdXRvY29tcGxldGVNb2R1bGUuZGVmYXVsdC5UaXRsZSwge1xyXG4gICAgICAgIHRpdGxlOiBhXHJcbiAgICB9LCBhKVxyXG59XHJcblIuZGlzcGxheU5hbWUgPSBcInJlbmRlckhlYWRlclwiO1xyXG5cclxubGV0IEVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG5sZXQgaXNFbW9qaURpc2FibGVkID0gRW1vamlGaWx0ZXJNb2R1bGUgJiYgRW1vamlGaWx0ZXJNb2R1bGUuZGVmYXVsdC5pc0Vtb2ppRGlzYWJsZWRcclxubGV0IGlzVXNhYmxlID0gZmFsc2VcclxubGV0IGhhc1BhdGNoZWQgPSBmYWxzZVxyXG5cclxuZnVuY3Rpb24gc2V0RW1vamlVc2FibGUodXNhYmxlKXtcclxuICAgIGlzVXNhYmxlID0gdXNhYmxlXHJcbiAgICBpZihoYXNQYXRjaGVkKXJldHVyblxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKUVtb2ppRmlsdGVyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuaXNFbW9qaURpc2FibGVkKVswXVxyXG4gICAgaWYoIUVtb2ppRmlsdGVyTW9kdWxlKXJldHVyblxyXG4gICAgaWYoIWlzRW1vamlEaXNhYmxlZClpc0Vtb2ppRGlzYWJsZWQgPSBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZFxyXG5cclxuICAgIGhhc1BhdGNoZWQgPSB0cnVlXHJcbiAgICBFbW9qaUZpbHRlck1vZHVsZS5kZWZhdWx0LmlzRW1vamlEaXNhYmxlZCA9IGZ1bmN0aW9uKGVtb2ppKXtcclxuICAgICAgICBpZihpc1VzYWJsZSl7XHJcbiAgICAgICAgICAgIGlmKGVtb2ppLnN1cnJvZ2F0ZXMgfHwgZW1vamkuZGl2ZXJzaXR5KXJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNFbW9qaURpc2FibGVkLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IG5vZGVGZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiXHJcbmltcG9ydCAqIGFzIGVsZWN0cm9uIGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwiY3J5cHRvXCJcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vdjJcIlxyXG5pbXBvcnQgdG9vbHRpcFdyYXAgZnJvbSBcIi4uL3VpL3Rvb2x0aXBXcmFwXCJcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCJcclxuaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiXHJcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIlxyXG5pbXBvcnQgY29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5pbXBvcnQgeyBhZGRvbkNhY2hlIH0gZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIlxyXG5cclxuY29uc3QgY2FjaGUgPSB7fVxyXG5jb25zdCBjYWNoZTIgPSB7fVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbkNlcnRpZmllciB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5QbHVnaW5DZXJ0aWZpZXIgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2goYXR0YWNobWVudCwgaWQpe1xyXG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICBwcm9jZXNzQXR0YWNobWVudChhdHRhY2htZW50LCBpZClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0KCl7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlzVHJ1c3RlZChoYXNoKXtcclxuICAgICAgICByZXR1cm4gY2FjaGVbaGFzaF0gJiYgIWNhY2hlW2hhc2hdLnN1c3BlY3RcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKXtcclxuICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKFwidXRmOFwiKVxyXG4gICAgbGV0IGlzSGFybWZ1bCA9IGZhbHNlXHJcbiAgICBmb3IobGV0IGtleXdvcmQgb2YgZGF0YS5zcGxpdCgvW15cXHdcXGRdKy9nKSl7XHJcbiAgICAgICAgZm9yKGxldCBvb2Ygb2YgW1xyXG4gICAgICAgICAgICBcInRva2VuXCIsXHJcbiAgICAgICAgICAgIFwiZW1haWxcIixcclxuICAgICAgICAgICAgXCJwaG9uZVwiLFxyXG4gICAgICAgICAgICBcIk1GQVwiLFxyXG4gICAgICAgICAgICBcIjJmYVwiLFxyXG4gICAgICAgICAgICBcImNoaWxkX3Byb2Nlc3NcIixcclxuICAgICAgICAgICAgXCJsb2NhbFN0b3JhZ2VcIixcclxuICAgICAgICAgICAgXCJldmFsXCIsXHJcbiAgICAgICAgICAgIFwiZ2V0R2xvYmFsXCIsXHJcbiAgICAgICAgICAgIFwiQnJvd3NlcldpbmRvd1wiXHJcbiAgICAgICAgXSl7XHJcbiAgICAgICAgICAgIGlmKGtleXdvcmQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhvb2YudG9Mb3dlckNhc2UoKSkgJiYgIWtleXdvcmQudG9Mb3dlckNhc2UoKSA9PT0gXCJkb210b2tlbmxpc3RcIil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhvb2YsIGtleXdvcmQpXHJcbiAgICAgICAgICAgICAgICBpc0hhcm1mdWwgPSBcInRva2VuIHN0ZWFsZXIvdmlydXNcIlxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaXNIYXJtZnVsKWJyZWFrXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWlzSGFybWZ1bCl7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBub19jb21tZW50cyA9IGRhdGEucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3woW15cXFxcOl18XilcXC9cXC8uKiQvZ20sIFwiXCIpLnRyaW0oKS8vIHJlbW92aW5nIHRoZSBNRVRBIGNvbW1lbnQgZnJvbSBwbHVnaW5zXHJcbiAgICAgICAgaWYoKC92YXIgW1xcd1xcZF8kXSs9XFxbXCIvZ2kpLnRlc3Qobm9fY29tbWVudHMpKXtcclxuICAgICAgICAgICAgaXNIYXJtZnVsID0gXCJvYmZ1c2NhdGlvbi9oaWRkZW4gY29kZVwiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighaXNIYXJtZnVsKXtcclxuICAgICAgICAgICAgY29uc3QgcmVnZXhwcyA9IFtcclxuICAgICAgICAgICAgICAgIC8qKiBoZXhhZGVjaW1hbCAqL1xyXG4gICAgICAgICAgICAgICAgL18weFxcd3s0fVxcKCcweFtcXGRhYmNkZWZdKydcXCkvZyxcclxuICAgICAgICAgICAgICAgIC9fMHhcXHd7NH1cXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gXzB4OGRiNygnMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICAgICAgLyoqIG1hbmdsZWQgKi9cclxuICAgICAgICAgICAgICAgIC9cXHcrXFwoJzB4W1xcZGFiY2RlZl0rJ1xcKS9nLCAvLyBiKCcweDAnKVxyXG4gICAgICAgICAgICAgICAgL1xcdytcXCgnMHhbXFxkYWJjZGVmXSsnWywgXSsnW14nXXs0fSdcXCkvZywgLy8gYignMHgwJywgJ3gxXWYnKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIGZvcihsZXQgcmVnZXggb2YgcmVnZXhwcyl7XHJcbiAgICAgICAgICAgICAgICBpZihpc0hhcm1mdWwpYnJlYWtcclxuICAgICAgICAgICAgICAgIGlmKHJlZ2V4LnRlc3Qobm9fY29tbWVudHMpKWlzSGFybWZ1bCA9IFwib2JmdXNjYXRpb24vaGlkZGVuIGNvZGVcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKCFpc0hhcm1mdWwpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICBjYWNoZVtoYXNoXSA9IHtcclxuICAgICAgICBzdXNwZWN0OiB0cnVlLFxyXG4gICAgICAgIG5hbWU6IGhhc2hUb1VybFtoYXNoXS5zcGxpdChcIi9cIikucG9wKCksXHJcbiAgICAgICAgdHlwZTogaGFzaFRvVXJsW2hhc2hdLmVuZHNXaXRoKFwiLmpzXCIpID8gXCJQbHVnaW5cIiA6IFwiVGhlbWVcIixcclxuICAgICAgICBoYXJtOiBpc0hhcm1mdWwsXHJcbiAgICAgICAgaGFzaDogaGFzaCxcclxuICAgICAgICBmaWxlbmFtZVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zb2xlLmxvZyhgRm91bmQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzICR7Y2FjaGVbaGFzaF0udHlwZS50b0xvd2VyQ2FzZSgpfTogJHtjYWNoZVtoYXNoXS5uYW1lfWApXHJcblxyXG4gICAgcmVzdWx0Q2FsbGJhY2soY2FjaGVbaGFzaF0pXHJcbn1cclxuXHJcbmNvbnN0IGhhc2hUb1VybCA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tIYXNoKGhhc2gsIGRhdGEsIGZpbGVuYW1lLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spe1xyXG4gICAgY29uc29sZS5sb2coYEZpbGU6ICR7ZmlsZW5hbWV9IGhhc2g6ICR7aGFzaH1gKVxyXG4gICAgaWYoIWNhY2hlW2hhc2hdKXtcclxuICAgICAgICBub2RlRmV0Y2goXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvZ2gvTGlnaHRjb3JkL2ZpbGVoYXNoZXNAbWFzdGVyL2hhc2hlcy9cIitoYXNoLCB7IC8vIFVzaW5nIG5vZGUtZmV0Y2ggdG8gYnlwYXNzIGNvcnNcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnQgLy8gaGF2ZSB0byBzZXQgdXNlci1hZ2VudFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgaWYoZmlsZW5hbWUuZW5kc1dpdGgoXCIudGhlbWUuY3NzXCIpKXJldHVybiByZW1vdmVDYWxsYmFjayhoYXNoKVxyXG4gICAgICAgICAgICAgICAgY2hlY2tWaXJ1c2VzKGhhc2gsIGRhdGEsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjaywgZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXMuanNvbigpXHJcbiAgICAgICAgICAgIHJlc3VsdC5oYXNoID0gaGFzaFxyXG4gICAgICAgICAgICByZXN1bHQuZmlsZW5hbWUgPSBmaWxlbmFtZVxyXG5cclxuICAgICAgICAgICAgY2FjaGVbaGFzaF0gPSByZXN1bHRcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdENhbGxiYWNrKHJlc3VsdClcclxuICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCByZWFkIGZyb20gZ2l0aHViLiAke2Vycn1gKVxyXG4gICAgICAgICAgICBpZihmaWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIHJlbW92ZUNhbGxiYWNrKGhhc2gpXHJcbiAgICAgICAgICAgIGNoZWNrVmlydXNlcyhoYXNoLCBkYXRhLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2ssIGZpbGVuYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBjYWNoZVtoYXNoXVxyXG5cclxuICAgICAgICByZXN1bHRDYWxsYmFjayhyZXN1bHQpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRmlsZShfX3BhdGgsIHJlc3VsdENhbGxiYWNrLCByZW1vdmVDYWxsYmFjayA9IChoYXNoKSA9PiB7fSwgaXNGcm9tTG9hZGVyID0gZmFsc2UpeyAgICBcclxuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChcInNoYTI1NlwiKVxyXG4gICAgbGV0IGRhdGEgPSBCdWZmZXIuYWxsb2MoMClcclxuXHJcbiAgICBjcmVhdGVSZWFkU3RyZWFtKF9fcGF0aCkub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICBkYXRhID0gQnVmZmVyLmNvbmNhdChbZGF0YSwgY2h1bmtdKVxyXG4gICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgfSkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc2hSZXN1bHQgPSBoYXNoLmRpZ2VzdChcImhleFwiKVxyXG5cclxuICAgICAgICBoYXNoVG9VcmxbaGFzaFJlc3VsdF0gPSBfX3BhdGhcclxuXHJcbiAgICAgICAgaWYoaXNGcm9tTG9hZGVyICYmIGFkZG9uQ2FjaGVbaGFzaFJlc3VsdF0pe1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgIGlmKHZhbHVlLnRpbWVzdGFtcCA8IChEYXRlLm5vdygpIC0gNi4wNDhlKzgpKXtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBhZGRvbkNhY2hlW2hhc2hSZXN1bHRdXHJcbiAgICAgICAgICAgICAgICBjb250ZW50TWFuYWdlci5zYXZlQWRkb25DYWNoZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0Q2FsbGJhY2sodmFsdWUucmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoZWNrSGFzaChoYXNoUmVzdWx0LCBkYXRhLCBiYXNlbmFtZShfX3BhdGgpLCByZXN1bHRDYWxsYmFjaywgcmVtb3ZlQ2FsbGJhY2spXHJcbiAgICB9KVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0F0dGFjaG1lbnQoYXR0YWNobWVudCwgaWQpe1xyXG4gICAgaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSlyZXR1cm5cclxuICAgIGlmKCFhdHRhY2htZW50LnVybC5zdGFydHNXaXRoKFwiaHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vXCIpKXJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKClcclxuICAgIGlmKCFhdHRhY2htZW50LmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSAmJiAhYXR0YWNobWVudC5maWxlbmFtZS5lbmRzV2l0aChcIi50aGVtZS5jc3NcIikpcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKVxyXG5cclxuICAgIG5vZGVGZXRjaChhdHRhY2htZW50LnVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IGVsZWN0cm9uLnJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS51c2VyQWdlbnRcclxuICAgICAgICB9XHJcbiAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIkZpbGUgZG9lc24ndCBleGlzdC5cIilcclxuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIilcclxuICAgICAgICBsZXQgZGF0YSA9IEJ1ZmZlci5hbGxvYygwKVxyXG4gICAgICAgIHJlcy5ib2R5Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBCdWZmZXIuY29uY2F0KFtkYXRhLCBjaHVua10pXHJcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKGNodW5rKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgcmVzLmJvZHkub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoUmVzdWx0ID0gaGFzaC5kaWdlc3QoXCJoZXhcIilcclxuXHJcbiAgICAgICAgICAgIGNhY2hlMlthdHRhY2htZW50LnVybF0gPSBoYXNoUmVzdWx0XHJcbiAgICAgICAgICAgIGhhc2hUb1VybFtoYXNoUmVzdWx0XSA9IGF0dGFjaG1lbnQudXJsXHJcblxyXG4gICAgICAgICAgICBjaGVja0hhc2goaGFzaFJlc3VsdCwgZGF0YSwgYXR0YWNobWVudC5maWxlbmFtZSwgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVyVG9FbGVtZW50cyhpZCwgcmVzdWx0LCBhdHRhY2htZW50LmZpbGVuYW1lKVxyXG4gICAgICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKVxyXG4gICAgICAgICAgICAgICAgaWYoZWxlbSllbGVtLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pLmNhdGNoKCgpPT57fSlcclxufVxyXG5cclxubGV0IGZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG5sZXQgY2hpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jaGlsZENvbnRhaW5lcilbMF1cclxuXHJcbi8qKlxyXG4gKiBcclxuICogQHBhcmFtIHtIVE1MRGl2RWxlbWVudFtdfSBlbGVtZW50cyBcclxuICogQHBhcmFtIHt7dHlwZTogXCJUaGVtZVwifFwiUGx1Z2luXCIsIG5hbWU6IHN0cmluZywgb2ZmaWNpYWw/OiBib29sZWFufXx7c3VzcGVjdDp0cnVlLCB0eXBlOiBcIlRoZW1lXCJ8XCJQbHVnaW5cIiwgbmFtZTogc3RyaW5nLCBoYXJtOiBzdHJpbmd9fSByZXN1bHRcclxuICovXHJcbmZ1bmN0aW9uIHJlbmRlclRvRWxlbWVudHMoaWQsIHJlc3VsdCwgZmlsZW5hbWUpe1xyXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXHJcbiAgICBpZighZGl2IHx8IGRpdi5jaGlsZE5vZGVzLmxlbmd0aCA+IDApcmV0dXJuIC8vIGFscmVhZHkgY2VydGlmaWVkL2RpdiBkb2VzIG5vdCBleGlzdCBhbnltb3JlLlxyXG5cclxuICAgIGlmKCFmbG93ZXJTdGFyTW9kdWxlKWZsb3dlclN0YXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbG93ZXJTdGFyQ29udGFpbmVyKVswXVxyXG4gICAgaWYoIWNoaWxkTW9kdWxlKWNoaWxkTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY2hpbGRDb250YWluZXIpWzBdXHJcbiAgICBcclxuICAgIGlmKHJlc3VsdC5zdXNwZWN0KXtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnN0eWxlLmJvcmRlckNvbG9yID0gXCJyZ2IoMjQwLCA3MSwgNzEpXCJcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFxyXG4gICAgICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgbGV0IG5leHROb2RlID0gKG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2hpbGQudGFnTmFtZSA9PT0gXCJBXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGlzID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiAqKlwiK2ZpbGVuYW1lK1wiKiogbWlnaHQgYmUgZGFuZ2Vyb3VzICoqKFwiK3Jlc3VsdC5oYXJtK1wiKSoqLiBcXG5cXG4qKldlIGRvbid0IHJlY29tbWFuZCB0byBkb3dubG9hZCBpdCoqLiBIb3dldmVyLCB5b3UgY2FuIHN0aWxsIGRvIGl0IGJlbG93LlwiLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIEFueXdheVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkRvbid0ICFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlY3Ryb24ucmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChjaGlsZC5ocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKFtcImRpdlwiXS5pbmNsdWRlcyhjaGlsZC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5vZGUoY2hpbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5leHROb2RlKGRpdi5wYXJlbnROb2RlKVxyXG4gICAgICAgIH1jYXRjaChlKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQodG9vbHRpcFdyYXAsIHt0ZXh0OiByZXN1bHQudHlwZStcIiBcIityZXN1bHQubmFtZStcIiBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMuXCJ9LCBcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zdmcpWzBdLnN2ZywgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCA0MCAzMlwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTpcIjBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6XCIzMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1hdmF0YXItc3RhdHVzLXJvdW5kLTMyKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOlwiI2YwNDc0N1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOlwidXJsKCNzdmctbWFzay1zdGF0dXMtZG5kKVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6QkRNb2R1bGVzLmdldChlID0+IGUucG9pbnRlckV2ZW50cylbMF0ucG9pbnRlckV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApLCBkaXYpXHJcbiAgICB9ZWxzZSBpZighcmVzdWx0Lm9mZmljaWFsKXtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5zdHlsZS5ib3JkZXJDb2xvciA9IFwiIzQwODdlZFwiXHJcbiAgICAgICAgbGV0IHNwYW4gPSBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtzdHlsZToge2Rpc3BsYXk6IFwiaW5oZXJpdFwifX0sIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogcmVzdWx0LnR5cGUrXCIgXCIrcmVzdWx0Lm5hbWUrXCIgaXMgY2VydGlmaWVkIGJ5IExpZ2h0Y29yZC5cIn0sIFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhckNvbnRhaW5lciwgc3R5bGU6IHt3aWR0aDogXCIyMHB4XCIsIGhlaWdodDogXCIyMHB4XCIsIGZsb2F0OiBcImxlZnRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXIsIFwiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiM0ZjU0NWNcIiwgXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIixkOlwibTE2IDcuNmMwIC43OS0xLjI4IDEuMzgtMS41MiAyLjA5cy40NCAyIDAgMi41OS0xLjg0LjM1LTIuNDYuOC0uNzkgMS44NC0xLjU0IDIuMDktMS42Ny0uOC0yLjQ3LS44LTEuNzUgMS0yLjQ3LjgtLjkyLTEuNjQtMS41NC0yLjA5LTItLjE4LTIuNDYtLjguMjMtMS44NCAwLTIuNTktMS41NC0xLjMtMS41NC0yLjA5IDEuMjgtMS4zOCAxLjUyLTIuMDktLjQ0LTIgMC0yLjU5IDEuODUtLjM1IDIuNDgtLjguNzgtMS44NCAxLjUzLTIuMTIgMS42Ny44MyAyLjQ3LjgzIDEuNzUtMSAyLjQ3LS44LjkxIDEuNjQgMS41MyAyLjA5IDIgLjE4IDIuNDYuOC0uMjMgMS44NCAwIDIuNTkgMS41NCAxLjMgMS41NCAyLjA5elwifSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBjaGlsZE1vZHVsZS5jaGlsZENvbnRhaW5lcn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCIsd2lkdGg6XCIyMHB4XCIsaGVpZ2h0OlwiMjBweFwiLHZpZXdCb3g6XCIwIDAgMTYgMTUuMlwifSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiI2ZmZmZmZlwiLGQ6XCJNNy40LDExLjE3LDQsOC42Miw1LDcuMjZsMiwxLjUzTDEwLjY0LDRsMS4zNiwxWlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIGFuZCBsYXVuY2ggdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiLiBZb3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkby5cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0OiBcIkRvd25sb2FkIGFuZCBJbnN0YWxsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiBcIkkndmUgY2hhbmdlZCBteSBtaW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW5nZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DYW5jZWw6ICgpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsgPSBnZXRLZXllZEFycmF5KGNhY2hlMikuZmluZChlID0+IGVbMV0gPT09IHJlc3VsdC5oYXNoKVswXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZldGNoKGxpbmspXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKXRocm93IG5ldyBFcnJvcihcIlN0YXR1cyB3YXMgbm90IDIwMFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHJlcy5idWZmZXIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5zdGFsbFBhdGggPSBqb2luKHJlc3VsdC50eXBlID09PSBcIlBsdWdpblwiID8gY29udGVudE1hbmFnZXIuX3BsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci5fdGhlbWVzRm9sZGVyLCByZXN1bHQuZmlsZW5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGluc3RhbGxQYXRoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGVTeW5jKGluc3RhbGxQYXRoLCBjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QocmVzdWx0LnR5cGUrXCIgc3VjY2VzZnVsbHkgaW5zdGFsbGVkLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KGVyci5tZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAyNCAyNFwiLHN0eWxlOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IFwicmdiKDY3LCAxODEsIDEyOSlcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBcInBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9XCJmaWxsXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1elwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc3BhbiwgZGl2KVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICAgZGl2LnBhcmVudE5vZGUuc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgIGxldCBzcGFuID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtkaXNwbGF5OiBcImluaGVyaXRcIn19LCBbXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudCh0b29sdGlwV3JhcCwge3RleHQ6IHJlc3VsdC50eXBlK1wiIFwiK3Jlc3VsdC5uYW1lK1wiIHdhcyBtYWRlIGJ5IHRoZSBkZXZlbG9wZXJzIG9mIExpZ2h0Y29yZC5cIiwgc3R5bGU6XCJicmFuZFwifSwgXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyQ29udGFpbmVyLCBzdHlsZToge3dpZHRoOiBcIjIwcHhcIiwgaGVpZ2h0OiBcIjIwcHhcIiwgZmxvYXQ6IFwibGVmdFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtjbGFzc05hbWU6IGZsb3dlclN0YXJNb2R1bGUuZmxvd2VyU3RhciwgXCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIix3aWR0aDpcIjIwcHhcIixoZWlnaHQ6XCIyMHB4XCIsdmlld0JveDpcIjAgMCAxNiAxNS4yXCIsc3Ryb2tlOlwiIzM2MzkzZlwiLHN0eWxlOntjb2xvcjpcIiM0MDg3ZWRcIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOlwiY3VycmVudENvbG9yXCIsIFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsZDpcIm0xNiA3LjZjMCAuNzktMS4yOCAxLjM4LTEuNTIgMi4wOXMuNDQgMiAwIDIuNTktMS44NC4zNS0yLjQ2LjgtLjc5IDEuODQtMS41NCAyLjA5LTEuNjctLjgtMi40Ny0uOC0xLjc1IDEtMi40Ny44LS45Mi0xLjY0LTEuNTQtMi4wOS0yLS4xOC0yLjQ2LS44LjIzLTEuODQgMC0yLjU5LTEuNTQtMS4zLTEuNTQtMi4wOSAxLjI4LTEuMzggMS41Mi0yLjA5LS40NC0yIDAtMi41OSAxLjg1LS4zNSAyLjQ4LS44Ljc4LTEuODQgMS41My0yLjEyIDEuNjcuODMgMi40Ny44MyAxLjc1LTEgMi40Ny0uOC45MSAxLjY0IDEuNTMgMi4wOSAyIC4xOCAyLjQ2LjgtLjIzIDEuODQgMCAyLjU5IDEuNTQgMS4zIDEuNTQgMi4wOXpcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogY2hpbGRNb2R1bGUuY2hpbGRDb250YWluZXJ9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDE2IDE1LjJcIn0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDpcIiNmZmZmZmZcIixkOlwiTTEwLjcsNS4yOGEyLjksMi45LDAsMCwwLTIuMTEuODYuMTEuMTEsMCwwLDAsMCwuMTZsMS4wNS45NGEuMTEuMTEsMCwwLDAsLjE1LDAsMS4yNywxLjI3LDAsMCwxLC45LS4zM2MuNjUsMCwuNjUuNzMuNjUuNzNhLjY0LjY0LDAsMCwxLS42NS42NSwxLjczLDEuNzMsMCwwLDEtMS4xOC0uNTRjLS4zMS0uMjYtLjM2LS4zMi0uNzMtLjY2UzcuMDYsNS4yOCw1LjY1LDUuMjhBMi4yNiwyLjI2LDAsMCwwLDMuMzcsNy41NiwyLjU5LDIuNTksMCwwLDAsMy44Miw5YTIuMTgsMi4xOCwwLDAsMCwxLjgzLjg5LDIuOTQsMi45NCwwLDAsMCwyLjEtLjgxLjExLjExLDAsMCwwLDAtLjE2TDYuNzQsOEEuMTEuMTEsMCwwLDAsNi42LDhhMS41OCwxLjU4LDAsMCwxLS45NC4yOWgwQS43MS43MSwwLDAsMSw1LDcuNTZINWEuNjMuNjMsMCwwLDEsLjY1LS42NGMuNzEsMCwxLjQyLjc1LDEuOTQsMS4yNy43NS43NiwxLjY2LDEuNzksMy4xMSwxLjc0QTIuMjgsMi4yOCwwLDAsMCwxMyw3LjY0YTIuNTksMi41OSwwLDAsMC0uNDUtMS40N0EyLjE0LDIuMTQsMCwwLDAsMTAuNyw1LjI4WlwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7dGV4dDogXCJJbnN0YWxsIHRoaXMgXCIrcmVzdWx0LnR5cGUudG9Mb3dlckNhc2UoKStcIiBvbiBMaWdodGNvcmQuXCJ9LCBcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBmbG93ZXJTdGFyTW9kdWxlLmZsb3dlclN0YXJDb250YWluZXIsIHN0eWxlOiB7d2lkdGg6IFwiMjBweFwiLCBoZWlnaHQ6IFwiMjBweFwifSwgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dDb25maXJtYXRpb25Nb2RhbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG93bmxvYWQgdGhpcyBcIityZXN1bHQudHlwZS50b0xvd2VyQ2FzZSgpK1wiID9cIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiTGlnaHRjb3JkIHdpbGwgYXV0b21hdGljYWxseSBkb3dubG9hZCBhbmQgbG9hZCB0aGlzIFwiK3Jlc3VsdC50eXBlLnRvTG93ZXJDYXNlKCkrXCIuIFlvdSBtdXN0IGVuYWJsZSBpdCBpbiB0aGUgc2V0dGluZ3MuXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogXCJEb3dubG9hZCBhbmQgSW5zdGFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogXCJJJ3ZlIGNoYW5nZWQgbXkgbWluZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFuZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5rID0gZ2V0S2V5ZWRBcnJheShjYWNoZTIpLmZpbmQoZSA9PiBlWzFdID09PSByZXN1bHQuaGFzaClbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlRmV0Y2gobGluaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApdGhyb3cgbmV3IEVycm9yKFwiU3RhdHVzIHdhcyBub3QgMjAwXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gYXdhaXQgcmVzLmJ1ZmZlcigpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnN0YWxsUGF0aCA9IGpvaW4ocmVzdWx0LnR5cGUgPT09IFwiUGx1Z2luXCIgPyBjb250ZW50TWFuYWdlci5fcGx1Z2luc0ZvbGRlciA6IGNvbnRlbnRNYW5hZ2VyLl90aGVtZXNGb2xkZXIsIHJlc3VsdC5maWxlbmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZVN5bmMoaW5zdGFsbFBhdGgsIGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChyZXN1bHQudHlwZStcIiBzdWNjZXNmdWxseSBpbnN0YWxsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoZXJyLm1lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge2NsYXNzTmFtZTogZmxvd2VyU3Rhck1vZHVsZS5mbG93ZXJTdGFyLCBcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwiLHdpZHRoOlwiMjBweFwiLGhlaWdodDpcIjIwcHhcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIsc3R5bGU6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogXCJyZ2IoNjcsIDE4MSwgMTI5KVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImZpbGxcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk0xOSA5aC00VjNIOXY2SDVsNyA3IDctN3pNNSAxOHYyaDE0di0ySDV6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcihzcGFuLCBkaXYpXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEtleWVkQXJyYXkob2JqKXtcclxuICAgIGxldCBhcnIgPSBbXVxyXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xyXG4gICAgICAgIGFyci5wdXNoKFtrLCBvYmpba11dKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBhcnJcclxufVxyXG5cclxubGV0IGtleSA9IG51bGxcclxubGV0IHNhdmUgPSBudWxsXHJcblxyXG53aW5kb3cuTGlnaHRjb3JkLkFwaS5lbnN1cmVFeHBvcnRlZChtPT5tLk9iamVjdFN0b3JhZ2UpXHJcbi50aGVuKGxvY2FsU3RvcmFnZU1vZHVsZSA9PiB7XHJcbiAgICBsZXQgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlTW9kdWxlLmltcGxcclxuICAgIHNhdmUgPSBmdW5jdGlvbigpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXQoXCJQbHVnaW5DZXJ0aWZpZXJLZXlFbmNyeXB0aW9uX19cIiwgYnRvYShKU09OLnN0cmluZ2lmeShrZXkpKSlcclxuICAgIH1cclxuICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBzYXZlKClcclxuICAgIH0sIDEwMDAwMCk7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IHZhbCA9IHNhZmVKU09OUGFyc2UoYXRvYihsb2NhbFN0b3JhZ2UuZ2V0KFwiUGx1Z2luQ2VydGlmaWVyS2V5RW5jcnlwdGlvbl9fXCIpKSlcclxuICAgICAgICBpZih2YWwgaW5zdGFuY2VvZiBFcnJvciB8fCAhQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggIT09IDIgfHwgdmFsLmZpbmQoZSA9PiB0eXBlb2YgZSAhPT0gXCJzdHJpbmdcIikgfHwgQnVmZmVyLmZyb20odmFsWzBdLCBcImJhc2U2NFwiKS5sZW5ndGggIT09IDE2IHx8IEJ1ZmZlci5mcm9tKHZhbFsxXSwgXCJiYXNlNjRcIikubGVuZ3RoICE9PSAzMil7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlS2V5KClcclxuICAgICAgICAgICAgc2F2ZSgpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBrZXkgPSB2YWxcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICBnZW5lcmF0ZUtleSgpXHJcbiAgICAgICAgc2F2ZSgpXHJcbiAgICB9XHJcbn0pXHJcblxyXG5mdW5jdGlvbiBnZW5lcmF0ZUtleSgpe1xyXG4gICAga2V5ID0gW2NyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoXCJiYXNlNjRcIiksIGNyeXB0by5yYW5kb21CeXRlcygzMikudG9TdHJpbmcoXCJiYXNlNjRcIildXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNhZmVKU09OUGFyc2UoanNvbil7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbilcclxuICAgIH1jYXRjaChlKXtcclxuICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yID8gbmV3IEVycm9yKGUpIDogZVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdFNldHRpbmdzQ2FjaGUoZGF0YSl7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgbGV0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoXCJhZXMtMjU2LWNiY1wiLCBCdWZmZXIuZnJvbShrZXlbMV0sIFwiYmFzZTY0XCIpLCBCdWZmZXIuZnJvbShrZXlbMF0sIFwiYmFzZTY0XCIpKVxyXG4gICAgICAgIGxldCBkZWNyeXB0ZWQgPSBkZWNpcGhlci51cGRhdGUoQnVmZmVyLmZyb20oZGF0YSwgXCJiYXNlNjRcIikpO1xyXG4gICAgICAgIGRlY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW2RlY3J5cHRlZCwgZGVjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgICAgIHJldHVybiBkZWNyeXB0ZWQudG9TdHJpbmcoXCJ1dGY4XCIpXHJcbiAgICB9Y2F0Y2goZSl7XHJcbiAgICAgICAgcmV0dXJuIFwie31cIlxyXG4gICAgfVxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBlbmNyeXB0U2V0dGluZ3NDYWNoZShkYXRhKXtcclxuICAgIGxldCBhcmdzID0gW0J1ZmZlci5mcm9tKGtleVsxXSwgXCJiYXNlNjRcIiksIEJ1ZmZlci5mcm9tKGtleVswXSwgXCJiYXNlNjRcIildXHJcbiAgICBcclxuICAgIGxldCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoJ2Flcy0yNTYtY2JjJywgLi4uYXJncyk7XHJcbiAgICBsZXQgZW5jcnlwdGVkID0gY2lwaGVyLnVwZGF0ZShCdWZmZXIuZnJvbShkYXRhLCBcInV0ZjhcIikpO1xyXG4gICAgZW5jcnlwdGVkID0gQnVmZmVyLmNvbmNhdChbZW5jcnlwdGVkLCBjaXBoZXIuZmluYWwoKV0pO1xyXG4gICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZyhcImJhc2U2NFwiKVxyXG59IiwiaW1wb3J0IHtiZHBsdWdpbkVycm9ycywgcGx1Z2luQ29va2llLCBzZXR0aW5nc0Nvb2tpZSwgYmRwbHVnaW5zfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50TWFuYWdlclwiO1xuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhU3RvcmVcIjtcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbmNsYXNzIFBsdWdpbk1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlBsdWdpbk1vZHVsZSA9IHRoaXNcbiAgICB9XG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlcjt9XG59XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbnMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5sb2FkUGx1Z2luRGF0YSgpO1xuICAgIGJkcGx1Z2luRXJyb3JzLnNwbGljZSgwLCAwLCAuLi4oYXdhaXQgQ29udGVudE1hbmFnZXIubG9hZFBsdWdpbnMoKSkpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcGx1Z2luLCBuYW1lO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5nZXROYW1lKCk7XG4gICAgICAgICAgICBpZiAocGx1Z2luLmxvYWQgJiYgdHlwZW9mKHBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIHBsdWdpbi5sb2FkKCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIG5hbWUgKyBcIiBjb3VsZCBub3QgYmUgbG9hZGVkLlwiLCBlcnIpO1xuICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcImxvYWQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIGVycm9yOiB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9fSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW25hbWVdKSBwbHVnaW5Db29raWVbbmFtZV0gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGx1Z2luQ29va2llW25hbWVdKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xuICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdGFydGVkLmApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luQ29va2llW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgVXRpbHMuZXJyKFwiUGx1Z2luc1wiLCBuYW1lICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XG4gICAgICAgICAgICAgICAgYmRwbHVnaW5FcnJvcnMucHVzaCh7bmFtZTogbmFtZSwgZmlsZTogYmRwbHVnaW5zW3BsdWdpbnNbaV1dLmZpbGVuYW1lLCBtZXNzYWdlOiBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCBlcnJvcjoge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKVxuICAgIH1cbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG5cbiAgICByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLm9uKFwiZGlkLW5hdmlnYXRlLWluLXBhZ2VcIiwgdGhpcy5jaGFubmVsU3dpdGNoLmJpbmQodGhpcykpO1xuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5zdGFydFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RhcnQoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0TmFtZSgpfSB2JHtiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uZ2V0VmVyc2lvbigpfSBoYXMgc3RhcnRlZC5gKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGNvdWxkIG5vdCBiZSBzdGFydGVkLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcbiAgICAgICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlUGx1Z2luRGF0YSgpO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIHBsdWdpbiArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuc3RvcFBsdWdpbiA9IGZ1bmN0aW9uKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgICBiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4uc3RvcCgpO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCl9IHYke2JkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXRWZXJzaW9uKCl9IGhhcyBzdG9wcGVkLmApO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSAmJiAhcmVsb2FkKSBVdGlscy5zaG93VG9hc3QoYCR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldE5hbWUoKX0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gY291bGQgbm90IGJlIHN0b3BwZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xuICAgICAgICBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIGJkcGx1Z2luc1twbHVnaW5dLnBsdWdpbi5nZXROYW1lKCkgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVuYWJsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSB0cnVlO1xuICAgIHRoaXMuc2F2ZVBsdWdpbkRhdGEoKTtcbiAgICB0aGlzLnN0YXJ0UGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlUGx1Z2luID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW5dKSByZXR1cm47XG4gICAgcGx1Z2luQ29va2llW3BsdWdpbl0gPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVQbHVnaW5EYXRhKCk7XG4gICAgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgcmVsb2FkKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIChwbHVnaW4sIHJlbG9hZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4sIHJlbG9hZCk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnRvZ2dsZVBsdWdpbiA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICBpZiAocGx1Z2luQ29va2llW3BsdWdpbl0pIHRoaXMuZGlzYWJsZVBsdWdpbihwbHVnaW4pO1xuICAgIGVsc2UgdGhpcy5lbmFibGVQbHVnaW4ocGx1Z2luKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUudG9nZ2xlID0gZnVuY3Rpb24gKHBsdWdpbiwgcmVsb2FkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGVQbHVnaW4ocGx1Z2luLCByZWxvYWQpO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5sb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLmxvYWRDb250ZW50KGZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gKGNvbnNvbGUubG9nKHAuZmlsZW5hbWUsIGZpbGVuYW1lKSkgfHwgcC5maWxlbmFtZSA9PSBmaWxlbmFtZSkucGx1Z2luO1xuICAgIHRyeSB7IGlmIChwbHVnaW4ubG9hZCAmJiB0eXBlb2YocGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgcGx1Z2luLmxvYWQoKTt9XG4gICAgY2F0Y2ggKGVycikge2lmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJdfSk7fVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbi5nZXROYW1lKCl9IHYke3BsdWdpbi5nZXRWZXJzaW9uKCl9IHdhcyBsb2FkZWQuYCk7XG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7cGx1Z2luLmdldE5hbWUoKX0gdiR7cGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIGxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInBsdWdpbi1sb2FkZWRcIiwgcGx1Z2luLmdldE5hbWUoKSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnVubG9hZFBsdWdpbiA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luLnBsdWdpbi5nZXROYW1lKCk7XG4gICAgaWYgKHBsdWdpbkNvb2tpZVtwbHVnaW5dKSB0aGlzLmRpc2FibGVQbHVnaW4ocGx1Z2luLCB0cnVlKTtcbiAgICBjb25zdCBlcnJvciA9IENvbnRlbnRNYW5hZ2VyLnVubG9hZENvbnRlbnQoYmRwbHVnaW5zW3BsdWdpbl0uZmlsZW5hbWUsIFwicGx1Z2luXCIpO1xuICAgIGRlbGV0ZSBiZHBsdWdpbnNbcGx1Z2luXTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XG4gICAgfVxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gd2FzIHVubG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXVubG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XG4gICAgY29uc3QgYmRwbHVnaW4gPSBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkcGx1Z2luc1tmaWxlbmFtZU9yTmFtZV07XG4gICAgaWYgKCFiZHBsdWdpbikgcmV0dXJuO1xuICAgIHRoaXMudW5sb2FkUGx1Z2luKGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpLnJlc29sdmUoQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlciwgYmRwbHVnaW4uZmlsZW5hbWUpO1xuICAgIHJlcXVpcmUoXCJmc1wiKS51bmxpbmtTeW5jKGZ1bGxQYXRoKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmVsb2FkUGx1Z2luID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm4gdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbi5wbHVnaW4uZ2V0TmFtZSgpO1xuICAgIGNvbnN0IGVuYWJsZWQgPSBwbHVnaW5Db29raWVbcGx1Z2luXTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdG9wUGx1Z2luKHBsdWdpbiwgdHJ1ZSk7XG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5yZWxvYWRDb250ZW50KGJkcGx1Z2luc1twbHVnaW5dLmZpbGVuYW1lLCBcInBsdWdpblwiKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0xXCJdKSBVdGlscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogW2Vycm9yXX0pO1xuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCB7dHlwZTogXCJlcnJvclwifSk7XG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtwbHVnaW59IGNvdWxkIG5vdCBiZSByZWxvYWRlZC5gLCBlcnJvcik7XG4gICAgfVxuICAgIGlmIChiZHBsdWdpbnNbcGx1Z2luXS5wbHVnaW4ubG9hZCAmJiB0eXBlb2YoYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQpID09IFwiZnVuY3Rpb25cIikgYmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmxvYWQoKTtcbiAgICBpZiAoZW5hYmxlZCkgdGhpcy5zdGFydFBsdWdpbihwbHVnaW4sIHRydWUpO1xuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmApO1xuICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3BsdWdpbn0gdiR7YmRwbHVnaW5zW3BsdWdpbl0ucGx1Z2luLmdldFZlcnNpb24oKX0gd2FzIHJlbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwicGx1Z2luLXJlbG9hZGVkXCIsIHBsdWdpbik7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnJlbG9hZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRQbHVnaW4obmFtZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLmVkaXQgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xuICAgIGNvbnNvbGUubG9nKFwiRWRpdCBcIiArIGZpbGVuYW1lT3JOYW1lKTtcbiAgICBjb25zdCBiZHBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYmRwbHVnaW5zKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmRwbHVnaW5zW2ZpbGVuYW1lT3JOYW1lXTtcbiAgICBpZiAoIWJkcGx1Z2luKSByZXR1cm47XG4gICAgY29uc3QgZnVsbFBhdGggPSByZXF1aXJlKFwicGF0aFwiKS5yZXNvbHZlKENvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcbiAgICBjb25zb2xlLmxvZyhcIkVkaXQgXCIgKyBmdWxsUGF0aCk7XG4gICAgcmVxdWlyZShcImVsZWN0cm9uXCIpLnNoZWxsLm9wZW5JdGVtKGAke2Z1bGxQYXRofWApO1xufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS51cGRhdGVQbHVnaW5MaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IENvbnRlbnRNYW5hZ2VyLmxvYWROZXdDb250ZW50KFwicGx1Z2luXCIpO1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkUGx1Z2luKGZpbGVuYW1lKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFBsdWdpbihuYW1lKTtcbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUubG9hZFBsdWdpbkRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0U2V0dGluZ0dyb3VwKFwicGx1Z2luc1wiKTtcbiAgICBpZiAoc2F2ZWQpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwbHVnaW5Db29raWUsIHNhdmVkKTtcbiAgICB9XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLnNhdmVQbHVnaW5EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJwbHVnaW5zXCIsIHBsdWdpbkNvb2tpZSk7XG59O1xuXG5QbHVnaW5Nb2R1bGUucHJvdG90eXBlLm5ld01lc3NhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub25NZXNzYWdlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vbk1lc3NhZ2UoKTsgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25NZXNzYWdlIGZvciBcIiArIHBsdWdpbi5nZXROYW1lKCkgKyBcIi5cIiwgZXJyKTsgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUGx1Z2luTW9kdWxlLnByb3RvdHlwZS5jaGFubmVsU3dpdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhiZHBsdWdpbnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwbHVnaW4gPSBiZHBsdWdpbnNbcGx1Z2luc1tpXV0ucGx1Z2luO1xuICAgICAgICBpZiAoIXBsdWdpbkNvb2tpZVtwbHVnaW4uZ2V0TmFtZSgpXSkgY29udGludWU7XG4gICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9uU3dpdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvblN3aXRjaCBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cblBsdWdpbk1vZHVsZS5wcm90b3R5cGUucmF3T2JzZXJ2ZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IE9iamVjdC5rZXlzKGJkcGx1Z2lucyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGJkcGx1Z2luc1twbHVnaW5zW2ldXS5wbHVnaW47XG4gICAgICAgIGlmICghcGx1Z2luQ29va2llW3BsdWdpbi5nZXROYW1lKCldKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBwbHVnaW4ub2JzZXJ2ZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9ic2VydmVyKGUpOyB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvYnNlcnZlciBmb3IgXCIgKyBwbHVnaW4uZ2V0TmFtZSgpICsgXCIuXCIsIGVycik7IH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQbHVnaW5Nb2R1bGUoKTsiLCJpbXBvcnQgeyB0aGVtZUNvb2tpZSB9IGZyb20gXCIuLi8wZ2xvYmFsc1wiXHJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiXHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIlxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIHBvcG91dFdpbmRvdyB7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEB0eXBlIHtNYXA8c3RyaW5nLCBXaW5kb3c+fVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHRoaXMud2luZG93cyA9IG5ldyBNYXAoKVxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlXHJcbiAgICAgICAgdGhpcy5pbml0KClcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbml0KCl7XHJcbiAgICAgICAgbGV0IHBvcG91dE1vZHVsZSA9IGF3YWl0IHdpbmRvdy5MaWdodGNvcmQuQXBpLmVuc3VyZUV4cG9ydGVkKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRXaW5kb3cpXHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5EaXNjb3JkTW9kdWxlcy5kaXNwYXRjaGVyLnN1YnNjcmliZShcIlBPUE9VVF9XSU5ET1dfT1BFTlwiLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICogQHR5cGUge1dpbmRvd31cclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgd2luZG93ID0gcG9wb3V0TW9kdWxlLmRlZmF1bHQuZ2V0V2luZG93KGV2LmtleSlcclxuICAgICAgICAgICAgICAgIHRoaXMud2luZG93cy5zZXQoZXYua2V5LCB3aW5kb3cpXHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzTGlzdCA9IHdpbmRvdy5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdFxyXG4gICAgICAgICAgICAgICAgY2xhc3NMaXN0LmFkZChcIndpbmRvdy1wb3BvdXRcIilcclxuICAgICAgICAgICAgICAgIGNsYXNzTGlzdC5hZGQoXCJsaWdodGNvcmRcIilcclxuICAgICAgICAgICAgICAgIGNsYXNzTGlzdC5hZGQoXCJsaWdodGNvcmRcIilcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZShldi5rZXkpXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgICB3aW5kb3cuTGlnaHRjb3JkLkRpc2NvcmRNb2R1bGVzLmRpc3BhdGNoZXIuc3Vic2NyaWJlKFwiUE9QT1VUX1dJTkRPV19DTE9TRVwiLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2luZG93cy5kZWxldGUoZXYua2V5KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1lbmFibGVkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1kaXNhYmxlZFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgICAgICB9KVxyXG4gICAgICAgIGJkRXZlbnRzLm9uKFwidGhlbWUtcmVsb2FkZWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICAgICAgfSlcclxuICAgICAgICBiZEV2ZW50cy5vbihcInRoZW1lLXVubG9hZGVkXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGUoKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYmRFdmVudHMub24oXCJ0aGVtZS1sb2FkZWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGUoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSB0cnVlXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGUoKXtcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoa2V5KXtcclxuICAgICAgICBpZighdGhpcy53aW5kb3dzLnNpemUpcmV0dXJuXHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZCl7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVRoZW1lcyhrZXkpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5VGhlbWVzKGtleSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVGhlbWVzKGtleSl7XHJcbiAgICAgICAgaWYodGhpcy5lbmFibGVkKXJldHVyblxyXG4gICAgICAgIGlmKGtleSl7XHJcbiAgICAgICAgICAgIGxldCB3aW5kb3cgPSB0aGlzLndpbmRvd3MuZ2V0KGtleSlcclxuICAgICAgICAgICAgaWYoIXdpbmRvdylyZXR1cm5cclxuICAgICAgICAgICAgbGV0IGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50XHJcblxyXG4gICAgICAgICAgICBmb3IobGV0IHN0eWxlIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWxpZ2h0Y29yZC10aGVtZT10cnVlXVwiKSl7XHJcbiAgICAgICAgICAgICAgICBzdHlsZS5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGZvcihsZXQga2V5IG9mIHRoaXMud2luZG93cy5rZXlzKCkpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVUaGVtZXMoa2V5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5VGhlbWVzKGtleSl7XHJcbiAgICAgICAgaWYoIXRoaXMuZW5hYmxlZClyZXR1cm5cclxuICAgICAgICBpZihrZXkpe1xyXG4gICAgICAgICAgICBsZXQgd2luZG93ID0gdGhpcy53aW5kb3dzLmdldChrZXkpXHJcbiAgICAgICAgICAgIGlmKCF3aW5kb3cpcmV0dXJuXHJcbiAgICAgICAgICAgIGxldCBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxyXG5cclxuICAgICAgICAgICAgZm9yKGxldCBzdHlsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1saWdodGNvcmQtdGhlbWU9dHJ1ZV1cIikpe1xyXG4gICAgICAgICAgICAgICAgc3R5bGUuc2V0QXR0cmlidXRlKFwid2lsbC1yZW1vdmVcIiwgXCJ0cnVlXCIpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGJkdGhlbWVzKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCh0aGVtZU5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYoIXRoZW1lQ29va2llW3RoZW1lTmFtZV0pcmV0dXJuIC8vIHRoZW1lIGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW3RoZW1lTmFtZV1cclxuICAgICAgICAgICAgICAgIGlmKCF0aGVtZSlyZXR1cm4gLy86c2hydWc6XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0aW5nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInN0eWxlW2RhdGEtbGlnaHRjb3JkLXRoZW1lPXRydWVdI1wiK0RPTS5lc2NhcGVJRCh0aGVtZS5pZCkpXHJcbiAgICAgICAgICAgICAgICBpZihleGlzdGluZyl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcuaW5uZXJIVE1MID0gdW5lc2NhcGUodGhlbWUuY3NzKVxyXG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLnJlbW92ZUF0dHJpYnV0ZShcIndpbGwtcmVtb3ZlXCIpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmlkID0gRE9NLmVzY2FwZUlEKHRoZW1lLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmlubmVySFRNTCA9IHVuZXNjYXBlKHRoZW1lLmNzcylcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWxpZ2h0Y29yZC10aGVtZVwiLCBcInRydWVcIilcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGZvcihsZXQgc3R5bGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW3dpbGwtcmVtb3ZlPXRydWVdXCIpKXtcclxuICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZm9yKGxldCBrZXkgb2YgdGhpcy53aW5kb3dzLmtleXMoKSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5VGhlbWVzKGtleSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgd2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja01vZHVsZXNcIjtcclxuaW1wb3J0IFV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBWMkNfUHVibGljU2VydmVycyBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9wdWJsaWNTZXJ2ZXJzXCI7XHJcbmltcG9ydCBMYXllciBmcm9tIFwiLi4vdWkvcHVibGljc2VydmVycy9sYXllclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyX1B1YmxpY1NlcnZlcnMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuX2FwcGVuZEJ1dHRvbiA9IHRoaXMuX2FwcGVuZEJ1dHRvbi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5WMl9QdWJsaWNTZXJ2ZXJzID0gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb21wb25lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChMYXllciwge3Jvb3RJZDogXCJwdWJzbGF5ZXJyb290XCIsIGlkOiBcInB1YnNsYXllclwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFYyQ19QdWJsaWNTZXJ2ZXJzLCB7cm9vdElkOiBcInB1YnNsYXllcnJvb3RcIn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm9vdCgpIHtcclxuICAgICAgICBjb25zdCBfcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHVic2xheWVycm9vdFwiKTtcclxuICAgICAgICBpZiAoIV9yb290KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmplY3RSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWVMYXllcnNcclxuICAgICAgICBdID0gW1xyXG4gICAgICAgICAgICBVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllcnMgJiYgZS5sYXllcilbMF0ubGF5ZXJzKVxyXG4gICAgICAgIF1cclxuICAgICAgICBjb25zdCBsYXllcnMgPSBET00ucXVlcnkoXCIubGF5ZXJzLCAuXCIrY2xhc3NOYW1lTGF5ZXJzKTtcclxuICAgICAgICBpZiAoIWxheWVycykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGxheWVycy5hcHBlbmQoRE9NLmNyZWF0ZUVsZW1lbnQoXCI8ZGl2IGlkPSdwdWJzbGF5ZXJyb290Jz5cIikpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5yb290O1xyXG4gICAgICAgIGlmICghcm9vdCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBSUxFRCBUTyBMT0NBVEUgUk9PVDogLmxheWVyc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnJlbmRlcih0aGlzLmNvbXBvbmVudCwgcm9vdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJ1dHRvbigpIHtcclxuICAgICAgICBjb25zdCBidG4gPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1saVwiIGNsYXNzPVwiJHtCRFYyLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbX1cIj5gKTtcclxuICAgICAgICBpZiAoIXNldHRpbmdzQ29va2llW1wiYmRhLWdzLTFcIl0pIGJ0bi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSBET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLXB1Yi1idXR0b25cIiBjbGFzcz1cIiR7XCJ3cmFwcGVyLTI1ZVZJbiBcIiArIEJEVjIuZ3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2t9XCI+cHVibGljPC9kaXY+YCk7XHJcbiAgICAgICAgbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHt0aGlzLnJlbmRlcigpO30pO1xyXG4gICAgICAgIGJ0bi5hcHBlbmQobGFiZWwpO1xyXG4gICAgICAgIHJldHVybiBidG47XHJcbiAgICB9XHJcblxyXG4gICAgX2FwcGVuZEJ1dHRvbigpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lclxyXG4gICAgICAgIF0gPSBbXHJcbiAgICAgICAgICAgIFV0aWxzLnJlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmRvd25sb2FkUHJvZ3Jlc3MgJiYgZS50dXRvcmlhbENvbnRhaW5lcilbMF0udHV0b3JpYWxDb250YWluZXIpXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGlmIChET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gRE9NLnF1ZXJ5KGBkaXYuJHtjbGFzc05hbWV0dXRvcmlhbENvbnRhaW5lcn0gPiBkaXZgKTtcclxuICAgICAgICBET00uYWZ0ZXIoZ3VpbGRzLCB0aGlzLmJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQnV0dG9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3QgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk5hdmlnYWJsZUd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBHdWlsZExpc3RPbGQgPSB3ZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBpZiAoIUd1aWxkTGlzdCAmJiAhR3VpbGRMaXN0T2xkKSBVdGlscy53YXJuKFwiUHVibGljU2VydmVyXCIsIFwiQ2FuJ3QgZmluZCBHdWlsZExpc3QgY29tcG9uZW50XCIpO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQYXRjaCA9IFV0aWxzLm1vbmtleVBhdGNoKEd1aWxkTGlzdCA/IEd1aWxkTGlzdCA6IEd1aWxkTGlzdE9sZC5wcm90b3R5cGUsIEd1aWxkTGlzdCA/IFwiZGVmYXVsdFwiIDogXCJyZW5kZXJcIiwge2FmdGVyOiB0aGlzLl9hcHBlbmRCdXR0b259KTtcclxuICAgICAgICB0aGlzLl9hcHBlbmRCdXR0b24oKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVCdXR0b24oKSB7XHJcbiAgICAgICAgdGhpcy5ndWlsZFBhdGNoKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZ3VpbGRQYXRjaDtcclxuICAgICAgICBjb25zdCBidXR0b24gPSBET00ucXVlcnkoXCIjYmQtcHViLWxpXCIpO1xyXG4gICAgICAgIGlmIChidXR0b24pIGJ1dHRvbi5yZW1vdmUoKTtcclxuICAgIH1cclxufTsiLCJpbXBvcnQge3NldHRpbmdzLCBzZXR0aW5nc0Nvb2tpZSwgc2V0dGluZ3NSUEN9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIGZyb20gXCIuL3NldHRpbmdzUGFuZWxTaWRlYmFyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudE1hbmFnZXJcIjtcclxuaW1wb3J0IGNvbG9yZWRUZXh0IGZyb20gXCIuL2NvbG9yZWRUZXh0XCI7XHJcbmltcG9ydCB0ZkhvdXIgZnJvbSBcIi4vMjRob3VyXCI7XHJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tdG9vbHNcIjtcclxuXHJcbmltcG9ydCBwdWJsaWNTZXJ2ZXJzTW9kdWxlIGZyb20gXCIuL3B1YmxpY1NlcnZlcnNcIjtcclxuaW1wb3J0IHZvaWNlTW9kZSBmcm9tIFwiLi92b2ljZU1vZGVcIjtcclxuaW1wb3J0IENsYXNzTm9ybWFsaXplciBmcm9tIFwiLi9jbGFzc05vcm1hbGl6ZXJcIjtcclxuaW1wb3J0IGRNb2RlIGZyb20gXCIuL2Rldk1vZGVcIjtcclxuXHJcbmltcG9ydCBTZWN0aW9uZWRTZXR0aW5nc1BhbmVsIGZyb20gXCIuLi91aS9zZWN0aW9uZWRTZXR0aW5nc1BhbmVsXCI7XHJcbmltcG9ydCBDc3NFZGl0b3IgZnJvbSBcIi4uL3VpL2Nzc0VkaXRvclwiO1xyXG5pbXBvcnQgQ2FyZExpc3QgZnJvbSBcIi4uL3VpL2FkZG9ubGlzdFwiO1xyXG5pbXBvcnQgVjJDX1ByZXNlbmNlU2V0dGluZ3MgZnJvbSBcIi4uL3VpL3ByZXNlbmNlU2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbVJpY2hQcmVzZW5jZSBmcm9tIFwiLi9DdXN0b21SaWNoUHJlc2VuY2VcIjtcclxuaW1wb3J0IFYyQ19BY2NvdW50SW5mb3MgZnJvbSBcIi4uL3VpL0FjY291bnRJbmZvc1wiO1xyXG5pbXBvcnQgeyByZW1vdGUgfSBmcm9tIFwiZWxlY3Ryb25cIjtcclxuaW1wb3J0IEFudGlBZERNIGZyb20gXCIuL0FudGlBZERNXCI7XHJcbmltcG9ydCBibHVyUHJpdmF0ZSBmcm9tIFwiLi9ibHVyUHJpdmF0ZVwiO1xyXG5pbXBvcnQgZGlzYWJsZVR5cGluZyBmcm9tIFwiLi9kaXNhYmxlVHlwaW5nXCI7XHJcbmltcG9ydCBBcGlQcmV2aWV3IGZyb20gXCIuLi91aS9BcGlQcmV2aWV3XCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4uL3VpL3N3aXRjaFwiO1xyXG5pbXBvcnQgTWFyZ2luVG9wIGZyb20gXCIuLi91aS9tYXJnaW50b3BcIjtcclxuaW1wb3J0IHdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCB0b29sdGlwV3JhcCBmcm9tIFwiLi4vdWkvdG9vbHRpcFdyYXBcIjtcclxuaW1wb3J0IEhpc3RvcnkgZnJvbSBcIi4uL3VpL2ljb25zL2hpc3RvcnlcIjtcclxuaW1wb3J0IGNvcmUgZnJvbSBcIi4vY29yZVwiO1xyXG5pbXBvcnQgcG9wb3V0V2luZG93IGZyb20gXCIuL3BvcG91dFdpbmRvd1wiO1xyXG5cclxuY2xhc3MgQkRTaWRlYmFySGVhZGVyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2lkZWJhckNvbXBvbmVudHMgPSB3ZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5TZXBhcmF0b3IgJiYgZS5IZWFkZXIgJiYgZS5JdGVtKVxyXG5cclxuICAgICAgICBjb25zdCBjaGFuZ2Vsb2dCdXR0b24gPSBSZWFjdC5jcmVhdGVFbGVtZW50KHRvb2x0aXBXcmFwLCB7Y29sb3I6IFwiYmxhY2tcIiwgc2lkZTogXCJ0b3BcIiwgdGV4dDogXCJDaGFuZ2Vsb2dcIn0sIFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7c3R5bGU6IHtmbG9hdDogXCJyaWdodFwiLCBjdXJzb3I6IFwicG9pbnRlclwifSwgY2xhc3NOYW1lOiBcImJkLWNoYW5nZWxvZy1idXR0b25cIiwgb25DbGljazogKCkgPT4ge1V0aWxzLnNob3dDaGFuZ2Vsb2dNb2RhbChiYmRDaGFuZ2Vsb2cpO319LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChIaXN0b3J5LCB7Y2xhc3NOYW1lOiBcImJkLWljb25cIiwgc2l6ZTogXCIxNnB4XCJ9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgcmVuZGVyZWQgPSBuZXcgc2lkZWJhckNvbXBvbmVudHMuSGVhZGVyKHtcclxuICAgICAgICAgICAgY2hpbGRyZW46IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIFwiQmFuZGFnZWQgQkRcIiwgY2hhbmdlbG9nQnV0dG9uKSxcclxuICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiByZW5kZXJlZFxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgaXNDbGVhcmluZ0NhY2hlID0gZmFsc2VcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MgPSB0aGlzLnVwZGF0ZVNldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaWRlYmFyID0gbmV3IFYyX1NldHRpbmdzUGFuZWxfU2lkZWJhcigpO1xyXG5cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ29tcG9uZW50cygpXHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDb21wb25lbnRzKCl7XHJcbiAgICAgICAgLyoqIExpZ2h0Y29yZCAqL1xyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImxpZ2h0Y29yZFwiLCBtYWtlQ29tcG9uZW50KHRoaXMubGlnaHRjb3JkQ29tcG9uZW50LmJpbmQodGhpcykpKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcInN0YXR1c1wiLCBtYWtlQ29tcG9uZW50KHRoaXMuUHJlc2VuY2VDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiYWNjb3VudGluZm9cIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFjY291bnRJbmZvc0NvbXBvbmVudC5iaW5kKHRoaXMpKSlcclxuICAgICAgICB0aGlzLnNpZGViYXIucmVnaXN0ZXIoXCJsY2FwaXByZXZpZXdcIiwgbWFrZUNvbXBvbmVudCh0aGlzLkFwaVByZXZpZXdDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcblxyXG4gICAgICAgIC8qIEJhbmRhZ2VkIEJEICovXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiQkRDaGFuZ2Vsb2dUaXRsZVwiLCBtYWtlQ29tcG9uZW50KCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCRFNpZGViYXJIZWFkZXIoKS5yZW5kZXIoKVxyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIHRoaXMuc2lkZWJhci5yZWdpc3RlcihcImNvcmVcIiwgbWFrZUNvbXBvbmVudCh0aGlzLmNvcmVDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwiY3VzdG9tY3NzXCIsIG1ha2VDb21wb25lbnQodGhpcy5jdXN0b21Dc3NDb21wb25lbnQuYmluZCh0aGlzKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwicGx1Z2luc1wiLCBtYWtlQ29tcG9uZW50KHRoaXMucmVuZGVyQWRkb25QYW5lKFwicGx1Z2luc1wiKSkpXHJcbiAgICAgICAgdGhpcy5zaWRlYmFyLnJlZ2lzdGVyKFwidGhlbWVzXCIsIG1ha2VDb21wb25lbnQodGhpcy5yZW5kZXJBZGRvblBhbmUoXCJ0aGVtZXNcIikpKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgY29yZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5nZXRTZXR0aW5ncyhcImNvcmVcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaWdodGNvcmRTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ2V0U2V0dGluZ3MoXCJsaWdodGNvcmRcIik7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5uZXcgU2V0KHNldHRpbmdzLm1hcChzID0+IHMuY2F0ZWdvcnkpKV07XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBjYXRlZ29yaWVzLm1hcChjID0+IHtyZXR1cm4ge3RpdGxlOiBjLCBzZXR0aW5nczogc2V0dGluZ3MuZmlsdGVyKHMgPT4gcy5jYXRlZ29yeSA9PSBjKX07fSk7XHJcbiAgICAgICAgcmV0dXJuIHNlY3Rpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBQcmVzZW5jZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzKFwic3RhdHVzXCIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3MoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ZWdvcnkgJiYgc2V0dGluZy5pbXBsZW1lbnRlZCAmJiAhc2V0dGluZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNldHRpbmcudGV4dCA9IGtleTtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHNldHRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgfSwgW10pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCwgc2lkZWJhcikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoaWQsIGNoZWNrZWQsIHNpZGViYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNldHRpbmdzKGlkLCBlbmFibGVkLCBzaWRlYmFyKSB7XHJcbiAgICAgICAgaWYoIVtcImxpZ2h0Y29yZC04XCIsIFwibm9fd2luZG93X2JvdW5kXCIsIFwiZW5hYmxlX2dsYXNzdHJvblwiLCBcImxpZ2h0Y29yZC0xMFwiXS5pbmNsdWRlcyhpZCkpc2V0dGluZ3NDb29raWVbaWRdID0gZW5hYmxlZDtcclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTJcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLWdzLTNcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgICAgICBlbHNlIERPTS5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCBcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHB1YmxpY1NlcnZlcnNNb2R1bGUuYWRkQnV0dG9uKCk7XHJcbiAgICAgICAgICAgIGVsc2UgcHVibGljU2VydmVyc01vZHVsZS5yZW1vdmVCdXR0b24oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1ncy00XCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHZvaWNlTW9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgICBlbHNlIHZvaWNlTW9kZS5zdG9wKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICAgICAgZWxzZSBET00ucmVtb3ZlQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZGEtZGFya1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbmFibGVkICYmIGlkID09IFwiYmRhLWdzLTZcIikgdGZIb3VyLmluamVjdDI0SG91cigpO1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtN1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBjb2xvcmVkVGV4dC5pbmplY3RDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgICAgICBlbHNlIGNvbG9yZWRUZXh0LnJlbW92ZUNvbG9yZWRUZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXBzLTRcIikge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgQ2xhc3NOb3JtYWxpemVyLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGVsc2UgQ2xhc3NOb3JtYWxpemVyLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstcHMtNVwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJwbHVnaW5cIik7XHJcbiAgICAgICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIENvbnRlbnRNYW5hZ2VyLnVud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICAgICAgQ29udGVudE1hbmFnZXIudW53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay13cC0xXCIpIHtcclxuICAgICAgICAgICAgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcInRyYW5zcGFyZW50XCIsIGVuYWJsZWQpO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgVXRpbHMuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBudWxsKTtcclxuICAgICAgICAgICAgZWxzZSBVdGlscy5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIFwiIzJmMzEzNlwiKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtZ3MtOFwiKSB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICAgICAgZWxzZSBkTW9kZS5zdG9wRGVidWdMaXN0ZW5lcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09IFwiZm9yay1kbS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcbiAgICAgICAgICAgIGVsc2UgZE1vZGUuc3RvcENvcHlTZWxlY3RvcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuZGV2TW9kZSA9IHRydWVcclxuICAgICAgICAgICAgZWxzZSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSBmYWxzZVxyXG4gICAgICAgICAgICBzaWRlYmFyLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0yXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZVxyXG4gICAgICAgICAgICBlbHNlIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIEN1c3RvbVJpY2hQcmVzZW5jZS5lbmFibGUoKVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3NTdG9yZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgdHlwZW9mIGUuZGVmYXVsdCA9PT0gXCJvYmplY3RcIiAmJiBcInNob3dDdXJyZW50R2FtZVwiIGluIGUuZGVmYXVsdClbMF1cclxuICAgICAgICAgICAgICAgIGlmKHNldHRpbmdzU3RvcmUgJiYgIXNldHRpbmdzU3RvcmUuZGVmYXVsdC5zaG93Q3VycmVudEdhbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKVswXS5kZWZhdWx0LnVwZGF0ZVJlbW90ZVNldHRpbmdzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0N1cnJlbnRHYW1lOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIEN1c3RvbVJpY2hQcmVzZW5jZS5kaXNhYmxlKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0zXCIpIHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHJlbW90ZS5nZXRDdXJyZW50V2luZG93KCkuc2V0QWx3YXlzT25Ub3AodHJ1ZSlcclxuICAgICAgICAgICAgZWxzZSByZW1vdGUuZ2V0Q3VycmVudFdpbmRvdygpLnNldEFsd2F5c09uVG9wKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibGlnaHRjb3JkLTRcIikge1xyXG4gICAgICAgICAgICBpZihlbmFibGVkKXtcclxuICAgICAgICAgICAgICAgIEFudGlBZERNLmVuYWJsZSgpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgQW50aUFkRE0uZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC02XCIpIHtcclxuICAgICAgICAgICAgaWYoZW5hYmxlZCl7XHJcbiAgICAgICAgICAgICAgICBibHVyUHJpdmF0ZS5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGJsdXJQcml2YXRlLmRpc2FibGUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCA9PT0gXCJsaWdodGNvcmQtN1wiKSB7XHJcbiAgICAgICAgICAgIGlmKGVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVR5cGluZy5lbmFibGUoKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUeXBpbmcuZGlzYWJsZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC04XCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiaXNUYWJzXCIsIGVuYWJsZWQpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNhdmUoKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLnJlbGF1bmNoKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5leGl0KClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC05XCIpIHtcclxuICAgICAgICAgICAgcG9wb3V0V2luZG93W2VuYWJsZWQgPyBcImVuYWJsZVwiIDogXCJkaXNhYmxlXCJdKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkID09PSBcImxpZ2h0Y29yZC0xMFwiKXtcclxuICAgICAgICAgICAgY29yZS5tZXRob2RzLk5vdGlmaWNhdGlvbnNVc2VTaGltKGVuYWJsZWQpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwibm9fd2luZG93X2JvdW5kXCIpe1xyXG4gICAgICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2V0KFwiTk9fV0lORE9XU19CT1VORFwiLCBlbmFibGVkKVxyXG5cclxuICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiSVNfTUFYSU1JWkVEXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLmRlbGV0ZShcIklTX01JTklNSVpFRFwiKSBcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3MuZGVsZXRlKFwiV0lORE9XX0JPVU5EU1wiKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgYXBwU2V0dGluZ3Muc2F2ZSgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAucmVsYXVuY2goKVxyXG4gICAgICAgICAgICByZW1vdGUuYXBwLmV4aXQoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKXtcclxuICAgICAgICAgICAgbGV0IGFwcFNldHRpbmdzID0gcmVtb3RlLmdldEdsb2JhbChcImFwcFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgIGFwcFNldHRpbmdzLnNldChcIkdMQVNTVFJPTlwiLCBlbmFibGVkKVxyXG4gICAgICAgICAgICBhcHBTZXR0aW5ncy5zYXZlKClcclxuICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCgpXHJcbiAgICAgICAgICAgIHJlbW90ZS5hcHAuZXhpdCgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemVTZXR0aW5ncygpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtMlwiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbFwiKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtM1wiXSkgRE9NLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy0xXCJdKSBwdWJsaWNTZXJ2ZXJzTW9kdWxlLmFkZEJ1dHRvbigpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy00XCJdKSB2b2ljZU1vZGUuc3RhcnQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtNVwiXSkgRE9NLmFkZENsYXNzKERPTS5xdWVyeShcIiNhcHAtbW91bnRcIiksIFwiYmRhLWRhcmtcIik7XHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wiYmRhLWdzLTZcIl0pIHRmSG91ci5pbmplY3QyNEhvdXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJiZGEtZ3MtN1wiXSkgY29sb3JlZFRleHQuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTRcIl0pIENsYXNzTm9ybWFsaXplci5zdGFydCgpO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC0xXCJdKSB3aW5kb3cuTGlnaHRjb3JkLlNldHRpbmdzLmRldk1vZGUgPSB0cnVlXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTJcIl0pIHdpbmRvdy5MaWdodGNvcmQuU2V0dGluZ3MuY2FsbFJpbmdpbmdCZWF0ID0gdHJ1ZVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC1wcmVzZW5jZS0xXCJdKSBDdXN0b21SaWNoUHJlc2VuY2UuZW5hYmxlKClcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJsaWdodGNvcmQtM1wiXSkgcmVtb3RlLmdldEN1cnJlbnRXaW5kb3coKS5zZXRBbHdheXNPblRvcCh0cnVlKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC00XCJdKSBBbnRpQWRETS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC02XCJdKSBibHVyUHJpdmF0ZS5lbmFibGUoKVxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImxpZ2h0Y29yZC03XCJdKSBkaXNhYmxlVHlwaW5nLmVuYWJsZSgpXHJcbiAgICAgICAgaWYgKHNldHRpbmdzQ29va2llW1wibGlnaHRjb3JkLTlcIl0pIHBvcG91dFdpbmRvdy5lbmFibGUoKVxyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0pIHtcclxuICAgICAgICAgICAgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwicGx1Z2luXCIpO1xyXG4gICAgICAgICAgICBDb250ZW50TWFuYWdlci53YXRjaENvbnRlbnQoXCJ0aGVtZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImJkYS1ncy04XCJdKSBkTW9kZS5zdGFydERlYnVnTGlzdGVuZXIoKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLWRtLTFcIl0pIGRNb2RlLnN0YXJ0Q29weVNlbGVjdG9yKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiLCBzZXR0aW5nc0Nvb2tpZSk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFNldHRpbmdzKCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3NDb29raWUsIERhdGFTdG9yZS5nZXRTZXR0aW5nR3JvdXAoXCJzZXR0aW5nc1wiKSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5nc1JQQywgRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyU2lkZWJhcihzaWRlYmFyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lkZWJhci5yZW5kZXIoc2lkZWJhcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29yZUNvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSlcclxuICAgIH1cclxuXHJcbiAgICBsaWdodGNvcmRDb21wb25lbnQoc2lkZWJhciwgZm9yY2VVcGRhdGUpIHtcclxuICAgICAgICBsZXQgYXBwU2V0dGluZ3MgPSByZW1vdGUuZ2V0R2xvYmFsKFwiYXBwU2V0dGluZ3NcIilcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB0aGlzLmxpZ2h0Y29yZFNldHRpbmdzLm1hcCgoc2VjdGlvbiwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAoaSA9PT0gMCA/IG51bGwgOiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wKSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LCBzZWN0aW9uLnRpdGxlKSxcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLm1hcChzZXR0aW5nID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzQ2hlY2tlZCA9IHNldHRpbmdzQ29va2llW3NldHRpbmcuaWRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwibGlnaHRjb3JkLThcIilpc0NoZWNrZWQgPSBhcHBTZXR0aW5ncy5nZXQoXCJpc1RhYnNcIiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcIm5vX3dpbmRvd19ib3VuZFwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIk5PX1dJTkRPV1NfQk9VTkRcIiwgZmFsc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNldHRpbmcuaWQgPT09IFwiZW5hYmxlX2dsYXNzdHJvblwiKWlzQ2hlY2tlZCA9IGFwcFNldHRpbmdzLmdldChcIkdMQVNTVFJPTlwiLCB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09PSBcImxpZ2h0Y29yZC0xMFwiKWlzQ2hlY2tlZCA9ICFhcHBTZXR0aW5ncy5nZXQoXCJERUZBVUxUX05PVElGSUNBVElPTlNcIiwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2lkOiBzZXR0aW5nLmlkLCBrZXk6IHNldHRpbmcuaWQsIGRhdGE6IHNldHRpbmcsIGNoZWNrZWQ6IGlzQ2hlY2tlZCwgb25DaGFuZ2U6IChpZCwgY2hlY2tlZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShpZCwgY2hlY2tlZCwgc2lkZWJhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzZXR0aW5nLmlkID09IFwibGlnaHRjb3JkLThcIiAmJiBpc0NoZWNrZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBcImdyZWVuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2s6IFwib3V0bGluZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogXCJzbWFsbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcImJyYW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuaXBjLnNlbmQoXCJORVdfVEFCXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBcIk9wZW4gYSBuZXcgVGFiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSksIFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljaygpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU2hvdWxkIHJlbGF1bmNoXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5yZWxhdW5jaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHJlbW90ZS5wcm9jZXNzLmFyZ3Yuc2xpY2UoMSkuY29uY2F0KFtcIi0tZGlzYWJsZS1iZXR0ZXJkaXNjb3JkXCJdKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLmFwcC5xdWl0KClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlXHJcbiAgICAgICAgICAgIH0sIFwiUmVsYXVuY2ggd2l0aG91dCBCZXR0ZXJEaXNjb3JkXCIpLFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJ5ZWxsb3dcIixcclxuICAgICAgICAgICAgICAgIGxvb2s6IFwiZ2hvc3RcIixcclxuICAgICAgICAgICAgICAgIHNpemU6IFwibWVkaXVtXCIsXHJcbiAgICAgICAgICAgICAgICBob3ZlckNvbG9yOiBcInJlZFwiLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ2xlYXJpbmdDYWNoZSlyZXR1cm5cclxuICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQ2xlYXJpbmcgY2FjaGUuLi5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5zZXNzaW9uLmNsZWFyQ2FjaGUoKVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQ2FjaGUgaXMgY2xlYXJlZCAhXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2xlYXJpbmdDYWNoZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiQW4gZXJyb3Igb2NjdXJlZC4gQ2hlY2sgY29uc29sZSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NsZWFyaW5nQ2FjaGUgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVVwZGF0ZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGlzQ2xlYXJpbmdDYWNoZVxyXG4gICAgICAgICAgICB9LCBcIkNsZWFyIGNhY2hlXCIpXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIFByZXNlbmNlQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX1ByZXNlbmNlU2V0dGluZ3MsIHtcclxuICAgICAgICAgICAga2V5OiBcImxwcGFubmVsXCIsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBcclxuICAgICAgICAgICAgc2V0dGluZ3M6IHRoaXMuUHJlc2VuY2VTZXR0aW5nc1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQWNjb3VudEluZm9zQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVjJDX0FjY291bnRJbmZvcywge1xyXG4gICAgICAgICAgICBrZXk6IFwibGFwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgQXBpUHJldmlld0NvbXBvbmVudCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KEFwaVByZXZpZXcsIHtcclxuICAgICAgICAgICAga2V5OiBcImxhcGlwYW5uZWxcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tQ3NzQ29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJBZGRvblBhbmUodHlwZSkge1xyXG4gICAgICAgIC8vIEkga25vdyB0aGlzIHNob3VsZG4ndCBiZSBoZXJlLCBidXQgd2hlbiBpdCBpc24ndCxcclxuICAgICAgICAvLyBSZWFjdCByZWZ1c2VzIHRvIGNoYW5nZSB0aGUgYnV0dG9uIHdoZW4gZ29pbmdcclxuICAgICAgICAvLyBiZXR3ZWVuIHBsdWdpbnMgYW5kIHRoZW1lcyBwYWdlLi4uIHNvbWV0aGluZ1xyXG4gICAgICAgIC8vIHRvIGRlYnVnIGxhdGVyLlxyXG4gICAgICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgQkRWMi5yZWFjdC5Db21wb25lbnQge1xyXG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgICAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVmaXggPSB0aGlzLnByb3BzLnR5cGUucmVwbGFjZShcInNcIiwgXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMudHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgcmVuZGVyKCkge3JldHVybiB0aGlzLnByb3BzLmNoaWxkcmVuO31cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDb250ZW50TGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb250ZW50TGlzdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oKSB7Y29uc29sZS53YXJuKFwiQWRkb24gcG9saWN5IGZvciBwbHVnaW5zICM1IGh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvd2lraS9BZGRvbi1Qb2xpY2llcyNwbHVnaW5zXCIpO30sXHJcbiAgICAgICAgICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwge3R5cGV9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FyZExpc3QsIHt0eXBlfSkpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIE5vIG5lZWQgdG8gZXhwb3J0IHNldHRpbmdzUGFuZWwgb24gd2luZG93XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gbWFrZUNvbXBvbmVudChjaGlsZHJlbil7XHJcbiAgICBjbGFzcyBTZXR0aW5nQ29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgICAgICByZW5kZXIoKXtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKHNpZGViYXIsICgpID0+IHRoaXMuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgc2lkZWJhclxyXG4gICAgcmV0dXJuIChzKSA9PiB7XHJcbiAgICAgICAgc2lkZWJhciA9IHNcclxuICAgICAgICByZXR1cm4gU2V0dGluZ0NvbXBvbmVudFxyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbF9TaWRlYmFyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnBhbmVscyA9IHt9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIocGFuZWwsIGNvbXBvbmVudCl7XHJcbiAgICAgICAgdGhpcy5wYW5lbHNbcGFuZWxdID0gY29tcG9uZW50XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tcG9uZW50KHBhbmVsLCBzaWRlYmFyKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYW5lbHNbcGFuZWxdKHNpZGViYXIpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICB0ZXh0OiBcIkJldHRlckRpc2NvcmQgU2V0dGluZ3NcIiwgXHJcbiAgICAgICAgICAgIGlkOiBcImNvcmVcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJQbHVnaW5zXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJwbHVnaW5zXCJcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlbWVzXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJ0aGVtZXNcIlxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgdGV4dDogXCJDdXN0b20gQ1NTXCIsIFxyXG4gICAgICAgICAgICBpZDogXCJjdXN0b21jc3NcIlxyXG4gICAgICAgIH1dO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ2l0ZW1zKCl7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkxpZ2h0Y29yZCBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwibGlnaHRjb3JkXCJcclxuICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgdGV4dDogXCJSaWNoUHJlc2VuY2VcIiwgXHJcbiAgICAgICAgICAgICAgICBpZDogXCJzdGF0dXNcIlxyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIkFjY291bnQgSW5mb1wiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYWNjb3VudGluZm9cIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICAgIHJldHVybiBpdGVtc1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBMQ0Rldkl0ZW1zKCl7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW11cclxuICAgICAgICBpZighd2luZG93LkxpZ2h0Y29yZC5TZXR0aW5ncy5kZXZNb2RlKXJldHVybiBpdGVtc1xyXG4gICAgICAgIGl0ZW1zLnB1c2goLi4uW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkhFQURFUlwiLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiTGlnaHRjb3JkIEFwaVwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IFwiQ29tcG9uZW50cyBQcmV2aWV3XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJsY2FwaXByZXZpZXdcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSlcclxuICAgICAgICByZXR1cm4gaXRlbXNcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoc2lkZWJhcikge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiSEVBREVSXCIsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJMaWdodGNvcmRcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAuLi50aGlzLkxDaXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuTENEZXZJdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihlLnNlY3Rpb24pcmV0dXJuIGVcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMuZ2V0Q29tcG9uZW50KGUuaWQsIHNpZGViYXIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkRJVklERVJcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uOiBcIkNVU1RPTVwiLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoXCJCRENoYW5nZWxvZ1RpdGxlXCIpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnRoaXMuaXRlbXMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5nZXRDb21wb25lbnQoZS5pZCwgc2lkZWJhcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb246IFwiRElWSURFUlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBObyBuZWVkIHRvIGV4cG9ydCBzZXR0aW5nc1BhbmVsU2lkZWJhciBvbiB3aW5kb3dcclxuICovIiwiaW1wb3J0IHtiZHRoZW1lRXJyb3JzLCB0aGVtZUNvb2tpZSwgc2V0dGluZ3NDb29raWUsIGJkdGhlbWVzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRNYW5hZ2VyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YVN0b3JlXCI7XHJcbmltcG9ydCBCREV2ZW50cyBmcm9tIFwiLi9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5pbXBvcnQgYmRFdmVudHMgZnJvbSBcIi4vYmRFdmVudHNcIjtcclxuXHJcbmNsYXNzIFRoZW1lTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgd2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlRoZW1lTW9kdWxlID0gdGhpc1xyXG4gICAgfVxyXG4gICAgZ2V0IGZvbGRlcigpIHtyZXR1cm4gQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyO31cclxufVxyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZXMgPSBhc3luYyBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmxvYWRUaGVtZURhdGEoKTtcclxuICAgIGJkdGhlbWVFcnJvcnMuc3BsaWNlKDAsIDAsIC4uLihhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkVGhlbWVzKCkpKTtcclxuICAgIGNvbnN0IHRoZW1lcyA9IE9iamVjdC5rZXlzKGJkdGhlbWVzKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoZW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZXNbdGhlbWVzW2ldXTtcclxuICAgICAgICBpZiAoIXRoZW1lQ29va2llW3RoZW1lLm5hbWVdKSB0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGVtZUNvb2tpZVt0aGVtZS5uYW1lXSkgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG5cclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpXHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHRoZW1lIGluIHRoZW1lQ29va2llKSB7XHJcbiAgICAgICAgaWYgKCFiZHRoZW1lc1t0aGVtZV0pIGRlbGV0ZSB0aGVtZUNvb2tpZVt0aGVtZV07XHJcbiAgICB9XHJcbiAgICB0aGlzLnNhdmVUaGVtZURhdGEoKTtcclxuICAgIC8vIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSkgQ29udGVudE1hbmFnZXIud2F0Y2hDb250ZW50KFwidGhlbWVcIik7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlVGhlbWUgPSBmdW5jdGlvbihuYW1lLCByZWxvYWQgPSBmYWxzZSkge1xyXG4gICAgdGhlbWVDb29raWVbbmFtZV0gPSB0cnVlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLmFkZFN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCksIHVuZXNjYXBlKHRoZW1lLmNzcykpO1xyXG4gICAgYmRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1lbmFibGVkXCIpXHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0gJiYgIXJlbG9hZCkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IGhhcyBiZWVuIGFwcGxpZWQuYCk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5lbmFibGVUaGVtZShuYW1lLCByZWxvYWQpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRpc2FibGVUaGVtZSA9IGZ1bmN0aW9uKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICB0aGVtZUNvb2tpZVtuYW1lXSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zYXZlVGhlbWVEYXRhKCk7XHJcbiAgICBjb25zdCB0aGVtZSA9IGJkdGhlbWVzW25hbWVdO1xyXG4gICAgRE9NLnJlbW92ZVN0eWxlKERPTS5lc2NhcGVJRCh0aGVtZS5pZCkpO1xyXG4gICAgYmRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1kaXNhYmxlZFwiKVxyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdICYmICFyZWxvYWQpIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSBoYXMgYmVlbiBkaXNhYmxlZC5gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5kaXNhYmxlID0gZnVuY3Rpb24gKG5hbWUsIHJlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlVGhlbWUobmFtZSwgcmVsb2FkKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS50b2dnbGVUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lKSB7XHJcbiAgICBpZiAodGhlbWVDb29raWVbdGhlbWVdKSB0aGlzLmRpc2FibGVUaGVtZSh0aGVtZSk7XHJcbiAgICBlbHNlIHRoaXMuZW5hYmxlVGhlbWUodGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy50b2dnbGVUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5sb2FkVGhlbWUgPSBhc3luYyBmdW5jdGlvbihmaWxlbmFtZSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBhd2FpdCBDb250ZW50TWFuYWdlci5sb2FkQ29udGVudChmaWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke2ZpbGVuYW1lfSBjb3VsZCBub3QgYmUgbG9hZGVkLiBJdCBtYXkgbm90IGhhdmUgYmVlbiBsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHtmaWxlbmFtZX0gY291bGQgbm90IGJlIGxvYWRlZC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lKTtcclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lLm5hbWV9IHYke3RoZW1lLnZlcnNpb259IHdhcyBsb2FkZWQuYCk7XHJcbiAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZS5uYW1lfSB2JHt0aGVtZS52ZXJzaW9ufSB3YXMgbG9hZGVkLmAsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgQkRFdmVudHMuZGlzcGF0Y2goXCJ0aGVtZS1sb2FkZWRcIiwgdGhlbWUubmFtZSk7XHJcbn07XHJcblxyXG5UaGVtZU1vZHVsZS5wcm90b3R5cGUudW5sb2FkVGhlbWUgPSBmdW5jdGlvbihmaWxlbmFtZU9yTmFtZSkge1xyXG4gICAgY29uc3QgYmR0aGVtZSA9IE9iamVjdC52YWx1ZXMoYmR0aGVtZXMpLmZpbmQocCA9PiBwLmZpbGVuYW1lID09IGZpbGVuYW1lT3JOYW1lKSB8fCBiZHRoZW1lc1tmaWxlbmFtZU9yTmFtZV07XHJcbiAgICBpZiAoIWJkdGhlbWUpIHJldHVybjtcclxuICAgIGNvbnN0IHRoZW1lID0gYmR0aGVtZS5uYW1lO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpO1xyXG4gICAgY29uc3QgZXJyb3IgPSBDb250ZW50TWFuYWdlci51bmxvYWRDb250ZW50KGJkdGhlbWVzW3RoZW1lXS5maWxlbmFtZSwgXCJ0aGVtZVwiKTtcclxuICAgIGRlbGV0ZSBiZHRoZW1lc1t0aGVtZV07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTFcIl0pIFV0aWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgICAgICBpZiAoc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTJcIl0pIFV0aWxzLnNob3dUb2FzdChgJHt0aGVtZX0gY291bGQgbm90IGJlIHVubG9hZGVkLiBJdCBtYXkgaGF2ZSBub3QgYmVlbiBsb2FkZWQgeWV0LmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgICAgICByZXR1cm4gVXRpbHMuZXJyKFwiQ29udGVudE1hbmFnZXJcIiwgYCR7dGhlbWV9IGNvdWxkIG5vdCBiZSB1bmxvYWRlZC4gSXQgbWF5IGhhdmUgbm90IGJlZW4gbG9hZGVkIHlldC5gLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgICBVdGlscy5sb2coXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHdhcyB1bmxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIEJERXZlbnRzLmRpc3BhdGNoKFwidGhlbWUtdW5sb2FkZWRcIiwgdGhlbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGZpbGVuYW1lT3JOYW1lKSB7XHJcbiAgICBjb25zdCBiZHRoZW1lID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmR0aGVtZSkgcmV0dXJuO1xyXG4gICAgdGhpcy51bmxvYWRUaGVtZShiZHRoZW1lLmZpbGVuYW1lKTtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkdGhlbWUuZmlsZW5hbWUpO1xyXG4gICAgcmVxdWlyZShcImZzXCIpLnVubGlua1N5bmMoZnVsbFBhdGgpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLnJlbG9hZFRoZW1lID0gYXN5bmMgZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkdGhlbWUgPSBPYmplY3QudmFsdWVzKGJkdGhlbWVzKS5maW5kKHAgPT4gcC5maWxlbmFtZSA9PSBmaWxlbmFtZU9yTmFtZSkgfHwgYmR0aGVtZXNbZmlsZW5hbWVPck5hbWVdO1xyXG4gICAgaWYgKCFiZHRoZW1lKSByZXR1cm4gdGhpcy5sb2FkVGhlbWUoZmlsZW5hbWVPck5hbWUpO1xyXG4gICAgY29uc3QgdGhlbWUgPSBiZHRoZW1lLm5hbWU7XHJcbiAgICBjb25zdCBlcnJvciA9IGF3YWl0IENvbnRlbnRNYW5hZ2VyLnJlbG9hZENvbnRlbnQoYmR0aGVtZXNbdGhlbWVdLmZpbGVuYW1lLCBcInRoZW1lXCIpO1xyXG4gICAgaWYgKHRoZW1lQ29va2llW3RoZW1lXSkgdGhpcy5kaXNhYmxlVGhlbWUodGhlbWUsIHRydWUpLCB0aGlzLmVuYWJsZVRoZW1lKHRoZW1lLCB0cnVlKTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMVwiXSkgVXRpbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgICAgIGlmIChzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtMlwiXSkgVXRpbHMuc2hvd1RvYXN0KGAke3RoZW1lfSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuYCwge3R5cGU6IFwiZXJyb3JcIn0pO1xyXG4gICAgICAgIHJldHVybiBVdGlscy5lcnIoXCJDb250ZW50TWFuYWdlclwiLCBgJHt0aGVtZX0gY291bGQgbm90IGJlIHJlbG9hZGVkLmAsIGVycm9yKTtcclxuICAgIH1cclxuICAgIFV0aWxzLmxvZyhcIkNvbnRlbnRNYW5hZ2VyXCIsIGAke3RoZW1lfSB2JHtiZHRoZW1lc1t0aGVtZV0udmVyc2lvbn0gd2FzIHJlbG9hZGVkLmApO1xyXG4gICAgaWYgKHNldHRpbmdzQ29va2llW1wiZm9yay1wcy0yXCJdKSBVdGlscy5zaG93VG9hc3QoYCR7dGhlbWV9IHYke2JkdGhlbWVzW3RoZW1lXS52ZXJzaW9ufSB3YXMgcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICBCREV2ZW50cy5kaXNwYXRjaChcInRoZW1lLXJlbG9hZGVkXCIsIHRoZW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5yZWxvYWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUaGVtZShuYW1lKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5lZGl0ID0gZnVuY3Rpb24oZmlsZW5hbWVPck5hbWUpIHtcclxuICAgIGNvbnN0IGJkcGx1Z2luID0gT2JqZWN0LnZhbHVlcyhiZHRoZW1lcykuZmluZChwID0+IHAuZmlsZW5hbWUgPT0gZmlsZW5hbWVPck5hbWUpIHx8IGJkdGhlbWVzW2ZpbGVuYW1lT3JOYW1lXTtcclxuICAgIGlmICghYmRwbHVnaW4pIHJldHVybjtcclxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcmVxdWlyZShcInBhdGhcIikucmVzb2x2ZShDb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIGJkcGx1Z2luLmZpbGVuYW1lKTtcclxuICAgIHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShgJHtmdWxsUGF0aH1gKTtcclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS51cGRhdGVUaGVtZUxpc3QgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHJlc3VsdHMgPSBDb250ZW50TWFuYWdlci5sb2FkTmV3Q29udGVudChcInRoZW1lXCIpO1xyXG4gICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRUaGVtZShmaWxlbmFtZSk7XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZFRoZW1lKG5hbWUpO1xyXG59O1xyXG5cclxuVGhlbWVNb2R1bGUucHJvdG90eXBlLmxvYWRUaGVtZURhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInRoZW1lc1wiKTtcclxuICAgIGlmIChzYXZlZCkge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhlbWVDb29raWUsIHNhdmVkKTtcclxuICAgIH1cclxufTtcclxuXHJcblRoZW1lTW9kdWxlLnByb3RvdHlwZS5zYXZlVGhlbWVEYXRhID0gZnVuY3Rpb24gKCkge1xyXG4gICAgRGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInRoZW1lc1wiLCB0aGVtZUNvb2tpZSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgVGhlbWVNb2R1bGUoKTsiLCJpbXBvcnQge2JiZFZlcnNpb259IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2tNb2R1bGVzXCI7XG5pbXBvcnQgQkRWMiBmcm9tIFwiLi92MlwiO1xuaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgd2lkdGggKi9cbiAgICBzdGF0aWMgZ2V0IHNjcmVlbldpZHRoKCkgeyByZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTsgfVxuICAgIC8qKiBEb2N1bWVudC93aW5kb3cgaGVpZ2h0ICovXG4gICAgc3RhdGljIGdldCBzY3JlZW5IZWlnaHQoKSB7IHJldHVybiBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgMCk7IH1cblxuICAgIHN0YXRpYyBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgICAgICAgZnJhbWU6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXRXaW5kb3dQcmVmZXJlbmNlKGtleSkge1xuICAgICAgICBpZiAoa2V5ID09PSBcInRyYW5zcGFyZW50XCIpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcImZyYW1lXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBzZXRXaW5kb3dQcmVmZXJlbmNlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJmcmFtZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdHJpcEJPTShjb250ZW50KSB7XG4gICAgICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFRleHRBcmVhKCkge1xuICAgICAgICByZXR1cm4gRE9NLnF1ZXJ5KFwiLlwiK3JlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoYW5uZWxUZXh0QXJlYSAmJiBlLnRpdGxlV3JhcHBlcilbMF0uY2hhbm5lbFRleHRBcmVhKStcIiB0ZXh0YXJlYVwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0VGV4dCh0ZXh0YXJlYSwgdGV4dCkge1xuICAgICAgICB0ZXh0YXJlYS5mb2N1cygpO1xuICAgICAgICB0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCA9IDA7XG4gICAgICAgIHRleHRhcmVhLnNlbGVjdGlvbkVuZCA9IHRleHRhcmVhLnZhbHVlLmxlbmd0aDtcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJpbnNlcnRUZXh0XCIsIGZhbHNlLCB0ZXh0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXNjYXBlSUQoaWQpIHtcbiAgICAgICAgcmV0dXJuIGlkLnJlcGxhY2UoL15bXmEtel0rfFteXFx3LV0rL2dpLCBcIi1cIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGxvZyhtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1tCYW5kYWdlZEJEXSVjIFske21vZHVsZU5hbWV9XSVjICR7bWVzc2FnZX1gLCBcImNvbG9yOiAjM2E3MWMxOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiAjM2E3MWMxO1wiLCBcIlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgd2Fybihtb2R1bGVOYW1lLCBtZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogI0U4QTQwMDsgZm9udC13ZWlnaHQ6IDcwMDtcIiwgXCJjb2xvcjogI0U4QTQwMDtcIiwgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIGVycihtb2R1bGVOYW1lLCBtZXNzYWdlLCBlcnJvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbQmFuZGFnZWRCRF0lYyBbJHttb2R1bGVOYW1lfV0lYyAke21lc3NhZ2V9YCwgXCJjb2xvcjogcmVkOyBmb250LXdlaWdodDogNzAwO1wiLCBcImNvbG9yOiByZWQ7XCIsIFwiXCIpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoXCIlY0Vycm9yOiBcIiArIGVycm9yLm1lc3NhZ2UsIFwiY29sb3I6IHJlZDtcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdCBzdHJpbmdzIHdpdGggcGxhY2Vob2xkZXJzIChge3twbGFjZWhvbGRlcn19YCkgaW50byBmdWxsIHN0cmluZ3MuXG4gICAgICogUXVpY2sgZXhhbXBsZTogYFBsdWdpblV0aWxpdGllcy5mb3JtYXRTdHJpbmcoXCJIZWxsbywge3t1c2VyfX1cIiwge3VzZXI6IFwiWmVyZWJvc1wifSlgXG4gICAgICogd291bGQgcmV0dXJuIFwiSGVsbG8sIFplcmVib3NcIi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIC0gc3RyaW5nIHRvIGZvcm1hdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgLSBvYmplY3QgbGl0ZXJhbCBvZiBwbGFjZWhvbGRlcnMgdG8gcmVwbGFjZW1lbnRzXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHByb3Blcmx5IGZvcm1hdHRlZCBzdHJpbmdcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKHN0cmluZywgdmFsdWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIGluIHZhbHVlcykge1xuICAgICAgICAgICAgbGV0IHJlcGxhY2VtZW50ID0gdmFsdWVzW3ZhbF07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXBsYWNlbWVudCkpIHJlcGxhY2VtZW50ID0gSlNPTi5zdHJpbmdpZnkocmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZihyZXBsYWNlbWVudCkgPT09IFwib2JqZWN0XCIgJiYgcmVwbGFjZW1lbnQgIT09IG51bGwpIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKG5ldyBSZWdFeHAoYHt7JHt2YWx9fX1gLCBcImdcIiksIHJlcGxhY2VtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHN0YXRpYyBlc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLS9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCBcIlxcXFwkJlwiKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdGVzdEpTT04oZGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGlzRW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmogPT0gdW5kZWZpbmVkIHx8IG9iaiA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZihvYmopICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubGVuZ3RoID09IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc3RhdGljIHN1cHByZXNzRXJyb3JzKG1ldGhvZCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gKC4uLnBhcmFtcykgPT4ge1xuICAgICAgICAgICAgdHJ5IHsgcmV0dXJuIG1ldGhvZCguLi5wYXJhbXMpO1x0fVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHsgdGhpcy5lcnIoXCJTdXBwcmVzc2VkRXJyb3JcIiwgXCJFcnJvciBvY2N1cnJlZCBpbiBcIiArIG1lc3NhZ2UsIGUpOyB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIG1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qge2JlZm9yZSwgYWZ0ZXIsIGluc3RlYWQsIG9uY2UgPSBmYWxzZSwgc2lsZW50ID0gZmFsc2UsIGZvcmNlID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lIHx8IHdoYXQuZGlzcGxheU5hbWUgfHwgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSB8fCB3aGF0Lm5hbWUgfHwgd2hhdC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCB3aGF0LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmxvZyhcInBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHt9O1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gY29uc29sZS5lcnJvcihtZXRob2ROYW1lLCBcImRvZXMgbm90IGV4aXN0IGZvclwiLCBkaXNwbGF5TmFtZSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdNZXRob2QgPSB3aGF0W21ldGhvZE5hbWVdO1xuICAgICAgICBsZXQgY2FuY2VsZWQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXNpbGVudCkgY29uc29sZS5sb2coXCJ1bnBhdGNoXCIsIG1ldGhvZE5hbWUsIFwib2ZcIiwgZGlzcGxheU5hbWUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIC8vd2hhdFttZXRob2ROYW1lXSA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICBjYW5jZWxlZCA9IHRydWUgLy8gdGhpcyBhbGxvdyB0byBtb25rZXlwYXRjaCBtb3JlIHRoYW4gb25lIHRpbWUuXG4gICAgICAgIH07XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKGNhbmNlbGVkKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ01ldGhvZC5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdGhpc09iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBtZXRob2RBcmd1bWVudHM6IGFyZ3VtZW50cyxcbiAgICAgICAgICAgICAgICBjYW5jZWxQYXRjaDogY2FuY2VsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTWV0aG9kOiBvcmlnTWV0aG9kLFxuICAgICAgICAgICAgICAgIGNhbGxPcmlnaW5hbE1ldGhvZDogKCkgPT4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEub3JpZ2luYWxNZXRob2QuYXBwbHkoZGF0YS50aGlzT2JqZWN0LCBkYXRhLm1ldGhvZEFyZ3VtZW50cylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaW5zdGVhZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBSZXQgPSBVdGlscy5zdXBwcmVzc0Vycm9ycyhpbnN0ZWFkLCBcImBpbnN0ZWFkYCBjYWxsYmFjayBvZiBcIiArIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUpKGRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wUmV0ICE9PSB1bmRlZmluZWQpIGRhdGEucmV0dXJuVmFsdWUgPSB0ZW1wUmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkgVXRpbHMuc3VwcHJlc3NFcnJvcnMoYmVmb3JlLCBcImBiZWZvcmVgIGNhbGxiYWNrIG9mIFwiICsgd2hhdFttZXRob2ROYW1lXS5kaXNwbGF5TmFtZSkoZGF0YSk7XG4gICAgICAgICAgICAgICAgZGF0YS5jYWxsT3JpZ2luYWxNZXRob2QoKTtcbiAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIpIFV0aWxzLnN1cHByZXNzRXJyb3JzKGFmdGVyLCBcImBhZnRlcmAgY2FsbGJhY2sgb2YgXCIgKyB3aGF0W21ldGhvZE5hbWVdLmRpc3BsYXlOYW1lKShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvbmNlKSBjYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuYXNzaWduKHdoYXRbbWV0aG9kTmFtZV0sIG9yaWdNZXRob2QpO1xuICAgICAgICB3aGF0W21ldGhvZE5hbWVdLl9fbW9ua2V5UGF0Y2hlZCA9IHRydWU7XG4gICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICAgICAgaWYgKCF3aGF0W21ldGhvZE5hbWVdLl9fb3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIHdoYXRbbWV0aG9kTmFtZV0uX19vcmlnaW5hbE1ldGhvZCA9IG9yaWdNZXRob2Q7XG4gICAgICAgICAgICB3aGF0W21ldGhvZE5hbWVdLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9yaWdNZXRob2QudG9TdHJpbmcoKTt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5jZWw7XG4gICAgfVxuXG4gICAgc3RhdGljIG9uUmVtb3ZlZChub2RlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXV0YXRpb25zLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbbV07XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0TWF0Y2ggPSBub2Rlcy5pbmRleE9mKG5vZGUpID4gLTE7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50TWF0Y2ggPSBub2Rlcy5zb21lKHBhcmVudCA9PiBwYXJlbnQuY29udGFpbnMobm9kZSkpO1xuICAgICAgICAgICAgICAgIGlmIChkaXJlY3RNYXRjaCB8fCBwYXJlbnRNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtzdWJ0cmVlOiB0cnVlLCBjaGlsZExpc3Q6IHRydWV9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0TmVzdGVkUHJvcChvYmosIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoL1xccz9cXC5cXHM/LykucmVkdWNlKGZ1bmN0aW9uKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBvYmpbcHJvcF07XG4gICAgICAgIH0sIG9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBzaG93cyBhIHRvYXN0IHNpbWlsYXIgdG8gYW5kcm9pZCB0b3dhcmRzIHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuIE9wdGlvbmFsIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy50eXBlIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaWNvbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGltZW91dCBBZGp1c3RzIHRoZSB0aW1lIChpbiBtcykgdGhlIHRvYXN0IHNob3VsZCBiZSBzaG93biBmb3IgYmVmb3JlIGRpc2FwcGVhcmluZyBhdXRvbWF0aWNhbGx5LiBEZWZhdWx0OiAzMDAwXG4gICAgICovXG4gICAgc3RhdGljIHNob3dUb2FzdChjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJkLXRvYXN0c1wiKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIityZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaWRlYmFyICYmIGUuaGFzTm90aWNlKVswXS5zaWRlYmFyKStcIiArIGRpdlwiKSB8fCBudWxsO1xuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiZm9ybVwiKSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBib3R0b20gPSBmb3JtID8gZm9ybS5vZmZzZXRIZWlnaHQgOiA4MDtcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0b2FzdFdyYXBwZXIuY2xhc3NMaXN0LmFkZChcImJkLXRvYXN0c1wiKTtcbiAgICAgICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImJvdHRvbVwiLCBib3R0b20rXCJweFwiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpLmFwcGVuZENoaWxkKHRvYXN0V3JhcHBlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9hc3RXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5iZC10b2FzdHNcIilcbiAgICAgICAgY29uc3Qge3R5cGUgPSBcIlwiLCBpY29uID0gdHJ1ZSwgdGltZW91dCA9IDMwMDB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgdG9hc3RFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJiZC10b2FzdFwiKTtcbiAgICAgICAgaWYgKHR5cGUpIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwidG9hc3QtXCIgKyB0eXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgaWNvbikgdG9hc3RFbGVtLmNsYXNzTGlzdC5hZGQoXCJpY29uXCIpO1xuICAgICAgICB0b2FzdEVsZW0uaW5uZXJUZXh0ID0gY29udGVudDtcbiAgICAgICAgdG9hc3RXcmFwcGVyLmFwcGVuZENoaWxkKHRvYXN0RWxlbSk7XG4gICAgICAgIHRvYXN0V3JhcHBlci5zdHlsZS5zZXRQcm9wZXJ0eShcImxlZnRcIiwgYGNhbGMoNTAlIC0gJHt0b2FzdFdyYXBwZXIub2Zmc2V0V2lkdGggLyAyfXB4KWApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRvYXN0RWxlbS5jbGFzc0xpc3QuYWRkKFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvYXN0RWxlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYmQtdG9hc3RzIC5iZC10b2FzdFwiKS5sZW5ndGgpIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYmQtdG9hc3RzXCIpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFsZXJ0KHRpdGxlLCBjb250ZW50KSB7XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCAke21vZGFsTW9kdWxlLm1vZGFsfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1pbm5lciAke21vZGFsTW9kdWxlLmlubmVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyICR7aGVhZGVyTW9kdWxlLmhlYWRlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7dGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXIgJHtoZWFkZXJNb2R1bGUuZm9vdGVyfSAke2Zvb3RlcjJNb2R1bGUuZm9vdGVyfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+T2theTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5gKTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5mb290ZXIgYnV0dG9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBET00uYWRkQ2xhc3MobW9kYWwsIFwiY2xvc2luZ1wiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICBtb2RhbC5yZW1vdmUoKTsgXG4gICAgICAgICAgICAgICAgY2xvc2luZ0xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcigpXG4gICAgICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgXG4gICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIERPTS5xdWVyeShcIiNhcHAtbW91bnRcIikuYXBwZW5kKG1vZGFsKTtcbiAgICAgICAgY29uc3QgY2xvc2luZ0xpc3RlbmVycyA9IFtdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwucmVtb3ZlKCk7IFxuICAgICAgICAgICAgICAgICAgICBjbG9zaW5nTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2xvc2U6IChsaXN0ZW5lcikgPT4ge1xuICAgICAgICAgICAgICAgIGNsb3NpbmdMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzID0gW10sIHRoZW1lczogdGhlbWVFcnJvcnMgPSBbXX0pIHtcbiAgICAgICAgaWYgKCFwbHVnaW5FcnJvcnMgfHwgIXRoZW1lRXJyb3JzKSByZXR1cm47XG4gICAgICAgIGlmICghcGx1Z2luRXJyb3JzLmxlbmd0aCAmJiAhdGhlbWVFcnJvcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxldCBtb2RhbE1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1vZGFsICYmIGUuaW5uZXIgJiYgIWUuaGlkZU9uRnVsbHNjcmVlbilbMF1cbiAgICAgICAgbGV0IGhlYWRlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmhlYWRlciAmJiBlLnJlc3BvbnNpdmVXaWR0aE1vYmlsZSAmJiBlLmhpZGVPbkZ1bGxzY3JlZW4pWzBdXG4gICAgICAgIGxldCBmb290ZXIyTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuaGVhZGVyICYmIGUucmVzcG9uc2l2ZVdpZHRoTW9iaWxlICYmIGUuZm9jdXNMb2NrKVswXVxuICAgICAgICBjb25zdCBtb2RhbCA9IERPTS5jcmVhdGVFbGVtZW50KGA8ZGl2IGNsYXNzPVwiYmQtbW9kYWwtd3JhcHBlciB0aGVtZS1kYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmQtYmFja2Ryb3AgJHtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iYWNrZHJvcCAmJiBlLmJhY2tkcm9wV2l0aExheWVyKVswXS5iYWNrZHJvcH1cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbCBiZC1jb250ZW50LW1vZGFsICR7bW9kYWxNb2R1bGUubW9kYWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJkLW1vZGFsLWlubmVyICR7bW9kYWxNb2R1bGUuaW5uZXJ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgJHtoZWFkZXJNb2R1bGUuaGVhZGVyfVwiPjxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRlbnQgRXJyb3JzPC9kaXY+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZC1tb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhci1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWJhciBUT1BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlBsdWdpbnM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1iYXItaXRlbVwiPlRoZW1lczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPk5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1tZXNzYWdlXCI+TWVzc2FnZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb2x1bW4gY29sdW1uLWVycm9yXCI+RXJyb3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgZmFkZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlclwiPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyICR7aGVhZGVyTW9kdWxlLmZvb3Rlcn0gJHtmb290ZXIyTW9kdWxlLmZvb3Rlcn1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiPk9rYXk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+YCk7XG4gICAgXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlVGFiKGVycm9ycykge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvcnNcIj5gKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgY2xhc3M9XCJlcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbmFtZVwiPiR7ZXJyLm5hbWUgPyBlcnIubmFtZSA6IGVyci5maWxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbHVtbiBjb2x1bW4tbWVzc2FnZVwiPiR7ZXJyLm1lc3NhZ2V9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29sdW1uIGNvbHVtbi1lcnJvclwiPjxhIGNsYXNzPVwiZXJyb3ItbGlua1wiIGhyZWY9XCJcIj4ke2Vyci5lcnJvciA/IGVyci5lcnJvci5tZXNzYWdlIDogXCJcIn08L2E+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PmApO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmIChlcnIuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaChlbCA9PiBlbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLmVycihcIkNvbnRlbnRNYW5hZ2VyXCIsIGBFcnJvciBkZXRhaWxzIGZvciAke2Vyci5uYW1lID8gZXJyLm5hbWUgOiBlcnIuZmlsZX0uYCwgZXJyLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgdGFicyA9IFtnZW5lcmF0ZVRhYihwbHVnaW5FcnJvcnMpLCBnZW5lcmF0ZVRhYih0aGVtZUVycm9ycyldO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYi1iYXItaXRlbVwiKS5mb3JFYWNoKGVsID0+IGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbS5zZWxlY3RlZFwiKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZCkgRE9NLnJlbW92ZUNsYXNzKHNlbGVjdGVkLCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKGUudGFyZ2V0LCBcInNlbGVjdGVkXCIpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnNjcm9sbGVyXCIpO1xuICAgICAgICAgICAgc2Nyb2xsZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIHNjcm9sbGVyLmFwcGVuZCh0YWJzW0RPTS5pbmRleChlLnRhcmdldCldKTtcbiAgICAgICAgfSkpO1xuICAgIFxuICAgICAgICBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmZvb3RlciBidXR0b25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIERPTS5hZGRDbGFzcyhtb2RhbCwgXCJjbG9zaW5nXCIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IG1vZGFsLnJlbW92ZSgpOyB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwucXVlcnlTZWxlY3RvcihcIi5iZC1iYWNrZHJvcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgICAgRE9NLmFkZENsYXNzKG1vZGFsLCBcImNsb3NpbmdcIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgbW9kYWwucmVtb3ZlKCk7IH0sIDMwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICBET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLmFwcGVuZChtb2RhbCk7XG4gICAgICAgIGlmIChwbHVnaW5FcnJvcnMubGVuZ3RoKSBtb2RhbC5xdWVyeVNlbGVjdG9yKFwiLnRhYi1iYXItaXRlbVwiKS5jbGljaygpO1xuICAgICAgICBlbHNlIG1vZGFsLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiLWJhci1pdGVtXCIpWzFdLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNob3dDaGFuZ2Vsb2dNb2RhbChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxTdGFjayA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeVByb3BzKFwicHVzaFwiLCBcInVwZGF0ZVwiLCBcInBvcFwiLCBcInBvcFdpdGhLZXlcIik7XG4gICAgICAgIGNvbnN0IENoYW5nZWxvZ0NsYXNzZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImZpeGVkXCIsIFwiaW1wcm92ZWRcIik7XG4gICAgICAgIGNvbnN0IFRleHRFbGVtZW50ID0gV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUZXh0XCIpO1xuICAgICAgICBjb25zdCBGbGV4Q2hpbGQgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIkNoaWxkXCIpO1xuICAgICAgICBjb25zdCBUaXRsZXMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcIlRhZ3NcIiwgXCJkZWZhdWx0XCIpO1xuICAgICAgICBjb25zdCBDaGFuZ2Vsb2cgPSBXZWJwYWNrTW9kdWxlcy5maW5kKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuc2VsZWN0YWJsZSA9PSBmYWxzZSk7XG4gICAgICAgIGNvbnN0IE1hcmtkb3duUGFyc2VyID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJkZWZhdWx0UnVsZXNcIiwgXCJwYXJzZVwiKTtcbiAgICAgICAgaWYgKCFDaGFuZ2Vsb2cgfHwgIU1vZGFsU3RhY2sgfHwgIUNoYW5nZWxvZ0NsYXNzZXMgfHwgIVRleHRFbGVtZW50IHx8ICFGbGV4Q2hpbGQgfHwgIVRpdGxlcyB8fCAhTWFya2Rvd25QYXJzZXIpIHJldHVybjtcbiAgICBcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaW1hZ2UgPSBcImh0dHBzOi8vcmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzEwNTQ3MzUzNy85NTdiNTQ4MC03YzI2LTExZTktODQwMS01MGZhODIwY2JhZTVcIiwgXG4gICAgICAgICAgICBkZXNjcmlwdGlvbiA9IFwiXCIsIFxuICAgICAgICAgICAgY2hhbmdlcyA9IFtdLCBcbiAgICAgICAgICAgIHRpdGxlID0gXCJCYW5kYWdlZEJEXCIsIFxuICAgICAgICAgICAgc3VidGl0bGUgPSBgdiR7YmJkVmVyc2lvbn1gLCBcbiAgICAgICAgICAgIGZvb3RlclxuICAgICAgICB9ID0gb3B0aW9ucztcbiAgICAgICAgY29uc3QgY2UgPSBCRFYyLlJlYWN0LmNyZWF0ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZWxvZ0l0ZW1zID0gW2NlKFwiaW1nXCIsIHtzcmM6IGltYWdlfSldO1xuICAgICAgICBpZiAoZGVzY3JpcHRpb24pIGNoYW5nZWxvZ0l0ZW1zLnB1c2goY2UoXCJwXCIsIG51bGwsIE1hcmtkb3duUGFyc2VyLnBhcnNlKGRlc2NyaXB0aW9uKSkpO1xuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNoYW5nZXMubGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY2hhbmdlc1tjXTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBDaGFuZ2Vsb2dDbGFzc2VzW2VudHJ5LnR5cGVdID8gQ2hhbmdlbG9nQ2xhc3Nlc1tlbnRyeS50eXBlXSA6IENoYW5nZWxvZ0NsYXNzZXMuYWRkZWQ7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW4gPSBjID09IDAgPyBDaGFuZ2Vsb2dDbGFzc2VzLm1hcmdpblRvcCA6IFwiXCI7XG4gICAgICAgICAgICBjaGFuZ2Vsb2dJdGVtcy5wdXNoKGNlKFwiaDFcIiwge2NsYXNzTmFtZTogYCR7dHlwZX0gJHttYXJnaW59YCx9LCBlbnRyeS50aXRsZSkpO1xuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGNlKFwidWxcIiwgbnVsbCwgZW50cnkuaXRlbXMubWFwKGkgPT4gY2UoXCJsaVwiLCBudWxsLCBNYXJrZG93blBhcnNlci5wYXJzZShpKSkpKTtcbiAgICAgICAgICAgIGNoYW5nZWxvZ0l0ZW1zLnB1c2gobGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVySGVhZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gY2UoRmxleENoaWxkLkNoaWxkLCB7Z3JvdzogMSwgc2hyaW5rOiAxfSxcbiAgICAgICAgICAgICAgICBjZShUaXRsZXMuZGVmYXVsdCwge3RhZzogVGl0bGVzLlRhZ3MuSDR9LCB0aXRsZSksXG4gICAgICAgICAgICAgICAgY2UoVGV4dEVsZW1lbnQse3NpemU6IFRleHRFbGVtZW50LlNpemVzLlNNQUxMLCBjb2xvcjogVGV4dEVsZW1lbnQuQ29sb3JzLlNUQU5EQVJELCBjbGFzc05hbWU6IENoYW5nZWxvZ0NsYXNzZXMuZGF0ZX0sIHN1YnRpdGxlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICBcbiAgICAgICAgY29uc3QgcmVuZGVyRm9vdGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgQW5jaG9yID0gV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGlzcGxheU5hbWUgPT0gXCJBbmNob3JcIik7XG4gICAgICAgICAgICBjb25zdCBBbmNob3JDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCIpIHx8IHthbmNob3I6IFwiYW5jaG9yLTNaLThCYlwiLCBhbmNob3JVbmRlcmxpbmVPbkhvdmVyOiBcImFuY2hvclVuZGVybGluZU9uSG92ZXItMkVTSFFCXCJ9O1xuICAgICAgICAgICAgY29uc3Qgam9pblN1cHBvcnRTZXJ2ZXIgPSAoY2xpY2spID0+IHtcbiAgICAgICAgICAgICAgICBjbGljay5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNsaWNrLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIE1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgQkRWMi5qb2luQkQyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3Qgc3VwcG9ydExpbmsgPSBBbmNob3IgPyBjZShBbmNob3IsIHtvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpIDogY2UoXCJhXCIsIHtjbGFzc05hbWU6IGAke0FuY2hvckNsYXNzZXMuYW5jaG9yfSAke0FuY2hvckNsYXNzZXMuYW5jaG9yVW5kZXJsaW5lT25Ib3Zlcn1gLCBvbkNsaWNrOiBqb2luU3VwcG9ydFNlcnZlcn0sIFwiSm9pbiBvdXIgRGlzY29yZCBTZXJ2ZXIuXCIpO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZvb3RlciA9IGNlKFRleHRFbGVtZW50LHtzaXplOiBUZXh0RWxlbWVudC5TaXplcy5TTUFMTCwgY29sb3I6IFRleHRFbGVtZW50LkNvbG9ycy5TVEFOREFSRH0sIFwiTmVlZCBzdXBwb3J0PyBcIiwgc3VwcG9ydExpbmspO1xuICAgICAgICAgICAgcmV0dXJuIGNlKEZsZXhDaGlsZC5DaGlsZCwge2dyb3c6IDEsIHNocmluazogMX0sIGZvb3RlciA/IGZvb3RlciA6IGRlZmF1bHRGb290ZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBNb2RhbFN0YWNrLnB1c2goZnVuY3Rpb24ocHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjZShDaGFuZ2Vsb2csIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogQ2hhbmdlbG9nQ2xhc3Nlcy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvblNjcm9sbDogXyA9PiBfLFxuICAgICAgICAgICAgICAgIG9uQ2xvc2U6IF8gPT4gXyxcbiAgICAgICAgICAgICAgICByZW5kZXJIZWFkZXI6IHJlbmRlckhlYWRlcixcbiAgICAgICAgICAgICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hhbmdlbG9nSXRlbXNcbiAgICAgICAgICAgIH0sIHByb3BzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcbiAgICAgKiBAcGFyYW0geyhzdHJpbmd8UmVhY3RFbGVtZW50fEFycmF5PHN0cmluZ3xSZWFjdEVsZW1lbnQ+KX0gY2hpbGRyZW4gLSBhIHNpbmdsZSBvciBtaXhlZCBhcnJheSBvZiByZWFjdCBlbGVtZW50cyBhbmQgc3RyaW5ncy4gRXZlcnkgc3RyaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBNYXJrZG93bmAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGFuZ2VyPWZhbHNlXSAtIHdoZXRoZXIgdGhlIG1haW4gYnV0dG9uIHNob3VsZCBiZSByZWQgb3Igbm90XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXG4gICAgICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25Db25maXJtPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvblxuICAgICAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5rZXldIC0ga2V5IHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1vZGFsLiBJZiBub3QgcHJvdmlkZWQsIG9uZSBpcyBnZW5lcmF0ZWQgYW5kIHJldHVybmVkXG4gICAgICogQHJldHVybnMge3N0cmluZ30gLSB0aGUga2V5IHVzZWQgZm9yIHRoaXMgbW9kYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgTW9kYWxBY3Rpb25zID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJvcGVuTW9kYWxcIiwgXCJ1cGRhdGVNb2RhbFwiKTtcbiAgICAgICAgY29uc3QgTWFya2Rvd24gPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIk1hcmtkb3duXCIpO1xuICAgICAgICBjb25zdCBDb25maXJtYXRpb25Nb2RhbCA9IFdlYnBhY2tNb2R1bGVzLmZpbmRCeURpc3BsYXlOYW1lKFwiQ29uZmlybU1vZGFsXCIpO1xuICAgICAgICBpZiAoIU1vZGFsQWN0aW9ucyB8fCAhQ29uZmlybWF0aW9uTW9kYWwgfHwgIU1hcmtkb3duKSByZXR1cm4gVXRpbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xuXG4gICAgICAgIGNvbnN0IGVtcHR5RnVuY3Rpb24gPSAoKSA9PiB7fTtcbiAgICAgICAgY29uc3Qge29uQ29uZmlybSA9IGVtcHR5RnVuY3Rpb24sIG9uQ2FuY2VsID0gZW1wdHlGdW5jdGlvbiwgY29uZmlybVRleHQgPSBcIk9rYXlcIiwgY2FuY2VsVGV4dCA9IFwiQ2FuY2VsXCIsIGRhbmdlciA9IGZhbHNlLCBrZXkgPSB1bmRlZmluZWR9ID0gb3B0aW9ucztcblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIGNvbnRlbnQgPSBbY29udGVudF07XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50Lm1hcChjID0+IHR5cGVvZihjKSA9PT0gXCJzdHJpbmdcIiA/IEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChNYXJrZG93biwgbnVsbCwgYykgOiBjKTtcbiAgICAgICAgcmV0dXJuIE1vZGFsQWN0aW9ucy5vcGVuTW9kYWwocHJvcHMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEJEVjIuUmVhY3QuY3JlYXRlRWxlbWVudChDb25maXJtYXRpb25Nb2RhbCwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgICAgaGVhZGVyOiB0aXRsZSxcbiAgICAgICAgICAgICAgICByZWQ6IGRhbmdlcixcbiAgICAgICAgICAgICAgICBjb25maXJtVGV4dDogY29uZmlybVRleHQsXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogY2FuY2VsVGV4dCxcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06IG9uQ29uZmlybSxcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogb25DYW5jZWxcbiAgICAgICAgICAgIH0sIHByb3BzKSwgY29udGVudCk7XG4gICAgICAgIH0sIHttb2RhbEtleToga2V5fSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCByZW1vdmVEYSgpe1xuICAgICAgICByZXR1cm4gcmVtb3ZlRGFcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhKGNsYXNzTmFtZSl7XG4gICAgaWYoIWNsYXNzTmFtZSlyZXR1cm4gY2xhc3NOYW1lXG4gICAgcmV0dXJuIGNsYXNzTmFtZS5zcGxpdChcIiBcIikuZmlsdGVyKGUgPT4gIWUuc3RhcnRzV2l0aChcImRhLVwiKSkuam9pbihcIiBcIilcbn1cblxuVXRpbHMuc2hvd1RvYXN0ID0gVXRpbHMuc3VwcHJlc3NFcnJvcnMoVXRpbHMuc2hvd1RvYXN0LCBcIkNvdWxkIG5vdCBzaG93IHRvYXN0LlwiKTtcblxud2luZG93LkxpZ2h0Y29yZC5CZXR0ZXJEaXNjb3JkLlV0aWxzID0gVXRpbHMiLCJpbXBvcnQge3NldHRpbmdzfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IHRoZW1lTW9kdWxlIGZyb20gXCIuL3RoZW1lTW9kdWxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuZWRpdG9yRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLldlYnBhY2tNb2R1bGVzID0gKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuICAgICAgICAgICAgZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFByb3RlY3QgPSB0aGVNb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5yZW1vdmUgJiYgdGhlTW9kdWxlLnNldCAmJiB0aGVNb2R1bGUuY2xlYXIgJiYgdGhlTW9kdWxlLmdldCAmJiAhdGhlTW9kdWxlLnNvcnQpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoZU1vZHVsZS5nZXRUb2tlbiB8fCB0aGVNb2R1bGUuZ2V0RW1haWwgfHwgdGhlTW9kdWxlLnNob3dUb2tlbikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwcm90ZWN0ID0gKHRoZU1vZHVsZSwgaXNEZWZhdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9kID0gIWlzRGVmYXVsdCA/IHRoZU1vZHVsZS5kZWZhdWx0IDogdGhlTW9kdWxlXHJcbiAgICAgICAgICAgICAgICBpZighbW9kKXJldHVybiB0aGVNb2R1bGVcclxuICAgICAgICAgICAgICAgIGlmIChtb2QucmVtb3ZlICYmIG1vZC5zZXQgJiYgbW9kLmNsZWFyICYmIG1vZC5nZXQgJiYgIW1vZC5zb3J0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICghbW9kLmdldFRva2VuICYmICFtb2QuZ2V0RW1haWwgJiYgIW1vZC5zaG93VG9rZW4pcmV0dXJuIHRoZU1vZHVsZVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KG1vZCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24ob2JqLCBwcm9wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSBcImdldFRva2VuXCIgfHwgcHJvcCA9PT0gXCJnZXRFbWFpbFwiIHx8IHByb3AgPT09IFwic2hvd1Rva2VuXCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKG9iaiwgZnVuYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcImdldFRva2VuXCIgJiYgb2JqLmdldFRva2VuKSByZXR1cm4gKCkgPT4gXCJtZmEuWENuYkt6bzBDTElxZEp6Qm5MMEQ4UGZEcnVxa0pOSGp3SFh0cjM5VVUzRjhoSHg0M2pvaklTeWk1amRqTzUyZTlfZTlNam1hZlpGRnBjLXNlT01hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jID09IFwiZ2V0RW1haWxcIiAmJiBvYmouZ2V0RW1haWwpIHJldHVybiAoKSA9PiBcInB1cHBldDExMTEyQGdtYWlsLmNvbVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcInNob3dUb2tlblwiICYmIG9iai5zaG93VG9rZW4pIHJldHVybiAoKSA9PiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnVuYyA9PSBcIl9fcHJvdG9fX1wiICYmIG9iai5fX3Byb3RvX18pIHJldHVybiBwcm94eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpbZnVuY107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIWlzRGVmYXVsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoZU1vZHVsZSwge2RlZmF1bHQ6IHByb3h5fSlcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJveHk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5kID0gKGZpbHRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIHJlcS5jKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5jLmhhc093blByb3BlcnR5KGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG0gPSByZXEuY1tpXS5leHBvcnRzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBtLl9fZXNNb2R1bGUgJiYgbS5kZWZhdWx0ICYmIGZpbHRlcihtLmRlZmF1bHQpKSByZXR1cm4gcHJvdGVjdChtLmRlZmF1bHQsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobSAmJiBmaWx0ZXIobSkpXHRyZXR1cm4gcHJvdGVjdChtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKHByb3RlY3QobS5kZWZhdWx0LCB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gocHJvdGVjdChtLCBmYWxzZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVzO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluZEJ5VW5pcXVlUHJvcGVydGllcyA9IChwcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAocHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge2ZpbmQsIGZpbmRBbGwsIGZpbmRCeVVuaXF1ZVByb3BlcnRpZXMsIGZpbmRCeVByb3RvdHlwZXMsIGZpbmRCeURpc3BsYXlOYW1lfTtcclxuICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybmFsID0ge1xyXG4gICAgICAgICAgICByZWFjdDogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIkNvbXBvbmVudFwiLCBcIlB1cmVDb21wb25lbnRcIiwgXCJDaGlsZHJlblwiLCBcImNyZWF0ZUVsZW1lbnRcIiwgXCJjbG9uZUVsZW1lbnRcIl0pLFxyXG4gICAgICAgICAgICByZWFjdERvbTogdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImZpbmRET01Ob2RlXCJdKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5nZXRJbnRlcm5hbEluc3RhbmNlID0gZSA9PiBlW09iamVjdC5rZXlzKGUpLmZpbmQoayA9PiBrLnN0YXJ0c1dpdGgoXCJfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZVwiKSldO1xyXG4gICAgICAgIHdpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5WMiA9IHRoaXNcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBqb2luQkQxKCkge3RoaXMuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKFwiMFRtZm81WmJPUkNScWJBZFwiKTt9XHJcbiAgICBsZWF2ZUJEMSgpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiODYwMDQ3NDQ5NjY5MTQwNDhcIik7fVxyXG5cclxuICAgIGpvaW5CRDIoKSB7dGhpcy5JbnZpdGVBY3Rpb25zLmFjY2VwdEludml0ZUFuZFRyYW5zaXRpb25Ub0ludml0ZUNoYW5uZWwoXCIySFNjbThqXCIpO31cclxuICAgIGxlYXZlQkQyKCkge3RoaXMuR3VpbGRBY3Rpb25zLmxlYXZlR3VpbGQoXCIyODA4MDY0NzI5MjgxOTg2NTZcIik7fVxyXG5cclxuICAgIGpvaW5MQygpIHt0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlQW5kVHJhbnNpdGlvblRvSW52aXRlQ2hhbm5lbChcIjdlRmZmMkFcIik7fVxyXG4gICAgbGVhdmVMQygpIHt0aGlzLkd1aWxkQWN0aW9ucy5sZWF2ZUd1aWxkKFwiNzA1OTA4MzUwMjE4NjY2MTE3XCIpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgUmVhY3R9XHJcbiAgICAgKi9cclxuICAgIGdldCBSZWFjdCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdDt9XHJcbiAgICAvKipcclxuICAgICAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3QtZG9tXCIpfVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhY3REb20oKSB7cmV0dXJuIHRoaXMuaW50ZXJuYWwucmVhY3REb207fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcInJlYWN0LWRvbVwiKX1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0RG9tKCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0RG9tO31cclxuICAgIC8qKlxyXG4gICAgICogQHR5cGUge3R5cGVvZiBSZWFjdC5Db21wb25lbnR9XHJcbiAgICAgKi9cclxuICAgIGdldCByZWFjdENvbXBvbmVudCgpIHtyZXR1cm4gdGhpcy5pbnRlcm5hbC5yZWFjdC5Db21wb25lbnQ7fVxyXG4gICAgLyoqXHJcbiAgICAgKiBAdHlwZSB7dHlwZW9mIFJlYWN0LkNvbXBvbmVudH1cclxuICAgICAqL1xyXG4gICAgZ2V0IFJlYWN0Q29tcG9uZW50KCkge3JldHVybiB0aGlzLmludGVybmFsLnJlYWN0LkNvbXBvbmVudDt9XHJcblxyXG4gICAgZ2V0IGFuY2hvckNsYXNzZXMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyXCJdKSB8fCB7YW5jaG9yOiBcImFuY2hvci0zWi04QmJcIiwgYW5jaG9yVW5kZXJsaW5lT25Ib3ZlcjogXCJhbmNob3JVbmRlcmxpbmVPbkhvdmVyLTJFU0hRQlwifTt9XHJcbiAgICBnZXQgc2xhdGVFZGl0b3JDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wic2xhdGVUZXh0QXJlYVwiXSk7fVxyXG4gICAgZ2V0IG1lc3NhZ2VDbGFzc2VzKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wibWVzc2FnZVwiLCBcImNvbnRhaW5lckNvenlcIl0pO31cclxuICAgIGdldCBndWlsZENsYXNzZXMoKSB7XHJcblx0XHRjb25zdCBndWlsZHNXcmFwcGVyID0gQkRNb2R1bGVzLmdldChlID0+IGUud3JhcHBlciAmJiBlLnVucmVhZE1lbnRpb25zQmFyKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ndWlsZHNFcnJvciAmJiBlLnNlbGVjdGVkKVswXVxyXG4gICAgICAgIGNvbnN0IHBpbGwgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ibG9iQ29udGFpbmVyKVswXVxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG5cdH1cclxuXHJcbiAgICBnZXQgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KFwiZGlzYWJsZUJ1dHRvbnNcIikpO31cclxuICAgIGdldCBNZXNzYWdlQ29tcG9uZW50KCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLmRlZmF1bHQgJiYgbS5kZWZhdWx0LmRpc3BsYXlOYW1lICYmIG0uZGVmYXVsdC5kaXNwbGF5TmFtZSA9PSBcIk1lc3NhZ2VcIik7fVxyXG4gICAgZ2V0IFRpbWVGb3JtYXR0ZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJkYXRlRm9ybWF0XCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcFdyYXBwZXIoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwXCIpO31cclxuICAgIGdldCBOYXRpdmVNb2R1bGUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJzZXRCYWRnZVwiXSk7fVxyXG4gICAgZ2V0IEludml0ZUFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJhY2NlcHRJbnZpdGVcIl0pO31cclxuICAgIGdldCBHdWlsZEFjdGlvbnMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJsZWF2ZUd1aWxkXCJdKTt9XHJcbiAgICBnZXQgVG9vbHRpcHMoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZChtID0+IG0uaGlkZSAmJiBtLnNob3cgJiYgIW0uc2VhcmNoICYmICFtLnN1Ym1pdCAmJiAhbS5zZWFyY2ggJiYgIW0uYWN0aXZhdGVSYWdpbmdEZW1vbiAmJiAhbS5kaXNtaXNzKTt9XHJcbiAgICBnZXQgS2V5R2VuZXJhdG9yKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmQobSA9PiBtLnRvU3RyaW5nICYmIC9cImJpbmFyeVwiLy50ZXN0KG0udG9TdHJpbmcoKSkpO31cclxuICAgIGdldCBMYXllclN0YWNrKCkge3JldHVybiB0aGlzLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wicG9wTGF5ZXJcIl0pO31cclxuICAgIGdldCBVc2VyU3RvcmUoKSB7cmV0dXJuIHRoaXMuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRDdXJyZW50VXNlclwiXSk7fVxyXG4gICAgZ2V0IENoYW5uZWxTdG9yZSgpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldENoYW5uZWxcIl0pO31cclxuICAgIGdldCBDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcIm9wZW5Qcml2YXRlQ2hhbm5lbFwiXSk7fVxyXG4gICAgZ2V0IFByaXZhdGVDaGFubmVsQWN0aW9ucygpIHtyZXR1cm4gdGhpcy5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcInNlbGVjdFByaXZhdGVDaGFubmVsXCJdKTt9XHJcblxyXG4gICAgb3BlbkRNKHVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGZJZCA9IHRoaXMuVXNlclN0b3JlLmdldEN1cnJlbnRVc2VyKCkuaWQ7XHJcbiAgICAgICAgaWYgKHNlbGZJZCA9PSB1c2VySWQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwcml2YXRlQ2hhbm5lbElkID0gdGhpcy5DaGFubmVsU3RvcmUuZ2V0RE1Gcm9tVXNlcklkKHVzZXJJZCk7XHJcbiAgICAgICAgaWYgKHByaXZhdGVDaGFubmVsSWQpIHJldHVybiB0aGlzLlByaXZhdGVDaGFubmVsQWN0aW9ucy5zZWxlY3RQcml2YXRlQ2hhbm5lbChwcml2YXRlQ2hhbm5lbElkKTtcclxuICAgICAgICB0aGlzLkNoYW5uZWxBY3Rpb25zLm9wZW5Qcml2YXRlQ2hhbm5lbChzZWxmSWQsIHVzZXJJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VTZXR0aW5ncyhjYXQpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0dGluZ3MpLnJlZHVjZSgoYXJyLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW2tleV07XHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5nLmNhdCA9PT0gY2F0ICYmIHNldHRpbmcuaW1wbGVtZW50ZWQgJiYgIXNldHRpbmcuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nLnRleHQgPSBrZXk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChzZXR0aW5nKTtcclxuICAgICAgICAgICAgfSByZXR1cm4gYXJyO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgIH1cclxuXHJcbn07IiwiaW1wb3J0IERPTSBmcm9tIFwiLi9kb210b29sc1wiO1xyXG5cclxuY29uc3Qgc3R5bGUgPSBgXHJcbiAgICAuY29udGFpbmVyLTJSbDAxdSB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLmNoYXQtM2JSeHh1IHtcclxuICAgICAgICBkaXNwbGF5OiBub25lIWltcG9ydGFudDtcclxuICAgIH1cclxuXHJcbiAgICAuc2lkZWJhci0ySzhwRmgge1xyXG4gICAgICAgIGZsZXgtZ3JvdzogMSFpbXBvcnRhbnQ7XHJcbiAgICB9XHJcbmA7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVm9pY2VNb2RlIHtcclxuICAgIHN0YXJ0KCkge1xyXG4gICAgICAgIERPTS5hZGRTdHlsZShcIlZvaWNlTW9kZVwiLCBzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcCgpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJWb2ljZU1vZGVcIik7XHJcbiAgICB9XHJcbn07IiwiY29uc3QgcmVxID0gd2VicGFja0pzb25wLnB1c2goW1tdLCB7X19leHRyYV9pZF9fOiAobW9kdWxlLCBleHBvcnRzLCByZXEpID0+IG1vZHVsZS5leHBvcnRzID0gcmVxfSwgW1tcIl9fZXh0cmFfaWRfX1wiXV1dKTtcclxuZGVsZXRlIHJlcS5tLl9fZXh0cmFfaWRfXztcclxuZGVsZXRlIHJlcS5jLl9fZXh0cmFfaWRfXztcclxuY29uc3QgZmluZCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgcmV0dXJuIG0uZGVmYXVsdDtcclxuICAgICAgICAgICAgaWYgKG0gJiYgZmlsdGVyKG0pKVx0cmV0dXJuIG07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS53YXJuKFwiQ2Fubm90IGZpbmQgbG9hZGVkIG1vZHVsZSBpbiBjYWNoZVwiKTtcclxuICAgIHJldHVybiBudWxsO1xyXG59O1xyXG5cclxuY29uc3QgZmluZEFsbCA9IChmaWx0ZXIpID0+IHtcclxuICAgIGNvbnN0IG1vZHVsZXMgPSBbXTtcclxuICAgIGZvciAoY29uc3QgaSBpbiByZXEuYykge1xyXG4gICAgICAgIGlmIChyZXEuYy5oYXNPd25Qcm9wZXJ0eShpKSkge1xyXG4gICAgICAgICAgICBjb25zdCBtID0gcmVxLmNbaV0uZXhwb3J0cztcclxuICAgICAgICAgICAgaWYgKG0gJiYgbS5fX2VzTW9kdWxlICYmIG0uZGVmYXVsdCAmJiBmaWx0ZXIobS5kZWZhdWx0KSkgbW9kdWxlcy5wdXNoKG0uZGVmYXVsdCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG0gJiYgZmlsdGVyKG0pKSBtb2R1bGVzLnB1c2gobSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZHVsZXM7XHJcbn07XHJcblxyXG5jb25zdCBmaW5kQnlQcm9wcyA9ICguLi5wcm9wTmFtZXMpID0+IGZpbmQobW9kdWxlID0+IHByb3BOYW1lcy5ldmVyeShwcm9wID0+IG1vZHVsZVtwcm9wXSAhPT0gdW5kZWZpbmVkKSk7XHJcbmNvbnN0IGZpbmRCeVByb3RvdHlwZXMgPSAoLi4ucHJvdG9OYW1lcykgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLnByb3RvdHlwZSAmJiBwcm90b05hbWVzLmV2ZXJ5KHByb3RvUHJvcCA9PiBtb2R1bGUucHJvdG90eXBlW3Byb3RvUHJvcF0gIT09IHVuZGVmaW5lZCkpO1xyXG5jb25zdCBmaW5kQnlEaXNwbGF5TmFtZSA9IChkaXNwbGF5TmFtZSkgPT4gZmluZChtb2R1bGUgPT4gbW9kdWxlLmRpc3BsYXlOYW1lID09PSBkaXNwbGF5TmFtZSk7XHJcblxyXG5sZXQgbW9kID0gIHtmaW5kLCBmaW5kQWxsLCBmaW5kQnlQcm9wcywgZmluZEJ5UHJvdG90eXBlcywgZmluZEJ5RGlzcGxheU5hbWV9O1xyXG5leHBvcnQgZGVmYXVsdCBtb2RcclxuXHJcbndpbmRvdy5MaWdodGNvcmQuQmV0dGVyRGlzY29yZC5XZWJwYWNrTW9kdWxlcyA9IG1vZCIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1Z0h1bnRlckJhZGdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wc1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMzEuMyAyOS41XCIgey4uLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMi44IDFzMTIgOC4yIDcuNCAxOS43UzE2LjYgMjkgMjAgMjUuNnMtNC01LjYtOC43LTEwTDIyLjggMVwiIGZpbGw9XCJyZ2JhKDIyNyw2LDE5LC42KVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyLjEgMTIuM2MtMi41IDMuMi02LjEgNC44LTguOSA0LjNMMy42IDI4LjhjLS43LjktMS45IDEtMi44LjMtLjktLjctMS0xLjktLjQtMi44TDEwIDE0LjFjLTEuMy0yLjUtLjYtNi40IDItOS43IDMuMi00IDgtNS41IDEwLjgtMy40czIuNCA3LjItLjcgMTEuM3pcIiBmaWxsPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIClcclxuICAgIH0gXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBDaXJjdXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICg8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgIHsuLi50aGlzLnByb3BzLnN2Z30gaGVpZ2h0PVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0REMkU0NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zMyAzM2EyIDIgMCAwMS0yIDJINWEyIDIgMCAwMS0yLTJsMS0xMmgyOGwxIDEyelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0VBNTk2RVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xMyAzNWMtLjc5Mi0xLjg3NS0xLjc1LTMuMjkxLTMuNDE3LTQuNjY2IDEuNzUtMS40NTkgNC41NDItNS41IDUuMjUtOC4yOTJzMi43NSA4LjEyNSAyLjA0MiAxMC42MjVTMTMgMzUgMTMgMzV6bTEwLjMwMyAwYy43OTEtMS44NzUgMS43NS0zLjI5MSAzLjQxNi00LjY2Ni0xLjc1LTEuNDU5LTQuNTQxLTUuNS01LjI1LTguMjkyLS43MDctMi43OTItMi43NSA4LjEyNS0yLjA0IDEwLjYyNS43MDggMi41IDMuODc0IDIuMzMzIDMuODc0IDIuMzMzelwiXHJcbiAgICAgICAgICAgICAgICA+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiI0JFMTkzMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjcyOCAyNC4yNjNBMi41IDIuNSAwIDAwOCAyMi41YzAtLjU2NS0uMTk1LTEuMDgxLS41MTEtMS41SDRsLS4yNzIgMy4yNjN6bTI4LjU0NCAwTDMyIDIxaC0zLjQ4OUEyLjQ4MiAyLjQ4MiAwIDAwMjggMjIuNWEyLjUgMi41IDAgMDA0LjI3MiAxLjc2M3pcIlxyXG4gICAgICAgICAgICAgICAgPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxNFwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjJcIiBjeT1cIjIzXCIgcj1cIjJcIiBmaWxsPVwiI0JFMTkzMVwiPjwvY2lyY2xlPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIyM1wiIHI9XCIyXCIgZmlsbD1cIiNCRTE5MzFcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyNlwiIGN5PVwiMjNcIiByPVwiMlwiIGZpbGw9XCIjQkUxOTMxXCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIzIDM1SDEzczItNiAyLTEzaDZjMCA3IDIgMTMgMiAxM3pNMTcgMmgydjdoLTJ6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzU1QUNFRVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0xOC44MzguMjA2QzE3LjY2Ny4wNDIgMTcgLjMxOCAxNyAxLjQxOHYxYzAgMS4xLjg2NSAxLjc1MyAxLjkyMyAxLjQ1MWw1LjE1NC0uOTAxYzEuNzE1LS4zNDMgMS41NDgtMS41OTMuMDg1LTEuODg0TDE4LjgzOC4yMDZ6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjQ0NENkREXCJcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTE4IDZsLS4wODEuMTIzQzEwLjkzOCAxNi45ODEgMyAxNS4wMTUgMyAxOXYyLjVhMi41IDIuNSAwIDAwNC45NS41SDEyYTIgMiAwIDAwNCAwaDRhMiAyIDAgMDA0IDBoNC4wNWEyLjUgMi41IDAgMDA0Ljk1LS41VjE5YzAtNC04LTItMTUtMTN6XCJcclxuICAgICAgICAgICAgICAgID48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8ZyBmaWxsPVwiI0Y1RjhGQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuOTQ4IDYuMDc4bC0uMDMuMDQ1QzE3LjEzMiAxMS42MTkgMTAuODExIDE2LjEyNiA4IDE4djRhMiAyIDAgMDA0IDB2LTRjLjk4Mi0uOTgyIDUuODEzLTYuNzg3IDUuOTg0LTExLjczMi0uMDEtLjA2NC0uMDI3LS4xMjYtLjAzNi0uMTl6bS4wOC4zOThDMTguMzI0IDExLjM3NCAyMy4wMzEgMTcuMDMxIDI0IDE4djRhMiAyIDAgMDA0IDB2LTRjLTIuNzUtMS44MzMtOC45NTMtNi4xOS05Ljk3Mi0xMS41MjR6XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuOTg0IDYuMjdDMTcuOTIyIDguMzQ2IDE3LjYwNiAxNi4zOTQgMTYgMTh2NGEyIDIgMCAwMDQgMHYtNGMtMS41NjQtMS41NjQtMS45MDUtOS4yNDEtMS45NzktMTEuNTU5LS4wMTEtLjA1Ny0uMDI3LS4xMTMtLjAzNy0uMTcxelwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgKVxyXG4gICAgfSBcclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0Y29yZExvZ28gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2OCAxNjguNjlcIiB7Li4ucHJvcHN9IGhlaWdodD1cIjEwMCVcIiB3aWR0aD17cHJvcHMuc2l6ZX0+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2FcIiB4MT17NjYuN30geTE9ey00ODcuN30geDI9ezY2Ljd9IHkyPXstNTA4LjczfSBncmFkaWVudFRyYW5zZm9ybT1cIm1hdHJpeCgxIDAgMCAtMSAwIC00MDgpXCIgZ3JhZGllbnRVbml0cz1cInVzZXJTcGFjZU9uVXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MH0gc3RvcENvbG9yPVwiI2UzMDYxM1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD17MX0gc3RvcENvbG9yPVwiIzczMWExNFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD5cclxuICAgICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9XCJwcmVmaXhfX2JcIiB4MT17MTAxLjd9IHkxPXstNDg3Ljd9IHgyPXsxMDEuN30geTI9ey01MDguNzN9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTIwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD1cInByZWZpeF9fY1wiIHgxPXs4NH0geTE9ey00MDh9IHgyPXs4NH0geTI9ey01NzYuNjl9IGdyYWRpZW50VHJhbnNmb3JtPVwibWF0cml4KDEgMCAwIC0xIDAgLTQwOClcIiBncmFkaWVudFVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXswfSBzdG9wQ29sb3I9XCIjZTMwNjEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0b3Agb2Zmc2V0PXsxfSBzdG9wQ29sb3I9XCIjNzMxYTEzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpbmVhckdyYWRpZW50PlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIiNmZmZcIiBkPVwiTTE0LjkgMzUuM2gxMzkuMlYxMzNIMTQuOXpcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ni43IDc5LjdjLTUuNCAwLTkuOCA0LjctOS44IDEwLjVzNC40IDEwLjUgOS44IDEwLjUgOS44LTQuNyA5LjgtMTAuNS00LjQtMTAuNS05LjgtMTAuNXpcIiBmaWxsPVwidXJsKCNwcmVmaXhfX2EpXCIgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAxLjcgNzkuN2MtNS40IDAtOS44IDQuNy05LjggMTAuNXM0LjQgMTAuNSA5LjggMTAuNSA5LjgtNC43IDkuOC0xMC41LTQuNC0xMC41LTkuOC0xMC41elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYilcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDB2MTY4bDE2OCAuNjlWMHptMTExLjMgMTI0LjFzLTMuNC00LjEtNi4zLTcuN2MxMi42LTMuNSAxNy40LTExLjMgMTcuNC0xMS4zYTUyLjUyIDUyLjUyIDAgMDEtMTEuMSA1LjYgNjguNjMgNjguNjMgMCAwMS0zOC45IDQgNzAuMTIgNzAuMTIgMCAwMS0xNC4xLTQuMSA0OC44OCA0OC44OCAwIDAxLTcuMS0zLjNjLS4zLS4yLS42LS4zLS45LS41YS43Ni43NiAwIDAwLS40LS4yYy0xLjctMS0yLjYtMS42LTIuNi0xLjZzNC42IDcuNiAxNi44IDExLjJjLTIuOSAzLjYtNi40IDcuOS02LjQgNy45LTIxLjItLjYtMjkuMy0xNC41LTI5LjMtMTQuNSAwLTMwLjYgMTMuOC01NS40IDEzLjgtNTUuNCAxMy44LTEwLjMgMjYuOS0xMCAyNi45LTEwbDEgMS4xQzUyLjggNTAuMyA0NSA1Ny45IDQ1IDU3LjlhNTYuMiA1Ni4yIDAgMDE1LjctMi43IDcyLjE5IDcyLjE5IDAgMDEyMS44LTYgOC43NSA4Ljc1IDAgMDExLjYtLjIgODkuMSA4OS4xIDAgMDExOS40LS4yIDc4LjQ1IDc4LjQ1IDAgMDEyOC45IDkuMXMtNy41LTcuMi0yMy45LTEyLjFsMS4zLTEuNXMxMy4xLS4zIDI2LjkgMTBjMCAwIDEzLjggMjQuOCAxMy44IDU1LjQuMS0uMS04IDEzLjgtMjkuMiAxNC40elwiIGZpbGw9XCJ1cmwoI3ByZWZpeF9fYylcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICApXHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgVjJDX1NldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5cclxuLyoqXHJcbiAqIEB0eXBlIHt0eXBlb2YgaW1wb3J0KFwicmVhY3RcIil9XHJcbiAqL1xyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5sZXQgbWFyZ2luTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHRNYXJnaW5oNSlbMF1cclxubGV0IGNvbG9yTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF1cclxubGV0IHNpemVNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMzIpWzBdXHJcbmxldCBzY3JvbGxiYXJNb2R1bGUxID0gQkRNb2R1bGVzLmdldChlID0+IGUuc2Nyb2xsYmFyR2hvc3RIYWlybGluZSlbMF1cclxuY29uc3QgR3VpbGRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRHdWlsZHMpWzBdLmRlZmF1bHRcclxuY29uc3QgcmVsYXRpb25TaGlwTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0UmVsYXRpb25zaGlwcylbMF0uZGVmYXVsdFxyXG5jb25zdCBzZXNzaW9uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZ2V0U2Vzc2lvbnMpWzBdLmRlZmF1bHRcclxuY29uc3QgdXNlck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmRlZmF1bHQgJiYgZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKVswXS5kZWZhdWx0XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQWNjb3VudEluZm9zIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlMiltYXJnaW5Nb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXVxyXG4gICAgICAgIGlmKCFjb2xvck1vZHVsZSljb2xvck1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbG9yU3RhbmRhcmQpWzBdXHJcbiAgICAgICAgaWYoIXNpemVNb2R1bGUpc2l6ZU1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF1cclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIkFjY291bnQgSW5mb3NcIi8+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICBQcm9maWxlXHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPENvZGVDb250ZW50IGNvbnRlbnQ9e3RoaXMuZ2V0UHJvZmlsZVZhbHVlKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIFN0YXRpc3RpY3NcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8Q29kZUNvbnRlbnQgY29udGVudD17dGhpcy5nZXRTdGF0aXN0aWNzKCl9IGxhbmd1YWdlPVwiZGlmZlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBTZXNzaW9uc1xyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxDb2RlQ29udGVudCBjb250ZW50PXt0aGlzLmdldFNlc3Npb25WYWx1ZSgpfSBsYW5ndWFnZT1cImRpZmZcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj4sXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF0ubWFyZ2luQm90dG9tMjB9PjwvZGl2PlxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTZXNzaW9uVmFsdWUoKXtcclxuICAgICAgICBjb25zdCBzZXNzaW9uc1JhdyA9IHNlc3Npb25Nb2R1bGUuZ2V0U2Vzc2lvbnMoKVxyXG4gICAgICAgIGNvbnN0IHNlc3Npb25zID0gT2JqZWN0LmtleXMoc2Vzc2lvbnNSYXcpLmZpbHRlcihlID0+IGUgIT09IFwiYWxsXCIpLm1hcChlID0+IHNlc3Npb25zUmF3W2VdKVxyXG5cclxuICAgICAgICBpZihzZXNzaW9ucy5sZW5ndGggPT09IDApcmV0dXJuIFwiLSBObyBzZXNzaW9uIGRldGVjdGVkLiBQbGVhc2UgdHJ5IGluIGEgZmV3IHNlY29uZHNcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBzZXNzaW9ucy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBgKyBpZDogJHtlLnNlc3Npb25JZH1cclxuKyBvczogJHtlLmNsaWVudEluZm8ub3NbMF0udG9VcHBlckNhc2UoKStlLmNsaWVudEluZm8ub3Muc2xpY2UoMSl9XHJcbisgY2xpZW50OiAke2UuY2xpZW50SW5mby5jbGllbnR9XHJcbisgc3RhdHVzOiAke2Uuc3RhdHVzfVxyXG4rIEFjdGl2aXRpZXM6ICR7ZS5hY3Rpdml0aWVzLmxlbmd0aH1gXHJcbiAgICAgICAgfSkuam9pbihcIlxcblwiK1wiLVwiLnJlcGVhdCgzOCkrXCJcXG5cIilcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9maWxlVmFsdWUoKXtcclxuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5nZXRDdXJyZW50VXNlcigpXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHR5cGUge0RhdGV9XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZEF0ID0gdXNlci5jcmVhdGVkQXRcclxuXHJcbiAgICAgICAgbGV0IGF2YXRhclVSTCA9IHVzZXIuYXZhdGFyVVJMXHJcbiAgICAgICAgaWYodXNlci5hdmF0YXIgJiYgdXNlci5hdmF0YXIuc3RhcnRzV2l0aChcImFfXCIpKXtcclxuICAgICAgICAgICAgYXZhdGFyVVJMID0gdXNlci5nZXRBdmF0YXJVUkwoXCJnaWZcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGF2YXRhclVSTC5zdGFydHNXaXRoKFwiL1wiKSl7XHJcbiAgICAgICAgICAgIGF2YXRhclVSTCA9IFwiaHR0cHM6Ly9kaXNjb3JkLmNvbVwiK2F2YXRhclVSTFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihhdmF0YXJVUkwuZW5kc1dpdGgoXCI/c2l6ZT0xMjhcIikpe1xyXG4gICAgICAgICAgICBhdmF0YXJVUkwgPSBhdmF0YXJVUkwucmVwbGFjZShcIj9zaXplPTEyOFwiLCBcIj9zaXplPTQwOTZcIilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBgKyBVc2VybmFtZTogJHt1c2VyLnVzZXJuYW1lfVxyXG4rIERpc2NyaW1pbmF0b3I6ICR7dXNlci5kaXNjcmltaW5hdG9yfVxyXG4rIFRhZzogJHt1c2VyLnRhZ31cclxuKyBJRDogJHt1c2VyLmlkfVxyXG4rIEF2YXRhcjogJHt1c2VyLmF2YXRhcn1cclxuKyBBdmF0YXIgVVJMOiAke2F2YXRhclVSTH1cclxuKyBDcmVhdGlvbiBEYXRlOiAkeyhjcmVhdGVkQXQuZ2V0RGF0ZSgpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0vJHsoY3JlYXRlZEF0LmdldE1vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIil9LyR7KGNyZWF0ZWRBdC5nZXRGdWxsWWVhcigpKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX0gJHtjcmVhdGVkQXQuZ2V0SG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1oICR7Y3JlYXRlZEF0LmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKX1taW4gJHtjcmVhdGVkQXQuZ2V0U2Vjb25kcygpfXNcclxuKyBGbGFnczogJHt1c2VyLmZsYWdzfVxyXG4rIEhhcyBOaXRybzogJHt1c2VyLmhhc1ByZW1pdW1TdWJzY3JpcHRpb24gPyBcIlllc1wiIDogXCJOb1wifVxyXG4tIEVtYWlsOiAke3VzZXIuZW1haWx9XHJcbi0gMkZBOiAke3VzZXIubWZhRW5hYmxlZCA/IFwiWWVzXCIgOiBcIk5vXCJ9XHJcbi0gSGFzIEJlZW4gT24gTW9iaWxlOiAke3VzZXIubW9iaWxlID8gXCJZZXNcIiA6IFwiTm9cIn1cclxuLSBQaG9uZTogJHt1c2VyLnBob25lIHx8IFwiTm9uZVwifVxyXG4tIFZlcmlmaWVkOiAke3VzZXIudmVyaWZpZWR9XHJcbi0gQ2FuIFNlZSBOU0ZXIENoYW5uZWxzOiAke3VzZXIubnNmd0FsbG93ZWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0aXN0aWNzKCl7XHJcblxyXG4gICAgICAgIGNvbnN0IGd1aWxkcyA9IE9iamVjdC52YWx1ZXMoR3VpbGRNb2R1bGUuZ2V0R3VpbGRzKCkpXHJcbiAgICAgICAgY29uc3QgcmVsYXRpb25zID0gT2JqZWN0LmtleXMocmVsYXRpb25TaGlwTW9kdWxlLmdldFJlbGF0aW9uc2hpcHMoKSlcclxuICAgICAgICBjb25zdCBmcmllbmRzID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0ZyaWVuZChlKSlcclxuICAgICAgICBjb25zdCBibG9ja2VkID0gcmVsYXRpb25zLmZpbHRlcihlID0+IHJlbGF0aW9uU2hpcE1vZHVsZS5pc0Jsb2NrZWQoZSkpXHJcblxyXG4gICAgICAgIHJldHVybiBgKyBTZXJ2ZXIgQ291bnQ6ICR7Z3VpbGRzLmxlbmd0aH0gc2VydmVyc1xyXG4rIFJlbGF0aW9uczogJHtyZWxhdGlvbnMubGVuZ3RofSByZWxhdGlvbnNcclxuKyBGcmllbmRzIENvdW50OiAke2ZyaWVuZHMubGVuZ3RofSBmcmllbmRzXHJcbi0gQmxvY2tlZCBVc2VycyBDb3VudDogJHtibG9ja2VkLmxlbmd0aH0gYmxvY2tlZCB1c2Vyc2BcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmxldCBoaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbmxldCBtZXNzYWdlTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmt1cClbMF1cclxubGV0IG1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcblxyXG5jbGFzcyBDb2RlQ29udGVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWVzc2FnZU1vZHVsZTEpbWVzc2FnZU1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJrdXApWzBdXHJcbiAgICAgICAgaWYoIW1lc3NhZ2VNb2R1bGUyKW1lc3NhZ2VNb2R1bGUyID0gQkRNb2R1bGVzLmdldChlID0+IGUubWVzc2FnZUNvbnRlbnQpWzBdXHJcbiAgICAgICAgaWYoIXNjcm9sbGJhck1vZHVsZTEpc2Nyb2xsYmFyTW9kdWxlMSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNjcm9sbGJhckdob3N0SGFpcmxpbmUpWzBdXHJcbiAgICAgICAgaWYoIWhpZ2h0bGlnaHRKUyloaWdodGxpZ2h0SlMgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5oaWdobGlnaHQpWzBdXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzPXtgJHttZXNzYWdlTW9kdWxlMS5tYXJrdXB9ICR7bWVzc2FnZU1vZHVsZTIubWVzc2FnZUNvbnRlbnR9YH0+XHJcbiAgICAgICAgICAgIDxwcmU+XHJcbiAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz17YCR7c2Nyb2xsYmFyTW9kdWxlMS5zY3JvbGxiYXJHaG9zdEhhaXJsaW5lfSBobGpzYH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IGhpZ2h0bGlnaHRKUy5oaWdobGlnaHQodGhpcy5wcm9wcy5sYW5ndWFnZSwgdGhpcy5wcm9wcy5jb250ZW50KS52YWx1ZX19PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvY29kZT5cclxuICAgICAgICAgICAgPC9wcmU+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b204KVswXS5tYXJnaW5Cb3R0b204fT48L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn0iLCIvLyBHb29kIGx1Y2sgdG8gcmVhZCBteSBjb2RlLCBFdmVuIG1lIGNhbid0IHJlYWQgaXQgcHJvcGVybHkuXHJcblxyXG5pbXBvcnQgeyBzdGF0IH0gZnJvbSBcImZzXCJcclxuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4uL21vZHVsZXMvZGlzdGFudFwiXHJcbmltcG9ydCB3ZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi4vbW9kdWxlcy93ZWJwYWNrTW9kdWxlc1wiXHJcbmltcG9ydCB7IHJlbW90ZSB9IGZyb20gXCJlbGVjdHJvblwiXHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCJcclxuXHJcbmxldCBmb3JtTW9kdWxlXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaVByZXZpZXcgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHN0YXRlczogW11cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgaWYoIWZvcm1Nb2R1bGUpZm9ybU1vZHVsZSA9IHdlYnBhY2tNb2R1bGVzLmZpbmQoZSA9PiBlLkZvcm1TZWN0aW9uKVxyXG4gICAgICAgIC8qKiBcclxuICAgICAgICAgKiBAdHlwZSB7RnVuY3Rpb25bXX1cclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdCBhbGxDb21wb25lbnRzID0gWy4uLm5ldyBTZXQoT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cykubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMod2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXSkubWFwKGsgPT4gd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50c1tlXVtrXSlcclxuICAgICAgICB9KS5mbGF0KCkpXVxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIDxmb3JtTW9kdWxlLkZvcm1TZWN0aW9uIHRhZz1cImgyXCIgdGl0bGU9XCJMaWdodGNvcmQncyBBcGkgQXZhaWxsYWJsZSBjb21wb25lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybU1vZHVsZS5Gb3JtVGV4dCB0eXBlPVwiZGVzY3JpcHRpb25cIiBjbGFzc05hbWU9XCJcIiBzZWxlY3RhYmxlPXtmYWxzZX0+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgY29tcG9uZW50cyBhcmUgaGVyZSBmb3IgdGhlIHBsdWdpbiBkZXZzLiBUaGV5IGNhbiBxdWlja2x5IGVtYmVkIGFueSBjb21wb25lbnQgYmVsb3cgd2l0aCB0aGlzIHBhbmVsLlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3ttYXJnaW5Ub3A6IFwiMjBweFwifX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJpbmZvXCI+QWxsIHRoZXNlIGNvbXBvbmVudHMgaGF2ZSBlcnJvciBoYW5kbGluZy4gSWYgeW91IHdhbnQgbm9uZSwgYWRkIGAub3JpZ2luYWxgIGFmdGVyIHRoZSBjb21wb25lbnQgcGF0aC48L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwid2FyblwiPldlIGRvIG5vdCByZWNvbW1lbmQgbW9kaWZ5aW5nIHRoZXNlIGNvbXBvbmVudCB3aXRoIHBsdWdpbnMuIE9ubHkgZG8gdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuPC9MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveD5cclxuICAgICAgICAgICAgICAgIDwvZm9ybU1vZHVsZS5Gb3JtVGV4dD5cclxuICAgICAgICAgICAgICAgIDxNYXJnaW5Ub3A+PC9NYXJnaW5Ub3A+XHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gY29sb3I9XCJicmFuZFwiIGxvb2s9XCJvdXRsaW5lZFwiIHNpemU9XCJtZWRpdW1cIiBob3ZlckNvbG9yPVwiZ3JlZW5cIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3RlLnNoZWxsLm9wZW5FeHRlcm5hbChcImh0dHBzOi8vbGlnaHRjb3JkLmRlcm9rdS54eXovTGlnaHRjb3JkQXBpL2RvY3NcIilcclxuICAgICAgICAgICAgICAgIH19IHdyYXBwZXI9e2ZhbHNlfT5cclxuICAgICAgICAgICAgICAgICAgICBEb2N1bWVudGF0aW9uXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Zvcm1Nb2R1bGUuRm9ybVNlY3Rpb24+LFxyXG4gICAgICAgICAgICBhbGxDb21wb25lbnRzLm1hcChjb21wID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBOYW1lID0gY29tcC5kaXNwbGF5TmFtZSB8fCBjb21wLm5hbWVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBQYXRoID0gYExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy4ke09iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpLmZpbmQoZSA9PiB3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzW2VdW2NvbXBOYW1lXSl9LiR7Y29tcE5hbWV9YFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxDb21wb25lbnRQcmV2aWV3IGtleT17Y29tcFBhdGh9IGNvbXA9e2NvbXB9IC8+XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXVxyXG4gICAgfVxyXG5cclxuICAgIGdldCByZW5kZXJzKCl7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5jbGFzcyBDb21wb25lbnRQcmV2aWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICB0YWI6IFwicHJldmlld1wiLFxyXG4gICAgICAgICAgICBlbGVtOiBwcm9wcy5jb21wLFxyXG4gICAgICAgICAgICBvcHRpb25zOiB7fVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5wcm9wcy5jb21wXHJcbiAgICAgICAgbGV0IEFsbFByZXZpZXdzID0gW11cclxuICAgICAgICBpZihjb21wLkFsbFByZXZpZXdzKUFsbFByZXZpZXdzID0gY29tcC5BbGxQcmV2aWV3c1xyXG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGVcclxuICAgICAgICBsZXQgZ2V0UHJvcHMgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaW5hbCA9IHt9XHJcbiAgICAgICAgICAgIEFsbFByZXZpZXdzLmZvckVhY2goY2F0ZWdvcnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmluYWxbT2JqZWN0LmtleXMoY2F0ZWdvcnlbMF0pWzBdXSA9IGNhdGVnb3J5WzBdW09iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXV1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGUub3B0aW9ucykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmluYWxba2V5XSA9IEFsbFByZXZpZXdzLmZpbmQoZSA9PiBlLmZpbmQoZSA9PiBlW2tleV0pKVtzdGF0ZS5vcHRpb25zW2tleV1dW2tleV1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZW5kZXJQcmV2aWV3ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e21hcmdpbjogXCIyMHB4XCJ9fT5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsIFxyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMzBweCAzMHB4XCIsIFxyXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG4gICAgICAgICAgICAgICAgfX0gY2xhc3NOYW1lPVwibGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICB7UmVhY3QuY3JlYXRlRWxlbWVudChjb21wLCBnZXRQcm9wcygpKX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlbmRlckNvZGUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7bWFyZ2luOiBcIjIwcHhcIn19PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCIzMHB4IDMwcHhcIiwgXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiXHJcbiAgICAgICAgICAgICAgICB9fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ1N1YlRpdGxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU1hcclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzeFwiIGNvbnRlbnQ9e2dlbmVyYXRlQ29kZShcImpzeFwiKX0vPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+ICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3RcclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5FcnJvckNhdGNoZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkNvZGVCbG9jayBsYW5ndWFnZT1cImpzXCIgY29udGVudD17Z2VuZXJhdGVDb2RlKFwicmVhY3RcIil9Lz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuRXJyb3JDYXRjaGVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZ2V0U3RyRm9yUHJvcCA9ICh2YWx1ZSwgY29tcFBhdGgsIGxhbmcpID0+IHtcclxuICAgICAgICAgICAgaWYodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIil7XHJcbiAgICAgICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS4kJHR5cGVvZiAmJiAodmFsdWUuJCR0eXBlb2YgPT09IFN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpIHx8IHZhbHVlLiQkdHlwZW9mID09PSAweGVhYzcpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihjb21wUGF0aCA9PT0gXCJMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihsYW5nID09PSBcInJlYWN0XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG5tYXJnaW5Ub3A6IFwiMjBweFwiLCBtYXJnaW5Cb3R0b206IFwiMjBweFwiXHJcbn19LFxyXG5SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1xyXG5iYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1zZWNvbmRhcnkpXCIsXHJcbnBhZGRpbmc6IFwiMzBweCAzMHB4XCIsXHJcbmJvcmRlclJhZGl1czogXCI4cHhcIlxyXG59LCBjbGFzc05hbWU6IFwibGMtdGFiLWJveC1zaGFkb3dcIiB9LFxyXG5SZWFjdC5jcmVhdGVFbGVtZW50KExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlLCBudWxsLCBcIlByZXZpZXcgdGFic1wiKVxyXG4pXHJcbilgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwianN4XCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IHN0eWxlPXt7XHJcbm1hcmdpblRvcDogXCIyMHB4XCIsIG1hcmdpbkJvdHRvbTogXCIyMHB4XCJcclxufX0+XHJcbjxkaXYgc3R5bGU9e3tcclxuICAgIGJhY2tncm91bmRDb2xvcjogXCJ2YXIoLS1iYWNrZ3JvdW5kLXNlY29uZGFyeSlcIiwgXHJcbiAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxyXG59fSBjbGFzc05hbWU9XCJsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlRpdGxlPlByZXZpZXcgdGFiczwvTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuVGl0bGU+XHJcbjwvZGl2PlxyXG48L2Rpdj5gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiWW91ciBjb21wb25lbnRzIGhlcmUuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgbnVsbCwgXCIgICAgXCIpXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBnZW5lcmF0ZUNvZGUgPSBmdW5jdGlvbihsYW5nKXsgLy8gY29kZSBmb3JtYXR0aW5nIGlzIGhhcmRcclxuICAgICAgICAgICAgY29uc3QgY29tcE5hbWUgPSBjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZVxyXG4gICAgICAgICAgICBsZXQgY2F0ZWdvcmllcyA9IE9iamVjdC5rZXlzKHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMpXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBDYXRlZ29yeSA9IGNhdGVnb3JpZXMuZmluZChlID0+IHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHNbZV1bY29tcE5hbWVdKVxyXG4gICAgICAgICAgICBjb25zdCBjb21wUGF0aCA9IGBMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuJHtjb21wQ2F0ZWdvcnl9LiR7Y29tcE5hbWV9YFxyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IGdldFByb3BzKClcclxuXHJcbiAgICAgICAgICAgIGlmKGxhbmcgPT09IFwianN4XCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb3BTdHJpbmdzID0gW11cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlblByb3AgPSBudWxsXHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGtleSA9PSBcImNoaWxkcmVuXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlblByb3AgPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyID0ga2V5K1wiPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBKU09OLnN0cmluZ2lmeShwcm9wc1trZXldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBgeyR7Z2V0U3RyRm9yUHJvcChwcm9wc1trZXldLCBjb21wUGF0aCwgbGFuZyl9fWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgbGV0IG9wZW5UYWdcclxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuUHJvcCl7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlblRhZyA9IGA8JHtjb21wUGF0aH0gJHtwcm9wU3RyaW5ncy5qb2luKFwiIFwiKX0+YFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9zZVRhZyA9IGA8LyR7Y29tcFBhdGh9PmBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7b3BlblRhZ31cXG4gICAgJHtjaGlsZHJlblByb3B9XFxuJHtjbG9zZVRhZ31gXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBvcGVuVGFnID0gYDwke2NvbXBQYXRofSAke3Byb3BTdHJpbmdzLmpvaW4oXCIgXCIpfS8+YFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcGVuVGFnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGxhbmcgPT09IFwicmVhY3RcIil7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbiB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgcHJvcHMuY2hpbGRyZW5cclxuICAgICAgICAgICAgICAgIGlmKGNoaWxkcmVuICYmIGNoaWxkcmVuLiQkdHlwZW9mICYmIChjaGlsZHJlbi4kJHR5cGVvZiA9PT0gU3ltYm9sLmZvcihcInJlYWN0LmVsZW1lbnRcIikgfHwgY2hpbGRyZW4uJCR0eXBlb2YgPT09IDB4ZWFjNykpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZ2V0U3RyRm9yUHJvcChjaGlsZHJlbiwgY29tcFBhdGgsIGxhbmcpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFN0cmluZ3MgPSBbXVxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdmlzaWJsZUtleSA9IC9bXlxcd1xcZF9dL2cudGVzdChrZXkpID8gSlNPTi5zdHJpbmdpZnkoa2V5KSA6IGtleVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHIgPSB2aXNpYmxlS2V5K1wiOiBcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBwcm9wc1trZXldID09PSBcInN0cmluZ1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IEpTT04uc3RyaW5naWZ5KHByb3BzW2tleV0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBnZXRTdHJGb3JQcm9wKHByb3BzW2tleV0sIGNvbXBQYXRoLCBsYW5nKS5zcGxpdChcIlxcblwiKS5tYXAoKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaSA9PT0gMClyZXR1cm4gc3RyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIgICAgXCIgKyBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuam9pbihcIlxcblwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9wU3RyaW5ncy5wdXNoKHN0cilcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcE9iamVjdCA9IFwie1wiXHJcbiAgICAgICAgICAgICAgICBpZihwcm9wU3RyaW5ncy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BTdHJpbmdzLmZvckVhY2goKHN0ciwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNMYXN0ID0gaSA9PT0gcHJvcFN0cmluZ3MubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNGaXJzdCA9IGkgPT09IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRmlyc3Qpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBcIixcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJcXG4gICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcE9iamVjdCArPSBzdHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNMYXN0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz1cIlxcbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BPYmplY3QgKz0gXCJ9XCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCBjaGlsZHJlbkRhdGEgPSB0eXBlb2YgY2hpbGRyZW4gPT09IFwic3RyaW5nXCIgJiYgY2hpbGRyZW4uc3RhcnRzV2l0aChcIlJlYWN0LmNyZWF0ZUVsZW1lbnRcIikgPyBjaGlsZHJlbiA6IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBSZWFjdC5jcmVhdGVFbGVtZW50KCR7Y29tcFBhdGh9LCAke3Byb3BPYmplY3R9LCAke2NoaWxkcmVuRGF0YX0pYFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBoZWxwID0gY29tcC5oZWxwIHx8IHt9XHJcbiAgICAgICAgbGV0IGluZm8gPSBoZWxwLmluZm8gPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJpbmZvXCI+XHJcbiAgICAgICAgICAgIHtoZWxwLmluZm99XHJcbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgIGxldCB3YXJuID0gaGVscC53YXJuID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwid2FyblwiPlxyXG4gICAgICAgICAgICB7aGVscC53YXJufVxyXG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICBsZXQgZGFuZ2VyID0gaGVscC5kYW5nZXIgPyA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94IHR5cGU9XCJkYW5nZXJcIj5cclxuICAgICAgICAgICAge2hlbHAuZGFuZ2VyfVxyXG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICBsZXQgZXJyb3IgPSBoZWxwLmVycm9yID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwiZXJyb3JcIj5cclxuICAgICAgICAgICAge2hlbHAuZXJyb3J9XHJcbiAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuQWxlcnRCb3g+IDogbnVsbFxyXG4gICAgICAgIGxldCBzdWNjZXNzID0gaGVscC5zdWNjZXNzID8gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5BbGVydEJveCB0eXBlPVwic3VjY2Vzc1wiPlxyXG4gICAgICAgICAgICB7aGVscC5zdWNjZXNzfVxyXG4gICAgICAgIDwvd2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLkFsZXJ0Qm94PiA6IG51bGxcclxuICAgICAgICByZXR1cm4gKDxkaXY+XHJcbiAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAgICAgIHtjb21wLmRpc3BsYXlOYW1lIHx8IGNvbXAubmFtZX1cclxuICAgICAgICAgICAgPC93aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmdlbmVyYWwuU2V0dGluZ3NUaXRsZT5cclxuICAgICAgICAgICAge2luZm99XHJcbiAgICAgICAgICAgIHtzdWNjZXNzfVxyXG4gICAgICAgICAgICB7d2Fybn1cclxuICAgICAgICAgICAge2Vycm9yfVxyXG4gICAgICAgICAgICB7ZGFuZ2VyfVxyXG4gICAgICAgICAgICB7QWxsUHJldmlld3MubWFwKGNhdGVnb3J5ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLm9uQ2xpY2spcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLnRleHQpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgIGlmKGNhdGVnb3J5WzBdLmNoaWxkcmVuKXJldHVybiBudWxsXHJcbiAgICAgICAgICAgICAgICBpZihjYXRlZ29yeS5sZW5ndGggPT09IDEpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKGNhdGVnb3J5WzBdKVswXVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5nZW5lcmFsLlNldHRpbmdTdWJUaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge2tleX1cclxuICAgICAgICAgICAgICAgICAgICA8L3dpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5TZXR0aW5nU3ViVGl0bGU+LFxyXG4gICAgICAgICAgICAgICAgICAgIDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Ecm9wZG93biBvcHRpb25zPXtjYXRlZ29yeS5tYXAoKGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJvcHQtXCIraW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogSlNPTi5zdHJpbmdpZnkoZVtPYmplY3Qua2V5cyhlKVswXV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KX0gdmFsdWU9e1wib3B0LVwiKyhzdGF0ZS5vcHRpb25zW2tleV0gfHwgXCIwXCIpfSBvbkNoYW5nZT17KHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUub3B0aW9ucywge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiAodmFsdWUudmFsdWUgfHwgXCIwXCIpLnJlcGxhY2UoXCJvcHQtXCIsIFwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH19IHNlYXJjaGFibGU9e3RydWV9Lz4sXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e21hcmdpbkJvdHRvbTogXCI4cHhcIn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuZ2VuZXJhbC5UYWJzIHRhYnM9e1t7bGFiZWw6IFwiUHJldmlld1wiLCBpZDogXCJwcmV2aWV3XCJ9LCB7bGFiZWw6IFwiQ29kZVwiLCBpZDogXCJjb2RlXCJ9XX0gXHJcbiAgICAgICAgICAgICAgICBhY3RpdmU9e3N0YXRlLnRhYn0gY2hpbGRyZW49e3N0YXRlLnRhYiA9PT0gXCJwcmV2aWV3XCIgPyByZW5kZXJQcmV2aWV3KCkgOiByZW5kZXJDb2RlKCl9IG9uQ2hhbmdlPXsodGFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYlxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9fS8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZX0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5pbXBvcnQgWFN2ZyBmcm9tIFwiLi94U3ZnXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCIuL2ljb25zL2VkaXRcIjtcclxuaW1wb3J0IERlbGV0ZUljb24gZnJvbSBcIi4vaWNvbnMvZGVsZXRlXCI7XHJcbmltcG9ydCBTd2l0Y2ggZnJvbSBcIi4vY29tcG9uZW50cy9zd2l0Y2hcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCB7IHByb2Nlc3NGaWxlIH0gZnJvbSBcIi4uL21vZHVsZXMvcGx1Z2luQ2VydGlmaWVyXCI7XHJcbmltcG9ydCBjb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuY29uc3QgYW5jaG9yQ2xhc3NlcyA9IEJEVjIuYW5jaG9yQ2xhc3NlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QbHVnaW5DYXJkIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gJiYgdHlwZW9mKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFNldHRpbmdzUGFuZWwpID09PSBcImZ1bmN0aW9uXCI7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nc1BhbmVsID0gXCJcIjtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0ID0gdGhpcy5lZGl0LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kZWxldGUgPSB0aGlzLmRlbGV0ZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogdGhpcy5wcm9wcy5lbmFibGVkLFxyXG4gICAgICAgICAgICBzZXR0aW5nczogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDAsXHJcbiAgICAgICAgICAgIHRydXN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzT3BlbjogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTNcIl0pIHJldHVybjtcclxuICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCFjb250YWluZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGBDb250YWluZXIgaXMgdW5kZWZpbmVkLmApKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgY1RvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjQm90dG9tID0gY1RvcCArIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICAoZVRvcCA8IGNUb3AgfHwgZUJvdHRvbSA+IGNCb3R0b20pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdGhpc05vZGUgPSB0aGlzLnJlZnMuY2FyZE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXNOb2RlLmNsb3Nlc3QoXCJkaXZbY2xhc3MqPVxcXCJjb250ZW50UmVnaW9uU2Nyb2xsZXItXFxcIl1cIilcclxuICAgICAgICAgICAgaWYgKCFpc0hpZGRlbihjb250YWluZXIsIHRoaXNOb2RlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzTm9kZU9mZnNldCA9IERPTS5vZmZzZXQodGhpc05vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSBET00ub2Zmc2V0KGNvbnRhaW5lcik7XHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzTm9kZU9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wICsgY29udGFpbmVyLnNjcm9sbFRvcCAtIDMwO1xyXG4gICAgICAgICAgICBET00uYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRQb2ludCA+IG9yaWdpbmFsKSBjb250YWluZXIuc2Nyb2xsVG9wID0gb3JpZ2luYWwgKyAocHJvZ3Jlc3MgKiAoZW5kUG9pbnQgLSBvcmlnaW5hbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29udGFpbmVyLnNjcm9sbFRvcCA9IG9yaWdpbmFsIC0gKHByb2dyZXNzICogKG9yaWdpbmFsIC0gZW5kUG9pbnQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiBcIj8/P1wiO1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2V0dGluZ3NDb21wb25lbnQoKSB7XHJcbiAgICAgICAgdHJ5IHsgdGhpcy5zZXR0aW5nc1BhbmVsID0gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCgpOyB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlscy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGdldCBzZXR0aW5ncyBwYW5lbCBmb3IgXCIgKyB0aGlzLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtY2FyZCBiZC1hZGRvbi1jYXJkIHNldHRpbmdzLW9wZW4gdWktc3dpdGNoLWl0ZW1cIiwgcmVmOiBcImNhcmROb2RlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtzdHlsZToge1wiZmxvYXRcIjogXCJyaWdodFwiLCBcImN1cnNvclwiOiBcInBvaW50ZXJcIn0sIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoWFN2ZywgbnVsbClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIiAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7dGhpcy5uYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZXR0aW5nc1BhbmVsICE9PSBcIm9iamVjdFwiICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHt0aGlzLm5hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogdGhpcy5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZFRpdGxlKG5hbWUsIHZlcnNpb24sIGF1dGhvcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gXCJ7e25hbWV9fSB2e3t2ZXJzaW9ufX0gYnkge3thdXRob3J9fVwiLnNwbGl0KC8oe3tbQS1aYS16XSt9fSkvKTtcclxuICAgICAgICBjb25zdCBuYW1lSW5kZXggPSB0aXRsZS5maW5kSW5kZXgocyA9PiBzID09IFwie3tuYW1lfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkgdGl0bGVbbmFtZUluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwibmFtZSBiZGEtbmFtZVwifSwgbmFtZSk7XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbkluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7dmVyc2lvbn19XCIpO1xyXG4gICAgICAgIGlmIChuYW1lSW5kZXgpIHRpdGxlW3ZlcnNpb25JbmRleF0gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcInZlcnNpb24gYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvckluZGV4ID0gdGl0bGUuZmluZEluZGV4KHMgPT4gcyA9PSBcInt7YXV0aG9yfX1cIik7XHJcbiAgICAgICAgaWYgKG5hbWVJbmRleCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHtjbGFzc05hbWU6IFwiYXV0aG9yIGJkYS1hdXRob3JcIn07XHJcbiAgICAgICAgICAgIGlmIChhdXRob3IubGluayB8fCBhdXRob3IuaWQpIHtcclxuICAgICAgICAgICAgICAgIHByb3BzLmNsYXNzTmFtZSArPSBgICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7YW5jaG9yQ2xhc3Nlcy5hbmNob3JVbmRlcmxpbmVPbkhvdmVyfWA7XHJcbiAgICAgICAgICAgICAgICBwcm9wcy50YXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhdXRob3IubGluaykgcHJvcHMuaHJlZiA9IGF1dGhvci5saW5rO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvci5pZCkgcHJvcHMub25DbGljayA9ICgpID0+IHtCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTsgQkRWMi5vcGVuRE0oYXV0aG9yLmlkKTt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRpdGxlW2F1dGhvckluZGV4XSA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoYXV0aG9yLmxpbmsgfHwgYXV0aG9yLmlkID8gXCJhXCIgOiBcInNwYW5cIiwgcHJvcHMsIGF1dGhvci5uYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRpdGxlLmZsYXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlTGluayh0aXRsZSwgdXJsKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcHMgPSB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgdGFyZ2V0OiBcIl9ibGFua1wifTtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJzdHJpbmdcIikgcHJvcHMuaHJlZiA9IHVybDtcclxuICAgICAgICBpZiAodHlwZW9mKHVybCkgPT0gXCJmdW5jdGlvblwiKSBwcm9wcy5vbkNsaWNrID0gKGV2ZW50KSA9PiB7ZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHVybCgpO307XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgcHJvcHMsIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBtYWtlQnV0dG9uKHRpdGxlLCBjaGlsZHJlbiwgYWN0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCBjb2xvcj1cImJsYWNrXCIgc2lkZT1cInRvcFwiIHRleHQ9e3RpdGxlfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1hZGRvbi1idXR0b25cIiBvbkNsaWNrPXthY3Rpb259PntjaGlsZHJlbn08L2Rpdj5cclxuICAgICAgICA8L1Rvb2x0aXBXcmFwPjtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIHRoaXMudW5tb3VudGVkID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaW5rcygpIHtcclxuICAgICAgICBjb25zdCBsaW5rcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFkZG9uID0gdGhpcy5wcm9wcy5hZGRvbjtcclxuICAgICAgICBpZiAoYWRkb24ud2Vic2l0ZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiV2Vic2l0ZVwiLCBhZGRvbi53ZWJzaXRlKSk7XHJcbiAgICAgICAgaWYgKGFkZG9uLnNvdXJjZSkgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU291cmNlXCIsIGFkZG9uLnNvdXJjZSkpO1xyXG4gICAgICAgIGlmIChhZGRvbi5pbnZpdGUpIHtcclxuICAgICAgICAgICAgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiU3VwcG9ydCBTZXJ2ZXJcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdGVyID0gL1xcLmdnXFwvKC4qKSQvO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBhZGRvbi5pbnZpdGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVzdGVyLnRlc3QoY29kZSkpIGNvZGUgPSBjb2RlLm1hdGNoKHRlc3RlcilbMV07XHJcbiAgICAgICAgICAgICAgICBCRFYyLkxheWVyU3RhY2sucG9wTGF5ZXIoKTtcclxuICAgICAgICAgICAgICAgIEJEVjIuSW52aXRlQWN0aW9ucy5hY2NlcHRJbnZpdGVBbmRUcmFuc2l0aW9uVG9JbnZpdGVDaGFubmVsKGNvZGUpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhZGRvbi5kb25hdGUpIGxpbmtzLnB1c2godGhpcy5tYWtlTGluayhcIkRvbmF0ZVwiLCBhZGRvbi5kb25hdGUpKTtcclxuICAgICAgICBpZiAoYWRkb24ucGF0cmVvbikgbGlua3MucHVzaCh0aGlzLm1ha2VMaW5rKFwiUGF0cmVvblwiLCBhZGRvbi5wYXRyZW9uKSk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmtzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBmb290ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmxpbmtzO1xyXG4gICAgICAgIHJldHVybiAobGlua3MubGVuZ3RoIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQtZm9vdGVyIGJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1saW5rcyBiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAuLi4obGlua3MubWFwKChlbGVtZW50LCBpbmRleCkgPT4gaW5kZXggPCBsaW5rcy5sZW5ndGggLSAxID8gW2VsZW1lbnQsIFwiIHwgXCJdIDogZWxlbWVudCkuZmxhdCgpKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZC1idXR0b24gYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMudG9nZ2xlICYmIHRoaXMucHJvcHMudG9nZ2xlKHRoaXMubmFtZSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXQoKSB7dGhpcy5wcm9wcy5lZGl0KHRoaXMubmFtZSk7fVxyXG4gICAgZGVsZXRlKCkge3RoaXMucHJvcHMucmVtb3ZlKHRoaXMubmFtZSk7fVxyXG4gICAgcmVsb2FkKCkge3RoaXMucHJvcHMucmVsb2FkKHRoaXMubmFtZSk7fVxyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldE5hbWUoKSA6IHRoaXMucHJvcHMuYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0IGF1dGhvcigpIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcodGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4gPyB0aGlzLnByb3BzLmFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IHRoaXMucHJvcHMuYWRkb24uYXV0aG9yKTt9XHJcbiAgICBnZXQgZGVzY3JpcHRpb24oKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKHRoaXMucHJvcHMuYWRkb24ucGx1Z2luID8gdGhpcy5wcm9wcy5hZGRvbi5wbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSA6IHRoaXMucHJvcHMuYWRkb24uZGVzY3JpcHRpb24pO31cclxuICAgIGdldCB2ZXJzaW9uKCkge3JldHVybiB0aGlzLmdldFN0cmluZyh0aGlzLnByb3BzLmFkZG9uLnBsdWdpbiA/IHRoaXMucHJvcHMuYWRkb24ucGx1Z2luLmdldFZlcnNpb24oKSA6IHRoaXMucHJvcHMuYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykgcmV0dXJuIHRoaXMuc2V0dGluZ3NDb21wb25lbnQ7XHJcbiAgICAgICAgY29uc3Qge2F1dGhvcklkLCBhdXRob3JMaW5rfSA9IHRoaXMucHJvcHMuYWRkb247XHJcblxyXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge31cclxuICAgICAgICBpZihzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNlwiXSl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmlzU2Nhbm5pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1NjYW5uaW5nID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0ZpbGUocmVzb2x2ZSh0aGlzLnByb3BzLmFkZG9uLmZpbGVuYW1lLmVuZHNXaXRoKFwiLnBsdWdpbi5qc1wiKSA/IGNvbnRlbnRNYW5hZ2VyLnBsdWdpbnNGb2xkZXIgOiBjb250ZW50TWFuYWdlci50aGVtZXNGb2xkZXIsIHRoaXMucHJvcHMuYWRkb24uZmlsZW5hbWUpLCAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy51bm1vdW50ZWQpcmV0dXJuXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNUcnVzdGVkOiByZXN1bHQuc3VzcGVjdCA/IFwic3VzcGVjdFwiIDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7fSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlLmlzVHJ1c3RlZCA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBcIiM0MDg3ZWRcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZS5pc1RydXN0ZWQgPT09IFwic3VzcGVjdFwiKXtcclxuICAgICAgICAgICAgICAgICAgICBzdHlsZS5ib3JkZXJDb2xvciA9IFwicmdiKDI0MCwgNzEsIDcxKVwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLWNhcmQgYmQtYWRkb24tY2FyZCBzZXR0aW5ncy1jbG9zZWQgdWktc3dpdGNoLWl0ZW1cIiwgc3R5bGV9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1hZGRvbi1oZWFkZXIgYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZC1jYXJkLXRpdGxlIGJkYS1oZWFkZXItdGl0bGVcIn0sIHRoaXMuYnVpbGRUaXRsZSh0aGlzLm5hbWUsIHRoaXMudmVyc2lvbiwge25hbWU6IHRoaXMuYXV0aG9yLCBpZDogYXV0aG9ySWQsIGxpbms6IGF1dGhvckxpbmt9KSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtYWRkb24tY29udHJvbHMgYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmVkaXQgJiYgdGhpcy5tYWtlQnV0dG9uKFwiRWRpdFwiLCA8RWRpdEljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmVkaXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnJlbW92ZSAmJiB0aGlzLm1ha2VCdXR0b24oXCJEZWxldGVcIiwgPERlbGV0ZUljb24gY2xhc3NOYW1lPVwiYmQtaWNvblwiIC8+LCB0aGlzLmRlbGV0ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVsb2FkICYmIHRoaXMubWFrZUJ1dHRvbihcIlJlbG9hZFwiLCA8UmVsb2FkSWNvbiBjbGFzc05hbWU9XCJiZC1pY29uXCIgLz4sIHRoaXMucmVsb2FkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTd2l0Y2gsIHtvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXNjcm9sbGVyLXdyYXAgYmRhLWRlc2NyaXB0aW9uLXdyYXAgc2Nyb2xsZXItd3JhcCBmYWRlXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtc2Nyb2xsZXIgYmQtYWRkb24tZGVzY3JpcHRpb24gYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCB0aGlzLmRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB0aGlzLmZvb3RlclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IG9yaWdpbmFsUmVuZGVyID0gVjJDX1BsdWdpbkNhcmQucHJvdG90eXBlLnJlbmRlcjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFYyQ19QbHVnaW5DYXJkLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7IiwiaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSBcIi4vZXJyb3JCb3VuZGFyeVwiO1xyXG5pbXBvcnQgQ29udGVudENvbHVtbiBmcm9tIFwiLi9jb250ZW50Q29sdW1uXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuL3JlbG9hZEljb25cIjtcclxuaW1wb3J0IEFkZG9uQ2FyZCBmcm9tIFwiLi9hZGRvbmNhcmRcIjtcclxuaW1wb3J0IERyb3Bkb3duIGZyb20gXCIuL2NvbXBvbmVudHMvZHJvcGRvd25cIjtcclxuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9jb21wb25lbnRzL3NlYXJjaFwiO1xyXG5cclxuaW1wb3J0IHtzZXR0aW5nc0Nvb2tpZSwgcGx1Z2luQ29va2llLCB0aGVtZUNvb2tpZSwgYmRwbHVnaW5zLCBiZHRoZW1lc30gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi4vbW9kdWxlcy9jb250ZW50TWFuYWdlclwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgcGx1Z2luTW9kdWxlIGZyb20gXCIuLi9tb2R1bGVzL3BsdWdpbk1vZHVsZVwiO1xyXG5pbXBvcnQgdGhlbWVNb2R1bGUgZnJvbSBcIi4uL21vZHVsZXMvdGhlbWVNb2R1bGVcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuLi9tb2R1bGVzL3dlYnBhY2tNb2R1bGVzXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi4vbW9kdWxlcy9iZEFwaVwiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIjtcclxuaW1wb3J0IFRvb2x0aXBXcmFwIGZyb20gXCIuL3Rvb2x0aXBXcmFwXCI7XHJcbmltcG9ydCBiZEV2ZW50cyBmcm9tIFwiLi4vbW9kdWxlcy9iZEV2ZW50c1wiO1xyXG5pbXBvcnQgRW11bGF0ZWRUb29sdGlwIGZyb20gXCIuL3Rvb2x0aXBcIjtcclxuXHJcbmNvbnN0IFRvb2x0aXAgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlEaXNwbGF5TmFtZShcIlRvb2x0aXBcIik7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIucmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJkTGlzdCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtzb3J0OiBcIm5hbWVcIiwgYXNjZW5kaW5nOiB0cnVlLCBxdWVyeTogXCJcIn07XHJcbiAgICAgICAgdGhpcy5pc1BsdWdpbnMgPSB0aGlzLnByb3BzLnR5cGUgPT0gXCJwbHVnaW5zXCI7XHJcbiAgICAgICAgdGhpcy5jb29raWUgPSB0aGlzLmlzUGx1Z2lucyA/IHBsdWdpbkNvb2tpZSA6IHRoZW1lQ29va2llO1xyXG4gICAgICAgIHRoaXMubWFuYWdlciA9IHRoaXMuaXNQbHVnaW5zID8gcGx1Z2luTW9kdWxlIDogdGhlbWVNb2R1bGU7XHJcblxyXG4gICAgICAgIHRoaXMuc29ydCA9IHRoaXMuc29ydC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IHRoaXMucmV2ZXJzZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoID0gdGhpcy5zZWFyY2guYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkFkZG9uQ2hhbmdlcyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQWRkb25DaGFuZ2VzID0gdGhpcy5vbkFkZG9uQ2hhbmdlcy5iaW5kKHRoaXMpXHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgICAgICBjb25zdCB0eXBlID0gKHRoaXMuaXNQbHVnaW5zID8gXCJwbHVnaW5cIiA6IFwidGhlbWVcIikgKyBcIi1cIlxyXG4gICAgICAgIGJkRXZlbnRzLm9uKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXVubG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vbihgJHt0eXBlfXJlbG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpe1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSAodGhpcy5pc1BsdWdpbnMgPyBcInBsdWdpblwiIDogXCJ0aGVtZVwiKSArIFwiLVwiXHJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9bG9hZGVkYCwgdGhpcy5vbkFkZG9uQ2hhbmdlcylcclxuICAgICAgICBiZEV2ZW50cy5vZmYoYCR7dHlwZX11bmxvYWRlZGAsIHRoaXMub25BZGRvbkNoYW5nZXMpXHJcbiAgICAgICAgYmRFdmVudHMub2ZmKGAke3R5cGV9cmVsb2FkZWRgLCB0aGlzLm9uQWRkb25DaGFuZ2VzKVxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Gb2xkZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGwgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGw7XHJcbiAgICAgICAgY29uc3Qgb3BlbiA9IHNoZWxsLm9wZW5QYXRoIHx8IHNoZWxsLm9wZW5JdGVtO1xyXG4gICAgICAgIG9wZW4odGhpcy5pc1BsdWdpbnMgPyBDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyIDogQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0KG5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhuYW1lKTtcclxuICAgICAgICB0aGlzLm1hbmFnZXIuZWRpdChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGUobmFtZSkge1xyXG4gICAgICAgIGNvbnN0IHNob3VsZERlbGV0ZSA9IGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZShuYW1lKTtcclxuICAgICAgICBpZiAoIXNob3VsZERlbGV0ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMubWFuYWdlci5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBCZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwoXCJBcmUgWW91IFN1cmU/XCIsIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlICR7bmFtZX0/YCwge1xyXG4gICAgICAgICAgICAgICAgZGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29uZmlybVRleHQ6IFwiRGVsZXRlXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtyZXNvbHZlKHRydWUpO30sXHJcbiAgICAgICAgICAgICAgICBvbkNhbmNlbDogKCkgPT4ge3Jlc29sdmUoZmFsc2UpO31cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcHRpb25zKCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJOYW1lXCIsIHZhbHVlOiBcIm5hbWVcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJBdXRob3JcIiwgdmFsdWU6IFwiYXV0aG9yXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiVmVyc2lvblwiLCB2YWx1ZTogXCJ2ZXJzaW9uXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiUmVjZW50bHkgQWRkZWRcIiwgdmFsdWU6IFwiYWRkZWRcIn0sXHJcbiAgICAgICAgICAgIHtsYWJlbDogXCJMYXN0IE1vZGlmaWVkXCIsIHZhbHVlOiBcIm1vZGlmaWVkXCJ9LFxyXG4gICAgICAgICAgICB7bGFiZWw6IFwiRmlsZSBTaXplXCIsIHZhbHVlOiBcInNpemVcIn0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZGlyZWN0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICB7bGFiZWw6IFwiQXNjZW5kaW5nXCIsIHZhbHVlOiB0cnVlfSxcclxuICAgICAgICAgICAge2xhYmVsOiBcIkRlc2NlbmRpbmdcIiwgdmFsdWU6IGZhbHNlfVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJzZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2FzY2VuZGluZzogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c29ydDogdmFsdWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtxdWVyeTogZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9wcyhhZGRvbikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGtleTogdGhpcy5nZXROYW1lKGFkZG9uKSxcclxuICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5jb29raWVbdGhpcy5nZXROYW1lKGFkZG9uKV0sXHJcbiAgICAgICAgICAgIHRvZ2dsZTogdGhpcy5tYW5hZ2VyLnRvZ2dsZS5iaW5kKHRoaXMubWFuYWdlciksXHJcbiAgICAgICAgICAgIGVkaXQ6IHNldHRpbmdzQ29va2llW1wiZm9yay1wcy03XCJdID8gdGhpcy5lZGl0LmJpbmQodGhpcykgOiBudWxsLFxyXG4gICAgICAgICAgICByZW1vdmU6IHRoaXMuZGVsZXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGFkZG9uOiBhZGRvbixcclxuICAgICAgICAgICAgaGFzaDogYWRkb24uaGFzaFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiPz8/XCI7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiID8gdmFsdWUgOiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsaXN0KCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudHlwZSA9PT0gXCJwbHVnaW5zXCIgPyBPYmplY3QudmFsdWVzKGJkcGx1Z2lucykgOiBPYmplY3QudmFsdWVzKGJkdGhlbWVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBZGRvbnMoKSB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkQWRkb25zID0gdGhpcy5saXN0LnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gdGhpcy5zdGF0ZS5zb3J0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zdGF0ZS5zb3J0LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGEucGx1Z2luICYmIGEucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGEucGx1Z2luW2BnZXQke2NhcH1gXSgpKSA6IHRoaXMuZ2V0U3RyaW5nKGFbdGhpcy5zdGF0ZS5zb3J0XSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IGIucGx1Z2luICYmIGIucGx1Z2luW2BnZXQke2NhcH1gXSA/IHRoaXMuZ2V0U3RyaW5nKGIucGx1Z2luW2BnZXQke2NhcH1gXSgpKSAgOiB0aGlzLmdldFN0cmluZyhiW3RoaXMuc3RhdGUuc29ydF0pO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKGZpcnN0KSA9PSBcInN0cmluZ1wiKSByZXR1cm4gZmlyc3QudG9Mb2NhbGVMb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKHNlY29uZC50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0ID4gc2Vjb25kKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgaWYgKHNlY29uZCA+IGZpcnN0KSByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5hc2NlbmRpbmcpIHNvcnRlZEFkZG9ucy5yZXZlcnNlKCk7XHJcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBhID0gMDsgYSA8IHNvcnRlZEFkZG9ucy5sZW5ndGg7IGErKykge1xyXG4gICAgICAgICAgICBjb25zdCBhZGRvbiA9IHNvcnRlZEFkZG9uc1thXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUucXVlcnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldE5hbWUoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRBdXRob3IoYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldERlc2NyaXB0aW9uKGFkZG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24oYWRkb24pO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIG1hdGNoZXMgPSBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0aG9yKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCBhdXRob3IudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbikgbWF0Y2hlcyA9IG1hdGNoZXMgfHwgZGVzY3JpcHRpb24udG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnN0YXRlLnF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSBtYXRjaGVzID0gbWF0Y2hlcyB8fCB2ZXJzaW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcyhhZGRvbik7XHJcbiAgICAgICAgICAgIHJlbmRlcmVkLnB1c2goPEVycm9yQm91bmRhcnk+PEFkZG9uQ2FyZCB7Li4ucHJvcHN9IHJlbG9hZD17IXNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIHRoaXMubWFuYWdlci5yZWxvYWQuYmluZCh0aGlzLm1hbmFnZXIpfSAvPjwvRXJyb3JCb3VuZGFyeT4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVuZGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmFtZShhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0TmFtZSgpIDogYWRkb24ubmFtZSk7fVxyXG4gICAgZ2V0QXV0aG9yKGFkZG9uKSB7cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKGFkZG9uLnBsdWdpbiA/IGFkZG9uLnBsdWdpbi5nZXRBdXRob3IoKSA6IGFkZG9uLmF1dGhvcik7fVxyXG4gICAgZ2V0RGVzY3JpcHRpb24oYWRkb24pIHtyZXR1cm4gdGhpcy5nZXRTdHJpbmcoYWRkb24ucGx1Z2luID8gYWRkb24ucGx1Z2luLmdldERlc2NyaXB0aW9uKCkgOiBhZGRvbi5kZXNjcmlwdGlvbik7fVxyXG4gICAgZ2V0VmVyc2lvbihhZGRvbikge3JldHVybiB0aGlzLmdldFN0cmluZyhhZGRvbi5wbHVnaW4gPyBhZGRvbi5wbHVnaW4uZ2V0VmVyc2lvbigpIDogYWRkb24udmVyc2lvbik7fVxyXG5cclxuICAgIHJlbmRlckNoZWNrVXBkYXRlcygpe1xyXG4gICAgICAgIGlmKCF3aW5kb3cuWmVyZXNQbHVnaW5MaWJyYXJ5KXJldHVybiBudWxsXHJcbiAgICAgICAgaWYoIXdpbmRvdy5QbHVnaW5VcGRhdGVzKXJldHVybiBudWxsXHJcbiAgICAgICAgaWYodHlwZW9mIHdpbmRvdy5QbHVnaW5VcGRhdGVzLmNoZWNrQWxsICE9PSBcImZ1bmN0aW9uXCIpcmV0dXJuIG51bGxcclxuICAgICAgICBpZighdGhpcy5pc1BsdWdpbnMpcmV0dXJuIG51bGxcclxuXHJcbiAgICAgICAgbGV0IHRvb2x0aXBJc1Nob3dpbmcgPSBmYWxzZVxyXG4gICAgICAgIGxldCB0b29sdGlwXHJcbiAgICAgICAgcmV0dXJuIDxUb29sdGlwV3JhcCB0ZXh0PVwiQ2hlY2tzIGZvciB1cGRhdGVzIG9mIHBsdWdpbnMgdGhhdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4gUmlnaHQtY2xpY2sgZm9yIGEgbGlzdC5cIj5cclxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3ttYXJnaW5MZWZ0OiBcIjEwcHhcIn19IG9uTW91c2VMZWF2ZT17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBJc1Nob3dpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuaGlkZSgpXHJcbiAgICAgICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxMaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLkJ1dHRvbiByZWY9XCJjaGVja1VwZGF0ZUJ1dHRvblwiIGNvbG9yPVwiYnJhbmRcIiBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHMuc2hvd1RvYXN0KFwiUGx1Z2luIHVwZGF0ZSBjaGVjayBpbiBwcm9ncmVzcy5cIiwge3R5cGU6IFwiaW5mb1wifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LlBsdWdpblVwZGF0ZXMuY2hlY2tBbGwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJQbHVnaW4gdXBkYXRlIGNoZWNrIGNvbXBsZXRlLlwiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGNoZWNraW5nIHVwZGF0ZS5cIiwge3R5cGU6IFwiZXJyb3JcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFV0aWxzLnNob3dUb2FzdChcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgY2hlY2tpbmcgdXBkYXRlLlwiLCB7dHlwZTogXCJlcnJvclwifSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9fSB3cmFwcGVyPXtmYWxzZX0gZGlzYWJsZWQ9e2ZhbHNlfSBvblJpZ2h0Q2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZighdGhpcy5yZWZzLmNoZWNrVXBkYXRlQnV0dG9uKXJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LlBsdWdpblVwZGF0ZXMgfHwgIXdpbmRvdy5QbHVnaW5VcGRhdGVzLnBsdWdpbnMpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBpZih0b29sdGlwSXNTaG93aW5nKXJldHVyblxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBuZXcgRW11bGF0ZWRUb29sdGlwKHRoaXMucmVmcy5jaGVja1VwZGF0ZUJ1dHRvbi5yZWZzLm9yaWdpbmFsLnJlZnMuYnV0dG9uLCBPYmplY3QudmFsdWVzKHdpbmRvdy5QbHVnaW5VcGRhdGVzLnBsdWdpbnMpLm1hcChwID0+IHAubmFtZSkuam9pbihcIiwgXCIpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZGU6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaEV2ZW50czogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXAuc2hvdygpXHJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcElzU2hvd2luZyA9IHRydWVcclxuICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgIENoZWNrIGZvciBVcGRhdGVzXHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9Ub29sdGlwV3JhcD5cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3QgcmVmcmVzaEljb24gPSA8VG9vbHRpcCBjb2xvcj1cImJsYWNrXCIgcG9zaXRpb249XCJ0b3BcIiB0ZXh0PVwiUmVsb2FkIExpc3RcIj5cclxuICAgICAgICAgICAgeyhwcm9wcykgPT4gXHJcbiAgICAgICAgICAgIDxSZWxvYWRJY29uIHsuLi5wcm9wc30gY2xhc3NOYW1lPVwiYmQtaWNvbiBiZC1yZWxvYWQgYmQtcmVsb2FkLWhlYWRlclwiIHNpemU9XCIxOHB4XCIgb25DbGljaz17YXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQbHVnaW5zKSBwbHVnaW5Nb2R1bGUudXBkYXRlUGx1Z2luTGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGVtZU1vZHVsZS51cGRhdGVUaGVtZUxpc3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgICAgICAgICAgfX0gLz5cclxuICAgICAgICAgICAgfTwvVG9vbHRpcD47XHJcbiAgICAgICAgY29uc3QgYWRkb25DYXJkcyA9IHRoaXMuZ2V0QWRkb25zKCk7XHJcblxyXG4gICAgICAgIHJldHVybiA8Q29udGVudENvbHVtbiB0aXRsZT17YCR7dGhpcy5wcm9wcy50eXBlLnRvVXBwZXJDYXNlKCl94oCUJHthZGRvbkNhcmRzLmxlbmd0aH1gfT5cclxuICAgICAgICAgICAgPExpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uIGtleT1cImZvbGRlci1idXR0b25cIiBjb2xvcj1cImJyYW5kXCIgXHJcbiAgICAgICAgICAgICAgICBsb29rPVwiZmlsbGVkXCIgc2l6ZT1cIm1pblwiIGhvdmVyQ29sb3I9XCJkZWZhdWx0XCIgb25DbGljaz17dGhpcy5vcGVuRm9sZGVyLmJpbmQodGhpcyl9IHdyYXBwZXI9e2ZhbHNlfVxyXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIlxyXG4gICAgICAgICAgICAgICAgfX0+XHJcbiAgICAgICAgICAgICAgICBPcGVuIHt0aGlzLmlzUGx1Z2lucyA/IFwiUGx1Z2luXCIgOiBcIlRoZW1lXCJ9IEZvbGRlclxyXG4gICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICB7dGhpcy5yZW5kZXJDaGVja1VwZGF0ZXMoKX1cclxuICAgICAgICAgICAgeyFzZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiByZWZyZXNoSWNvbn1cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1jb250cm9scyBiZC1hZGRvbi1jb250cm9sc1wiPlxyXG4gICAgICAgICAgICAgICAgPFNlYXJjaCBvbkNoYW5nZT17dGhpcy5zZWFyY2h9IHBsYWNlaG9sZGVyPXtgU2VhcmNoICR7dGhpcy5wcm9wcy50eXBlfS4uLmB9IC8+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLWFkZG9uLWRyb3Bkb3duc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+U29ydCBieTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5zb3J0T3B0aW9uc30gb25DaGFuZ2U9e3RoaXMuc29ydH0gc3R5bGU9XCJ0cmFuc3BhcmVudFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3Qtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmQtbGFiZWxcIj5PcmRlcjo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd24gb3B0aW9ucz17dGhpcy5kaXJlY3Rpb25zfSBvbkNoYW5nZT17dGhpcy5yZXZlcnNlfSBzdHlsZT1cInRyYW5zcGFyZW50XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZGEtc2xpc3QgYmQtYWRkb24tbGlzdFwiPnthZGRvbkNhcmRzfTwvZGl2PlxyXG4gICAgICAgIDwvQ29udGVudENvbHVtbj5cclxuICAgIH1cclxufVxyXG5cclxuY29uc3Qgb3JpZ2luYWxSZW5kZXIgPSBDYXJkTGlzdC5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQ2FyZExpc3QucHJvdG90eXBlLCBcInJlbmRlclwiLCB7XHJcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICBzZXQ6IGZ1bmN0aW9uKCkge2NvbnNvbGUud2FybihcIkFkZG9uIHBvbGljeSBmb3IgcGx1Z2lucyAjNSBodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3dpa2kvQWRkb24tUG9saWNpZXMjcGx1Z2luc1wiKTt9LFxyXG4gICAgZ2V0OiAoKSA9PiBvcmlnaW5hbFJlbmRlclxyXG59KTsiLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQkRMb2dvIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJzdmdcIixcclxuICAgICAgICAgICAge2hlaWdodDogXCIxMDAlXCIsIHdpZHRoOiB0aGlzLnByb3BzLnNpemUgfHwgXCIxNnB4XCIsIGNsYXNzTmFtZTogXCJiZC1sb2dvIFwiICsgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHN0eWxlOiB7ZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLCBjbGlwUnVsZTogXCJldmVub2RkXCIsIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIiwgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIn0sIHZpZXdCb3g6IFwiMCAwIDIwMDAgMjAwMFwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwibWV0YWRhdGFcIiwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZpbHRlclwiLCB7aWQ6IFwic2hhZG93MVwifSwgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmVEcm9wU2hhZG93XCIsIHtcImR4XCI6IFwiMjBcIiwgXCJkeVwiOiBcIjBcIiwgXCJzdGREZXZpYXRpb25cIjogXCIyMFwiLCBcImZsb29kLWNvbG9yXCI6IFwicmdiYSgwLDAsMCwwLjM1KVwifSkpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZmlsdGVyXCIsIHtpZDogXCJzaGFkb3cyXCJ9LCBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmZURyb3BTaGFkb3dcIiwge1wiZHhcIjogXCIxNVwiLCBcImR5XCI6IFwiMFwiLCBcInN0ZERldmlhdGlvblwiOiBcIjIwXCIsIFwiZmxvb2QtY29sb3JcIjogXCJyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpXCJ9KSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmaWx0ZXJcIiwge2lkOiBcInNoYWRvdzNcIn0sIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImZlRHJvcFNoYWRvd1wiLCB7XCJkeFwiOiBcIjEwXCIsIFwiZHlcIjogXCIwXCIsIFwic3RkRGV2aWF0aW9uXCI6IFwiMjBcIiwgXCJmbG9vZC1jb2xvclwiOiBcInJnYmEoMCwwLDAsMC4zNSlcIn0pKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIG51bGwsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzMpXCJ9LCBkOiBcIk0xMTk1LjQ0KzEzNS40NDJMMTE5NS40NCsxMzUuNDQyTDk5Ny42KzEzNi40NDJDMTAyNC4yKzE0OS43NDIrMTE3MC4zNCsxNjMuNTQyKzExOTMuNjQrMTc5Ljc0MkMxMjY0LjM0KzIyOC44NDIrMTMxOS43NCsyOTEuMjQyKzEzNTguMjQrMzY1LjA0MkMxMzk4LjE0KzQ0MS42NDIrMTQxOS43NCs1MzAuNjQyKzE0MjIuNTQrNjI5LjY0MkwxNDIyLjU0KzYzMC44NDJMMTQyMi41NCs2MzIuMDQyQzE0MjIuNTQrNzczLjE0MisxNDIyLjU0KzEyMjguMTQrMTQyMi41NCsxMzY5LjE0TDE0MjIuNTQrMTM3MC4zNEwxNDIyLjU0KzEzNzEuNTRDMTQxOS44NCsxNDcwLjU0KzEzOTguMjQrMTU1OS41NCsxMzU4LjI0KzE2MzYuMTRDMTMxOS43NCsxNzA5Ljk0KzEyNjQuNDQrMTc3Mi4zNCsxMTkzLjY0KzE4MjEuNDRDMTE3MS4wNCsxODM3LjE0KzEwMjUuNysxODUwLjU0KzEwMDArMTg2My41NEwxMTkzLjU0KzE4NjQuNTRDMTUzOS43NCsxODY2LjQ0KzE4NjQuNTQrMTY5My4zNCsxODY0LjU0KzEyOTYuNjRMMTg2NC41NCs3MTYuOTQyQzE4NjYuNDQrMzEyLjQ0MisxNTQxLjY0KzEzNS40NDIrMTE5NS40NCsxMzUuNDQyWlwiLCBmaWxsOiBcIiMxNzE3MTdcIiwgb3BhY2l0eTogXCIxXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge3N0eWxlOiB7ZmlsdGVyOiBcInVybCgjc2hhZG93MilcIn0sIGQ6IFwiTTE2OTUuNTQrNjMxLjQ0MkMxNjg1Ljg0KzI3OC4wNDIrMTQwOS4zNCsxMzUuNDQyKzEwNTIuOTQrMTM1LjQ0MkwzNjEuNzQrMTM2LjQ0Mkw4MDMuNzQrNDkwLjQ0MkwxMDYwLjc0KzQ5MC40NDJDMTMzNS4yNCs0OTAuNDQyKzEzMzUuMjQrODM1LjM0MisxMDYwLjc0KzgzNS4zNDJMMTA2MC43NCsxMTY0Ljg0QzExNTAuMjIrMTE2NC44NCsxMjEwLjUzKzEyMDEuNDgrMTI0MS42OCsxMjUwLjg3QzEzMDYuMDcrMTM1MysxMjQ1Ljc2KzE1MDkuNjQrMTA2MC43NCsxNTA5LjY0TDM2MS43NCsxODYzLjU0TDEwNTIuOTQrMTg2NC41NEMxNDA5LjI0KzE4NjQuNTQrMTY4NS43NCsxNzIxLjk0KzE2OTUuNTQrMTM2OC41NEMxNjk1LjU0KzEyMDUuOTQrMTY1MS4wNCsxMDg0LjQ0KzE1NzIuNjQrOTk5Ljk0MkMxNjUxLjA0KzkxNS41NDIrMTY5NS41NCs3OTQuMDQyKzE2OTUuNTQrNjMxLjQ0MlpcIiwgZmlsbDogXCIjM0U4MkU1XCIsIG9wYWNpdHk6IFwiMVwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtzdHlsZToge2ZpbHRlcjogXCJ1cmwoI3NoYWRvdzEpXCJ9LCBkOiBcIk0xNDY5LjI1KzYzMS40NDJDMTQ1OS41NSsyNzguMDQyKzExODMuMDUrMTM1LjQ0Mis4MjYuNjUrMTM1LjQ0MkwxMzUuNDUrMTM1LjQ0MkwxMzUuNDUrMTAwNEMxMzUuNDUrMTAwNCsxMzUuNDI3KzEyNTUuMjErMzU1LjYyNisxMjU1LjIxQzU3NS44MjUrMTI1NS4yMSs1NzUuODQ4KzEwMDQrNTc1Ljg0OCsxMDA0TDU3Ny40NSs0OTAuNDQyTDgzNC40NSs0OTAuNDQyQzExMDguOTUrNDkwLjQ0MisxMTA4Ljk1KzgzNS4zNDIrODM0LjQ1KzgzNS4zNDJMNjY0LjY1KzgzNS4zNDJMNjY0LjY1KzExNjQuODRMODM0LjQ1KzExNjQuODRDOTIzLjkzMisxMTY0Ljg0Kzk4NC4yNDQrMTIwMS40OCsxMDE1LjM5KzEyNTAuODdDMTA3OS43OCsxMzUzKzEwMTkuNDcrMTUwOS42NCs4MzQuNDUrMTUwOS42NEwxMzUuNDUrMTUwOS42NEwxMzUuNDUrMTg2NC41NEw4MjYuNjUrMTg2NC41NEMxMTgyLjk1KzE4NjQuNTQrMTQ1OS40NSsxNzIxLjk0KzE0NjkuMjUrMTM2OC41NEMxNDY5LjI1KzEyMDUuOTQrMTQyNC43NSsxMDg0LjQ0KzEzNDYuMzUrOTk5Ljk0MkMxNDI0Ljc1KzkxNS41NDIrMTQ2OS4yNSs3OTQuMDQyKzE0NjkuMjUrNjMxLjQ0MlpcIiwgZmlsbDogXCIjRkZGRkZGXCIsIG9wYWNpdHk6IFwiMVwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX0NoZWNrYm94IGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWQgfHwgZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImxpXCIsXHJcbiAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94IFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3gsIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImNoZWNrYm94LWlubmVyIFwiK0JETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94SW5uZXIpWzBdLmNoZWNrYm94SW5uZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjbGFzc05hbWU6IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNoZWNrYm94RWxlbWVudClbMF0uY2hlY2tib3hFbGVtZW50LCBjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJjaGVja2JveFwifSksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMudGV4dFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5pZCwgIXRoaXMuc3RhdGUuY2hlY2tlZCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGNoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBBcnJvdyBmcm9tIFwiLi4vaWNvbnMvZG93bmFycm93XCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VsZWN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7b3BlbjogZmFsc2UsIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlIHx8IHRoaXMucHJvcHMub3B0aW9uc1swXS52YWx1ZX07XHJcbiAgICAgICAgdGhpcy5kcm9wZG93biA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVudSA9IHRoaXMuc2hvd01lbnUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmhpZGVNZW51ID0gdGhpcy5oaWRlTWVudS5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dNZW51KGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtvcGVuOiB0cnVlfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5oaWRlTWVudSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGlkZU1lbnUoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7b3BlbjogZmFsc2V9LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLmhpZGVNZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3ZhbHVlfSk7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DaGFuZ2UpIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3RlZCgpIHtyZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmZpbmQobyA9PiBvLnZhbHVlID09IHRoaXMuc3RhdGUudmFsdWUpO31cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LW9wdGlvbnNcIj5cclxuICAgICAgICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAob3B0ID0+IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qtb3B0aW9uJHtzZWxlY3RlZC52YWx1ZSA9PSBvcHQudmFsdWUgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gfSBvbkNsaWNrPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcywgb3B0LnZhbHVlKX0+e29wdC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgKX1cclxuICAgICAgICA8L2Rpdj47XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5wcm9wcy5zdHlsZSA9PSBcInRyYW5zcGFyZW50XCIgPyBcIiBiZC1zZWxlY3QtdHJhbnNwYXJlbnRcIiA6IFwiXCI7XHJcbiAgICAgICAgY29uc3QgaXNPcGVuID0gdGhpcy5zdGF0ZS5vcGVuID8gXCIgbWVudS1vcGVuXCIgOiBcIlwiO1xyXG4gICAgICAgIHJldHVybiAgPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJiZC1zZWxlY3QtdmFsdWVcIj57dGhpcy5zZWxlY3RlZC5sYWJlbH08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8QXJyb3cgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LWFycm93XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5vcGVuICYmIHRoaXMub3B0aW9uc31cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufVxyXG5cclxuLy8gcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXdyYXBcIj5cclxuLy8gPGxhYmVsIGNsYXNzTmFtZT1cImJkLWxhYmVsXCI+e3RoaXMucHJvcHMubGFiZWx9PC9sYWJlbD5cclxuLy8gPGRpdiBjbGFzc05hbWU9e2BiZC1zZWxlY3Qke3N0eWxlfSR7aXNPcGVufWB9IG9uQ2xpY2s9e3RoaXMuc2hvd01lbnV9IHJlZj17dGhpcy5kcm9wZG93bn0+XHJcbi8vICAgICA8ZGl2IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1jb250cm9sc1wiPlxyXG4vLyAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmQtc2VsZWN0LXZhbHVlXCI+e3RoaXMuc2VsZWN0ZWQubGFiZWx9PC9kaXY+XHJcbi8vICAgICAgICAgPEFycm93IGNsYXNzTmFtZT1cImJkLXNlbGVjdC1hcnJvd1wiIC8+XHJcbi8vICAgICA8L2Rpdj5cclxuLy8gPC9kaXY+XHJcbi8vIHt0aGlzLnN0YXRlLm9wZW4gJiYgdGhpcy5vcHRpb25zfVxyXG4vLyA8L2Rpdj47IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIi4uL2ljb25zL3NlYXJjaFwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBmb2N1c2VkOiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBbXCJiZC1zZWFyY2gtd3JhcHBlclwiXVxyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuZm9jdXNlZCljbGFzc05hbWUucHVzaChcImZvY3VzZWRcIilcclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZS5qb2luKFwiIFwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfSBvbktleURvd249e3RoaXMucHJvcHMub25LZXlEb3dufSB0eXBlPVwidGV4dFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJkLXNlYXJjaFwiIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLnBsYWNlaG9sZGVyfSBtYXhMZW5ndGg9XCI1MFwiIFxyXG4gICAgICAgICAgICAgICAgICAgIG9uRm9jdXM9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Zm9jdXNlZDogdHJ1ZX0pXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gb25CbHVyPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2ZvY3VzZWQ6IGZhbHNlfSlcclxuICAgICAgICAgICAgICAgICAgICB9fS8+XHJcbiAgICAgICAgICAgICAgICAgICAgPFNlYXJjaEljb24gLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTd2l0Y2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtjaGVja2VkOiB0aGlzLnByb3BzLmNoZWNrZWR9O1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zd2l0Y2ggPSA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5Td2l0Y2ggb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9IHZhbHVlPXt0aGlzLnN0YXRlLmNoZWNrZWR9IC8+XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJvcHMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6IHZhbHVlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN3aXRjaFxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19Db250ZW50Q29sdW1uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGRpc3BsYXlOYW1lKCkge3JldHVybiBcIkNvbnRlbnRDb2x1bW5cIjt9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIC8vbGV0IGNvbnRlbnRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250ZW50Q29sdW1uKVswXVxyXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMucHJvcHMudGl0bGUgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGl0bGUgaDIgbWFyZ2luLXJlc2V0IG1hcmdpbi1ib3R0b20tMjBcIn0sIHRoaXMucHJvcHMudGl0bGUpIDogbnVsbFxyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgXVxyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGNvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbiArIFwiIFwiK2NvbnRlbnRNb2R1bGUuY29udGVudENvbHVtbkRlZmF1bHQrXCIgY29udGVudC1jb2x1bW4gZGVmYXVsdFwiLCBzdHlsZToge3BhZGRpbmc6IFwiNjBweCA0MHB4IDBweFwifX0sXHJcbiAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NQYW5lbFwiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuLi9tb2R1bGVzL2RhdGFTdG9yZVwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiXHJcblxyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBDaGVja2JveCBmcm9tIFwiLi9jaGVja2JveFwiO1xyXG5pbXBvcnQgVjJDX0Nzc0VkaXRvckRldGFjaGVkIGZyb20gXCIuL2Nzc0VkaXRvckRldGFjaGVkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5wcm9wcy5saW5lcyA9IDA7XHJcbiAgICAgICAgc2VsZi5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICBzZWxmLmF0dGFjaCA9IHNlbGYuYXR0YWNoLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5kZXRhY2hlZEVkaXRvciA9IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChWMkNfQ3NzRWRpdG9yRGV0YWNoZWQsIHthdHRhY2g6IHNlbGYuYXR0YWNofSk7XHJcbiAgICAgICAgc2VsZi5vbkNsaWNrID0gc2VsZi5vbkNsaWNrLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi51cGRhdGVDc3MgPSBzZWxmLnVwZGF0ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuc2F2ZUNzcyA9IHNlbGYuc2F2ZUNzcy5iaW5kKHNlbGYpO1xyXG4gICAgICAgIHNlbGYuZGV0YWNoID0gc2VsZi5kZXRhY2guYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRoaXMucHJvcHMuZGV0YWNoZWQgfHwgQkRWMi5lZGl0b3JEZXRhY2hlZFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvclwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9kaXNjb3JkXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChwcmV2U3RhdGUuZGV0YWNoZWQgJiYgIXNlbGYuc3RhdGUuZGV0YWNoZWQpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHNlbGYuZGV0YWNoZWRSb290KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29kZU1pcnJvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gQnVmZmVyLmZyb20oX2Njc3MsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGluZUNvdW50KCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmVDb3VudCA9IHRoaXMucmVmcy5lZGl0b3IudmFsdWUuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xyXG4gICAgICAgIGlmIChsaW5lQ291bnQgPT0gdGhpcy5wcm9wcy5saW5lcykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVmcy5saW5lcy50ZXh0Q29udGVudCA9IEFycmF5LmZyb20obmV3IEFycmF5KGxpbmVDb3VudCksIChfLCBpKSA9PiBpICsgMSkuam9pbihcIi5cXG5cIikgKyBcIi5cIjtcclxuICAgICAgICB0aGlzLnByb3BzLmxpbmVzID0gbGluZUNvdW50O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgY29uc3Qge2RldGFjaGVkfSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgZGV0YWNoZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJlZGl0b3ItZGV0YWNoZWRcIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIn0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaDNcIixcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiRWRpdG9yIERldGFjaGVkXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmF0dGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICFkZXRhY2hlZCAmJiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJDdXN0b20gQ1NTIEVkaXRvclwifSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJlZGl0b3Itd3JhcHBlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBcImJkLWN1c3RvbWNzcy1lZGl0b3JcIiwgY2xhc3NOYW1lOiBcImVkaXRvclwiLCByZWY6IFwiZWRpdG9yXCJ9LCBzZWxmLmNzcylcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWF0dGFjaC1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidWxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJjaGVja2JveC1ncm91cFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrYm94LCB7aWQ6IFwibGl2ZS11cGRhdGVcIiwgdGV4dDogXCJMaXZlIFVwZGF0ZVwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl19KVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7aWQ6IFwiYmQtY3VzdG9tY3NzLWRldGFjaC1jb250cm9scy1idXR0b25cIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiM3B4IDAgMCAzcHhcIiwgYm9yZGVyUmlnaHQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJ1cGRhdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMFwiLCBib3JkZXJMZWZ0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjMmQyZDJkXCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwic2F2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU2F2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtib3JkZXJSYWRpdXM6IFwiMCAzcHggM3B4IDBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzNmNDE0NlwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcImRldGFjaFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRGV0YWNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiNXB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVW5zYXZlZCBjaGFuZ2VzIGFyZSBsb3N0IG9uIGRldGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImhlbHAtdGV4dFwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiUHJlc3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjb2RlXCIsIHtjbGFzc05hbWU6IFwiaW5saW5lXCJ9LCBcImN0cmxcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIitcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJpbmxpbmVcIn0sIFwiLFwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIHdpdGggdGhlIGVkaXRvciBmb2N1c2VkIHRvIGFjY2VzcyB0aGUgZWRpdG9yJ3Mgc2V0dGluZ3MuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGFyZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHN3aXRjaCAoYXJnKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZXRhY2hcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuZGV0YWNoKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoaWQsIGNoZWNrZWQpIHtcclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsaXZlLXVwZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0gPSBjaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgU2V0dGluZ3Muc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQ3NzKCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVTdHlsZShcImN1c3RvbWNzc1wiKTtcclxuICAgICAgICBET00uYWRkU3R5bGUoXCJjdXN0b21jc3NcIiwgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ3NzKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGN1c3RvbWNzc1wiLCBCdWZmZXIuZnJvbSh0aGlzLmVkaXRvci5zZXNzaW9uLmdldFZhbHVlKCksIFwidXRmLThcIikudG9TdHJpbmcoXCJiYXNlNjRcIikpO1xyXG4gICAgfVxyXG5cclxuICAgIGRldGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkcm9vdCA9IHNlbGYuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIGlmICghZHJvb3QpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUlMRUQgVE8gSU5KRUNUIFJPT1Q6IC5hcHBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQkRWMi5yZWFjdERvbS5yZW5kZXIoc2VsZi5kZXRhY2hlZEVkaXRvciwgZHJvb3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBkZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0RGV0YWNoZWRSb290KCkpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRhY2hlZFJvb3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfcm9vdDtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3REZXRhY2hlZFJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gRE9NLnF1ZXJ5KFwiLmFwcCwgLlwiK1V0aWxzLnJlbW92ZURhKEJETW9kdWxlcy5nZXQoZSA9PiBlLmFwcCAmJiBlLmxheWVycylbMF0uYXBwKSk7XHJcbiAgICAgICAgaWYgKCFhcHApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBET00uaW5zZXJ0QWZ0ZXIoRE9NLmNyZWF0ZUVsZW1lbnQoYDxkaXYgaWQ9XCJiZC1jdXN0b21jc3MtZGV0YWNoLWNvbnRhaW5lclwiPmApLCBhcHApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGV0YWNoZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge3NldHRpbmdzQ29va2llfSBmcm9tIFwiLi4vMGdsb2JhbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzUGFuZWxcIjtcclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi4vbW9kdWxlcy9kYXRhU3RvcmVcIjtcclxuaW1wb3J0IERPTSBmcm9tIFwiLi4vbW9kdWxlcy9kb210b29sc1wiO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbHNcIlxyXG5cclxuaW1wb3J0IENoZWNrYm94IGZyb20gXCIuL2NoZWNrYm94XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfQ3NzRWRpdG9yRGV0YWNoZWQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBzZWxmLm9uQ2xpY2sgPSBzZWxmLm9uQ2xpY2suYmluZChzZWxmKTtcclxuICAgICAgICBzZWxmLnVwZGF0ZUNzcyA9IHNlbGYudXBkYXRlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5zYXZlQ3NzID0gc2VsZi5zYXZlQ3NzLmJpbmQoc2VsZik7XHJcbiAgICAgICAgc2VsZi5vbkNoYW5nZSA9IHNlbGYub25DaGFuZ2UuYmluZChzZWxmKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICBET00uYWRkQ2xhc3MoRE9NLnF1ZXJ5KFwiI2FwcC1tb3VudFwiKSwgXCJiZC1kZXRhY2hlZC1lZGl0b3JcIik7XHJcbiAgICAgICAgQkRWMi5lZGl0b3JEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVMaW5lQ291bnQoKTtcclxuICAgICAgICB0aGlzLmVkaXRvciA9IGFjZS5lZGl0KFwiYmQtY3VzdG9tY3NzLWVkaXRvci1kZXRhY2hlZFwiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRUaGVtZShcImFjZS90aGVtZS9kaXNjb3JkXCIpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24uc2V0TW9kZShcImFjZS9tb2RlL2Nzc1wiKTtcclxuICAgICAgICB0aGlzLmVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZWRpdG9yLnNldEZvbnRTaXplKDE0KTtcclxuICAgICAgICB0aGlzLmVkaXRvci5vbihcImNoYW5nZVwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2V0dGluZ3NDb29raWVbXCJiZGEtY3NzLTBcIl0pIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5zYXZlQ3NzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIERPTS5yZW1vdmVDbGFzcyhET00ucXVlcnkoXCIjYXBwLW1vdW50XCIpLCBcImJkLWRldGFjaGVkLWVkaXRvclwiKTtcclxuICAgICAgICBCRFYyLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpbmVDb3VudCgpIHtcclxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSB0aGlzLnJlZnMuZWRpdG9yLnZhbHVlLnNwbGl0KFwiXFxuXCIpLmxlbmd0aDtcclxuICAgICAgICBpZiAobGluZUNvdW50ID09IHRoaXMucHJvcHMubGluZXMpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlZnMubGluZXMudGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKG5ldyBBcnJheShsaW5lQ291bnQpLCAoXywgaSkgPT4gaSArIDEpLmpvaW4oXCIuXFxuXCIpICsgXCIuXCI7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5saW5lcyA9IGxpbmVDb3VudDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kZTogXCJjc3NcIixcclxuICAgICAgICAgICAgaW5kZW50VW5pdDogNCxcclxuICAgICAgICAgICAgdGhlbWU6IFwibWF0ZXJpYWxcIixcclxuICAgICAgICAgICAgc2Nyb2xsYmFyU3R5bGU6IFwic2ltcGxlXCJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjc3MoKSB7XHJcbiAgICAgICAgY29uc3QgX2Njc3MgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIik7XHJcbiAgICAgICAgbGV0IGNjc3MgPSBcIlwiO1xyXG4gICAgICAgIGlmIChfY2NzcyAmJiBfY2NzcyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBjY3NzID0gQnVmZmVyLmZyb20oX2Njc3MsIFwiYmFzZTY0XCIpLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvb3QoKSB7XHJcbiAgICAgICAgY29uc3QgX3Jvb3QgPSBET00ucXVlcnkoXCIjYmQtY3VzdG9tY3NzLWRldGFjaC1jb250YWluZXJcIik7XHJcbiAgICAgICAgaWYgKCFfcm9vdCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5qZWN0Um9vdCgpKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoZWRSb290O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gX3Jvb3Q7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0Um9vdCgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBET00ucXVlcnkoXCIuYXBwLCAuXCIrVXRpbHMucmVtb3ZlRGEoQkRNb2R1bGVzLmdldChlID0+IGUuYXBwICYmIGUubGF5ZXJzKVswXS5hcHApKTtcclxuICAgICAgICBpZiAoIWFwcCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIERPTS5pbnNlcnRBZnRlcihET00uY3JlYXRlRWxlbWVudChgPGRpdiBpZD1cImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udGFpbmVyXCI+YCksIGFwcCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmQtZGV0YWNoZWQtY3NzLWVkaXRvclwiLCBpZDogXCJiZC1jdXN0b21jc3MtZGV0YWNoLWVkaXRvclwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtpZDogXCJiZC1jdXN0b21jc3MtaW5uZXJwYW5lXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiZWRpdG9yLXdyYXBwZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogXCJiZC1jdXN0b21jc3MtZWRpdG9yLWRldGFjaGVkXCIsIGNsYXNzTmFtZTogXCJlZGl0b3JcIiwgcmVmOiBcImVkaXRvclwifSwgc2VsZi5jc3MpXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1hdHRhY2gtY29udHJvbHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInVsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiY2hlY2tib3gtZ3JvdXBcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChDaGVja2JveCwge2lkOiBcImxpdmUtdXBkYXRlXCIsIHRleHQ6IFwiTGl2ZSBVcGRhdGVcIiwgb25DaGFuZ2U6IHNlbGYub25DaGFuZ2UsIGNoZWNrZWQ6IHNldHRpbmdzQ29va2llW1wiYmRhLWNzcy0wXCJdfSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2lkOiBcImJkLWN1c3RvbWNzcy1kZXRhY2gtY29udHJvbHMtYnV0dG9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjNweCAwIDAgM3B4XCIsIGJvcmRlclJpZ2h0OiBcIjFweCBzb2xpZCAjM2Y0MTQ2XCJ9LCBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrKFwidXBkYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjBcIiwgYm9yZGVyTGVmdDogXCIxcHggc29saWQgIzJkMmQyZFwiLCBib3JkZXJSaWdodDogXCIxcHggc29saWQgIzJkMmQyZFwifSwgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGljayhcInNhdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Ym9yZGVyUmFkaXVzOiBcIjAgM3B4IDNweCAwXCIsIGJvcmRlckxlZnQ6IFwiMXB4IHNvbGlkICMzZjQxNDZcIn0sIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2soXCJhdHRhY2hcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkF0dGFjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7Zm9udFNpemU6IFwiMTBweFwiLCBtYXJnaW5MZWZ0OiBcIjVweFwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVuc2F2ZWQgY2hhbmdlcyBhcmUgbG9zdCBvbiBhdHRhY2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShpZCwgY2hlY2tlZCkge1xyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxpdmUtdXBkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nc0Nvb2tpZVtcImJkYS1jc3MtMFwiXSA9IGNoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICBTZXR0aW5ncy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsaWNrKGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYXR0YWNoXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAoRE9NLnF1ZXJ5KFwiI2VkaXRvci1kZXRhY2hlZFwiKSkgc2VsZi5wcm9wcy5hdHRhY2goKTtcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3REb20udW5tb3VudENvbXBvbmVudEF0Tm9kZShzZWxmLnJvb3QpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yb290LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlQ3NzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInNhdmVcIjpcclxuICAgICAgICAgICAgICAgIHNlbGYuc2F2ZUNzcygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUNzcygpIHtcclxuICAgICAgICBET00ucmVtb3ZlU3R5bGUoXCJjdXN0b21jc3NcIik7XHJcbiAgICAgICAgRE9NLmFkZFN0eWxlKFwiY3VzdG9tY3NzXCIsIHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNzcygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRjdXN0b21jc3NcIiwgQnVmZmVyLmZyb20odGhpcy5lZGl0b3Iuc2Vzc2lvbi5nZXRWYWx1ZSgpLCBcInV0Zi04XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpKTtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVycm9yQm91bmRhcnkgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgdGhpcy5zdGF0ZSA9IHtoYXNFcnJvcjogZmFsc2V9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZENhdGNoKCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtoYXNFcnJvcjogdHJ1ZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuaGFzRXJyb3IpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJyZWFjdC1lcnJvclwifSwgXCJDb21wb25lbnQgRXJyb3JcIik7ICBcclxuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW47IFxyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IEJERXJyb3JCb3VuZGFyeS5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQkRFcnJvckJvdW5kYXJ5LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi8uLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5jb25zdCBSZWFjdCA9IEJEVjIuUmVhY3Q7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWxldGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSBmaWxsPVwidmFyKC0tdGV4dC1ub3JtYWwpXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwVjB6XCIvPjxwYXRoIGQ9XCJNNiAxOWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWN0g2djEyem0yLjQ2LTcuMTJsMS40MS0xLjQxTDEyIDEyLjU5bDIuMTItMi4xMiAxLjQxIDEuNDFMMTMuNDEgMTRsMi4xMiAyLjEyLTEuNDEgMS40MUwxMiAxNS40MWwtMi4xMiAyLjEyLTEuNDEtMS40MUwxMC41OSAxNGwtMi4xMy0yLjEyek0xNS41IDRsLTEtMWgtNWwtMSAxSDV2MmgxNFY0elwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25BcnJvdyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjE2cHhcIjtcclxuICAgICAgICByZXR1cm4gPHN2ZyBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3R5bGU9e3t3aWR0aDogc2l6ZSwgaGVpZ2h0OiBzaXplfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjEyIDkuMjlMMTIgMTMuMTdsMy44OC0zLjg4Yy4zOS0uMzkgMS4wMi0uMzkgMS40MSAwIC4zOS4zOS4zOSAxLjAyIDAgMS40MWwtNC41OSA0LjU5Yy0uMzkuMzktMS4wMi4zOS0xLjQxIDBMNi43IDEwLjdjLS4zOS0uMzktLjM5LTEuMDIgMC0xLjQxLjM5LS4zOCAxLjAzLS4zOSAxLjQyIDB6XCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+O1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIyNHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcIlwifSB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3pcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsInsvKiA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIndoaXRlXCIgd2lkdGg9XCIxOHB4XCIgaGVpZ2h0PVwiMThweFwiPlxyXG4gICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz5cclxuICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuPC9zdmc+ICovfVxyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmNvbnN0IFJlYWN0ID0gQkRWMi5SZWFjdDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgXCIxOHB4XCI7XHJcbiAgICAgICAgcmV0dXJuIDxzdmcgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJ2YXIoLS10ZXh0LW5vcm1hbClcIiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwiXCJ9IHN0eWxlPXt7d2lkdGg6IHNpemUsIGhlaWdodDogc2l6ZX19IG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAwaDI0djI0SDB6XCIgZmlsbD1cIm5vbmVcIi8+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMgM2MtNC45NyAwLTkgNC4wMy05IDlIMWwzLjg5IDMuODkuMDcuMTRMOSAxMkg2YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS45MyAwLTMuNjgtLjc5LTQuOTQtMi4wNmwtMS40MiAxLjQyQzguMjcgMTkuOTkgMTAuNTEgMjEgMTMgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bS0xIDV2NWw0LjI4IDIuNTQuNzItMS4yMS0zLjUtMi4wOFY4SDEyelwiLz5cclxuICAgICAgICA8L3N2Zz47XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VhcmNoIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IFwiMTZweFwiO1xyXG4gICAgICAgIHJldHVybiA8c3ZnIGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJcIn0gZmlsbD1cInZhcigtLXRleHQtbm9ybWFsKVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHlsZT17e3dpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemV9fT5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwibm9uZVwiIGQ9XCJNMCAwaDI0djI0SDBWMHpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0elwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPjtcclxuICAgIH1cclxufSIsImxldCBtYXJnaW5Nb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Ub3A2MClbMF1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmdpblRvcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighbWFyZ2luTW9kdWxlKW1hcmdpbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpblRvcDYwKVswXVxyXG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpblRvcDYwfT48L2Rpdj5cclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi9zZXR0aW5nc1RpdGxlXCI7XHJcbmltcG9ydCBWMkNfU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBkYXRhU3RvcmUgZnJvbSBcIi4uL21vZHVsZXMvZGF0YVN0b3JlXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRSUEMsIHNldHRpbmdzUlBDIH0gZnJvbSBcIi4uLzBnbG9iYWxzXCI7XHJcbmltcG9ydCBDdXN0b21SaWNoUHJlc2VuY2UgZnJvbSBcIi4uL21vZHVsZXMvQ3VzdG9tUmljaFByZXNlbmNlXCJcclxuaW1wb3J0IHsgcmVtb3RlIH0gZnJvbSBcImVsZWN0cm9uXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5cclxuY29uc3QgUmVhY3QgPSBCRFYyLlJlYWN0O1xyXG5cclxubGV0IFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUHJlc2VuY2VTZXR0aW5ncyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgZGF0YTogZGF0YVN0b3JlLmdldFNldHRpbmdHcm91cChcInJwY1wiKSB8fCBkZWZhdWx0UlBDLFxyXG4gICAgICAgICAgICBhc3NldHM6IFtdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnByZXZpZXcgPSBudWxsXHJcbiAgICAgICAgdGhpcy5pc2ZldGNoaW5nID0gZmFsc2VcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmRhdGEuYXBwbGljYXRpb25faWQpe1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoQXNzZXRzKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYXNzZXRDb21wb25lbnRzID0gbmV3IFNldCgpXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlV2hlbkZldGNoZWQoY29tcCl7XHJcbiAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuYWRkKGNvbXApXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SW5wdXRUZXh0fSBzZXR0aW5nIFxyXG4gICAgICovXHJcbiAgICBvbkNoYW5nZShzZXR0aW5nLCB2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRTZXR0aW5nID0gUlBDUHJvcHMuZmluZChlID0+IGUuaWQgPT09IHNldHRpbmcucHJvcHMuaWQpXHJcblxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHNldHRpbmdzUlBDLCB0aGlzLnN0YXRlLmRhdGEsIHtcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0U2V0dGluZy5pZF06ICEhdmFsdWUgPyB2YWx1ZSA6IG51bGxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGFzc2V0czogdGhpcy5zdGF0ZS5hc3NldHNcclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHNldHRpbmcucHJvcHMuaWQgPT09IFwiYXBwbGljYXRpb25faWRcIil7XHJcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YVN0b3JlLnNldFNldHRpbmdHcm91cChcInJwY1wiLCBzZXR0aW5nc1JQQyk7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3LmZvcmNlVXBkYXRlKClcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2Uuc2V0KHNldHRpbmdzUlBDKVxyXG4gICAgfVxyXG5cclxuICAgIGZldGNoQXNzZXRzKCl7XHJcbiAgICAgICAgaWYodGhpcy5pc2ZldGNoaW5nID09PSB0cnVlKXtcclxuICAgICAgICAgICAgbGV0IGFwcCA9IHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZFxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCAhPT0gYXBwKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hBc3NldHMoKVxyXG4gICAgICAgICAgICB9LCA1MDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuc3RhdGUuZGF0YS5hcHBsaWNhdGlvbl9pZCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IHRydWVcclxuICAgICAgICBDdXN0b21SaWNoUHJlc2VuY2UuZmV0Y2hBc3NldHModGhpcy5zdGF0ZS5kYXRhLmFwcGxpY2F0aW9uX2lkKVxyXG4gICAgICAgIC50aGVuKGFzc2V0cyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBPYmplY3Qua2V5cyhhc3NldHMpLm1hcChrID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzZXQgPSBhc3NldHNba11cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogYXNzZXQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGFzc2V0Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGFzc2V0LnR5cGVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNmZXRjaGluZyA9IGZhbHNlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgYXNzZXRzOiBbXVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLmZvcmNlVXBkYXRlKClcclxuICAgICAgICAgICAgdGhpcy5hc3NldENvbXBvbmVudHMuZm9yRWFjaChlID0+IGUuZm9yY2VVcGRhdGUoKSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVByZXZpZXcoZGF0YSl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIFYyQ19QcmVzZW5jZVNldHRpbmdzTW9kdWxlcyB8fCAoVjJDX1ByZXNlbmNlU2V0dGluZ3NNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5tYXJnaW5Cb3R0b20yMClbMF1cclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgPFYyQ19TZXR0aW5nc0dyb3VwIHRpdGxlPVwiUmljaFByZXNlbmNlIFNldHRpbmdzXCIgc2V0dGluZ3M9e3RoaXMucHJvcHMuc2V0dGluZ3N9IG9uQ2hhbmdlPXt0aGlzLnByb3BzLm9uQ2hhbmdlfS8+LFxyXG4gICAgICAgICAgICA8TWFyZ2luVG9wIC8+LFxyXG4gICAgICAgICAgICA8VjJDX1NldHRpbmdzVGl0bGUgdGV4dD1cIlJpY2hQcmVzZW5jZVwiLz4sXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICB7LyoqIG9wdGlvbnMgKi99XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5vcHRpb25zQ29tcG9uZW50c31cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPE1hcmdpblRvcCAvPlxyXG4gICAgICAgICAgICAgICAgPFYyQ19TZXR0aW5nc1RpdGxlIHRleHQ9XCJQcmV2aWV3XCIvPlxyXG4gICAgICAgICAgICAgICAgey8qKiBwcmV2aWV3ICovfVxyXG4gICAgICAgICAgICAgICAgPFJwY1ByZXZpZXcgc2V0dGluZ3M9e3RoaXN9Lz5cclxuICAgICAgICAgICAgPC9kaXY+LFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17bWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT48L2Rpdj4sXHJcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3tvcGFjaXR5OiAwLjAxfX0gb25DbGljaz17d2luZG93Lm9oZ29kb2hmdWNrfT5cclxuICAgICAgICAgICAgICAgIE9oIGdvZCBPaCBmdWNrXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPixcclxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17e29wYWNpdHk6IDAuMDF9fSBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZW1vdGUuc2hlbGwub3BlbkV4dGVybmFsKFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1Ma1lhN3Jwc19nNFwiKVxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIFNlZSA/IEkgcHVsbGVkIGEgbGl0bGUgc25lYWt5IG9uIHlhXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgb3B0aW9uc0NvbXBvbmVudHMoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9uc0NvbXBvbmVudHMgfHwgKHRoaXMuX29wdGlvbnNDb21wb25lbnRzID0gUlBDUHJvcHMubWFwKGUgPT4ge1xyXG4gICAgICAgICAgICBpZihlLnR5cGUgPT09IFwidGV4dFwiKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiA8SW5wdXRUZXh0IHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfS8+XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGUudHlwZSA9PT0gXCJudW1iZXJcIil7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBbPElucHV0TnVtYmVyIHNldHRpbmc9e2V9IG1hbmFnZXI9e3RoaXN9IGlkPXtlLmlkfS8+XS8qXHJcbiAgICAgICAgICAgICAgICBpZihlLmlkID09PSBcInRpbWVzdGFtcHMuc3RhcnRcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkudW5zaGlmdCg8RGlzY29yZEJ1dHRvbiB0aXRsZT1cIkNvcHkgQ3VycmVudCBUaW1lc3RhbXBcIiBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKStcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIH19IC8+KVxyXG4gICAgICAgICAgICAgICAgfSovXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlcclxuICAgICAgICAgICAgfWVsc2UgaWYoZS50eXBlID09PSBcImNob2ljZVwiKXtcclxuICAgICAgICAgICAgICAgIGlmKFtcImFzc2V0cy5zbWFsbFwiLCBcImFzc2V0cy5sYXJnZVwiXS5pbmNsdWRlcyhlLmlkKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxJbnB1dENob2ljZSBzZXR0aW5nPXtlfSBtYW5hZ2VyPXt0aGlzfSBpZD17ZS5pZH0gY2hvaWNlcz17W3t2YWx1ZTogXCJub25lXCIsIGxhYmVsOiBcIk5vIGFzc2V0c1wifV0uY29uY2F0KHRoaXMuc3RhdGUuYXNzZXRzLm1hcChlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBcImFzc2V0LVwiK2UuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZS5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSl9Lz5cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlVua25vd24gY2hvaWNlLlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSlcclxuICAgIH1cclxufVxyXG5jb25zdCBSUENQcm9wcyA9IFtcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJBcHBsaWNhdGlvbiBJRFwiLFxyXG4gICAgICAgIGlkOiBcImFwcGxpY2F0aW9uX2lkXCIsXHJcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCI3MTE0MTY5NTc3MTg3NTc0MThcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJOYW1lXCIsXHJcbiAgICAgICAgaWQ6IFwibmFtZVwiLFxyXG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIkxpZ2h0Y29yZFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIkRldGFpbHNcIixcclxuICAgICAgICBpZDogXCJkZXRhaWxzXCIsXHJcbiAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXHJcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiQnJvd3NpbmcgRGlzY29yZFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlN0YXRlXCIsXHJcbiAgICAgICAgaWQ6IFwic3RhdGVcIixcclxuICAgICAgICB0eXBlOiBcInRleHRcIixcclxuICAgICAgICBwbGFjZWhvbGRlcjogXCJMaWdodGNvcmQgQ2xpZW50XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiVGltZXN0YW1wIFN0YXJ0XCIsXHJcbiAgICAgICAgaWQ6IFwidGltZXN0YW1wcy5zdGFydFwiLFxyXG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXHJcbiAgICAgICAgZ2V0IHBsYWNlaG9sZGVyKCl7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRlLm5vdygpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJMYXJnZUFzc2V0XCIsXHJcbiAgICAgICAgaWQ6IFwiYXNzZXRzLmxhcmdlXCIsXHJcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0aXRsZTogXCJTbWFsbEFzc2V0XCIsXHJcbiAgICAgICAgaWQ6IFwiYXNzZXRzLnNtYWxsXCIsXHJcbiAgICAgICAgdHlwZTogXCJjaG9pY2VcIlxyXG4gICAgfSxcclxuXVxyXG5cclxubGV0IGlucHV0VGV4dE1vZHVsZXNcclxuY2xhc3MgSW5wdXRUZXh0IGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIGlmKGlucHV0VGV4dE1vZHVsZXMgJiYgaW5wdXRUZXh0TW9kdWxlc1swXSlyZXR1cm4gaW5wdXRUZXh0TW9kdWxlc1xyXG4gICAgICAgIHJldHVybiBpbnB1dFRleHRNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdLFxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbnB1dCA9IDx3aW5kb3cuTGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5UZXh0SW5wdXQgcGxhY2Vob2xkZXI9e3NldHRpbmcucGxhY2Vob2xkZXJ9IG5hbWU9e3NldHRpbmcuaWR9IHZhbHVlPXt0aGlzLnN0YXRlLmRhdGF9IG9uQ2hhbmdlPXsodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZighdGhpcy5sYXN0RWRpdGVkIHx8IHRoaXMubGFzdEVkaXRlZCA8IERhdGUubm93KCkgLSA1MDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9ZWxzZSBpZighdGhpcy5pc1RpbWluZyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXHJcbiAgICAgICAgICAgIGlucHV0TW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlMixcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxEaXZpZGVyLz5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmxldCBJbnB1dE51bWJlck1vZHVsZXNcclxuY2xhc3MgSW5wdXROdW1iZXIgZXh0ZW5kcyBSZWFjdC5QdXJlQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIElucHV0TnVtYmVyTW9kdWxlcyB8fCAoSW5wdXROdW1iZXJNb2R1bGVzID0gW1xyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5yZW1vdmVLZXliaW5kKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5kZWZhdWx0TWFyZ2luaDUpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclN0YW5kYXJkKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuc2l6ZTMyKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuX2hvcml6b250YWwpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5pbnB1dE1pbmkpWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zaXplMTYgJiYgZS5zaXplMjApWzBdLFxyXG4gICAgICAgICAgICBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb2xvclRyYW5zcGFyZW50KVswXSxcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgICAgICBzdXBlcihwcm9wcylcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMucHJvcHMubWFuYWdlci5zdGF0ZS5kYXRhW3NldHRpbmcuaWRdXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlucHV0ID0gPHdpbmRvdy5MaWdodGNvcmQuQXBpLkNvbXBvbmVudHMuaW5wdXRzLlRleHRJbnB1dCBwbGFjZWhvbGRlcj17c2V0dGluZy5wbGFjZWhvbGRlcn0gbmFtZT17c2V0dGluZy5pZH0gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gdHlwZT1cIm51bWJlclwiIG9uQ2hhbmdlPXsodmFsdWUsIG5hbWUsIGlucHV0KSA9PiB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXGRdKy9nLCBcIlwiKVxyXG4gICAgICAgICAgICBpZih2YWx1ZSA9PSB0aGlzLnN0YXRlLmRhdGEpe1xyXG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0VmFsdWUodmFsdWUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoIXRoaXMubGFzdEVkaXRlZCB8fCB0aGlzLmxhc3RFZGl0ZWQgPCBEYXRlLm5vdygpIC0gNTAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVkaXRlZCA9IERhdGUubm93KClcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuaXNUaW1pbmcpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB0aGlzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFZGl0ZWQgPSBEYXRlLm5vdygpXHJcbiAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9fSB0eXBlPVwidGV4dFwiLz5cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgc2V0dGluZyA9IHRoaXMucHJvcHMuc2V0dGluZ1xyXG5cclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICByb3dNb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZSxcclxuICAgICAgICAgICAgbWFyZ2luTW9kdWxlMixcclxuICAgICAgICAgICAgY29sb3JNb2R1bGUsXHJcbiAgICAgICAgICAgIHNpemVNb2R1bGUsXHJcbiAgICAgICAgICAgIGZsZXhNb2R1bGUsXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3NOYW1lPXtjb2xvck1vZHVsZS5jb2xvclN0YW5kYXJkK1wiIFwiK3NpemVNb2R1bGUuc2l6ZTE0K1wiIFwiK21hcmdpbk1vZHVsZTIuaDUrXCIgXCIrbWFyZ2luTW9kdWxlMi5kZWZhdWx0TWFyZ2luaDV9PlxyXG4gICAgICAgICAgICAgICAgICAgIHtzZXR0aW5nLnRpdGxlfVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIHt0aGlzLmlucHV0fVxyXG4gICAgICAgICAgICAgICAge3NldHRpbmcuaWQgPT09IFwidGltZXN0YW1wcy5zdGFydFwiID8gXHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIERpc2NvcmROYXRpdmUuY2xpcGJvYXJkLmNvcHkoRGF0ZS5ub3coKStcIlwiKVxyXG4gICAgICAgICAgICAgICAgfX0gY29sb3I9XCJicmFuZFwiPkNvcHkgY3VycmVudCB0aW1lc3RhbXA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPiA6IG51bGx9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8RGl2aWRlci8+XHJcbiAgICAgICAgPC9kaXY+KVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgSW5wdXRDaG9pY2VNb2R1bGVzXHJcbmNsYXNzIElucHV0Q2hvaWNlIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLnByb3BzLm1hbmFnZXIuc3RhdGUuZGF0YVtzZXR0aW5nLmlkXSA/IFwiYXNzZXQtXCIrdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmRhdGFbc2V0dGluZy5pZF0gOiBcIm5vbmVcIlxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3BzLm1hbmFnZXIudXBkYXRlV2hlbkZldGNoZWQodGhpcylcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZShkYXRhKXtcclxuICAgICAgICBsZXQgdmFsdWUgPSBkYXRhLnZhbHVlXHJcblxyXG4gICAgICAgIGlmKCF0aGlzLmxhc3RFZGl0ZWQgfHwgdGhpcy5sYXN0RWRpdGVkIDwgRGF0ZS5ub3coKSAtIDUwMCl7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMubWFuYWdlci5vbkNoYW5nZSh0aGlzLCB2YWx1ZSA9PT0gXCJub25lXCIgPyBudWxsIDogdmFsdWUucmVwbGFjZShcImFzc2V0LVwiLCBcIlwiKSlcclxuICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgIH1lbHNlIGlmKCF0aGlzLmlzVGltaW5nKXtcclxuICAgICAgICAgICAgdGhpcy5pc1RpbWluZyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tYW5hZ2VyLm9uQ2hhbmdlKHRoaXMsIHRoaXMuc3RhdGUuZGF0YSA9PT0gXCJub25lXCIgPyBudWxsIDogdGhpcy5zdGF0ZS5kYXRhLnJlcGxhY2UoXCJhc3NldC1cIiwgXCJcIikpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGltaW5nID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RWRpdGVkID0gRGF0ZS5ub3coKVxyXG4gICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YTogdmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgbW9kdWxlcygpe1xyXG4gICAgICAgIHJldHVybiBJbnB1dENob2ljZU1vZHVsZXMgfHwgKElucHV0Q2hvaWNlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLm1hcmdpbkJvdHRvbTIwKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGVmYXVsdE1hcmdpbmg1KVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuY29sb3JTdGFuZGFyZClbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpemUzMilbMF0sXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLl9ob3Jpem9udGFsKVswXVxyXG4gICAgICAgIF0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgbGV0IHNldHRpbmcgPSB0aGlzLnByb3BzLnNldHRpbmdcclxuXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgcm93TW9kdWxlLFxyXG4gICAgICAgICAgICBtYXJnaW5Nb2R1bGUsXHJcbiAgICAgICAgICAgIG1hcmdpbk1vZHVsZTIsXHJcbiAgICAgICAgICAgIGNvbG9yTW9kdWxlLFxyXG4gICAgICAgICAgICBzaXplTW9kdWxlLFxyXG4gICAgICAgICAgICBmbGV4TW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5wcm9wcy5tYW5hZ2VyLnN0YXRlLmFzc2V0cy5tYXAoZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogXCJhc3NldC1cIitlLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGUubmFtZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgb3B0aW9ucy51bnNoaWZ0KHtcclxuICAgICAgICAgICAgdmFsdWU6IFwibm9uZVwiLFxyXG4gICAgICAgICAgICBsYWJlbDogXCJObyBhc3NldHNcIlxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHJldHVybiAoPGRpdiBjbGFzc05hbWU9e3Jvd01vZHVsZS5yb3crXCIgXCIrbWFyZ2luTW9kdWxlLm1hcmdpbkJvdHRvbTIwfT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3Jvd01vZHVsZS5pdGVtfSAke2ZsZXhNb2R1bGUuZmxleENoaWxkfWB9PlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzTmFtZT17Y29sb3JNb2R1bGUuY29sb3JTdGFuZGFyZCtcIiBcIitzaXplTW9kdWxlLnNpemUxNCtcIiBcIittYXJnaW5Nb2R1bGUyLmg1K1wiIFwiK21hcmdpbk1vZHVsZTIuZGVmYXVsdE1hcmdpbmg1fT5cclxuICAgICAgICAgICAgICAgICAgICB7c2V0dGluZy50aXRsZX1cclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8d2luZG93LkxpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuRHJvcGRvd24gdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb3B0aW9ucz17b3B0aW9uc30gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX0gLz5cclxuICAgICAgICAgICAgICAgIHsvKjxTZWxlY3QgdmFsdWU9e3RoaXMuc3RhdGUuZGF0YX0gb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX0gb3B0aW9ucz17b3B0aW9uc30vPiovfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPERpdmlkZXIvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IERpdmlkZXJNb2R1bGVzID0gW11cclxuY2xhc3MgRGl2aWRlciBleHRlbmRzIFJlYWN0LlB1cmVDb21wb25lbnQge1xyXG4gICAgZ2V0IG1vZHVsZXMoKXtcclxuICAgICAgICByZXR1cm4gRGl2aWRlck1vZHVsZXMmJkRpdmlkZXJNb2R1bGVzWzBdID8gRGl2aWRlck1vZHVsZXMgOiAoRGl2aWRlck1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJETW9kdWxlcy5nZXQoZSA9PiBlLmRpdmlkZXIgJiYgT2JqZWN0LmtleXMoZSkubGVuZ3RoID09PSAxKVswXSxcclxuICAgICAgICAgICAgQkRNb2R1bGVzLmdldChlID0+IGUuZGl2aWRlckRlZmF1bHQpWzBdXHJcbiAgICAgICAgXSlcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgW1xyXG4gICAgICAgICAgICBkaXZpZGVyLFxyXG4gICAgICAgICAgICBkaXZpZGVyRGVmYXVsdFxyXG4gICAgICAgIF0gPSB0aGlzLm1vZHVsZXNcclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3M9e2Ake2RpdmlkZXIuZGl2aWRlcn0gJHtkaXZpZGVyRGVmYXVsdC5kaXZpZGVyRGVmYXVsdH1gfT48L2Rpdj5cclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgRGlzY29yZEJ1dHRvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBsZXQgcm93TW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUucmVtb3ZlS2V5YmluZClbMF1cclxuICAgICAgICBsZXQgbWFyZ2luTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tMjApWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5faG9yaXpvbnRhbClbMF1cclxuXHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17cm93TW9kdWxlLnJvdytcIiBcIittYXJnaW5Nb2R1bGUubWFyZ2luQm90dG9tMjB9PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cm93TW9kdWxlLml0ZW19ICR7ZmxleE1vZHVsZS5mbGV4Q2hpbGR9YH0+XHJcbiAgICAgICAgICAgICAgICA8TGlnaHRjb3JkLkFwaS5Db21wb25lbnRzLmlucHV0cy5CdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfSBjb2xvcj1cImJyYW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMudGl0bGV9XHJcbiAgICAgICAgICAgICAgICA8L0xpZ2h0Y29yZC5BcGkuQ29tcG9uZW50cy5pbnB1dHMuQnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4pXHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFJwY1ByZXZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMgPSB7fSl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgYWN0aXZlOiBcInByb2ZpbGVcIlxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYnMgPSBbXVxyXG5cclxuICAgICAgICB0aGlzLnByb3BzLnNldHRpbmdzLnByZXZpZXcgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlVGFiKHRhYil7XHJcbiAgICAgICAgbGV0IGFuY2llbnRUYWIgPSB0aGlzLnN0YXRlLmFjdGl2ZVxyXG4gICAgICAgIGlmKGFuY2llbnRUYWIgPT09IHRhYi5wcm9wcy5pZClyZXR1cm5cclxuXHJcbiAgICAgICAgdGhpcy50YWJzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGUuc2V0QWN0aXZlKGZhbHNlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGFiLnNldEFjdGl2ZSh0cnVlKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6IHRhYi5wcm9wcy5pZFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCl7XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT1cImxjLXRhYldyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsYy10YWJuYXZcIiBzdHlsZT17e2ZsZXg6IFwiMCAxIGF1dG9cIn19PlxyXG4gICAgICAgICAgICAgICAgPFRhYiBwcmV2aWV3PXt0aGlzfSB0aXRsZT1cIkZ1bGwgUHJvZmlsZVwiIGlkPVwicHJvZmlsZVwiLz5cclxuICAgICAgICAgICAgICAgIDxUYWIgcHJldmlldz17dGhpc30gdGl0bGU9XCJVc2VyIFBvcG91dFwiIGlkPVwicG9wb3V0XCIvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPFByZXNlbmNlRXJyb3JDYXRjaGVyIHByZXZpZXc9e3RoaXMucHJldmlld30gc3RhdGU9e3RoaXMuc3RhdGUucnBjfSBwcm9wcz17e3ByZXZpZXc6IHRoaXN9fSBrZXk9e3RoaXMuc3RhdGUuYWN0aXZlfSAvPlxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH0gICBcclxuXHJcbiAgICBpc0FjdGl2ZSh0YWIpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gdGFiXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHByZXZpZXcoKXtcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSA9PT0gXCJwcm9maWxlXCIpcmV0dXJuIFByb2ZpbGVcclxuICAgICAgICByZXR1cm4gUG9wb3V0XHJcbiAgICB9XHJcbn1cclxuXHJcbmNsYXNzIFRhYiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpXHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogcHJvcHMucHJldmlldy5pc0FjdGl2ZShwcm9wcy5pZClcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvcHMucHJldmlldy50YWJzLnB1c2godGhpcylcclxuICAgIH1cclxuXHJcbiAgICBzZXRBY3RpdmUoaXNBY3RpdmUpe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmU6ICEhaXNBY3RpdmVcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBjbGFzc05hbWUgPSBgbGMtbmF2SXRlbWBcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1BY3RpdmVgXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZSArPSBgIGxjLW5hdkl0ZW1JbmFjdGl2ZWBcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBvbkNsaWNrPXsoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnByZXZpZXcuY2hhbmdlVGFiKHRoaXMpXHJcbiAgICAgICAgfX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnRpdGxlfVxyXG4gICAgICAgIDwvZGl2PilcclxuICAgIH1cclxufVxyXG5cclxubGV0IGVtcHR5Q2xhc3Nlc1xyXG5jbGFzcyBQcmVzZW5jZUVycm9yQ2F0Y2hlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgICBjb21wb25lbnREaWRDYXRjaChlcnIsIGVyckluZm8pe1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnJJbmZvKVxyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBlcnJvcjogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZW5kZXIoKXtcclxuICAgICAgICBpZighdGhpcy5zdGF0ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5zdGF0ZS5lcnJvcil7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSBuZXcgdGhpcy5wcm9wcy5wcmV2aWV3KHRoaXMucHJvcHMucHJvcHMpXHJcbiAgICAgICAgICAgICAgICBwcmV2aWV3LnNldFN0YXRlKHRoaXMucHJvcHMuc3RhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlldy5yZW5kZXIoKVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5lcnJvciA9IHRydWVcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcigpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZW1wdHlDbGFzc2VzID0gZW1wdHlDbGFzc2VzIHx8IEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZW1wdHlTdGF0ZUltYWdlICYmIGUuZW1wdHlTdGF0ZSlcclxuICAgICAgICAgICAgaWYoIWVtcHR5Q2xhc3Nlcyl7XHJcbiAgICAgICAgICAgICAgICBVdGlscy5zaG93VG9hc3QoXCJBbiBlcnJvciBvY2N1cmVkLiBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLlwiKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gPGRpdiBzdHlsZT17e1xyXG4gICAgICAgICAgICAgICAgbWFyZ2luOiBcIjIwcHhcIlxyXG4gICAgICAgICAgICB9fT5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcclxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidmFyKC0tYmFja2dyb3VuZC1wcmltYXJ5KVwiLCBcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBcIjMwcHggMzBweFwiLCBcclxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCJcclxuICAgICAgICAgICAgICAgIH19IGNsYXNzTmFtZT17YGxjLXRhYi1ib3gtc2hhZG93ICR7ZW1wdHlDbGFzc2VzLmVtcHR5U3RhdGV9YH0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSW1hZ2V9IHN0eWxlPXt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogXCIyMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9fT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2VtcHR5Q2xhc3Nlcy5lbXB0eVN0YXRlSGVhZGVyfT5BbiBlcnJvciBvY2N1cmVkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtlbXB0eUNsYXNzZXMuZW1wdHlTdGF0ZVN1YnRleHR9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgZm9yIG1vcmUgaW5mb3JtYXRpb25zLiBKb2luIG91ciDCrVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzc05hbWU9e2Ake0JEVjIuYW5jaG9yQ2xhc3Nlcy5hbmNob3J9ICR7QkRWMi5hbmNob3JDbGFzc2VzLmFuY2hvclVuZGVybGluZU9uSG92ZXJ9YH0gcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PXswfSBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLmpvaW5MQygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBzZXJ2ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICDCrSBmb3IgaGVscC5cclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcG9wb3V0TW9kdWxlc1xyXG5sZXQgVXNlclBvcG91dENvbXBvbmVudFxyXG5sZXQgUG9wb3V0UHJvcHNcclxuY2xhc3MgUG9wb3V0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHBvcG91dE1vZHVsZXMgfHwgKHBvcG91dE1vZHVsZXMgPSBbXHJcbiAgICAgICAgICAgIEJEVjIuV2VicGFja01vZHVsZXMuZmluZChlID0+IGUuZGVmYXVsdCAmJiBlLmRlZmF1bHQuZGlzcGxheU5hbWUgPT09IFwiVXNlclBvcG91dFwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudCgpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCgpID0+IHtcclxuICAgICAgICAgICAgbGV0IHJlbmRlcjEgPSBVc2VyUG9wb3V0LmRlZmF1bHQoe1xyXG4gICAgICAgICAgICAgICAgdXNlcklkOiB1c2VyLmlkLCBcclxuICAgICAgICAgICAgICAgIGd1aWxkSWQ6IG51bGwsIFxyXG4gICAgICAgICAgICAgICAgY2hhbm5lbElkOiBudWxsLCBcclxuICAgICAgICAgICAgICAgIGRpc2FibGVVc2VyUHJvZmlsZUxpbms6IHRydWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgVXNlclBvcG91dENvbXBvbmVudCA9IHJlbmRlcjEudHlwZVxyXG4gICAgICAgICAgICBQb3BvdXRQcm9wcyA9IHJlbmRlcjEucHJvcHNcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKClcclxuICAgICAgICB9LCBudWxsKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGlmKCFVc2VyUG9wb3V0Q29tcG9uZW50KXJldHVybiB0aGlzLmdldENvbXBvbmVudCgpXHJcbiAgICAgICAgbGV0IFtcclxuICAgICAgICAgICAgX1VzZXJQb3BvdXQsXHJcbiAgICAgICAgICAgIHVzZXJNb2R1bGVcclxuICAgICAgICBdID0gdGhpcy5tb2R1bGVzXHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB1c2VyTW9kdWxlLmRlZmF1bHQuZ2V0Q3VycmVudFVzZXIoKVxyXG5cclxuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRSUEMsIHRoaXMucHJvcHMucHJldmlldy5wcm9wcy5zZXR0aW5ncy5zdGF0ZS5kYXRhKVxyXG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmdhbWUpcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgbGV0IGdhbWUgPSB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdhbWUubmFtZSB8fCBkZWZhdWx0UlBDLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbl9pZDogdGhpcy5nYW1lLmFwcGxpY2F0aW9uX2lkIHx8IGRlZmF1bHRSUEMuYXBwbGljYXRpb25faWQsXHJcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB0aGlzLmdhbWUuZGV0YWlscyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBzdGF0ZTogdGhpcy5nYW1lLnN0YXRlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcHM6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl0gPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2FtZVtcInRpbWVzdGFtcHMuc3RhcnRcIl1cclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBhc3NldHM6IHRoaXMuZ2FtZVtcImFzc2V0cy5sYXJnZVwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbWFnZTogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMuc21hbGxcIl0gfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBnYW1lXHJcbiAgICAgICAgfSkuY2FsbCh7XHJcbiAgICAgICAgICAgIGdhbWU6IGRhdGFcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBjb25zdCBwb3BvdXQgPSBuZXcgVXNlclBvcG91dENvbXBvbmVudChPYmplY3QuYXNzaWduKHt9LCBQb3BvdXRQcm9wcywge1xyXG4gICAgICAgICAgICBhY3Rpdml0eTogYWN0aXZpdHksXHJcbiAgICAgICAgICAgIHVzZXJJZDogdXNlci5pZFxyXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcclxuXHJcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBzdG9wIHByb3BhZ2F0aW9uIHNoaXQuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gPGRpdiB7Li4ud2luZG93LkxpZ2h0Y29yZC5BcGkuXy5leGNsdWRlUHJvcGVydGllcyhwb3BvdXQucHJvcHMsIFtcIm9uQ2xpY2tcIiwgXCJvbkNvbnRleHRNZW51XCJdKX0gLz5cclxuXHJcbiAgICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGMtdXNlclBvcG91dCBsYy10YWItYm94LXNoYWRvd1wiPlxyXG4gICAgICAgICAgICB7Y29udGFpbmVyfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG59XHJcblxyXG5sZXQgcHJvZmlsZU1vZHVsZXNcclxubGV0IFVzZXJQcm9maWxlQ29tcG9uZW50XHJcbmxldCBQcm9maWxlUHJvcHNcclxubGV0IGNvbm5lY3RlZFByb2ZpbGVTdG9yZVxyXG5jbGFzcyBQcm9maWxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGdldCBtb2R1bGVzKCl7XHJcbiAgICAgICAgcmV0dXJuIHByb2ZpbGVNb2R1bGVzIHx8IChwcm9maWxlTW9kdWxlcyA9IFtcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5kaXNwbGF5TmFtZSA9PT0gXCJVc2VyUHJvZmlsZVwiKSxcclxuICAgICAgICAgICAgQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kKGUgPT4gZS5kZWZhdWx0ICYmIGUuZGVmYXVsdC5nZXRDdXJyZW50VXNlcilcclxuICAgICAgICBdKVxyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpe1xyXG4gICAgICAgIGxldCBbXHJcbiAgICAgICAgICAgIFVzZXJQcm9maWxlLFxyXG4gICAgICAgICAgICB1c2VyTW9kdWxlXHJcbiAgICAgICAgXSA9IHRoaXMubW9kdWxlc1xyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdXNlck1vZHVsZS5kZWZhdWx0LmdldEN1cnJlbnRVc2VyKClcclxuICAgICAgICBpZighVXNlclByb2ZpbGVDb21wb25lbnQpe1xyXG4gICAgICAgICAgICBjb25zdCByZW5kZXIxID0gbmV3IFVzZXJQcm9maWxlLmRlZmF1bHQoe1xyXG4gICAgICAgICAgICAgICAgdXNlcjogdXNlclxyXG4gICAgICAgICAgICB9KS5yZW5kZXIoKVxyXG4gICAgICAgICAgICBjb25uZWN0ZWRQcm9maWxlU3RvcmUgPSByZW5kZXIxLnR5cGVcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMiA9IG5ldyByZW5kZXIxLnR5cGUocmVuZGVyMS5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyMyA9IHJlbmRlcjIudHlwZS5yZW5kZXIocmVuZGVyMi5wcm9wcywgbnVsbClcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyNCA9IG5ldyByZW5kZXIzLnR5cGUocmVuZGVyMy5wcm9wcykucmVuZGVyKClcclxuICAgICAgICAgICAgVXNlclByb2ZpbGVDb21wb25lbnQgPSByZW5kZXI0LnR5cGVcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIVVzZXJQcm9maWxlQ29tcG9uZW50KXRocm93IG5ldyBFcnJvcihgQ291bGRuJ3QgZmluZCB0aGUgVXNlclByb2ZpbGVDb21wb25lbnQgY29tcG9uZW50LmApXHJcblxyXG4gICAgICAgIGxldCBkYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFJQQywgdGhpcy5wcm9wcy5wcmV2aWV3LnByb3BzLnNldHRpbmdzLnN0YXRlLmRhdGEpXHJcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSAoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ2FtZSlyZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICBsZXQgZ2FtZSA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2FtZS5uYW1lIHx8IGRlZmF1bHRSUEMubmFtZSxcclxuICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uX2lkOiB0aGlzLmdhbWUuYXBwbGljYXRpb25faWQgfHwgZGVmYXVsdFJQQy5hcHBsaWNhdGlvbl9pZCxcclxuICAgICAgICAgICAgICAgIGRldGFpbHM6IHRoaXMuZ2FtZS5kZXRhaWxzIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHN0YXRlOiB0aGlzLmdhbWUuc3RhdGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wczogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXSA/IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5nYW1lW1widGltZXN0YW1wcy5zdGFydFwiXVxyXG4gICAgICAgICAgICAgICAgfSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIGFzc2V0czogdGhpcy5nYW1lW1wiYXNzZXRzLmxhcmdlXCJdID8ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhcmdlX2ltYWdlOiB0aGlzLmdhbWVbXCJhc3NldHMubGFyZ2VcIl0sXHJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxfaW1hZ2U6IHRoaXMuZ2FtZVtcImFzc2V0cy5zbWFsbFwiXSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAwXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGdhbWVcclxuICAgICAgICB9KS5jYWxsKHtcclxuICAgICAgICAgICAgZ2FtZTogZGF0YVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIFByb2ZpbGVQcm9wcyA9IG5ldyBjb25uZWN0ZWRQcm9maWxlU3RvcmUoe1xyXG4gICAgICAgICAgICB1c2VyOiB1c2VyLFxyXG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge31cclxuICAgICAgICB9KS5yZW5kZXIoKS5wcm9wc1xyXG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBuZXcgVXNlclByb2ZpbGVDb21wb25lbnQoT2JqZWN0LmFzc2lnbih7fSwgUHJvZmlsZVByb3BzLCB7XHJcbiAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxyXG4gICAgICAgIH0pKS5yZW5kZXIoKS5wcm9wcy5jaGlsZHJlbiAvLyBieXBhc3MgdHJhY2tpbmdcclxuXHJcbiAgICAgICAgcHJvZmlsZS5wcm9wcy5zdHlsZSA9IHtcclxuICAgICAgICAgICAgd2lkdGg6IFwiYXV0b1wiXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsYy10YWIgbGMtdGFiLWJveC1zaGFkb3dcIj5cclxuICAgICAgICAgICAge3Byb2ZpbGV9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5pbXBvcnQgRE9NIGZyb20gXCIuLi8uLi9tb2R1bGVzL2RvbXRvb2xzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfTGF5ZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLmtleXVwTGlzdGVuZXIgPSB0aGlzLmtleXVwTGlzdGVuZXIuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBrZXl1cExpc3RlbmVyKGUpIHtcclxuICAgICAgICBpZiAoZS53aGljaCA9PT0gMjcpIHtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdERvbS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMucmVmcy5yb290LnBhcmVudE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIHRoaXMua2V5dXBMaXN0ZW5lcik7XHJcblxyXG4gICAgICAgIGNvbnN0IHRoaXNOb2RlID0gRE9NLnF1ZXJ5KGAjJHt0aGlzLnByb3BzLmlkfWApO1xyXG4gICAgICAgIERPTS5hbmltYXRlKHtcclxuICAgICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbihwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7MS4xIC0gMC4xICogcHJvZ3Jlc3N9KSB0cmFuc2xhdGVaKDBweClgO1xyXG4gICAgICAgICAgICAgICAgdGhpc05vZGUuc3R5bGUub3BhY2l0eSA9IHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xyXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5rZXl1cExpc3RlbmVyKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGhpc05vZGUgPSBET00ucXVlcnkoYCMke3RoaXMucHJvcHMuaWR9YCk7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHsxLjEgLSAwLjEgKiAoMSAtIHByb2dyZXNzKX0pIHRyYW5zbGF0ZVooMHB4KWA7XHJcbiAgICAgICAgICAgICAgICB0aGlzTm9kZS5zdHlsZS5vcGFjaXR5ID0gMSAtIHByb2dyZXNzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzTm9kZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBsYXllciA9IERPTS5xdWVyeShcIi5wdWJsaWNTZXJ2ZXJzT3BlblwiKTtcclxuICAgICAgICBsYXllci5jbGFzc0xpc3QucmVtb3ZlKFwicHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHswLjA3ICogcHJvZ3Jlc3MgKyAwLjkzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSBwcm9ncmVzcztcclxuICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUudHJhbnNmb3JtID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIuc3R5bGUub3BhY2l0eSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXIgPSBET00ucXVlcnkoXCJbY2xhc3MqPVxcXCJsYXllci1cXFwiXVwiKTtcclxuICAgICAgICBsYXllci5jbGFzc0xpc3QuYWRkKFwicHVibGljU2VydmVyc09wZW5cIik7XHJcbiAgICAgICAgRE9NLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKHByb2dyZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBsYXllci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHswLjA3ICogKDEgLSBwcm9ncmVzcykgKyAwLjkzfSkgdHJhbnNsYXRlWigwcHgpYDtcclxuICAgICAgICAgICAgICAgIGxheWVyLnN0eWxlLm9wYWNpdHkgPSAxIC0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJsYXllciBiZC1sYXllciBcIitCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllciAmJiBlLmFuaW1hdGluZylbMF0ubGF5ZXIsIGlkOiB0aGlzLnByb3BzLmlkLCByZWY6IFwicm9vdFwiLCBzdHlsZToge29wYWNpdHk6IDAsIHRyYW5zZm9ybTogXCJzY2FsZSgxLjEpIHRyYW5zbGF0ZVooMHB4KVwifX0sXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hpbGRyZW5cclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBUb29scyBmcm9tIFwiLi4vdG9vbHNcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3NldHRpbmdzVGl0bGVcIjtcclxuaW1wb3J0IFRhYkJhclNlcGFyYXRvciBmcm9tIFwiLi4vdGFiQmFyU2VwYXJhdG9yXCI7XHJcbmltcG9ydCBUYWJCYXJIZWFkZXIgZnJvbSBcIi4uL3RhYkJhckhlYWRlclwiO1xyXG5pbXBvcnQgVGFiQmFySXRlbSBmcm9tIFwiLi4vdGFiQmFySXRlbVwiO1xyXG5cclxuaW1wb3J0IFNlcnZlckNhcmQgZnJvbSBcIi4vc2VydmVyQ2FyZFwiO1xyXG5pbXBvcnQgU2lkZWJhclZpZXcgZnJvbSBcIi4vc2lkZWJhclZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19QdWJsaWNTZXJ2ZXJzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlQ2F0ZWdvcnkgPSB0aGlzLmNoYW5nZUNhdGVnb3J5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2ggPSB0aGlzLnNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoS2V5RG93biA9IHRoaXMuc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uID0gdGhpcy5jaGVja0Nvbm5lY3Rpb24uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmpvaW4gPSB0aGlzLmpvaW4uYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmNvbm5lY3QgPSB0aGlzLmNvbm5lY3QuYmluZCh0aGlzKTtcclxuXHJcbiAgICAgICAgdGhpcy5HdWlsZFN0b3JlID0gQkRWMi5XZWJwYWNrTW9kdWxlcy5maW5kQnlVbmlxdWVQcm9wZXJ0aWVzKFtcImdldEd1aWxkc1wiXSk7XHJcbiAgICAgICAgdGhpcy5BdmF0YXJEZWZhdWx0cyA9IEJEVjIuV2VicGFja01vZHVsZXMuZmluZEJ5VW5pcXVlUHJvcGVydGllcyhbXCJnZXRVc2VyQXZhdGFyVVJMXCIsIFwiREVGQVVMVF9BVkFUQVJTXCJdKTtcclxuICAgICAgICB0aGlzLkludml0ZUFjdGlvbnMgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiYWNjZXB0SW52aXRlXCJdKTtcclxuICAgICAgICB0aGlzLlNvcnRlZEd1aWxkU3RvcmUgPSBCRFYyLldlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMoW1wiZ2V0U29ydGVkR3VpbGRzXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogLTEsXHJcbiAgICAgICAgICAgIHRpdGxlOiBcIkxvYWRpbmcuLi5cIixcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgc2VydmVyczogW10sXHJcbiAgICAgICAgICAgIG5leHQ6IG51bGwsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgIHN0YXRlOiAwLFxyXG4gICAgICAgICAgICAgICAgdXNlcjogbnVsbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICBCRFYyLnJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5wcm9wcy5yb290SWQpKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2gocXVlcnksIGNsZWFyKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgZmV0Y2goYCR7c2VsZi5lbmRQb2ludH0ke3F1ZXJ5fSR7cXVlcnkgPyBcIiZzY2hlbWE9bmV3XCIgOiBcIj9zY2hlbWE9bmV3XCJ9YCwge1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiZ2V0XCJcclxuICAgICAgICB9KS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCl0aHJvdyBhd2FpdCByZXMudGV4dCgpXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBkYXRhLnJlc3VsdHMucmVkdWNlKChhcnIsIHNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2VydmVyLmpvaW5lZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goc2VydmVyKTtcclxuICAgICAgICAgICAgICAgIC8vIGFyci5wdXNoKDxTZXJ2ZXJDYXJkIHNlcnZlcj17c2VydmVyfSBqb2luPXtzZWxmLmpvaW59Lz4pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICAgICAgfSwgW10pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjbGVhcikge1xyXG4gICAgICAgICAgICAgICAgc2VydmVycyA9IHNlbGYuc3RhdGUuc2VydmVycy5jb25jYXQoc2VydmVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvL3NlcnZlcnMudW5zaGlmdChzZWxmLmJkU2VydmVyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGVuZCA9IGRhdGEuc2l6ZSArIGRhdGEuZnJvbTtcclxuICAgICAgICAgICAgZGF0YS5uZXh0ID0gYD9mcm9tPSR7ZW5kfWA7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlLnRlcm0pIGRhdGEubmV4dCArPSBgJnRlcm09JHtzZWxmLnN0YXRlLnRlcm19YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSkgZGF0YS5uZXh0ICs9IGAmY2F0ZWdvcnk9JHtzZWxmLmNhdGVnb3J5QnV0dG9uc1tzZWxmLnN0YXRlLnNlbGVjdGVkQ2F0ZWdvcnldfWA7XHJcbiAgICAgICAgICAgIGlmIChlbmQgPj0gZGF0YS50b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgZW5kID0gZGF0YS50b3RhbDtcclxuICAgICAgICAgICAgICAgIGRhdGEubmV4dCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGBTaG93aW5nIDEtJHtlbmR9IG9mICR7ZGF0YS50b3RhbH0gcmVzdWx0cyBpbiAke3NlbGYuY2F0ZWdvcnlCdXR0b25zW3NlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeV19YDtcclxuICAgICAgICAgICAgaWYgKHNlbGYuc3RhdGUudGVybSkgdGl0bGUgKz0gYCBmb3IgJHtzZWxmLnN0YXRlLnRlcm19YDtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgICAgICBzZXJ2ZXJzOiBzZXJ2ZXJzLFxyXG4gICAgICAgICAgICAgICAgbmV4dDogZGF0YS5uZXh0XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNsZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWZzLnNidi5yZWZzLmNvbnRlbnRTY3JvbGxlci5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJGYWlsZWQgdG8gbG9hZCBzZXJ2ZXJzLiBDaGVjayBjb25zb2xlIGZvciBkZXRhaWxzXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBqb2luKHNlcnZlckNhcmQpIHtcclxuICAgICAgICBpZiAoc2VydmVyQ2FyZC5wcm9wcy5waW5uZWQpIHJldHVybiB0aGlzLkludml0ZUFjdGlvbnMuYWNjZXB0SW52aXRlKHNlcnZlckNhcmQucHJvcHMuaW52aXRlX2NvZGUpO1xyXG5cclxuICAgICAgICBhd2FpdCBmZXRjaChgJHt0aGlzLmpvaW5FbmRQb2ludH0vJHtzZXJ2ZXJDYXJkLnByb3BzLnNlcnZlci5pZGVudGlmaWVyfWAse1xyXG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiBcImluY2x1ZGVcIixcclxuICAgICAgICAgICAgbW9kZTogXCJjb3JzXCIsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQWNjZXB0XCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZXJ2ZXJDYXJkLnNldFN0YXRlKHtqb2luZWQ6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25uZWN0KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxmLndpbmRvd09wdGlvbnM7XHJcbiAgICAgICAgb3B0aW9ucy54ID0gTWF0aC5yb3VuZCh3aW5kb3cuc2NyZWVuWCArIHdpbmRvdy5pbm5lcldpZHRoIC8gMiAtIG9wdGlvbnMud2lkdGggLyAyKTtcclxuICAgICAgICBvcHRpb25zLnkgPSBNYXRoLnJvdW5kKHdpbmRvdy5zY3JlZW5ZICsgd2luZG93LmlubmVySGVpZ2h0IC8gMiAtIG9wdGlvbnMuaGVpZ2h0IC8gMik7XHJcblxyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdyA9IG5ldyAod2luZG93LnJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuQnJvd3NlcldpbmRvdykob3B0aW9ucyk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gXCJodHRwczovL2F1dGguZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3Q/c2NvcGVzPWd1aWxkcy5qb2luJnByZXZpb3VzVXJsPWh0dHBzOi8vYXV0aC5kaXNjb3Jkc2VydmVycy5jb20vaW5mb1wiO1xyXG4gICAgICAgIHNlbGYuam9pbldpbmRvdy53ZWJDb250ZW50cy5vbihcImRpZC1uYXZpZ2F0ZVwiLCAoZXZlbnQsIHVybCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXJsICE9IFwiaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvXCIpIHJldHVybjtcclxuICAgICAgICAgICAgc2VsZi5qb2luV2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHNlbGYuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VsZi5qb2luV2luZG93LmxvYWRVUkwodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgd2luZG93T3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB3aWR0aDogNTAwLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDU1MCxcclxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiMyODJiMzBcIixcclxuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBtaW5pbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsd2F5c09uVG9wOiB0cnVlLFxyXG4gICAgICAgICAgICBmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHdlYlByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgICAgICAgICBub2RlSW50ZWdyYXRpb246IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBiZFNlcnZlcigpIHtcclxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQmV0dGVyRGlzY29yZFwiLFxyXG4gICAgICAgICAgICBvbmxpbmU6IFwiNzUwMCtcIixcclxuICAgICAgICAgICAgbWVtYmVyczogXCIyMDAwMCtcIixcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBCZXR0ZXJEaXNjb3JkIHNlcnZlciBmb3Igc3VwcG9ydCBldGNcIixcclxuICAgICAgICAgICAgaWRlbnRpZmllcjogXCI4NjAwNDc0NDk2NjkxNDA0OFwiLFxyXG4gICAgICAgICAgICBpY29uVXJsOiBcImh0dHBzOi8vY2RuLmRpc2NvcmRhcHAuY29tL2ljb25zLzg2MDA0NzQ0OTY2OTE0MDQ4LzI5MmU3ZjZiZmZmMmI3MWRmZDEzZTUwOGE4NTlhZWRkLndlYnBcIixcclxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcclxuICAgICAgICAgICAgaW52aXRlX2NvZGU6IFwiMFRtZm81WmJPUkNScWJBZFwiLFxyXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHNlcnZlcjIgPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiTGlnaHRjb3JkXCIsXHJcbiAgICAgICAgICAgIG9ubGluZTogXCIzMCtcIixcclxuICAgICAgICAgICAgbWVtYmVyczogXCI1MCtcIixcclxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1wiY29tbXVuaXR5XCIsIFwicHJvZ3JhbW1pbmdcIiwgXCJzdXBwb3J0XCJdLFxyXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJPZmZpY2lhbCBMaWdodGNvcmQgc2VydmVyIGZvciBzdXBwb3J0IGV0Y1wiLFxyXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBcIjg2MDA0NzQ0OTY2OTE0MDQ4XCIsXHJcbiAgICAgICAgICAgIGljb25Vcmw6IFwiaHR0cHM6Ly9hdmF0YXJzMy5naXRodWJ1c2VyY29udGVudC5jb20vdS82NTY5MDA1OD9zPTIwMCZ2PTRcIixcclxuICAgICAgICAgICAgbmF0aXZlam9pbjogdHJ1ZSxcclxuICAgICAgICAgICAgaW52aXRlX2NvZGU6IFwiN2VGZmYyQVwiLFxyXG4gICAgICAgICAgICBwaW5uZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGd1aWxkTGlzdCA9IHRoaXMuU29ydGVkR3VpbGRTdG9yZS5nZXRGbGF0dGVuZWRHdWlsZElkcygpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRMaXN0ID0gdGhpcy5BdmF0YXJEZWZhdWx0cy5ERUZBVUxUX0FWQVRBUlM7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtzZXJ2ZXI6IHNlcnZlcjIsIHBpbm5lZDogdHJ1ZSwgam9pbjogdGhpcy5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2VydmVyQ2FyZCwge3NlcnZlcjogc2VydmVyLCBwaW5uZWQ6IHRydWUsIGpvaW46IHRoaXMuam9pbiwgZ3VpbGRMaXN0OiBndWlsZExpc3QsIGZhbGxiYWNrOiBkZWZhdWx0TGlzdFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1KV19KVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZW5kUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9zZWFyY2guZGlzY29yZHNlcnZlcnMuY29tXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGpvaW5FbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL2ouZGlzY29yZHNlcnZlcnMuY29tXCI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNvbm5lY3RFbmRQb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gXCJodHRwczovL2pvaW4uZGlzY29yZHNlcnZlcnMuY29tL2Nvbm5lY3RcIjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0Nvbm5lY3Rpb24oKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgaHR0cHM6Ly9hdXRoLmRpc2NvcmRzZXJ2ZXJzLmNvbS9pbmZvYCx7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogXCJpbmNsdWRlXCIsXHJcbiAgICAgICAgICAgICAgICBtb2RlOiBcImNvcnNcIixcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkFjY2VwdFwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAwLFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXI6IGRhdGFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNlbGYuc2VhcmNoKFwiXCIsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogXCJOb3QgY29ubmVjdGVkIHRvIGRpc2NvcmRzZXJ2ZXJzLmNvbSFcIixcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENhdGVnb3J5OiAtMSxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb246IHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogMSxcclxuICAgICAgICAgICAgICAgICAgICB1c2VyOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyVmlldywge3JlZjogXCJzYnZcIn0sIHRoaXMuY29tcG9uZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29tcG9uZW50KCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHNpZGViYXI6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5zaWRlYmFyXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5jb250ZW50XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRvb2xzOiB7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJwdFwiLCByZWY6IFwidG9vbHNcIiwgb25DbGljazogdGhpcy5jbG9zZX0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaWRlYmFyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2lkZWJhclwiLCBrZXk6IFwicHNcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXIgU0lERVwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1oZWFkZXJcIiwgc3R5bGU6IHtmb250U2l6ZTogXCIxNnB4XCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICBcIlB1YmxpYyBTZXJ2ZXJzXCJcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChUYWJCYXJIZWFkZXIsIHt0ZXh0OiBcIkNhdGVnb3JpZXNcIn0pLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeUJ1dHRvbnMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhckl0ZW0sIHtpZDogaW5kZXgsIG9uQ2xpY2s6IHRoaXMuY2hhbmdlQ2F0ZWdvcnksIGtleTogaW5kZXgsIHRleHQ6IHZhbHVlLCBzZWxlY3RlZDogdGhpcy5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5ID09PSBpbmRleH0pO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiQmFyU2VwYXJhdG9yLCBudWxsKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWFyY2hJbnB1dCgpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWZvcm0taXRlbVwifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktdGV4dC1pbnB1dCBmbGV4LXZlcnRpY2FsXCIsIHN0eWxlOiB7d2lkdGg6IFwiMTcycHhcIiwgbWFyZ2luTGVmdDogXCIxMHB4XCJ9fSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtyZWY6IFwic2VhcmNoaW5wdXRcIiwgb25LZXlEb3duOiB0aGlzLnNlYXJjaEtleURvd24sIG9uQ2hhbmdlOiAoKSA9PiB7fSwgdHlwZTogXCJ0ZXh0XCIsIGNsYXNzTmFtZTogXCJpbnB1dCBkZWZhdWx0XCIsIHBsYWNlaG9sZGVyOiBcIlNlYXJjaC4uLlwiLCBtYXhMZW5ndGg6IFwiNTBcIn0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaEtleURvd24oZSkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmxvYWRpbmcgfHwgZS53aGljaCAhPT0gMTMpIHJldHVybjtcclxuICAgICAgICBzZWxmLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiTG9hZGluZy4uLlwiLFxyXG4gICAgICAgICAgICB0ZXJtOiBlLnRhcmdldC52YWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBxdWVyeSA9IGA/dGVybT0ke2UudGFyZ2V0LnZhbHVlfWA7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUuc2VsZWN0ZWRDYXRlZ29yeSAhPT0gMCkge1xyXG4gICAgICAgICAgICBxdWVyeSArPSBgJmNhdGVnb3J5PSR7c2VsZi5jYXRlZ29yeUJ1dHRvbnNbc2VsZi5zdGF0ZS5zZWxlY3RlZENhdGVnb3J5XX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxmLnNlYXJjaChxdWVyeSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGNhdGVnb3J5QnV0dG9ucygpIHtcclxuICAgICAgICByZXR1cm4gW1wiQWxsXCIsIFwiRlBTIEdhbWVzXCIsIFwiTU1PIEdhbWVzXCIsIFwiU3RyYXRlZ3kgR2FtZXNcIiwgXCJNT0JBIEdhbWVzXCIsIFwiUlBHIEdhbWVzXCIsIFwiVGFibGV0b3AgR2FtZXNcIiwgXCJTYW5kYm94IEdhbWVzXCIsIFwiU2ltdWxhdGlvbiBHYW1lc1wiLCBcIk11c2ljXCIsIFwiQ29tbXVuaXR5XCIsIFwiTGFuZ3VhZ2VcIiwgXCJQcm9ncmFtbWluZ1wiLCBcIk90aGVyXCJdO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUNhdGVnb3J5KGlkKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIHNlbGYucmVmcy5zZWFyY2hpbnB1dC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgc2VsZi5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IGlkLFxyXG4gICAgICAgICAgICB0aXRsZTogXCJMb2FkaW5nLi4uXCIsXHJcbiAgICAgICAgICAgIHRlcm06IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaWQgPT09IDApIHtcclxuICAgICAgICAgICAgc2VsZi5zZWFyY2goXCJcIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VsZi5zZWFyY2goYD9jYXRlZ29yeT0ke3NlbGYuY2F0ZWdvcnlCdXR0b25zW2lkXX1gLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY29udGVudCgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICBjb25zdCBndWlsZExpc3QgPSB0aGlzLlNvcnRlZEd1aWxkU3RvcmUuZ2V0RmxhdHRlbmVkR3VpbGRJZHMoKTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0TGlzdCA9IHRoaXMuQXZhdGFyRGVmYXVsdHMuREVGQVVMVF9BVkFUQVJTO1xyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlLmNvbm5lY3Rpb24uc3RhdGUgPT09IDEpIHJldHVybiBzZWxmLm5vdENvbm5lY3RlZDtcclxuICAgICAgICBsZXQgY29sdW1uTW9kdWxlID0gQkRNb2R1bGVzLmdldChlID0+IGUuY29udGVudENvbHVtbkRlZmF1bHQpWzBdXHJcbiAgICAgICAgcmV0dXJuIFtCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtyZWY6IFwiY29udGVudFwiLCBrZXk6IFwicGNcIiwgY2xhc3NOYW1lOiBjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBcIitjb2x1bW5Nb2R1bGUuY29udGVudENvbHVtbitcIiBjb250ZW50LWNvbHVtbiBkZWZhdWx0XCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NUaXRsZSwge3RleHQ6IHNlbGYuc3RhdGUudGl0bGV9KSxcclxuICAgICAgICAgICAgc2VsZi5iZFNlcnZlcixcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLm1hcCgoc2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNlcnZlckNhcmQsIHtrZXk6IHNlcnZlci5pZGVudGlmaWVyLCBzZXJ2ZXI6IHNlcnZlciwgam9pbjogc2VsZi5qb2luLCBndWlsZExpc3Q6IGd1aWxkTGlzdCwgZmFsbGJhY2s6IGRlZmF1bHRMaXN0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUpXX0pO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5uZXh0ICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5zdGF0ZS5sb2FkaW5nKSByZXR1cm47c2VsZi5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0pOyBzZWxmLnNlYXJjaChzZWxmLnN0YXRlLm5leHQsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9LCBjbGFzc05hbWU6IFwidWktYnV0dG9uIGZpbGxlZCBicmFuZCBzbWFsbCBncm93XCIsIHN0eWxlOiB7d2lkdGg6IFwiMTAwJVwiLCBtYXJnaW5Ub3A6IFwiMTBweFwiLCBtYXJnaW5Cb3R0b206IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRlLmxvYWRpbmcgPyBcIkxvYWRpbmdcIiA6IFwiTG9hZCBNb3JlXCJcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgc2VsZi5zdGF0ZS5zZXJ2ZXJzLmxlbmd0aCA+IDAgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBzZWxmLnN0YXRlLnRpdGxlfSlcclxuICAgICAgICApXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm90Q29ubmVjdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7IHRleHQ6IHNlbGYuc3RhdGUudGl0bGUgfSk7XHJcbiAgICAgICAgbGV0IGNvbHVtbk1vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLmNvbnRlbnRDb2x1bW5EZWZhdWx0KVswXVxyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7a2V5OiBcIm5jY1wiLCByZWY6IFwiY29udGVudFwiLCBjbGFzc05hbWU6IGNvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIFwiK2NvbHVtbk1vZHVsZS5jb250ZW50Q29sdW1uK1wiIGNvbnRlbnQtY29sdW1uIGRlZmF1bHRcIn0sXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMiBtYXJnaW4tcmVzZXQgbWFyZ2luLWJvdHRvbS0yMFwifSxcclxuICAgICAgICAgICAgICAgIFwiTm90IGNvbm5lY3RlZCB0byBkaXNjb3Jkc2VydmVycy5jb20hXCIsXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IHNlbGYuY29ubmVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCIxOHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBcIjEwcHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IFwiMTRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1idXR0b24tY29udGVudHNcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29ubmVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApLCBzZWxmLmJkU2VydmVyXHJcbiAgICAgICAgKV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGZvb3RlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLXRhYi1iYXItaGVhZGVyXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImFcIixcclxuICAgICAgICAgICAgICAgIHtocmVmOiBcImh0dHBzOi8vZGlzY29yZHNlcnZlcnMuY29tXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICBcIkRpc2NvcmRzZXJ2ZXJzLmNvbVwiXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25uZWN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IHtjb25uZWN0aW9ufSA9IHNlbGYuc3RhdGU7XHJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24uc3RhdGUgIT09IDIpIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwpO1xyXG5cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcInNwYW5cIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFRhYkJhclNlcGFyYXRvciwgbnVsbCksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxyXG4gICAgICAgICAgICAgICAge3N0eWxlOiB7Y29sb3I6IFwiI2I5YmJiZVwiLCBmb250U2l6ZTogXCIxMHB4XCIsIG1hcmdpbkxlZnQ6IFwiMTBweFwifX0sXHJcbiAgICAgICAgICAgICAgICBcIkNvbm5lY3RlZCBhczogXCIsXHJcbiAgICAgICAgICAgICAgICBgJHtjb25uZWN0aW9uLnVzZXIudXNlcm5hbWV9IyR7Y29ubmVjdGlvbi51c2VyLmRpc2NyaW1pbmF0b3J9YFxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge3N0eWxlOiB7cGFkZGluZzogXCI1cHggMTBweCAwIDEwcHhcIn19LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAge3N0eWxlOiB7d2lkdGg6IFwiMTAwJVwiLCBtaW5IZWlnaHQ6IFwiMjBweFwifSwgdHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcInVpLWJ1dHRvbiBmaWxsZWQgYnJhbmQgc21hbGwgZ3Jvd1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCIsIG9uQ2xpY2s6IHNlbGYuY29ubmVjdH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiUmVjb25uZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG59XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NlcnZlckNhcmQgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCkgdGhpcy5wcm9wcy5zZXJ2ZXIuaWNvblVybCA9IHRoaXMucHJvcHMuZmFsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgaW1hZ2VFcnJvcjogZmFsc2UsXHJcbiAgICAgICAgICAgIGpvaW5lZDogdGhpcy5wcm9wcy5ndWlsZExpc3QuaW5jbHVkZXModGhpcy5wcm9wcy5zZXJ2ZXIuaWRlbnRpZmllcilcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2VydmVyfSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgbGV0IGNhcmRNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jYXJkICYmIGUuY2FyZFByaW1hcnkpWzBdXHJcbiAgICAgICAgbGV0IGZsZXhNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5mbGV4Q2hpbGQgJiYgZS5faG9yaXpvbnRhbFJldmVyc2UpWzBdXHJcbiAgICAgICAgbGV0IHdyYXBNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5ub1dyYXAgJiYgIWUuc3RyZWFtZXJNb2RlRW5hYmxlZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLCAvLyBjYXJkUHJpbWFyeS0xSHYtdG9cclxuICAgICAgICAgICAge2NsYXNzTmFtZTogYCR7Y2FyZE1vZHVsZS5jYXJkfSAke2NhcmRNb2R1bGUuY2FyZFByaW1hcnl9ICR7QkRNb2R1bGVzLmdldChlID0+IGUubWFyZ2luQm90dG9tOClbMF0ubWFyZ2luQm90dG9tOH0gYmQtc2VydmVyLWNhcmQke3NlcnZlci5waW5uZWQgPyBcIiBiZC1zZXJ2ZXItY2FyZC1waW5uZWRcIiA6IFwiXCJ9YH0sXHJcbiAgICAgICAgICAgIC8vIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIC8vIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAvLyB7IGNsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBmbGV4LTFPMUdLWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIGp1c3RpZnlTdGFydC0yeUlabzAgYWxpZ25TdHJldGNoLTFod3hNYSBub1dyYXAtM2p5bnY2XCIgfSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7cmVmOiBcImltZ1wiLCBjbGFzc05hbWU6IFwiYmQtc2VydmVyLWltYWdlXCIsIHNyYzogc2VydmVyLmljb25VcmwsIG9uRXJyb3I6IHRoaXMuaGFuZGxlRXJyb3IuYmluZCh0aGlzKSwgZHJhZ2dhYmxlOiBmYWxzZX0pLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogZmxleE1vZHVsZS5mbGV4Q2hpbGQrXCIgYmQtc2VydmVyLWNvbnRlbnRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXArXCIgYmQtc2VydmVyLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJoNS0xOF8xbmQgZGVmYXVsdENvbG9yLTFfYWpYMCBtYXJnaW4tcmVzZXQgYmQtc2VydmVyLW5hbWVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIubmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImg1XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImg1LTE4XzFuZCBkZWZhdWx0Q29sb3ItMV9halgwIG1hcmdpbi1yZXNldCBiZC1zZXJ2ZXItbWVtYmVyLWNvdW50XCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLm1lbWJlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBNZW1iZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBmbGV4TW9kdWxlLmhvcml6b250YWwrXCIgXCIrd3JhcE1vZHVsZS5ub1dyYXB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0SGFpcmxpbmUtREJELTJkIHNjcm9sbGVyRmFkZS0xSWp3NXkgYmQtc2VydmVyLWRlc2NyaXB0aW9uLWNvbnRhaW5lclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2Nyb2xsZXItMkZLRlBHIHNjcm9sbGVyIGJkLXNlcnZlci1kZXNjcmlwdGlvblwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAge2NsYXNzTmFtZTogXCJmbGV4LTF4TVFnNSBmbGV4LTFPMUdLWSBob3Jpem9udGFsLTFhZTljaSBob3Jpem9udGFsLTJFRUVuWSBkaXJlY3Rpb25Sb3ctM3YzdGZHIG5vV3JhcC0zanludjYgYmQtc2VydmVyLWZvb3RlclwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiZmxleENoaWxkLWZhb1ZXMyBiZC1zZXJ2ZXItdGFnc1wiLCBzdHlsZToge2ZsZXg6IFwiMSAxIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmNhdGVnb3JpZXMuam9pbihcIiwgXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuam9pbmVkICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gY29sb3JHcmVlbi0yOWlBS1lcIiwgc3R5bGU6IHttaW5IZWlnaHQ6IFwiMTJweFwiLCBtYXJnaW5Ub3A6IFwiNHB4XCIsIGJhY2tncm91bmRDb2xvcjogXCIjM2FjMTVjXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmVycm9yICYmIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogXCJidXR0b25cIiwgY2xhc3NOYW1lOiBcImJ1dHRvbi0zOGFTY3IgbG9va0ZpbGxlZC0xR3gwMFAgY29sb3JCcmFuZC0zcFhyOTEgc2l6ZU1pbi0xbUpkMXggZ3Jvdy1xNzdPTk4gZGlzYWJsZWQtOWFGMnVnXCIsIHN0eWxlOiB7bWluSGVpZ2h0OiBcIjEycHhcIiwgbWFyZ2luVG9wOiBcIjRweFwiLCBiYWNrZ3JvdW5kQ29sb3I6IFwiI2MxM2EzYVwifX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInVpLWJ1dHRvbi1jb250ZW50c1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXNlcnZlci5lcnJvciAmJiAhdGhpcy5zdGF0ZS5qb2luZWQgJiYgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiBcImJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYnV0dG9uLTM4YVNjciBsb29rRmlsbGVkLTFHeDAwUCBjb2xvckJyYW5kLTNwWHI5MSBzaXplTWluLTFtSmQxeCBncm93LXE3N09OTlwiLCBzdHlsZToge21pbkhlaWdodDogXCIxMnB4XCIsIG1hcmdpblRvcDogXCI0cHhcIn0sIG9uQ2xpY2s6ICgpID0+IHt0aGlzLmpvaW4oKTt9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwidWktYnV0dG9uLWNvbnRlbnRzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiSm9pblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUVycm9yKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuc2VydmVyLmljb25VcmwgPSB0aGlzLnByb3BzLmZhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2ltYWdlRXJyb3I6IHRydWV9KTtcclxuICAgIH1cclxuXHJcbiAgICBqb2luKCkge1xyXG4gICAgICAgIHRoaXMucHJvcHMuam9pbih0aGlzKTtcclxuICAgICAgICAvL3RoaXMuc2V0U3RhdGUoe2pvaW5lZDogdHJ1ZX0pO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uLy4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vc2Nyb2xsZXJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TaWRlYmFyVmlldyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICBjb25zdCB7c2lkZWJhciwgY29udGVudCwgdG9vbHN9ID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7Y2xhc3NOYW1lOiBcInN0YW5kYXJkU2lkZWJhclZpZXctM0YxSTdpIHVpLXN0YW5kYXJkLXNpZGViYXItdmlld1wifSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwic2lkZWJhclJlZ2lvbi1WRlRVa04gc2lkZWJhci1yZWdpb25cIn0sXHJcbiAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtrZXk6IFwic2lkZWJhclNjcm9sbGVyXCIsIHJlZjogXCJzaWRlYmFyU2Nyb2xsZXJcIiwgc2lkZWJhcjogdHJ1ZSwgZmFkZTogc2lkZWJhci5mYWRlIHx8IHRydWUsIGRhcms6IHNpZGViYXIuZGFyayB8fCB0cnVlfSwgc2lkZWJhci5jb21wb25lbnQpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImNvbnRlbnRSZWdpb24tM25EdVl5IGNvbnRlbnQtcmVnaW9uXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiY29udGVudFRyYW5zaXRpb25XcmFwLTNocU9FVyBjb250ZW50LXRyYW5zaXRpb24td3JhcFwifSxcclxuICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJzY3JvbGxlcldyYXAtMmxKRWtkIGZpcmVmb3hGaXhTY3JvbGxGbGV4LWNuSTJpeCBjb250ZW50UmVnaW9uU2Nyb2xsZXJXcmFwLTNZWlhkbSBjb250ZW50LXJlZ2lvbi1zY3JvbGxlci13cmFwIHNjcm9sbGVyVGhlbWVkLTJvZW51cyB0aGVtZUdob3N0LTI4TVNuMCBzY3JvbGxlclRyYWNrLTFaSXBzdlwifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwic2Nyb2xsZXItMkZLRlBHIGZpcmVmb3hGaXhTY3JvbGxGbGV4LWNuSTJpeCBjb250ZW50UmVnaW9uU2Nyb2xsZXItMjZuYzFlIGNvbnRlbnQtcmVnaW9uLXNjcm9sbGVyIHNjcm9sbGVyXCIsIHJlZjogXCJjb250ZW50U2Nyb2xsZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJjb250ZW50Q29sdW1uLTJocklZSCBjb250ZW50Q29sdW1uRGVmYXVsdC0xVlFrR00gY29udGVudC1jb2x1bW4gZGVmYXVsdFwifSwgY29udGVudC5jb21wb25lbnQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHMuY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19SZWxvYWRJY29uIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XHJcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiI2RjZGRkZVwiLFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXJlbG9hZCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5wcm9wcy5vbkNsaWNrLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHt3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIn1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZDogXCJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6XCJ9KSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7ZmlsbDogXCJub25lXCIsIGQ6IFwiTTAgMGgyNHYyNEgwelwifSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TY3JvbGxlciBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICAvL3Njcm9sbGVyV3JhcC0ybEpFa2Qgc2Nyb2xsZXJUaGVtZWQtMm9lbnVzIHRoZW1lR2hvc3RIYWlybGluZS1EQkQtMmQgc2Nyb2xsZXJGYWRlLTFJanc1eVxyXG4gICAgICAgIGxldCBzY3JvbGxlck1vZHVsZTEgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5zY3JvbGxlckhvcml6b250YWwpWzBdXHJcbiAgICAgICAgbGV0IHNjcm9sbGVyTW9kdWxlMiA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnNpZGViYXJSZWdpb25TY3JvbGxlcilbMF1cclxuICAgICAgICBsZXQgd3JhcHBlckNsYXNzID0gYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3RIYWlybGluZX0ke3RoaXMucHJvcHMuZmFkZSA/IFwiIFwiK3Njcm9sbGVyTW9kdWxlMS5zY3JvbGxlckZhZGUgOiBcIlwifWA7XHJcbiAgICAgICAgbGV0IHNjcm9sbGVyQ2xhc3MgPSBzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXIrXCIgc2Nyb2xsZXJcIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdWNrICovXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuc2lkZWJhcikgc2Nyb2xsZXJDbGFzcyArPSBgICR7c2Nyb2xsZXJNb2R1bGUyLnNpZGViYXJSZWdpb25TY3JvbGxlcn0gc2lkZWJhci1yZWdpb24tc2Nyb2xsZXJgXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuY29udGVudENvbHVtbikge1xyXG4gICAgICAgICAgICBzY3JvbGxlckNsYXNzICs9IFwiIFwiK3Njcm9sbGVyTW9kdWxlMi5jb250ZW50UmVnaW9uU2Nyb2xsZXIrXCIgY29udGVudC1yZWdpb24tc2Nyb2xsZXJcIjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1Y2sgKi9cclxuICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gYCR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyV3JhcH0gJHtzY3JvbGxlck1vZHVsZTIuY29udGVudFJlZ2lvblNjcm9sbGVyV3JhcH0gY29udGVudC1yZWdpb24tc2Nyb2xsZXItd3JhcCAgJHtzY3JvbGxlck1vZHVsZTEuc2Nyb2xsZXJUaGVtZWR9ICR7c2Nyb2xsZXJNb2R1bGUxLnRoZW1lR2hvc3R9ICR7c2Nyb2xsZXJNb2R1bGUxLnNjcm9sbGVyVHJhY2t9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qge2NoaWxkcmVufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgXCJkaXZcIixcclxuICAgICAgICAgICAge2tleTogXCJzY3JvbGxlcndyYXBcIiwgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3N9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAge2tleTogXCJzY3JvbGxlclwiLCByZWY6IFwic2Nyb2xsZXJcIiwgY2xhc3NOYW1lOiBzY3JvbGxlckNsYXNzfSxcclxuICAgICAgICAgICAgICAgIGNoaWxkcmVuXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcblxyXG5jb25zdCBvcmlnaW5hbFJlbmRlciA9IFYyQ19TY3JvbGxlci5wcm90b3R5cGUucmVuZGVyO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVjJDX1Njcm9sbGVyLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge1xyXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxyXG4gICAgc2V0OiBmdW5jdGlvbigpIHtjb25zb2xlLndhcm4oXCJBZGRvbiBwb2xpY3kgZm9yIHBsdWdpbnMgIzUgaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC93aWtpL0FkZG9uLVBvbGljaWVzI3BsdWdpbnNcIik7fSxcclxuICAgIGdldDogKCkgPT4gb3JpZ2luYWxSZW5kZXJcclxufSk7ICIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NHcm91cCBmcm9tIFwiLi9zZXR0aW5nc0dyb3VwXCI7XHJcbmltcG9ydCBNYXJnaW5Ub3AgZnJvbSBcIi4vbWFyZ2ludG9wXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5zZWN0aW9ucy5tYXAoKHNlY3Rpb24sIGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgIGkgIT09IDAgPyBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoTWFyZ2luVG9wLCB7fSkgOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZTogdGhpcy5wcm9wcy5vbkNoYW5nZX0pKVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSIsImltcG9ydCB7c2V0dGluZ3NDb29raWV9IGZyb20gXCIuLi8wZ2xvYmFsc1wiO1xyXG5pbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4vc2V0dGluZ3NUaXRsZVwiO1xyXG5pbXBvcnQgU3dpdGNoIGZyb20gXCIuL3N3aXRjaFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1NldHRpbmdzR3JvdXAgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge3RpdGxlLCBzZXR0aW5ncywgYnV0dG9ufSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQ29tcG9uZW50ID0gYnV0dG9uID8gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwidGl0bGUtYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiBidXR0b24ub25DbGlja30sIGJ1dHRvbi50aXRsZSkgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiBbQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoU3dpdGNoLCB7aWQ6IHNldHRpbmcuaWQsIGtleTogc2V0dGluZy5pZCwgZGF0YTogc2V0dGluZywgY2hlY2tlZDogc2V0dGluZ3NDb29raWVbc2V0dGluZy5pZF0sIG9uQ2hhbmdlOiAoaWQsIGNoZWNrZWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShpZCwgY2hlY2tlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgICAgICAgfSldO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19TZXR0aW5nc1RpdGxlIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIH1cclxuLy9oMi0yZ1dFLW8gdGl0bGUtM3NaV1lRIHNpemUxNi0xNGNHejUgaGVpZ2h0MjAtbU8yZUlOIHdlaWdodFNlbWlCb2xkLU5KZXh6aSBkYS1oMiBkYS10aXRsZSBkYS1zaXplMTYgZGEtaGVpZ2h0MjAgZGEtd2VpZ2h0U2VtaUJvbGQgZGVmYXVsdENvbG9yLTFfYWpYMCBkYS1kZWZhdWx0Q29sb3IgbWFyZ2luVG9wNjAtM1BHYnRLIGRhLW1hcmdpblRvcDYwIG1hcmdpbkJvdHRvbTIwLTMycUlENyBkYS1tYXJnaW5Cb3R0b20yMFxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiaDJcIixcclxuICAgICAgICAgICAge2NsYXNzTmFtZTogXCJ1aS1mb3JtLXRpdGxlIGgyIG1hcmdpbi1yZXNldCBtYXJnaW4tYm90dG9tLTIwXCJ9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFN3aXRjaCBmcm9tIFwiLi9jb21wb25lbnRzL3N3aXRjaFwiO1xyXG5cclxubGV0IGNsYXNzbmFtZXMgPSBbXVxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWUobmFtZSl7XHJcbiAgICBsZXQgY2xhc3NOYW1lID0gY2xhc3NuYW1lcy5maW5kKGUgPT4gZS5zdGFydHNXaXRoKG5hbWUrXCItXCIpKVxyXG4gICAgaWYoY2xhc3NOYW1lKXJldHVybiBjbGFzc05hbWVcclxuICAgIGNsYXNzTmFtZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlW25hbWVdKVswXVtuYW1lXVxyXG4gICAgY2xhc3NuYW1lcy5wdXNoKGNsYXNzTmFtZSlcclxuICAgIHJldHVybiBjbGFzc05hbWVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3dpdGNoSXRlbSBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9wcy5jaGVja2VkID0gIXRoaXMucHJvcHMuY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHRoaXMucHJvcHMuaWQsIHRoaXMucHJvcHMuY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB7dGV4dCwgaW5mb30gPSB0aGlzLnByb3BzLmRhdGE7XHJcbiAgICAgICAgaWYoIWNsYXNzbmFtZXMuZmluZChlID0+IGUuc3RhcnRzV2l0aChcImJldGEtXCIpKSl7XHJcbiAgICAgICAgICAgIGNsYXNzbmFtZXMucHVzaChCRE1vZHVsZXMuZ2V0KGUgPT4gZS5iZXRhICYmICghZS5jb250YWluZXIgJiYgIWUudXNlclNldHRpbmdzVm9pY2UpKVswXS5iZXRhKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLnByb3BzLmRhdGEuZXhwZXJpbWVudGFsKXtcclxuICAgICAgICAgICAgaW5mbyA9IFtcclxuICAgICAgICAgICAgICAgIGluZm8sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3VwXCIsIHtjbGFzc05hbWU6IGdldENsYXNzTmFtZShcImJldGFcIil9LCBcIihFWFBFUklNRU5UQUwpXCIpXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZsZXggZmxleC12ZXJ0aWNhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJ1aS1mbGV4IGZsZXgtaG9yaXpvbnRhbCBmbGV4LWp1c3RpZnktc3RhcnQgZmxleC1hbGlnbi1zdHJldGNoIGZsZXgtbm93cmFwXCJ9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwge2tleTogXCJ0aXRsZVwiLCBjbGFzc05hbWU6IFwidWktZm9ybS10aXRsZSBoMyBtYXJnaW4tcmVzZXQgbWFyZ2luLXJlc2V0IHVpLWZsZXgtY2hpbGRcIn0sIHRleHQpLFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFN3aXRjaCwge2tleTogXCJzd2l0Y2hcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIGNoZWNrZWQ6IHRoaXMucHJvcHMuY2hlY2tlZH0pXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInVpLWZvcm0tdGV4dCBzdHlsZS1kZXNjcmlwdGlvbiBtYXJnaW4tdG9wLTRcIiwgc3R5bGU6IHtmbGV4OiBcIjEgMSBhdXRvXCJ9fSwgaW5mbylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJIZWFkZXIgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTogXCJ1aS10YWItYmFyLWhlYWRlclwifSwgdGhpcy5wcm9wcy50ZXh0LCB0aGlzLnByb3BzLmJ1dHRvbik7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RhYkJhckl0ZW0gZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gICAgICAgIHRoaXMub25DbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5wcm9wcy5zZWxlY3RlZCB8fCBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtjbGFzc05hbWU6IGB1aS10YWItYmFyLWl0ZW0ke3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBcIiBzZWxlY3RlZFwiIDogXCJcIn1gLCBvbkNsaWNrOiB0aGlzLm9uQ2xpY2t9LFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzLnRleHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykge1xyXG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uQ2xpY2sodGhpcy5wcm9wcy5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19UYWJCYXJTZXBhcmF0b3IgZXh0ZW5kcyBCRFYyLnJlYWN0Q29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidWktdGFiLWJhci1zZXBhcmF0b3IgbWFyZ2luLXRvcC04IG1hcmdpbi1ib3R0b20tOFwifSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgQkRWMiBmcm9tIFwiLi4vbW9kdWxlcy92MlwiO1xyXG5cclxuaW1wb3J0IFhTdmcgZnJvbSBcIi4veFN2Z1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1Rvb2xzIGV4dGVuZHMgQkRWMi5yZWFjdENvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGxldCB0b29sc01vZHVsZSA9IEJETW9kdWxlcy5nZXQoZSA9PiBlLnRvb2xzQ29udGFpbmVyKVswXVxyXG4gICAgICAgIGxldCBjb250YWluZXJNb2R1bGUgPSBCRE1vZHVsZXMuZ2V0KGUgPT4gZS5jb250YWluZXIgJiYgZS5jbG9zZUJ1dHRvbiAmJiBlLmNsb3NlQnV0dG9uQm9sZClbMF1cclxuICAgICAgICByZXR1cm4gQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMtY29udGFpbmVyIFwiK3Rvb2xzTW9kdWxlLnRvb2xzQ29udGFpbmVyfSxcclxuICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwidG9vbHMgXCIrdG9vbHNNb2R1bGUudG9vbHN9LFxyXG4gICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IGNvbnRhaW5lck1vZHVsZS5jb250YWluZXJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImJ0bi1jbG9zZSBcIitjb250YWluZXJNb2R1bGUuY2xvc2VCdXR0b24sIG9uQ2xpY2s6IHRoaXMub25DbGlja30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChYU3ZnLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgQkRWMi5yZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3NOYW1lOiBcImVzYy10ZXh0IFwiK2NvbnRhaW5lck1vZHVsZS5rZXliaW5kfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJFU0NcIlxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljaygpIHtcclxuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25DbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuXCIrQkRNb2R1bGVzLmdldChlID0+IGUuY2xvc2VCdXR0b24gJiYgZS5rZXliaW5kQm9sZClbMF0uY2xvc2VCdXR0b24uc3BsaXQoXCIgXCIpWzBdKTtcclxuICAgICAgICBpZiAoY2xvc2VCdXR0b24pIGNsb3NlQnV0dG9uLmNsaWNrKCk7XHJcbiAgICB9XHJcbn0iLCIvKipcclxuICogVG9vbHRpcCB0aGF0IGF1dG9tYXRpY2FsbHkgc2hvdyBhbmQgaGlkZSB0aGVtc2VsdmVzIG9uIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG4gKiBXaWxsIGFsc28gcmVtb3ZlIHRoZW1zZWx2ZXMgaWYgdGhlIG5vZGUgdG8gd2F0Y2ggaXMgcmVtb3ZlZCBmcm9tIERPTSB0aHJvdWdoXHJcbiAqIGEgTXV0YXRpb25PYnNlcnZlci5cclxuICpcclxuICogTm90ZSB0aGlzIGlzIG5vdCB1c2luZyBEaXNjb3JkJ3MgaW50ZXJuYWxzIGJ1dCBub3JtYWwgRE9NIG1hbmlwdWxhdGlvbiBhbmQgZW11bGF0ZXNcclxuICogRGlzY29yZCdzIG93biB0b29sdGlwcyBhcyBjbG9zZWx5IGFzIHBvc3NpYmxlLlxyXG4gKlxyXG4gKiBAbW9kdWxlIEVtdWxhdGVkVG9vbHRpcFxyXG4gKiBAdmVyc2lvbiAwLjAuMVxyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlscyBmcm9tIFwiLi4vbW9kdWxlcy91dGlsc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4uL21vZHVsZXMvd2VicGFja01vZHVsZXNcIjtcclxubGV0IFRvb2x0aXBDbGFzc2VzXHJcbmZ1bmN0aW9uIGdldFRvb2x0aXBDbGFzc2VzKCl7XHJcblx0aWYoVG9vbHRpcENsYXNzZXMpcmV0dXJuIFRvb2x0aXBDbGFzc2VzXHJcblx0cmV0dXJuIFRvb2x0aXBDbGFzc2VzID0gV2VicGFja01vZHVsZXMuZmluZEJ5UHJvcHMoXCJ0b29sdGlwXCIsIFwidG9vbHRpcEJsYWNrXCIpO1xyXG59XHJcbmxldCBUb29sdGlwTGF5ZXJzXHJcbmZ1bmN0aW9uIGdldFRvb2x0aXBMYXllcnMoKXtcclxuXHRpZihUb29sdGlwTGF5ZXJzKXJldHVybiBUb29sdGlwTGF5ZXJzXHJcblx0cmV0dXJuIFRvb2x0aXBMYXllcnMgPSBXZWJwYWNrTW9kdWxlcy5maW5kQnlQcm9wcyhcImxheWVyXCIsIFwibGF5ZXJDb250YWluZXJcIik7XHJcbn1cclxuXHJcbmNvbnN0IGdldENsYXNzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcclxuICAgIGNvbnN0IHVwcGVyQ2FzZSA9IHNpZGVPckNvbG9yWzBdLnRvVXBwZXJDYXNlKCkgKyBzaWRlT3JDb2xvci5zbGljZSgxKTtcclxuICAgIGNvbnN0IHRvb2x0aXBDbGFzcyA9IGdldFRvb2x0aXBDbGFzc2VzKClbYHRvb2x0aXAke3VwcGVyQ2FzZX1gXTtcclxuICAgIGlmICh0b29sdGlwQ2xhc3MpIHJldHVybiB0b29sdGlwQ2xhc3M7XHJcbiAgICByZXR1cm4gbnVsbDtcclxufTtcclxuXHJcbmNvbnN0IGNsYXNzRXhpc3RzID0gZnVuY3Rpb24oc2lkZU9yQ29sb3IpIHtcclxuICAgIHJldHVybiBnZXRDbGFzcyhzaWRlT3JDb2xvcikgPyB0cnVlIDogZmFsc2U7XHJcbn07XHJcblxyXG5jb25zdCB0b1B4ID0gZnVuY3Rpb24odmFsdWUpIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1weGA7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXVsYXRlZFRvb2x0aXAge1xyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICogQGNvbnN0cnVjdG9yXHJcblx0ICogQHBhcmFtIHsoSFRNTEVsZW1lbnR8alF1ZXJ5KX0gbm9kZSAtIERPTSBub2RlIHRvIG1vbml0b3IgYW5kIHNob3cgdGhlIHRvb2x0aXAgb25cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGlwIC0gc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIHRvb2x0aXBcclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9YmxhY2tdIC0gY29ycmVsYXRlcyB0byB0aGUgZGlzY29yZCBzdHlsaW5nL2NvbG9ycyAoYmxhY2ssIGJyYW5kLCBncmVlbiwgZ3JleSwgcmVkLCB5ZWxsb3cpXHJcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNpZGU9dG9wXSAtIGNhbiBiZSBhbnkgb2YgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XHJcblx0ICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmV2ZW50RmxpcD1mYWxzZV0gLSBwcmV2ZW50cyBtb3ZpbmcgdGhlIHRvb2x0aXAgdG8gdGhlIG9wcG9zaXRlIHNpZGUgaWYgaXQgaXMgdG9vIGJpZyBvciBnb2VzIG9mZnNjcmVlblxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kaXNhYmxlZD1mYWxzZV0gLSB3aGV0aGVyIHRoZSB0b29sdGlwIHNob3VsZCBiZSBkaXNhYmxlZCBmcm9tIHNob3dpbmcgb24gaG92ZXJcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYXR0YWNoRXZlbnRzPXRydWVdIC0gd2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgbGlzdGVuIHRvIG1vdXNlZW50ZXIgYW5kIG1vdXNlbGVhdmUgZXZlbnRzLlxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKG5vZGUsIHRleHQsIG9wdGlvbnMgPSB7fSkge1xyXG5cdFx0Y29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgcHJldmVudEZsaXAgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgYXR0YWNoRXZlbnRzID0gdHJ1ZX0gPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5ub2RlID0gbm9kZSBpbnN0YW5jZW9mIGpRdWVyeSA/IG5vZGVbMF0gOiBub2RlO1xyXG4gICAgICAgIHRoaXMubGFiZWwgPSB0ZXh0O1xyXG4gICAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0dGhpcy5zaWRlID0gc2lkZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHRoaXMucHJldmVudEZsaXAgPSBwcmV2ZW50RmxpcDtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcblxyXG4gICAgICAgIGlmICghY2xhc3NFeGlzdHModGhpcy5zaWRlKSkgcmV0dXJuIFV0aWxzLmVycihcIkVtdWxhdGVkVG9vbHRpcFwiLCBgU2lkZSAke3RoaXMuc2lkZX0gZG9lcyBub3QgZXhpc3QuYCk7XHJcblx0XHRpZiAoIWNsYXNzRXhpc3RzKHRoaXMuc3R5bGUpKSByZXR1cm4gVXRpbHMuZXJyKFwiRW11bGF0ZWRUb29sdGlwXCIsIGBTdHlsZSAke3RoaXMuc3R5bGV9IGRvZXMgbm90IGV4aXN0LmApO1xyXG5cdFx0XHJcblx0XHR0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBMYXllcnMoKS5sYXllciArIFwiIFwiICsgZ2V0VG9vbHRpcExheWVycygpLmRpc2FibGVkUG9pbnRlckV2ZW50cztcclxuXHJcblx0XHR0aGlzLnRvb2x0aXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7Z2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwfSAke2dldENsYXNzKHRoaXMuc3R5bGUpfWA7XHJcblxyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQuY2xhc3NOYW1lID0gZ2V0VG9vbHRpcENsYXNzZXMoKS50b29sdGlwQ29udGVudFxyXG5cclxuXHRcdGNvbnN0IHBvaW50ZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHRcdHBvaW50ZXJFbGVtZW50LmNsYXNzTmFtZSA9IGdldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcFBvaW50ZXI7XHJcblxyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQocG9pbnRlckVsZW1lbnQpO1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5hcHBlbmQodGhpcy5sYWJlbEVsZW1lbnQpO1xyXG5cdFx0dGhpcy5lbGVtZW50LmFwcGVuZCh0aGlzLnRvb2x0aXBFbGVtZW50KTtcclxuXHJcblx0XHRpZihhdHRhY2hFdmVudHMpe1xyXG5cdFx0XHR0aGlzLm5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblx0XHRcdFx0dGhpcy5zaG93KCk7XHJcblx0XHJcblx0XHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblx0XHRcdFx0XHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBBcnJheS5mcm9tKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGRpcmVjdE1hdGNoID0gbm9kZXMuaW5kZXhPZih0aGlzLm5vZGUpID4gLTE7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHBhcmVudE1hdGNoID0gbm9kZXMuc29tZShwYXJlbnQgPT4gcGFyZW50LmNvbnRhaW5zKHRoaXMubm9kZSkpO1xyXG5cdFx0XHRcdFx0XHRpZiAoZGlyZWN0TWF0Y2ggfHwgcGFyZW50TWF0Y2gpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFxyXG5cdFx0XHRcdG9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwge3N1YnRyZWU6IHRydWUsIGNoaWxkTGlzdDogdHJ1ZX0pO1xyXG5cdFx0XHR9KTtcclxuXHRcclxuXHRcdFx0dGhpcy5ub2RlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmhpZGUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIENvbnRhaW5lciB3aGVyZSB0aGUgdG9vbHRpcCB3aWxsIGJlIGFwcGVuZGVkLiAqL1xyXG4gICAgZ2V0IGNvbnRhaW5lcigpIHsgXHJcblx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5wb3BvdXRzKVswXS5wb3BvdXRzKStcIiB+IC5cIitVdGlscy5yZW1vdmVEYShCRE1vZHVsZXMuZ2V0KGUgPT4gZS5sYXllckNvbnRhaW5lcilbMF0ubGF5ZXJDb250YWluZXIpKTsgXHJcblx0fVxyXG4gICAgLyoqIEJvb2xlYW4gcmVwcmVzZW50aW5nIGlmIHRoZSB0b29sdGlwIHdpbGwgZml0IG9uIHNjcmVlbiBhYm92ZSB0aGUgZWxlbWVudCAqL1xyXG4gICAgZ2V0IGNhblNob3dBYm92ZSgpIHsgcmV0dXJuIHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0ID49IDA7IH1cclxuICAgIC8qKiBCb29sZWFuIHJlcHJlc2VudGluZyBpZiB0aGUgdG9vbHRpcCB3aWxsIGZpdCBvbiBzY3JlZW4gYmVsb3cgdGhlIGVsZW1lbnQgKi9cclxuICAgIGdldCBjYW5TaG93QmVsb3coKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIHRoaXMuZWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gVXRpbHMuc2NyZWVuSGVpZ2h0OyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSBsZWZ0IG9mIHRoZSBlbGVtZW50ICovXHJcbiAgICBnZXQgY2FuU2hvd0xlZnQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA+PSAwOyB9XHJcbiAgICAvKiogQm9vbGVhbiByZXByZXNlbnRpbmcgaWYgdGhlIHRvb2x0aXAgd2lsbCBmaXQgb24gc2NyZWVuIHRvIHRoZSByaWdodCBvZiB0aGUgZWxlbWVudCAqL1xyXG5cdGdldCBjYW5TaG93UmlnaHQoKSB7IHJldHVybiB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIHRoaXMubm9kZS5vZmZzZXRXaWR0aCArIHRoaXMuZWxlbWVudC5vZmZzZXRXaWR0aCA8PSBVdGlscy5zY3JlZW5XaWR0aDsgfVxyXG5cclxuICAgIC8qKiBIaWRlcyB0aGUgdG9vbHRpcC4gQXV0b21hdGljYWxseSBjYWxsZWQgb24gbW91c2VsZWF2ZS4gKi9cclxuXHRoaWRlKCkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMuX2NsYXNzTmFtZTtcclxuXHR9XHJcblxyXG4gICAgLyoqIFNob3dzIHRoZSB0b29sdGlwLiBBdXRvbWF0aWNhbGx5IGNhbGxlZCBvbiBtb3VzZWVudGVyLiBXaWxsIGF0dGVtcHQgdG8gZmxpcCBpZiBwb3NpdGlvbiB3YXMgd3JvbmcuICovXHJcblx0c2hvdygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBFbGVtZW50LmNsYXNzTmFtZSA9IGAke2dldFRvb2x0aXBDbGFzc2VzKCkudG9vbHRpcH0gJHtnZXRDbGFzcyh0aGlzLnN0eWxlKX1gO1xyXG5cdFx0dGhpcy5sYWJlbEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlzLmxhYmVsO1xyXG5cdFx0dGhpcy5jb250YWluZXIuYXBwZW5kKHRoaXMuZWxlbWVudCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcInRvcFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dBYm92ZSB8fCAoIXRoaXMuY2FuU2hvd0Fib3ZlICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dBYm92ZSgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0JlbG93KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImJvdHRvbVwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dCZWxvdyB8fCAoIXRoaXMuY2FuU2hvd0JlbG93ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dCZWxvdygpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0Fib3ZlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2lkZSA9PSBcImxlZnRcIikge1xyXG5cdFx0XHRpZiAodGhpcy5jYW5TaG93TGVmdCB8fCAoIXRoaXMuY2FuU2hvd0xlZnQgJiYgdGhpcy5wcmV2ZW50RmxpcCkpIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLnNpZGUgPT0gXCJyaWdodFwiKSB7XHJcblx0XHRcdGlmICh0aGlzLmNhblNob3dSaWdodCB8fCAoIXRoaXMuY2FuU2hvd1JpZ2h0ICYmIHRoaXMucHJldmVudEZsaXApKSB0aGlzLnNob3dSaWdodCgpO1xyXG5cdFx0XHRlbHNlIHRoaXMuc2hvd0xlZnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG4gICAgLyoqIEZvcmNlIHNob3dpbmcgdGhlIHRvb2x0aXAgYWJvdmUgdGhlIG5vZGUuICovXHJcblx0c2hvd0Fib3ZlKCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwidG9wXCIpKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB0aGlzLmVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVySG9yaXpvbnRhbGx5KCk7XHJcblx0fVxyXG5cclxuICAgIC8qKiBGb3JjZSBzaG93aW5nIHRoZSB0b29sdGlwIGJlbG93IHRoZSBub2RlLiAqL1xyXG5cdHNob3dCZWxvdygpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImJvdHRvbVwiKSk7XHJcblx0XHR0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJ0b3BcIiwgdG9QeCh0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgdGhpcy5ub2RlLm9mZnNldEhlaWdodCArIDEwKSk7XHJcblx0XHR0aGlzLmNlbnRlckhvcml6b250YWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgbGVmdCBvZiB0aGUgbm9kZS4gKi9cclxuXHRzaG93TGVmdCgpIHtcclxuXHRcdHRoaXMudG9vbHRpcEVsZW1lbnQuY2xhc3NMaXN0LmFkZChnZXRDbGFzcyhcImxlZnRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC0gdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoIC0gMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcbiAgICAvKiogRm9yY2Ugc2hvd2luZyB0aGUgdG9vbHRpcCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vZGUuICovXHJcblx0c2hvd1JpZ2h0KCkge1xyXG5cdFx0dGhpcy50b29sdGlwRWxlbWVudC5jbGFzc0xpc3QuYWRkKGdldENsYXNzKFwicmlnaHRcIikpO1xyXG5cdFx0dGhpcy5lbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFwibGVmdFwiLCB0b1B4KHRoaXMubm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0ICsgdGhpcy5ub2RlLm9mZnNldFdpZHRoICsgMTApKTtcclxuXHRcdHRoaXMuY2VudGVyVmVydGljYWxseSgpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVySG9yaXpvbnRhbGx5KCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArICh0aGlzLm5vZGUub2Zmc2V0V2lkdGggLyAyKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJsZWZ0XCIsIHRvUHgobm9kZWNlbnRlciAtICh0aGlzLmVsZW1lbnQub2Zmc2V0V2lkdGggLyAyKSkpO1xyXG5cdH1cclxuXHJcblx0Y2VudGVyVmVydGljYWxseSgpIHtcclxuXHRcdGNvbnN0IG5vZGVjZW50ZXIgPSB0aGlzLm5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgKHRoaXMubm9kZS5vZmZzZXRIZWlnaHQgLyAyKTtcclxuXHRcdHRoaXMuZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcInRvcFwiLCB0b1B4KG5vZGVjZW50ZXIgLSAodGhpcy5lbGVtZW50Lm9mZnNldEhlaWdodCAvIDIpKSk7XHJcblx0fVxyXG59IiwiaW1wb3J0IEJEVjIgZnJvbSBcIi4uL21vZHVsZXMvdjJcIjtcclxuaW1wb3J0IFRvb2x0aXAgZnJvbSBcIi4vdG9vbHRpcFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICAgICAgY29uc3Qge3N0eWxlID0gXCJibGFja1wiLCBzaWRlID0gXCJ0b3BcIiwgdGV4dCA9IFwiXCJ9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICB0aGlzLm5vZGUgPSBCRFYyLnJlYWN0RG9tLmZpbmRET01Ob2RlKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG5ldyBUb29sdGlwKHRoaXMubm9kZSwgdGV4dCwge3N0eWxlLCBzaWRlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy50b29sdGlwO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcclxuICAgIH1cclxufSIsImltcG9ydCBCRFYyIGZyb20gXCIuLi9tb2R1bGVzL3YyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfWFN2ZyBleHRlbmRzIEJEVjIucmVhY3RDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIHJldHVybiBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwic3ZnXCIsXHJcbiAgICAgICAgICAgIHt4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB2aWV3Qm94OiBcIjAgMCAxMiAxMlwiLCBzdHlsZToge3dpZHRoOiBcIjE4cHhcIiwgaGVpZ2h0OiBcIjE4cHhcIn19LFxyXG4gICAgICAgICAgICBCRFYyLnJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImdcIixcclxuICAgICAgICAgICAgICAgIHtjbGFzc05hbWU6IFwiYmFja2dyb3VuZFwiLCBmaWxsOiBcIm5vbmVcIiwgZmlsbFJ1bGU6IFwiZXZlbm9kZFwifSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTAgMGgxMnYxMkgwXCJ9KSxcclxuICAgICAgICAgICAgICAgIEJEVjIucmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2NsYXNzTmFtZTogXCJmaWxsXCIsIGZpbGw6IFwiI2RjZGRkZVwiLCBkOiBcIk05LjUgMy4yMDVMOC43OTUgMi41IDYgNS4yOTUgMy4yMDUgMi41bC0uNzA1LjcwNUw1LjI5NSA2IDIuNSA4Ljc5NWwuNzA1LjcwNUw2IDYuNzA1IDguNzk1IDkuNWwuNzA1LS43MDVMNi43MDUgNlwifSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjcnlwdG9cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZXZlbnRzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1vZHVsZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInBhdGhcIik7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/BetterDiscordApp/dist/index.min.js b/BetterDiscordApp/dist/index.min.js index 669b027..b4f453d 100644 --- a/BetterDiscordApp/dist/index.min.js +++ b/BetterDiscordApp/dist/index.min.js @@ -1 +1 @@ -module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return Ps}));var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return r})),n.d(s,"currentDiscordVersion",(function(){return o})),n.d(s,"minSupportedVersion",(function(){return i})),n.d(s,"bbdVersion",(function(){return a})),n.d(s,"bbdChangelog",(function(){return l})),n.d(s,"settings",(function(){return c})),n.d(s,"defaultCookie",(function(){return d})),n.d(s,"settingsCookie",(function(){return u})),n.d(s,"settingsRPC",(function(){return h})),n.d(s,"defaultRPC",(function(){return p})),n.d(s,"bdpluginErrors",(function(){return m})),n.d(s,"bdthemeErrors",(function(){return g})),n.d(s,"bdConfig",(function(){return f})),n.d(s,"bdthemes",(function(){return b})),n.d(s,"bdplugins",(function(){return y})),n.d(s,"pluginCookie",(function(){return v})),n.d(s,"themeCookie",(function(){return w}));const r="0.0.306",o=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",i="0.3.0",a="0.3.5",l={description:"Big things are coming.",changes:[{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`.","Fixed the open folder buttons for plugins and themes"]}]},c={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Themes in Popout Window":{id:"lightcord-9",info:"Enable themes in Popout Window. (For example, when detaching screenshare.)",implemented:!0,hidden:!1,cat:"core",category:"content manager",experimental:!0},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Use Notification Shim":{id:"lightcord-10",info:"Basically don't use Windows's Notifications.",implemented:!0,hidden:"win32"!==process.platform,cat:"lightcord",category:"Lightcord",experimental:!1},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},d={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!1,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,"lightcord-9":!1,"lightcord-10":!1,no_window_bound:!1},u={},h={},p={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},m=[],g=[],f=Object.create(BetterDiscordConfig),b={},y={},v={},w={},C=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete C.m.__extra_id__,delete C.c.__extra_id__;const E=e=>{for(const t in C.c)if(C.c.hasOwnProperty(t)){const n=C.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let S={find:E,findAll:e=>{const t=[];for(const n in C.c)if(C.c.hasOwnProperty(n)){const s=C.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>E(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>E(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>E(t=>t.displayName===e)};var x=S;window.Lightcord.BetterDiscord.WebpackModules=S;const k=window.require,D=n(2),M=n(1),B=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";let N="";N="win32"===process.platform?process.env.APPDATA:"darwin"===process.platform?M.join(process.env.HOME,"Library","Preferences"):process.env.XDG_CONFIG_HOME?process.env.XDG_CONFIG_HOME:M.join(process.env.HOME,".config"),N=M.join(N,"BetterDiscord");var L=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{D.existsSync(this.BDFile)||D.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"utf-8");const e=JSON.parse(D.readFileSync(this.BDFile,"utf-8"));if(e.hasOwnProperty("settings")&&(this.data=e),!D.existsSync(this.settingsFile))return;let t=k(this.settingsFile);D.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[B]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),ke.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=M.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=M.resolve(N,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=M.resolve(N,"bdsettings.json"))}getPluginFile(e){return M.resolve(we.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[B][e]||null}setSettingGroup(e,t){this.data.settings[B][e]=t,D.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"utf-8")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,D.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"utf-8")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:D.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(D.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,D.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"utf-8"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],D.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"utf-8")}};const A=n(5);var P=new class extends A{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class T{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return we.pluginsFolder}}T.prototype.loadPlugins=async function(){this.loadPluginData(),m.splice(0,0,...await we.loadPlugins());const e=Object.keys(y);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},T.prototype.startPlugin=function(e,t=!1){try{y[e].plugin.start(),u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} has started.`)}catch(n){u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} could not be started.`,{type:"error"}),v[e]=!1,this.savePluginData(),ke.err("Plugins",e+" could not be started.",n)}},T.prototype.stopPlugin=function(e,t=!1){try{y[e].plugin.stop(),u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} has stopped.`)}catch(n){u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),ke.err("Plugins",y[e].plugin.getName()+" could not be stopped.",n)}},T.prototype.enablePlugin=function(e,t=!1){v[e]||(v[e]=!0,this.savePluginData(),this.startPlugin(e,t))},T.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},T.prototype.disablePlugin=function(e,t=!1){v[e]&&(v[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},T.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},T.prototype.togglePlugin=function(e){v[e]?this.disablePlugin(e):this.enablePlugin(e)},T.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},T.prototype.loadPlugin=async function(e){const t=await we.loadContent(e,"plugin");if(t)return u["fork-ps-1"]&&ke.showContentErrors({plugins:[t]}),u["fork-ps-2"]&&ke.showToast(e+" could not be loaded.",{type:"error"}),ke.err("ContentManager",e+" could not be loaded.",t);const n=Object.values(y).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){u["fork-ps-1"]&&ke.showContentErrors({plugins:[e]})}ke.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),u["fork-ps-2"]&&ke.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),P.dispatch("plugin-loaded",n.getName())},T.prototype.unloadPlugin=function(e){const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return;const n=t.plugin.getName();v[n]&&this.disablePlugin(n,!0);const s=we.unloadContent(y[n].filename,"plugin");if(delete y[n],s)return u["fork-ps-1"]&&ke.showContentErrors({plugins:[s]}),u["fork-ps-2"]&&ke.showToast(n+" could not be unloaded. It may have not been loaded yet.",{type:"error"}),ke.err("ContentManager",n+" could not be unloaded. It may have not been loaded yet.",s);ke.log("ContentManager",n+" was unloaded."),u["fork-ps-2"]&&ke.showToast(n+" was unloaded.",{type:"success"}),P.dispatch("plugin-unloaded",n)},T.prototype.delete=function(e){const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(we.pluginsFolder,t.filename);n(2).unlinkSync(s)},T.prototype.reloadPlugin=async function(e){const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=v[n];s&&this.stopPlugin(n,!0);const r=await we.reloadContent(y[n].filename,"plugin");if(r)return u["fork-ps-1"]&&ke.showContentErrors({plugins:[r]}),u["fork-ps-2"]&&ke.showToast(n+" could not be reloaded.",{type:"error"}),ke.err("ContentManager",n+" could not be reloaded.",r);y[n].plugin.load&&"function"==typeof y[n].plugin.load&&y[n].plugin.load(),s&&this.startPlugin(n,!0),ke.log("ContentManager",`${n} v${y[n].plugin.getVersion()} was reloaded.`),u["fork-ps-2"]&&ke.showToast(`${n} v${y[n].plugin.getVersion()} was reloaded.`,{type:"success"}),P.dispatch("plugin-reloaded",n)},T.prototype.reload=function(e){return this.reloadPlugin(e)},T.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return;const s=n(1).resolve(we.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(""+s)},T.prototype.updatePluginList=function(){const e=we.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},T.prototype.loadPluginData=function(){const e=L.getSettingGroup("plugins");e&&Object.assign(v,e)},T.prototype.savePluginData=function(){L.setSettingGroup("plugins",v)},T.prototype.newMessage=function(){const e=Object.keys(y);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()}))}get container(){return document.querySelector("."+ke.removeDa(BDModules.get(e=>e.popouts)[0].popouts)+" ~ ."+ke.removeDa(BDModules.get(e=>e.layerContainer)[0].layerContainer))}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=ke.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=ke.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${F().tooltip} ${H(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(H("top")),this.element.style.setProperty("top",q(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(H("bottom")),this.element.style.setProperty("top",q(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(H("left")),this.element.style.setProperty("left",q(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(H("right")),this.element.style.setProperty("left",q(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",q(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",q(e-this.element.offsetHeight/2))}}var V=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=xe.reactDom.findDOMNode(this),this.tooltip=new G(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},J=n(2),Z=n(1);const Y={},K={};var X=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();j()(e.url,{headers:{"User-Agent":_.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=$.createHash("sha256");let r=Buffer.alloc(0);n.body.on("data",e=>{r=Buffer.concat([r,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");K[e.url]=n,ee[n]=e.url,te(n,r,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;se||(se=BDModules.get(e=>e.flowerStarContainer)[0]);re||(re=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let r of s.children)"A"===r.tagName?r.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),ke.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{_.remote.shell.openExternal(r.href)}})}):["div"].includes(r.tagName.toLowerCase())&&e(r)};e(s.parentNode)}catch(e){console.error(e)}xe.reactDom.render(xe.react.createElement(V,{text:t.type+" "+t.name+" is potentially dangerous."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px"}},xe.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},xe.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=xe.react.createElement("span",{style:{display:"inherit"}},[xe.react.createElement(V,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},xe.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),xe.react.createElement("div",{className:re.childContainer},xe.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},xe.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),xe.react.createElement(V,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){ke.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=oe(K).find(e=>e[1]===t.hash)[0];j()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(Z.join)("Plugin"===t.type?we._pluginsFolder:we._themesFolder,t.filename);Object(J.writeFileSync)(s,n),ke.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),ke.showToast(e.message,{type:"error"})})}})}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);xe.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=xe.react.createElement("span",{style:{display:"inherit"}},[xe.react.createElement(V,{text:t.type+" "+t.name+" is certified by Lightcord."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},xe.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),xe.react.createElement("div",{className:re.childContainer},xe.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},xe.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),xe.react.createElement(V,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){ke.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=oe(K).find(e=>e[1]===t.hash)[0];console.log(e),j()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(Z.join)("Plugin"===t.type?we._pluginsFolder:we._themesFolder,t.filename);console.log(s),Object(J.writeFileSync)(s,n),ke.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),ke.showToast(e.message,{type:"error"})})}})}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);xe.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return Y[e]&&!Y[e].suspect}};function Q(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);Y[e]={suspect:!0,name:ee[e].split("/").pop(),type:ee[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${Y[e].type.toLowerCase()}: ${Y[e].name}`),n(Y[e])}const ee={};function te(e,t,n,s,r){if(console.log(`File: ${n} hash: ${e}`),Y[e]){const t=Y[e];s(t)}else j()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":_.remote.getCurrentWebContents().userAgent}}).then(async o=>{if(200!==o.status)return n.endsWith(".theme.css")?r(e):void Q(e,t,s,r,n);const i=await o.json();i.hash=e,i.filename=n,Y[e]=i,s(i)}).catch(o=>{if(console.error("Could not read from github. "+o),n.endsWith(".theme.css"))return r(e);Q(e,t,s,r,n)})}function ne(e,t,n=(e=>{}),s=!1){const r=$.createHash("sha256");let o=Buffer.alloc(0);Object(J.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(ee[i]=e,s&&ye[i]){let e=ye[i];if(!(e.timestampe.flowerStarContainer)[0],re=BDModules.get(e=>e.childContainer)[0];function oe(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let ie=null,ae=null;function le(){ie=[$.randomBytes(16).toString("base64"),$.randomBytes(32).toString("base64")]}function ce(e){let t=[Buffer.from(ie[1],"base64"),Buffer.from(ie[0],"base64")],n=$.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;ae=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(ie)))},setInterval(()=>{ae()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return le(),void ae();ie=e}catch(e){le(),ae()}});const de=n(1),ue=n(2),he=n(6).Module;he.globalPaths.push(de.resolve(n(0).remote.app.getAppPath(),"node_modules"));class pe extends Error{constructor(e){super(e),this.name="MetaError"}}const me=he._extensions[".js"],ge=he._extensions[".css"]?he._extensions[".css"]:()=>null,fe=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,be=/^\\@/;let ye={},ve=!1;var we=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ve||(ve=!0,he._extensions[".js"]=this.getContentRequire("plugin"),he._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=ue.realpathSync(de.resolve(f.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=ue.realpathSync(de.resolve(f.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof L.getSettingGroup("PluginCertifierHashes"))L.setSettingGroup("PluginCertifierHashes",ce("{}"));else try{ye=JSON.parse(function(e){try{let t=$.createDecipheriv("aes-256-cbc",Buffer.from(ie[1],"base64"),Buffer.from(ie[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(L.getSettingGroup("PluginCertifierHashes")))}catch(e){L.setSettingGroup("PluginCertifierHashes",ce("{}")),ye={}}Object.keys(ye).forEach(e=>{let t=ye[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete ye[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete ye[e];t.hash===e?t.result.suspect&&delete ye[e]:delete ye[e]}),this.saveAddonCache()}saveAddonCache(){L.setSettingGroup("PluginCertifierHashes",ce(JSON.stringify(ye)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=ue.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{ue.statSync(de.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?R.unloadPlugin(r):Se.unloadTheme(r)}if(!ue.statSync(de.resolve(n,r)).isFile())return;const o=ue.statSync(de.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await R.loadPlugin(r):await Se.loadTheme(r)),"change"==e&&(t?await R.reloadPlugin(r):await Se.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new pe("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new pe("META was not found.");const s=ke.testJSON(n);if(!s)throw new pe("META could not be parsed.");if(!s.name)throw new pe("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(fe))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(be,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?me:ge;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=de.resolve(o,de.basename(r));if(!ue.existsSync(i)||r!==ue.realpathSync(i))return Reflect.apply(s,this,arguments);let a=ue.readFileSync(r,"utf8");a=ke.stripBOM(a);const l=ue.statSync(r),c=n.extractMeta(a);if(c.filename=de.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename);!ke.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):(ke.warn("Module Not Exported",c.name+", please start setting module.exports"),a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`)}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(u["fork-ps-6"]){let t=await new Promise(t=>{ne(de.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(ye[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(de.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(de.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:new Error("Cannot read property 'replace' of undefined")};if(r.id=ke.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete y[r.plugin.getName()],y[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete b[r.name],b[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(de.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(de.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=ue.readdirSync(s),o=Object.values(t?y:b),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&ue.statSync(de.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=ue.readdirSync(s);for(const t of o){if(!ue.statSync(de.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class Ce{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(Ce.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;nsetTimeout(e,10))}for(const e in w)b[e]||delete w[e];this.saveThemeData()},Ee.prototype.enableTheme=function(e,t=!1){w[e]=!0,this.saveThemeData();const n=b[e];Ce.addStyle(Ce.escapeID(n.id),unescape(n.css)),P.dispatch("theme-enabled"),u["fork-ps-2"]&&!t&&ke.showToast(`${n.name} v${n.version} has been applied.`)},Ee.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},Ee.prototype.disableTheme=function(e,t=!1){w[e]=!1,this.saveThemeData();const n=b[e];Ce.removeStyle(Ce.escapeID(n.id)),P.dispatch("theme-disabled"),u["fork-ps-2"]&&!t&&ke.showToast(`${n.name} v${n.version} has been disabled.`)},Ee.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},Ee.prototype.toggleTheme=function(e){w[e]?this.disableTheme(e):this.enableTheme(e)},Ee.prototype.toggle=function(e){return this.toggleTheme(e)},Ee.prototype.loadTheme=async function(e){const t=await we.loadContent(e,"theme");if(t)return u["fork-ps-1"]&&ke.showContentErrors({themes:[t]}),u["fork-ps-2"]&&ke.showToast(e+" could not be loaded. It may not have been loaded.",{type:"error"}),ke.err("ContentManager",e+" could not be loaded.",t);const n=Object.values(b).find(t=>t.filename==e);ke.log("ContentManager",`${n.name} v${n.version} was loaded.`),u["fork-ps-2"]&&ke.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),P.dispatch("theme-loaded",n.name)},Ee.prototype.unloadTheme=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;const n=t.name;w[n]&&this.disableTheme(n,!0);const s=we.unloadContent(b[n].filename,"theme");if(delete b[n],s)return u["fork-ps-1"]&&ke.showContentErrors({themes:[s]}),u["fork-ps-2"]&&ke.showToast(n+" could not be unloaded. It may have not been loaded yet.",{type:"error"}),ke.err("ContentManager",n+" could not be unloaded. It may have not been loaded yet.",s);ke.log("ContentManager",n+" was unloaded."),u["fork-ps-2"]&&ke.showToast(n+" was unloaded.",{type:"success"}),P.dispatch("theme-unloaded",n)},Ee.prototype.delete=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(we.themesFolder,t.filename);n(2).unlinkSync(s)},Ee.prototype.reloadTheme=async function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return this.loadTheme(e);const n=t.name,s=await we.reloadContent(b[n].filename,"theme");if(w[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return u["fork-ps-1"]&&ke.showContentErrors({themes:[s]}),u["fork-ps-2"]&&ke.showToast(n+" could not be reloaded.",{type:"error"}),ke.err("ContentManager",n+" could not be reloaded.",s);ke.log("ContentManager",`${n} v${b[n].version} was reloaded.`),u["fork-ps-2"]&&ke.showToast(`${n} v${b[n].version} was reloaded.`,{type:"success"}),P.dispatch("theme-reloaded",n)},Ee.prototype.reload=function(e){return this.reloadTheme(e)},Ee.prototype.edit=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;const s=n(1).resolve(we.themesFolder,t.filename);n(0).shell.openItem(""+s)},Ee.prototype.updateThemeList=function(){const e=we.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},Ee.prototype.loadThemeData=function(){const e=L.getSettingGroup("themes");e&&Object.assign(w,e)},Ee.prototype.saveThemeData=function(){L.setSettingGroup("themes",w)};var Se=new Ee,xe=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(c).reduce((t,n)=>{const s=c[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};class ke{static get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)}static get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)}static get WindowConfigFile(){return this._windowConfigFile=null}static getAllWindowPreferences(){return{transparent:!0,frame:!1}}static getWindowPreference(e){return"transparent"===e||"frame"!==e&&null}static setWindowPreference(e,t){return"transparent"===e||"frame"!==e&&null}static stripBOM(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}static getTextArea(){return Ce.query("."+De(BDModules.get(e=>e.channelTextArea&&e.titleWrapper)[0].channelTextArea)+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static formatString(e,t){for(const n in t){let s=t[n];Array.isArray(s)&&(s=JSON.stringify(s)),"object"==typeof s&&null!==s&&(s=s.toString()),e=e.replace(new RegExp(`{{${n}}}`,"g"),s)}return e}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const d=e[t];let u=!1;const h=()=>{a||console.log("unpatch",t,"of",c),u=!0};return e[t]=function(){if(u)return d.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:h,originalMethod:d,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=ke.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&ke.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&ke.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&h(),n.returnValue},Object.assign(e[t],d),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=d,e[t].toString=function(){return d.toString()}),h}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+De(BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar)+" + div")||null,t=e?e.querySelector("form"):null,n=t?t.offsetHeight:80,s=document.createElement("div");s.classList.add("bd-toasts"),s.style.setProperty("bottom",n+"px"),document.querySelector("#app-mount").appendChild(s)}const n=document.querySelector(".bd-toasts"),{type:s="",icon:r=!0,timeout:o=3e3}=t,i=document.createElement("div");i.classList.add("bd-toast"),s&&i.classList.add("toast-"+s),s&&r&&i.classList.add("icon"),i.innerText=e,n.appendChild(i),n.style.setProperty("left",`calc(50% - ${n.offsetWidth/2}px)`),setTimeout(()=>{i.classList.add("closing"),setTimeout(()=>{i.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},o)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=Ce.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),Ce.query("#app-mount").append(o);const i=[];return{close:()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=Ce.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=Ce.createElement('
');for(const n of e){const e=Ce.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),ke.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&Ce.removeClass(t,"selected"),Ce.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[Ce.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),Ce.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=x.findByProps("push","update","pop","popWithKey"),n=x.findByProps("fixed","improved"),s=x.findByDisplayName("Text"),r=x.findByProps("Child"),o=x.findByProps("Tags","default"),i=x.find(e=>e.defaultProps&&0==e.defaultProps.selectable),l=x.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&l))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p="v"+a,footer:m}=e,g=xe.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,l.parse(d)));for(let e=0;eg("li",null,l.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=x.find(e=>"Anchor"==e.displayName),n=x.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),xe.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=x.findByProps("openModal","updateModal"),r=x.findByDisplayName("Markdown"),o=x.findByDisplayName("ConfirmModal");if(!s||!o||!r)return ke.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:l=i,confirmText:c="Okay",cancelText:d="Cancel",danger:u=!1,key:h}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?xe.React.createElement(r,null,e):e),s.openModal(n=>xe.React.createElement(o,Object.assign({header:e,red:u,confirmText:c,cancelText:d,onConfirm:a,onCancel:l},n),t),{modalKey:h})}static get removeDa(){return De}}function De(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}ke.showToast=ke.suppressErrors(ke.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=ke;class Me{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var Be=new class{injectColoredText(){this.cancelColoredText||xe.MessageComponent&&(this.cancelColoredText=ke.monkeyPatch(xe.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=u["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},Ne=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!u["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=ke.monkeyPatch(xe.TimeFormatter,"calendarFormat",{after:t}),s=ke.monkeyPatch(xe.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Le extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},xe.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},xe.react.createElement("path",{d:"M0 0h12v12H0"}),xe.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Ae extends xe.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return xe.react.createElement("div",{className:"tools-container "+e.toolsContainer},xe.react.createElement("div",{className:"tools "+e.tools},xe.react.createElement("div",{className:t.container},xe.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},xe.react.createElement(Le,null)),xe.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Pe extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Te extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Re extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Oe extends xe.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return xe.react.createElement("div",{className:"ui-tab-bar-item"+(this.props.selected?" selected":""),onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class je extends xe.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return xe.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},xe.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),xe.react.createElement("div",{className:n.flexChild+" bd-server-content"},xe.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},xe.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),xe.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),xe.react.createElement("div",{className:n.horizontal+" "+s.noWrap},xe.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},xe.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),xe.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},xe.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&xe.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},xe.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&xe.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},xe.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&xe.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},xe.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class _e extends xe.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return xe.react.createElement("div",{key:"scrollerwrap",className:n},xe.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}const $e=_e.prototype.render;Object.defineProperty(_e.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>$e});class Ie extends xe.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return xe.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},xe.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},xe.react.createElement(_e,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),xe.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},xe.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},xe.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},xe.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},xe.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class We extends xe.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=xe.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=xe.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=xe.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=xe.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){xe.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next="?from="+o,n.state.term&&(s.next+="&term="+n.state.term),n.state.selectedCategory&&(s.next+="&category="+n.categoryButtons[n.state.selectedCategory]),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=" for "+n.state.term),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[xe.react.createElement(je,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),xe.react.createElement(je,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return xe.react.createElement(Ie,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:xe.react.createElement(Ae,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return xe.react.createElement("div",{className:"sidebar",key:"ps"},xe.react.createElement("div",{className:"ui-tab-bar SIDE"},xe.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),xe.react.createElement(Te,null),this.searchInput,xe.react.createElement(Te,null),xe.react.createElement(Re,{text:"Categories"}),this.categoryButtons.map((e,t)=>xe.react.createElement(Oe,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),xe.react.createElement(Te,null),this.footer,this.connection))}get searchInput(){return xe.react.createElement("div",{className:"ui-form-item"},xe.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},xe.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n="?term="+e.target.value;0!==t.state.selectedCategory&&(n+="&category="+t.categoryButtons[t.state.selectedCategory]),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search("?category="+t.categoryButtons[e],!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[xe.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},xe.react.createElement(Pe,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>xe.react.createElement(je,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&xe.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},xe.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&xe.react.createElement(Pe,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[xe.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",xe.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},xe.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return xe.react.createElement("div",{className:"ui-tab-bar-header"},xe.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?xe.react.createElement("span",null):xe.react.createElement("span",null,xe.react.createElement(Te,null),xe.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),xe.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},xe.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},xe.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Fe extends xe.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&xe.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=Ce.query("#"+this.props.id);Ce.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=Ce.query("#"+this.props.id);Ce.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=Ce.query(".publicServersOpen");t.classList.remove("publicServersOpen"),Ce.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=Ce.query('[class*="layer-"]');e.classList.add("publicServersOpen"),Ce.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return xe.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var ze=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return xe.react.createElement(Fe,{rootId:"pubslayerroot",id:"pubslayer"},xe.react.createElement(We,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[ke.removeDa(BDModules.get(e=>e.layers&&e.layer)[0].layers)];const t=Ce.query(".layers, ."+e);return!!t&&(t.append(Ce.createElement("
")),!0)}render(){const e=this.root;e?xe.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=Ce.createElement(`
`);u["bda-gs-1"]||(e.style.display="none");const t=Ce.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[ke.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(Ce.query("#bd-pub-li"))return;const t=Ce.query(`div.${e} > div`);Ce.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=x.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=x.findByDisplayName("Guilds");e||t||ke.warn("PublicServer","Can't find GuildList component"),this.guildPatch=ke.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch;const e=Ce.query("#bd-pub-li");e&&e.remove()}};var He=new class{start(){Ce.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){Ce.removeStyle("VoiceMode")}};const Ue=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var qe=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(x.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(x.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!Ue.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(Ue);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(e+"-")||(r+=" "+t);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add("da-"+s)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=Ce.query("."+ke.removeDa(s.menu));if(!r){const t=Ce.query("#app-mount > ."+ke.removeDa(n.layerContainer)),o=Ce.createElement(`
`);r=Ce.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=Ce.createElement(`
`),l=Ce.createElement(`
`);a.append(l),r.append(a);const c=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",c),document.removeEventListener("contextmenu",c),document.removeEventListener("keyup",c))};document.addEventListener("click",c),document.addEventListener("contextmenu",c),document.addEventListener("keyup",c)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=Ce.createElement('
'),l=Ce.createElement(``);if(l.append(Ce.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{xe.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=Ce.queryAll("div[role=menuitem]."+ke.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=Ce.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}};const Ve=xe.React;class Je extends Ve.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this),this.switch=Ve.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return this.switch}}let Ze=[];function Ye(e){let t=Ze.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(t=>t[e])[0][e],Ze.push(t),t)}class Ke extends xe.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return Ze.find(e=>e.startsWith("beta-"))||Ze.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ye("beta")},"(EXPERIMENTAL)")]),xe.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},xe.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},xe.react.createElement("h3",{key:"title",className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),xe.react.createElement(Je,{key:"switch",onChange:this.onChange,checked:this.props.checked})),xe.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Xe extends xe.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?xe.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[xe.react.createElement(Pe,{text:e}),s,t.map(e=>xe.react.createElement(Ke,{id:e.id,key:e.id,data:e,checked:u[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Qe=BDModules.get(e=>e.marginTop60)[0];class et extends React.Component{render(){return Qe||(Qe=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Qe.marginTop60})}}class tt extends xe.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?xe.react.createElement(et,{}):null,xe.react.createElement(Xe,Object.assign({},e,{onChange:this.props.onChange}))])}}class nt extends xe.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return xe.react.createElement("li",null,xe.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},xe.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},xe.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),xe.react.createElement("span",null)),xe.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class st extends xe.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){Ce.addClass(Ce.query("#app-mount"),"bd-detached-editor"),xe.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/discord"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{u["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){Ce.removeClass(Ce.query("#app-mount"),"bd-detached-editor"),xe.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=L.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=Buffer.from(e,"base64").toString("utf8")),t}get root(){const e=Ce.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=Ce.query(".app, ."+ke.removeDa(BDModules.get(e=>e.app&&e.layers)[0].app));return!!e&&(Ce.insertAfter(Ce.createElement('
'),e),!0)}render(){const e=this;return xe.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},xe.react.createElement("div",{id:"bd-customcss-innerpane"},xe.react.createElement("div",{className:"editor-wrapper"},xe.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),xe.react.createElement("div",{id:"bd-customcss-attach-controls"},xe.react.createElement("ul",{className:"checkbox-group"},xe.react.createElement(nt,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:u["bda-css-0"]})),xe.react.createElement("div",{id:"bd-customcss-detach-controls-button"},xe.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),xe.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),xe.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),xe.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":u["bda-css-0"]=t,Xn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":Ce.query("#editor-detached")&&t.props.attach(),xe.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){Ce.removeStyle("customcss"),Ce.addStyle("customcss",this.editor.session.getValue())}saveCss(){L.setBDData("bdcustomcss",Buffer.from(this.editor.session.getValue(),"utf-8").toString("base64"))}}class rt extends xe.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=xe.react.createElement(st,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||xe.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/discord"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{u["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&xe.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=L.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=Buffer.from(e,"base64").toString("utf8")),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&xe.react.createElement("div",{id:"editor-detached"},xe.react.createElement(Pe,{text:"Custom CSS Editor"}),xe.react.createElement("h3",null,"Editor Detached"),xe.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&xe.react.createElement("div",null,xe.react.createElement(Pe,{text:"Custom CSS Editor"}),xe.react.createElement("div",{className:"editor-wrapper"},xe.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),xe.react.createElement("div",{id:"bd-customcss-attach-controls"},xe.react.createElement("ul",{className:"checkbox-group"},xe.react.createElement(nt,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:u["bda-css-0"]})),xe.react.createElement("div",{id:"bd-customcss-detach-controls-button"},xe.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),xe.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),xe.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),xe.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),xe.react.createElement("div",{className:"help-text"},"Press ",xe.react.createElement("code",{className:"inline"},"ctrl"),"+",xe.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":u["bda-css-0"]=t,Xn.saveSettings()}}updateCss(){Ce.removeStyle("customcss"),Ce.addStyle("customcss",this.editor.session.getValue())}saveCss(){L.setBDData("bdcustomcss",Buffer.from(this.editor.session.getValue(),"utf-8").toString("base64"))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?xe.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=Ce.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=Ce.query(".app, ."+ke.removeDa(BDModules.get(e=>e.app&&e.layers)[0].app));return!!e&&(Ce.insertAfter(Ce.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class ot extends xe.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?xe.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const it=ot.prototype.render;Object.defineProperty(ot.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>it});class at extends xe.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class lt extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},xe.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),xe.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ct=xe.React;class dt extends ct.Component{render(){const e=this.props.size||"24px";return ct.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},ct.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),ct.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const ut=xe.React;class ht extends ut.Component{render(){const e=this.props.size||"24px";return ut.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},ut.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),ut.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),ut.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const pt=xe.React,mt=xe.anchorClasses;class gt extends xe.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),u["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="contentRegionScroller-"]');if(!((e,t)=>{if(!e)return console.error(new Error("Container is undefined.")),!1;const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=Ce.offset(e),s=Ce.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;Ce.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){ke.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return xe.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},xe.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},xe.react.createElement(Le,null)),"object"==typeof this.settingsPanel&&xe.react.createElement("div",{id:"plugin-settings-"+this.name,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&xe.react.createElement("div",{id:"plugin-settings-"+this.name,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=pt.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=pt.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${mt.anchor} ${mt.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{xe.LayerStack.popLayer(),xe.openDM(n.id)})),s[i]=pt.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),xe.react.createElement("a",n,e)}makeButton(e,t,n){return pt.createElement(V,{color:"black",side:"top",text:e},pt.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),xe.LayerStack.popLayer(),xe.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&xe.react.createElement("div",{className:"bd-card-footer bda-footer"},xe.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),xe.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},xe.react.createElement("div",{className:"bd-addon-header bda-header"},xe.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),xe.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",pt.createElement(dt,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",pt.createElement(ht,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",pt.createElement(lt,{className:"bd-icon"}),this.reload),pt.createElement(Je,{onChange:this.onChange,checked:this.state.checked}))),xe.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},xe.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const ft=gt.prototype.render;Object.defineProperty(gt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>ft});const bt=xe.React;class yt extends bt.Component{render(){const e=this.props.size||"16px";return bt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},bt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const vt=xe.React;class wt extends vt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=vt.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return vt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>vt.createElement("div",{className:"bd-select-option"+(e.value==t.value?" selected":""),onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return vt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},vt.createElement("div",{className:"bd-select-value"},this.selected.label),vt.createElement(yt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const Ct=xe.React;class Et extends Ct.Component{render(){const e=this.props.size||"16px";return Ct.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},Ct.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),Ct.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const St=xe.React;class xt extends St.Component{constructor(e){super(e),this.state={focused:!1}}render(){const e=["bd-search-wrapper"];return this.state.focused&&e.push("focused"),St.createElement("div",{className:e.join(" ")},St.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50",onFocus:()=>{this.setState({focused:!0})},onBlur:()=>{this.setState({focused:!1})}}),St.createElement(Et,null))}}function kt(){return(kt=Object.assign||function(e){for(var t=1;t{Ns.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:u["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(y):Object.values(b)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin["get"+n]?this.getString(e.plugin["get"+n]()):this.getString(e[this.state.sort]),r=t.plugin&&t.plugin["get"+n]?this.getString(t.plugin["get"+n]()):this.getString(t[this.state.sort]);return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{t=!1,e.hide()}},Mt.createElement(Lightcord.Api.Components.inputs.Button,{ref:"checkUpdateButton",color:"brand",look:"filled",size:"min",hoverColor:"default",onClick:()=>{try{ke.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{ke.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),ke.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),ke.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1,onRightClick:()=>{this.refs.checkUpdateButton&&window.PluginUpdates&&window.PluginUpdates.plugins&&(t||(e=new G(this.refs.checkUpdateButton.refs.original.refs.button,Object.values(window.PluginUpdates.plugins).map(e=>e.name).join(", "),{side:"bottom",attachEvents:!1}),e.show(),t=!0))}},"Check for Updates")))}render(){const e=Mt.createElement(Dt,{color:"black",position:"top",text:"Reload List"},e=>Mt.createElement(lt,kt({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?R.updatePluginList():Se.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return Mt.createElement(at,{title:`${this.props.type.toUpperCase()}—${t.length}`},Mt.createElement(Lightcord.Api.Components.inputs.Button,{key:"folder-button",color:"brand",look:"filled",size:"min",hoverColor:"default",onClick:this.openFolder.bind(this),wrapper:!1,style:{marginLeft:"10px"}},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!u["fork-ps-5"]&&e,Mt.createElement("div",{className:"bd-controls bd-addon-controls"},Mt.createElement(xt,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),Mt.createElement("div",{className:"bd-addon-dropdowns"},Mt.createElement("div",{className:"bd-select-wrapper"},Mt.createElement("label",{className:"bd-label"},"Sort by:"),Mt.createElement(wt,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),Mt.createElement("div",{className:"bd-select-wrapper"},Mt.createElement("label",{className:"bd-label"},"Order:"),Mt.createElement(wt,{options:this.directions,onChange:this.reverse,style:"transparent"})))),Mt.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const Nt=Bt.prototype.render;Object.defineProperty(Bt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>Nt});const Lt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,At=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Pt=process.pid;var Tt=new class{constructor(){this.enabled=!1,this.game=h}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||p.name,application_id:this.game.application_id||p.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Lt.dispatch({type:At.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Pt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(h||Object.create(p)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};const Rt=xe.React;let Ot;class jt extends Rt.Component{constructor(e){super(e),this.state={data:L.getSettingGroup("rpc")||p,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=_t.find(t=>t.id===e.props.id);this.setState({data:Object.assign(h,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),L.setSettingGroup("rpc",h),this.preview.forceUpdate(),Tt.set(h)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Tt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ot||(Ot=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[Rt.createElement(Xe,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),Rt.createElement(et,null),Rt.createElement(Pe,{text:"RichPresence"}),Rt.createElement("div",null,this.optionsComponents),Rt.createElement("div",null,Rt.createElement(et,null),Rt.createElement(Pe,{text:"Preview"}),Rt.createElement(en,{settings:this})),Rt.createElement("div",{className:e.marginBottom20}),Rt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),Rt.createElement("button",{style:{opacity:.01},onClick:()=>{_.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=_t.map(e=>{if("text"===e.type)return Rt.createElement(Ft,{setting:e,manager:this,id:e.id});if("number"===e.type){return[Rt.createElement(zt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?Rt.createElement(Ht,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const _t=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let $t,It,Wt;class Ft extends Rt.PureComponent{get modules(){return $t&&$t[0]?$t:$t=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Rt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return Rt.createElement("div",{className:t.row+" "+n.marginBottom20},Rt.createElement("div",{className:`${t.item} ${i.flexChild}`},Rt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),Rt.createElement(Qt,null))}}class zt extends Rt.PureComponent{get modules(){return It||(It=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Rt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return Rt.createElement("div",{className:t.row+" "+n.marginBottom20},Rt.createElement("div",{className:`${t.item} ${i.flexChild}`},Rt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?Rt.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),Rt.createElement(Qt,null))}}class Ht extends Rt.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Wt||(Wt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),Rt.createElement("div",{className:t.row+" "+n.marginBottom20},Rt.createElement("div",{className:`${t.item} ${i.flexChild}`},Rt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),Rt.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),Rt.createElement(Qt,null))}}let Ut,qt,Gt,Vt,Jt,Zt,Yt,Kt,Xt=[];class Qt extends Rt.PureComponent{get modules(){return Xt&&Xt[0]?Xt:Xt=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return Rt.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}Rt.Component;class en extends Rt.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return Rt.createElement("div",{className:"lc-tabWrapper"},Rt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},Rt.createElement(tn,{preview:this,title:"Full Profile",id:"profile"}),Rt.createElement(tn,{preview:this,title:"User Popout",id:"popout"})),Rt.createElement(nn,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?rn:sn}}class tn extends Rt.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",Rt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class nn extends Rt.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Ut=Ut||xe.WebpackModules.find(e=>e.emptyStateImage&&e.emptyState),Ut?Rt.createElement("div",{style:{margin:"20px"}},Rt.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow "+Ut.emptyState},Rt.createElement("div",{className:Ut.emptyStateImage,style:{marginTop:"20px"}}),Rt.createElement("div",{className:Ut.emptyStateHeader},"An error occured"),Rt.createElement("p",{className:Ut.emptyStateSubtext},"Please check the console for more informations. Join our ­",Rt.createElement("a",{className:`${xe.anchorClasses.anchor} ${xe.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{xe.joinLC()}},"support server"),"­ for help."))):(ke.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class sn extends Rt.Component{get modules(){return qt||(qt=[xe.WebpackModules.find(e=>e.default&&"UserPopout"===e.default.displayName),xe.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}getComponent(){let[e,t]=this.modules;const n=t.default.getCurrentUser();return Rt.createElement(()=>{let t=e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0});return Gt=t.type,Vt=t.props,this.render()},null)}render(){if(!Gt)return this.getComponent();let[e,t]=this.modules;const n=t.default.getCurrentUser();let s=Object.assign({},p,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||p.name,application_id:this.game.application_id||p.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s}),o=new Gt(Object.assign({},Vt,{activity:r,userId:n.id})).render().props.children,i=Rt.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return Rt.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class rn extends Rt.Component{get modules(){return Jt||(Jt=[xe.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),xe.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!Zt){const t=new e.default({user:n}).render();Kt=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();Zt=o.type}if(!Zt)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},p,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||p.name,application_id:this.game.application_id||p.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});Yt=new Kt({user:n,close:()=>{}}).render().props;const o=new Zt(Object.assign({},Yt,{activity:r})).render().props.children;return o.props.style={width:"auto"},Rt.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const on=xe.React;let an=BDModules.get(e=>e.defaultMarginh5)[0],ln=BDModules.get(e=>e.colorStandard)[0],cn=BDModules.get(e=>e.size32)[0],dn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const un=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,hn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,pn=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,mn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class gn extends on.Component{constructor(e){super(e)}render(){return an||(an=BDModules.get(e=>e.defaultMarginh5)[0]),ln||(ln=BDModules.get(e=>e.colorStandard)[0]),cn||(cn=BDModules.get(e=>e.size32)[0]),[on.createElement(Pe,{text:"Account Infos"}),on.createElement("div",null,on.createElement("h5",{className:ln.colorStandard+" "+cn.size14+" "+an.h5+" "+an.defaultMarginh5},"Profile"),on.createElement(vn,{content:this.getProfileValue(),language:"diff"}),on.createElement("h5",{className:ln.colorStandard+" "+cn.size14+" "+an.h5+" "+an.defaultMarginh5},"Statistics"),on.createElement(vn,{content:this.getStatistics(),language:"diff"}),on.createElement("h5",{className:ln.colorStandard+" "+cn.size14+" "+an.h5+" "+an.defaultMarginh5},"Connected Sessions"),on.createElement(vn,{content:this.getSessionValue(),language:"diff"})),on.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=pn.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=mn.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}`}getStatistics(){const e=Object.values(un.getGuilds()),t=Object.keys(hn.getRelationships()),n=t.filter(e=>hn.isFriend(e)),s=t.filter(e=>hn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let fn=BDModules.get(e=>e.highlight)[0],bn=BDModules.get(e=>e.markup)[0],yn=BDModules.get(e=>e.messageContent)[0];class vn extends on.Component{render(){return bn||(bn=BDModules.get(e=>e.markup)[0]),yn||(yn=BDModules.get(e=>e.messageContent)[0]),dn||(dn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),fn||(fn=BDModules.get(e=>e.highlight)[0]),on.createElement("div",{class:`${bn.markup} ${yn.messageContent}`},on.createElement("pre",null,on.createElement("code",{class:dn.scrollbarGhostHairline+" hljs",dangerouslySetInnerHTML:{__html:fn.highlight(this.props.language,this.props.content).value}})),on.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const wn=window.Lightcord.DiscordModules.dispatcher,Cn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let En=BDModules.get(e=>e.default&&e.default.addRelationship)[0],Sn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const xn={};let kn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var Dn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,wn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,wn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(kn?kn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Cn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(xn[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||Mn(n,"discord.gg/")||Mn(n,"discord.com/invite/")||Mn(n,"discordapp.com/invite/"))&&(xn[e.message.author.id]=!0,ke.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),En||(En=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),En.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),Sn||(Sn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),Sn.default.closePrivateChannel(t.id,!1)))))}};function Mn(e,t){let n=e.embeds||[];return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!(e.fields||[]).map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let Bn;const Nn=ke.removeDa;var Ln=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Bn=Bn||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=Nn(e.standardSidebarView),n=[],s=BDModules.get(e=>e.userSettingsAccount)[0];const r=BDModules.get(e=>"string"==typeof e.children)[0];return n.push(`#app-mount .${t} .payment-info .${Nn(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${Nn(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${Nn(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),s&&(n.push(`#app-mount .${t} .${Nn(s.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${Nn(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n.push(`.${Nn(s.userSettingsSecurity)} .${Nn(r.children)} > div:nth-child(2)`)),console.log(n),n}(),Bn||console.error(new Error("Couldn't find selectors to blur personnal informations.")),Ce.addStyle("blurPrivate",`\n${Bn.join(", ")} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${Bn.map(e=>e+":hover").join(", ")} {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,Ce.removeStyle("blurPrivate"))}},An=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};function Pn(){return(Pn=Object.assign||function(e){for(var t=1;tt=e);_n[e]=n;const s=[];for(let t of zn.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!u["lightcord-5"])return t([]);$n.push([e,t]),setTimeout(()=>{let e=$n;0!==e.length&&($n=[],Wn(Hn.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof Fn||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)zn.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(zn.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete _n[e],s}};const Wn=function(e,t,n){return u["lightcord-5"]?j()(`${zn.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new Fn("The current settings blocked the request."))};class Fn extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const zn={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:Tn,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:On,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},Hn={badges:"/users/badges"};let Un;class qn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Un||(Un=x.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Un.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Un.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel.",React.createElement("div",{style:{marginTop:"20px"}}),React.createElement(Lightcord.Api.Components.general.AlertBox,{type:"info"},"All these components have error handling. If you want none, add `.original` after the component path."),React.createElement(Lightcord.Api.Components.general.AlertBox,{type:"warn"},"We do not recommend modifying these component with plugins. Only do this if you know what you are doing.")),React.createElement(et,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{_.remote.shell.openExternal("https://lightcord.deroku.xyz/LightcordApi/docs")},wrapper:!1},"Documentation")),e.map(e=>{const t=e.displayName||e.name,n=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][t])}.${t}`;return React.createElement(Gn,{key:n,comp:e})})]}get renders(){}}class Gn extends React.Component{constructor(e){super(e),this.state={tab:"preview",elem:e.comp,options:{}}}render(){const e=this.props.comp;let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=this.state,s=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(n.options).forEach(s=>{e[s]=t.find(e=>e.find(e=>e[s]))[n.options[s]][s]}),e},r=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\nmarginTop: "20px", marginBottom: "20px"\n}},\nReact.createElement("div", {style: {\nbackgroundColor: "var(--background-secondary)",\npadding: "30px 30px",\nborderRadius: "8px"\n}, className: "lc-tab-box-shadow" },\nReact.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n)\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},o=function(t){const n=e.displayName||e.name;const o=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=s();if("jsx"===t){let e,n=[],s=null;if(Object.keys(i).forEach(e=>{if("children"==e)s=r(i[e],o,t);else{let s=e+"=";"string"==typeof i[e]?s+=JSON.stringify(i[e]):s+=`{${r(i[e],o,t)}}`,n.push(s)}}),s){return e=`<${o} ${n.join(" ")}>`,`${e}\n ${s}\n${``}`}return e=`<${o} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=r(e,o,t));let n=[];Object.keys(i).forEach(e=>{let s=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?s+=JSON.stringify(i[e]):s+=r(i[e],o,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(s)});let s="{";n.length?n.forEach((e,t)=>{let r=t===n.length-1;0===t||(s+=","),s+="\n ",s+=e,r&&(s+="\n}")}):s+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${o}, ${s}, ${a})`}},i=e.help||{},a=i.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},i.info):null,l=i.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},i.warn):null,c=i.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},i.danger):null,d=i.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},i.error):null,u=i.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},i.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),a,u,l,d,c,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(n.options[t]||"0"),onChange:e=>{this.setState({options:Object.assign({},n.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:n.tab,children:"preview"===n.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,s()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.ErrorCatcher,null,React.createElement(()=>React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:o("jsx")}))),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.ErrorCatcher,null,React.createElement(()=>React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:o("react")}))))),onChange:e=>{this.setState({tab:e})}}))}}const Vn=xe.React;class Jn extends Vn.Component{render(){const e=this.props.size||"18px";return Vn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},Vn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),Vn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}var Zn=new class{constructor(){this.windows=new Map,this.enabled=!1,this.init()}async init(){let e=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getWindow);window.Lightcord.DiscordModules.dispatcher.subscribe("POPOUT_WINDOW_OPEN",t=>{setImmediate(()=>{const n=e.default.getWindow(t.key);this.windows.set(t.key,n);let s=n.document.body.classList;s.add("window-popout"),s.add("lightcord"),s.add("lightcord"),this.update(t.key)})}),window.Lightcord.DiscordModules.dispatcher.subscribe("POPOUT_WINDOW_CLOSE",e=>{setImmediate(()=>{this.windows.delete(e.key)})}),P.on("theme-enabled",()=>{this.update()}),P.on("theme-disabled",()=>{this.update()}),P.on("theme-reloaded",()=>{this.update()}),P.on("theme-unloaded",()=>{this.update()}),P.on("theme-loaded",()=>{this.update()})}enable(){this.enabled=!0,this.update()}disable(){this.enabled=!1,this.update()}update(e){if(this.windows.size)return this.enabled?this.applyThemes(e):this.removeThemes(e)}removeThemes(e){if(!this.enabled)if(e){let t=this.windows.get(e);if(!t)return;let n=t.document;for(let e of n.querySelectorAll("style[data-lightcord-theme=true]"))e.remove()}else for(let e of this.windows.keys())this.removeThemes(e)}applyThemes(e){if(this.enabled)if(e){let t=this.windows.get(e);if(!t)return;let n=t.document;for(let e of n.querySelectorAll("style[data-lightcord-theme=true]"))e.setAttribute("will-remove","true");Object.keys(bdthemes).forEach(e=>{if(!w[e])return;const t=bdthemes[e];if(!t)return;let s=n.querySelector("style[data-lightcord-theme=true]#"+Ce.escapeID(t.id));if(s)s.innerHTML=unescape(t.css),s.removeAttribute("will-remove");else{const e=n.createElement("style");e.id=Ce.escapeID(t.id),e.innerHTML=unescape(t.css),e.setAttribute("data-lightcord-theme","true"),n.head.append(e)}});for(let e of n.querySelectorAll("style[will-remove=true]"))e.remove()}else for(let e of this.windows.keys())this.applyThemes(e)}};class Yn extends React.PureComponent{render(){let e=x.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(V,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{ke.showChangelogModal(bbdChangelog)}},React.createElement(Jn,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let Kn=!1;var Xn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new Me,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Qn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Qn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Qn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Qn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Qn(()=>(new Yn).render())),this.sidebar.register("core",Qn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Qn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Qn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Qn(this.renderAddonPane("themes")))}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}getSettings(e){return Object.keys(c).reduce((t,n)=>{const s=c[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron","lightcord-10"].includes(e)||(u[e]=t),"bda-gs-2"==e&&(t?Ce.addClass(document.body,"bd-minimal"):Ce.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?Ce.addClass(document.body,"bd-minimal-chan"):Ce.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?ze.addButton():ze.removeButton()),"bda-gs-4"==e&&(t?He.start():He.stop()),"bda-gs-5"==e&&(t?Ce.addClass(Ce.query("#app-mount"),"bda-dark"):Ce.removeClass(Ce.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&Ne.inject24Hour(),"bda-gs-7"==e&&(t?Be.injectColoredText():Be.removeColoredText()),"fork-ps-4"==e&&(t?qe.start():qe.stop()),"fork-ps-5"==e&&(t?(we.watchContent("plugin"),we.watchContent("theme")):(we.unwatchContent("plugin"),we.unwatchContent("theme"))),"fork-wp-1"==e&&(ke.setWindowPreference("transparent",t),t?ke.setWindowPreference("backgroundColor",null):ke.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?Ge.startDebugListener():Ge.stopDebugListener()),"fork-dm-1"==e&&(t?Ge.startCopySelector():Ge.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Tt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Tt.disable();if("lightcord-3"===e&&(t?_.remote.getCurrentWindow().setAlwaysOnTop(!0):_.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?Dn.enable():Dn.disable()),"lightcord-6"===e&&(t?Ln.enable():Ln.disable()),"lightcord-7"===e&&(t?An.enable():An.disable()),"lightcord-8"===e){let e=_.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),_.remote.app.relaunch(),_.remote.app.exit()}if("lightcord-9"===e&&Zn[t?"enable":"disable"](),"lightcord-10"!==e){if("no_window_bound"===e){let e=_.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.delete("IS_MAXIMIZED"),e.delete("IS_MINIMIZED"),e.delete("WINDOW_BOUNDS"),e.save(),_.remote.app.relaunch(),_.remote.app.exit()}if("enable_glasstron"===e){let e=_.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),_.remote.app.relaunch(),_.remote.app.exit()}this.saveSettings()}else Ds.methods.NotificationsUseShim(t)}async initializeSettings(){u["bda-gs-2"]&&Ce.addClass(document.body,"bd-minimal"),u["bda-gs-3"]&&Ce.addClass(document.body,"bd-minimal-chan"),u["bda-gs-1"]&&ze.addButton(),u["bda-gs-4"]&&He.start(),u["bda-gs-5"]&&Ce.addClass(Ce.query("#app-mount"),"bda-dark"),u["bda-gs-6"]&&Ne.inject24Hour(),u["bda-gs-7"]&&Be.injectColoredText(),u["fork-ps-4"]&&qe.start(),u["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),u["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),u["lightcord-presence-1"]&&Tt.enable(),u["lightcord-3"]&&_.remote.getCurrentWindow().setAlwaysOnTop(!0),u["lightcord-4"]&&Dn.enable(),u["lightcord-6"]&&Ln.enable(),u["lightcord-7"]&&An.enable(),u["lightcord-9"]&&Zn.enable(),u["fork-ps-5"]&&(we.watchContent("plugin"),we.watchContent("theme")),u["bda-gs-8"]&&Ge.startDebugListener(),u["fork-dm-1"]&&Ge.startCopySelector(),this.saveSettings()}saveSettings(){L.setSettingGroup("settings",u),L.setSettingGroup("rpc",h)}loadSettings(){Object.assign(u,L.getSettingGroup("settings")),Object.assign(h,L.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return xe.react.createElement(tt,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=_.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:xe.react.createElement(et),xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=u[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0)),"lightcord-10"===t.id&&(s=!n.get("DEFAULT_NOTIFICATIONS",!0));let r=xe.react.createElement(Ke,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),xe.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),_.remote.app.relaunch({args:_.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),_.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{Kn||(Kn=!0,ke.showToast("Clearing cache...",{type:"info"}),t(),_.remote.getCurrentWebContents().session.clearCache().then(()=>{ke.showToast("Cache is cleared !",{type:"success"}),Kn=!1,t()}).catch(e=>{console.error(e),ke.showToast("An error occured. Check console for more informations.",{type:"error"}),Kn=!1,t()}))},wrapper:!0,disabled:Kn},"Clear cache")]}PresenceComponent(){return xe.react.createElement(jt,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return xe.react.createElement(gn,{key:"lapannel"})}ApiPreviewComponent(){return xe.react.createElement(qn,{key:"lapipannel"})}customCssComponent(){return xe.react.createElement(rt,{key:"csseditor"})}renderAddonPane(e){class t extends xe.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return xe.react.createElement(t,{type:e},xe.react.createElement(Bt,{type:e}))}}};function Qn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class es extends xe.reactComponent{render(){return xe.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},xe.react.createElement("metadata",null),xe.react.createElement("defs",null,xe.react.createElement("filter",{id:"shadow1"},xe.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),xe.react.createElement("filter",{id:"shadow2"},xe.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),xe.react.createElement("filter",{id:"shadow3"},xe.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),xe.react.createElement("g",null,xe.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),xe.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),xe.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function ts(){return(ts=Object.assign||function(e){for(var t=1;t/g};let rs=BDModules.get(e=>e.CustomEmoji)[0],os=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],is=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],as=BDModules.get(e=>e.getAutocompleteOptions)[0],ls=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],cs=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],ds=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],us=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var hs=new class{constructor(){this.init().catch(e=>ke.err("EmojiModule","An error occured",e))}async init(){if(is||(is=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),as||(as=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ls||(ls=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),cs||(cs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),ds||(ds=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),us||(us=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),is&&as&&ls&&cs&&ds&&us){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",as);const e=as.getAutocompleteOptions;as.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return Ss(n),n},queryResults:e=>ls.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>ps(e,t,r.emojis,n,s,cs.default.Messages.EMOJI_MATCHING,cs.default.Messages.EMOJI,is.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?ds.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!xe.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=ke.monkeyPatch(xe.MessageComponent,"default",{before:e=>{if(!ke.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=ke.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=ss.EmojiRegex.exec(e),r){o=!0,os||(os=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=os.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(rs||(rs=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(rs.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=" "+t,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function ps(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[ms(o,i,e,c),d]}function ms(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(is.default.Title,{title:r},r)}ms.displayName="renderHeader";let gs,fs,bs,ys,vs=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],ws=vs&&vs.default.isEmojiDisabled,Cs=!1,Es=!1;function Ss(e){Cs=e,Es||(vs||(vs=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),vs&&(ws||(ws=vs.default.isEmojiDisabled),Es=!0,vs.default.isEmojiDisabled=function(e){return Cs?!(!e.surrogates&&!e.diversity):ws.call(this,...arguments)}))}function xs(){}xs.prototype.setConfig=function(e){this.hasStarted||Object.assign(f,e)},Object.defineProperty(xs.prototype,"methods",{get:()=>gs}),xs.prototype.setMethods=function(e){this.hasStarted||(gs=e)},xs.prototype.init=async function(){if(this.hasStarted)return;if(this.hasStarted=!0,!Array.prototype.flat)return void ke.alert("Not Supported","BetterDiscord v"+a+" does not support this old version ("+o+") of Discord. Please update your Discord installation before proceeding.");if(f.version
Please download the latest version from GitHub");if(window.ED)return void ke.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void ke.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");ke.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),ke.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),xe.initialize(),ke.log("Startup","Updating Settings"),Xn.initializeSettings(),ke.log("Startup","Loading Addons Cache"),await we.loadAddonCertifierCache(),ke.log("Startup","Loading Plugins"),await R.loadPlugins(),ke.log("Startup","Loading Themes"),await Se.loadThemes(),Ce.addStyle("customcss",Buffer.from(L.getBDData("bdcustomcss"),"base64").toString("utf8")),window.addEventListener("beforeunload",(function(){u["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),X.start(),ke.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),ke.log("Startup","Initializing Main Observer"),this.initObserver(),u["fork-ps-1"]&&(ke.log("Startup","Collecting Startup Errors"),ke.showContentErrors({plugins:m,themes:g}));const e=L.getBDData("version");if(a>e&&(l&&this.showChangelogModal(l),L.setBDData("version",a)),hs.start(),ke.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),ke.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),ke.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),ke.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),ke.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),ke.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),ke.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),f.haveInstalledDefault){let e=ke.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},xs.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!xe.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=x.find(e=>"Anchor"==e.displayName);window.Lightcord.Api.ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=jn(),o=xe.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},xe.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-logo"})))),i.push(o);let a=xe.React.createElement("div",{style:{display:"block"}},i);return ks(r,e.user,!1),a}}),e.push(ke.monkeyPatch(xe.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},xs.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=xe.guildClasses.wrapper.split(" ")[0];document.querySelectorAll("."+s).length>0&&e++;const r=xe.guildClasses.listItem.split(" ")[0],o=xe.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(f.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},xs.prototype.injectExternals=async function(){},xs.prototype.initSettings=function(){if(L.initialize(),L.getSettingGroup("settings")||L.getSettingGroup("rpc")){Xn.loadSettings();for(const e in d)null==u[e]&&(u[e]=d[e],Xn.saveSettings())}else L.getSettingGroup("settings")||Object.assign(u,d),L.getSettingGroup("rpc")||Object.assign(h,p),Xn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if(!e[1])return e;if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Xn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},xs.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),bs||(bs=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),ys||(ys=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(fs)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(bs).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},xs.prototype.showChangelogModal=function(e={}){return ke.showChangelogModal(e)},xs.prototype.alert=function(e,t){return ke.alert(e,t)},xs.prototype.patchSocial=function(){if(this.socialPatch)return;const e=x.find(e=>"TabBar"==e.displayName),t=x.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=ke.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord"},xe.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD"},xe.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,r,o]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const i=`(${f.hash?f.hash.substring(0,7):f.branch})`,l=[xe.react.createElement("div",{className:`${s} ${r.size12}`},`Lightcord ${_.remote.getGlobal("BuildInfo").version} `,xe.react.createElement("span",{className:o+" da-versionHash"},`(${(_.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),xe.react.createElement("div",{className:`${s} ${r.size12}`},`BBD ${a} `,xe.react.createElement("span",{className:o+" da-versionHash"},i))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function ks(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=x.find(e=>"Anchor"==e.displayName);In.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=xe.React.createElement(V,{color:"black",side:"top",text:e.name},e.href?xe.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},xe.React.createElement(e.component,r)):xe.React.createElement(e.component,r)),a=document.createElement("div");xe.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}xs.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=x.findByProps("wrapper","unreadMentionsBar"),t=x.findByProps("guildsError","selected"),n=x.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=xe.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=ke.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},xs.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=x.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=ke.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},xs.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=x.findByDisplayName("Guilds"),t=x.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=ke.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},xs.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];x.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=ke.monkeyPatch(e,"default",{after:e=>{if(!u["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=ke.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=jn();n.push(xe.react.createElement("span",{id:"certified-"+s})),X.patch(t,"certified-"+s)}}))},xs.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=x.findByProps("MessageTimestamp"),t=x.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=ke.monkeyPatch(e,"default",{after:e=>{const n=ke.getNestedProp(e.methodArguments[0],"message.author"),s=ke.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-logo"}))));const r=jn();s.push(xe.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),ks(r,n,!0)}}))},xs.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=x.findByDisplayName("MemberListItem"),t=x.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=ke.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=ke.getNestedProp(e.thisObject,"props.user"),s=ke.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD Developer"},xe.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord Developer"},xe.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-logo"}))));const r=jn();s.push(xe.React.createElement("div",{id:"badges-"+r})),ks(r,n,!1)}}))},xs.prototype.updateInjector=async function(){if(!L.injectionPath)return!1};var Ds=new xs;const Ms={get React(){return xe.React},get ReactDOM(){return xe.ReactDom},get ReactComponent(){return xe.ReactComponent},get WindowConfigFile(){return ke.WindowConfigFile},get settings(){return c},get emotes(){return null},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return ke.getAllWindowPreferences()},getWindowPreference:function(e){return ke.getWindowPreference(e)},setWindowPreference:function(e,t){return ke.setWindowPreference(e,t)},injectCSS:function(e,t){Ce.addStyle(Ce.escapeID(e),t)},clearCSS:function(e){Ce.removeStyle(Ce.escapeID(e))},linkJS:function(e,t){Ce.addScript(Ce.escapeID(e),t)},unlinkJS:function(e){Ce.removeScript(Ce.escapeID(e))},getPlugin:function(e){return y.hasOwnProperty(e)?y[e].plugin:null},getCore:function(){return ke.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),Ds},alert:function(e,t){return ke.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return ke.showConfirmationModal(e,t,n)},showToast:function(e,t={}){ke.showToast(e,t)},findModule:function(e){return xe.WebpackModules.find(e)},findAllModules:function(e){return xe.WebpackModules.findAll(e)},findModuleByProps:function(...e){return xe.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return xe.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return xe.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),xe.getInternalInstance(e)},loadData:function(e,t){return L.getPluginData(e,t)}};Ms.getData=Ms.loadData,Ms.saveData=function(e,t,n){return L.setPluginData(e,t,n)},Ms.setData=Ms.saveData,Ms.deleteData=function(e,t){return L.deletePluginData(e,t)},Ms.monkeyPatch=function(e,t,n){return ke.monkeyPatch(e,t,n)},Ms.onRemoved=function(e,t){return ke.onRemoved(e,t)},Ms.suppressErrors=function(e,t){return ke.suppressErrors(e,t)},Ms.testJSON=function(e){return ke.testJSON(e)},Ms.isPluginEnabled=function(e){return!!v[e]},Ms.isThemeEnabled=function(e){return!!w[e]},Ms.isSettingEnabled=function(e){return!!u[e]},Ms.enableSetting=function(e){return Xn.onChange(e,!0)},Ms.disableSetting=function(e){return Xn.onChange(e,!1)},Ms.toggleSetting=function(e){return Xn.onChange(e,!u[e])},Ms.getBDData=function(e){return L.getBDData(e)},Ms.setBDData=function(e,t){return L.setBDData(e,t)};const Bs=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};Ms.Plugins=Bs(v,y,R),Ms.Themes=Bs(w,b,Se);var Ns=Ms;window.Lightcord.BetterDiscord.BdApi=Ms,function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const Ls=(e,t)=>{Object.defineProperty(window,e,{get:()=>(ke.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},As=Object.keys(s);for(const e of As)Ls(e,s[e]);Ls("BDV2",xe),Ls("pluginModule",R),Ls("themeModule",Se),Ls("Utils",ke),Ls("BDEvents",P),Ls("settingsPanel",Xn),Ls("DataStore",L),Ls("ContentManager",we),Ls("ClassNormalizer",qe),window.BdApi=Ns,Ls("mainCore",Ds);class Ps{constructor(e,t){Ds.setConfig(e),Ds.setMethods(t)}init(){Ds.init()}}}]); \ No newline at end of file +module.exports=function(e){var t={};function n(s){if(t[s])return t[s].exports;var r=t[s]={i:s,l:!1,exports:{}};return e[s].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(s,r,function(t){return e[t]}.bind(null,r));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t){e.exports=require("electron")},function(e,t){e.exports=require("path")},function(e,t){e.exports=require("fs")},function(e,t){e.exports=require("node-fetch")},function(e,t){e.exports=require("crypto")},function(e,t){e.exports=require("events")},function(e,t){e.exports=require("module")},function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return Ps}));var s={};n.r(s),n.d(s,"minimumDiscordVersion",(function(){return r})),n.d(s,"currentDiscordVersion",(function(){return o})),n.d(s,"minSupportedVersion",(function(){return i})),n.d(s,"bbdVersion",(function(){return a})),n.d(s,"bbdChangelog",(function(){return l})),n.d(s,"settings",(function(){return c})),n.d(s,"defaultCookie",(function(){return d})),n.d(s,"settingsCookie",(function(){return u})),n.d(s,"settingsRPC",(function(){return h})),n.d(s,"defaultRPC",(function(){return p})),n.d(s,"bdpluginErrors",(function(){return m})),n.d(s,"bdthemeErrors",(function(){return g})),n.d(s,"bdConfig",(function(){return f})),n.d(s,"bdthemes",(function(){return b})),n.d(s,"bdplugins",(function(){return y})),n.d(s,"pluginCookie",(function(){return v})),n.d(s,"themeCookie",(function(){return w}));const r="0.0.306",o=window.DiscordNative&&window.DiscordNative.remoteApp&&window.DiscordNative.remoteApp.getVersion&&window.DiscordNative.remoteApp.getVersion()||"0.0.306",i="0.3.0",a="0.3.5",l={description:"Big things are coming.",changes:[{title:"Bug Fixes",type:"fixed",items:["Some fixes related to showing modals in the `BdApi`.","Fixed the open folder buttons for plugins and themes"]}]},c={"Custom css live update":{id:"bda-css-0",info:"",implemented:!0,hidden:!0,cat:"core"},"Custom css auto udpate":{id:"bda-css-1",info:"",implemented:!0,hidden:!0,cat:"core"},"BetterDiscord Blue":{id:"bda-gs-b",info:"Replace Discord blue with BD Blue",implemented:!1,hidden:!1,cat:"core"},"Public Servers":{id:"bda-gs-1",info:"Display public servers button",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Minimal Mode":{id:"bda-gs-2",info:"Hide elements and reduce the size of elements.",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Mode":{id:"bda-gs-4",info:"Only show voice chat",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Hide Channels":{id:"bda-gs-3",info:"Hide channels in minimal mode",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Dark Mode":{id:"bda-gs-5",info:"Make certain elements dark by default(wip)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Voice Disconnect":{id:"bda-dc-0",info:"Disconnect from voice server when closing Discord",implemented:!0,hidden:!1,cat:"core",category:"modules"},"24 Hour Timestamps":{id:"bda-gs-6",info:"Replace 12hr timestamps with proper ones",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Colored Text":{id:"bda-gs-7",info:"Make text color the same as role color",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Normalize Classes":{id:"fork-ps-4",info:"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)",implemented:!0,hidden:!1,cat:"core",category:"modules"},"Content Error Modal":{id:"fork-ps-1",info:"Shows a modal with plugin/theme errors",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scan Plugins":{id:"fork-ps-6",info:"Scan plugins for any threat that can be hidden inside.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Show Toasts":{id:"fork-ps-2",info:"Shows a small notification for important information",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Scroll To Settings":{id:"fork-ps-3",info:"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Automatic Loading":{id:"fork-ps-5",info:"Automatically loads, reloads, and unloads plugins and themes",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Enable Edit Button":{id:"fork-ps-7",info:"Enable an Edit Button on the plugin and theme panel.",implemented:!0,hidden:!1,cat:"core",category:"content manager"},"Themes in Popout Window":{id:"lightcord-9",info:"Enable themes in Popout Window. (For example, when detaching screenshare.)",implemented:!0,hidden:!1,cat:"core",category:"content manager",experimental:!0},"Developer Mode":{id:"bda-gs-8",info:"Developer Mode Toggle",implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Copy Selector":{id:"fork-dm-1",info:'Adds a "Copy Selector" option to context menus when developer mode is active',implemented:!0,hidden:!1,cat:"core",category:"developer settings"},"Disable BetterDiscord":{id:"bd-disable",info:"Disable Betterdiscord (plugins, themes, etc) (Not implemented).",implemented:!1,hidden:!1,cat:"lightcord",category:"Lightcord"},"Blur Personal Information":{id:"lightcord-6",info:"Blur sensitive informations like email, payment infos and more.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Calling Ring Beat":{id:"lightcord-2",info:"Enable Discord's special calling beat.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Developer Options":{id:"lightcord-1",info:'Enable Discord\'s & Lightcord\'s Internal Developer Options. This allow the "Experiments" tab, the "Developer Options" tab and the "Lightcord Api" section.',implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Ad Block":{id:"lightcord-4",info:"Block any BOT that dms you with an invite link. Even in an embed.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Enable Lightcord Servers":{id:"lightcord-5",info:"Enable Lightcord's servers. Disabling this will disable custom badges.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Disable typing":{id:"lightcord-7",info:"Don't let other see you're typing.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord"},"Lightcord Tabs":{id:"lightcord-8",info:"Allows you to launch multiple instances of Lightcord in the same window.",implemented:!0,hidden:!1,cat:"lightcord",category:"Lightcord",experimental:!0},"Use Notification Shim":{id:"lightcord-10",info:"Basically don't use Windows's Notifications.",implemented:!0,hidden:"win32"!==process.platform,cat:"lightcord",category:"Lightcord",experimental:!1},"Always-on-Top":{id:"lightcord-3",info:"Enable the window's Always-on-Top mode, where Lightcord stays on top of other applications.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},"No Window Bounds":{id:"no_window_bound",info:"Disable Window Bounds. Can be useful if you use a window manager.",implemented:!0,hidden:"linux"!==process.platform,cat:"lightcord",category:"Window"},"Enable Glasstron":{id:"enable_glasstron",info:"Enable Glasstron. If you're not using transparent themes, this can reduce lag.",implemented:!0,hidden:!1,cat:"lightcord",category:"Window"},Enable:{id:"lightcord-presence-1",info:"Enable RichPresence below.",implemented:!0,hidden:!1,cat:"status"}},d={"bda-gs-1":!0,"bda-gs-2":!1,"bda-gs-3":!1,"bda-gs-4":!1,"bda-gs-5":!0,"bda-gs-6":!1,"bda-gs-7":!1,"bda-gs-8":!1,"bda-es-0":!0,"bda-es-1":!0,"bda-es-2":!0,"bda-es-4":!1,"bda-es-6":!0,"bda-es-7":!0,"bda-gs-b":!1,"bda-es-8":!0,"bda-dc-0":!1,"bda-css-0":!1,"bda-css-1":!1,"bda-es-9":!0,"fork-dm-1":!1,"fork-ps-1":!0,"fork-ps-2":!0,"fork-ps-3":!0,"fork-ps-4":!0,"fork-ps-5":!0,"fork-ps-6":!0,"fork-ps-7":!1,"fork-es-2":!1,"fork-es-3":!0,"fork-wp-1":!1,"fork-wp-2":!1,"fork-beta":!0,"lightcord-1":!1,"lightcord-2":!0,"lightcord-presence-1":!1,"lightcord-3":!1,"lightcord-4":!1,"lightcord-5":!0,"lightcord-6":!0,"lightcord-7":!1,"lightcord-8":!1,"lightcord-9":!1,"lightcord-10":!1,no_window_bound:!1},u={},h={},p={name:"Lightcord",application_id:"711416957718757418",state:"Lightcord Client",details:"Browsing Discord","timestamps.start":Date.now(),"assets.small":null,"assets.large":"712323821037682791"},m=[],g=[],f=Object.create(BetterDiscordConfig),b={},y={},v={},w={},C=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete C.m.__extra_id__,delete C.c.__extra_id__;const E=e=>{for(const t in C.c)if(C.c.hasOwnProperty(t)){const n=C.c[t].exports;if(n&&n.__esModule&&n.default&&e(n.default))return n.default;if(n&&e(n))return n}return null};let S={find:E,findAll:e=>{const t=[];for(const n in C.c)if(C.c.hasOwnProperty(n)){const s=C.c[n].exports;s&&s.__esModule&&s.default&&e(s.default)?t.push(s.default):s&&e(s)&&t.push(s)}return t},findByProps:(...e)=>E(t=>e.every(e=>void 0!==t[e])),findByPrototypes:(...e)=>E(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>E(t=>t.displayName===e)};var x=S;window.Lightcord.BetterDiscord.WebpackModules=S;const k=window.require,D=n(2),M=n(1),B=DiscordNative.globals?DiscordNative.globals.releaseChannel:DiscordNative.app?DiscordNative.app.getReleaseChannel():"stable";let N="";N="win32"===process.platform?process.env.APPDATA:"darwin"===process.platform?M.join(process.env.HOME,"Library","Preferences"):process.env.XDG_CONFIG_HOME?process.env.XDG_CONFIG_HOME:M.join(process.env.HOME,".config"),N=M.join(N,"BetterDiscord");var L=new class{constructor(){this.data={settings:{stable:{},canary:{},ptb:{}}},this.pluginData={},window.Lightcord.BetterDiscord.DataStore=this}initialize(){try{D.existsSync(this.BDFile)||D.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"utf-8");const e=JSON.parse(D.readFileSync(this.BDFile,"utf-8"));if(e.hasOwnProperty("settings")&&(this.data=e),!D.existsSync(this.settingsFile))return;let t=k(this.settingsFile);D.unlinkSync(this.settingsFile),t=t.hasOwnProperty("settings")?Object.assign({stable:{},canary:{},ptb:{}},{[B]:t}):Object.assign({stable:{},canary:{},ptb:{}},t),this.setBDData("settings",t)}catch(e){console.error(e),ke.alert("Corrupt Storage","The bd storage has somehow become corrupt. You may either try to salvage the file or delete it then reload.")}}get injectionPath(){return this._injectionPath=null}get configFile(){return this._configFile||(this._configFile=M.resolve(this.injectionPath,"betterdiscord","config.json"))}get BDFile(){return this._BDFile||(this._BDFile=M.resolve(N,"bdstorage.json"))}get settingsFile(){return this._settingsFile||(this._settingsFile=M.resolve(N,"bdsettings.json"))}getPluginFile(e){return M.resolve(we.pluginsFolder,e+".config.json")}getSettingGroup(e){return this.data.settings[B][e]||null}setSettingGroup(e,t){this.data.settings[B][e]=t,D.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"utf-8")}getBDData(e){return this.data[e]||""}setBDData(e,t){this.data[e]=t,D.writeFileSync(this.BDFile,JSON.stringify(this.data,null,4),"utf-8")}getPluginData(e,t){return void 0!==this.pluginData[e]?this.pluginData[e][t]:D.existsSync(this.getPluginFile(e))?(this.pluginData[e]=JSON.parse(D.readFileSync(this.getPluginFile(e))),this.pluginData[e][t]):void 0}setPluginData(e,t,n){void 0!==n&&(void 0===this.pluginData[e]&&(this.pluginData[e]={}),this.pluginData[e][t]=n,D.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"utf-8"))}deletePluginData(e,t){void 0===this.pluginData[e]&&(this.pluginData[e]={}),delete this.pluginData[e][t],D.writeFileSync(this.getPluginFile(e),JSON.stringify(this.pluginData[e],null,4),"utf-8")}};const A=n(5);var P=new class extends A{constructor(){super(),window.Lightcord.BetterDiscord.BDEvents=this}dispatch(e,...t){this.emit(e,...t)}off(e,t){this.removeListener(e,t)}};class T{constructor(){window.Lightcord.BetterDiscord.PluginModule=this}get folder(){return we.pluginsFolder}}T.prototype.loadPlugins=async function(){this.loadPluginData(),m.splice(0,0,...await we.loadPlugins());const e=Object.keys(y);for(let t=0;tsetTimeout(e,10))}this.savePluginData(),n(0).remote.getCurrentWebContents().on("did-navigate-in-page",this.channelSwitch.bind(this))},T.prototype.startPlugin=function(e,t=!1){try{y[e].plugin.start(),u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} has started.`)}catch(n){u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} could not be started.`,{type:"error"}),v[e]=!1,this.savePluginData(),ke.err("Plugins",e+" could not be started.",n)}},T.prototype.stopPlugin=function(e,t=!1){try{y[e].plugin.stop(),u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} has stopped.`)}catch(n){u["fork-ps-2"]&&!t&&ke.showToast(`${y[e].plugin.getName()} v${y[e].plugin.getVersion()} could not be stopped.`,{type:"error"}),ke.err("Plugins",y[e].plugin.getName()+" could not be stopped.",n)}},T.prototype.enablePlugin=function(e,t=!1){v[e]||(v[e]=!0,this.savePluginData(),this.startPlugin(e,t))},T.prototype.enable=function(e,t=!1){return this.enablePlugin(e,t)},T.prototype.disablePlugin=function(e,t=!1){v[e]&&(v[e]=!1,this.savePluginData(),this.stopPlugin(e,t))},T.prototype.disable=function(e,t=!1){return this.disablePlugin(e,t)},T.prototype.togglePlugin=function(e){v[e]?this.disablePlugin(e):this.enablePlugin(e)},T.prototype.toggle=function(e,t=!1){return this.togglePlugin(e,t)},T.prototype.loadPlugin=async function(e){const t=await we.loadContent(e,"plugin");if(t)return u["fork-ps-1"]&&ke.showContentErrors({plugins:[t]}),u["fork-ps-2"]&&ke.showToast(e+" could not be loaded.",{type:"error"}),ke.err("ContentManager",e+" could not be loaded.",t);const n=Object.values(y).find(t=>console.log(t.filename,e)||t.filename==e).plugin;try{n.load&&"function"==typeof n.load&&n.load()}catch(e){u["fork-ps-1"]&&ke.showContentErrors({plugins:[e]})}ke.log("ContentManager",`${n.getName()} v${n.getVersion()} was loaded.`),u["fork-ps-2"]&&ke.showToast(`${n.getName()} v${n.getVersion()} was loaded.`,{type:"success"}),P.dispatch("plugin-loaded",n.getName())},T.prototype.unloadPlugin=function(e){const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return;const n=t.plugin.getName();v[n]&&this.disablePlugin(n,!0);const s=we.unloadContent(y[n].filename,"plugin");if(delete y[n],s)return u["fork-ps-1"]&&ke.showContentErrors({plugins:[s]}),u["fork-ps-2"]&&ke.showToast(n+" could not be unloaded. It may have not been loaded yet.",{type:"error"}),ke.err("ContentManager",n+" could not be unloaded. It may have not been loaded yet.",s);ke.log("ContentManager",n+" was unloaded."),u["fork-ps-2"]&&ke.showToast(n+" was unloaded.",{type:"success"}),P.dispatch("plugin-unloaded",n)},T.prototype.delete=function(e){const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return;this.unloadPlugin(t.filename);const s=n(1).resolve(we.pluginsFolder,t.filename);n(2).unlinkSync(s)},T.prototype.reloadPlugin=async function(e){const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return this.loadPlugin(e);const n=t.plugin.getName(),s=v[n];s&&this.stopPlugin(n,!0);const r=await we.reloadContent(y[n].filename,"plugin");if(r)return u["fork-ps-1"]&&ke.showContentErrors({plugins:[r]}),u["fork-ps-2"]&&ke.showToast(n+" could not be reloaded.",{type:"error"}),ke.err("ContentManager",n+" could not be reloaded.",r);y[n].plugin.load&&"function"==typeof y[n].plugin.load&&y[n].plugin.load(),s&&this.startPlugin(n,!0),ke.log("ContentManager",`${n} v${y[n].plugin.getVersion()} was reloaded.`),u["fork-ps-2"]&&ke.showToast(`${n} v${y[n].plugin.getVersion()} was reloaded.`,{type:"success"}),P.dispatch("plugin-reloaded",n)},T.prototype.reload=function(e){return this.reloadPlugin(e)},T.prototype.edit=function(e){console.log("Edit "+e);const t=Object.values(y).find(t=>t.filename==e)||y[e];if(!t)return;const s=n(1).resolve(we.pluginsFolder,t.filename);console.log("Edit "+s),n(0).shell.openItem(""+s)},T.prototype.updatePluginList=function(){const e=we.loadNewContent("plugin");for(const t of e.added)this.loadPlugin(t);for(const t of e.removed)this.unloadPlugin(t)},T.prototype.loadPluginData=function(){const e=L.getSettingGroup("plugins");e&&Object.assign(v,e)},T.prototype.savePluginData=function(){L.setSettingGroup("plugins",v)},T.prototype.newMessage=function(){const e=Object.keys(y);for(let t=0;t{if(this.disabled)return;this.show();const e=new MutationObserver(t=>{t.forEach(t=>{const n=Array.from(t.removedNodes),s=n.indexOf(this.node)>-1,r=n.some(e=>e.contains(this.node));(s||r)&&(this.hide(),e.disconnect())})});e.observe(document.body,{subtree:!0,childList:!0})}),this.node.addEventListener("mouseleave",()=>{this.hide()}))}get container(){return document.querySelector("."+ke.removeDa(BDModules.get(e=>e.popouts)[0].popouts)+" ~ ."+ke.removeDa(BDModules.get(e=>e.layerContainer)[0].layerContainer))}get canShowAbove(){return this.node.getBoundingClientRect().top-this.element.offsetHeight>=0}get canShowBelow(){return this.node.getBoundingClientRect().top+this.node.offsetHeight+this.element.offsetHeight<=ke.screenHeight}get canShowLeft(){return this.node.getBoundingClientRect().left-this.element.offsetWidth>=0}get canShowRight(){return this.node.getBoundingClientRect().left+this.node.offsetWidth+this.element.offsetWidth<=ke.screenWidth}hide(){this.element.remove(),this.tooltipElement.className=this._className}show(){this.tooltipElement.className=`${F().tooltip} ${H(this.style)}`,this.labelElement.textContent=this.label,this.container.append(this.element),"top"==this.side&&(this.canShowAbove||!this.canShowAbove&&this.preventFlip?this.showAbove():this.showBelow()),"bottom"==this.side&&(this.canShowBelow||!this.canShowBelow&&this.preventFlip?this.showBelow():this.showAbove()),"left"==this.side&&(this.canShowLeft||!this.canShowLeft&&this.preventFlip?this.showLeft():this.showRight()),"right"==this.side&&(this.canShowRight||!this.canShowRight&&this.preventFlip?this.showRight():this.showLeft())}showAbove(){this.tooltipElement.classList.add(H("top")),this.element.style.setProperty("top",q(this.node.getBoundingClientRect().top-this.element.offsetHeight-10)),this.centerHorizontally()}showBelow(){this.tooltipElement.classList.add(H("bottom")),this.element.style.setProperty("top",q(this.node.getBoundingClientRect().top+this.node.offsetHeight+10)),this.centerHorizontally()}showLeft(){this.tooltipElement.classList.add(H("left")),this.element.style.setProperty("left",q(this.node.getBoundingClientRect().left-this.element.offsetWidth-10)),this.centerVertically()}showRight(){this.tooltipElement.classList.add(H("right")),this.element.style.setProperty("left",q(this.node.getBoundingClientRect().left+this.node.offsetWidth+10)),this.centerVertically()}centerHorizontally(){const e=this.node.getBoundingClientRect().left+this.node.offsetWidth/2;this.element.style.setProperty("left",q(e-this.element.offsetWidth/2))}centerVertically(){const e=this.node.getBoundingClientRect().top+this.node.offsetHeight/2;this.element.style.setProperty("top",q(e-this.element.offsetHeight/2))}}var V=class extends React.Component{constructor(e){super(e)}async componentDidMount(){const{style:e="black",side:t="top",text:n=""}=this.props;this.node=xe.reactDom.findDOMNode(this),this.tooltip=new G(this.node,n,{style:e,side:t})}componentWillUnmount(){this.tooltip.hide(),delete this.tooltip}render(){return this.props.children}},J=n(2),Z=n(1);const Y={},K={};var X=new class{constructor(){window.Lightcord.BetterDiscord.PluginCertifier=this}patch(e,t){process.nextTick(()=>{!function(e,t){if(!document.getElementById(t))return;if(!e.url.startsWith("https://cdn.discordapp.com/"))return document.getElementById(t).remove();if(!e.filename.endsWith(".plugin.js")&&!e.filename.endsWith(".theme.css"))return document.getElementById(t).remove();j()(e.url,{headers:{"User-Agent":_.remote.getCurrentWebContents().userAgent}}).then(n=>{if(200!==n.status)throw new Error("File doesn't exist.");const s=$.createHash("sha256");let r=Buffer.alloc(0);n.body.on("data",e=>{r=Buffer.concat([r,e]),s.update(e)}),n.body.on("end",()=>{const n=s.digest("hex");K[e.url]=n,ee[n]=e.url,te(n,r,e.filename,n=>{!function(e,t,n){const s=document.getElementById(e);if(!s||s.childNodes.length>0)return;se||(se=BDModules.get(e=>e.flowerStarContainer)[0]);re||(re=BDModules.get(e=>e.childContainer)[0]);if(t.suspect){try{s.parentNode.style.borderColor="rgb(240, 71, 71)";let e=s=>{for(let r of s.children)"A"===r.tagName?r.addEventListener("click",e=>{e.preventDefault(),e.stopImmediatePropagation(),ke.showConfirmationModal("Are you sure you want to download this ?","The "+t.type.toLowerCase()+" **"+n+"** might be dangerous **("+t.harm+")**. \n\n**We don't recommand to download it**. However, you can still do it below.",{confirmText:"Download Anyway",cancelText:"Don't !",danger:!0,onCancel:()=>{},onConfirm:()=>{_.remote.shell.openExternal(r.href)}})}):["div"].includes(r.tagName.toLowerCase())&&e(r)};e(s.parentNode)}catch(e){console.error(e)}xe.reactDom.render(xe.react.createElement(V,{text:t.type+" "+t.name+" is potentially dangerous."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px"}},xe.react.createElement("svg",{className:BDModules.get(e=>e.svg)[0].svg,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 40 32"},xe.react.createElement("rect",{x:"0",y:"0",width:"32",height:"32",mask:"url(#svg-mask-avatar-status-round-32)",fill:"#f04747",mask:"url(#svg-mask-status-dnd)",className:BDModules.get(e=>e.pointerEvents)[0].pointerEvents})))),s)}else if(t.official){s.parentNode.style.borderColor="#4087ed";let e=xe.react.createElement("span",{style:{display:"inherit"}},[xe.react.createElement(V,{text:t.type+" "+t.name+" was made by the developers of Lightcord.",style:"brand"},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2",stroke:"#36393f",style:{color:"#4087ed"}},xe.react.createElement("path",{fill:"currentColor","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),xe.react.createElement("div",{className:re.childContainer},xe.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},xe.react.createElement("path",{fill:"#ffffff",d:"M10.7,5.28a2.9,2.9,0,0,0-2.11.86.11.11,0,0,0,0,.16l1.05.94a.11.11,0,0,0,.15,0,1.27,1.27,0,0,1,.9-.33c.65,0,.65.73.65.73a.64.64,0,0,1-.65.65,1.73,1.73,0,0,1-1.18-.54c-.31-.26-.36-.32-.73-.66S7.06,5.28,5.65,5.28A2.26,2.26,0,0,0,3.37,7.56,2.59,2.59,0,0,0,3.82,9a2.18,2.18,0,0,0,1.83.89,2.94,2.94,0,0,0,2.1-.81.11.11,0,0,0,0-.16L6.74,8A.11.11,0,0,0,6.6,8a1.58,1.58,0,0,1-.94.29h0A.71.71,0,0,1,5,7.56H5a.63.63,0,0,1,.65-.64c.71,0,1.42.75,1.94,1.27.75.76,1.66,1.79,3.11,1.74A2.28,2.28,0,0,0,13,7.64a2.59,2.59,0,0,0-.45-1.47A2.14,2.14,0,0,0,10.7,5.28Z"}))))),xe.react.createElement(V,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){ke.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically download and load this "+t.type.toLowerCase()+". You must enable it in the settings.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=oe(K).find(e=>e[1]===t.hash)[0];j()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(Z.join)("Plugin"===t.type?we._pluginsFolder:we._themesFolder,t.filename);Object(J.writeFileSync)(s,n),ke.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),ke.showToast(e.message,{type:"error"})})}})}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);xe.reactDom.render(e,s)}else{s.parentNode.style.borderColor="#4087ed";let e=xe.react.createElement("span",{style:{display:"inherit"}},[xe.react.createElement(V,{text:t.type+" "+t.name+" is certified by Lightcord."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px",float:"left"}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},xe.react.createElement("path",{fill:"#4f545c","fill-rule":"evenodd",d:"m16 7.6c0 .79-1.28 1.38-1.52 2.09s.44 2 0 2.59-1.84.35-2.46.8-.79 1.84-1.54 2.09-1.67-.8-2.47-.8-1.75 1-2.47.8-.92-1.64-1.54-2.09-2-.18-2.46-.8.23-1.84 0-2.59-1.54-1.3-1.54-2.09 1.28-1.38 1.52-2.09-.44-2 0-2.59 1.85-.35 2.48-.8.78-1.84 1.53-2.12 1.67.83 2.47.83 1.75-1 2.47-.8.91 1.64 1.53 2.09 2 .18 2.46.8-.23 1.84 0 2.59 1.54 1.3 1.54 2.09z"})),xe.react.createElement("div",{className:re.childContainer},xe.react.createElement("svg",{"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 16 15.2"},xe.react.createElement("path",{fill:"#ffffff",d:"M7.4,11.17,4,8.62,5,7.26l2,1.53L10.64,4l1.36,1Z"}))))),xe.react.createElement(V,{text:"Install this "+t.type.toLowerCase()+" on Lightcord."},xe.react.createElement("div",{className:se.flowerStarContainer,style:{width:"20px",height:"20px"},onClick(){ke.showConfirmationModal("Are you sure you want to download this "+t.type.toLowerCase()+" ?","Lightcord will automatically install and launch this "+t.type.toLowerCase()+". You don't have anything to do.",{confirmText:"Download and Install",cancelText:"I've changed my mind",danger:!1,onCancel:()=>{},onConfirm:()=>{let e=oe(K).find(e=>e[1]===t.hash)[0];console.log(e),j()(e).then(async e=>{if(200!==e.status)throw new Error("Status was not 200");let n=await e.buffer(),s=Object(Z.join)("Plugin"===t.type?we._pluginsFolder:we._themesFolder,t.filename);console.log(s),Object(J.writeFileSync)(s,n),ke.showToast(t.type+" succesfully installed.")}).catch(e=>{e=e instanceof Error?e:new Error(e),ke.showToast(e.message,{type:"error"})})}})}},xe.react.createElement("svg",{className:se.flowerStar,"aria-hidden":"false",width:"20px",height:"20px",viewBox:"0 0 24 24",style:{color:"rgb(67, 181, 129)",cursor:"pointer"}},React.createElement("g",{fill:"none","fill-rule":"evenodd"},React.createElement("path",{d:"M0 0h24v24H0z"}),React.createElement("path",{class:"fill",fill:"currentColor",d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})))))]);xe.reactDom.render(e,s)}}(t,n,e.filename)},()=>{let e=document.getElementById(t);e&&e.remove()})})}).catch(()=>{})}(e,t)})}start(){}isTrusted(e){return Y[e]&&!Y[e].suspect}};function Q(e,t,n,s,r){t=t.toString("utf8");let o=!1;for(let e of t.split(/[^\w\d]+/g)){for(let t of["token","email","phone","MFA","2fa","child_process","localStorage","eval","getGlobal","BrowserWindow"])if(e.toLowerCase().includes(t.toLowerCase())&&"domtokenlist"===!e.toLowerCase()){console.log(t,e),o="token stealer/virus";break}if(o)break}if(!o){const e=t.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm,"").trim();if(/var [\w\d_$]+=\["/gi.test(e)&&(o="obfuscation/hidden code"),!o){const t=[/_0x\w{4}\('0x[\dabcdef]+'\)/g,/_0x\w{4}\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g,/\w+\('0x[\dabcdef]+'\)/g,/\w+\('0x[\dabcdef]+'[, ]+'[^']{4}'\)/g];for(let n of t){if(o)break;n.test(e)&&(o="obfuscation/hidden code")}}}if(!o)return s(e);Y[e]={suspect:!0,name:ee[e].split("/").pop(),type:ee[e].endsWith(".js")?"Plugin":"Theme",harm:o,hash:e,filename:r},console.log(`Found potentially dangerous ${Y[e].type.toLowerCase()}: ${Y[e].name}`),n(Y[e])}const ee={};function te(e,t,n,s,r){if(console.log(`File: ${n} hash: ${e}`),Y[e]){const t=Y[e];s(t)}else j()("https://cdn.jsdelivr.net/gh/Lightcord/filehashes@master/hashes/"+e,{headers:{"User-Agent":_.remote.getCurrentWebContents().userAgent}}).then(async o=>{if(200!==o.status)return n.endsWith(".theme.css")?r(e):void Q(e,t,s,r,n);const i=await o.json();i.hash=e,i.filename=n,Y[e]=i,s(i)}).catch(o=>{if(console.error("Could not read from github. "+o),n.endsWith(".theme.css"))return r(e);Q(e,t,s,r,n)})}function ne(e,t,n=(e=>{}),s=!1){const r=$.createHash("sha256");let o=Buffer.alloc(0);Object(J.createReadStream)(e).on("data",e=>{o=Buffer.concat([o,e]),r.update(e)}).on("end",()=>{const i=r.digest("hex");if(ee[i]=e,s&&ye[i]){let e=ye[i];if(!(e.timestampe.flowerStarContainer)[0],re=BDModules.get(e=>e.childContainer)[0];function oe(e){let t=[];return Object.keys(e).forEach(n=>{t.push([n,e[n]])}),t}let ie=null,ae=null;function le(){ie=[$.randomBytes(16).toString("base64"),$.randomBytes(32).toString("base64")]}function ce(e){let t=[Buffer.from(ie[1],"base64"),Buffer.from(ie[0],"base64")],n=$.createCipheriv("aes-256-cbc",...t),s=n.update(Buffer.from(e,"utf8"));return s=Buffer.concat([s,n.final()]),s.toString("base64")}window.Lightcord.Api.ensureExported(e=>e.ObjectStorage).then(e=>{let t=e.impl;ae=function(){t.set("PluginCertifierKeyEncryption__",btoa(JSON.stringify(ie)))},setInterval(()=>{ae()},1e5);try{let e=function(e){try{return JSON.parse(e)}catch(e){return e instanceof Error?new Error(e):e}}(atob(t.get("PluginCertifierKeyEncryption__")));if(e instanceof Error||!Array.isArray(e)||2!==e.length||e.find(e=>"string"!=typeof e)||16!==Buffer.from(e[0],"base64").length||32!==Buffer.from(e[1],"base64").length)return le(),void ae();ie=e}catch(e){le(),ae()}});const de=n(1),ue=n(2),he=n(6).Module;he.globalPaths.push(de.resolve(n(0).remote.app.getAppPath(),"node_modules"));class pe extends Error{constructor(e){super(e),this.name="MetaError"}}const me=he._extensions[".js"],ge=he._extensions[".css"]?he._extensions[".css"]:()=>null,fe=/[^\S\r\n]*?(?:\r\n|\n)[^\S\r\n]*?\*[^\S\r\n]?/,be=/^\\@/;let ye={},ve=!1;var we=new class{constructor(){this.timeCache={},this.watchers={}}patchExtensions(){ve||(ve=!0,he._extensions[".js"]=this.getContentRequire("plugin"),he._extensions[".css"]=this.getContentRequire("theme"))}get pluginsFolder(){return this._pluginsFolder||(this._pluginsFolder=ue.realpathSync(de.resolve(f.dataPath+"plugins/")))}get themesFolder(){return this._themesFolder||(this._themesFolder=ue.realpathSync(de.resolve(f.dataPath+"themes/")))}loadAddonCertifierCache(){if("string"!=typeof L.getSettingGroup("PluginCertifierHashes"))L.setSettingGroup("PluginCertifierHashes",ce("{}"));else try{ye=JSON.parse(function(e){try{let t=$.createDecipheriv("aes-256-cbc",Buffer.from(ie[1],"base64"),Buffer.from(ie[0],"base64")),n=t.update(Buffer.from(e,"base64"));return n=Buffer.concat([n,t.final()]),n.toString("utf8")}catch(e){return"{}"}}(L.getSettingGroup("PluginCertifierHashes")))}catch(e){L.setSettingGroup("PluginCertifierHashes",ce("{}")),ye={}}Object.keys(ye).forEach(e=>{let t=ye[e];if(!t||"object"!=typeof t||Array.isArray(t))return delete ye[e];let n=[{key:"timestamp",type:"number"},{key:"result",type:"object"},{key:"hash",type:"string"}];for(let s of n)if(!(s.key in t)||typeof t[s.key]!==s.type)return void delete ye[e];t.hash===e?t.result.suspect&&delete ye[e]:delete ye[e]}),this.saveAddonCache()}saveAddonCache(){L.setSettingGroup("PluginCertifierHashes",ce(JSON.stringify(ye)))}watchContent(e){if(this.watchers[e])return;const t="plugin"===e,n=t?this.pluginsFolder:this.themesFolder,s=t?".plugin.js":".theme.css";this.watchers[e]=ue.watch(n,{persistent:!1},async(e,r)=>{if(!e||!r||!r.endsWith(s))return;await new Promise(e=>setTimeout(e,50));try{ue.statSync(de.resolve(n,r))}catch(e){if("ENOENT"!==e.code)return;return delete this.timeCache[r],t?R.unloadPlugin(r):Se.unloadTheme(r)}if(!ue.statSync(de.resolve(n,r)).isFile())return;const o=ue.statSync(de.resolve(n,r));o&&o.mtime&&o.mtime.getTime()&&"number"==typeof o.mtime.getTime()&&this.timeCache[r]!=o.mtime.getTime()&&(this.timeCache[r]=o.mtime.getTime(),"rename"==e&&(t?await R.loadPlugin(r):await Se.loadTheme(r)),"change"==e&&(t?await R.reloadPlugin(r):await Se.reloadTheme(r)))})}unwatchContent(e){this.watchers[e]&&(this.watchers[e].close(),delete this.watchers[e])}extractMeta(e){const t=e.split("\n")[0];if(t.includes("//META"))return this.parseOldMeta(e);if(t.includes("/**"))return this.parseNewMeta(e);throw new pe("META was not found.")}parseOldMeta(e){const t=e.split("\n")[0],n=t.substring(t.lastIndexOf("//META")+6,t.lastIndexOf("*//"));if(t.indexOf("META")<0)throw new pe("META was not found.");const s=ke.testJSON(n);if(!s)throw new pe("META could not be parsed.");if(!s.name)throw new pe("META missing name data.");return s.format="json",s}parseNewMeta(e){const t=e.split("/**",2)[1].split("*/",1)[0],n={};let s="",r="";for(const e of t.split(fe))if(0!==e.length)if("@"===e.charAt(0)&&" "!==e.charAt(1)){n[s]=r;const t=e.indexOf(" ");s=e.substr(1,t-1),r=e.substr(t+1)}else r+=" "+e.replace("\\n","\n").replace(be,"@");return n[s]=r.trim(),delete n[""],n.format="jsdoc",n}getContentRequire(e){const t="plugin"===e,n=this,s=t?me:ge;return function(e,r){const o=t?n.pluginsFolder:n.themesFolder,i=de.resolve(o,de.basename(r));if(!ue.existsSync(i)||r!==ue.realpathSync(i))return Reflect.apply(s,this,arguments);let a=ue.readFileSync(r,"utf8");a=ke.stripBOM(a);const l=ue.statSync(r),c=n.extractMeta(a);if(c.filename=de.basename(r),c.added=l.atimeMs,c.modified=l.mtimeMs,c.size=l.size,t||(c.css=a,"json"==c.format&&(c.css=c.css.split("\n").slice(1).join("\n")),a=`module.exports = ${JSON.stringify(c)};`),t){e._compile(a,e.filename);!ke.isEmpty(e.exports)?(c.type=e.exports,e.exports=c,a=""):(ke.warn("Module Not Exported",c.name+", please start setting module.exports"),a+=`\nmodule.exports = ${JSON.stringify(c)};\nmodule.exports.type = ${c.exports||c.name};`)}e._compile(a,r)}}makePlaceholderPlugin(e){return{plugin:{start:()=>{},getName:()=>e.name||e.filename,getAuthor:()=>"???",getDescription:()=>e.message?e.message:"This plugin was unable to be loaded. Check the author's page for updates.",getVersion:()=>"???"},name:e.name||e.filename,filename:e.filename,source:e.source?e.source:"",website:e.website?e.website:""}}async loadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t,s=n?this.pluginsFolder:this.themesFolder;if(u["fork-ps-6"]){let t=await new Promise(t=>{ne(de.resolve(s,e),e=>{console.log(e),t(e)},n=>{t({suspect:!1,hash:n,filename:e,name:e})},!0)});if(t&&(ye[t.hash]={timestamp:Date.now(),hash:t.hash,result:t},this.saveAddonCache(),t.suspect))return{name:e,file:e,message:"This plugin might be dangerous ("+t.harm+").",error:new Error("This plugin might be dangerous ("+t.harm+").")}}try{window.require(de.resolve(s,e))}catch(t){return{name:e,file:e,message:"Could not be compiled.",error:{message:t.message,stack:t.stack}}}const r=window.require(de.resolve(s,e));if(!r.name)return{name:e,file:e,message:"Cannot escape the ID.",error:new Error("Cannot read property 'replace' of undefined")};if(r.id=ke.escapeID(r.name),n){if(!r.type)return;try{r.plugin=new r.type,delete y[r.plugin.getName()],y[r.plugin.getName()]=r}catch(t){return{name:e,file:e,message:"Could not be constructed.",error:{message:t.message,stack:t.stack}}}}else delete b[r.name],b[r.name]=r}unloadContent(e,t){if(void 0===e||void 0===t)return;const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{delete window.require.cache[window.require.resolve(de.resolve(n,e))]}catch(t){return{name:e,file:e,message:"Could not be unloaded.",error:{message:t.message,stack:t.stack}}}}isLoaded(e,t){const n="plugin"===t?this.pluginsFolder:this.themesFolder;try{window.require.cache[window.require.resolve(de.resolve(n,e))]}catch(e){return!1}return!0}async reloadContent(e,t){const n=this.unloadContent(e,t);return n||await this.loadContent(e,t)}loadNewContent(e){const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=ue.readdirSync(s),o=Object.values(t?y:b),i=o.filter(e=>!r.includes(e.filename)).map(e=>t?e.plugin.getName():e.name);return{added:r.filter(e=>!o.find(t=>t.filename==e)&&e.endsWith(n)&&ue.statSync(de.resolve(s,e)).isFile()),removed:i}}async loadAllContent(e){this.patchExtensions();const t="plugin"===e,n=t?".plugin.js":".theme.css",s=t?this.pluginsFolder:this.themesFolder,r=[],o=ue.readdirSync(s);for(const t of o){if(!ue.statSync(de.resolve(s,t)).isFile()||!t.endsWith(n))continue;const o=await this.loadContent(t,e);o&&r.push(o)}return r}loadPlugins(){return this.loadAllContent("plugin")}loadThemes(){return this.loadAllContent("theme")}};class Ce{static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static addStyle(e,t){document.head.append(Ce.createElement(``))}static removeStyle(e){const t=document.getElementById(e);t&&t.remove()}static addScript(e,t){return new Promise(n=>{const s=document.createElement("script");s.id=e,s.src=t,s.type="text/javascript",s.onload=n,document.head.append(s)})}static removeScript(e){e=this.escapeID(e);const t=document.getElementById(e);t&&t.remove()}static animate({timing:e=(e=>e),update:t,duration:n}){const s=performance.now();requestAnimationFrame((function r(o){let i=(o-s)/n;i>1&&(i=1);const a=e(i);t(a),i<1&&requestAnimationFrame(r)}))}static Q(e){const t=this.parseHTML(e);return(t instanceof NodeList?Array.from(t).some(e=>1===e.nodeType):1===t.nodeType)?t:this.query(e)}static query(e,t){return t||(t=document),t.querySelector(e)}static queryAll(e,t){return t||(t=document),t.querySelectorAll(e)}static parseHTML(e,t=!1){const n=document.createElement("template");n.innerHTML=e;const s=n.content.cloneNode(!0);return t?s:s.childNodes.length>1?s.childNodes:s.childNodes[0]}static createElement(e,t=!1){return this.parseHTML(e,t)}static escapeHTML(e){const t=document.createTextNode(""),n=document.createElement("span");return n.append(t),t.nodeValue=e,n.innerHTML}static addClass(e,...t){t=t.flat().filter(e=>e);for(let e=0;ee),e.classList.add(...t),e}static removeClass(e,...t){for(let e=0;ee),e.classList.remove(...t),e}static toggleClass(e,t,n){return t=t.toString().split(" ").filter(e=>e),void 0!==n?t.forEach(t=>e.classList.toggle(t,n)):t.forEach(t=>e.classList.toggle(t)),e}static hasClass(e,t){return t.toString().split(" ").filter(e=>e).every(t=>e.classList.contains(t))}static replaceClass(e,t,n){return e.classList.replace(t,n),e}static appendTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.append(e),e):null}static prependTo(e,t){return"string"==typeof t&&(t=this.query(t)),t?(t.prepend(e),e):null}static insertAfter(e,t){return t.parentNode.insertBefore(e,t.nextSibling),e}static after(e,t){return e.parentNode.insertBefore(t,e.nextSibling),e}static next(e,t=""){return t?e.querySelector("+ "+t):e.nextElementSibling}static nextAll(e){return e.querySelectorAll("~ *")}static nextUntil(e,t){const n=[];for(;e.nextElementSibling&&!e.nextElementSibling.matches(t);)n.push(e=e.nextElementSibling);return n}static previous(e,t=""){const n=e.previousElementSibling;return t?n&&n.matches(t)?n:null:n}static previousAll(e){const t=[];for(;e.previousElementSibling;)t.push(e=e.previousElementSibling);return t}static previousUntil(e,t){const n=[];for(;e.previousElementSibling&&!e.previousElementSibling.matches(t);)n.push(e=e.previousElementSibling);return n}static indexInParent(e){const t=e.parentNode.childNodes;let n=0;for(let s=0;s "+t)}static findChildren(e,t){return e.querySelectorAll(":scope > "+t)}static parents(e,t=""){const n=[];if(t)for(;e.parentElement&&e.parentElement.closest(t);)n.push(e=e.parentElement.closest(t));else for(;e.parentElement;)n.push(e=e.parentElement);return n}static parentsUntil(e,t){const n=[];for(;e.parentElement&&!e.parentElement.matches(t);)n.push(e=e.parentElement);return n}static siblings(e,t="*"){return Array.from(e.parentElement.children).filter(n=>n!=e&&n.matches(t))}static css(e,t,n){return void 0===n?global.getComputedStyle(e)[t]:(e.style[t]=n,e)}static width(e,t){return void 0===t?parseInt(getComputedStyle(e).width):(e.style.width=t,e)}static height(e,t){return void 0===t?parseInt(getComputedStyle(e).height):(e.style.height=t,e)}static text(e,t){return void 0===t?e.textContent:e.textContent=t}static innerWidth(e){return e.clientWidth}static innerHeight(e){return e.clientHeight}static outerWidth(e){return e.offsetWidth}static outerHeight(e){return e.offsetHeight}static offset(e){return e.getBoundingClientRect()}static get listeners(){return this._listeners||(this._listeners={})}static on(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(e){e.target.matches(n)&&s(e)}:s;e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static once(e,t,n,s){const[r,o]=t.split("."),i=n&&s;s||(s=n);const a=i?function(t){t.target.matches(n)&&(s(t),e.removeEventListener(r,a))}:function(t){s(t),e.removeEventListener(r,a)};e.addEventListener(r,a);const l=()=>{e.removeEventListener(r,a)};if(o){this.listeners[o]||(this.listeners[o]=[]);const t=()=>{l(),this.listeners[o].splice(this.listeners[o].findIndex(t=>t.event==r&&t.element==e),1)};return this.listeners[o].push({event:r,element:e,cancel:t}),t}return l}static __offAll(e,t){const[n,s]=e.split(".");let r=e=>e.event==n,o=e=>e;t&&(r=e=>e.event==n&&e.element==t,o=e=>e.element==t);const i=this.listeners[s]||[],a=n?i.filter(r):i.filter(o);for(let e=0;e{this.observer.unsubscribe(s),t()};return this.observer.subscribe(s,t=>{const s=Array.from(n?t.addedNodes:t.removedNodes),r=s.indexOf(e)>-1,o=s.some(t=>t.contains(e));return r||o}),e}static onMount(e,t){return this.onMountChange(e,t)}static onUnmount(e,t){return this.onMountChange(e,t,!1)}static onAdded(e,t){return this.onMount(e,t)}static onRemoved(e,t){return this.onUnmount(e,t,!1)}static wrap(e){const t=this.parseHTML('
');for(let n=0;nsetTimeout(e,10))}for(const e in w)b[e]||delete w[e];this.saveThemeData()},Ee.prototype.enableTheme=function(e,t=!1){w[e]=!0,this.saveThemeData();const n=b[e];Ce.addStyle(Ce.escapeID(n.id),unescape(n.css)),P.dispatch("theme-enabled"),u["fork-ps-2"]&&!t&&ke.showToast(`${n.name} v${n.version} has been applied.`)},Ee.prototype.enable=function(e,t=!1){return this.enableTheme(e,t)},Ee.prototype.disableTheme=function(e,t=!1){w[e]=!1,this.saveThemeData();const n=b[e];Ce.removeStyle(Ce.escapeID(n.id)),P.dispatch("theme-disabled"),u["fork-ps-2"]&&!t&&ke.showToast(`${n.name} v${n.version} has been disabled.`)},Ee.prototype.disable=function(e,t=!1){return this.disableTheme(e,t)},Ee.prototype.toggleTheme=function(e){w[e]?this.disableTheme(e):this.enableTheme(e)},Ee.prototype.toggle=function(e){return this.toggleTheme(e)},Ee.prototype.loadTheme=async function(e){const t=await we.loadContent(e,"theme");if(t)return u["fork-ps-1"]&&ke.showContentErrors({themes:[t]}),u["fork-ps-2"]&&ke.showToast(e+" could not be loaded. It may not have been loaded.",{type:"error"}),ke.err("ContentManager",e+" could not be loaded.",t);const n=Object.values(b).find(t=>t.filename==e);ke.log("ContentManager",`${n.name} v${n.version} was loaded.`),u["fork-ps-2"]&&ke.showToast(`${n.name} v${n.version} was loaded.`,{type:"success"}),P.dispatch("theme-loaded",n.name)},Ee.prototype.unloadTheme=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;const n=t.name;w[n]&&this.disableTheme(n,!0);const s=we.unloadContent(b[n].filename,"theme");if(delete b[n],s)return u["fork-ps-1"]&&ke.showContentErrors({themes:[s]}),u["fork-ps-2"]&&ke.showToast(n+" could not be unloaded. It may have not been loaded yet.",{type:"error"}),ke.err("ContentManager",n+" could not be unloaded. It may have not been loaded yet.",s);ke.log("ContentManager",n+" was unloaded."),u["fork-ps-2"]&&ke.showToast(n+" was unloaded.",{type:"success"}),P.dispatch("theme-unloaded",n)},Ee.prototype.delete=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;this.unloadTheme(t.filename);const s=n(1).resolve(we.themesFolder,t.filename);n(2).unlinkSync(s)},Ee.prototype.reloadTheme=async function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return this.loadTheme(e);const n=t.name,s=await we.reloadContent(b[n].filename,"theme");if(w[n]&&(this.disableTheme(n,!0),this.enableTheme(n,!0)),s)return u["fork-ps-1"]&&ke.showContentErrors({themes:[s]}),u["fork-ps-2"]&&ke.showToast(n+" could not be reloaded.",{type:"error"}),ke.err("ContentManager",n+" could not be reloaded.",s);ke.log("ContentManager",`${n} v${b[n].version} was reloaded.`),u["fork-ps-2"]&&ke.showToast(`${n} v${b[n].version} was reloaded.`,{type:"success"}),P.dispatch("theme-reloaded",n)},Ee.prototype.reload=function(e){return this.reloadTheme(e)},Ee.prototype.edit=function(e){const t=Object.values(b).find(t=>t.filename==e)||b[e];if(!t)return;const s=n(1).resolve(we.themesFolder,t.filename);n(0).shell.openItem(""+s)},Ee.prototype.updateThemeList=function(){const e=we.loadNewContent("theme");for(const t of e.added)this.loadTheme(t);for(const t of e.removed)this.unloadTheme(t)},Ee.prototype.loadThemeData=function(){const e=L.getSettingGroup("themes");e&&Object.assign(w,e)},Ee.prototype.saveThemeData=function(){L.setSettingGroup("themes",w)};var Se=new Ee,xe=new class{constructor(){this.editorDetached=!1,this.WebpackModules=(()=>{const e=webpackJsonp.push([[],{__extra_id__:(e,t,n)=>e.exports=n},[["__extra_id__"]]]);delete e.m.__extra_id__,delete e.c.__extra_id__;const t=(e,t)=>{let n=t?e:e.default;if(!n)return e;if(n.remove&&n.set&&n.clear&&n.get&&!n.sort)return null;if(!n.getToken&&!n.getEmail&&!n.showToken)return e;const s=new Proxy(n,{getOwnPropertyDescriptor:function(e,t){if("getToken"!==t&&"getEmail"!==t&&"showToken"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){return"getToken"==t&&e.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==t&&e.getEmail?()=>"puppet11112@gmail.com":"showToken"==t&&e.showToken?()=>!0:"__proto__"==t&&e.__proto__?s:e[t]}});return t?s:Object.assign({},e,{default:s})},n=n=>{for(const s in e.c)if(e.c.hasOwnProperty(s)){const r=e.c[s].exports;if(r&&r.__esModule&&r.default&&n(r.default))return t(r.default,!0);if(r&&n(r))return t(r,!1)}return null};return{find:n,findAll:n=>{const s=[];for(const r in e.c)if(e.c.hasOwnProperty(r)){const o=e.c[r].exports;o&&o.__esModule&&o.default&&n(o.default)?s.push(t(o.default,!0)):o&&n(o)&&s.push(t(o,!1))}return s},findByUniqueProperties:e=>n(t=>e.every(e=>void 0!==t[e])),findByPrototypes:e=>n(t=>t.prototype&&e.every(e=>void 0!==t.prototype[e])),findByDisplayName:e=>n(t=>t.displayName===e)}})(),this.internal={react:this.WebpackModules.findByUniqueProperties(["Component","PureComponent","Children","createElement","cloneElement"]),reactDom:this.WebpackModules.findByUniqueProperties(["findDOMNode"])},this.getInternalInstance=e=>e[Object.keys(e).find(e=>e.startsWith("__reactInternalInstance"))],window.Lightcord.BetterDiscord.V2=this}initialize(){}joinBD1(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("0Tmfo5ZbORCRqbAd")}leaveBD1(){this.GuildActions.leaveGuild("86004744966914048")}joinBD2(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("2HScm8j")}leaveBD2(){this.GuildActions.leaveGuild("280806472928198656")}joinLC(){this.InviteActions.acceptInviteAndTransitionToInviteChannel("7eFff2A")}leaveLC(){this.GuildActions.leaveGuild("705908350218666117")}get react(){return this.internal.react}get React(){return this.internal.react}get reactDom(){return this.internal.reactDom}get ReactDom(){return this.internal.reactDom}get reactComponent(){return this.internal.react.Component}get ReactComponent(){return this.internal.react.Component}get anchorClasses(){return this.WebpackModules.findByUniqueProperties(["anchorUnderlineOnHover"])||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"}}get slateEditorClasses(){return this.WebpackModules.findByUniqueProperties(["slateTextArea"])}get messageClasses(){return this.WebpackModules.findByUniqueProperties(["message","containerCozy"])}get guildClasses(){const e=BDModules.get(e=>e.wrapper&&e.unreadMentionsBar)[0],t=BDModules.get(e=>e.guildsError&&e.selected)[0],n=BDModules.get(e=>e.blobContainer)[0];return Object.assign({},e,t,n)}get MessageContentComponent(){return this.WebpackModules.find(e=>e.defaultProps&&e.defaultProps.hasOwnProperty("disableButtons"))}get MessageComponent(){return this.WebpackModules.find(e=>e.default&&e.default.displayName&&"Message"==e.default.displayName)}get TimeFormatter(){return this.WebpackModules.findByUniqueProperties(["dateFormat"])}get TooltipWrapper(){return this.WebpackModules.findByDisplayName("Tooltip")}get NativeModule(){return this.WebpackModules.findByUniqueProperties(["setBadge"])}get InviteActions(){return this.WebpackModules.findByUniqueProperties(["acceptInvite"])}get GuildActions(){return this.WebpackModules.findByUniqueProperties(["leaveGuild"])}get Tooltips(){return this.WebpackModules.find(e=>e.hide&&e.show&&!e.search&&!e.submit&&!e.search&&!e.activateRagingDemon&&!e.dismiss)}get KeyGenerator(){return this.WebpackModules.find(e=>e.toString&&/"binary"/.test(e.toString()))}get LayerStack(){return this.WebpackModules.findByUniqueProperties(["popLayer"])}get UserStore(){return this.WebpackModules.findByUniqueProperties(["getCurrentUser"])}get ChannelStore(){return this.WebpackModules.findByUniqueProperties(["getChannel"])}get ChannelActions(){return this.WebpackModules.findByUniqueProperties(["openPrivateChannel"])}get PrivateChannelActions(){return this.WebpackModules.findByUniqueProperties(["selectPrivateChannel"])}openDM(e){const t=this.UserStore.getCurrentUser().id;if(t==e)return;const n=this.ChannelStore.getDMFromUserId(e);if(n)return this.PrivateChannelActions.selectPrivateChannel(n);this.ChannelActions.openPrivateChannel(t,e)}parseSettings(e){return Object.keys(c).reduce((t,n)=>{const s=c[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}};class ke{static get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)}static get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)}static get WindowConfigFile(){return this._windowConfigFile=null}static getAllWindowPreferences(){return{transparent:!0,frame:!1}}static getWindowPreference(e){return"transparent"===e||"frame"!==e&&null}static setWindowPreference(e,t){return"transparent"===e||"frame"!==e&&null}static stripBOM(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e}static getTextArea(){return Ce.query("."+De(BDModules.get(e=>e.channelTextArea&&e.titleWrapper)[0].channelTextArea)+" textarea")}static insertText(e,t){e.focus(),e.selectionStart=0,e.selectionEnd=e.value.length,document.execCommand("insertText",!1,t)}static escapeID(e){return e.replace(/^[^a-z]+|[^\w-]+/gi,"-")}static log(e,t){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #3a71c1; font-weight: 700;","color: #3a71c1;","")}static warn(e,t){console.warn(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: #E8A400; font-weight: 700;","color: #E8A400;","")}static err(e,t,n){console.log(`%c[BandagedBD]%c [${e}]%c ${t}`,"color: red; font-weight: 700;","color: red;",""),n&&(console.groupCollapsed("%cError: "+n.message,"color: red;"),console.error(n.stack),console.groupEnd())}static formatString(e,t){for(const n in t){let s=t[n];Array.isArray(s)&&(s=JSON.stringify(s)),"object"==typeof s&&null!==s&&(s=s.toString()),e=e.replace(new RegExp(`{{${n}}}`,"g"),s)}return e}static escape(e){return e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}static testJSON(e){try{return JSON.parse(e)}catch(e){return!1}}static isEmpty(e){if(null==e||null==e||""==e)return!0;if("object"!=typeof e)return!1;if(Array.isArray(e))return 0==e.length;for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}static suppressErrors(e,t){return(...n)=>{try{return e(...n)}catch(e){this.err("SuppressedError","Error occurred in "+t,e)}}}static monkeyPatch(e,t,n){const{before:s,after:r,instead:o,once:i=!1,silent:a=!1,force:l=!1}=n,c=n.displayName||e.displayName||e[t].displayName||e.name||e.constructor.displayName||e.constructor.name;if(a||console.log("patch",t,"of",c),!e[t]){if(!l)return console.error(t,"does not exist for",c);e[t]=function(){}}const d=e[t];let u=!1;const h=()=>{a||console.log("unpatch",t,"of",c),u=!0};return e[t]=function(){if(u)return d.call(this,...arguments);const n={thisObject:this,methodArguments:arguments,cancelPatch:h,originalMethod:d,callOriginalMethod:()=>n.returnValue=n.originalMethod.apply(n.thisObject,n.methodArguments)};if(o){const s=ke.suppressErrors(o,"`instead` callback of "+e[t].displayName)(n);void 0!==s&&(n.returnValue=s)}else s&&ke.suppressErrors(s,"`before` callback of "+e[t].displayName)(n),n.callOriginalMethod(),r&&ke.suppressErrors(r,"`after` callback of "+e[t].displayName)(n);return i&&h(),n.returnValue},Object.assign(e[t],d),e[t].__monkeyPatched=!0,e[t].displayName=c,e[t].__originalMethod||(e[t].__originalMethod=d,e[t].toString=function(){return d.toString()}),h}static onRemoved(e,t){const n=new MutationObserver(s=>{for(let r=0;r-1,l=i.some(t=>t.contains(e));(a||l)&&(n.disconnect(),t())}});n.observe(document.body,{subtree:!0,childList:!0})}static getNestedProp(e,t){return t.split(/\s?\.\s?/).reduce((function(e,t){return e&&e[t]}),e)}static showToast(e,t={}){if(!document.querySelector(".bd-toasts")){const e=document.querySelector("."+De(BDModules.get(e=>e.sidebar&&e.hasNotice)[0].sidebar)+" + div")||null,t=e?e.querySelector("form"):null,n=t?t.offsetHeight:80,s=document.createElement("div");s.classList.add("bd-toasts"),s.style.setProperty("bottom",n+"px"),document.querySelector("#app-mount").appendChild(s)}const n=document.querySelector(".bd-toasts"),{type:s="",icon:r=!0,timeout:o=3e3}=t,i=document.createElement("div");i.classList.add("bd-toast"),s&&i.classList.add("toast-"+s),s&&r&&i.classList.add("icon"),i.innerText=e,n.appendChild(i),n.style.setProperty("left",`calc(50% - ${n.offsetWidth/2}px)`),setTimeout(()=>{i.classList.add("closing"),setTimeout(()=>{i.remove(),document.querySelectorAll(".bd-toasts .bd-toast").length||document.querySelector(".bd-toasts").remove()},300)},o)}static alert(e,t){let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=Ce.createElement(`
\n
\n
\n
\n
\n
${e}
\n
\n
\n
\n
\n ${t}\n
\n
\n
\n \n
\n
\n
`);o.querySelector(".footer button").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)}),Ce.query("#app-mount").append(o);const i=[];return{close:()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove(),i.forEach(e=>{try{e()}catch(e){console.error(e)}})},300)},onClose:e=>{i.push(e)}}}static showContentErrors({plugins:e=[],themes:t=[]}){if(!e||!t)return;if(!e.length&&!t.length)return;let n=BDModules.get(e=>e.modal&&e.inner&&!e.hideOnFullscreen)[0],s=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.hideOnFullscreen)[0],r=BDModules.get(e=>e.header&&e.responsiveWidthMobile&&e.focusLock)[0];const o=Ce.createElement(`
\n
\n
\n
\n
Content Errors
\n
\n
\n
\n
Plugins
\n
Themes
\n
\n
\n
\n
Name
\n
Message
\n
Error
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
`);function i(e){const t=Ce.createElement('
');for(const n of e){const e=Ce.createElement(`
\n
${n.name?n.name:n.file}
\n
${n.message}
\n \n
`);t.append(e),n.error&&e.querySelectorAll("a").forEach(e=>e.addEventListener("click",e=>{e.preventDefault(),ke.err("ContentManager",`Error details for ${n.name?n.name:n.file}.`,n.error)}))}return t}const a=[i(e),i(t)];o.querySelectorAll(".tab-bar-item").forEach(e=>e.addEventListener("click",e=>{e.preventDefault();const t=o.querySelector(".tab-bar-item.selected");t&&Ce.removeClass(t,"selected"),Ce.addClass(e.target,"selected");const n=o.querySelector(".scroller");n.innerHTML="",n.append(a[Ce.index(e.target)])})),o.querySelector(".footer button").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),o.querySelector(".bd-backdrop").addEventListener("click",()=>{Ce.addClass(o,"closing"),setTimeout(()=>{o.remove()},300)}),Ce.query("#app-mount").append(o),e.length?o.querySelector(".tab-bar-item").click():o.querySelectorAll(".tab-bar-item")[1].click()}static showChangelogModal(e={}){const t=x.findByProps("push","update","pop","popWithKey"),n=x.findByProps("fixed","improved"),s=x.findByDisplayName("Text"),r=x.findByProps("Child"),o=x.findByProps("Tags","default"),i=x.find(e=>e.defaultProps&&0==e.defaultProps.selectable),l=x.findByProps("defaultRules","parse");if(!(i&&t&&n&&s&&r&&o&&l))return;const{image:c="https://repository-images.githubusercontent.com/105473537/957b5480-7c26-11e9-8401-50fa820cbae5",description:d="",changes:u=[],title:h="BandagedBD",subtitle:p="v"+a,footer:m}=e,g=xe.React.createElement,f=[g("img",{src:c})];d&&f.push(g("p",null,l.parse(d)));for(let e=0;eg("li",null,l.parse(e))));f.push(o)}const b=function(){return g(r.Child,{grow:1,shrink:1},g(o.default,{tag:o.Tags.H4},h),g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD,className:n.date},p))},y=()=>{const e=x.find(e=>"Anchor"==e.displayName),n=x.findByProps("anchorUnderlineOnHover")||{anchor:"anchor-3Z-8Bb",anchorUnderlineOnHover:"anchorUnderlineOnHover-2ESHQB"},o=e=>{e.preventDefault(),e.stopPropagation(),t.pop(),xe.joinBD2()},i=e?g(e,{onClick:o},"Join our Discord Server."):g("a",{className:`${n.anchor} ${n.anchorUnderlineOnHover}`,onClick:o},"Join our Discord Server."),a=g(s,{size:s.Sizes.SMALL,color:s.Colors.STANDARD},"Need support? ",i);return g(r.Child,{grow:1,shrink:1},m||a)};return t.push((function(e){return g(i,Object.assign({className:n.container,selectable:!0,onScroll:e=>e,onClose:e=>e,renderHeader:b,renderFooter:y,children:f},e))}))}static showConfirmationModal(e,t,n={}){const s=x.findByProps("openModal","updateModal"),r=x.findByDisplayName("Markdown"),o=x.findByDisplayName("ConfirmModal");if(!s||!o||!r)return ke.alert(e,t);const i=()=>{},{onConfirm:a=i,onCancel:l=i,confirmText:c="Okay",cancelText:d="Cancel",danger:u=!1,key:h}=n;return Array.isArray(t)||(t=[t]),t=t.map(e=>"string"==typeof e?xe.React.createElement(r,null,e):e),s.openModal(n=>xe.React.createElement(o,Object.assign({header:e,red:u,confirmText:c,cancelText:d,onConfirm:a,onCancel:l},n),t),{modalKey:h})}static get removeDa(){return De}}function De(e){return e?e.split(" ").filter(e=>!e.startsWith("da-")).join(" "):e}ke.showToast=ke.suppressErrors(ke.showToast,"Could not show toast."),window.Lightcord.BetterDiscord.Utils=ke;class Me{constructor(){this.panels={}}register(e,t){this.panels[e]=t}getComponent(e,t){return this.panels[e](t)}get items(){return[{text:"BetterDiscord Settings",id:"core"},{text:"Plugins",id:"plugins"},{text:"Themes",id:"themes"},{text:"Custom CSS",id:"customcss"}]}get LCitems(){return[{text:"Lightcord Settings",id:"lightcord"},{text:"RichPresence",id:"status"},{text:"Account Info",id:"accountinfo"}]}get LCDevItems(){let e=[];return window.Lightcord.Settings.devMode?(e.push({section:"DIVIDER"},{section:"HEADER",label:"Lightcord Api"},{text:"Components Preview",id:"lcapipreview"}),e):e}render(e){return[{section:"HEADER",label:"Lightcord"},...this.LCitems.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),...this.LCDevItems.map(t=>t.section?t:{section:t.id,label:t.text,element:this.getComponent(t.id,e)}),{section:"DIVIDER"},{section:"CUSTOM",element:this.getComponent("BDChangelogTitle")},...this.items.map(t=>({section:t.id,label:t.text,element:this.getComponent(t.id,e)})),{section:"DIVIDER"}]}}var Be=new class{injectColoredText(){this.cancelColoredText||xe.MessageComponent&&(this.cancelColoredText=ke.monkeyPatch(xe.MessageComponent,"default",{before:e=>{const t=e.methodArguments[0];if(!t||!t.childrenMessageContent)return;const n=t.childrenMessageContent;if(!n.type||!n.type.type||"MessageContent"!=n.type.type.displayName)return;const s=n.type.type;s.__originalMethod||(n.type.type=function(e){const t=s(e),n=u["bda-gs-7"]&&e.message.colorString||"";return t.props.style={color:n},t},n.type.type.__originalMethod=s,Object.assign(n.type.type,s))}}))}removeColoredText(){let e=BDModules.get(e=>e.markup)[0].markup;document.querySelectorAll("."+e.split(" ")[0]).forEach(e=>{e.style.setProperty("color","")})}},Ne=new class{inject24Hour(){if(this.cancel24Hour)return;const e=new RegExp("([0-9]{1,2}):([0-9]{1,2})\\s(AM|PM)"),t=t=>{if(!u["bda-gs-6"])return;const n=t.returnValue.match(e);return n&&4===n.length?"AM"===n[3]?t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"00":n[1].padStart(2,"0")}:${n[2]}`):t.returnValue=t.returnValue.replace(n[0],`${"12"===n[1]?"12":parseInt(n[1])+12}:${n[2]}`):void 0},n=ke.monkeyPatch(xe.TimeFormatter,"calendarFormat",{after:t}),s=ke.monkeyPatch(xe.TimeFormatter,"dateFormat",{after:t});this.cancel24Hour=()=>{n(),s()}}remove24Hour(){this.cancel24Hour&&this.cancel24Hour()}};class Le extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",style:{width:"18px",height:"18px"}},xe.react.createElement("g",{className:"background",fill:"none",fillRule:"evenodd"},xe.react.createElement("path",{d:"M0 0h12v12H0"}),xe.react.createElement("path",{className:"fill",fill:"#dcddde",d:"M9.5 3.205L8.795 2.5 6 5.295 3.205 2.5l-.705.705L5.295 6 2.5 8.795l.705.705L6 6.705 8.795 9.5l.705-.705L6.705 6"})))}}class Ae extends xe.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this)}render(){let e=BDModules.get(e=>e.toolsContainer)[0],t=BDModules.get(e=>e.container&&e.closeButton&&e.closeButtonBold)[0];return xe.react.createElement("div",{className:"tools-container "+e.toolsContainer},xe.react.createElement("div",{className:"tools "+e.tools},xe.react.createElement("div",{className:t.container},xe.react.createElement("div",{className:"btn-close "+t.closeButton,onClick:this.onClick},xe.react.createElement(Le,null)),xe.react.createElement("div",{className:"esc-text "+t.keybind},"ESC"))))}onClick(){this.props.onClick&&this.props.onClick();const e=document.querySelector("."+BDModules.get(e=>e.closeButton&&e.keybindBold)[0].closeButton.split(" ")[0]);e&&e.click()}}class Pe extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.text)}}class Te extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("div",{className:"ui-tab-bar-separator margin-top-8 margin-bottom-8"})}}class Re extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("div",{className:"ui-tab-bar-header"},this.props.text,this.props.button)}}class Oe extends xe.reactComponent{constructor(e){super(e),this.setInitialState(),this.onClick=this.onClick.bind(this)}setInitialState(){this.state={selected:this.props.selected||!1}}render(){return xe.react.createElement("div",{className:"ui-tab-bar-item"+(this.props.selected?" selected":""),onClick:this.onClick},this.props.text)}onClick(){this.props.onClick&&this.props.onClick(this.props.id)}}class je extends xe.reactComponent{constructor(e){super(e),this.props.server.iconUrl||(this.props.server.iconUrl=this.props.fallback),this.state={imageError:!1,joined:this.props.guildList.includes(this.props.server.identifier)}}render(){const{server:e}=this.props;let t=BDModules.get(e=>e.card&&e.cardPrimary)[0],n=BDModules.get(e=>e.flexChild&&e._horizontalReverse)[0],s=BDModules.get(e=>e.noWrap&&!e.streamerModeEnabled)[0];return xe.react.createElement("div",{className:`${t.card} ${t.cardPrimary} ${BDModules.get(e=>e.marginBottom8)[0].marginBottom8} bd-server-card${e.pinned?" bd-server-card-pinned":""}`},xe.react.createElement("img",{ref:"img",className:"bd-server-image",src:e.iconUrl,onError:this.handleError.bind(this),draggable:!1}),xe.react.createElement("div",{className:n.flexChild+" bd-server-content"},xe.react.createElement("div",{className:n.horizontal+" "+s.noWrap+" bd-server-header"},xe.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-name"},e.name),xe.react.createElement("h5",{className:"h5-18_1nd defaultColor-1_ajX0 margin-reset bd-server-member-count"},e.members," Members")),xe.react.createElement("div",{className:n.horizontal+" "+s.noWrap},xe.react.createElement("div",{className:"scrollerWrap-2lJEkd scrollerThemed-2oenus themeGhostHairline-DBD-2d scrollerFade-1Ijw5y bd-server-description-container"},xe.react.createElement("div",{className:"scroller-2FKFPG scroller bd-server-description"},e.description))),xe.react.createElement("div",{className:"flex-1xMQg5 flex-1O1GKY horizontal-1ae9ci horizontal-2EEEnY directionRow-3v3tfG noWrap-3jynv6 bd-server-footer"},xe.react.createElement("div",{className:"flexChild-faoVW3 bd-server-tags",style:{flex:"1 1 auto"}},e.categories.join(", ")),this.state.joined&&xe.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN colorGreen-29iAKY",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#3ac15c"}},xe.react.createElement("div",{className:"ui-button-contents"},"Joined")),e.error&&xe.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN disabled-9aF2ug",style:{minHeight:"12px",marginTop:"4px",backgroundColor:"#c13a3a"}},xe.react.createElement("div",{className:"ui-button-contents"},"Error")),!e.error&&!this.state.joined&&xe.react.createElement("button",{type:"button",className:"button-38aScr lookFilled-1Gx00P colorBrand-3pXr91 sizeMin-1mJd1x grow-q77ONN",style:{minHeight:"12px",marginTop:"4px"},onClick:()=>{this.join()}},xe.react.createElement("div",{className:"ui-button-contents"},"Join")))))}handleError(){this.props.server.iconUrl=this.props.fallback,this.setState({imageError:!0})}join(){this.props.join(this)}}class _e extends xe.reactComponent{constructor(e){super(e)}render(){let e=BDModules.get(e=>e.scrollerHorizontal)[0],t=BDModules.get(e=>e.sidebarRegionScroller)[0],n=`${e.scrollerWrap} ${e.scrollerThemed} ${e.themeGhostHairline}${this.props.fade?" "+e.scrollerFade:""}`,s=e.scroller+" scroller";this.props.sidebar&&(s+=` ${t.sidebarRegionScroller} sidebar-region-scroller`),this.props.contentColumn&&(s+=" "+t.contentRegionScroller+" content-region-scroller",n=`${e.scrollerWrap} ${t.contentRegionScrollerWrap} content-region-scroller-wrap ${e.scrollerThemed} ${e.themeGhost} ${e.scrollerTrack}`);const{children:r}=this.props;return xe.react.createElement("div",{key:"scrollerwrap",className:n},xe.react.createElement("div",{key:"scroller",ref:"scroller",className:s},r))}}const $e=_e.prototype.render;Object.defineProperty(_e.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>$e});class Ie extends xe.reactComponent{constructor(e){super(e)}render(){const{sidebar:e,content:t,tools:n}=this.props.children;return xe.react.createElement("div",{className:"standardSidebarView-3F1I7i ui-standard-sidebar-view"},xe.react.createElement("div",{className:"sidebarRegion-VFTUkN sidebar-region"},xe.react.createElement(_e,{key:"sidebarScroller",ref:"sidebarScroller",sidebar:!0,fade:e.fade||!0,dark:e.dark||!0},e.component)),xe.react.createElement("div",{className:"contentRegion-3nDuYy content-region"},xe.react.createElement("div",{className:"contentTransitionWrap-3hqOEW content-transition-wrap"},xe.react.createElement("div",{className:"scrollerWrap-2lJEkd firefoxFixScrollFlex-cnI2ix contentRegionScrollerWrap-3YZXdm content-region-scroller-wrap scrollerThemed-2oenus themeGhost-28MSn0 scrollerTrack-1ZIpsv"},xe.react.createElement("div",{className:"scroller-2FKFPG firefoxFixScrollFlex-cnI2ix contentRegionScroller-26nc1e content-region-scroller scroller",ref:"contentScroller"},xe.react.createElement("div",{className:"contentColumn-2hrIYH contentColumnDefault-1VQkGM content-column default"},t.component),n.component)))))}}class We extends xe.reactComponent{constructor(e){super(e),this.setInitialState(),this.close=this.close.bind(this),this.changeCategory=this.changeCategory.bind(this),this.search=this.search.bind(this),this.searchKeyDown=this.searchKeyDown.bind(this),this.checkConnection=this.checkConnection.bind(this),this.join=this.join.bind(this),this.connect=this.connect.bind(this),this.GuildStore=xe.WebpackModules.findByUniqueProperties(["getGuilds"]),this.AvatarDefaults=xe.WebpackModules.findByUniqueProperties(["getUserAvatarURL","DEFAULT_AVATARS"]),this.InviteActions=xe.WebpackModules.findByUniqueProperties(["acceptInvite"]),this.SortedGuildStore=xe.WebpackModules.findByUniqueProperties(["getSortedGuilds"])}componentDidMount(){this.checkConnection()}setInitialState(){this.state={selectedCategory:-1,title:"Loading...",loading:!0,servers:[],next:null,connection:{state:0,user:null}}}close(){xe.reactDom.unmountComponentAtNode(document.getElementById(this.props.rootId))}search(e,t){const n=this;fetch(`${n.endPoint}${e}${e?"&schema=new":"?schema=new"}`,{method:"get"}).then(async e=>{if(200!==e.status)throw await e.text();let s=await e.json(),r=s.results.reduce((e,t)=>(t.joined=!1,e.push(t),e),[]);t||(r=n.state.servers.concat(r));let o=s.size+s.from;s.next="?from="+o,n.state.term&&(s.next+="&term="+n.state.term),n.state.selectedCategory&&(s.next+="&category="+n.categoryButtons[n.state.selectedCategory]),o>=s.total&&(o=s.total,s.next=null);let i=`Showing 1-${o} of ${s.total} results in ${n.categoryButtons[n.state.selectedCategory]}`;n.state.term&&(i+=" for "+n.state.term),n.setState({loading:!1,title:i,servers:r,next:s.next}),t&&(n.refs.sbv.refs.contentScroller.scrollTop=0)}).catch(e=>(console.error(e),n.setState({loading:!1,title:"Failed to load servers. Check console for details"})))}async join(e){if(e.props.pinned)return this.InviteActions.acceptInvite(e.props.invite_code);await fetch(`${this.joinEndPoint}/${e.props.server.identifier}`,{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),e.setState({joined:!0})}connect(){const e=this,t=e.windowOptions;t.x=Math.round(window.screenX+window.innerWidth/2-t.width/2),t.y=Math.round(window.screenY+window.innerHeight/2-t.height/2),e.joinWindow=new(window.require("electron").remote.BrowserWindow)(t);e.joinWindow.webContents.on("did-navigate",(t,n)=>{"https://auth.discordservers.com/info"==n&&(e.joinWindow.close(),e.checkConnection())}),e.joinWindow.loadURL("https://auth.discordservers.com/connect?scopes=guilds.join&previousUrl=https://auth.discordservers.com/info")}get windowOptions(){return{width:500,height:550,backgroundColor:"#282b30",show:!0,resizable:!1,maximizable:!1,minimizable:!1,alwaysOnTop:!0,frame:!1,center:!1,webPreferences:{nodeIntegration:!1}}}get bdServer(){const e=this.SortedGuildStore.getFlattenedGuildIds(),t=this.AvatarDefaults.DEFAULT_AVATARS;return[xe.react.createElement(je,{server:{name:"Lightcord",online:"30+",members:"50+",categories:["community","programming","support"],description:"Official Lightcord server for support etc",identifier:"86004744966914048",iconUrl:"https://avatars3.githubusercontent.com/u/65690058?s=200&v=4",nativejoin:!0,invite_code:"7eFff2A",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]}),xe.react.createElement(je,{server:{name:"BetterDiscord",online:"7500+",members:"20000+",categories:["community","programming","support"],description:"Official BetterDiscord server for support etc",identifier:"86004744966914048",iconUrl:"https://cdn.discordapp.com/icons/86004744966914048/292e7f6bfff2b71dfd13e508a859aedd.webp",nativejoin:!0,invite_code:"0Tmfo5ZbORCRqbAd",pinned:!0},pinned:!0,join:this.join,guildList:e,fallback:t[Math.floor(5*Math.random())]})]}get endPoint(){return"https://search.discordservers.com"}get joinEndPoint(){return"https://j.discordservers.com"}get connectEndPoint(){return"https://join.discordservers.com/connect"}async checkConnection(){const e=this;try{const t=await fetch("https://auth.discordservers.com/info",{method:"GET",credentials:"include",mode:"cors",headers:{Accept:"application/json","Content-Type":"application/json"}}),n=await t.json();e.setState({selectedCategory:0,connection:{state:2,user:n}}),e.search("",!0)}catch(t){console.error(t),e.setState({title:"Not connected to discordservers.com!",loading:!0,selectedCategory:-1,connection:{state:1,user:null}})}}render(){return xe.react.createElement(Ie,{ref:"sbv"},this.component)}get component(){return{sidebar:{component:this.sidebar},content:{component:this.content},tools:{component:xe.react.createElement(Ae,{key:"pt",ref:"tools",onClick:this.close})}}}get sidebar(){return xe.react.createElement("div",{className:"sidebar",key:"ps"},xe.react.createElement("div",{className:"ui-tab-bar SIDE"},xe.react.createElement("div",{className:"ui-tab-bar-header",style:{fontSize:"16px"}},"Public Servers"),xe.react.createElement(Te,null),this.searchInput,xe.react.createElement(Te,null),xe.react.createElement(Re,{text:"Categories"}),this.categoryButtons.map((e,t)=>xe.react.createElement(Oe,{id:t,onClick:this.changeCategory,key:t,text:e,selected:this.state.selectedCategory===t})),xe.react.createElement(Te,null),this.footer,this.connection))}get searchInput(){return xe.react.createElement("div",{className:"ui-form-item"},xe.react.createElement("div",{className:"ui-text-input flex-vertical",style:{width:"172px",marginLeft:"10px"}},xe.react.createElement("input",{ref:"searchinput",onKeyDown:this.searchKeyDown,onChange:()=>{},type:"text",className:"input default",placeholder:"Search...",maxLength:"50"})))}searchKeyDown(e){const t=this;if(t.state.loading||13!==e.which)return;t.setState({loading:!0,title:"Loading...",term:e.target.value});let n="?term="+e.target.value;0!==t.state.selectedCategory&&(n+="&category="+t.categoryButtons[t.state.selectedCategory]),t.search(n,!0)}get categoryButtons(){return["All","FPS Games","MMO Games","Strategy Games","MOBA Games","RPG Games","Tabletop Games","Sandbox Games","Simulation Games","Music","Community","Language","Programming","Other"]}changeCategory(e){const t=this;t.state.loading||(t.refs.searchinput.value="",t.setState({loading:!0,selectedCategory:e,title:"Loading...",term:null}),0!==e?t.search("?category="+t.categoryButtons[e],!0):t.search("",!0))}get content(){const e=this,t=this.SortedGuildStore.getFlattenedGuildIds(),n=this.AvatarDefaults.DEFAULT_AVATARS;if(1===e.state.connection.state)return e.notConnected;let s=BDModules.get(e=>e.contentColumnDefault)[0];return[xe.react.createElement("div",{ref:"content",key:"pc",className:s.contentColumn+" "+s.contentColumn+" content-column default"},xe.react.createElement(Pe,{text:e.state.title}),e.bdServer,e.state.servers.map(s=>xe.react.createElement(je,{key:s.identifier,server:s,join:e.join,guildList:t,fallback:n[Math.floor(5*Math.random())]})),e.state.next&&xe.react.createElement("button",{type:"button",onClick:()=>{e.state.loading||(e.setState({loading:!0}),e.search(e.state.next,!1))},className:"ui-button filled brand small grow",style:{width:"100%",marginTop:"10px",marginBottom:"10px"}},xe.react.createElement("div",{className:"ui-button-contents"},e.state.loading?"Loading":"Load More")),e.state.servers.length>0&&xe.react.createElement(Pe,{text:e.state.title}))]}get notConnected(){let e=BDModules.get(e=>e.contentColumnDefault)[0];return[xe.react.createElement("div",{key:"ncc",ref:"content",className:e.contentColumn+" "+e.contentColumn+" content-column default"},xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},"Not connected to discordservers.com!",xe.react.createElement("button",{onClick:this.connect,type:"button",className:"ui-button filled brand small grow",style:{display:"inline-block",minHeight:"18px",marginLeft:"10px",lineHeight:"14px"}},xe.react.createElement("div",{className:"ui-button-contents"},"Connect"))),this.bdServer)]}get footer(){return xe.react.createElement("div",{className:"ui-tab-bar-header"},xe.react.createElement("a",{href:"https://discordservers.com",target:"_blank"},"Discordservers.com"))}get connection(){const{connection:e}=this.state;return 2!==e.state?xe.react.createElement("span",null):xe.react.createElement("span",null,xe.react.createElement(Te,null),xe.react.createElement("span",{style:{color:"#b9bbbe",fontSize:"10px",marginLeft:"10px"}},"Connected as: ",`${e.user.username}#${e.user.discriminator}`),xe.react.createElement("div",{style:{padding:"5px 10px 0 10px"}},xe.react.createElement("button",{style:{width:"100%",minHeight:"20px"},type:"button",className:"ui-button filled brand small grow"},xe.react.createElement("div",{className:"ui-button-contents",onClick:this.connect},"Reconnect"))))}}class Fe extends xe.reactComponent{constructor(e){super(e),this.keyupListener=this.keyupListener.bind(this)}keyupListener(e){27===e.which&&xe.reactDom.unmountComponentAtNode(this.refs.root.parentNode)}componentDidMount(){window.addEventListener("keyup",this.keyupListener);const e=Ce.query("#"+this.props.id);Ce.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*t}) translateZ(0px)`,e.style.opacity=t,1==t&&setImmediate(()=>{e.style.transform="",e.style.opacity=""})}})}componentWillUnmount(){window.removeEventListener("keyup",this.keyupListener);const e=Ce.query("#"+this.props.id);Ce.animate({duration:200,update:function(t){e.style.transform=`scale(${1.1-.1*(1-t)}) translateZ(0px)`,e.style.opacity=1-t,1==t&&setImmediate(()=>{e.remove()})}});const t=Ce.query(".publicServersOpen");t.classList.remove("publicServersOpen"),Ce.animate({duration:200,update:function(e){t.style.transform=`scale(${.07*e+.93}) translateZ(0px)`,t.style.opacity=e,1==e&&setImmediate(()=>{t.style.transform="",t.style.opacity=""})}})}componentWillMount(){const e=Ce.query('[class*="layer-"]');e.classList.add("publicServersOpen"),Ce.animate({duration:200,update:function(t){e.style.transform=`scale(${.07*(1-t)+.93}) translateZ(0px)`,e.style.opacity=1-t}})}render(){return xe.react.createElement("div",{className:"layer bd-layer "+BDModules.get(e=>e.layer&&e.animating)[0].layer,id:this.props.id,ref:"root",style:{opacity:0,transform:"scale(1.1) translateZ(0px)"}},this.props.children)}}var ze=new class{constructor(){this._appendButton=this._appendButton.bind(this),window.Lightcord.BetterDiscord.V2_PublicServers=this}get component(){return xe.react.createElement(Fe,{rootId:"pubslayerroot",id:"pubslayer"},xe.react.createElement(We,{rootId:"pubslayerroot"}))}get root(){const e=document.getElementById("pubslayerroot");return e||(this.injectRoot()?this.root:null)}injectRoot(){let[e]=[ke.removeDa(BDModules.get(e=>e.layers&&e.layer)[0].layers)];const t=Ce.query(".layers, ."+e);return!!t&&(t.append(Ce.createElement("
")),!0)}render(){const e=this.root;e?xe.reactDom.render(this.component,e):console.log("FAILED TO LOCATE ROOT: .layers")}get button(){const e=Ce.createElement(`
`);u["bda-gs-1"]||(e.style.display="none");const t=Ce.createElement(`
public
`);return t.addEventListener("click",()=>{this.render()}),e.append(t),e}_appendButton(){let[e]=[ke.removeDa(BDModules.get(e=>e.downloadProgress&&e.tutorialContainer)[0].tutorialContainer)];if(Ce.query("#bd-pub-li"))return;const t=Ce.query(`div.${e} > div`);Ce.after(t,this.button)}addButton(){if(this.guildPatch)return;const e=x.find(e=>e.default&&"NavigableGuilds"==e.default.displayName),t=x.findByDisplayName("Guilds");e||t||ke.warn("PublicServer","Can't find GuildList component"),this.guildPatch=ke.monkeyPatch(e||t.prototype,e?"default":"render",{after:this._appendButton}),this._appendButton()}removeButton(){this.guildPatch(),delete this.guildPatch;const e=Ce.query("#bd-pub-li");e&&e.remove()}};var He=new class{start(){Ce.addStyle("VoiceMode","\n .container-2Rl01u {\n display: none!important;\n }\n\n .chat-3bRxxu {\n display: none!important;\n }\n\n .sidebar-2K8pFh {\n flex-grow: 1!important;\n }\n")}stop(){Ce.removeStyle("VoiceMode")}};const Ue=new RegExp("^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$");var qe=new class{constructor(){window.Lightcord.BetterDiscord.ClassNormalizer=this}stop(){this.hasPatched&&(this.unpatchClassModules(x.findAll(this.moduleFilter.bind(this))),this.revertElement(document.querySelector("#app-mount")),this.hasPatched=!1)}start(){this.hasPatched||(this.patchClassModules(x.findAll(this.moduleFilter.bind(this))),this.normalizeElement(document.querySelector("#app-mount")),this.hasPatched=!0,this.patchDOMMethods())}patchClassModules(e){for(const t of e)this.patchClassModule("da",t)}unpatchClassModules(e){for(const t of e)this.unpatchClassModule("da",t)}shouldIgnore(e){return!isNaN(e)||(!!(e.endsWith("px")||e.endsWith("ch")||e.endsWith("em")||e.endsWith("ms"))||(!!e.startsWith("layerContainer-")||(!(!e.startsWith("#")||7!=e.length&&4!=e.length)||!(!e.includes("calc(")&&!e.includes("rgba")))))}moduleFilter(e){if("object"!=typeof e||Array.isArray(e))return!1;if(e.__esModule)return!1;if(!Object.keys(e).length)return!1;for(const t in e){const n=e[t];if("string"!=typeof n)return!1;if(!this.shouldIgnore(n)){if(1===n.split("-").length)return!1;if(!Ue.test(n.split(" ")[0]))return!1}}return!0}patchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;const r=s.split(" ");for(const s of r){const r=s.match(Ue);if(!r||!r.length||r.length<2)continue;const o=r[1].split("-").map((e,t)=>t?e[0].toUpperCase()+e.slice(1):e).join("");t[n]+=` ${e}-${o}`}}}unpatchClassModule(e,t){for(const n in t){const s=t[n];if(this.shouldIgnore(s))continue;let r="";const o=s.split(" ");for(const t of o)t.startsWith(e+"-")||(r+=" "+t);t[n]=r.trim()}}normalizeElement(e){if(!(e instanceof Element))return;const t=e.classList;for(let n=0,s=t.length;nt?e[0].toUpperCase()+e.slice(1):e).join("");e.classList.add("da-"+s)}for(const t of e.children)this.normalizeElement(t)}revertElement(e){if(!(e instanceof Element))return;e.children&&e.children.length&&this.revertElement(e.children[0]),e.nextElementSibling&&this.revertElement(e.nextElementSibling);const t=e.classList,n=[];for(let e=0;ee.layer&&"string"==typeof e.layer&&e.disabledPointerEvents)[0],BDModules.get(e=>e.menu)[0]];setTimeout((function(){if(!s||!n.layer)return console.log(s,n.layer);let r=Ce.query("."+ke.removeDa(s.menu));if(!r){const t=Ce.query("#app-mount > ."+ke.removeDa(n.layerContainer)),o=Ce.createElement(`
`);r=Ce.createElement(`
`),o.append(r),t.append(o),o.style.top=e.clientY+"px",o.style.left=e.clientX+"px",o.setAttribute("role","menu"),o.setAttribute("tabindex","-1"),o.id="bd-copy-selector-context",o.setAttribute("aria-label","Copy Selector Actions");const i=BDModules.get(e=>e.scrollerWrap)[0],a=Ce.createElement(`
`),l=Ce.createElement(`
`);a.append(l),r.append(a);const c=function(e){e.keyCode&&27!==e.keyCode||(o.remove(),document.removeEventListener("click",c),document.removeEventListener("contextmenu",c),document.removeEventListener("keyup",c))};document.addEventListener("click",c),document.addEventListener("contextmenu",c),document.addEventListener("keyup",c)}const o=r.parentElement,i=r.childNodes[0].childNodes[0],a=Ce.createElement('
'),l=Ce.createElement(``);if(l.append(Ce.createElement(`
Copy Selector
`)),l.addEventListener("click",()=>{xe.NativeModule.copy(t),o.style.display="none"}),l.addEventListener("mouseover",e=>{let t=Ce.queryAll("div[role=menuitem]."+ke.removeDa(s.focused));t&&t.forEach(e=>e.classList.remove(s.focused)),l.classList.add(s.focused)}),l.addEventListener("mouseout",e=>{l.classList.remove(s.focused)}),a.append(l),i.childNodes.length){const e=Ce.createElement(``);i.append(e)}i.append(a),o.clientHeight"."+e).join(""));else{for(var n=1,s=e;s.previousElementSibling;s=s.previousElementSibling,n++);t.unshift(e.tagName.toLowerCase()+("string"==typeof e.className&&e.className||"").split(" ").filter(e=>!!e).map(e=>"."+e).join("")+":nth-child("+n+")")}e=e.parentNode}return t.join(" > ")}(e)}};const Ve=xe.React;class Je extends Ve.Component{constructor(e){super(e),this.state={checked:this.props.checked},this.onChange=this.onChange.bind(this),this.switch=Ve.createElement(Lightcord.Api.Components.inputs.Switch,{onChange:this.onChange,value:this.state.checked})}onChange(e){this.props.disabled||(this.props.onChange(e),this.setState({checked:e}))}render(){return this.switch}}let Ze=[];function Ye(e){let t=Ze.find(t=>t.startsWith(e+"-"));return t||(t=BDModules.get(t=>t[e])[0][e],Ze.push(t),t)}class Ke extends xe.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this)}onChange(){this.props.checked=!this.props.checked,this.props.onChange(this.props.id,this.props.checked)}render(){let{text:e,info:t}=this.props.data;return Ze.find(e=>e.startsWith("beta-"))||Ze.push(BDModules.get(e=>e.beta&&!e.container&&!e.userSettingsVoice)[0].beta),this.props.data.experimental&&(t=[t,React.createElement("sup",{className:Ye("beta")},"(EXPERIMENTAL)")]),xe.react.createElement("div",{className:"ui-flex flex-vertical flex-justify-start flex-align-stretch flex-nowrap ui-switch-item"},xe.react.createElement("div",{className:"ui-flex flex-horizontal flex-justify-start flex-align-stretch flex-nowrap"},xe.react.createElement("h3",{key:"title",className:"ui-form-title h3 margin-reset margin-reset ui-flex-child"},e),xe.react.createElement(Je,{key:"switch",onChange:this.onChange,checked:this.props.checked})),xe.react.createElement("div",{className:"ui-form-text style-description margin-top-4",style:{flex:"1 1 auto"}},t))}}class Xe extends xe.reactComponent{constructor(e){super(e)}render(){const{title:e,settings:t,button:n}=this.props,s=n?xe.react.createElement("button",{key:"title-button",className:"bd-pfbtn",onClick:n.onClick},n.title):null;return[xe.react.createElement(Pe,{text:e}),s,t.map(e=>xe.react.createElement(Ke,{id:e.id,key:e.id,data:e,checked:u[e.id],onChange:(e,t)=>{this.props.onChange(e,t)}}))]}}let Qe=BDModules.get(e=>e.marginTop60)[0];class et extends React.Component{render(){return Qe||(Qe=BDModules.get(e=>e.marginTop60)[0]),React.createElement("div",{className:Qe.marginTop60})}}class tt extends xe.reactComponent{constructor(e){super(e)}render(){return this.props.sections.map((e,t)=>[0!==t?xe.react.createElement(et,{}):null,xe.react.createElement(Xe,Object.assign({},e,{onChange:this.props.onChange}))])}}class nt extends xe.reactComponent{constructor(e){super(e),this.onClick=this.onClick.bind(this),this.setInitialState()}setInitialState(){this.state={checked:this.props.checked||!1}}render(){return xe.react.createElement("li",null,xe.react.createElement("div",{className:"checkbox "+BDModules.get(e=>e.checkboxElement)[0].checkbox,onClick:this.onClick},xe.react.createElement("div",{className:"checkbox-inner "+BDModules.get(e=>e.checkboxInner)[0].checkboxInner},xe.react.createElement("input",{className:BDModules.get(e=>e.checkboxElement)[0].checkboxElement,checked:this.state.checked,onChange:()=>{},type:"checkbox"}),xe.react.createElement("span",null)),xe.react.createElement("span",null,this.props.text)))}onClick(){this.props.onChange(this.props.id,!this.state.checked),this.setState({checked:!this.state.checked})}}class st extends xe.reactComponent{constructor(e){super(e);this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.onChange=this.onChange.bind(this)}componentDidMount(){Ce.addClass(Ce.query("#app-mount"),"bd-detached-editor"),xe.editorDetached=!0,this.editor=ace.edit("bd-customcss-editor-detached"),this.editor.setTheme("ace/theme/discord"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{u["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){Ce.removeClass(Ce.query("#app-mount"),"bd-detached-editor"),xe.editorDetached=!1,this.editor.destroy()}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=L.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=Buffer.from(e,"base64").toString("utf8")),t}get root(){const e=Ce.query("#bd-customcss-detach-container");return e||(this.injectRoot()?this.detachedRoot:null)}injectRoot(){const e=Ce.query(".app, ."+ke.removeDa(BDModules.get(e=>e.app&&e.layers)[0].app));return!!e&&(Ce.insertAfter(Ce.createElement('
'),e),!0)}render(){const e=this;return xe.react.createElement("div",{className:"bd-detached-css-editor",id:"bd-customcss-detach-editor"},xe.react.createElement("div",{id:"bd-customcss-innerpane"},xe.react.createElement("div",{className:"editor-wrapper"},xe.react.createElement("div",{id:"bd-customcss-editor-detached",className:"editor",ref:"editor"},e.css)),xe.react.createElement("div",{id:"bd-customcss-attach-controls"},xe.react.createElement("ul",{className:"checkbox-group"},xe.react.createElement(nt,{id:"live-update",text:"Live Update",onChange:e.onChange,checked:u["bda-css-0"]})),xe.react.createElement("div",{id:"bd-customcss-detach-controls-button"},xe.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),xe.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),xe.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("attach")}},"Attach"),xe.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on attach")))))}onChange(e,t){switch(e){case"live-update":u["bda-css-0"]=t,Xn.saveSettings()}}onClick(e){const t=this;switch(e){case"attach":Ce.query("#editor-detached")&&t.props.attach(),xe.reactDom.unmountComponentAtNode(t.root),t.root.remove();break;case"update":t.updateCss();break;case"save":t.saveCss()}}updateCss(){Ce.removeStyle("customcss"),Ce.addStyle("customcss",this.editor.session.getValue())}saveCss(){L.setBDData("bdcustomcss",Buffer.from(this.editor.session.getValue(),"utf-8").toString("base64"))}}class rt extends xe.reactComponent{constructor(e){super(e);this.props.lines=0,this.setInitialState(),this.attach=this.attach.bind(this),this.detachedEditor=xe.react.createElement(st,{attach:this.attach}),this.onClick=this.onClick.bind(this),this.updateCss=this.updateCss.bind(this),this.saveCss=this.saveCss.bind(this),this.detach=this.detach.bind(this)}setInitialState(){this.state={detached:this.props.detached||xe.editorDetached}}componentDidMount(){this.editor=ace.edit("bd-customcss-editor"),this.editor.setTheme("ace/theme/discord"),this.editor.session.setMode("ace/mode/css"),this.editor.setShowPrintMargin(!1),this.editor.setFontSize(14),this.editor.on("change",()=>{u["bda-css-0"]&&(this.saveCss(),this.updateCss())})}componentWillUnmount(){this.editor.destroy()}componentDidUpdate(e,t){const n=this;t.detached&&!n.state.detached&&xe.reactDom.unmountComponentAtNode(n.detachedRoot)}codeMirror(){}get options(){return{lineNumbers:!0,mode:"css",indentUnit:4,theme:"material",scrollbarStyle:"simple"}}get css(){const e=L.getBDData("bdcustomcss");let t="";return e&&""!==e&&(t=Buffer.from(e,"base64").toString("utf8")),t}updateLineCount(){const e=this.refs.editor.value.split("\n").length;e!=this.props.lines&&(this.refs.lines.textContent=Array.from(new Array(e),(e,t)=>t+1).join(".\n")+".",this.props.lines=e)}render(){const e=this,{detached:t}=e.state;return[t&&xe.react.createElement("div",{id:"editor-detached"},xe.react.createElement(Pe,{text:"Custom CSS Editor"}),xe.react.createElement("h3",null,"Editor Detached"),xe.react.createElement("button",{className:"btn btn-primary",onClick:()=>{e.attach()}},"Attach")),!t&&xe.react.createElement("div",null,xe.react.createElement(Pe,{text:"Custom CSS Editor"}),xe.react.createElement("div",{className:"editor-wrapper"},xe.react.createElement("div",{id:"bd-customcss-editor",className:"editor",ref:"editor"},e.css)),xe.react.createElement("div",{id:"bd-customcss-attach-controls"},xe.react.createElement("ul",{className:"checkbox-group"},xe.react.createElement(nt,{id:"live-update",text:"Live Update",onChange:this.onChange,checked:u["bda-css-0"]})),xe.react.createElement("div",{id:"bd-customcss-detach-controls-button"},xe.react.createElement("button",{style:{borderRadius:"3px 0 0 3px",borderRight:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("update")}},"Update"),xe.react.createElement("button",{style:{borderRadius:"0",borderLeft:"1px solid #2d2d2d",borderRight:"1px solid #2d2d2d"},className:"btn btn-primary",onClick:()=>{e.onClick("save")}},"Save"),xe.react.createElement("button",{style:{borderRadius:"0 3px 3px 0",borderLeft:"1px solid #3f4146"},className:"btn btn-primary",onClick:()=>{e.onClick("detach")}},"Detach"),xe.react.createElement("span",{style:{fontSize:"10px",marginLeft:"5px"}},"Unsaved changes are lost on detach"),xe.react.createElement("div",{className:"help-text"},"Press ",xe.react.createElement("code",{className:"inline"},"ctrl"),"+",xe.react.createElement("span",{className:"inline"},",")," with the editor focused to access the editor's settings."))))]}onClick(e){const t=this;switch(e){case"update":t.updateCss();break;case"save":t.saveCss();break;case"detach":t.detach()}}onChange(e,t){switch(e){case"live-update":u["bda-css-0"]=t,Xn.saveSettings()}}updateCss(){Ce.removeStyle("customcss"),Ce.addStyle("customcss",this.editor.session.getValue())}saveCss(){L.setBDData("bdcustomcss",Buffer.from(this.editor.session.getValue(),"utf-8").toString("base64"))}detach(){this.setState({detached:!0});const e=this.detachedRoot;e?xe.reactDom.render(this.detachedEditor,e):console.log("FAILED TO INJECT ROOT: .app")}get detachedRoot(){const e=Ce.query("#bd-customcss-detach-container");return e||(this.injectDetachedRoot()?this.detachedRoot:null)}injectDetachedRoot(){const e=Ce.query(".app, ."+ke.removeDa(BDModules.get(e=>e.app&&e.layers)[0].app));return!!e&&(Ce.insertAfter(Ce.createElement('
'),e),!0)}attach(){this.setState({detached:!1})}}class ot extends xe.reactComponent{constructor(e){super(e),this.state={hasError:!1}}componentDidCatch(){this.setState({hasError:!0})}render(){return this.state.hasError?xe.react.createElement("div",{className:"react-error"},"Component Error"):this.props.children}}const it=ot.prototype.render;Object.defineProperty(ot.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>it});class at extends xe.reactComponent{constructor(e){super(e)}static get displayName(){return"ContentColumn"}render(){let e=this.props.title?xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},this.props.title):null;return[e,this.props.children]}}class lt extends xe.reactComponent{constructor(e){super(e)}render(){return xe.react.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"#dcddde",className:"bd-reload "+this.props.className,onClick:this.props.onClick,style:{width:this.props.size||"24px",height:this.props.size||"24px"}},xe.react.createElement("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}),xe.react.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const ct=xe.React;class dt extends ct.Component{render(){const e=this.props.size||"24px";return ct.createElement("svg",{className:this.props.className||"",viewBox:"0 0 24 24",fill:"var(--text-normal)",style:{width:e,height:e},onClick:this.props.onClick},ct.createElement("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"}),ct.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}))}}const ut=xe.React;class ht extends ut.Component{render(){const e=this.props.size||"24px";return ut.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e},onClick:this.props.onClick},ut.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),ut.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12 1.41 1.41L13.41 14l2.12 2.12-1.41 1.41L12 15.41l-2.12 2.12-1.41-1.41L10.59 14l-2.13-2.12zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"}),ut.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}))}}const pt=xe.React,mt=xe.anchorClasses;class gt extends xe.reactComponent{constructor(e){super(e),this.onChange=this.onChange.bind(this),this.showSettings=this.showSettings.bind(this),this.setInitialState(),this.hasSettings=this.props.addon.plugin&&"function"==typeof this.props.addon.plugin.getSettingsPanel,this.settingsPanel="",this.edit=this.edit.bind(this),this.delete=this.delete.bind(this),this.reload=this.reload.bind(this)}setInitialState(){this.state={checked:this.props.enabled,settings:!1,reloads:0,trusted:!1}}showSettings(){this.hasSettings&&this.setState({settings:!0})}closeSettings(){this.panelRef.current.innerHTML="",this.setState({settingsOpen:!1})}componentDidUpdate(){this.state.settings&&("object"==typeof this.settingsPanel&&this.refs.settingspanel.appendChild(this.settingsPanel),u["fork-ps-3"]&&setImmediate(()=>{const e=this.refs.cardNode,t=e.closest('div[class*="contentRegionScroller-"]');if(!((e,t)=>{if(!e)return console.error(new Error("Container is undefined.")),!1;const n=e.scrollTop,s=n+e.clientHeight,r=t.offsetTop,o=r+t.clientHeight;return rs})(t,e))return;const n=Ce.offset(e),s=Ce.offset(t),r=t.scrollTop,o=n.top-s.top+t.scrollTop-30;Ce.animate({duration:300,update:function(e){t.scrollTop=o>r?r+e*(o-r):r-e*(r-o)}})}))}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get settingsComponent(){try{this.settingsPanel=this.props.addon.plugin.getSettingsPanel()}catch(e){ke.err("Plugins","Unable to get settings panel for "+this.name+".",e)}return xe.react.createElement("div",{className:"bd-card bd-addon-card settings-open ui-switch-item",ref:"cardNode"},xe.react.createElement("div",{style:{float:"right",cursor:"pointer"},onClick:()=>{this.refs.settingspanel.innerHTML="",this.setState({settings:!1})}},xe.react.createElement(Le,null)),"object"==typeof this.settingsPanel&&xe.react.createElement("div",{id:"plugin-settings-"+this.name,className:"plugin-settings",ref:"settingspanel"}),"object"!=typeof this.settingsPanel&&xe.react.createElement("div",{id:"plugin-settings-"+this.name,className:"plugin-settings",ref:"settingspanel",dangerouslySetInnerHTML:{__html:this.settingsPanel}}))}buildTitle(e,t,n){const s="{{name}} v{{version}} by {{author}}".split(/({{[A-Za-z]+}})/),r=s.findIndex(e=>"{{name}}"==e);r&&(s[r]=pt.createElement("span",{className:"name bda-name"},e));const o=s.findIndex(e=>"{{version}}"==e);r&&(s[o]=pt.createElement("span",{className:"version bda-version"},t));const i=s.findIndex(e=>"{{author}}"==e);if(r){const e={className:"author bda-author"};(n.link||n.id)&&(e.className+=` ${mt.anchor} ${mt.anchorUnderlineOnHover}`,e.target="_blank",n.link&&(e.href=n.link),n.id&&(e.onClick=()=>{xe.LayerStack.popLayer(),xe.openDM(n.id)})),s[i]=pt.createElement(n.link||n.id?"a":"span",e,n.name)}return s.flat()}makeLink(e,t){const n={className:"bda-link bda-link-website",target:"_blank"};return"string"==typeof t&&(n.href=t),"function"==typeof t&&(n.onClick=e=>{e.preventDefault(),e.stopPropagation(),t()}),xe.react.createElement("a",n,e)}makeButton(e,t,n){return pt.createElement(V,{color:"black",side:"top",text:e},pt.createElement("div",{className:"bd-addon-button",onClick:n},t))}componentWillUnmount(){this.unmounted=!0}get links(){const e=[],t=this.props.addon;return t.website&&e.push(this.makeLink("Website",t.website)),t.source&&e.push(this.makeLink("Source",t.source)),t.invite&&e.push(this.makeLink("Support Server",()=>{const e=/\.gg\/(.*)$/;let n=t.invite;e.test(n)&&(n=n.match(e)[1]),xe.LayerStack.popLayer(),xe.InviteActions.acceptInviteAndTransitionToInviteChannel(n)})),t.donate&&e.push(this.makeLink("Donate",t.donate)),t.patreon&&e.push(this.makeLink("Patreon",t.patreon)),e}get footer(){const e=this.links;return(e.length||this.hasSettings)&&xe.react.createElement("div",{className:"bd-card-footer bda-footer"},xe.react.createElement("span",{className:"bd-addon-links bda-links"},...e.map((t,n)=>n{this.unmounted||this.setState({isTrusted:!e.suspect||"suspect"})},()=>{}))),xe.react.createElement("div",{className:"bd-card bd-addon-card settings-closed ui-switch-item",style:n},xe.react.createElement("div",{className:"bd-addon-header bda-header"},xe.react.createElement("div",{className:"bd-card-title bda-header-title"},this.buildTitle(this.name,this.version,{name:this.author,id:e,link:t})),xe.react.createElement("div",{className:"bd-addon-controls bda-controls"},this.props.edit&&this.makeButton("Edit",pt.createElement(dt,{className:"bd-icon"}),this.edit),this.props.remove&&this.makeButton("Delete",pt.createElement(ht,{className:"bd-icon"}),this.delete),this.props.reload&&this.makeButton("Reload",pt.createElement(lt,{className:"bd-icon"}),this.reload),pt.createElement(Je,{onChange:this.onChange,checked:this.state.checked}))),xe.react.createElement("div",{className:"bd-scroller-wrap bda-description-wrap scroller-wrap fade"},xe.react.createElement("div",{className:"bd-scroller bd-addon-description bda-description scroller"},this.description)),this.footer)}}const ft=gt.prototype.render;Object.defineProperty(gt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>ft});const bt=xe.React;class yt extends bt.Component{render(){const e=this.props.size||"16px";return bt.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},bt.createElement("path",{d:"M8.12 9.29L12 13.17l3.88-3.88c.39-.39 1.02-.39 1.41 0 .39.39.39 1.02 0 1.41l-4.59 4.59c-.39.39-1.02.39-1.41 0L6.7 10.7c-.39-.39-.39-1.02 0-1.41.39-.38 1.03-.39 1.42 0z"}))}}const vt=xe.React;class wt extends vt.Component{constructor(e){super(e),this.state={open:!1,value:this.props.value||this.props.options[0].value},this.dropdown=vt.createRef(),this.onChange=this.onChange.bind(this),this.showMenu=this.showMenu.bind(this),this.hideMenu=this.hideMenu.bind(this)}showMenu(e){e.preventDefault(),this.setState({open:!0},()=>{document.addEventListener("click",this.hideMenu)})}hideMenu(){this.setState({open:!1},()=>{document.removeEventListener("click",this.hideMenu)})}onChange(e){this.setState({value:e}),this.props.onChange&&this.props.onChange(e)}get selected(){return this.props.options.find(e=>e.value==this.state.value)}get options(){const e=this.selected;return vt.createElement("div",{className:"bd-select-options"},this.props.options.map(t=>vt.createElement("div",{className:"bd-select-option"+(e.value==t.value?" selected":""),onClick:this.onChange.bind(this,t.value)},t.label)))}render(){const e="transparent"==this.props.style?" bd-select-transparent":"",t=this.state.open?" menu-open":"";return vt.createElement("div",{className:`bd-select${e}${t}`,onClick:this.showMenu,ref:this.dropdown},vt.createElement("div",{className:"bd-select-value"},this.selected.label),vt.createElement(yt,{className:"bd-select-arrow"}),this.state.open&&this.options)}}const Ct=xe.React;class Et extends Ct.Component{render(){const e=this.props.size||"16px";return Ct.createElement("svg",{className:this.props.className||"",fill:"var(--text-normal)",viewBox:"0 0 24 24",style:{width:e,height:e}},Ct.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"}),Ct.createElement("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"}))}}const St=xe.React;class xt extends St.Component{constructor(e){super(e),this.state={focused:!1}}render(){const e=["bd-search-wrapper"];return this.state.focused&&e.push("focused"),St.createElement("div",{className:e.join(" ")},St.createElement("input",{onChange:this.props.onChange,onKeyDown:this.props.onKeyDown,type:"text",className:"bd-search",placeholder:this.props.placeholder,maxLength:"50",onFocus:()=>{this.setState({focused:!0})},onBlur:()=>{this.setState({focused:!1})}}),St.createElement(Et,null))}}function kt(){return(kt=Object.assign||function(e){for(var t=1;t{Ns.showConfirmationModal("Are You Sure?",`Are you sure you want to delete ${e}?`,{danger:!0,confirmText:"Delete",onConfirm:()=>{t(!0)},onCancel:()=>{t(!1)}})})}get sortOptions(){return[{label:"Name",value:"name"},{label:"Author",value:"author"},{label:"Version",value:"version"},{label:"Recently Added",value:"added"},{label:"Last Modified",value:"modified"},{label:"File Size",value:"size"}]}get directions(){return[{label:"Ascending",value:!0},{label:"Descending",value:!1}]}reverse(e){this.setState({ascending:e})}sort(e){this.setState({sort:e})}search(e){this.setState({query:e.target.value.toLocaleLowerCase()})}getProps(e){return{key:this.getName(e),enabled:this.cookie[this.getName(e)],toggle:this.manager.toggle.bind(this.manager),edit:u["fork-ps-7"]?this.edit.bind(this):null,remove:this.delete.bind(this),addon:e,hash:e.hash}}getString(e){return e?"string"==typeof e?e:e.toString():"???"}get list(){return"plugins"===this.props.type?Object.values(y):Object.values(b)}getAddons(){const e=this.list.sort((e,t)=>{const n=this.state.sort.charAt(0).toUpperCase()+this.state.sort.slice(1),s=e.plugin&&e.plugin["get"+n]?this.getString(e.plugin["get"+n]()):this.getString(e[this.state.sort]),r=t.plugin&&t.plugin["get"+n]?this.getString(t.plugin["get"+n]()):this.getString(t[this.state.sort]);return"string"==typeof s?s.toLocaleLowerCase().localeCompare(r.toLocaleLowerCase()):s>r?1:r>s?-1:0});this.state.ascending||e.reverse();const t=[];for(let n=0;n{t=!1,e.hide()}},Mt.createElement(Lightcord.Api.Components.inputs.Button,{ref:"checkUpdateButton",color:"brand",look:"filled",size:"min",hoverColor:"default",onClick:()=>{try{ke.showToast("Plugin update check in progress.",{type:"info"}),window.PluginUpdates.checkAll().then(()=>{ke.showToast("Plugin update check complete.",{type:"success"})}).catch(e=>{console.error(e),ke.showToast("An error occured while checking update.",{type:"error"})})}catch(e){console.error(e),ke.showToast("An error occured while checking update.",{type:"error"})}},wrapper:!1,disabled:!1,onRightClick:()=>{this.refs.checkUpdateButton&&window.PluginUpdates&&window.PluginUpdates.plugins&&(t||(e=new G(this.refs.checkUpdateButton.refs.original.refs.button,Object.values(window.PluginUpdates.plugins).map(e=>e.name).join(", "),{side:"bottom",attachEvents:!1}),e.show(),t=!0))}},"Check for Updates")))}render(){const e=Mt.createElement(Dt,{color:"black",position:"top",text:"Reload List"},e=>Mt.createElement(lt,kt({},e,{className:"bd-icon bd-reload bd-reload-header",size:"18px",onClick:async()=>{this.isPlugins?R.updatePluginList():Se.updateThemeList(),this.forceUpdate()}}))),t=this.getAddons();return Mt.createElement(at,{title:`${this.props.type.toUpperCase()}—${t.length}`},Mt.createElement(Lightcord.Api.Components.inputs.Button,{key:"folder-button",color:"brand",look:"filled",size:"min",hoverColor:"default",onClick:this.openFolder.bind(this),wrapper:!1,style:{marginLeft:"10px"}},"Open ",this.isPlugins?"Plugin":"Theme"," Folder"),this.renderCheckUpdates(),!u["fork-ps-5"]&&e,Mt.createElement("div",{className:"bd-controls bd-addon-controls"},Mt.createElement(xt,{onChange:this.search,placeholder:`Search ${this.props.type}...`}),Mt.createElement("div",{className:"bd-addon-dropdowns"},Mt.createElement("div",{className:"bd-select-wrapper"},Mt.createElement("label",{className:"bd-label"},"Sort by:"),Mt.createElement(wt,{options:this.sortOptions,onChange:this.sort,style:"transparent"})),Mt.createElement("div",{className:"bd-select-wrapper"},Mt.createElement("label",{className:"bd-label"},"Order:"),Mt.createElement(wt,{options:this.directions,onChange:this.reverse,style:"transparent"})))),Mt.createElement("div",{className:"bda-slist bd-addon-list"},t))}}const Nt=Bt.prototype.render;Object.defineProperty(Bt.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>Nt});const Lt=BDModules.get(e=>e.Dispatcher&&e.default&&e.default.dispatch)[0].default,At=BDModules.get(e=>e.ActionTypes)[0].ActionTypes,Pt=process.pid;var Tt=new class{constructor(){this.enabled=!1,this.game=h}get formatedGame(){if(!this.game)return null;if(!1===this.enabled)return null;return{name:this.game.name||p.name,application_id:this.game.application_id||p.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0}}sendGame(){Lt.dispatch({type:At.LOCAL_ACTIVITY_UPDATE,socketId:"lightcord-spoof-socket",pid:Pt,activity:this.formatedGame})}enable(){this.enabled||(this.enabled=!0,console.log("Enabling custom RichPresence"),this.set(h||Object.create(p)),this.sendGame())}disable(){this.enabled&&(this.enabled=!1,console.log("Disabling custom RichPresence"),this.sendGame())}async fetchAssets(e){let t=await BDModules.get(e=>e.getAssets)[0].getAssets(e);if(t.undefined&&"number"==typeof t.undefined)throw new Error("Unknown Application");return t}set(e){this.game=e,this.sendGame()}};const Rt=xe.React;let Ot;class jt extends Rt.Component{constructor(e){super(e),this.state={data:L.getSettingGroup("rpc")||p,assets:[]},this.preview=null,this.isfetching=!1,this.state.data.application_id&&this.fetchAssets(),this.assetComponents=new Set}updateWhenFetched(e){this.assetComponents.add(e)}onChange(e,t){let n=_t.find(t=>t.id===e.props.id);this.setState({data:Object.assign(h,this.state.data,{[n.id]:t||null}),assets:this.state.assets}),"application_id"===e.props.id&&this.fetchAssets(),L.setSettingGroup("rpc",h),this.preview.forceUpdate(),Tt.set(h)}fetchAssets(){if(!0===this.isfetching){let e=this.state.data.application_id;setTimeout(()=>{this.state.data.application_id===e&&this.fetchAssets()},5e3)}if(!this.state.data.application_id)return this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),void this.assetComponents.forEach(e=>e.forceUpdate());this.isfetching=!0,Tt.fetchAssets(this.state.data.application_id).then(e=>{this.isfetching=!1,this.setState({data:this.state.data,assets:Object.keys(e).map(t=>{let n=e[t];return{id:n.id,name:n.name,type:n.type}})}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())}).catch(()=>{this.isfetching=!1,this.setState({data:this.state.data,assets:[]}),this.forceUpdate(),this.assetComponents.forEach(e=>e.forceUpdate())})}updatePreview(e){this.setState({data:e})}get modules(){return Ot||(Ot=[BDModules.get(e=>e.marginBottom20)[0]])}render(){let[e]=this.modules;return[Rt.createElement(Xe,{title:"RichPresence Settings",settings:this.props.settings,onChange:this.props.onChange}),Rt.createElement(et,null),Rt.createElement(Pe,{text:"RichPresence"}),Rt.createElement("div",null,this.optionsComponents),Rt.createElement("div",null,Rt.createElement(et,null),Rt.createElement(Pe,{text:"Preview"}),Rt.createElement(en,{settings:this})),Rt.createElement("div",{className:e.marginBottom20}),Rt.createElement("button",{style:{opacity:.01},onClick:window.ohgodohfuck},"Oh god Oh fuck"),Rt.createElement("button",{style:{opacity:.01},onClick:()=>{_.remote.shell.openExternal("https://www.youtube.com/watch?v=LkYa7rps_g4")}},"See ? I pulled a litle sneaky on ya")]}get optionsComponents(){return this._optionsComponents||(this._optionsComponents=_t.map(e=>{if("text"===e.type)return Rt.createElement(Ft,{setting:e,manager:this,id:e.id});if("number"===e.type){return[Rt.createElement(zt,{setting:e,manager:this,id:e.id})]}return"choice"===e.type?["assets.small","assets.large"].includes(e.id)?Rt.createElement(Ht,{setting:e,manager:this,id:e.id,choices:[{value:"none",label:"No assets"}].concat(this.state.assets.map(e=>({value:"asset-"+e.id,label:e.name})))}):"Unknown choice.":void 0}))}}const _t=[{title:"Application ID",id:"application_id",type:"number",placeholder:"711416957718757418"},{title:"Name",id:"name",type:"text",placeholder:"Lightcord"},{title:"Details",id:"details",type:"text",placeholder:"Browsing Discord"},{title:"State",id:"state",type:"text",placeholder:"Lightcord Client"},{title:"Timestamp Start",id:"timestamps.start",type:"number",get placeholder(){return Date.now()}},{title:"LargeAsset",id:"assets.large",type:"choice"},{title:"SmallAsset",id:"assets.small",type:"choice"}];let $t,It,Wt;class Ft extends Rt.PureComponent{get modules(){return $t&&$t[0]?$t:$t=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0]]}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Rt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,onChange:e=>{this.setState({data:e}),!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500))},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i,a,l]=this.modules;return Rt.createElement("div",{className:t.row+" "+n.marginBottom20},Rt.createElement("div",{className:`${t.item} ${i.flexChild}`},Rt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input),Rt.createElement(Qt,null))}}class zt extends Rt.PureComponent{get modules(){return It||(It=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0],BDModules.get(e=>e.inputMini)[0],BDModules.get(e=>e.size16&&e.size20)[0],BDModules.get(e=>e.colorTransparent)[0]])}constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]},this.input=Rt.createElement(window.Lightcord.Api.Components.inputs.TextInput,{placeholder:t.placeholder,name:t.id,value:this.state.data,type:"number",onChange:(e,t,n)=>{(e=e.replace(/[^\d]+/g,""))!=this.state.data?(!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,this.state.data),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:e})):n.setValue(e)},type:"text"})}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules;return Rt.createElement("div",{className:t.row+" "+n.marginBottom20},Rt.createElement("div",{className:`${t.item} ${i.flexChild}`},Rt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),this.input,"timestamps.start"===e.id?Rt.createElement(Lightcord.Api.Components.inputs.Button,{onClick:()=>{DiscordNative.clipboard.copy(Date.now()+"")},color:"brand"},"Copy current timestamp"):null),Rt.createElement(Qt,null))}}class Ht extends Rt.PureComponent{constructor(e){super(e);let t=this.props.setting;this.state={data:this.props.manager.state.data[t.id]?"asset-"+this.props.manager.state.data[t.id]:"none"},this.props.manager.updateWhenFetched(this)}onChange(e){let t=e.value;!this.lastEdited||this.lastEdited{this.props.manager.onChange(this,"none"===this.state.data?null:this.state.data.replace("asset-","")),this.isTiming=null,this.lastEdited=Date.now()},500)),this.setState({data:t}),this.forceUpdate()}get modules(){return Wt||(Wt=[BDModules.get(e=>e.removeKeybind)[0],BDModules.get(e=>e.marginBottom20)[0],BDModules.get(e=>e.defaultMarginh5)[0],BDModules.get(e=>e.colorStandard)[0],BDModules.get(e=>e.size32)[0],BDModules.get(e=>e._horizontal)[0]])}render(){let e=this.props.setting,[t,n,s,r,o,i]=this.modules,a=this.props.manager.state.assets.map(e=>({value:"asset-"+e.id,label:e.name}));return a.unshift({value:"none",label:"No assets"}),Rt.createElement("div",{className:t.row+" "+n.marginBottom20},Rt.createElement("div",{className:`${t.item} ${i.flexChild}`},Rt.createElement("h5",{className:r.colorStandard+" "+o.size14+" "+s.h5+" "+s.defaultMarginh5},e.title),Rt.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{value:this.state.data,options:a,onChange:this.onChange.bind(this)})),Rt.createElement(Qt,null))}}let Ut,qt,Gt,Vt,Jt,Zt,Yt,Kt,Xt=[];class Qt extends Rt.PureComponent{get modules(){return Xt&&Xt[0]?Xt:Xt=[BDModules.get(e=>e.divider&&1===Object.keys(e).length)[0],BDModules.get(e=>e.dividerDefault)[0]]}render(){let[e,t]=this.modules;return Rt.createElement("div",{class:`${e.divider} ${t.dividerDefault}`})}}Rt.Component;class en extends Rt.Component{constructor(e={}){super(e),this.state={active:"profile"},this.tabs=[],this.props.settings.preview=this}changeTab(e){this.state.active!==e.props.id&&(this.tabs.forEach(e=>{e.setActive(!1)}),e.setActive(!0),this.setState({active:e.props.id}))}render(){return Rt.createElement("div",{className:"lc-tabWrapper"},Rt.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},Rt.createElement(tn,{preview:this,title:"Full Profile",id:"profile"}),Rt.createElement(tn,{preview:this,title:"User Popout",id:"popout"})),Rt.createElement(nn,{preview:this.preview,state:this.state.rpc,props:{preview:this},key:this.state.active}))}isActive(e){return this.state.active===e}get preview(){return"profile"===this.state.active?rn:sn}}class tn extends Rt.Component{constructor(e){super(e),this.state={active:e.preview.isActive(e.id)},e.preview.tabs.push(this)}setActive(e){this.setState({active:!!e})}render(){let e="lc-navItem";return this.state.active?e+=" lc-navItemActive":e+=" lc-navItemInactive",Rt.createElement("div",{className:e,onClick:()=>{this.props.preview.changeTab(this)}},this.props.title)}}class nn extends Rt.Component{componentDidCatch(e,t){console.error(e,t),this.setState({error:!0})}render(){if(this.state||(this.state={error:!1}),this.state.error)return Ut=Ut||xe.WebpackModules.find(e=>e.emptyStateImage&&e.emptyState),Ut?Rt.createElement("div",{style:{margin:"20px"}},Rt.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow "+Ut.emptyState},Rt.createElement("div",{className:Ut.emptyStateImage,style:{marginTop:"20px"}}),Rt.createElement("div",{className:Ut.emptyStateHeader},"An error occured"),Rt.createElement("p",{className:Ut.emptyStateSubtext},"Please check the console for more informations. Join our ­",Rt.createElement("a",{className:`${xe.anchorClasses.anchor} ${xe.anchorClasses.anchorUnderlineOnHover}`,role:"button",tabindex:0,onClick:()=>{xe.joinLC()}},"support server"),"­ for help."))):(ke.showToast("An error occured. Please check the console for more informations."),null);try{const e=new this.props.preview(this.props.props);return e.setState(this.props.state),e.render()}catch(e){return console.error(e),this.state.error=!0,this.render()}}}class sn extends Rt.Component{get modules(){return qt||(qt=[xe.WebpackModules.find(e=>e.default&&"UserPopout"===e.default.displayName),xe.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}getComponent(){let[e,t]=this.modules;const n=t.default.getCurrentUser();return Rt.createElement(()=>{let t=e.default({userId:n.id,guildId:null,channelId:null,disableUserProfileLink:!0});return Gt=t.type,Vt=t.props,this.render()},null)}render(){if(!Gt)return this.getComponent();let[e,t]=this.modules;const n=t.default.getCurrentUser();let s=Object.assign({},p,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||p.name,application_id:this.game.application_id||p.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s}),o=new Gt(Object.assign({},Vt,{activity:r,userId:n.id})).render().props.children,i=Rt.createElement("div",window.Lightcord.Api._.excludeProperties(o.props,["onClick","onContextMenu"]));return Rt.createElement("div",{className:"lc-userPopout lc-tab-box-shadow"},i)}}class rn extends Rt.Component{get modules(){return Jt||(Jt=[xe.WebpackModules.find(e=>e.default&&"UserProfile"===e.default.displayName),xe.WebpackModules.find(e=>e.default&&e.default.getCurrentUser)])}render(){let[e,t]=this.modules;const n=t.default.getCurrentUser();if(!Zt){const t=new e.default({user:n}).render();Kt=t.type;const s=new t.type(t.props).render(),r=s.type.render(s.props,null),o=new r.type(r.props).render();Zt=o.type}if(!Zt)throw new Error("Couldn't find the UserProfileComponent component.");let s=Object.assign({},p,this.props.preview.props.settings.state.data);const r=function(){if(!this.game)return null;return{name:this.game.name||p.name,application_id:this.game.application_id||p.application_id,details:this.game.details||void 0,state:this.game.state||void 0,timestamps:this.game["timestamps.start"]?{start:this.game["timestamps.start"]}:void 0,assets:this.game["assets.large"]?{large_image:this.game["assets.large"],small_image:this.game["assets.small"]||void 0}:void 0,type:0}}.call({game:s});Yt=new Kt({user:n,close:()=>{}}).render().props;const o=new Zt(Object.assign({},Yt,{activity:r})).render().props.children;return o.props.style={width:"auto"},Rt.createElement("div",{className:"lc-tab lc-tab-box-shadow"},o)}}const on=xe.React;let an=BDModules.get(e=>e.defaultMarginh5)[0],ln=BDModules.get(e=>e.colorStandard)[0],cn=BDModules.get(e=>e.size32)[0],dn=BDModules.get(e=>e.scrollbarGhostHairline)[0];const un=BDModules.get(e=>e.default&&e.default.getGuilds)[0].default,hn=BDModules.get(e=>e.default&&e.default.getRelationships)[0].default,pn=BDModules.get(e=>e.default&&e.default.getSessions)[0].default,mn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0].default;class gn extends on.Component{constructor(e){super(e)}render(){return an||(an=BDModules.get(e=>e.defaultMarginh5)[0]),ln||(ln=BDModules.get(e=>e.colorStandard)[0]),cn||(cn=BDModules.get(e=>e.size32)[0]),[on.createElement(Pe,{text:"Account Infos"}),on.createElement("div",null,on.createElement("h5",{className:ln.colorStandard+" "+cn.size14+" "+an.h5+" "+an.defaultMarginh5},"Profile"),on.createElement(vn,{content:this.getProfileValue(),language:"diff"}),on.createElement("h5",{className:ln.colorStandard+" "+cn.size14+" "+an.h5+" "+an.defaultMarginh5},"Statistics"),on.createElement(vn,{content:this.getStatistics(),language:"diff"}),on.createElement("h5",{className:ln.colorStandard+" "+cn.size14+" "+an.h5+" "+an.defaultMarginh5},"Connected Sessions"),on.createElement(vn,{content:this.getSessionValue(),language:"diff"})),on.createElement("div",{className:BDModules.get(e=>e.marginBottom20)[0].marginBottom20})]}getSessionValue(){const e=pn.getSessions(),t=Object.keys(e).filter(e=>"all"!==e).map(t=>e[t]);return 0===t.length?"- No session detected. Please try in a few seconds":t.map(e=>`+ id: ${e.sessionId}\n+ os: ${e.clientInfo.os[0].toUpperCase()+e.clientInfo.os.slice(1)}\n+ client: ${e.clientInfo.client}\n+ status: ${e.status}\n+ Activities: ${e.activities.length}`).join("\n"+"-".repeat(38)+"\n")}getProfileValue(){const e=mn.getCurrentUser(),t=e.createdAt;let n=e.avatarURL;return e.avatar&&e.avatar.startsWith("a_")&&(n=e.getAvatarURL("gif")),n.startsWith("/")&&(n="https://discord.com"+n),n.endsWith("?size=128")&&(n=n.replace("?size=128","?size=4096")),`+ Username: ${e.username}\n+ Discriminator: ${e.discriminator}\n+ Tag: ${e.tag}\n+ ID: ${e.id}\n+ Avatar: ${e.avatar}\n+ Avatar URL: ${n}\n+ Creation Date: ${t.getDate().toString().padStart(2,"0")}/${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getFullYear().toString().padStart(2,"0")} ${t.getHours().toString().padStart(2,"0")}h ${t.getMinutes().toString().padStart(2,"0")}min ${t.getSeconds()}s\n+ Flags: ${e.flags}\n+ Has Nitro: ${e.hasPremiumSubscription?"Yes":"No"}\n- Email: ${e.email}\n- 2FA: ${e.mfaEnabled?"Yes":"No"}\n- Has Been On Mobile: ${e.mobile?"Yes":"No"}\n- Phone: ${e.phone||"None"}\n- Verified: ${e.verified}\n- Can See NSFW Channels: ${e.nsfwAllowed}`}getStatistics(){const e=Object.values(un.getGuilds()),t=Object.keys(hn.getRelationships()),n=t.filter(e=>hn.isFriend(e)),s=t.filter(e=>hn.isBlocked(e));return`+ Server Count: ${e.length} servers\n+ Relations: ${t.length} relations\n+ Friends Count: ${n.length} friends\n- Blocked Users Count: ${s.length} blocked users`}}let fn=BDModules.get(e=>e.highlight)[0],bn=BDModules.get(e=>e.markup)[0],yn=BDModules.get(e=>e.messageContent)[0];class vn extends on.Component{render(){return bn||(bn=BDModules.get(e=>e.markup)[0]),yn||(yn=BDModules.get(e=>e.messageContent)[0]),dn||(dn=BDModules.get(e=>e.scrollbarGhostHairline)[0]),fn||(fn=BDModules.get(e=>e.highlight)[0]),on.createElement("div",{class:`${bn.markup} ${yn.messageContent}`},on.createElement("pre",null,on.createElement("code",{class:dn.scrollbarGhostHairline+" hljs",dangerouslySetInnerHTML:{__html:fn.highlight(this.props.language,this.props.content).value}})),on.createElement("div",{className:BDModules.get(e=>e.marginBottom8)[0].marginBottom8}))}}const wn=window.Lightcord.DiscordModules.dispatcher,Cn=BDModules.get(e=>e.default&&e.default.getChannel&&e.default.hasChannel)[0].default;let En=BDModules.get(e=>e.default&&e.default.addRelationship)[0],Sn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0];const xn={};let kn=BDModules.get(e=>e.default&&e.default.getCurrentUser)[0];var Dn=new class{constructor(){this.antiDM=this.antiDM.bind(this),this.enabled=!1}enable(){this.enabled||(this.enabled=!0,wn.subscribe("MESSAGE_CREATE",this.antiDM))}disable(){this.enabled&&(this.enabled=!1,wn.unsubscribe("MESSAGE_CREATE",this.antiDM))}antiDM(e){if(!e.message.author.bot)return;if(e.message.author.id===(kn?kn.default.getCurrentUser():null).id&&e.message.guild_id)return;const t=Cn.getChannel(e.message.channel_id);var n;t&&(1===t.type&&(xn[e.message.author.id]||(n=e.message,(/(discord\.gg|discord\.com\/invite\/|discordapp\.com\/invite\/)/g.test(n.content)||Mn(n,"discord.gg/")||Mn(n,"discord.com/invite/")||Mn(n,"discordapp.com/invite/"))&&(xn[e.message.author.id]=!0,ke.showToast(`[AdBlock]: Blocked ${e.message.author.username}#${e.message.author.discriminator}`,{type:"warning"}),En||(En=BDModules.get(e=>e.default&&e.default.addRelationship)[0]),En.default.addRelationship(e.message.author.id,{location:"ContextMenu"},2),Sn||(Sn=BDModules.get(e=>e.default&&e.default.closePrivateChannel)[0]),Sn.default.closePrivateChannel(t.id,!1)))))}};function Mn(e,t){let n=e.embeds||[];return 0!==n.length&&n.map(e=>"rich"===e.type&&(!!(e.title||"").includes(t)||(!!(e.description||"").includes(t)||(!!((e.footer?e.footer.text:"")||"").includes(t)||!!(e.fields||[]).map(e=>e.value.includes(t)||e.name.includes(t)).includes(!0))))).includes(!0)}let Bn;const Nn=ke.removeDa;var Ln=new class{constructor(){this.enabled=!1}enable(){this.enabled||(this.enabled=!0,Bn=Bn||function(){let e=BDModules.get(e=>e.standardSidebarView)[0];if(!e)return null;let t=Nn(e.standardSidebarView),n=[],s=BDModules.get(e=>e.userSettingsAccount)[0];const r=BDModules.get(e=>"string"==typeof e.children)[0];return n.push(`#app-mount .${t} .payment-info .${Nn(BDModules.get(e=>e.description&&"string"==typeof e.description&&e.description.includes("formText"))[0].description)}`),n.push(`#app-mount .${t} .${Nn(BDModules.get(e=>e.paymentSourceRow)[0].paymentSourceRow)} .${Nn(BDModules.get(e=>e.subText&&e.descriptionWrapper)[0].subText)}`),s&&(n.push(`#app-mount .${t} .${Nn(s.userSettingsAccount)} div:nth-child(2)>div:nth-child(2)>.${Nn(BDModules.get(e=>e.viewBody)[0].viewBody)}`),n.push(`.${Nn(s.userSettingsSecurity)} .${Nn(r.children)} > div:nth-child(2)`)),console.log(n),n}(),Bn||console.error(new Error("Couldn't find selectors to blur personnal informations.")),Ce.addStyle("blurPrivate",`\n${Bn.join(", ")} {\n transition: all 150ms cubic-bezier(.55,.085,.68,.53);\n filter: blur(4px);\n opacity: .8;\n}\n\n${Bn.map(e=>e+":hover").join(", ")} {\n transition: all 150ms cubic-bezier(.55,.09,.68,.53);\n filter: none;\n opacity: 1;\n}`))}disable(){this.enabled&&(this.enabled=!1,Ce.removeStyle("blurPrivate"))}},An=new class{constructor(){window.Lightcord.Api.ensureExported(e=>e.default&&e.default.startTyping).then(e=>{let t=this;const n=e.default.startTyping;e.default.startTyping=function(){if(t.disabled)return n.call(this,...arguments)};const s=e.default.stopTyping;e.default.stopTyping=function(){if(t.disabled)return s.call(this,...arguments)},this.disabled=!0}),window.Lightcord.BetterDiscord.DisableTyping=this}disable(){this.disabled=!0}enable(){this.disabled=!1}};function Pn(){return(Pn=Object.assign||function(e){for(var t=1;tt=e);_n[e]=n;const s=[];for(let t of zn.badges)t.defaultUsers.includes(e)&&s.push(t);const r=await new Promise(t=>{if(!u["lightcord-5"])return t([]);$n.push([e,t]),setTimeout(()=>{let e=$n;0!==e.length&&($n=[],Wn(Hn.badges,"POST",JSON.stringify(e.map(e=>e[0]))).then(async t=>{200!==t.status&&e.forEach(e=>{e[1]([])});const n=await t.json();for(let t of n){e.find(e=>e[0]===t.user_id)[1](t.badges)}}).catch(t=>{t instanceof Fn||console.error(t),e.forEach(e=>{e[1]([])})}))},0)});for(let e of r)zn.badges.find(t=>t.id===e)&&(s.find(t=>t.id===e)||s.push(zn.badges.find(t=>t.id===e)));return this.cache={badges:Object.assign(this.cache.badges,{[e]:s})},setTimeout(()=>{delete this.cache.badges[e]},6e5),t(s),delete _n[e],s}};const Wn=function(e,t,n){return u["lightcord-5"]?j()(`${zn.SERVER_URL}/api/v1${e}`,{method:t,headers:{CLIENT:"Lightcord",Authorization:window.Lightcord.Api.Authorization||"None::Anonymous"},...n?{body:n}:{}}):Promise.reject(new Fn("The current settings blocked the request."))};class Fn extends Error{constructor(){super(...arguments),this.name="LightcordError"}}const zn={SERVER_URL:"https://lightcord.deroku.xyz",badges:[{name:"Lightcord Bug Hunter",id:"f04698f5-816b-41e3-bd01-92291193d7a5",defaultUsers:["696481194443014174","696003456611385396"],scopes:[],component:Tn,href:"https://github.com/lightcord/lightcord/wiki/badges#bug_hunter"},{name:"Buffoon",id:"06904d31-65b4-41ec-a50c-8658bbd1af96",defaultUsers:["389016895543705602","664600134528663565","625350657829896224"],scopes:[],component:On,href:"https://youtu.be/EJtb6z-dlT8?t=145"}]},Hn={badges:"/users/badges"};let Un;class qn extends React.PureComponent{constructor(){super(...arguments),this.state={states:[]}}render(){Un||(Un=x.find(e=>e.FormSection));const e=[...new Set(Object.keys(window.Lightcord.Api.Components).map(e=>Object.keys(window.Lightcord.Api.Components[e]).map(t=>window.Lightcord.Api.Components[e][t])).flat())];return[React.createElement(Un.FormSection,{tag:"h2",title:"Lightcord's Api Availlable components"},React.createElement(Un.FormText,{type:"description",className:"",selectable:!1},"These components are here for the plugin devs. They can quickly embed any component below with this panel.",React.createElement("div",{style:{marginTop:"20px"}}),React.createElement(Lightcord.Api.Components.general.AlertBox,{type:"info"},"All these components have error handling. If you want none, add `.original` after the component path."),React.createElement(Lightcord.Api.Components.general.AlertBox,{type:"warn"},"We do not recommend modifying these component with plugins. Only do this if you know what you are doing.")),React.createElement(et,null),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"brand",look:"outlined",size:"medium",hoverColor:"green",onClick:()=>{_.remote.shell.openExternal("https://lightcord.deroku.xyz/LightcordApi/docs")},wrapper:!1},"Documentation")),e.map(e=>{const t=e.displayName||e.name,n=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][t])}.${t}`;return React.createElement(Gn,{key:n,comp:e})})]}get renders(){}}class Gn extends React.Component{constructor(e){super(e),this.state={tab:"preview",elem:e.comp,options:{}}}render(){const e=this.props.comp;let t=[];e.AllPreviews&&(t=e.AllPreviews);let n=this.state,s=()=>{let e={};return t.forEach(t=>{e[Object.keys(t[0])[0]]=t[0][Object.keys(t[0])[0]]}),Object.keys(n.options).forEach(s=>{e[s]=t.find(e=>e.find(e=>e[s]))[n.options[s]][s]}),e},r=(e,t,n)=>{if("string"==typeof e)return e;if("boolean"==typeof e)return String(e);if("function"==typeof e)return e.toString();if("object"==typeof e){if(e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)){if("Lightcord.Api.Components.general.Tabs"===t){if("react"===n)return'React.createElement("div", {style: {\nmarginTop: "20px", marginBottom: "20px"\n}},\nReact.createElement("div", {style: {\nbackgroundColor: "var(--background-secondary)",\npadding: "30px 30px",\nborderRadius: "8px"\n}, className: "lc-tab-box-shadow" },\nReact.createElement(Lightcord.Api.Components.general.Title, null, "Preview tabs")\n)\n)';if("jsx"===n)return'
\n
\n Preview tabs\n
\n
'}return"Your components here."}return JSON.stringify(e,null," ")}return String(e)},o=function(t){const n=e.displayName||e.name;const o=`Lightcord.Api.Components.${Object.keys(window.Lightcord.Api.Components).find(e=>window.Lightcord.Api.Components[e][n])}.${n}`,i=s();if("jsx"===t){let e,n=[],s=null;if(Object.keys(i).forEach(e=>{if("children"==e)s=r(i[e],o,t);else{let s=e+"=";"string"==typeof i[e]?s+=JSON.stringify(i[e]):s+=`{${r(i[e],o,t)}}`,n.push(s)}}),s){return e=`<${o} ${n.join(" ")}>`,`${e}\n ${s}\n${``}`}return e=`<${o} ${n.join(" ")}/>`,e}if("react"===t){let e=i.children||null;delete i.children,e&&e.$$typeof&&(e.$$typeof===Symbol.for("react.element")||60103===e.$$typeof)&&(e=r(e,o,t));let n=[];Object.keys(i).forEach(e=>{let s=(/[^\w\d_]/g.test(e)?JSON.stringify(e):e)+": ";"string"==typeof i[e]?s+=JSON.stringify(i[e]):s+=r(i[e],o,t).split("\n").map((e,t)=>0===t?e:" "+e).join("\n"),n.push(s)});let s="{";n.length?n.forEach((e,t)=>{let r=t===n.length-1;0===t||(s+=","),s+="\n ",s+=e,r&&(s+="\n}")}):s+="}";let a="string"==typeof e&&e.startsWith("React.createElement")?e:JSON.stringify(e);return`React.createElement(${o}, ${s}, ${a})`}},i=e.help||{},a=i.info?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"info"},i.info):null,l=i.warn?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"warn"},i.warn):null,c=i.danger?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"danger"},i.danger):null,d=i.error?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"error"},i.error):null,u=i.success?React.createElement(window.Lightcord.Api.Components.general.AlertBox,{type:"success"},i.success):null;return React.createElement("div",null,React.createElement(window.Lightcord.Api.Components.general.SettingsTitle,null,e.displayName||e.name),a,u,l,d,c,t.map(e=>{if(e[0].onClick)return null;if(e[0].text)return null;if(e[0].children)return null;if(1===e.length)return null;let t=Object.keys(e[0])[0];return[React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,t),React.createElement(window.Lightcord.Api.Components.inputs.Dropdown,{options:e.map((e,t)=>({value:"opt-"+t,label:JSON.stringify(e[Object.keys(e)[0]])})),value:"opt-"+(n.options[t]||"0"),onChange:e=>{this.setState({options:Object.assign({},n.options,{[t]:(e.value||"0").replace("opt-","")})})},searchable:!0}),React.createElement("div",{style:{marginBottom:"8px"}})]}),React.createElement(window.Lightcord.Api.Components.general.Tabs,{tabs:[{label:"Preview",id:"preview"},{label:"Code",id:"code"}],active:n.tab,children:"preview"===n.tab?React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(e,s()))):React.createElement("div",{style:{margin:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-secondary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"JSX"),React.createElement(window.Lightcord.Api.Components.general.ErrorCatcher,null,React.createElement(()=>React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"jsx",content:o("jsx")}))),React.createElement(window.Lightcord.Api.Components.general.SettingSubTitle,null,"React"),React.createElement(window.Lightcord.Api.Components.general.ErrorCatcher,null,React.createElement(()=>React.createElement(window.Lightcord.Api.Components.general.CodeBlock,{language:"js",content:o("react")}))))),onChange:e=>{this.setState({tab:e})}}))}}const Vn=xe.React;class Jn extends Vn.Component{render(){const e=this.props.size||"18px";return Vn.createElement("svg",{viewBox:"0 0 24 24",fill:"var(--text-normal)",className:this.props.className||"",style:{width:e,height:e},onClick:this.props.onClick},Vn.createElement("path",{d:"M0 0h24v24H0z",fill:"none"}),Vn.createElement("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"}))}}var Zn=new class{constructor(){this.windows=new Map,this.enabled=!1,this.init()}async init(){let e=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getWindow);window.Lightcord.DiscordModules.dispatcher.subscribe("POPOUT_WINDOW_OPEN",t=>{setImmediate(()=>{const n=e.default.getWindow(t.key);this.windows.set(t.key,n);let s=n.document.body.classList;s.add("window-popout"),s.add("lightcord"),s.add("lightcord"),this.update(t.key)})}),window.Lightcord.DiscordModules.dispatcher.subscribe("POPOUT_WINDOW_CLOSE",e=>{setImmediate(()=>{this.windows.delete(e.key)})}),P.on("theme-enabled",()=>{this.update()}),P.on("theme-disabled",()=>{this.update()}),P.on("theme-reloaded",()=>{this.update()}),P.on("theme-unloaded",()=>{this.update()}),P.on("theme-loaded",()=>{this.update()})}enable(){this.enabled=!0,this.update()}disable(){this.enabled=!1,this.update()}update(e){if(this.windows.size)return this.enabled?this.applyThemes(e):this.removeThemes(e)}removeThemes(e){if(!this.enabled)if(e){let t=this.windows.get(e);if(!t)return;let n=t.document;for(let e of n.querySelectorAll("style[data-lightcord-theme=true]"))e.remove()}else for(let e of this.windows.keys())this.removeThemes(e)}applyThemes(e){if(this.enabled)if(e){let t=this.windows.get(e);if(!t)return;let n=t.document;for(let e of n.querySelectorAll("style[data-lightcord-theme=true]"))e.setAttribute("will-remove","true");Object.keys(bdthemes).forEach(e=>{if(!w[e])return;const t=bdthemes[e];if(!t)return;let s=n.querySelector("style[data-lightcord-theme=true]#"+Ce.escapeID(t.id));if(s)s.innerHTML=unescape(t.css),s.removeAttribute("will-remove");else{const e=n.createElement("style");e.id=Ce.escapeID(t.id),e.innerHTML=unescape(t.css),e.setAttribute("data-lightcord-theme","true"),n.head.append(e)}});for(let e of n.querySelectorAll("style[will-remove=true]"))e.remove()}else for(let e of this.windows.keys())this.applyThemes(e)}};class Yn extends React.PureComponent{render(){let e=x.find(e=>e.Separator&&e.Header&&e.Item);const t=React.createElement(V,{color:"black",side:"top",text:"Changelog"},React.createElement("span",{style:{float:"right",cursor:"pointer"},className:"bd-changelog-button",onClick:()=>{ke.showChangelogModal(bbdChangelog)}},React.createElement(Jn,{className:"bd-icon",size:"16px"})));return new e.Header({children:React.createElement("span",null,"Bandaged BD",t),className:"ui-tab-bar-header"})}}let Kn=!1;var Xn=new class{constructor(){this.onChange=this.onChange.bind(this),this.updateSettings=this.updateSettings.bind(this),this.sidebar=new Me,this.registerComponents()}registerComponents(){this.sidebar.register("lightcord",Qn(this.lightcordComponent.bind(this))),this.sidebar.register("status",Qn(this.PresenceComponent.bind(this))),this.sidebar.register("accountinfo",Qn(this.AccountInfosComponent.bind(this))),this.sidebar.register("lcapipreview",Qn(this.ApiPreviewComponent.bind(this))),this.sidebar.register("BDChangelogTitle",Qn(()=>(new Yn).render())),this.sidebar.register("core",Qn(this.coreComponent.bind(this))),this.sidebar.register("customcss",Qn(this.customCssComponent.bind(this))),this.sidebar.register("plugins",Qn(this.renderAddonPane("plugins"))),this.sidebar.register("themes",Qn(this.renderAddonPane("themes")))}get coreSettings(){const e=this.getSettings("core");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get lightcordSettings(){const e=this.getSettings("lightcord");return[...new Set(e.map(e=>e.category))].map(t=>({title:t,settings:e.filter(e=>e.category==t)}))}get PresenceSettings(){return this.getSettings("status")}getSettings(e){return Object.keys(c).reduce((t,n)=>{const s=c[n];return s.cat===e&&s.implemented&&!s.hidden&&(s.text=n,t.push(s)),t},[])}onChange(e,t,n){this.updateSettings(e,t,n)}updateSettings(e,t,n){if(["lightcord-8","no_window_bound","enable_glasstron","lightcord-10"].includes(e)||(u[e]=t),"bda-gs-2"==e&&(t?Ce.addClass(document.body,"bd-minimal"):Ce.removeClass(document.body,"bd-minimal")),"bda-gs-3"==e&&(t?Ce.addClass(document.body,"bd-minimal-chan"):Ce.removeClass(document.body,"bd-minimal-chan")),"bda-gs-1"==e&&(t?ze.addButton():ze.removeButton()),"bda-gs-4"==e&&(t?He.start():He.stop()),"bda-gs-5"==e&&(t?Ce.addClass(Ce.query("#app-mount"),"bda-dark"):Ce.removeClass(Ce.query("#app-mount"),"bda-dark")),t&&"bda-gs-6"==e&&Ne.inject24Hour(),"bda-gs-7"==e&&(t?Be.injectColoredText():Be.removeColoredText()),"fork-ps-4"==e&&(t?qe.start():qe.stop()),"fork-ps-5"==e&&(t?(we.watchContent("plugin"),we.watchContent("theme")):(we.unwatchContent("plugin"),we.unwatchContent("theme"))),"fork-wp-1"==e&&(ke.setWindowPreference("transparent",t),t?ke.setWindowPreference("backgroundColor",null):ke.setWindowPreference("backgroundColor","#2f3136")),"bda-gs-8"==e&&(t?Ge.startDebugListener():Ge.stopDebugListener()),"fork-dm-1"==e&&(t?Ge.startCopySelector():Ge.stopCopySelector()),"lightcord-1"===e&&(window.Lightcord.Settings.devMode=!!t,n.forceUpdate()),"lightcord-2"===e&&(window.Lightcord.Settings.callRingingBeat=!!t),"lightcord-presence-1"===e)if(t){Tt.enable();const e=BDModules.get(e=>e.default&&"object"==typeof e.default&&"showCurrentGame"in e.default)[0];e&&!e.default.showCurrentGame&&BDModules.get(e=>e.default&&e.default.updateRemoteSettings)[0].default.updateRemoteSettings({showCurrentGame:!0})}else Tt.disable();if("lightcord-3"===e&&(t?_.remote.getCurrentWindow().setAlwaysOnTop(!0):_.remote.getCurrentWindow().setAlwaysOnTop(!1)),"lightcord-4"===e&&(t?Dn.enable():Dn.disable()),"lightcord-6"===e&&(t?Ln.enable():Ln.disable()),"lightcord-7"===e&&(t?An.enable():An.disable()),"lightcord-8"===e){let e=_.remote.getGlobal("appSettings");e.set("isTabs",t),e.save(),_.remote.app.relaunch(),_.remote.app.exit()}if("lightcord-9"===e&&Zn[t?"enable":"disable"](),"lightcord-10"!==e){if("no_window_bound"===e){let e=_.remote.getGlobal("appSettings");e.set("NO_WINDOWS_BOUND",t),e.delete("IS_MAXIMIZED"),e.delete("IS_MINIMIZED"),e.delete("WINDOW_BOUNDS"),e.save(),_.remote.app.relaunch(),_.remote.app.exit()}if("enable_glasstron"===e){let e=_.remote.getGlobal("appSettings");e.set("GLASSTRON",t),e.save(),_.remote.app.relaunch(),_.remote.app.exit()}this.saveSettings()}else Ds.methods.NotificationsUseShim(t)}async initializeSettings(){u["bda-gs-2"]&&Ce.addClass(document.body,"bd-minimal"),u["bda-gs-3"]&&Ce.addClass(document.body,"bd-minimal-chan"),u["bda-gs-1"]&&ze.addButton(),u["bda-gs-4"]&&He.start(),u["bda-gs-5"]&&Ce.addClass(Ce.query("#app-mount"),"bda-dark"),u["bda-gs-6"]&&Ne.inject24Hour(),u["bda-gs-7"]&&Be.injectColoredText(),u["fork-ps-4"]&&qe.start(),u["lightcord-1"]&&(window.Lightcord.Settings.devMode=!0),u["lightcord-2"]&&(window.Lightcord.Settings.callRingingBeat=!0),u["lightcord-presence-1"]&&Tt.enable(),u["lightcord-3"]&&_.remote.getCurrentWindow().setAlwaysOnTop(!0),u["lightcord-4"]&&Dn.enable(),u["lightcord-6"]&&Ln.enable(),u["lightcord-7"]&&An.enable(),u["lightcord-9"]&&Zn.enable(),u["fork-ps-5"]&&(we.watchContent("plugin"),we.watchContent("theme")),u["bda-gs-8"]&&Ge.startDebugListener(),u["fork-dm-1"]&&Ge.startCopySelector(),this.saveSettings()}saveSettings(){L.setSettingGroup("settings",u),L.setSettingGroup("rpc",h)}loadSettings(){Object.assign(u,L.getSettingGroup("settings")),Object.assign(h,L.getSettingGroup("rpc"))}renderSidebar(e){return this.sidebar.render(e)}coreComponent(){return xe.react.createElement(tt,{key:"cspanel",onChange:this.onChange,sections:this.coreSettings})}lightcordComponent(e,t){let n=_.remote.getGlobal("appSettings");return[this.lightcordSettings.map((t,s)=>[0===s?null:xe.react.createElement(et),xe.react.createElement("h2",{className:"ui-form-title h2 margin-reset margin-bottom-20"},t.title),t.settings.map(t=>{let s=u[t.id];"lightcord-8"===t.id&&(s=n.get("isTabs",!1)),"no_window_bound"===t.id&&(s=n.get("NO_WINDOWS_BOUND",!1)),"enable_glasstron"===t.id&&(s=n.get("GLASSTRON",!0)),"lightcord-10"===t.id&&(s=!n.get("DEFAULT_NOTIFICATIONS",!0));let r=xe.react.createElement(Ke,{id:t.id,key:t.id,data:t,checked:s,onChange:(t,n)=>{this.onChange(t,n,e)}});return"lightcord-8"==t.id&&s?[r,React.createElement(Lightcord.Api.Components.inputs.Button,{color:"green",look:"outlined",size:"small",hoverColor:"brand",onClick:()=>{DiscordNative.ipc.send("NEW_TAB")},wrapper:!1,disabled:!1},"Open a new Tab")]:r})]),xe.react.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick(){console.log("Should relaunch"),_.remote.app.relaunch({args:_.remote.process.argv.slice(1).concat(["--disable-betterdiscord"])}),_.remote.app.quit()},wrapper:!0},"Relaunch without BetterDiscord"),React.createElement(Lightcord.Api.Components.inputs.Button,{color:"yellow",look:"ghost",size:"medium",hoverColor:"red",onClick:()=>{Kn||(Kn=!0,ke.showToast("Clearing cache...",{type:"info"}),t(),_.remote.getCurrentWebContents().session.clearCache().then(()=>{ke.showToast("Cache is cleared !",{type:"success"}),Kn=!1,t()}).catch(e=>{console.error(e),ke.showToast("An error occured. Check console for more informations.",{type:"error"}),Kn=!1,t()}))},wrapper:!0,disabled:Kn},"Clear cache")]}PresenceComponent(){return xe.react.createElement(jt,{key:"lppannel",onChange:this.onChange,settings:this.PresenceSettings})}AccountInfosComponent(){return xe.react.createElement(gn,{key:"lapannel"})}ApiPreviewComponent(){return xe.react.createElement(qn,{key:"lapipannel"})}customCssComponent(){return xe.react.createElement(rt,{key:"csseditor"})}renderAddonPane(e){class t extends xe.react.Component{constructor(e){super(e),this.prefix=this.props.type.replace("s","")}onChange(){this.props.onChange(this.props.type)}render(){return this.props.children}}const n=t.prototype.render;return Object.defineProperty(t.prototype,"render",{enumerable:!1,configurable:!1,set:function(){console.warn("Addon policy for plugins #5 https://github.com/rauenzi/BetterDiscordApp/wiki/Addon-Policies#plugins")},get:()=>n}),function(){return xe.react.createElement(t,{type:e},xe.react.createElement(Bt,{type:e}))}}};function Qn(e){class t extends React.Component{render(){return e(n,()=>this.forceUpdate())}}let n;return e=>(n=e,t)}class es extends xe.reactComponent{render(){return xe.react.createElement("svg",{height:"100%",width:this.props.size||"16px",className:"bd-logo "+this.props.className,style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"},viewBox:"0 0 2000 2000"},xe.react.createElement("metadata",null),xe.react.createElement("defs",null,xe.react.createElement("filter",{id:"shadow1"},xe.react.createElement("feDropShadow",{dx:"20",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"})),xe.react.createElement("filter",{id:"shadow2"},xe.react.createElement("feDropShadow",{dx:"15",dy:"0",stdDeviation:"20","flood-color":"rgba(255,255,255,0.15)"})),xe.react.createElement("filter",{id:"shadow3"},xe.react.createElement("feDropShadow",{dx:"10",dy:"0",stdDeviation:"20","flood-color":"rgba(0,0,0,0.35)"}))),xe.react.createElement("g",null,xe.react.createElement("path",{style:{filter:"url(#shadow3)"},d:"M1195.44+135.442L1195.44+135.442L997.6+136.442C1024.2+149.742+1170.34+163.542+1193.64+179.742C1264.34+228.842+1319.74+291.242+1358.24+365.042C1398.14+441.642+1419.74+530.642+1422.54+629.642L1422.54+630.842L1422.54+632.042C1422.54+773.142+1422.54+1228.14+1422.54+1369.14L1422.54+1370.34L1422.54+1371.54C1419.84+1470.54+1398.24+1559.54+1358.24+1636.14C1319.74+1709.94+1264.44+1772.34+1193.64+1821.44C1171.04+1837.14+1025.7+1850.54+1000+1863.54L1193.54+1864.54C1539.74+1866.44+1864.54+1693.34+1864.54+1296.64L1864.54+716.942C1866.44+312.442+1541.64+135.442+1195.44+135.442Z",fill:"#171717",opacity:"1"}),xe.react.createElement("path",{style:{filter:"url(#shadow2)"},d:"M1695.54+631.442C1685.84+278.042+1409.34+135.442+1052.94+135.442L361.74+136.442L803.74+490.442L1060.74+490.442C1335.24+490.442+1335.24+835.342+1060.74+835.342L1060.74+1164.84C1150.22+1164.84+1210.53+1201.48+1241.68+1250.87C1306.07+1353+1245.76+1509.64+1060.74+1509.64L361.74+1863.54L1052.94+1864.54C1409.24+1864.54+1685.74+1721.94+1695.54+1368.54C1695.54+1205.94+1651.04+1084.44+1572.64+999.942C1651.04+915.542+1695.54+794.042+1695.54+631.442Z",fill:"#3E82E5",opacity:"1"}),xe.react.createElement("path",{style:{filter:"url(#shadow1)"},d:"M1469.25+631.442C1459.55+278.042+1183.05+135.442+826.65+135.442L135.45+135.442L135.45+1004C135.45+1004+135.427+1255.21+355.626+1255.21C575.825+1255.21+575.848+1004+575.848+1004L577.45+490.442L834.45+490.442C1108.95+490.442+1108.95+835.342+834.45+835.342L664.65+835.342L664.65+1164.84L834.45+1164.84C923.932+1164.84+984.244+1201.48+1015.39+1250.87C1079.78+1353+1019.47+1509.64+834.45+1509.64L135.45+1509.64L135.45+1864.54L826.65+1864.54C1182.95+1864.54+1459.45+1721.94+1469.25+1368.54C1469.25+1205.94+1424.75+1084.44+1346.35+999.942C1424.75+915.542+1469.25+794.042+1469.25+631.442Z",fill:"#FFFFFF",opacity:"1"})))}}function ts(){return(ts=Object.assign||function(e){for(var t=1;t/g};let rs=BDModules.get(e=>e.CustomEmoji)[0],os=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0],is=BDModules.get(e=>e.default&&"Autocomplete"===e.default.displayName)[0],as=BDModules.get(e=>e.getAutocompleteOptions)[0],ls=BDModules.get(e=>e.default&&e.default.queryEmojiResults)[0],cs=BDModules.get(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)[0],ds=BDModules.get(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)[0],us=BDModules.get(e=>e.default&&e.default.getDisambiguatedEmojiContext);var hs=new class{constructor(){this.init().catch(e=>ke.err("EmojiModule","An error occured",e))}async init(){if(is||(is=await window.Lightcord.Api.ensureExported(e=>e.default&&"Autocomplete"===e.default.displayName)),as||(as=await window.Lightcord.Api.ensureExported(e=>e.getAutocompleteOptions)),ls||(ls=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.queryEmojiResults)),cs||(cs=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.Messages&&e.default.Messages.EMOJI_MATCHING)),ds||(ds=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getGuild&&e.default.getGuilds&&!e.default.isFetching)),us||(us=await window.Lightcord.Api.ensureExported(e=>e.default&&e.default.getDisambiguatedEmojiContext)),is&&as&&ls&&cs&&ds&&us){console.log("Patching getAutocompleteOptions of AutoCompletionTemplates",as);const e=as.getAutocompleteOptions;as.getAutocompleteOptions=function(t,n,s,r,o){const i=e.call(this,...arguments);return i.LIGHTCORD_EMOJIS={matches(e,t){let n=t.length>1&&"."===e;return Ss(n),n},queryResults:e=>ls.default.queryEmojiResults(e,t),renderResults:(e,t,n,s,r)=>ps(e,t,r.emojis,n,s,cs.default.Messages.EMOJI_MATCHING,cs.default.Messages.EMOJI,is.default.Emoji,(function(e){return{emoji:e,key:e.id||e.uniqueName||e.name,sentinel:".",guild:null!=e.guildId?ds.default.getGuild(e.guildId):null}}),(function(e){return"."+e+"."})),getPlainText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"},getRawText(e,t){var n=t.emojis;if(null==n||null==n[e])return"";var s=n[e],r=s.animated?"a":"";return s.managed||null==s.id?"."+s.name+".":"<"+r+"."+(s.originalName||s.name)+"."+s.id+">"}},i}}else console.error(new Error("Couldn't start autocompletion of Lightcord's emojis."));for(;!xe.MessageComponent;)await new Promise(e=>setTimeout(e,100));this.cancelEmojiRender||(this.cancelEmoteRender=ke.monkeyPatch(xe.MessageComponent,"default",{before:e=>{if(!ke.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.message"))return;const t=ke.getNestedProp(e.methodArguments[0],"childrenMessageContent.props.content");if(!t||!t.length)return;let n=[];const s=[];for(let e of t){if("string"!=typeof e){s.push(e);continue}let r,o=!1;do{if(r=ss.EmojiRegex.exec(e),r){o=!0,os||(os=BDModules.get(e=>e.default&&e.default.getCustomEmojiById)[0]);const e=os.default.getCustomEmojiById(r[2]);e?n.push({animated:e.animated,name:e.name,id:e.id,raw:r[0]}):n.push({animated:r[0].startsWith("{if(!e)return"";const o=n.find(t=>t.raw==e);return o?(rs||(rs=BDModules.get(e=>e.CustomEmoji)[0]),React.createElement(rs.CustomEmoji,{emoji:{name:`.${o.name}.`,emojiId:o.id,animated:o.animated,jumboable:1===r.length&&1===t.length}})):e}).reduce((e,t)=>0===e.length?[t]:"string"==typeof t?"string"==typeof e[e.length-1]?(e[e.length-1]+=" "+t,e):(e.push(" "+t),e):(e.push(" ",t),e),[]);s.push(...r)}else s.push(e)}for(;e.methodArguments[0].childrenMessageContent.props.content[0];)e.methodArguments[0].childrenMessageContent.props.content.shift();for(;s[0];)e.methodArguments[0].childrenMessageContent.props.content.push(s.shift())}}))}disable(){this.cancelEmoteRender&&(this.cancelEmoteRender(),this.cancelEmoteRender=null)}start(){}};function ps(e,t,n,s,r,o,i,a,l,c){if(null==n||0===n.length)return null;var d=n.map((function(e,n){return React.createElement(a,Object.assign({onClick:r,onHover:s,selected:t===n,index:n},l(e,n)))}));return[ms(o,i,e,c),d]}function ms(e,t,n,s){var r=n.length>0?e.format({prefix:s(n)}):t;return Array.isArray(r)?r.unshift(React.createElement("strong",{},"[Lightcord] ")):r="[LIGHTCORD] "+r,React.createElement(is.default.Title,{title:r},r)}ms.displayName="renderHeader";let gs,fs,bs,ys,vs=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0],ws=vs&&vs.default.isEmojiDisabled,Cs=!1,Es=!1;function Ss(e){Cs=e,Es||(vs||(vs=BDModules.get(e=>e.default&&e.default.isEmojiDisabled)[0]),vs&&(ws||(ws=vs.default.isEmojiDisabled),Es=!0,vs.default.isEmojiDisabled=function(e){return Cs?!(!e.surrogates&&!e.diversity):ws.call(this,...arguments)}))}function xs(){}xs.prototype.setConfig=function(e){this.hasStarted||Object.assign(f,e)},Object.defineProperty(xs.prototype,"methods",{get:()=>gs}),xs.prototype.setMethods=function(e){this.hasStarted||(gs=e)},xs.prototype.init=async function(){if(this.hasStarted)return;if(this.hasStarted=!0,!Array.prototype.flat)return void ke.alert("Not Supported","BetterDiscord v"+a+" does not support this old version ("+o+") of Discord. Please update your Discord installation before proceeding.");if(f.version
Please download the latest version from GitHub");if(window.ED)return void ke.alert("Not Supported","BandagedBD does not work with EnhancedDiscord. Please uninstall one of them.");if(window.WebSocket&&window.WebSocket.name&&window.WebSocket.name.includes("Patched"))return void ke.alert("Not Supported","BandagedBD does not work with Powercord. Please uninstall one of them.");ke.suppressErrors(this.patchAttributes.bind(this),"LC Plugin Certifier Patch")(),ke.log("Startup","Initializing Settings"),this.initSettings(),await this.checkForGuilds(),xe.initialize(),ke.log("Startup","Updating Settings"),Xn.initializeSettings(),ke.log("Startup","Loading Addons Cache"),await we.loadAddonCertifierCache(),ke.log("Startup","Loading Plugins"),await R.loadPlugins(),ke.log("Startup","Loading Themes"),await Se.loadThemes(),Ce.addStyle("customcss",Buffer.from(L.getBDData("bdcustomcss"),"base64").toString("utf8")),window.addEventListener("beforeunload",(function(){u["bda-dc-0"]&&document.querySelector(".btn.btn-disconnect").click()})),X.start(),ke.log("Startup","Removing Loading Icon"),document.getElementsByClassName("bd-loaderv2").length&&document.getElementsByClassName("bd-loaderv2")[0].remove(),ke.log("Startup","Initializing Main Observer"),this.initObserver(),u["fork-ps-1"]&&(ke.log("Startup","Collecting Startup Errors"),ke.showContentErrors({plugins:m,themes:g}));const e=L.getBDData("version");if(a>e&&(l&&this.showChangelogModal(l),L.setBDData("version",a)),hs.start(),ke.suppressErrors(this.patchSocial.bind(this),"BD Social Patch")(),ke.suppressErrors(this.patchGuildPills.bind(this),"BD Guild Pills Patch")(),ke.suppressErrors(this.patchGuildListItems.bind(this),"BD Guild List Items Patch")(),ke.suppressErrors(this.patchGuildSeparator.bind(this),"BD Guild Separator Patch")(),ke.suppressErrors(this.patchMessageHeader.bind(this),"BD Badge Chat Patch")(),ke.suppressErrors(this.patchMemberList.bind(this),"BD Badge Member List Patch")(),ke.suppressErrors(this.patchAttachment.bind(this),"LC Plugin Certifier Patch")(),f.haveInstalledDefault){let e=ke.alert("First Installation","As it is the first time you install Lightcord, We added two default themes and one default plugin in your plugin/theme folder. Check it in the Plugin/Theme settings.");await new Promise(t=>{e.onClose(t)})}const t=document.querySelector("#app-mount > div.typeWindows-1za-n7.withFrame-haYltI.titleBar-AC4pGV.horizontalReverse-3tRjY7.flex-1O1GKY.directionRowReverse-m8IjIq.justifyStart-2NDFzi.alignStretch-DpGPf3.da-typeWindows.da-withFrame.da-titleBar.da-horizontalReverse.da-flex.da-directionRowReverse.da-justifyStart.da-alignStretch > div.wordmarkWindows-1v0lYD.wordmark-2iDDfm.da-wordmarkWindows.da-wordmark");t&&(t.style.top="3px",t.innerHTML='\n \n \n \n')},xs.prototype.patchAttributes=async function(){let e=[];for(this.cancelPatchAttributes=function(){e.forEach(e=>e())};!xe.MessageComponent;)await new Promise(e=>setTimeout(e,100));const t=x.find(e=>"Anchor"==e.displayName);window.Lightcord.Api.ensureExported(e=>e.default&&"DiscordTag"===e.default.displayName).then(e=>{let n=e.default;e.default=function(e){let s=n(e),r=jn(),o=xe.React.createElement("div",{style:{display:"inline",marginTop:"5px"}},xe.React.createElement("span",{id:"badges-"+r,key:"badges-"+r,style:{display:"inherit"}})),i=[s];"249746236008169473"===e.user.id?i.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==e.user.id&&"696003456611385396"!==e.user.id||i.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-logo"})))),i.push(o);let a=xe.React.createElement("div",{style:{display:"block"}},i);return ks(r,e.user,!1),a}}),e.push(ke.monkeyPatch(xe.MessageComponent,"default",{after:e=>{e.methodArguments[0].childrenMessageContent.props.message&&(e.returnValue.props["data-message-id"]=e.methodArguments[0].childrenMessageContent.props.message.id)}}))},xs.prototype.checkForGuilds=function(){let e=0;return new Promise(t=>{const n=function(){const s=xe.guildClasses.wrapper.split(" ")[0];document.querySelectorAll("."+s).length>0&&e++;const r=xe.guildClasses.listItem.split(" ")[0],o=xe.guildClasses.blobContainer.split(" ")[0];return document.querySelectorAll(`.${s} .${r} .${o}`).length>0||e>=50?t(f.deferLoaded=!0):void setTimeout(n,100)};"loading"!=document.readyState&&setTimeout(n,100),document.addEventListener("DOMContentLoaded",()=>{setTimeout(n,100)})})},xs.prototype.injectExternals=async function(){},xs.prototype.initSettings=function(){if(L.initialize(),L.getSettingGroup("settings")||L.getSettingGroup("rpc")){Xn.loadSettings();for(const e in d)null==u[e]&&(u[e]=d[e],Xn.saveSettings())}else L.getSettingGroup("settings")||Object.assign(u,d),L.getSettingGroup("rpc")||Object.assign(h,p),Xn.saveSettings();window.Lightcord.Api.ensureExported(e=>e.default&&e.default.prototype&&e.default.prototype.getPredicateSections).then(e=>{let t=e.default.prototype.getPredicateSections;e.default.prototype.getPredicateSections=function(){let e=t.call(this,...arguments);if(!e[1])return e;if("My Account"===e[1].section){let t=[];for(t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),t.push(e.pop()),e.push(...Xn.renderSidebar(this));t[0];)e.push(t.pop())}return e}})},xs.prototype.initObserver=function(){new MutationObserver(e=>{for(let t=0,n=e.length;te.layer&&"string"==typeof e.layer&&e.animating)[0].layer),bs||(bs=BDModules.get(e=>e.socialLinks&&"string"==typeof e.socialLinks)[0].socialLinks),ys||(ys=BDModules.get(e=>e.modal&&"string"==typeof e.modal&&e.inner&&"string"==typeof e.inner&&!e.responsiveWidthMobile)[0].modal),s.classList.contains(fs)&&("GUILD_SETTINGS"===s.getAttribute("aria-label")&&(s.setAttribute("layer-id","server-settings"),s.setAttribute("id","server-settings")),s.getElementsByClassName(bs).length&&(s.setAttribute("layer-id","user-settings"),s.setAttribute("id","user-settings"))),s.parentElement==document.body&&s.querySelector("#ace_settingsmenu")&&(s.id="ace_settingsmenu_container")}}).observe(document,{childList:!0,subtree:!0})},xs.prototype.showChangelogModal=function(e={}){return ke.showChangelogModal(e)},xs.prototype.alert=function(e,t){return ke.alert(e,t)},xs.prototype.patchSocial=function(){if(this.socialPatch)return;const e=x.find(e=>"TabBar"==e.displayName),t=x.find(e=>"Anchor"==e.displayName);e&&(this.socialPatch=ke.monkeyPatch(e.prototype,"render",{after:e=>{const n=e.returnValue.props.children;if(!n||!n.length||n.length<3)return;if("Separator"!==n[n.length-3].type.displayName)return;if(!n[n.length-2].type.toString().includes("socialLinks"))return;if(t){let e=BDModules.get(e=>e.socialLinks)[0];const s=n[n.length-2].type,r=function(){const n=s(...arguments);return n.props.children.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord"},xe.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-social-logo"})))),n.props.children.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD"},xe.React.createElement(t,{className:"bd-social-link "+e.link,href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-social-logo"})))),n};n[n.length-2].type=r}let[s,r,o]=[BDModules.get(e=>e.colorMuted)[0].colorMuted,BDModules.get(e=>e.size32)[0],BDModules.get(e=>e.versionHash)[0].versionHash];const i=`(${f.hash?f.hash.substring(0,7):f.branch})`,l=[xe.react.createElement("div",{className:`${s} ${r.size12}`},`Lightcord ${_.remote.getGlobal("BuildInfo").version} `,xe.react.createElement("span",{className:o+" da-versionHash"},`(${(_.remote.getGlobal("BuildInfo").commit||"Unknown").slice(0,7)})`)),xe.react.createElement("div",{className:`${s} ${r.size12}`},`BBD ${a} `,xe.react.createElement("span",{className:o+" da-versionHash"},i))],c=n[n.length-1].type;n[n.length-1].type=function(){const e=c(...arguments);return e.props.children.splice(1,0,l),e}}}))};function ks(e,t,n){process.nextTick(()=>{const s=document.getElementById("badges-"+e);if(!s||s.childNodes.length>0)return;if(s.childNodes.length)return;let r=document.createElement("div");r.style.display="none",s.appendChild(r);const o=x.find(e=>"Anchor"==e.displayName);In.getBadges(t.id).then(e=>{e.forEach(e=>{const r={svg:{size:"16px",className:"bd-logo",width:"16px"}};e.scopes.forEach(e=>{"user"===e&&(r.user=t)}),e.href||(r.Anchor=o,r.href={className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"});const i=xe.React.createElement(V,{color:"black",side:"top",text:e.name},e.href?xe.react.createElement(o,{href:e.href,className:n?"bd-chat-badge":"bd-member-badge",title:e.name,target:"_blank"},xe.React.createElement(e.component,r)):xe.React.createElement(e.component,r)),a=document.createElement("div");xe.reactDom.render(i,a),a.childNodes.forEach(e=>{s.appendChild(e)})})})})}xs.prototype.patchGuildListItems=function(){if(this.guildListItemsPatch)return;const e=function(){const e=x.findByProps("wrapper","unreadMentionsBar"),t=x.findByProps("guildsError","selected"),n=x.findByProps("blobContainer");return Object.assign({},e,t,n)}(),t=e.listItem.split(" ")[0],n=e.blobContainer.split(" ")[0],s=xe.getInternalInstance(document.querySelector(`.${t} .${n}`).parentElement).return.type;s&&(this.guildListItemsPatch=ke.monkeyPatch(s.prototype,"render",{after:e=>{if(e.returnValue&&e.thisObject){const t=e.returnValue,n=e.thisObject.props;let s=t.props.className;return s+=" bd-guild",n.unread&&(s+=" bd-unread"),n.selected&&(s+=" bd-selected"),n.audio&&(s+=" bd-audio"),n.video&&(s+=" bd-video"),n.badge&&(s+=" bd-badge"),n.animatable&&(s+=" bd-animatable"),t.props.className=s,t}}}))},xs.prototype.patchGuildPills=function(){if(this.guildPillPatch)return;const e=x.find(e=>e.default&&!e.default.displayName&&e.default.toString&&e.default.toString().includes("translate3d"));e&&(this.guildPillPatch=ke.monkeyPatch(e,"default",{after:e=>{const t=e.methodArguments[0];return t.unread&&(e.returnValue.props.className+=" bd-unread"),t.selected&&(e.returnValue.props.className+=" bd-selected"),t.hovered&&(e.returnValue.props.className+=" bd-hovered"),e.returnValue}}))},xs.prototype.patchGuildSeparator=function(){if(this.guildSeparatorPatch)return;const e=x.findByDisplayName("Guilds"),t=x.findByProps("renderListItem");if(!t||!e)return;const n=function(){const e=t.Separator(...arguments);return e.props.className+=" bd-guild-separator",e};this.guildSeparatorPatch=ke.monkeyPatch(e.prototype,"render",{after:e=>{e.returnValue.props.children[1].props.children[3].type=n}})},xs.prototype.patchAttachment=function(){if(this.AttachmentPatch)return;const e=BDModules.get(e=>e.default&&"Attachment"===e.default.displayName)[0];x.find(e=>"Anchor"==e.displayName)&&e&&e.default&&(this.AttachmentPatch=ke.monkeyPatch(e,"default",{after:e=>{if(!u["fork-ps-6"])return;const t=e.methodArguments[0]||null,n=ke.getNestedProp(e.returnValue,"props.children");if(!n||!t||!t.url)return;if(!Array.isArray(n))return;const s=jn();n.push(xe.react.createElement("span",{id:"certified-"+s})),X.patch(t,"certified-"+s)}}))},xs.prototype.patchMessageHeader=function(){if(this.messageHeaderPatch)return;const e=x.findByProps("MessageTimestamp"),t=x.find(e=>"Anchor"==e.displayName);t&&e&&e.default&&(this.messageHeaderPatch=ke.monkeyPatch(e,"default",{after:e=>{const n=ke.getNestedProp(e.methodArguments[0],"message.author"),s=ke.getNestedProp(e.returnValue,"props.children.1.props.children.1.props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord Developer"},xe.React.createElement(t,{className:"bd-chat-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-logo"}))));const r=jn();s.push(xe.React.createElement("div",{id:"badges-"+r,style:{display:"inline"}})),ks(r,n,!0)}}))},xs.prototype.patchMemberList=function(){if(this.memberListPatch)return;const e=x.findByDisplayName("MemberListItem"),t=x.find(e=>"Anchor"==e.displayName);t&&e&&e.prototype&&e.prototype.renderDecorators&&(this.memberListPatch=ke.monkeyPatch(e.prototype,"renderDecorators",{after:e=>{const n=ke.getNestedProp(e.thisObject,"props.user"),s=ke.getNestedProp(e.returnValue,"props.children");if(!s||!n||!n.id)return;if(!Array.isArray(s))return;"249746236008169473"===n.id?s.push(xe.React.createElement(V,{color:"black",side:"top",text:"BandagedBD Developer"},xe.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/rauenzi/BetterDiscordApp",title:"BandagedBD",target:"_blank"},xe.React.createElement(es,{size:"16px",className:"bd-logo"})))):"696481194443014174"!==n.id&&"696003456611385396"!==n.id||s.push(xe.React.createElement(V,{color:"black",side:"top",text:"Lightcord Developer"},xe.React.createElement(t,{className:"bd-member-badge",href:"https://github.com/Lightcord/Lightcord",title:"Lightcord",target:"_blank"},xe.React.createElement(ns,{size:"16px",className:"bd-logo"}))));const r=jn();s.push(xe.React.createElement("div",{id:"badges-"+r})),ks(r,n,!1)}}))},xs.prototype.updateInjector=async function(){if(!L.injectionPath)return!1};var Ds=new xs;const Ms={get React(){return xe.React},get ReactDOM(){return xe.ReactDom},get ReactComponent(){return xe.ReactComponent},get WindowConfigFile(){return ke.WindowConfigFile},get settings(){return c},get emotes(){return null},get screenWidth(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)},get screenHeight(){return Math.max(document.documentElement.clientHeight,window.innerHeight||0)},getAllWindowPreferences:function(){return ke.getAllWindowPreferences()},getWindowPreference:function(e){return ke.getWindowPreference(e)},setWindowPreference:function(e,t){return ke.setWindowPreference(e,t)},injectCSS:function(e,t){Ce.addStyle(Ce.escapeID(e),t)},clearCSS:function(e){Ce.removeStyle(Ce.escapeID(e))},linkJS:function(e,t){Ce.addScript(Ce.escapeID(e),t)},unlinkJS:function(e){Ce.removeScript(Ce.escapeID(e))},getPlugin:function(e){return y.hasOwnProperty(e)?y[e].plugin:null},getCore:function(){return ke.warn("Deprecation Notice","BdApi.getCore() will be removed in future versions."),Ds},alert:function(e,t){return ke.showConfirmationModal(e,t,{cancelText:null})},showConfirmationModal:function(e,t,n={}){return ke.showConfirmationModal(e,t,n)},showToast:function(e,t={}){ke.showToast(e,t)},findModule:function(e){return xe.WebpackModules.find(e)},findAllModules:function(e){return xe.WebpackModules.findAll(e)},findModuleByProps:function(...e){return xe.WebpackModules.findByUniqueProperties(e)},findModuleByPrototypes:function(...e){return xe.WebpackModules.findByPrototypes(e)},findModuleByDisplayName:function(e){return xe.WebpackModules.findByDisplayName(e)},getInternalInstance:function(e){if(e instanceof window.jQuery||e instanceof Element)return e instanceof jQuery&&(e=e[0]),xe.getInternalInstance(e)},loadData:function(e,t){return L.getPluginData(e,t)}};Ms.getData=Ms.loadData,Ms.saveData=function(e,t,n){return L.setPluginData(e,t,n)},Ms.setData=Ms.saveData,Ms.deleteData=function(e,t){return L.deletePluginData(e,t)},Ms.monkeyPatch=function(e,t,n){return ke.monkeyPatch(e,t,n)},Ms.onRemoved=function(e,t){return ke.onRemoved(e,t)},Ms.suppressErrors=function(e,t){return ke.suppressErrors(e,t)},Ms.testJSON=function(e){return ke.testJSON(e)},Ms.isPluginEnabled=function(e){return!!v[e]},Ms.isThemeEnabled=function(e){return!!w[e]},Ms.isSettingEnabled=function(e){return!!u[e]},Ms.enableSetting=function(e){return Xn.onChange(e,!0)},Ms.disableSetting=function(e){return Xn.onChange(e,!1)},Ms.toggleSetting=function(e){return Xn.onChange(e,!u[e])},Ms.getBDData=function(e){return L.getBDData(e)},Ms.setBDData=function(e,t){return L.setBDData(e,t)};const Bs=(e,t,n)=>new class{get folder(){return n.folder}isEnabled(t){return!!e[t]}enable(e){return n.enable(e)}disable(e){return n.disable(e)}toggle(t){e[t]?this.disable(t):this.enable(t)}reload(e){return n.reload(e)}get(e){return t.hasOwnProperty(e)?t[e].plugin?t[e].plugin:t[e]:null}getAll(){return Object.keys(t).map(e=>this.get(e)).filter(e=>e)}};Ms.Plugins=Bs(v,y,R),Ms.Themes=Bs(w,b,Se);var Ns=Ms;window.Lightcord.BetterDiscord.BdApi=Ms,function(){const e=Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype,"contentWindow").get;Object.defineProperty(HTMLIFrameElement.prototype,"contentWindow",{get:function(){const t=Reflect.apply(e,this,arguments);return new Proxy(t,{getOwnPropertyDescriptor:function(e,t){if("localStorage"!==t)return Object.getOwnPropertyDescriptor(e,t)},get:function(e,t){if("localStorage"===t)return null;const n=e[t];return"function"==typeof n?n.bind(e):n}})}}),Object.defineProperty(Reflect,"apply",{value:Reflect.apply,writable:!1,configurable:!1}),Object.defineProperty(Function.prototype,"bind",{value:Function.prototype.bind,writable:!1,configurable:!1});const t=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(){const e=arguments[1];return e.toLowerCase().includes("api/webhooks")?null:Reflect.apply(t,this,arguments)}}(),(()=>{const e=document.createElement("div");e.className="bd-loaderv2",e.title="BandagedBD is loading...",document.body.appendChild(e)})();const Ls=(e,t)=>{Object.defineProperty(window,e,{get:()=>(ke.warn("Deprecated Global",`"${e}" will be removed in future versions. Please only use BdApi.`),t)})},As=Object.keys(s);for(const e of As)Ls(e,s[e]);Ls("BDV2",xe),Ls("pluginModule",R),Ls("themeModule",Se),Ls("Utils",ke),Ls("BDEvents",P),Ls("settingsPanel",Xn),Ls("DataStore",L),Ls("ContentManager",we),Ls("ClassNormalizer",qe),window.BdApi=Ns,Ls("mainCore",Ds);class Ps{constructor(e,t){Ds.setConfig(e),Ds.setMethods(t)}init(){Ds.init()}}}]); \ No newline at end of file diff --git a/BetterDiscordApp/src/ui/AccountInfos.jsx b/BetterDiscordApp/src/ui/AccountInfos.jsx index 47f0074..9e6dc1b 100644 --- a/BetterDiscordApp/src/ui/AccountInfos.jsx +++ b/BetterDiscordApp/src/ui/AccountInfos.jsx @@ -91,7 +91,8 @@ export default class V2C_AccountInfos extends React.Component { - 2FA: ${user.mfaEnabled ? "Yes" : "No"} - Has Been On Mobile: ${user.mobile ? "Yes" : "No"} - Phone: ${user.phone || "None"} -- Verified: ${user.verified}` +- Verified: ${user.verified} +- Can See NSFW Channels: ${user.nsfwAllowed}`; } getStatistics(){ diff --git a/LightcordApi/js/main.min.js b/LightcordApi/js/main.min.js index 7dd5143..a1c645e 100644 --- a/LightcordApi/js/main.min.js +++ b/LightcordApi/js/main.min.js @@ -1,2 +1,2 @@ /*! For license information please see main.min.js.LICENSE.txt */ -module.exports=function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=119)}([function(module,__webpack_exports__,__webpack_require__){"use strict";function requiredArgs(required,args){if(args.length1?"s":"")+" required, but only "+args.length+" present")}__webpack_require__.d(__webpack_exports__,"a",(function(){return requiredArgs}))},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return toDate}));var _lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(0);function toDate(argument){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(1,arguments);var argStr=Object.prototype.toString.call(argument);return argument instanceof Date||"object"==typeof argument&&"[object Date]"===argStr?new Date(argument.getTime()):"number"==typeof argument||"[object Number]"===argStr?new Date(argument):("string"!=typeof argument&&"[object String]"!==argStr||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(module,__webpack_exports__,__webpack_require__){"use strict";function toInteger(dirtyNumber){if(null===dirtyNumber||!0===dirtyNumber||!1===dirtyNumber)return NaN;var number=Number(dirtyNumber);return isNaN(number)?number:number<0?Math.ceil(number):Math.floor(number)}__webpack_require__.d(__webpack_exports__,"a",(function(){return toInteger}))},function(module,exports,__webpack_require__){window.React=window.React||(()=>{try{return window.BdApi.React}catch(e){return null}})()||(()=>{try{return __webpack_require__(97).React}catch(e){return null}})()||(()=>{try{return window.EDApi.React}catch(e){return null}})(),module.exports=window.React},function(module,__webpack_exports__,__webpack_require__){"use strict";function addLeadingZeros(number,targetLength){for(var sign=number<0?"-":"",output=Math.abs(number).toString();output.length0?(6e4+getDateMillisecondsPart(date))%6e4:getDateMillisecondsPart(date))}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfWeek}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function startOfWeek(dirtyDate,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getDay(),diff=(day{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})[0]}filter(filter){return BDModules.get(filter)}filterByUniqueProperties(props){return BDModules.get(mod=>{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})}};class WebpackLoaderError extends Error{constructor(message=""){super(message+="\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error to the devs. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in our discord server."),this.name="WebpackLoaderError"}}exports.WebpackLoaderError=WebpackLoaderError},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return differenceInCalendarDays}));var _lib_getTimezoneOffsetInMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(7),_startOfDay_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(19),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function differenceInCalendarDays(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var startOfDayLeft=Object(_startOfDay_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDateLeft),startOfDayRight=Object(_startOfDay_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDateRight),timestampLeft=startOfDayLeft.getTime()-Object(_lib_getTimezoneOffsetInMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(startOfDayLeft),timestampRight=startOfDayRight.getTime()-Object(_lib_getTimezoneOffsetInMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(startOfDayRight);return Math.round((timestampLeft-timestampRight)/864e5)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return addMonths}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function addMonths(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);if(isNaN(amount))return new Date(NaN);if(!amount)return date;var dayOfMonth=date.getDate(),endOfDesiredMonth=new Date(date.getTime());endOfDesiredMonth.setMonth(date.getMonth()+amount+1,0);var daysInMonth=endOfDesiredMonth.getDate();return dayOfMonth>=daysInMonth?endOfDesiredMonth:(date.setFullYear(endOfDesiredMonth.getFullYear(),endOfDesiredMonth.getMonth(),dayOfMonth),date)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getHours}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getHours(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),hours=date.getHours();return hours}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setMonth}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_getDaysInMonth_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(78),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function setMonth(dirtyDate,dirtyMonth){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),month=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyMonth),year=date.getFullYear(),day=date.getDate(),dateWithDesiredMonth=new Date(0);dateWithDesiredMonth.setFullYear(year,month,15),dateWithDesiredMonth.setHours(0,0,0,0);var daysInMonth=Object(_getDaysInMonth_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(dateWithDesiredMonth);return date.setMonth(month,Math.min(day,daysInMonth)),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getMinutes}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getMinutes(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),minutes=date.getMinutes();return minutes}},function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes=[],i=0;i0?"in "+result:result+" ago":result},formatLong:formatLong,formatRelative:function formatRelative(token,_date,_baseDate,_options){return formatRelativeLocale[token]},localize:{ordinalNumber:function ordinalNumber(dirtyNumber,_dirtyOptions){var number=Number(dirtyNumber),rem100=number%100;if(rem100>20||rem100<10)switch(rem100%10){case 1:return number+"st";case 2:return number+"nd";case 3:return number+"rd"}return number+"th"},era:buildLocalizeFn({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:buildLocalizeFn({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(quarter){return Number(quarter)-1}}),month:buildLocalizeFn({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:buildLocalizeFn({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:buildLocalizeFn({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:function buildMatchPatternFn(args){return function(dirtyString,dirtyOptions){var string=String(dirtyString),options=dirtyOptions||{},matchResult=string.match(args.matchPattern);if(!matchResult)return null;var matchedString=matchResult[0],parseResult=string.match(args.parsePattern);if(!parseResult)return null;var value=args.valueCallback?args.valueCallback(parseResult[0]):parseResult[0];return{value:value=options.valueCallback?options.valueCallback(value):value,rest:string.slice(matchedString.length)}}}({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(value){return parseInt(value,10)}}),era:buildMatchFn({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:buildMatchFn({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(index){return index+1}}),month:buildMatchFn({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:buildMatchFn({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:buildMatchFn({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};__webpack_exports__.a=locale},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isAfter}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isAfter(dirtyDate,dirtyDateToCompare){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),dateToCompare=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateToCompare);return date.getTime()>dateToCompare.getTime()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),month=date.getMonth();return month}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subMilliseconds}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(29),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subMilliseconds(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return addWeeks}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addDays_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(9),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function addWeeks(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount),days=7*amount;return Object(_addDays_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,days)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfUTCWeek}));var _toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function startOfUTCWeek(dirtyDate,dirtyOptions){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),day=date.getUTCDay(),diff=(day0?signedYear:1-signedYear;return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)("yy"===token?year%100:year,token.length)},M:function(date,token){var month=date.getUTCMonth();return"M"===token?String(month+1):Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(month+1,2)},d:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCDate(),token.length)},a:function(date,token){var dayPeriodEnumValue=date.getUTCHours()/12>=1?"pm":"am";switch(token){case"a":case"aa":case"aaa":return dayPeriodEnumValue.toUpperCase();case"aaaaa":return dayPeriodEnumValue[0];case"aaaa":default:return"am"===dayPeriodEnumValue?"a.m.":"p.m."}},h:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCHours()%12||12,token.length)},H:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCHours(),token.length)},m:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCMinutes(),token.length)},s:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCSeconds(),token.length)},S:function(date,token){var numberOfDigits=token.length,milliseconds=date.getUTCMilliseconds(),fractionalSeconds=Math.floor(milliseconds*Math.pow(10,numberOfDigits-3));return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(fractionalSeconds,token.length)}};__webpack_exports__.a=formatters},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return addMilliseconds}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function addMilliseconds(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var timestamp=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate).getTime(),amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return new Date(timestamp+amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function startOfMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate);return date.setDate(1),date.setHours(0,0,0,0),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfQuarter}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function startOfQuarter(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),currentMonth=date.getMonth(),month=currentMonth-currentMonth%3;return date.setMonth(month,1),date.setHours(0,0,0,0),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfUTCISOWeek}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function startOfUTCISOWeek(dirtyDate){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var weekStartsOn=1,date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getUTCDay(),diff=(day0?"-":"+",absOffset=Math.abs(offset),hours=Math.floor(absOffset/60),minutes=absOffset%60;if(0===minutes)return sign+String(hours);var delimiter=dirtyDelimiter||"";return sign+String(hours)+delimiter+Object(addLeadingZeros.a)(minutes,2)}function formatTimezoneWithOptionalMinutes(offset,dirtyDelimiter){return offset%60==0?(offset>0?"-":"+")+Object(addLeadingZeros.a)(Math.abs(offset)/60,2):formatTimezone(offset,dirtyDelimiter)}function formatTimezone(offset,dirtyDelimiter){var delimiter=dirtyDelimiter||"",sign=offset>0?"-":"+",absOffset=Math.abs(offset);return sign+Object(addLeadingZeros.a)(Math.floor(absOffset/60),2)+delimiter+Object(addLeadingZeros.a)(absOffset%60,2)}var format_formatters={G:function(date,token,localize){var era=date.getUTCFullYear()>0?1:0;switch(token){case"G":case"GG":case"GGG":return localize.era(era,{width:"abbreviated"});case"GGGGG":return localize.era(era,{width:"narrow"});case"GGGG":default:return localize.era(era,{width:"wide"})}},y:function(date,token,localize){if("yo"===token){var signedYear=date.getUTCFullYear(),year=signedYear>0?signedYear:1-signedYear;return localize.ordinalNumber(year,{unit:"year"})}return lightFormatters.a.y(date,token)},Y:function(date,token,localize,options){var signedWeekYear=Object(getUTCWeekYear.a)(date,options),weekYear=signedWeekYear>0?signedWeekYear:1-signedWeekYear;if("YY"===token){var twoDigitYear=weekYear%100;return Object(addLeadingZeros.a)(twoDigitYear,2)}return"Yo"===token?localize.ordinalNumber(weekYear,{unit:"year"}):Object(addLeadingZeros.a)(weekYear,token.length)},R:function(date,token){var isoWeekYear=Object(getUTCISOWeekYear.a)(date);return Object(addLeadingZeros.a)(isoWeekYear,token.length)},u:function(date,token){var year=date.getUTCFullYear();return Object(addLeadingZeros.a)(year,token.length)},Q:function(date,token,localize){var quarter=Math.ceil((date.getUTCMonth()+1)/3);switch(token){case"Q":return String(quarter);case"QQ":return Object(addLeadingZeros.a)(quarter,2);case"Qo":return localize.ordinalNumber(quarter,{unit:"quarter"});case"QQQ":return localize.quarter(quarter,{width:"abbreviated",context:"formatting"});case"QQQQQ":return localize.quarter(quarter,{width:"narrow",context:"formatting"});case"QQQQ":default:return localize.quarter(quarter,{width:"wide",context:"formatting"})}},q:function(date,token,localize){var quarter=Math.ceil((date.getUTCMonth()+1)/3);switch(token){case"q":return String(quarter);case"qq":return Object(addLeadingZeros.a)(quarter,2);case"qo":return localize.ordinalNumber(quarter,{unit:"quarter"});case"qqq":return localize.quarter(quarter,{width:"abbreviated",context:"standalone"});case"qqqqq":return localize.quarter(quarter,{width:"narrow",context:"standalone"});case"qqqq":default:return localize.quarter(quarter,{width:"wide",context:"standalone"})}},M:function(date,token,localize){var month=date.getUTCMonth();switch(token){case"M":case"MM":return lightFormatters.a.M(date,token);case"Mo":return localize.ordinalNumber(month+1,{unit:"month"});case"MMM":return localize.month(month,{width:"abbreviated",context:"formatting"});case"MMMMM":return localize.month(month,{width:"narrow",context:"formatting"});case"MMMM":default:return localize.month(month,{width:"wide",context:"formatting"})}},L:function(date,token,localize){var month=date.getUTCMonth();switch(token){case"L":return String(month+1);case"LL":return Object(addLeadingZeros.a)(month+1,2);case"Lo":return localize.ordinalNumber(month+1,{unit:"month"});case"LLL":return localize.month(month,{width:"abbreviated",context:"standalone"});case"LLLLL":return localize.month(month,{width:"narrow",context:"standalone"});case"LLLL":default:return localize.month(month,{width:"wide",context:"standalone"})}},w:function(date,token,localize,options){var week=Object(getUTCWeek.a)(date,options);return"wo"===token?localize.ordinalNumber(week,{unit:"week"}):Object(addLeadingZeros.a)(week,token.length)},I:function(date,token,localize){var isoWeek=Object(getUTCISOWeek.a)(date);return"Io"===token?localize.ordinalNumber(isoWeek,{unit:"week"}):Object(addLeadingZeros.a)(isoWeek,token.length)},d:function(date,token,localize){return"do"===token?localize.ordinalNumber(date.getUTCDate(),{unit:"date"}):lightFormatters.a.d(date,token)},D:function(date,token,localize){var dayOfYear=function getUTCDayOfYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),timestamp=date.getTime();date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0);var startOfYearTimestamp=date.getTime(),difference=timestamp-startOfYearTimestamp;return Math.floor(difference/864e5)+1}(date);return"Do"===token?localize.ordinalNumber(dayOfYear,{unit:"dayOfYear"}):Object(addLeadingZeros.a)(dayOfYear,token.length)},E:function(date,token,localize){var dayOfWeek=date.getUTCDay();switch(token){case"E":case"EE":case"EEE":return localize.day(dayOfWeek,{width:"abbreviated",context:"formatting"});case"EEEEE":return localize.day(dayOfWeek,{width:"narrow",context:"formatting"});case"EEEEEE":return localize.day(dayOfWeek,{width:"short",context:"formatting"});case"EEEE":default:return localize.day(dayOfWeek,{width:"wide",context:"formatting"})}},e:function(date,token,localize,options){var dayOfWeek=date.getUTCDay(),localDayOfWeek=(dayOfWeek-options.weekStartsOn+8)%7||7;switch(token){case"e":return String(localDayOfWeek);case"ee":return Object(addLeadingZeros.a)(localDayOfWeek,2);case"eo":return localize.ordinalNumber(localDayOfWeek,{unit:"day"});case"eee":return localize.day(dayOfWeek,{width:"abbreviated",context:"formatting"});case"eeeee":return localize.day(dayOfWeek,{width:"narrow",context:"formatting"});case"eeeeee":return localize.day(dayOfWeek,{width:"short",context:"formatting"});case"eeee":default:return localize.day(dayOfWeek,{width:"wide",context:"formatting"})}},c:function(date,token,localize,options){var dayOfWeek=date.getUTCDay(),localDayOfWeek=(dayOfWeek-options.weekStartsOn+8)%7||7;switch(token){case"c":return String(localDayOfWeek);case"cc":return Object(addLeadingZeros.a)(localDayOfWeek,token.length);case"co":return localize.ordinalNumber(localDayOfWeek,{unit:"day"});case"ccc":return localize.day(dayOfWeek,{width:"abbreviated",context:"standalone"});case"ccccc":return localize.day(dayOfWeek,{width:"narrow",context:"standalone"});case"cccccc":return localize.day(dayOfWeek,{width:"short",context:"standalone"});case"cccc":default:return localize.day(dayOfWeek,{width:"wide",context:"standalone"})}},i:function(date,token,localize){var dayOfWeek=date.getUTCDay(),isoDayOfWeek=0===dayOfWeek?7:dayOfWeek;switch(token){case"i":return String(isoDayOfWeek);case"ii":return Object(addLeadingZeros.a)(isoDayOfWeek,token.length);case"io":return localize.ordinalNumber(isoDayOfWeek,{unit:"day"});case"iii":return localize.day(dayOfWeek,{width:"abbreviated",context:"formatting"});case"iiiii":return localize.day(dayOfWeek,{width:"narrow",context:"formatting"});case"iiiiii":return localize.day(dayOfWeek,{width:"short",context:"formatting"});case"iiii":default:return localize.day(dayOfWeek,{width:"wide",context:"formatting"})}},a:function(date,token,localize){var dayPeriodEnumValue=date.getUTCHours()/12>=1?"pm":"am";switch(token){case"a":case"aa":case"aaa":return localize.dayPeriod(dayPeriodEnumValue,{width:"abbreviated",context:"formatting"});case"aaaaa":return localize.dayPeriod(dayPeriodEnumValue,{width:"narrow",context:"formatting"});case"aaaa":default:return localize.dayPeriod(dayPeriodEnumValue,{width:"wide",context:"formatting"})}},b:function(date,token,localize){var dayPeriodEnumValue,hours=date.getUTCHours();switch(dayPeriodEnumValue=12===hours?dayPeriodEnum_noon:0===hours?dayPeriodEnum_midnight:hours/12>=1?"pm":"am",token){case"b":case"bb":case"bbb":return localize.dayPeriod(dayPeriodEnumValue,{width:"abbreviated",context:"formatting"});case"bbbbb":return localize.dayPeriod(dayPeriodEnumValue,{width:"narrow",context:"formatting"});case"bbbb":default:return localize.dayPeriod(dayPeriodEnumValue,{width:"wide",context:"formatting"})}},B:function(date,token,localize){var dayPeriodEnumValue,hours=date.getUTCHours();switch(dayPeriodEnumValue=hours>=17?dayPeriodEnum_evening:hours>=12?dayPeriodEnum_afternoon:hours>=4?dayPeriodEnum_morning:dayPeriodEnum_night,token){case"B":case"BB":case"BBB":return localize.dayPeriod(dayPeriodEnumValue,{width:"abbreviated",context:"formatting"});case"BBBBB":return localize.dayPeriod(dayPeriodEnumValue,{width:"narrow",context:"formatting"});case"BBBB":default:return localize.dayPeriod(dayPeriodEnumValue,{width:"wide",context:"formatting"})}},h:function(date,token,localize){if("ho"===token){var hours=date.getUTCHours()%12;return 0===hours&&(hours=12),localize.ordinalNumber(hours,{unit:"hour"})}return lightFormatters.a.h(date,token)},H:function(date,token,localize){return"Ho"===token?localize.ordinalNumber(date.getUTCHours(),{unit:"hour"}):lightFormatters.a.H(date,token)},K:function(date,token,localize){var hours=date.getUTCHours()%12;return"Ko"===token?localize.ordinalNumber(hours,{unit:"hour"}):Object(addLeadingZeros.a)(hours,token.length)},k:function(date,token,localize){var hours=date.getUTCHours();return 0===hours&&(hours=24),"ko"===token?localize.ordinalNumber(hours,{unit:"hour"}):Object(addLeadingZeros.a)(hours,token.length)},m:function(date,token,localize){return"mo"===token?localize.ordinalNumber(date.getUTCMinutes(),{unit:"minute"}):lightFormatters.a.m(date,token)},s:function(date,token,localize){return"so"===token?localize.ordinalNumber(date.getUTCSeconds(),{unit:"second"}):lightFormatters.a.s(date,token)},S:function(date,token){return lightFormatters.a.S(date,token)},X:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();if(0===timezoneOffset)return"Z";switch(token){case"X":return formatTimezoneWithOptionalMinutes(timezoneOffset);case"XXXX":case"XX":return formatTimezone(timezoneOffset);case"XXXXX":case"XXX":default:return formatTimezone(timezoneOffset,":")}},x:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();switch(token){case"x":return formatTimezoneWithOptionalMinutes(timezoneOffset);case"xxxx":case"xx":return formatTimezone(timezoneOffset);case"xxxxx":case"xxx":default:return formatTimezone(timezoneOffset,":")}},O:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();switch(token){case"O":case"OO":case"OOO":return"GMT"+formatTimezoneShort(timezoneOffset,":");case"OOOO":default:return"GMT"+formatTimezone(timezoneOffset,":")}},z:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();switch(token){case"z":case"zz":case"zzz":return"GMT"+formatTimezoneShort(timezoneOffset,":");case"zzzz":default:return"GMT"+formatTimezone(timezoneOffset,":")}},t:function(date,token,_localize,options){var originalDate=options._originalDate||date,timestamp=Math.floor(originalDate.getTime()/1e3);return Object(addLeadingZeros.a)(timestamp,token.length)},T:function(date,token,_localize,options){var timestamp=(options._originalDate||date).getTime();return Object(addLeadingZeros.a)(timestamp,token.length)}},longFormatters=__webpack_require__(81),getTimezoneOffsetInMilliseconds=__webpack_require__(7),protectedTokens=__webpack_require__(33),toInteger=__webpack_require__(2),formattingTokensRegExp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,longFormattingTokensRegExp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,escapedStringRegExp=/^'([^]*?)'?$/,doubleQuoteRegExp=/''/g,unescapedLatinCharacterRegExp=/[a-zA-Z]/;function format(dirtyDate,dirtyFormatStr,dirtyOptions){Object(requiredArgs.a)(2,arguments);var formatStr=String(dirtyFormatStr),options=dirtyOptions||{},locale=options.locale||en_US.a,localeFirstWeekContainsDate=locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var localeWeekStartsOn=locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!locale.localize)throw new RangeError("locale must contain localize property");if(!locale.formatLong)throw new RangeError("locale must contain formatLong property");var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var timezoneOffset=Object(getTimezoneOffsetInMilliseconds.a)(originalDate),utcDate=Object(subMilliseconds.a)(originalDate,timezoneOffset),formatterOptions={firstWeekContainsDate:firstWeekContainsDate,weekStartsOn:weekStartsOn,locale:locale,_originalDate:originalDate},result=formatStr.match(longFormattingTokensRegExp).map((function(substring){var firstCharacter=substring[0];return"p"===firstCharacter||"P"===firstCharacter?(0,longFormatters.a[firstCharacter])(substring,locale.formatLong,formatterOptions):substring})).join("").match(formattingTokensRegExp).map((function(substring){if("''"===substring)return"'";var firstCharacter=substring[0];if("'"===firstCharacter)return cleanEscapedString(substring);var formatter=format_formatters[firstCharacter];if(formatter)return!options.useAdditionalWeekYearTokens&&Object(protectedTokens.b)(substring)&&Object(protectedTokens.c)(substring,dirtyFormatStr,dirtyDate),!options.useAdditionalDayOfYearTokens&&Object(protectedTokens.a)(substring)&&Object(protectedTokens.c)(substring,dirtyFormatStr,dirtyDate),formatter(utcDate,substring,locale.localize,formatterOptions);if(firstCharacter.match(unescapedLatinCharacterRegExp))throw new RangeError("Format string contains an unescaped latin alphabet character `"+firstCharacter+"`");return substring})).join("");return result}function cleanEscapedString(input){return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp,"'")}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isBefore}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isBefore(dirtyDate,dirtyDateToCompare){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),dateToCompare=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateToCompare);return date.getTime()=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(toDate.a)(dirtyDate),day=Object(toInteger.a)(dirtyDay),currentDay=date.getUTCDay(),remainder=day%7,dayIndex=(remainder+7)%7,diff=(dayIndex0,absCurrentYear=isCommonEra?currentYear:1-currentYear;if(absCurrentYear<=50)result=twoDigitYear||100;else{var rangeEnd=absCurrentYear+50;result=twoDigitYear+100*Math.floor(rangeEnd/100)-(twoDigitYear>=rangeEnd%100?100:0)}return isCommonEra?result:1-result}var DAYS_IN_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31],DAYS_IN_MONTH_LEAP_YEAR=[31,29,31,30,31,30,31,31,30,31,30,31];function isLeapYearIndex(year){return year%400==0||year%4==0&&year%100!=0}var _lib_parsers={G:{priority:140,parse:function(string,token,match,_options){switch(token){case"G":case"GG":case"GGG":return match.era(string,{width:"abbreviated"})||match.era(string,{width:"narrow"});case"GGGGG":return match.era(string,{width:"narrow"});case"GGGG":default:return match.era(string,{width:"wide"})||match.era(string,{width:"abbreviated"})||match.era(string,{width:"narrow"})}},set:function(date,flags,value,_options){return flags.era=value,date.setUTCFullYear(value,0,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["R","u","t","T"]},y:{priority:130,parse:function(string,token,match,_options){var valueCallback=function(year){return{year:year,isTwoDigitYear:"yy"===token}};switch(token){case"y":return parseNDigits(4,string,valueCallback);case"yo":return match.ordinalNumber(string,{unit:"year",valueCallback:valueCallback});default:return parseNDigits(token.length,string,valueCallback)}},validate:function(_date,value,_options){return value.isTwoDigitYear||value.year>0},set:function(date,flags,value,_options){var currentYear=date.getUTCFullYear();if(value.isTwoDigitYear){var normalizedTwoDigitYear=normalizeTwoDigitYear(value.year,currentYear);return date.setUTCFullYear(normalizedTwoDigitYear,0,1),date.setUTCHours(0,0,0,0),date}var year="era"in flags&&1!==flags.era?1-value.year:value.year;return date.setUTCFullYear(year,0,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","u","w","I","i","e","c","t","T"]},Y:{priority:130,parse:function(string,token,match,_options){var valueCallback=function(year){return{year:year,isTwoDigitYear:"YY"===token}};switch(token){case"Y":return parseNDigits(4,string,valueCallback);case"Yo":return match.ordinalNumber(string,{unit:"year",valueCallback:valueCallback});default:return parseNDigits(token.length,string,valueCallback)}},validate:function(_date,value,_options){return value.isTwoDigitYear||value.year>0},set:function(date,flags,value,options){var currentYear=Object(getUTCWeekYear.a)(date,options);if(value.isTwoDigitYear){var normalizedTwoDigitYear=normalizeTwoDigitYear(value.year,currentYear);return date.setUTCFullYear(normalizedTwoDigitYear,0,options.firstWeekContainsDate),date.setUTCHours(0,0,0,0),Object(startOfUTCWeek.a)(date,options)}var year="era"in flags&&1!==flags.era?1-value.year:value.year;return date.setUTCFullYear(year,0,options.firstWeekContainsDate),date.setUTCHours(0,0,0,0),Object(startOfUTCWeek.a)(date,options)},incompatibleTokens:["y","R","u","Q","q","M","L","I","d","D","i","t","T"]},R:{priority:130,parse:function(string,token,_match,_options){return parseNDigitsSigned("R"===token?4:token.length,string)},set:function(_date,_flags,value,_options){var firstWeekOfYear=new Date(0);return firstWeekOfYear.setUTCFullYear(value,0,4),firstWeekOfYear.setUTCHours(0,0,0,0),Object(startOfUTCISOWeek.a)(firstWeekOfYear)},incompatibleTokens:["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"]},u:{priority:130,parse:function(string,token,_match,_options){return parseNDigitsSigned("u"===token?4:token.length,string)},set:function(date,_flags,value,_options){return date.setUTCFullYear(value,0,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["G","y","Y","R","w","I","i","e","c","t","T"]},Q:{priority:120,parse:function(string,token,match,_options){switch(token){case"Q":case"QQ":return parseNDigits(token.length,string);case"Qo":return match.ordinalNumber(string,{unit:"quarter"});case"QQQ":return match.quarter(string,{width:"abbreviated",context:"formatting"})||match.quarter(string,{width:"narrow",context:"formatting"});case"QQQQQ":return match.quarter(string,{width:"narrow",context:"formatting"});case"QQQQ":default:return match.quarter(string,{width:"wide",context:"formatting"})||match.quarter(string,{width:"abbreviated",context:"formatting"})||match.quarter(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=1&&value<=4},set:function(date,_flags,value,_options){return date.setUTCMonth(3*(value-1),1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"]},q:{priority:120,parse:function(string,token,match,_options){switch(token){case"q":case"qq":return parseNDigits(token.length,string);case"qo":return match.ordinalNumber(string,{unit:"quarter"});case"qqq":return match.quarter(string,{width:"abbreviated",context:"standalone"})||match.quarter(string,{width:"narrow",context:"standalone"});case"qqqqq":return match.quarter(string,{width:"narrow",context:"standalone"});case"qqqq":default:return match.quarter(string,{width:"wide",context:"standalone"})||match.quarter(string,{width:"abbreviated",context:"standalone"})||match.quarter(string,{width:"narrow",context:"standalone"})}},validate:function(_date,value,_options){return value>=1&&value<=4},set:function(date,_flags,value,_options){return date.setUTCMonth(3*(value-1),1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"]},M:{priority:110,parse:function(string,token,match,_options){var valueCallback=function(value){return value-1};switch(token){case"M":return parseNumericPattern(numericPatterns_month,string,valueCallback);case"MM":return parseNDigits(2,string,valueCallback);case"Mo":return match.ordinalNumber(string,{unit:"month",valueCallback:valueCallback});case"MMM":return match.month(string,{width:"abbreviated",context:"formatting"})||match.month(string,{width:"narrow",context:"formatting"});case"MMMMM":return match.month(string,{width:"narrow",context:"formatting"});case"MMMM":default:return match.month(string,{width:"wide",context:"formatting"})||match.month(string,{width:"abbreviated",context:"formatting"})||match.month(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=0&&value<=11},set:function(date,_flags,value,_options){return date.setUTCMonth(value,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]},L:{priority:110,parse:function(string,token,match,_options){var valueCallback=function(value){return value-1};switch(token){case"L":return parseNumericPattern(numericPatterns_month,string,valueCallback);case"LL":return parseNDigits(2,string,valueCallback);case"Lo":return match.ordinalNumber(string,{unit:"month",valueCallback:valueCallback});case"LLL":return match.month(string,{width:"abbreviated",context:"standalone"})||match.month(string,{width:"narrow",context:"standalone"});case"LLLLL":return match.month(string,{width:"narrow",context:"standalone"});case"LLLL":default:return match.month(string,{width:"wide",context:"standalone"})||match.month(string,{width:"abbreviated",context:"standalone"})||match.month(string,{width:"narrow",context:"standalone"})}},validate:function(_date,value,_options){return value>=0&&value<=11},set:function(date,_flags,value,_options){return date.setUTCMonth(value,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","M","w","I","D","i","e","c","t","T"]},w:{priority:100,parse:function(string,token,match,_options){switch(token){case"w":return parseNumericPattern(numericPatterns_week,string);case"wo":return match.ordinalNumber(string,{unit:"week"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=1&&value<=53},set:function(date,_flags,value,options){return Object(startOfUTCWeek.a)(function setUTCWeek(dirtyDate,dirtyWeek,options){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),week=Object(toInteger.a)(dirtyWeek),diff=Object(getUTCWeek.a)(date,options)-week;return date.setUTCDate(date.getUTCDate()-7*diff),date}(date,value,options),options)},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","i","t","T"]},I:{priority:100,parse:function(string,token,match,_options){switch(token){case"I":return parseNumericPattern(numericPatterns_week,string);case"Io":return match.ordinalNumber(string,{unit:"week"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=1&&value<=53},set:function(date,_flags,value,options){return Object(startOfUTCISOWeek.a)(function setUTCISOWeek(dirtyDate,dirtyISOWeek){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),isoWeek=Object(toInteger.a)(dirtyISOWeek),diff=Object(getUTCISOWeek.a)(date)-isoWeek;return date.setUTCDate(date.getUTCDate()-7*diff),date}(date,value,options),options)},incompatibleTokens:["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"]},d:{priority:90,subPriority:1,parse:function(string,token,match,_options){switch(token){case"d":return parseNumericPattern(numericPatterns_date,string);case"do":return match.ordinalNumber(string,{unit:"date"});default:return parseNDigits(token.length,string)}},validate:function(date,value,_options){var isLeapYear=isLeapYearIndex(date.getUTCFullYear()),month=date.getUTCMonth();return isLeapYear?value>=1&&value<=DAYS_IN_MONTH_LEAP_YEAR[month]:value>=1&&value<=DAYS_IN_MONTH[month]},set:function(date,_flags,value,_options){return date.setUTCDate(value),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","w","I","D","i","e","c","t","T"]},D:{priority:90,subPriority:1,parse:function(string,token,match,_options){switch(token){case"D":case"DD":return parseNumericPattern(numericPatterns_dayOfYear,string);case"Do":return match.ordinalNumber(string,{unit:"date"});default:return parseNDigits(token.length,string)}},validate:function(date,value,_options){return isLeapYearIndex(date.getUTCFullYear())?value>=1&&value<=366:value>=1&&value<=365},set:function(date,_flags,value,_options){return date.setUTCMonth(0,value),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"]},E:{priority:90,parse:function(string,token,match,_options){switch(token){case"E":case"EE":case"EEE":return match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"EEEEE":return match.day(string,{width:"narrow",context:"formatting"});case"EEEEEE":return match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"EEEE":default:return match.day(string,{width:"wide",context:"formatting"})||match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=0&&value<=6},set:function(date,_flags,value,options){return(date=setUTCDay(date,value,options)).setUTCHours(0,0,0,0),date},incompatibleTokens:["D","i","e","c","t","T"]},e:{priority:90,parse:function(string,token,match,options){var valueCallback=function(value){var wholeWeekDays=7*Math.floor((value-1)/7);return(value+options.weekStartsOn+6)%7+wholeWeekDays};switch(token){case"e":case"ee":return parseNDigits(token.length,string,valueCallback);case"eo":return match.ordinalNumber(string,{unit:"day",valueCallback:valueCallback});case"eee":return match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"eeeee":return match.day(string,{width:"narrow",context:"formatting"});case"eeeeee":return match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"eeee":default:return match.day(string,{width:"wide",context:"formatting"})||match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=0&&value<=6},set:function(date,_flags,value,options){return(date=setUTCDay(date,value,options)).setUTCHours(0,0,0,0),date},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"]},c:{priority:90,parse:function(string,token,match,options){var valueCallback=function(value){var wholeWeekDays=7*Math.floor((value-1)/7);return(value+options.weekStartsOn+6)%7+wholeWeekDays};switch(token){case"c":case"cc":return parseNDigits(token.length,string,valueCallback);case"co":return match.ordinalNumber(string,{unit:"day",valueCallback:valueCallback});case"ccc":return match.day(string,{width:"abbreviated",context:"standalone"})||match.day(string,{width:"short",context:"standalone"})||match.day(string,{width:"narrow",context:"standalone"});case"ccccc":return match.day(string,{width:"narrow",context:"standalone"});case"cccccc":return match.day(string,{width:"short",context:"standalone"})||match.day(string,{width:"narrow",context:"standalone"});case"cccc":default:return match.day(string,{width:"wide",context:"standalone"})||match.day(string,{width:"abbreviated",context:"standalone"})||match.day(string,{width:"short",context:"standalone"})||match.day(string,{width:"narrow",context:"standalone"})}},validate:function(_date,value,_options){return value>=0&&value<=6},set:function(date,_flags,value,options){return(date=setUTCDay(date,value,options)).setUTCHours(0,0,0,0),date},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"]},i:{priority:90,parse:function(string,token,match,_options){var valueCallback=function(value){return 0===value?7:value};switch(token){case"i":case"ii":return parseNDigits(token.length,string);case"io":return match.ordinalNumber(string,{unit:"day"});case"iii":return match.day(string,{width:"abbreviated",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"short",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback});case"iiiii":return match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback});case"iiiiii":return match.day(string,{width:"short",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback});case"iiii":default:return match.day(string,{width:"wide",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"abbreviated",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"short",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback})}},validate:function(_date,value,_options){return value>=1&&value<=7},set:function(date,_flags,value,options){return(date=function setUTCISODay(dirtyDate,dirtyDay){Object(requiredArgs.a)(2,arguments);var day=Object(toInteger.a)(dirtyDay);day%7==0&&(day-=7);var weekStartsOn=1,date=Object(toDate.a)(dirtyDate),currentDay=date.getUTCDay(),remainder=day%7,dayIndex=(remainder+7)%7,diff=(dayIndex=1&&value<=12},set:function(date,_flags,value,_options){var isPM=date.getUTCHours()>=12;return isPM&&value<12?date.setUTCHours(value+12,0,0,0):isPM||12!==value?date.setUTCHours(value,0,0,0):date.setUTCHours(0,0,0,0),date},incompatibleTokens:["H","K","k","t","T"]},H:{priority:70,parse:function(string,token,match,_options){switch(token){case"H":return parseNumericPattern(numericPatterns_hour23h,string);case"Ho":return match.ordinalNumber(string,{unit:"hour"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=23},set:function(date,_flags,value,_options){return date.setUTCHours(value,0,0,0),date},incompatibleTokens:["a","b","h","K","k","t","T"]},K:{priority:70,parse:function(string,token,match,_options){switch(token){case"K":return parseNumericPattern(numericPatterns_hour11h,string);case"Ko":return match.ordinalNumber(string,{unit:"hour"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=11},set:function(date,_flags,value,_options){return date.getUTCHours()>=12&&value<12?date.setUTCHours(value+12,0,0,0):date.setUTCHours(value,0,0,0),date},incompatibleTokens:["a","b","h","H","k","t","T"]},k:{priority:70,parse:function(string,token,match,_options){switch(token){case"k":return parseNumericPattern(numericPatterns_hour24h,string);case"ko":return match.ordinalNumber(string,{unit:"hour"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=1&&value<=24},set:function(date,_flags,value,_options){var hours=value<=24?value%24:value;return date.setUTCHours(hours,0,0,0),date},incompatibleTokens:["a","b","h","H","K","t","T"]},m:{priority:60,parse:function(string,token,match,_options){switch(token){case"m":return parseNumericPattern(numericPatterns_minute,string);case"mo":return match.ordinalNumber(string,{unit:"minute"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=59},set:function(date,_flags,value,_options){return date.setUTCMinutes(value,0,0),date},incompatibleTokens:["t","T"]},s:{priority:50,parse:function(string,token,match,_options){switch(token){case"s":return parseNumericPattern(numericPatterns_second,string);case"so":return match.ordinalNumber(string,{unit:"second"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=59},set:function(date,_flags,value,_options){return date.setUTCSeconds(value,0),date},incompatibleTokens:["t","T"]},S:{priority:30,parse:function(string,token,_match,_options){return parseNDigits(token.length,string,(function(value){return Math.floor(value*Math.pow(10,3-token.length))}))},set:function(date,_flags,value,_options){return date.setUTCMilliseconds(value),date},incompatibleTokens:["t","T"]},X:{priority:10,parse:function(string,token,_match,_options){switch(token){case"X":return parseTimezonePattern(timezonePatterns_basicOptionalMinutes,string);case"XX":return parseTimezonePattern(timezonePatterns_basic,string);case"XXXX":return parseTimezonePattern(timezonePatterns_basicOptionalSeconds,string);case"XXXXX":return parseTimezonePattern(timezonePatterns_extendedOptionalSeconds,string);case"XXX":default:return parseTimezonePattern(timezonePatterns_extended,string)}},set:function(date,flags,value,_options){return flags.timestampIsSet?date:new Date(date.getTime()-value)},incompatibleTokens:["t","T","x"]},x:{priority:10,parse:function(string,token,_match,_options){switch(token){case"x":return parseTimezonePattern(timezonePatterns_basicOptionalMinutes,string);case"xx":return parseTimezonePattern(timezonePatterns_basic,string);case"xxxx":return parseTimezonePattern(timezonePatterns_basicOptionalSeconds,string);case"xxxxx":return parseTimezonePattern(timezonePatterns_extendedOptionalSeconds,string);case"xxx":default:return parseTimezonePattern(timezonePatterns_extended,string)}},set:function(date,flags,value,_options){return flags.timestampIsSet?date:new Date(date.getTime()-value)},incompatibleTokens:["t","T","X"]},t:{priority:40,parse:function(string,_token,_match,_options){return parseAnyDigitsSigned(string)},set:function(_date,_flags,value,_options){return[new Date(1e3*value),{timestampIsSet:!0}]},incompatibleTokens:"*"},T:{priority:20,parse:function(string,_token,_match,_options){return parseAnyDigitsSigned(string)},set:function(_date,_flags,value,_options){return[new Date(value),{timestampIsSet:!0}]},incompatibleTokens:"*"}},formattingTokensRegExp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,longFormattingTokensRegExp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,escapedStringRegExp=/^'([^]*?)'?$/,doubleQuoteRegExp=/''/g,notWhitespaceRegExp=/\S/,unescapedLatinCharacterRegExp=/[a-zA-Z]/;function parse(dirtyDateString,dirtyFormatString,dirtyReferenceDate,dirtyOptions){Object(requiredArgs.a)(3,arguments);var dateString=String(dirtyDateString),formatString=String(dirtyFormatString),options=dirtyOptions||{},locale=options.locale||en_US.a;if(!locale.match)throw new RangeError("locale must contain match property");var localeFirstWeekContainsDate=locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var localeWeekStartsOn=locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(""===formatString)return""===dateString?Object(toDate.a)(dirtyReferenceDate):new Date(NaN);var i,subFnOptions={firstWeekContainsDate:firstWeekContainsDate,weekStartsOn:weekStartsOn,locale:locale},setters=[{priority:10,subPriority:-1,set:dateToSystemTimezone,index:0}],tokens=formatString.match(longFormattingTokensRegExp).map((function(substring){var firstCharacter=substring[0];return"p"===firstCharacter||"P"===firstCharacter?(0,longFormatters.a[firstCharacter])(substring,locale.formatLong,subFnOptions):substring})).join("").match(formattingTokensRegExp),usedTokens=[];for(i=0;i0&¬WhitespaceRegExp.test(dateString))return new Date(NaN);var uniquePrioritySetters=setters.map((function(setter){return setter.priority})).sort((function(a,b){return b-a})).filter((function(priority,index,array){return array.indexOf(priority)===index})).map((function(priority){return setters.filter((function(setter){return setter.priority===priority})).sort((function(a,b){return b.subPriority-a.subPriority}))})).map((function(setterArray){return setterArray[0]})),date=Object(toDate.a)(dirtyReferenceDate);if(isNaN(date))return new Date(NaN);var utcDate=Object(subMilliseconds.a)(date,Object(getTimezoneOffsetInMilliseconds.a)(date)),flags={};for(i=0;i{try{return window.BdApi.ReactDOM}catch(e){return null}})()||(()=>{try{return __webpack_require__(97).ReactDOM}catch(e){return null}})()||(()=>{try{return window.EDApi.ReactDOM}catch(e){return null}})(),module.exports=window.ReactDOM},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return endOfMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function endOfMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),month=date.getMonth();return date.setFullYear(date.getFullYear(),month+1,0),date.setHours(23,59,59,999),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfWeekYear}));var _getWeekYear_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(76),_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(8),_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function startOfWeekYear(dirtyDate,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(options.firstWeekContainsDate),year=Object(_getWeekYear_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate,dirtyOptions),firstWeek=new Date(0);firstWeek.setFullYear(year,0,firstWeekContainsDate),firstWeek.setHours(0,0,0,0);var date=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(firstWeek,dirtyOptions);return date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getDate}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getDate(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),dayOfMonth=date.getDate();return dayOfMonth}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setHours}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setHours(dirtyDate,dirtyHours){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),hours=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyHours);return date.setHours(hours),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setMinutes}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setMinutes(dirtyDate,dirtyMinutes){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),minutes=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyMinutes);return date.setMinutes(minutes),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subYears}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addYears_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(37),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subYears(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addYears_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setYear}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setYear(dirtyDate,dirtyYear){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),year=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyYear);return isNaN(date)?new Date(NaN):(date.setFullYear(year),date)}},function(module,exports){function _extends(){return module.exports=_extends=Object.assign||function(target){for(var i=1;i!e.startsWith("da-")).join(" "):className}FindReact(dom,traverseUp=0){const domFiber=dom[Object.keys(dom).find(key=>key.startsWith("__reactInternalInstance$"))];if(null==domFiber)return null;if(domFiber._currentElement){let compFiber=domFiber._currentElement._owner;for(let i=0;i{let parentFiber=fiber.return;for(;"string"==typeof parentFiber.type;)parentFiber=parentFiber.return;return parentFiber};let compFiber=GetCompFiber(domFiber);for(let i=0;ithis.formatJSObject(e)).join(",\n ")}\n]`:"[]";{const keys=Object.keys(obj);return 0===keys.length?"{}":`{\n ${keys.map(key=>{let original=key;return"symbol"==typeof key?key="["+String(key)+"]":"number"==typeof key?key=String(key):(console.log(key),(isNaN(parseInt(key[0]))||/[^\w\d_$]/g.test(key))&&(key=this.formatJSObject(key))),`${key}: ${this.formatJSObject(obj[original])}`})}\n}`}}getColor(color_name){return Lightcord.DiscordModules.constants.Colors[color_name.toUpperCase()]}firstLetterUppercase(str){return str?str[0].toUpperCase()+str.slice(1):""}executeXTimes(func,times){let results=[];for(let i=0;times>i;i++)results.push(func(i));return results}};class LightcordApiError extends Error{constructor(){super(...arguments),this.name="LightcordApiError"}}exports.LightcordApiError=LightcordApiError},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getWeek}));var _startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8),_startOfWeekYear_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(51),_toDate_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function getWeek(dirtyDate,options){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(dirtyDate),diff=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date,options).getTime()-Object(_startOfWeekYear_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(date,options).getTime();return Math.round(diff/6048e5)+1}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isSameYear}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isSameYear(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeft=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateLeft),dateRight=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateRight);return dateLeft.getFullYear()===dateRight.getFullYear()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isSameMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isSameMonth(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeft=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateLeft),dateRight=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateRight);return dateLeft.getFullYear()===dateRight.getFullYear()&&dateLeft.getMonth()===dateRight.getMonth()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isSameQuarter}));var _startOfQuarter_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(31),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isSameQuarter(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeftStartOfQuarter=Object(_startOfQuarter_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateLeft),dateRightStartOfQuarter=Object(_startOfQuarter_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateRight);return dateLeftStartOfQuarter.getTime()===dateRightStartOfQuarter.getTime()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getDay}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getDay(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getDay();return day}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCWeekYear}));var _toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_startOfUTCWeek_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(27),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function getUTCWeekYear(dirtyDate,dirtyOptions){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,dirtyOptions),year=date.getUTCFullYear(),options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var firstWeekOfNextYear=new Date(0);firstWeekOfNextYear.setUTCFullYear(year+1,0,firstWeekContainsDate),firstWeekOfNextYear.setUTCHours(0,0,0,0);var startOfNextYear=Object(_startOfUTCWeek_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(firstWeekOfNextYear,dirtyOptions),firstWeekOfThisYear=new Date(0);firstWeekOfThisYear.setUTCFullYear(year,0,firstWeekContainsDate),firstWeekOfThisYear.setUTCHours(0,0,0,0);var startOfThisYear=Object(_startOfUTCWeek_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(firstWeekOfThisYear,dirtyOptions);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}},function(module,exports){module.exports=function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype),subClass.prototype.constructor=subClass,subClass.__proto__=superClass}},function(module,exports,__webpack_require__){"use strict";var keys=__webpack_require__(107),hasSymbols="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),toStr=Object.prototype.toString,concat=Array.prototype.concat,origDefineProperty=Object.defineProperty,supportsDescriptors=origDefineProperty&&function(){var obj={};try{for(var _ in origDefineProperty(obj,"x",{enumerable:!1,value:obj}),obj)return!1;return obj.x===obj}catch(e){return!1}}(),defineProperty=function(object,name,value,predicate){var fn;(!(name in object)||"function"==typeof(fn=predicate)&&"[object Function]"===toStr.call(fn)&&predicate())&&(supportsDescriptors?origDefineProperty(object,name,{configurable:!0,enumerable:!1,value:value,writable:!0}):object[name]=value)},defineProperties=function(object,map){var predicates=arguments.length>2?arguments[2]:{},props=keys(map);hasSymbols&&(props=concat.call(props,Object.getOwnPropertySymbols(map)));for(var i=0;i=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getDay(),diff=6+(day=startTime&&time<=endTime}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return min}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function min(dirtyDatesArray){var datesArray,result;if(Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments),dirtyDatesArray&&"function"==typeof dirtyDatesArray.forEach)datesArray=dirtyDatesArray;else{if("object"!=typeof dirtyDatesArray||null===dirtyDatesArray)return new Date(NaN);datesArray=Array.prototype.slice.call(dirtyDatesArray)}return datesArray.forEach((function(dirtyDate){var currentDate=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate);(void 0===result||result>currentDate||isNaN(currentDate))&&(result=currentDate)})),result||new Date(NaN)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return max}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function max(dirtyDatesArray){var datesArray,result;if(Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments),dirtyDatesArray&&"function"==typeof dirtyDatesArray.forEach)datesArray=dirtyDatesArray;else{if("object"!=typeof dirtyDatesArray||null===dirtyDatesArray)return new Date(NaN);datesArray=Array.prototype.slice.call(dirtyDatesArray)}return datesArray.forEach((function(dirtyDate){var currentDate=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate);(void 0===result||resultuuidv1(),v4:()=>uuidv4()});exports.default=uuid},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return parseISO}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0),patterns={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},dateRegex=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,timeRegex=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,timezoneRegex=/^([+-])(\d{2})(?::?(\d{2}))?$/;function parseISO(argument,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var options=dirtyOptions||{},additionalDigits=null==options.additionalDigits?2:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(options.additionalDigits);if(2!==additionalDigits&&1!==additionalDigits&&0!==additionalDigits)throw new RangeError("additionalDigits must be 0, 1 or 2");if("string"!=typeof argument&&"[object String]"!==Object.prototype.toString.call(argument))return new Date(NaN);var date,dateStrings=splitDateString(argument);if(dateStrings.date){var parseYearResult=parseYear(dateStrings.date,additionalDigits);date=parseDate(parseYearResult.restDateString,parseYearResult.year)}if(isNaN(date)||!date)return new Date(NaN);var offset,timestamp=date.getTime(),time=0;if(dateStrings.time&&(time=parseTime(dateStrings.time),isNaN(time)||null===time))return new Date(NaN);if(!dateStrings.timezone){var dirtyDate=new Date(timestamp+time),result=new Date(dirtyDate.getUTCFullYear(),dirtyDate.getUTCMonth(),dirtyDate.getUTCDate(),dirtyDate.getUTCHours(),dirtyDate.getUTCMinutes(),dirtyDate.getUTCSeconds(),dirtyDate.getUTCMilliseconds());return result.setFullYear(dirtyDate.getUTCFullYear()),result}return offset=parseTimezone(dateStrings.timezone),isNaN(offset)?new Date(NaN):new Date(timestamp+time+offset)}function splitDateString(dateString){var timeString,dateStrings={},array=dateString.split(patterns.dateTimeDelimiter);if(array.length>2)return dateStrings;if(/:/.test(array[0])?(dateStrings.date=null,timeString=array[0]):(dateStrings.date=array[0],timeString=array[1],patterns.timeZoneDelimiter.test(dateStrings.date)&&(dateStrings.date=dateString.split(patterns.timeZoneDelimiter)[0],timeString=dateString.substr(dateStrings.date.length,dateString.length))),timeString){var token=patterns.timezone.exec(timeString);token?(dateStrings.time=timeString.replace(token[1],""),dateStrings.timezone=token[1]):dateStrings.time=timeString}return dateStrings}function parseYear(dateString,additionalDigits){var regex=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+additionalDigits)+"})|(\\d{2}|[+-]\\d{"+(2+additionalDigits)+"})$)"),captures=dateString.match(regex);if(!captures)return{year:null};var year=captures[1]&&parseInt(captures[1]),century=captures[2]&&parseInt(captures[2]);return{year:null==century?year:100*century,restDateString:dateString.slice((captures[1]||captures[2]).length)}}function parseDate(dateString,year){if(null===year)return null;var captures=dateString.match(dateRegex);if(!captures)return null;var isWeekDate=!!captures[4],dayOfYear=parseDateUnit(captures[1]),month=parseDateUnit(captures[2])-1,day=parseDateUnit(captures[3]),week=parseDateUnit(captures[4]),dayOfWeek=parseDateUnit(captures[5])-1;if(isWeekDate)return function validateWeekDate(_year,week,day){return week>=1&&week<=53&&day>=0&&day<=6}(0,week,dayOfWeek)?function dayOfISOWeekYear(isoWeekYear,week,day){var date=new Date(0);date.setUTCFullYear(isoWeekYear,0,4);var fourthOfJanuaryDay=date.getUTCDay()||7,diff=7*(week-1)+day+1-fourthOfJanuaryDay;return date.setUTCDate(date.getUTCDate()+diff),date}(year,week,dayOfWeek):new Date(NaN);var date=new Date(0);return function validateDate(year,month,date){return month>=0&&month<=11&&date>=1&&date<=(daysInMonths[month]||(isLeapYearIndex(year)?29:28))}(year,month,day)&&function validateDayOfYearDate(year,dayOfYear){return dayOfYear>=1&&dayOfYear<=(isLeapYearIndex(year)?366:365)}(year,dayOfYear)?(date.setUTCFullYear(year,month,Math.max(dayOfYear,day)),date):new Date(NaN)}function parseDateUnit(value){return value?parseInt(value):1}function parseTime(timeString){var captures=timeString.match(timeRegex);if(!captures)return null;var hours=parseTimeUnit(captures[1]),minutes=parseTimeUnit(captures[2]),seconds=parseTimeUnit(captures[3]);return function validateTime(hours,minutes,seconds){if(24===hours)return 0===minutes&&0===seconds;return seconds>=0&&seconds<60&&minutes>=0&&minutes<60&&hours>=0&&hours<25}(hours,minutes,seconds)?36e5*hours+6e4*minutes+1e3*seconds:NaN}function parseTimeUnit(value){return value&&parseFloat(value.replace(",","."))||0}function parseTimezone(timezoneString){if("Z"===timezoneString)return 0;var captures=timezoneString.match(timezoneRegex);if(!captures)return 0;var sign="+"===captures[1]?-1:1,hours=parseInt(captures[2]),minutes=captures[3]&&parseInt(captures[3])||0;return function validateTimezone(_hours,minutes){return minutes>=0&&minutes<=59}(0,minutes)?sign*(36e5*hours+6e4*minutes):NaN}var daysInMonths=[31,null,31,30,31,30,31,31,30,31,30,31];function isLeapYearIndex(year){return year%400==0||year%4==0&&year%100}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setSeconds}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setSeconds(dirtyDate,dirtySeconds){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),seconds=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtySeconds);return date.setSeconds(seconds),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getWeekYear}));var _startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function getWeekYear(dirtyDate,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),year=date.getFullYear(),options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var firstWeekOfNextYear=new Date(0);firstWeekOfNextYear.setFullYear(year+1,0,firstWeekContainsDate),firstWeekOfNextYear.setHours(0,0,0,0);var startOfNextYear=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(firstWeekOfNextYear,dirtyOptions),firstWeekOfThisYear=new Date(0);firstWeekOfThisYear.setFullYear(year,0,firstWeekContainsDate),firstWeekOfThisYear.setHours(0,0,0,0);var startOfThisYear=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(firstWeekOfThisYear,dirtyOptions);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isEqual}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isEqual(dirtyLeftDate,dirtyRightDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeft=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyLeftDate),dateRight=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyRightDate);return dateLeft.getTime()===dateRight.getTime()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getDaysInMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getDaysInMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),year=date.getFullYear(),monthIndex=date.getMonth(),lastDayOfMonth=new Date(0);return lastDayOfMonth.setFullYear(year,monthIndex+1,0),lastDayOfMonth.setHours(0,0,0,0),lastDayOfMonth.getDate()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getSeconds}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getSeconds(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),seconds=date.getSeconds();return seconds}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subWeeks}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addWeeks_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(26),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subWeeks(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addWeeks_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";function dateLongFormatter(pattern,formatLong){switch(pattern){case"P":return formatLong.date({width:"short"});case"PP":return formatLong.date({width:"medium"});case"PPP":return formatLong.date({width:"long"});case"PPPP":default:return formatLong.date({width:"full"})}}function timeLongFormatter(pattern,formatLong){switch(pattern){case"p":return formatLong.time({width:"short"});case"pp":return formatLong.time({width:"medium"});case"ppp":return formatLong.time({width:"long"});case"pppp":default:return formatLong.time({width:"full"})}}var longFormatters={p:timeLongFormatter,P:function dateTimeLongFormatter(pattern,formatLong){var dateTimeFormat,matchResult=pattern.match(/(P+)(p+)?/),datePattern=matchResult[1],timePattern=matchResult[2];if(!timePattern)return dateLongFormatter(pattern,formatLong);switch(datePattern){case"P":dateTimeFormat=formatLong.dateTime({width:"short"});break;case"PP":dateTimeFormat=formatLong.dateTime({width:"medium"});break;case"PPP":dateTimeFormat=formatLong.dateTime({width:"long"});break;case"PPPP":default:dateTimeFormat=formatLong.dateTime({width:"full"})}return dateTimeFormat.replace("{{date}}",dateLongFormatter(datePattern,formatLong)).replace("{{time}}",timeLongFormatter(timePattern,formatLong))}};__webpack_exports__.a=longFormatters},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCISOWeekYear}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_startOfUTCISOWeek_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(32),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function getUTCISOWeekYear(dirtyDate){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),year=date.getUTCFullYear(),fourthOfJanuaryOfNextYear=new Date(0);fourthOfJanuaryOfNextYear.setUTCFullYear(year+1,0,4),fourthOfJanuaryOfNextYear.setUTCHours(0,0,0,0);var startOfNextYear=Object(_startOfUTCISOWeek_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(fourthOfJanuaryOfNextYear),fourthOfJanuaryOfThisYear=new Date(0);fourthOfJanuaryOfThisYear.setUTCFullYear(year,0,4),fourthOfJanuaryOfThisYear.setUTCHours(0,0,0,0);var startOfThisYear=Object(_startOfUTCISOWeek_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(fourthOfJanuaryOfThisYear);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}},function(module,__webpack_exports__,__webpack_require__){"use strict";function assign(target,dirtyObject){if(null==target)throw new TypeError("assign requires that input parameter not be null or undefined");for(var property in dirtyObject=dirtyObject||{})dirtyObject.hasOwnProperty(property)&&(target[property]=dirtyObject[property]);return target}__webpack_require__.d(__webpack_exports__,"a",(function(){return assign}))},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCWeek}));var toDate=__webpack_require__(1),startOfUTCWeek=__webpack_require__(27),toInteger=__webpack_require__(2),getUTCWeekYear=__webpack_require__(64),requiredArgs=__webpack_require__(0);function startOfUTCWeekYear(dirtyDate,dirtyOptions){Object(requiredArgs.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate),year=Object(getUTCWeekYear.a)(dirtyDate,dirtyOptions),firstWeek=new Date(0);firstWeek.setUTCFullYear(year,0,firstWeekContainsDate),firstWeek.setUTCHours(0,0,0,0);var date=Object(startOfUTCWeek.a)(firstWeek,dirtyOptions);return date}function getUTCWeek(dirtyDate,options){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=Object(startOfUTCWeek.a)(date,options).getTime()-startOfUTCWeekYear(date,options).getTime();return Math.round(diff/6048e5)+1}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCISOWeek}));var toDate=__webpack_require__(1),startOfUTCISOWeek=__webpack_require__(32),getUTCISOWeekYear=__webpack_require__(82),requiredArgs=__webpack_require__(0);function startOfUTCISOWeekYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var year=Object(getUTCISOWeekYear.a)(dirtyDate),fourthOfJanuary=new Date(0);fourthOfJanuary.setUTCFullYear(year,0,4),fourthOfJanuary.setUTCHours(0,0,0,0);var date=Object(startOfUTCISOWeek.a)(fourthOfJanuary);return date}function getUTCISOWeek(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=Object(startOfUTCISOWeek.a)(date).getTime()-startOfUTCISOWeekYear(date).getTime();return Math.round(diff/6048e5)+1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getInternalTextInput=void 0;const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let TextInputModules,AllPreviews;exports.getInternalTextInput=function getInternalTextInput(){return TextInput.prototype.modules[0]};class TextInput extends React.PureComponent{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.state={value:props.value||""}}get modules(){return TextInputModules||(TextInputModules=[WebpackLoader_1.default.find(e=>e.default&&"TextInput"===e.default.displayName).default])}onChange(value,name){this.hasSet=!1,this.props.onChange(value,name,this),this.hasSet||(this.setState({value:value}),this.forceUpdate())}onFocus(ev,name){this.props.onFocus(ev,name,this)}onBlur(ev,name){this.props.onBlur(ev,name,this)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,value:this.state.value}))}get value(){return this.state.value||""}setValue(value){this.setState({value:value}),this.forceUpdate(),this.hasSet=!0}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textinput"}],[{size:"default"},{size:"mini"}],[{disabled:!1},{disabled:!0}],[{placeholder:""}],[{value:""}],[{error:null},{error:"Example error"}],[{maxLength:999}],[{className:""}],[{inputClassName:""}],[{id:"api-preview-textinput"}],[{onChange:(value,name)=>{}}]),AllPreviews)}}exports.default=TextInput,TextInput.defaultProps={name:"",size:"default",disabled:!1,placeholder:"",value:"",error:null,maxLength:999,className:"",inputClassName:"",id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default},TextInput.help={warn:"This should be used for single line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let TitleModules,AllPreviews;class Title extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.colorStandard),WebpackLoader_1.default.find(e=>"string"==typeof e.size32),WebpackLoader_1.default.find(e=>"string"==typeof e.h2)])}render(){let[colorModule,sizeModule,titleModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h2} ${titleModule.defaultColor} ${titleModule.defaultMarginh2}`;return props.className&&(className+=" "+props.className),React.createElement("h2",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=Title,Title.defaultProps={children:null,className:null}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function cloneNullProto(obj){let o=Object.create(null);return Object.keys(obj).forEach(k=>{o[k]=obj[k]}),o}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function excludeProperties(obj,props){let newObj={};return Object.keys(obj).forEach(k=>{props.includes(k)||(newObj[k]=obj[k])}),newObj}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notices=exports.events=void 0;const Notice_1=__webpack_require__(100),events_1=__webpack_require__(101);exports.events=new events_1.EventEmitter;class Notices extends React.Component{constructor(props){super(props),this.noticeHandler=this.noticeHandler.bind(this)}noticeHandler(){this.forceUpdate()}componentWillMount(){exports.events.on("noticeUpdate",this.noticeHandler)}componentWillUnmount(){exports.events.off("noticeUpdate",this.noticeHandler)}render(){if(!this.hasNotice)return null;const notice=exports.notices[0];return React.createElement(Notice_1.default,Object.assign({},notice))}get hasNotice(){return exports.notices.length>0}}exports.default=Notices,Notices.displayName="LightcordNotices",Notices.defaultProps={},exports.notices=[]},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subHours}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addHours_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(43),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subHours(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addHours_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subMinutes}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addMinutes_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(45),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subMinutes(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addMinutes_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,exports,__webpack_require__){"use strict";var warning=function(){};module.exports=warning},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var _react2=_interopRequireDefault(__webpack_require__(3)),_implementation2=_interopRequireDefault(__webpack_require__(148));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default=_react2.default.createContext||_implementation2.default,module.exports=exports.default},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Button_1=__webpack_require__(96),Switch_1=__webpack_require__(121),RadioGroup_1=__webpack_require__(122),TextArea_1=__webpack_require__(123),TextInput_1=__webpack_require__(86),Dropdown_1=__webpack_require__(124),Title_1=__webpack_require__(87),SettingsTitle_1=__webpack_require__(125),Tabs_1=__webpack_require__(126),SettingSubTitle_1=__webpack_require__(127),CodeBlock_1=__webpack_require__(128),cloneNullProto_1=__webpack_require__(88),Tooltip_1=__webpack_require__(129),ColorPicker_1=__webpack_require__(130),AlertBox_1=__webpack_require__(98),ErrorCatcher_1=__webpack_require__(134),Flex_1=__webpack_require__(102),Text_1=__webpack_require__(103),DateRange_1=__webpack_require__(104),DateInput_1=__webpack_require__(105),RadioGroupProxied=ErrorCatcher_1.createProxyErrorCatcherClass(RadioGroup_1.default);exports.default=cloneNullProto_1.default({inputs:cloneNullProto_1.default({Button:ErrorCatcher_1.createProxyErrorCatcherClass(Button_1.default),Switch:ErrorCatcher_1.createProxyErrorCatcherClass(Switch_1.default),Choices:RadioGroupProxied,RadioGroup:RadioGroupProxied,TextArea:ErrorCatcher_1.createProxyErrorCatcherClass(TextArea_1.default),TextInput:ErrorCatcher_1.createProxyErrorCatcherClass(TextInput_1.default),Dropdown:ErrorCatcher_1.createProxyErrorCatcherClass(Dropdown_1.default),ColorPicker:ErrorCatcher_1.createProxyErrorCatcherClass(ColorPicker_1.default),DateRange:ErrorCatcher_1.createProxyErrorCatcherClass(DateRange_1.default),DateInput:ErrorCatcher_1.createProxyErrorCatcherClass(DateInput_1.default)}),general:cloneNullProto_1.default({Title:ErrorCatcher_1.createProxyErrorCatcherClass(Title_1.default),SettingsTitle:ErrorCatcher_1.createProxyErrorCatcherClass(SettingsTitle_1.default),SettingSubTitle:ErrorCatcher_1.createProxyErrorCatcherClass(SettingSubTitle_1.default),Tabs:ErrorCatcher_1.createProxyErrorCatcherClass(Tabs_1.default),CodeBlock:ErrorCatcher_1.createProxyErrorCatcherClass(CodeBlock_1.default),Tooltip:ErrorCatcher_1.createProxyErrorCatcherClass(Tooltip_1.default),AlertBox:ErrorCatcher_1.createProxyErrorCatcherClass(AlertBox_1.default),Flex:ErrorCatcher_1.createProxyErrorCatcherClass(Flex_1.default),FlexChild:ErrorCatcher_1.createProxyErrorCatcherClass(Flex_1.FlexChild),ErrorCatcher:ErrorCatcher_1.default,Text:Text_1.default})})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let ButtonModules,AllPreviews;class Button extends React.Component{constructor(props){super(props),this.state={hover:!1}}get modules(){return ButtonModules||(ButtonModules=[WebpackLoader_1.default.findByUniqueProperties(["_horizontal"]),WebpackLoader_1.default.findByUniqueProperties(["colorTransparent"]),WebpackLoader_1.default.findByUniqueProperties(["buttonWrapper"]),WebpackLoader_1.default.findByUniqueProperties(["ButtonColors"])])}render(){let[flexModule,euhModule1,buttonModule,colorsModule]=this.modules,props={};this.props&&("color"in this.props&&(props.color=this.props.color),"children"in this.props&&(props.children=this.props.children),"onClick"in this.props&&(props.onClick=this.props.onClick),"onMouseDown"in this.props&&(props.onMouseDown=this.props.onMouseDown),"wrapper"in this.props&&(props.wrapper=!!this.props.wrapper),"look"in this.props&&(props.look=this.props.look),"size"in this.props&&(props.size=this.props.size),"hoverColor"in this.props&&(props.hoverColor=this.props.hoverColor),"disabled"in this.props?props.disabled=this.props.disabled:props.disabled=!1,"style"in this.props?props.style=this.props.style:props.style={},"onRightClick"in this.props?props.onRightClick=this.props.onRightClick:props.onRightClick=noop_1.default),props.color?(props.color=props.color.toLowerCase(),Button.Colors.includes(props.color)||(props.color=Button.Colors[0])):props.color=Button.Colors[0],props.look?(props.look=props.look.toLowerCase(),Button.Looks.includes(props.look)||(props.look=Button.Looks[0])):props.look=Button.Looks[0],props.size?(props.size=props.size.toLowerCase(),Button.Sizes.includes(props.size)||(props.size=Button.Sizes[0])):props.size=Button.Sizes[0],props.hoverColor?(props.hoverColor=props.hoverColor.toLowerCase(),Button.HoverColors.includes(props.hoverColor)||(props.hoverColor=Button.HoverColors[0])):props.hoverColor=Button.HoverColors[0];let buttonSize=props.size&&colorsModule.ButtonSizes[props.size.toUpperCase()]||"";buttonSize&&(buttonSize=" "+buttonSize);let hoverColor=props.hoverColor&&colorsModule.ButtonHovers[props.hoverColor.toUpperCase()]||"";hoverColor&&(hoverColor=" "+hoverColor),props.onClick="function"==typeof props.onClick?props.onClick:noop_1.default,"boolean"!=typeof props.wrapper&&(props.wrapper=!0),props.onMouseDown="function"==typeof props.onMouseDown?props.onMouseDown:noop_1.default;let hover=this.state.hover?euhModule1.hasHover:"";hover&&(hover=" "+hover);let classListButton=`${flexModule.flexChild} ${euhModule1.button} ${colorsModule.ButtonLooks[props.look.toUpperCase()]} ${colorsModule.ButtonColors[props.color.toUpperCase()]}${buttonSize}${hoverColor}${hover} ${euhModule1.grow}`.split(" ");"string"==typeof this.props.className&&this.props.className&&(classListButton=this.props.className.split(" ").concat(classListButton));let button=React.createElement("button",{type:"button",ref:"button",className:classListButton.join(" "),style:Object.assign({flex:"0 1 auto"},props.style),onClick:props.onClick,onMouseEnter:ev=>{hoverColor&&this.setState({hover:!0})},onMouseLeave:ev=>{hoverColor&&this.setState({hover:!1})},disabled:props.disabled,onContextMenu:()=>props.onRightClick(),onMouseDown:props.onMouseDown},React.createElement("div",{className:euhModule1.contents},props.children));return props.wrapper?React.createElement("div",{ref:"wrapper",className:buttonModule.buttonWrapper},button):button}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[];let colors=[];for(let color of Button.Colors)colors.push({color:color});AllPreviews.push(colors);let looks=[];for(let look of Button.Looks)looks.push({look:look});AllPreviews.push(looks);let sizes=[];for(let size of Button.Sizes)sizes.push({size:size});AllPreviews.push(sizes);let hovers=[];for(let hover of Button.HoverColors)hovers.push({hoverColor:hover});return AllPreviews.push(hovers),AllPreviews.push([{children:"Test Button"}]),AllPreviews.push([{onClick:()=>{}}]),AllPreviews.push([{wrapper:!1}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews})()}}exports.default=Button,Button.Colors=["brand","grey","red","green","yellow","primary","link","white","black","transparent"],Button.Looks=["filled","inverted","outlined","ghost","link","blank"],Button.Sizes=["small","medium","large","xlarge","min","max","icon","none"],Button.HoverColors=["default",...Button.Colors]},function(module,exports){module.exports=require("powercord/webpack")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let AlertBoxModules,AllPreviews;class AlertBox extends React.Component{get modules(){return AlertBoxModules||(AlertBoxModules=[WebpackLoader_1.default.find(e=>e.default&&"Markdown"===e.default.displayName&&e.default.defaultProps.parser).default])}render(){const[Markdown]=this.modules;let wrap,children;return"string"==typeof this.props.children?(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:this.props.children},Markdown.defaultProps)}),children=wrap.props.children):(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:""},Markdown.defaultProps)}),children=this.props.children),wrap.props.children=React.createElement("div",{className:"lc-alert-box lc-alert-box-"+this.props.type},React.createElement("blockquote",{className:"lc-blockquote"},children)),wrap}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"***Discord's*** **Markdown** _is_ [supported](https://google.com) or you can just insert your own react childs."}],[{type:"info"},{type:"success"},{type:"warn"},{type:"error"}]),AllPreviews)}}exports.default=AlertBox,AlertBox.defaultProps={type:"info",children:null},AlertBox.help={info:"You can insert markdown (as string) or normal react childs",warn:"All string will be interpreted as markdown. If you want raw string, pass an array with the string inside."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Notice=void 0;const Notices_1=__webpack_require__(90),Utils_1=__webpack_require__(58),uuid_1=__webpack_require__(73),cloneNullProto_1=__webpack_require__(88),events_1=__webpack_require__(101),Notice_1=__webpack_require__(100),excludeProperties_1=__webpack_require__(89),noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12);let soundModule;exports.default=new class DiscordTools{showNotice(data){if("object"!=typeof data||"string"!=typeof data.text)throw new Error("This notice is not valid. Given: "+Utils_1.default.formatJSObject(data));let newData=cloneNullProto_1.default(Object.assign({},Notice_1.defaultNotice,data));newData.id=uuid_1.default(),Notices_1.notices.push(newData),Notices_1.events.emit("noticeUpdate");return new Notice(newData)}get notices(){return Notices_1.notices.map(data=>new Notice(data))}showNotification(data){const notification=new window.Notification(data.title,excludeProperties_1.default(data,["title","onClick","onClose","onShow"]));return notification.onclick=data.onClick||noop_1.default,notification.onshow=data.onShow||noop_1.default,notification.onclose=data.onClose||noop_1.default,notification}createSound(sound){if(soundModule=soundModule||WebpackLoader_1.default.findByUniqueProperties(["createSound"]),!soundModule)throw new WebpackLoader_1.WebpackLoaderError("Couldn't find soundModule here.");return soundModule.createSound(sound)}playSound(sound){const created=this.createSound(sound);return created.play(),created}};const EventHandler=function(){this.removed!==this.state.removed&&this.removed&&this.emit("removed"),this.showing!==this.state.showing&&(this.showing?this.emit("showing",!0):this.emit("showing",!1)),this.index!==this.state.index&&this.emit("index",this.index)};class Notice extends events_1.EventEmitter{constructor(data){super(),this.nextTickRefresh=!1,this.data=data,this.state={removed:this.removed,showing:this.showing,index:this.index};let eventFunc=EventHandler.bind(this);Notices_1.events.on("noticeUpdate",eventFunc),this.on("removed",()=>{Notices_1.events.off("noticeUpdate",eventFunc)})}on(event,listener){return super.on(event,listener)}once(event,listener){return super.once(event,listener)}off(event,listener){return super.off(event,listener)}get removed(){return!Notices_1.notices.find(e=>e.id===this.id)}get showing(){return 0===this.index}get index(){return Notices_1.notices.findIndex(e=>e.id===this.id)}get id(){return this.data.id}update(data){for(let key in data)"id"!==key&&(this.data[key]=data[key]);this.nextTickRefresh||(this.nextTickRefresh=!0,process.nextTick(()=>{this.nextTickRefresh=!1,Notices_1.events.emit("noticeUpdate")}))}get text(){return this.data.text}set text(text){this.update({text:text})}get type(){return this.data.type}set type(type){this.update({type:type})}get buttonText(){return this.data.buttonText}set buttonText(buttonText){this.update({buttonText:buttonText})}get onClick(){return this.data.onClick}set onClick(onClick){this.update({onClick:onClick})}remove(){this.removed||(Notices_1.notices.splice(this.index,1),Notices_1.events.emit("noticeUpdate"))}}exports.Notice=Notice},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultNotice=void 0;const WebpackLoader_1=__webpack_require__(12),Notices_1=__webpack_require__(90),noop_1=__webpack_require__(20);let NoticeModules;exports.defaultNotice={text:"",id:"unknown id",onClick:noop_1.default,buttonText:null,type:"default"};class Notice extends React.Component{get modules(){return NoticeModules||(NoticeModules=[WebpackLoader_1.default.find(e=>e.noticeInfo)])}render(){const[noticeClasses]=this.modules,className=noticeClasses["notice"+this.props.type.slice(0,1).toUpperCase()+this.props.type.slice(1)];if(!className)return Notices_1.notices.pop(),setImmediate(()=>{Notices_1.events.emit("noticeUpdate")}),null;const button=this.props.buttonText?React.createElement("button",{className:noticeClasses.button,onClick:()=>{Notices_1.notices.pop(),this.props.onClick(),Notices_1.events.emit("noticeUpdate")}},this.props.buttonText):null;return React.createElement("div",{className:className},React.createElement("div",{className:noticeClasses.dismiss,role:"button",tabIndex:0,onClick:()=>{Notices_1.notices.pop(),Notices_1.events.emit("noticeUpdate")}}),this.props.text,button)}}exports.default=Notice,Notice.displayName="LightcordNotice",Notice.defaultProps=exports.defaultNotice},function(module,exports){module.exports=require("events")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FlexChild=void 0;const WebpackLoader_1=__webpack_require__(12);function getModules(){return FlexModules||(FlexModules=[(()=>{let Flex=WebpackLoader_1.default.find(e=>e.default&&"Flex"===e.default.displayName);return Flex&&(Flex=Flex.default),Flex})()])}let FlexModules,AllPreviews;class Flex extends React.Component{constructor(props){super(props)}get modules(){return getModules()}render(){let[FlexComponent]=this.modules;return React.createElement(FlexComponent,Object.assign({},this.props))}static get Direction(){return getModules()[0].Direction}static get Align(){return getModules()[0].Align}static get Justify(){return getModules()[0].Justify}static get Wrap(){return getModules()[0].Justify}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Your components here."}]),AllPreviews)}}exports.default=Flex;class FlexChild extends React.Component{get modules(){return getModules()}render(){const[FlexComponent]=this.modules;return React.createElement(FlexComponent.Child,Object.assign({},this.props))}}exports.FlexChild=FlexChild},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Constants=void 0;const React=__webpack_require__(3),Utils_1=__webpack_require__(58);class Text extends React.Component{render(){let classList=this.props.className?this.props.className.split(" "):[],style=this.props.style?Object.assign({},this.props.style):{};return style.flexGrow=0,this.props.weight&&classList.push("lc-text-weight"+Utils_1.default.firstLetterUppercase(this.props.weight)),this.props.color&&(style.color=Utils_1.default.getColor(this.props.color)||this.props.color),this.props.textCase&&classList.push("lc-text-cases"+Utils_1.default.firstLetterUppercase(this.props.textCase)),this.props.size&&classList.push(...exports.Constants.sizes[this.props.size]),this.props.family&&classList.push("lc-text-"+this.props.family),this.props.selectable&&classList.push("lc-text-selectable"),React.createElement(this.props.tag,{style:style,className:classList.join(" ")},this.props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[this.weights.map(e=>({weight:e})),this.colors.map(e=>({color:e})),this.textCases.map(e=>({textCase:e})),this.sizes.map(e=>({size:e})),this.familys.map(e=>({family:e})),[{children:"Test Text"}],["div","p",...Utils_1.default.executeXTimes(index=>"h"+(index+1),6)].map(e=>({tag:e})),[!0,!1].map(e=>({selectable:e}))])}static get colors(){return Object.keys(Lightcord.DiscordModules.constants.Colors).map(e=>e.toLowerCase())}}let AllPreviews;exports.default=Text,Text.defaultProps={tag:"div",children:null},Text.weights=["light","normal","medium","semibold","bold"],Text.textCases=["lowercase","uppercase"],Text.sizes=["small","medium","medium_small","medium_large","large"],Text.familys=["primary","code"],exports.Constants={sizes:{small:["lc-text-size12","lc-text-height16"],medium_small:["lc-text-size14","lc-text-height16"],medium:["lc-text-size16","lc-text-height20"],medium_large:["lc-text-size20","lc-text-height26"],large:["lc-text-size28","lc-text-height34"]}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DateConstants=void 0;const React=__webpack_require__(3),Flex_1=__webpack_require__(102),Text_1=__webpack_require__(103);exports.DateConstants={DATE_FORMAT:"yyyy-MM-dd"};const DateInput_1=__webpack_require__(105);let AllPreviews;class DateRange extends React.Component{constructor(props){super(props),this.state={end:props.defaultEnd,start:props.defaultStart}}static get AllPreviews(){return AllPreviews||(AllPreviews=[[{dateFormat:exports.DateConstants.DATE_FORMAT},{dateFormat:"dd/MM/yyyy"},{dateFormat:"MM/dd/yyyy"}],[{defaultEnd:new Date(Date.now()+6048e5)}],[{defaultStart:new Date(Date.now()-6048e5)}],[{onChange:(start,end)=>{}}],[{maxDate:new Date(Date.now()+12096e5)},{maxDate:null}],[{minDate:new Date(Date.now()-12096e5)},{minDate:null}],[{filterDate:date=>!0}],[{showMonthYearPicker:!1},{showMonthYearPicker:!0}]])}componentDidUpdate(oldProps){let defaultStart=this.props.defaultStart;oldProps.defaultStart!==defaultStart&&this.setState({start:defaultStart})}handleEndChange(end){this.setState({end:end},this.handleChange)}handleStartChange(start){this.setState({start:start},this.handleChange)}getMaxDate(){return this.props.maxDate?this.props.maxDate:null}getMinDate(){return this.props.minDate?this.props.minDate:null}handleChange(){const onChange=this.props.onChange;if(null==onChange)return;const state=this.state;onChange(state.start,state.end)}render(){const state=this.state,start=state.start,end=state.end,props=this.props,filterDate=props.filterDate,showMonthYearPicker=props.showMonthYearPicker;return React.createElement(Flex_1.default,{className:"lc-dateWrapper"},React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(Text_1.default,{className:"lc-dateLabel",size:"small",textCase:"uppercase",weight:"semibold",color:"primary_dark_300"},"FROM")),React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(DateInput_1.default,{defaultValue:start,minDate:this.getMinDate(),maxDate:end,onChange:this.handleStartChange.bind(this),startDate:start,endDate:end,filterDate:filterDate,selectsStart:!0,showMonthYearPicker:showMonthYearPicker})),React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(Text_1.default,{className:"lc-dateLabel",size:"small",textCase:"uppercase",weight:"semibold",color:"primary_dark_300"},"TO")),React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(DateInput_1.default,{defaultValue:end,minDate:start,maxDate:this.getMaxDate(),onChange:this.handleEndChange.bind(this),startDate:start,endDate:end,filterDate:filterDate,selectsStart:!0,showMonthYearPicker:showMonthYearPicker})))}}exports.default=DateRange,DateRange.defaultProps={dateFormat:exports.DateConstants.DATE_FORMAT},DateRange.displayName="DateRange",DateRange.help={warn:"This component is still `experimental`. Please report issues to [Lightcord's developers](https://github.com/Lightcord/Lightcord/issues)."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CalendarPicker=exports.AnimatedCalendarPicker=exports.isDateValid=exports.getEmotion=exports.getDateFNS=void 0;const React=__webpack_require__(3),DateRange_1=__webpack_require__(104),WebpackLoader_1=__webpack_require__(12),TextInput_1=__webpack_require__(86),Button_1=__webpack_require__(96),ReactDOM=__webpack_require__(49),DatePicker=__webpack_require__(153);let _datefns,DateInputModules,AllPreviews,AnimatedCalendarPickerModules;function getDateFNS(){return _datefns||(_datefns=__webpack_require__(152))}function getEmotion(){return window.__SECRET_EMOTION__}exports.getDateFNS=getDateFNS,exports.getEmotion=getEmotion;class DateInput extends React.Component{constructor(props){super(props),this.state={inputResetKey:0,isCalendarPickerOpen:!1,calendarRight:null,calendarTop:null,value:props.defaultValue}}get modules(){return DateInputModules||(DateInputModules=[WebpackLoader_1.default.find(e=>e.default&&"Clickable"===e.default.displayName),WebpackLoader_1.default.find(e=>e.default&&"TransitionGroup"===e.default.displayName)])}componentDidUpdate(e){const defaultValue=this.props.defaultValue,dateFormat=this.props.dateFormat;if(e.defaultValue!==defaultValue&&null!=defaultValue){if(!this.inputRef)return;let str=getDateFNS().format(defaultValue,dateFormat);this.inputRef.value=str}}closeCalendarPicker(){this.setState({isCalendarPickerOpen:!1})}getCurrentValue(){let value=this.state.value,dateFormat=this.props.dateFormat;if(value)return isDateValid(value)?getDateFNS().format(value,dateFormat):null}handleDateChange(value){this.closeCalendarPicker();const onChange=this.props.onChange,name=this.props.name;this.setState(state=>({value:value,inputResetKey:state.inputResetKey+1}),(function(){null!=onChange&&onChange(value,name)}))}handleInputBlur(ev){const value=this.state.value,newvalue=ev.currentTarget.value,iso=getDateFNS().parseISO(newvalue);isDateValid(iso)&&value&&iso.valueOf()!==value.valueOf()&&this.setState((function(state){return{value:iso,inputResetKey:state.inputResetKey+1}}),(function(){const props=this.props,onChange=props.onChange,name=props.name;onChange&&onChange(iso,name)}))}toggleCalendarVisibility(ev){const rect=ev.currentTarget.getBoundingClientRect(),bottom=rect.bottom,right=rect.right,innerWidth=window.innerWidth;this.setState((function(state){return{isCalendarPickerOpen:!state.isCalendarPickerOpen,calendarRight:innerWidth-right,calendarTop:bottom}}))}setRef(ref){this.inputRef=ref}renderCalendarPicker(){let state=this.state,calendarRight=state.calendarRight,calendarTop=state.calendarTop,isCalendarPickerOpen=state.isCalendarPickerOpen,value=state.value,props=this.props,minDate=props.minDate,maxDate=props.maxDate,endDate=props.endDate,filterDate=props.filterDate,startDate=props.startDate,selectsEnd=props.selectsEnd,selectsStart=props.selectsStart,isModalInput=props.isModalInput,y=props.showMonthYearPicker;return isCalendarPickerOpen?React.createElement(AnimatedCalendarPicker,{value:value||void 0,onClickOutside:this.closeCalendarPicker.bind(this),onSelect:this.handleDateChange.bind(this),minDate:minDate,maxDate:maxDate,endDate:endDate,filterDate:filterDate,startDate:startDate,selectsEnd:selectsEnd,selectsStart:selectsStart,right:calendarRight,top:calendarTop,isModalInput:isModalInput,showMonthYearPicker:y}):null}render(){const[Clickable,TransitionGroup]=this.modules;let name=this.props.name;return React.createElement(Clickable.default,{className:getEmotion().css({position:"relative"})},React.createElement(TextInput_1.getInternalTextInput(),{inputClassName:getEmotion().css({paddingRight:"32px"}),name:name,onBlur:this.handleInputBlur.bind(this),defaultValue:this.getCurrentValue(),inputRef:this.setRef.bind(this)}),React.createElement(Button_1.default,{className:getEmotion().css({"&:hover":{opacity:1},position:"absolute",right:0,top:"50%",opacity:.6,padding:"8px",transform:"translateY(-50%)",transition:"opacity .125s"}),color:"transparent",onMouseDown:this.toggleCalendarVisibility.bind(this),wrapper:!1}),ReactDOM.createPortal(React.createElement(TransitionGroup.default,{component:"div",transitionAppear:!1},this.renderCalendarPicker()),window.document.body))}static get AllPreviews(){return AllPreviews||(AllPreviews=[[{dateFormat:DateRange_1.DateConstants.DATE_FORMAT},{dateFormat:"dd/MM/yyyy"},{dateFormat:"MM/dd/yyyy"}],[{defaultValue:new Date},{defaultValue:null},{defaultValue:new Date(1597061085498)}],[{filterDate:date=>!0},{filterDate:date=>0===date.getDay()}],[{isModalInput:!0},{isModalInput:!1}],[{maxDate:null},{maxDate:new Date(Date.now()+6048e5)}],[{minDate:null},{minDate:new Date(Date.now()-6048e5)}],[{onChange:(value,name)=>{}}],[{selectsStart:null},{selectsStart:new Date(Date.now()-1728e5)}],[{selectsEnd:null},{selectsEnd:new Date(Date.now()+1728e5)}],[{showMonthYearPicker:!1},{showMonthYearPicker:!0}],[{startDate:null},{endDate:null}],[{name:"api-preview-dateinput"}]])}}function isDateValid(date){return(date instanceof Date||"object"==typeof date||"[object Date]"===Object.prototype.toString.call(date))&&!isNaN(date.valueOf())}exports.default=DateInput,DateInput.defaultProps={dateFormat:DateRange_1.DateConstants.DATE_FORMAT,isModalInput:!0},DateInput.help={warn:"This component is still `experimental`. Please report issues to [Lightcord's developers](https://github.com/Lightcord/Lightcord/issues)."},exports.isDateValid=isDateValid;class AnimatedCalendarPicker extends React.Component{constructor(props){super(props),this.state={menuAnimation:new this.modules[0].default.Value(0)}}get modules(){return AnimatedCalendarPickerModules||(AnimatedCalendarPickerModules=[WebpackLoader_1.default.findByUniqueProperties(["Value","timing"])])}componentWillEnter(ev){this.modules[0].default.timing(this.state.menuAnimation,{toValue:1,duration:150}).start(ev)}componentWillLeave(e){this.modules[0].default.timing(this.state.menuAnimation,{toValue:0,duration:150}).start(e)}render(){let props=this.props,value=props.value,onClickOutside=props.onClickOutside,onSelect=props.onSelect,minDate=props.minDate,maxDate=props.maxDate,endDate=props.endDate,filterDate=props.filterDate,startDate=props.startDate,selectsEnd=props.selectsEnd,selectsStart=props.selectsStart,top=props.top,right=props.right,isModalInput=props.isModalInput,showMonthYearPicker=props.showMonthYearPicker,menuAnimation=this.state.menuAnimation,interpolation=menuAnimation.interpolate({inputRange:[0,1],outputRange:["-10px","0px"]});const emotion=getEmotion();return React.createElement(this.modules[0].default.div,{className:[emotion.css({marginRight:"1px",margintop:"6px",position:"fixed",zIndex:2}),isModalInput?emotion.css({zIndex:1e4}):null].filter(e=>e).join(" "),style:{opacity:menuAnimation,right:right,top:top,transform:[{translateY:interpolation}]}},React.createElement(CalendarPicker,{minDate:minDate,maxDate:maxDate,endDate:endDate,filterDate:filterDate,startDate:startDate,selectsEnd:selectsEnd,selectsStart:selectsStart,value:value,onSelect:onSelect,onClickOutside:onClickOutside,showMonthYearPicker:showMonthYearPicker,onChange:console.log}))}}exports.AnimatedCalendarPicker=AnimatedCalendarPicker,AnimatedCalendarPicker.displayName="AnimatedCalendarPicker";class CalendarPicker extends React.Component{render(){var e=this.props,t=e.onClickOutside,r=e.onSelect,n=e.locale,l=e.value,o=e.endDate,u=e.filterDate,f=e.startDate,c=e.minDate,d=e.maxDate,p=e.selectsEnd,y=e.selectsStart,v=e.showMonthYearPicker;return React.createElement("div",{className:"lc-calendarPicker"},React.createElement(DatePicker.default,{fixedHeight:!0,inline:!0,selected:l,locale:n,onClickOutside:t,onSelect:r,onChange:r,endDate:o,filterDate:u,startDate:f,minDate:c,maxDate:d,selectsEnd:p,selectsStart:y,showMonthYearPicker:v}))}}exports.CalendarPicker=CalendarPicker,CalendarPicker.defaultProps={value:new Date},CalendarPicker.displayName="CalendarPicker"},function(module,exports,__webpack_require__){module.exports=__webpack_require__(135)()},function(module,exports,__webpack_require__){"use strict";var slice=Array.prototype.slice,isArgs=__webpack_require__(108),origKeys=Object.keys,keysShim=origKeys?function keys(o){return origKeys(o)}:__webpack_require__(137),originalKeys=Object.keys;keysShim.shim=function shimObjectKeys(){Object.keys?function(){var args=Object.keys(arguments);return args&&args.length===arguments.length}(1,2)||(Object.keys=function keys(object){return isArgs(object)?originalKeys(slice.call(object)):originalKeys(object)}):Object.keys=keysShim;return Object.keys||keysShim},module.exports=keysShim},function(module,exports,__webpack_require__){"use strict";var toStr=Object.prototype.toString;module.exports=function isArguments(value){var str=toStr.call(value),isArgs="[object Arguments]"===str;return isArgs||(isArgs="[object Array]"!==str&&null!==value&&"object"==typeof value&&"number"==typeof value.length&&value.length>=0&&"[object Function]"===toStr.call(value.callee)),isArgs}},function(module,exports,__webpack_require__){"use strict";var bind=__webpack_require__(110),GetIntrinsic=__webpack_require__(141),$apply=GetIntrinsic("%Function.prototype.apply%"),$call=GetIntrinsic("%Function.prototype.call%"),$reflectApply=GetIntrinsic("%Reflect.apply%",!0)||bind.call($call,$apply);module.exports=function callBind(){return $reflectApply(bind,$call,arguments)},module.exports.apply=function applyBind(){return $reflectApply(bind,$apply,arguments)}},function(module,exports,__webpack_require__){"use strict";var implementation=__webpack_require__(140);module.exports=Function.prototype.bind||implementation},function(module,exports,__webpack_require__){"use strict";var origSymbol=global.Symbol,hasSymbolSham=__webpack_require__(142);module.exports=function hasNativeSymbols(){return"function"==typeof origSymbol&&("function"==typeof Symbol&&("symbol"==typeof origSymbol("foo")&&("symbol"==typeof Symbol("bar")&&hasSymbolSham())))}},function(module,exports,__webpack_require__){"use strict";var numberIsNaN=function(value){return value!=value};module.exports=function is(a,b){return 0===a&&0===b?1/a==1/b:a===b||!(!numberIsNaN(a)||!numberIsNaN(b))}},function(module,exports,__webpack_require__){"use strict";var implementation=__webpack_require__(112);module.exports=function getPolyfill(){return"function"==typeof Object.is?Object.is:implementation}},function(module,exports,__webpack_require__){"use strict";var $Object=Object,$TypeError=TypeError;module.exports=function flags(){if(null!=this&&this!==$Object(this))throw new $TypeError("RegExp.prototype.flags getter called on non-object");var result="";return this.global&&(result+="g"),this.ignoreCase&&(result+="i"),this.multiline&&(result+="m"),this.dotAll&&(result+="s"),this.unicode&&(result+="u"),this.sticky&&(result+="y"),result}},function(module,exports,__webpack_require__){"use strict";var implementation=__webpack_require__(114),supportsDescriptors=__webpack_require__(66).supportsDescriptors,$gOPD=Object.getOwnPropertyDescriptor,$TypeError=TypeError;module.exports=function getPolyfill(){if(!supportsDescriptors)throw new $TypeError("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");if("gim"===/a/gim.flags){var descriptor=$gOPD(RegExp.prototype,"flags");if(descriptor&&"function"==typeof descriptor.get&&"boolean"==typeof/a/.dotAll)return descriptor.get}return implementation}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isImported=exports.isNative=void 0,exports.isNative=void 0===window.BDModules,exports.isImported=void 0!==window.BDModules},function(module,exports){module.exports=function _objectWithoutPropertiesLoose(source,excluded){if(null==source)return{};var key,i,target={},sourceKeys=Object.keys(source);for(i=0;i=0||(target[key]=source[key]);return target}},function(module,exports,__webpack_require__){var objectKeys=__webpack_require__(107),isArguments=__webpack_require__(138),is=__webpack_require__(139),isRegex=__webpack_require__(144),flags=__webpack_require__(145),isDate=__webpack_require__(147),getTime=Date.prototype.getTime;function deepEqual(actual,expected,options){var opts=options||{};return!!(opts.strict?is(actual,expected):actual===expected)||(!actual||!expected||"object"!=typeof actual&&"object"!=typeof expected?opts.strict?is(actual,expected):actual==expected:function objEquiv(a,b,opts){var i,key;if(typeof a!=typeof b)return!1;if(isUndefinedOrNull(a)||isUndefinedOrNull(b))return!1;if(a.prototype!==b.prototype)return!1;if(isArguments(a)!==isArguments(b))return!1;var aIsRegex=isRegex(a),bIsRegex=isRegex(b);if(aIsRegex!==bIsRegex)return!1;if(aIsRegex||bIsRegex)return a.source===b.source&&flags(a)===flags(b);if(isDate(a)&&isDate(b))return getTime.call(a)===getTime.call(b);var aIsBuffer=isBuffer(a),bIsBuffer=isBuffer(b);if(aIsBuffer!==bIsBuffer)return!1;if(aIsBuffer||bIsBuffer){if(a.length!==b.length)return!1;for(i=0;i=0;i--)if(ka[i]!=kb[i])return!1;for(i=ka.length-1;i>=0;i--)if(key=ka[i],!deepEqual(a[key],b[key],opts))return!1;return!0}(actual,expected,opts))}function isUndefinedOrNull(value){return null==value}function isBuffer(x){return!(!x||"object"!=typeof x||"number"!=typeof x.length)&&("function"==typeof x.copy&&"function"==typeof x.slice&&!(x.length>0&&"number"!=typeof x[0]))}module.exports=deepEqual},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),components_1=__webpack_require__(95),uuid_1=__webpack_require__(73),Utils_1=__webpack_require__(58),DiscordTools_1=__webpack_require__(99),patchers=__webpack_require__(150),excludeProperties_1=__webpack_require__(89),cloneNullProto_1=__webpack_require__(88),noop_1=__webpack_require__(20),Unfreeze_1=__webpack_require__(151),environnement_1=__webpack_require__(116);__webpack_require__(3),__webpack_require__(49),patchers.patch();const LightcordApi={WebpackLoader:WebpackLoader_1.default,Components:components_1.default,uuid:uuid_1.default,Utils:Utils_1.default,DiscordTools:DiscordTools_1.default,_:{excludeProperties:excludeProperties_1.default,cloneNullProto:cloneNullProto_1.default,NOOP:noop_1.default,unfreeze:Unfreeze_1.default},get isNative(){return environnement_1.isNative},get isImported(){return environnement_1.isImported}};exports.default=LightcordApi,Object.assign(window.Lightcord.Api,LightcordApi)},function(module,exports,__webpack_require__){"use strict";let req;function filterDangerous(mods){return mods.map(e=>function protect(exports){let theModule=exports.exports,mod=theModule.default;if(!mod)return exports;if(mod.remove&&mod.set&&mod.clear&&mod.get&&!mod.sort)return null;if(!mod.getToken&&!mod.getEmail&&!mod.showToken)return exports;const proxy=new Proxy(mod,{getOwnPropertyDescriptor:function(obj,prop){if("getToken"!==prop&&"getEmail"!==prop&&"showToken"!==prop)return Object.getOwnPropertyDescriptor(obj,prop)},get:function(obj,func){return"getToken"==func&&obj.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==func&&obj.getEmail?()=>"puppet11112@gmail.com":"showToken"==func&&obj.showToken?()=>!0:"__proto__"==func&&obj.__proto__?proxy:obj[func]}});return Object.assign({},exports,{exports:Object.assign({},theModule,{default:proxy})})}(e))}Object.defineProperty(exports,"__esModule",{value:!0}),setReq();function setReq(){try{req=window.webpackJsonp.push([[],{__extra_id__:(mdl,exports,req)=>mdl.exports=req},[["__extra_id__"]]]),req&&(delete req.m.__extra_id__,delete req.c.__extra_id__)}catch(e){req=void 0}}exports.default=new class Webpackloader{get modules(){return req?filterDangerous(Object.values(req.c).filter(e=>e&&e.exports)):(setReq(),req?filterDangerous(Object.values(req.c).filter(e=>e&&e.exports)):[])}get(ids,modules){if("function"==typeof ids)return(modules||this.modules).map(mdl=>mdl&&void 0!==mdl.exports?mdl.exports:null).filter(e=>e).filter(ids);if(Array.isArray(ids))return modules=modules||this.modules,ids.map(id=>this.get(id,modules));{let module=(modules=modules||this.modules).filter(e=>!!e).find(e=>e.i===ids);if(!module)return;return module.exports}}get default(){return this}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let SwitchModules,AllPreviews;class Switch extends React.Component{constructor(props){super(props),this.state={value:props.value||!1},this.onChange=this.onChange.bind(this)}get modules(){return SwitchModules||(SwitchModules=[WebpackLoader_1.default.find(e=>e.default&&"Switch"===e.default.displayName).default])}render(){let[SwitchComponent]=this.modules,props=this.props;return React.createElement(SwitchComponent,{id:props.id,onChange:this.onChange,value:this.state.value||!1,fill:props.fill,theme:SwitchComponent.Themes[props.theme.toUpperCase()],disabled:props.disabled,className:props.className,size:SwitchComponent.Sizes[props.size.toUpperCase()],style:props.style})}onChange(value){this.props.onChange(!this.state.value),this.setState({value:!this.state.value})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{onChange:value=>{}}]),AllPreviews.push([{value:!1}],[{theme:"default"},{theme:"clear"}],[{disabled:!1},{disabled:!0}],[{id:"api-preview-switch"}],[{fill:null}],[{size:"default"},{size:"mini"}],[{style:{}}]),AllPreviews)}}exports.default=Switch,Switch.defaultProps={id:null,onChange:noop_1.default,value:!1,fill:null,theme:"default",disabled:!1,className:null,size:"default",style:{}},Switch.help={error:"The `clear` option doesn't work well on light theme."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12);let RadioGroupModule,AllPreviews;class RadioGroup extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value}}onChange(ev){this.props.onChange(ev.value),this.setState({value:ev.value})}get modules(){return RadioGroupModule||(RadioGroupModule=[WebpackLoader_1.default.find(e=>e.default&&"RadioGroup"===e.default.displayName).default])}render(){let[RadioGroupComponent]=this.modules,props=this.props;return React.createElement(RadioGroupComponent,{options:props.options,onChange:this.onChange,value:this.state.value,disabled:props.disabled,size:RadioGroupComponent.Sizes[props.size.toUpperCase()],itemType:RadioGroupComponent.ItemTypes[props.itemType.toUpperCase()],infoClassName:props.infoClassName})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{options:[{value:"option1",name:"Option 1",desc:"description 1"},{value:"option2",name:"Option 2",desc:"description 2"},{value:"option3",name:"Option 3",desc:"description 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{size:"medium"},{size:"small"}],[{itemType:"bar"},{itemType:"panel"}]),AllPreviews)}}exports.default=RadioGroup,RadioGroup.defaultProps={options:[{value:"none",name:"No options",desc:"No options was passed to Choices. If you meant to display no options at all, please pass an empty array.",color:"#f04747"}],value:null,disabled:!1,size:"medium",itemType:"bar",infoClassName:null,onChange:noop_1.default}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let TextAreaModules,AllPreviews;class TextArea extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onKeyDown=this.onKeyDown.bind(this),this.state={value:props.value||""}}get modules(){return TextAreaModules||(TextAreaModules=[WebpackLoader_1.default.find(e=>e.default&&"TextArea"===e.default.displayName).default])}onChange(value,name){this.props.onChange(value,name),this.setState({value:value})}onFocus(ev,name){this.props.onFocus(ev,name)}onBlur(ev,name){this.props.onBlur(ev,name)}onKeyDown(ev){this.props.onKeyDown(ev)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,value:this.state.value}))}get value(){return this.state.value||""}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textarea"}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews.push([{placeholder:null}]),AllPreviews.push([{autoFocus:!1},{autoFocus:!0}]),AllPreviews.push([{resizeable:!1},{resizeable:!0}]),AllPreviews.push([{flex:!1},{flex:!0}]),AllPreviews.push([{autosize:!1},{autosize:!0}]),AllPreviews.push([{rows:3},{rows:2},{rows:1}]),AllPreviews.push([{value:""}]),AllPreviews.push([{error:null},{error:"Example error"}]),AllPreviews.push([{maxLength:100}]),AllPreviews.push([{className:""}]),AllPreviews.push([{inputClassName:""}]),AllPreviews.push([{id:"api-preview-textarea"}]),AllPreviews)}}exports.default=TextArea,TextArea.defaultProps={name:null,disabled:!1,placeholder:null,autoFocus:!1,resizeable:!1,flex:!1,autosize:!1,rows:3,value:"",error:null,maxLength:null,className:null,id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default,onKeyDown:noop_1.default},TextArea.help={warn:"This should be used for multi line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12);let DropdownModules,AllPreviews;class Dropdown extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value||null}}onChange(value){this.props.onChange(value),this.setState({value:value})}get modules(){return DropdownModules||(DropdownModules=[WebpackLoader_1.default.find(e=>e.default&&"SelectTempWrapper"===e.default.displayName).default])}render(){let[DropdownComponent]=this.modules,props=this.props;return React.createElement(DropdownComponent,Object.assign({},props,{onChange:this.onChange,value:this.state.value}))}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{error:null},{error:"An error occured"}],[{options:[{value:"option1",label:"Option 1"},{value:"option2",label:"Option 2"},{value:"option3",label:"Option 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{searchable:!0},{searchable:!1}],[{clearable:!0},{clearable:!1}],[{isMulti:!1},{isMulti:!0}]),AllPreviews)}}exports.default=Dropdown,Dropdown.defaultProps={className:null,error:null,options:[{value:"none",label:"No options - No options was passed to Dropdown. If you meant to put an empty dropdown, input an empty array."}],valueRenderer:null,multiValueRenderer:null,optionRenderer:null,onChange:noop_1.default,value:null,disabled:!1,searchable:!1,clearable:!1,styleOverrides:null,lightThemeColorOverrides:null,darkThemeColorOverrides:null,isMulti:!1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),Title_1=__webpack_require__(87);let TitleModules,AllPreviews;class SettingsTitle extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60)])}render(){let[marginModule]=this.modules,props=this.props,className=`${marginModule.marginTop60} ${marginModule.marginBottom20}`;return props.className&&(className=0+props.className),React.createElement(Title_1.default,{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingsTitle,SettingsTitle.defaultProps={children:[""],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Tab=void 0;const noop_1=__webpack_require__(20),Title_1=__webpack_require__(87);class Tabs extends React.Component{constructor(props){super(props),this.tabsElements=[],this.state={active:this.props.active||null}}get tabs(){return this.props.tabs||[]}changeTab(tab){tab!==this.state.active&&(this.props.onChange&&this.props.onChange(tab),this.setState({active:tab}),this.tabsElements.forEach(e=>e.setActive(tab===e.props.id)))}render(){return React.createElement("div",{className:"lc-tabWrapper",style:this.props.style},React.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},this.tabs.map(tab=>React.createElement(Tab,{TabContainer:this,title:tab.label,id:tab.id,key:btoa(tab.label+":"+tab.id)}))),React.createElement("div",{className:"lc-tab"},this.props.children))}isActive(tab){return this.state.active===tab}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:React.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(Title_1.default,null,"Preview tabs")))}],[{tabs:[{label:"Active tab",id:"1"},{label:"Unactive tab",id:"2"}]}],[{active:"1"}],[{onChange:tabId=>{}}]),AllPreviews)}}let AllPreviews;exports.default=Tabs,Tabs.defaultProps={children:null,tabs:[{label:"No tabs was passed to .",id:"none"}],active:null,onChange:noop_1.default,style:{}};class Tab extends React.Component{constructor(props){super(props),this.state={active:props.TabContainer.isActive(props.id)},this.props.TabContainer.tabsElements.push(this)}setActive(isActive){this.setState({active:!!isActive})}render(){let className="lc-navItem";return this.state.active?className+=" lc-navItemActive":className+=" lc-navItemInactive",React.createElement("div",{className:className,onClick:()=>{this.props.TabContainer.changeTab(this.props.id)}},this.props.title)}}exports.Tab=Tab},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let TitleModules,AllPreviews;class SettingSubTitle extends React.Component{get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60),WebpackLoader_1.default.findByUniqueProperties(["h5"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["size14"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["colorStandard"])])}render(){let[marginModule,titleModule,sizeModule,colorModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h5} ${marginModule.marginBottom4}`;return props.className&&(className=0+props.className),React.createElement("h5",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingSubTitle,SettingSubTitle.defaultProps={children:[],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let CodeBlockModules,AllPreviews;class CodeBlock extends React.Component{get modules(){return CodeBlockModules||(CodeBlockModules=[WebpackLoader_1.default.find(e=>e.markup),WebpackLoader_1.default.find(e=>e.messageContent),WebpackLoader_1.default.find(e=>e.scrollbarGhostHairline),WebpackLoader_1.default.find(e=>e.highlight),WebpackLoader_1.default.find(e=>e.marginBottom8)])}render(){let[messageModule1,messageModule2,scrollbarModule1,hightlightJS,marginModule1]=this.modules;const code="plaintext"===this.props.language?React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs"},this.props.content):React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs",dangerouslySetInnerHTML:{__html:hightlightJS.highlight(this.props.language,this.props.content).value}});return React.createElement("div",{className:`${messageModule1.markup} ${messageModule2.messageContent}`},React.createElement("pre",null,code),React.createElement("div",{className:marginModule1.marginBottom8}))}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{content:'console.log("Exemple code")'}]),AllPreviews.push([{language:"js"},{language:"plaintext"},...CodeBlock.prototype.modules[3].listLanguages().filter(e=>"js"!==e).map(e=>({language:e}))]),AllPreviews)}}exports.default=CodeBlock,CodeBlock.defaultProps={language:"plaintext",content:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),excludeProperties_1=__webpack_require__(89);let TooltipModules,AllPreviews;class Tooltip extends React.Component{constructor(props){super(props)}get modules(){return TooltipModules||(TooltipModules=[WebpackLoader_1.default.find(e=>e.default&&"Tooltip"===e.default.displayName)])}render(){let[Tooltip]=this.modules,props=excludeProperties_1.default(this.props,["children"]);return React.createElement(Tooltip.default,props,data=>React.createElement("div",Object.assign(Object.assign({},data),{style:{width:"fit-content",height:"fit-content"}}),this.props.children))}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[],AllPreviews.push([{children:React.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"green",look:"ghost",size:"small",hoverColor:"yellow",onClick:()=>{},wrapper:!1},"Hover this button to see the tooltip")}]),AllPreviews.push([{text:"Example Tooltip Text"}]);let colors=[];Tooltip.Colors.forEach(color=>{colors.push({color:color})}),AllPreviews.push(colors);let positions=[];return Tooltip.Positions.forEach(p=>{positions.push({position:p})}),AllPreviews.push(positions),AllPreviews})()}}exports.default=Tooltip,Tooltip.defaultProps={children:null,text:"No text was passed to Tooltip",position:"top",color:"brand"},Tooltip.Positions=["top","left","right","bottom"],Tooltip.Colors=["black","grey","brand","green","yellow","red"]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12),Utils_1=__webpack_require__(58),Constants={defaultColor:10070709,baseColors:[1752220,3066993,3447003,10181046,15277667,15844367,15105570,15158332,9807270,6323595,1146986,2067276,2123412,7419530,11342935,12745742,11027200,10038562,9936031,5533306]};let ColorPickerModules,AllPreviews,isFetching=null;class ColorPicker extends React.PureComponent{constructor(props){super(props),this.state={value:props.value||null,lastColor:this.props.value},this.onChange=this.onChange.bind(this)}static preload(){if(!ColorPicker.prototype.modules[0]&&!isFetching)try{new ColorPicker({}).render()}catch(e){console.error(e)}}onChange(val){this.props.onChange(val),this.setState({value:val}),this.forceUpdate()}get modules(){return ColorPickerModules||(ColorPickerModules=[WebpackLoader_1.default.find(e=>e.default&&"ColorPicker"===e.default.displayName)])}renderColorPicker(){let[ColorPickerComponent]=this.modules;if(!ColorPickerComponent){if(isFetching)return isFetching.then(()=>this.forceUpdate()),null;let resolve;ColorPickerModules=null,isFetching=new Promise(res=>resolve=res);const GuildSettingsRoles=(new(WebpackLoader_1.default.find(e=>e.default&&e.default.displayName&&e.default.displayName.includes("GuildSettingsRoles")).default)).render().type;let children=GuildSettingsRoles.prototype.renderRoleSettings.call({props:{guild:{roles:[],id:null,isOwner:()=>!1},currentUser:{id:null}},getSelectedRole:()=>({id:null}),renderHeader:GuildSettingsRoles.prototype.renderHeader}).props.children[1].type.prototype.renderColorPicker.call({props:{role:{id:null,color:0},locked:!1,everyone:!1}}).props.children;return children.type(children.props).props.children.type._ctor().then(c=>{ColorPickerModules=null,this.forceUpdate(),resolve()}),null}return React.createElement(ColorPickerComponent.default,{colors:this.props.baseColors,defaultColor:this.props.defaultColor,value:this.state.value,disabled:this.props.disabled,onChange:this.onChange,customColor:this.props.customColor})}render(){return this.state.lastColor!==this.props.value&&(this.state={value:this.props.value,lastColor:this.props.value}),this.renderColorPicker()}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{disabled:!1},{disabled:!0}],[{value:Utils_1.default.HexColorToDecimal("#7289DA")},{value:null}],[{onChange:color=>{}}]),AllPreviews)}}exports.default=ColorPicker,ColorPicker.defaultProps={defaultColor:Constants.defaultColor,customColor:null,baseColors:Constants.baseColors,value:null,disabled:!1,onChange:noop_1.default},ColorPicker.help={info:"To convert hex colors to decimal, you can do `Lightcord.Api.Utils.HexColorToDecimal('#7289DA')` and go back with `Lightcord.Api.Utils.DecimalColorToHex(7506394)`",warn:"The component may not appear instantly. The component needs to be loaded, so you could experience 50-300ms loading time depending on your internet connection."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const components_1=__webpack_require__(95),Utils_1=__webpack_require__(58),uuid_1=__webpack_require__(73),TextInput_1=__webpack_require__(86);exports.default=new class PluginUtilities{constructor(){}renderSettings(settings){let items=this.renderSettingsToReact(settings),elem=React.createElement("div",{key:uuid_1.default()},items);return Utils_1.default.ReactToHTMLElement(elem)}renderSettingsToReact(settings){let items=[];return settings.forEach(item=>{if("object"!=typeof item)return items.push(item);item.props&&"children"in item.props&&(Array.isArray(item.props.children)||(item.props.children=[item.props.children]),item.props.children=this.renderSettingsToReact(item.props.children)),item.props||(item.props={}),item.props.key=uuid_1.default();let component=Utils_1.default.getNestedProps(components_1.default,item.component);if(component)items.push(React.createElement(component,Object.create(item.props)));else{let warning=new TextInput_1.default({value:`Warning: No component was found for: "${item.component}". Please correct your code.`,disabled:!0,error:`Warning: No component was found for: "${item.component}". Please correct your code.`}).render();items.push(warning)}}),items}}},function(module,exports){module.exports=require("uuid/v1")},function(module,exports){module.exports=require("uuid/v4")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProxyErrorCatcherClass=void 0;const WebpackLoader_1=__webpack_require__(12),DiscordTools_1=__webpack_require__(99),noop_1=__webpack_require__(20),uuid_1=__webpack_require__(73),AlertBox_1=__webpack_require__(98);let ErrorCatcherModules,AllPreviews;class ErrorCatcher extends React.Component{constructor(props){super(props),this.defaultProps={children:null},this.state={error:!1,hasSentNotification:!1}}static get original(){return ErrorCatcher}get modules(){return ErrorCatcherModules||(ErrorCatcherModules=[WebpackLoader_1.default.find(e=>e.emptyStateImage&&e.emptyState)])}render(){if(this.state.error){const[emptyClasses]=this.modules;if(!emptyClasses){if(this.state.hasSentNotification)return null;const notification=DiscordTools_1.default.showNotification({body:"An error occured. Please check the console for more informations.",icon:"https://github.com/lightcord.png",onClick:noop_1.default,onClose:noop_1.default,onShow:noop_1.default,title:"Lightcord Informations"});return this.setState({hasSentNotification:!0}),setTimeout(()=>{notification.close()},2e3),null}return React.createElement("div",{className:emptyClasses.emptyState},React.createElement("div",{className:emptyClasses.emptyStateImage,style:{marginTop:"20px"}}),React.createElement("div",{className:emptyClasses.emptyStateHeader},"An error occured"),React.createElement("p",{className:emptyClasses.emptyStateSubtext},"Please check the console for more informations. Join our ­support server for more help."))}return this.props.children}componentDidCatch(error,errorInfo){console.error(errorInfo.componentStack),this.setState({error:!0})}static get AllPreviews(){return AllPreviews||(AllPreviews=[[{children:React.createElement(AlertBox_1.default,{type:"info"},"This AlertBox is protected by an ErrorCatcher.")}]])}}exports.default=ErrorCatcher,exports.createProxyErrorCatcherClass=function createProxyErrorCatcherClass(Class){var _a;const ClassCopy=((_a=class Proxied extends React.Component{render(){return React.createElement(ErrorCatcher,{key:uuid_1.default()},React.createElement(Class,Object.assign(Object.assign({ref:"original"},this.props),{key:uuid_1.default()})))}static get original(){return Class}}).displayName=Class.displayName||Class.name,_a);return Object.entries(Object.getOwnPropertyDescriptors(Class)).forEach(value=>{value[0]in ClassCopy||Object.defineProperty(ClassCopy,value[0],value[1])}),ClassCopy}},function(module,exports,__webpack_require__){"use strict";var ReactPropTypesSecret=__webpack_require__(136);function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},function(module,exports,__webpack_require__){"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(module,exports,__webpack_require__){"use strict";var keysShim;if(!Object.keys){var has=Object.prototype.hasOwnProperty,toStr=Object.prototype.toString,isArgs=__webpack_require__(108),isEnumerable=Object.prototype.propertyIsEnumerable,hasDontEnumBug=!isEnumerable.call({toString:null},"toString"),hasProtoEnumBug=isEnumerable.call((function(){}),"prototype"),dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],equalsConstructorPrototype=function(o){var ctor=o.constructor;return ctor&&ctor.prototype===o},excludedKeys={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},hasAutomationEqualityBug=function(){if("undefined"==typeof window)return!1;for(var k in window)try{if(!excludedKeys["$"+k]&&has.call(window,k)&&null!==window[k]&&"object"==typeof window[k])try{equalsConstructorPrototype(window[k])}catch(e){return!0}}catch(e){return!0}return!1}();keysShim=function keys(object){var isObject=null!==object&&"object"==typeof object,isFunction="[object Function]"===toStr.call(object),isArguments=isArgs(object),isString=isObject&&"[object String]"===toStr.call(object),theKeys=[];if(!isObject&&!isFunction&&!isArguments)throw new TypeError("Object.keys called on a non-object");var skipProto=hasProtoEnumBug&&isFunction;if(isString&&object.length>0&&!has.call(object,0))for(var i=0;i0)for(var j=0;j=0&&"[object Array]"!==toStr.call(value)&&"[object Function]"===toStr.call(value.callee)},supportsStandardArguments=function(){return isStandardArguments(arguments)}();isStandardArguments.isLegacyArguments=isLegacyArguments,module.exports=supportsStandardArguments?isStandardArguments:isLegacyArguments},function(module,exports,__webpack_require__){"use strict";var define=__webpack_require__(66),callBind=__webpack_require__(109),implementation=__webpack_require__(112),getPolyfill=__webpack_require__(113),shim=__webpack_require__(143),polyfill=callBind(getPolyfill(),Object);define(polyfill,{getPolyfill:getPolyfill,implementation:implementation,shim:shim}),module.exports=polyfill},function(module,exports,__webpack_require__){"use strict";var ERROR_MESSAGE="Function.prototype.bind called on incompatible ",slice=Array.prototype.slice,toStr=Object.prototype.toString;module.exports=function bind(that){var target=this;if("function"!=typeof target||"[object Function]"!==toStr.call(target))throw new TypeError(ERROR_MESSAGE+target);for(var bound,args=slice.call(arguments,1),binder=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))},boundLength=Math.max(0,target.length-args.length),boundArgs=[],i=0;i1&&"boolean"!=typeof allowMissing)throw new TypeError('"allowMissing" argument must be a boolean');for(var parts=stringToPath(name),value=getBaseIntrinsic("%"+(parts.length>0?parts[0]:"")+"%",allowMissing),i=1;i=parts.length){var desc=$gOPD(value,parts[i]);if(!allowMissing&&!(parts[i]in value))throw new $TypeError("base intrinsic for "+name+" exists, but the property is not available.");value=desc?desc.get||desc.value:value[parts[i]]}else value=value[parts[i]];return value}},function(module,exports,__webpack_require__){"use strict";module.exports=function hasSymbols(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var obj={},sym=Symbol("test"),symObj=Object(sym);if("string"==typeof sym)return!1;if("[object Symbol]"!==Object.prototype.toString.call(sym))return!1;if("[object Symbol]"!==Object.prototype.toString.call(symObj))return!1;for(sym in obj[sym]=42,obj)return!1;if("function"==typeof Object.keys&&0!==Object.keys(obj).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(obj).length)return!1;var syms=Object.getOwnPropertySymbols(obj);if(1!==syms.length||syms[0]!==sym)return!1;if(!Object.prototype.propertyIsEnumerable.call(obj,sym))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var descriptor=Object.getOwnPropertyDescriptor(obj,sym);if(42!==descriptor.value||!0!==descriptor.enumerable)return!1}return!0}},function(module,exports,__webpack_require__){"use strict";var getPolyfill=__webpack_require__(113),define=__webpack_require__(66);module.exports=function shimObjectIs(){var polyfill=getPolyfill();return define(Object,{is:polyfill},{is:function testObjectIs(){return Object.is!==polyfill}}),polyfill}},function(module,exports,__webpack_require__){"use strict";var hasOwnProperty,regexExec,isRegexMarker,badStringifier,hasToStringTag=__webpack_require__(111)()&&"symbol"==typeof Symbol.toStringTag;if(hasToStringTag){hasOwnProperty=Function.call.bind(Object.prototype.hasOwnProperty),regexExec=Function.call.bind(RegExp.prototype.exec),isRegexMarker={};var throwRegexMarker=function(){throw isRegexMarker};badStringifier={toString:throwRegexMarker,valueOf:throwRegexMarker},"symbol"==typeof Symbol.toPrimitive&&(badStringifier[Symbol.toPrimitive]=throwRegexMarker)}var toStr=Object.prototype.toString,gOPD=Object.getOwnPropertyDescriptor;module.exports=hasToStringTag?function isRegex(value){if(!value||"object"!=typeof value)return!1;var descriptor=gOPD(value,"lastIndex");if(!(descriptor&&hasOwnProperty(descriptor,"value")))return!1;try{regexExec(value,badStringifier)}catch(e){return e===isRegexMarker}}:function isRegex(value){return!(!value||"object"!=typeof value&&"function"!=typeof value)&&"[object RegExp]"===toStr.call(value)}},function(module,exports,__webpack_require__){"use strict";var define=__webpack_require__(66),callBind=__webpack_require__(109),implementation=__webpack_require__(114),getPolyfill=__webpack_require__(115),shim=__webpack_require__(146),flagsBound=callBind(implementation);define(flagsBound,{getPolyfill:getPolyfill,implementation:implementation,shim:shim}),module.exports=flagsBound},function(module,exports,__webpack_require__){"use strict";var supportsDescriptors=__webpack_require__(66).supportsDescriptors,getPolyfill=__webpack_require__(115),gOPD=Object.getOwnPropertyDescriptor,defineProperty=Object.defineProperty,TypeErr=TypeError,getProto=Object.getPrototypeOf,regex=/a/;module.exports=function shimFlags(){if(!supportsDescriptors||!getProto)throw new TypeErr("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var polyfill=getPolyfill(),proto=getProto(regex),descriptor=gOPD(proto,"flags");return descriptor&&descriptor.get===polyfill||defineProperty(proto,"flags",{configurable:!0,enumerable:!1,get:polyfill}),polyfill}},function(module,exports,__webpack_require__){"use strict";var getDay=Date.prototype.getDay,toStr=Object.prototype.toString,hasToStringTag="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;module.exports=function isDateObject(value){return"object"==typeof value&&null!==value&&(hasToStringTag?function tryDateGetDayCall(value){try{return getDay.call(value),!0}catch(e){return!1}}(value):"[object Date]"===toStr.call(value))}},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var _react=__webpack_require__(3),_propTypes2=(_interopRequireDefault(_react),_interopRequireDefault(__webpack_require__(106))),_gud2=_interopRequireDefault(__webpack_require__(149));_interopRequireDefault(__webpack_require__(93));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}function createEventEmitter(value){var handlers=[];return{on:function on(handler){handlers.push(handler)},off:function off(handler){handlers=handlers.filter((function(h){return h!==handler}))},get:function get(){return value},set:function set(newValue,changedBits){value=newValue,handlers.forEach((function(handler){return handler(value,changedBits)}))}}}exports.default=function createReactContext(defaultValue,calculateChangedBits){var _Provider$childContex,_Consumer$contextType,contextProp="__create-react-context-"+(0,_gud2.default)()+"__",Provider=function(_Component){function Provider(){var _temp,_this;_classCallCheck(this,Provider);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=_possibleConstructorReturn(this,_Component.call.apply(_Component,[this].concat(args))),_this.emitter=createEventEmitter(_this.props.value),_possibleConstructorReturn(_this,_temp)}return _inherits(Provider,_Component),Provider.prototype.getChildContext=function getChildContext(){var _ref;return(_ref={})[contextProp]=this.emitter,_ref},Provider.prototype.componentWillReceiveProps=function componentWillReceiveProps(nextProps){if(this.props.value!==nextProps.value){var oldValue=this.props.value,newValue=nextProps.value,changedBits=void 0;!function objectIs(x,y){return x===y?0!==x||1/x==1/y:x!=x&&y!=y}(oldValue,newValue)?(changedBits="function"==typeof calculateChangedBits?calculateChangedBits(oldValue,newValue):1073741823,0!==(changedBits|=0)&&this.emitter.set(nextProps.value,changedBits)):changedBits=0}},Provider.prototype.render=function render(){return this.props.children},Provider}(_react.Component);Provider.childContextTypes=((_Provider$childContex={})[contextProp]=_propTypes2.default.object.isRequired,_Provider$childContex);var Consumer=function(_Component2){function Consumer(){var _temp2,_this2;_classCallCheck(this,Consumer);for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2<_len2;_key2++)args[_key2]=arguments[_key2];return _temp2=_this2=_possibleConstructorReturn(this,_Component2.call.apply(_Component2,[this].concat(args))),_this2.state={value:_this2.getValue()},_this2.onUpdate=function(newValue,changedBits){0!=((0|_this2.observedBits)&changedBits)&&_this2.setState({value:_this2.getValue()})},_possibleConstructorReturn(_this2,_temp2)}return _inherits(Consumer,_Component2),Consumer.prototype.componentWillReceiveProps=function componentWillReceiveProps(nextProps){var observedBits=nextProps.observedBits;this.observedBits=null==observedBits?1073741823:observedBits},Consumer.prototype.componentDidMount=function componentDidMount(){this.context[contextProp]&&this.context[contextProp].on(this.onUpdate);var observedBits=this.props.observedBits;this.observedBits=null==observedBits?1073741823:observedBits},Consumer.prototype.componentWillUnmount=function componentWillUnmount(){this.context[contextProp]&&this.context[contextProp].off(this.onUpdate)},Consumer.prototype.getValue=function getValue(){return this.context[contextProp]?this.context[contextProp].get():defaultValue},Consumer.prototype.render=function render(){return function onlyChild(children){return Array.isArray(children)?children[0]:children}(this.props.children)(this.state.value)},Consumer}(_react.Component);return Consumer.contextTypes=((_Consumer$contextType={})[contextProp]=_propTypes2.default.object,_Consumer$contextType),{Provider:Provider,Consumer:Consumer}},module.exports=exports.default},function(module,exports,__webpack_require__){"use strict";var key="__global_unique_id__";module.exports=function(){return global[key]=(global[key]||0)+1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.patch=void 0;const Utils_1=__webpack_require__(58),Notices_1=__webpack_require__(90),environnement_1=__webpack_require__(116);function getModule(filter){return new Promise(resolve=>{window.Lightcord.Api.ensureExported(filter).then(resolve).catch(err=>{console.error("[LIGHTCORD]",err,filter)})})}exports.patch=function patch(){getModule(e=>e.default&&"ConnectedAppView"===e.default.displayName).then(async mod=>{const appClasses=await getModule(e=>e.hasNotice),buildRender=original=>function render(){const returnValue=original.call(this,...arguments),newchildren=[];let children=returnValue.props.children[1].props.children;return Array.isArray(children)||(children=[children]),newchildren.push(children[0]),newchildren.push(React.createElement(Notices_1.default,{container:this})),newchildren.push(children[1]),returnValue.props.children[1].props.children=newchildren,returnValue.props.children[1].props.children[2].props.children[0].props.render=buildRenderChannelSidebar(returnValue.props.children[1].props.children[2].props.children[0].props.render),returnValue},buildRenderChannelSidebar=original=>function renderChannelSidebar(){const returnValue=original.call(this,...arguments),hasNotice=Notices_1.notices.length>0;return hasNotice?(Utils_1.default.hasClass(returnValue.props.className,appClasses.hasNotice)||(returnValue.props.className+=" "+Utils_1.default.removeDa(appClasses.hasNotice)),returnValue):returnValue};mod.default.prototype.render=buildRender(mod.default.prototype.render),async function(){const base=document.querySelector("."+Utils_1.default.removeDa(appClasses.base));if(!base)throw new Error("Could not find base here");const elem=Utils_1.default.FindReact(base);elem.render=buildRender(elem.render),elem.forceUpdate()}()}),environnement_1.isNative&&(awaitLogin().then(async()=>{let UserPopout=await getModule(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName);const userModule=await getModule(e=>e.default&&e.default.getCurrentUser),render1=new UserPopout.default({userId:userModule.default.getCurrentUser().id,guildId:null,channelId:null,disableUserProfileLink:!0}).render(),PopoutProps=render1.props,render2=render1.type.render(PopoutProps,null),UserPopoutComponent=new render2.type(render2.props).render().type;if(!UserPopoutComponent)throw new Error("Couldn't find the UserPopoutComponent component.");const render=UserPopoutComponent.prototype.render;UserPopoutComponent.prototype.render=function(){const returnValue=render.call(this,...arguments);try{returnValue.props.children.props["data-user-id"]=this.props.user.id}catch(e){console.error(e)}return returnValue}}),awaitLogin().then(async()=>{let UserProfile=await getModule(e=>e.default&&"UserProfile"===e.default.displayName);const userModule=await getModule(e=>e.default&&e.default.getCurrentUser),render1=new UserProfile.default({user:userModule.default.getCurrentUser()}).render(),render2=new render1.type(render1.props).render(),render3=render2.type.render(render2.props,null),UserProfileComponent=new render3.type(render3.props).render().type;if(!UserProfileComponent)throw new Error("Couldn't find the UserProfileComponent component.");const render=UserProfileComponent.prototype.render;UserProfileComponent.prototype.render=function(){const returnValue=render.call(this,...arguments);console.log(returnValue);try{returnValue.props.children.props["data-user-id"]=this.props.user.id}catch(e){console.error(e)}return returnValue}}))};let loginPromise,hasCompletedLogin=!1;function awaitLogin(){return hasCompletedLogin?Promise.resolve():loginPromise||(loginPromise=new Promise(resolve=>{let isResolved=!1;window.Lightcord.DiscordModules.dispatcher.subscribe("CONNECTION_OPEN",ev=>{isResolved||(hasCompletedLogin=!0,resolve(),isResolved=!0)})}))}window.Lightcord.DiscordModules.dispatcher.subscribe("LOGOUT",ev=>{hasCompletedLogin=!1,loginPromise=void 0})},function(module,exports,__webpack_require__){"use strict";function unfreeze(o){var oo=void 0;if(o instanceof Array){oo=[];o.forEach((function(v){oo.push(v)}))}else if(o instanceof String)oo=new String(o).toString();else if("object"==typeof o)for(var property in oo={},o)oo[property]=o[property];return oo}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=unfreeze,Object.unfreeze=unfreeze},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"add",(function(){return add})),__webpack_require__.d(__webpack_exports__,"addBusinessDays",(function(){return addBusinessDays})),__webpack_require__.d(__webpack_exports__,"addDays",(function(){return addDays.a})),__webpack_require__.d(__webpack_exports__,"addHours",(function(){return addHours.a})),__webpack_require__.d(__webpack_exports__,"addISOWeekYears",(function(){return addISOWeekYears})),__webpack_require__.d(__webpack_exports__,"addMilliseconds",(function(){return addMilliseconds.a})),__webpack_require__.d(__webpack_exports__,"addMinutes",(function(){return addMinutes.a})),__webpack_require__.d(__webpack_exports__,"addMonths",(function(){return addMonths.a})),__webpack_require__.d(__webpack_exports__,"addQuarters",(function(){return addQuarters})),__webpack_require__.d(__webpack_exports__,"addSeconds",(function(){return addSeconds})),__webpack_require__.d(__webpack_exports__,"addWeeks",(function(){return addWeeks.a})),__webpack_require__.d(__webpack_exports__,"addYears",(function(){return addYears.a})),__webpack_require__.d(__webpack_exports__,"areIntervalsOverlapping",(function(){return areIntervalsOverlapping})),__webpack_require__.d(__webpack_exports__,"closestIndexTo",(function(){return closestIndexTo})),__webpack_require__.d(__webpack_exports__,"closestTo",(function(){return closestTo})),__webpack_require__.d(__webpack_exports__,"compareAsc",(function(){return compareAsc})),__webpack_require__.d(__webpack_exports__,"compareDesc",(function(){return compareDesc})),__webpack_require__.d(__webpack_exports__,"differenceInBusinessDays",(function(){return differenceInBusinessDays})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarDays",(function(){return differenceInCalendarDays.a})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarISOWeekYears",(function(){return differenceInCalendarISOWeekYears})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarISOWeeks",(function(){return differenceInCalendarISOWeeks})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarMonths",(function(){return differenceInCalendarMonths.a})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarQuarters",(function(){return differenceInCalendarQuarters})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarWeeks",(function(){return differenceInCalendarWeeks.a})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarYears",(function(){return differenceInCalendarYears.a})),__webpack_require__.d(__webpack_exports__,"differenceInDays",(function(){return differenceInDays})),__webpack_require__.d(__webpack_exports__,"differenceInHours",(function(){return differenceInHours})),__webpack_require__.d(__webpack_exports__,"differenceInISOWeekYears",(function(){return differenceInISOWeekYears})),__webpack_require__.d(__webpack_exports__,"differenceInMilliseconds",(function(){return differenceInMilliseconds})),__webpack_require__.d(__webpack_exports__,"differenceInMinutes",(function(){return differenceInMinutes})),__webpack_require__.d(__webpack_exports__,"differenceInMonths",(function(){return differenceInMonths})),__webpack_require__.d(__webpack_exports__,"differenceInQuarters",(function(){return differenceInQuarters})),__webpack_require__.d(__webpack_exports__,"differenceInSeconds",(function(){return differenceInSeconds})),__webpack_require__.d(__webpack_exports__,"differenceInWeeks",(function(){return differenceInWeeks})),__webpack_require__.d(__webpack_exports__,"differenceInYears",(function(){return differenceInYears})),__webpack_require__.d(__webpack_exports__,"eachDayOfInterval",(function(){return eachDayOfInterval})),__webpack_require__.d(__webpack_exports__,"eachHourOfInterval",(function(){return eachHourOfInterval})),__webpack_require__.d(__webpack_exports__,"eachMonthOfInterval",(function(){return eachMonthOfInterval})),__webpack_require__.d(__webpack_exports__,"eachQuarterOfInterval",(function(){return eachQuarterOfInterval})),__webpack_require__.d(__webpack_exports__,"eachWeekOfInterval",(function(){return eachWeekOfInterval})),__webpack_require__.d(__webpack_exports__,"eachWeekendOfInterval",(function(){return eachWeekendOfInterval})),__webpack_require__.d(__webpack_exports__,"eachWeekendOfMonth",(function(){return eachWeekendOfMonth})),__webpack_require__.d(__webpack_exports__,"eachWeekendOfYear",(function(){return eachWeekendOfYear})),__webpack_require__.d(__webpack_exports__,"eachYearOfInterval",(function(){return eachYearOfInterval})),__webpack_require__.d(__webpack_exports__,"endOfDay",(function(){return endOfDay.a})),__webpack_require__.d(__webpack_exports__,"endOfDecade",(function(){return endOfDecade})),__webpack_require__.d(__webpack_exports__,"endOfHour",(function(){return endOfHour})),__webpack_require__.d(__webpack_exports__,"endOfISOWeek",(function(){return endOfISOWeek})),__webpack_require__.d(__webpack_exports__,"endOfISOWeekYear",(function(){return endOfISOWeekYear})),__webpack_require__.d(__webpack_exports__,"endOfMinute",(function(){return endOfMinute})),__webpack_require__.d(__webpack_exports__,"endOfMonth",(function(){return endOfMonth.a})),__webpack_require__.d(__webpack_exports__,"endOfQuarter",(function(){return endOfQuarter})),__webpack_require__.d(__webpack_exports__,"endOfSecond",(function(){return endOfSecond})),__webpack_require__.d(__webpack_exports__,"endOfToday",(function(){return endOfToday})),__webpack_require__.d(__webpack_exports__,"endOfTomorrow",(function(){return endOfTomorrow})),__webpack_require__.d(__webpack_exports__,"endOfWeek",(function(){return endOfWeek.a})),__webpack_require__.d(__webpack_exports__,"endOfYear",(function(){return endOfYear})),__webpack_require__.d(__webpack_exports__,"endOfYesterday",(function(){return endOfYesterday})),__webpack_require__.d(__webpack_exports__,"format",(function(){return esm_format.a})),__webpack_require__.d(__webpack_exports__,"formatDistance",(function(){return formatDistance})),__webpack_require__.d(__webpack_exports__,"formatDistanceStrict",(function(){return formatDistanceStrict})),__webpack_require__.d(__webpack_exports__,"formatDistanceToNow",(function(){return formatDistanceToNow})),__webpack_require__.d(__webpack_exports__,"formatDistanceToNowStrict",(function(){return formatDistanceToNowStrict})),__webpack_require__.d(__webpack_exports__,"formatDuration",(function(){return formatDuration})),__webpack_require__.d(__webpack_exports__,"formatISO",(function(){return formatISO})),__webpack_require__.d(__webpack_exports__,"formatISO9075",(function(){return formatISO9075})),__webpack_require__.d(__webpack_exports__,"formatISODuration",(function(){return formatISODuration})),__webpack_require__.d(__webpack_exports__,"formatRFC3339",(function(){return formatRFC3339})),__webpack_require__.d(__webpack_exports__,"formatRFC7231",(function(){return formatRFC7231})),__webpack_require__.d(__webpack_exports__,"formatRelative",(function(){return formatRelative})),__webpack_require__.d(__webpack_exports__,"fromUnixTime",(function(){return fromUnixTime})),__webpack_require__.d(__webpack_exports__,"getDate",(function(){return getDate.a})),__webpack_require__.d(__webpack_exports__,"getDay",(function(){return getDay.a})),__webpack_require__.d(__webpack_exports__,"getDayOfYear",(function(){return getDayOfYear})),__webpack_require__.d(__webpack_exports__,"getDaysInMonth",(function(){return getDaysInMonth.a})),__webpack_require__.d(__webpack_exports__,"getDaysInYear",(function(){return getDaysInYear})),__webpack_require__.d(__webpack_exports__,"getDecade",(function(){return getDecade})),__webpack_require__.d(__webpack_exports__,"getHours",(function(){return getHours.a})),__webpack_require__.d(__webpack_exports__,"getISODay",(function(){return getISODay})),__webpack_require__.d(__webpack_exports__,"getISOWeek",(function(){return getISOWeek})),__webpack_require__.d(__webpack_exports__,"getISOWeekYear",(function(){return getISOWeekYear})),__webpack_require__.d(__webpack_exports__,"getISOWeeksInYear",(function(){return getISOWeeksInYear})),__webpack_require__.d(__webpack_exports__,"getMilliseconds",(function(){return getMilliseconds})),__webpack_require__.d(__webpack_exports__,"getMinutes",(function(){return getMinutes.a})),__webpack_require__.d(__webpack_exports__,"getMonth",(function(){return getMonth.a})),__webpack_require__.d(__webpack_exports__,"getOverlappingDaysInIntervals",(function(){return getOverlappingDaysInIntervals})),__webpack_require__.d(__webpack_exports__,"getQuarter",(function(){return getQuarter.a})),__webpack_require__.d(__webpack_exports__,"getSeconds",(function(){return getSeconds.a})),__webpack_require__.d(__webpack_exports__,"getTime",(function(){return getTime.a})),__webpack_require__.d(__webpack_exports__,"getUnixTime",(function(){return getUnixTime})),__webpack_require__.d(__webpack_exports__,"getWeek",(function(){return getWeek.a})),__webpack_require__.d(__webpack_exports__,"getWeekOfMonth",(function(){return getWeekOfMonth})),__webpack_require__.d(__webpack_exports__,"getWeekYear",(function(){return getWeekYear.a})),__webpack_require__.d(__webpack_exports__,"getWeeksInMonth",(function(){return getWeeksInMonth})),__webpack_require__.d(__webpack_exports__,"getYear",(function(){return getYear.a})),__webpack_require__.d(__webpack_exports__,"intervalToDuration",(function(){return intervalToDuration})),__webpack_require__.d(__webpack_exports__,"isAfter",(function(){return isAfter.a})),__webpack_require__.d(__webpack_exports__,"isBefore",(function(){return isBefore.a})),__webpack_require__.d(__webpack_exports__,"isDate",(function(){return isDate.a})),__webpack_require__.d(__webpack_exports__,"isEqual",(function(){return isEqual.a})),__webpack_require__.d(__webpack_exports__,"isExists",(function(){return isExists})),__webpack_require__.d(__webpack_exports__,"isFirstDayOfMonth",(function(){return isFirstDayOfMonth})),__webpack_require__.d(__webpack_exports__,"isFriday",(function(){return isFriday})),__webpack_require__.d(__webpack_exports__,"isFuture",(function(){return isFuture})),__webpack_require__.d(__webpack_exports__,"isLastDayOfMonth",(function(){return isLastDayOfMonth})),__webpack_require__.d(__webpack_exports__,"isLeapYear",(function(){return isLeapYear})),__webpack_require__.d(__webpack_exports__,"isMatch",(function(){return isMatch})),__webpack_require__.d(__webpack_exports__,"isMonday",(function(){return isMonday})),__webpack_require__.d(__webpack_exports__,"isPast",(function(){return isPast})),__webpack_require__.d(__webpack_exports__,"isSameDay",(function(){return isSameDay.a})),__webpack_require__.d(__webpack_exports__,"isSameHour",(function(){return isSameHour})),__webpack_require__.d(__webpack_exports__,"isSameISOWeek",(function(){return isSameISOWeek})),__webpack_require__.d(__webpack_exports__,"isSameISOWeekYear",(function(){return isSameISOWeekYear})),__webpack_require__.d(__webpack_exports__,"isSameMinute",(function(){return isSameMinute})),__webpack_require__.d(__webpack_exports__,"isSameMonth",(function(){return isSameMonth.a})),__webpack_require__.d(__webpack_exports__,"isSameQuarter",(function(){return isSameQuarter.a})),__webpack_require__.d(__webpack_exports__,"isSameSecond",(function(){return isSameSecond})),__webpack_require__.d(__webpack_exports__,"isSameWeek",(function(){return isSameWeek})),__webpack_require__.d(__webpack_exports__,"isSameYear",(function(){return isSameYear.a})),__webpack_require__.d(__webpack_exports__,"isSaturday",(function(){return isSaturday})),__webpack_require__.d(__webpack_exports__,"isSunday",(function(){return isSunday})),__webpack_require__.d(__webpack_exports__,"isThisHour",(function(){return isThisHour})),__webpack_require__.d(__webpack_exports__,"isThisISOWeek",(function(){return isThisISOWeek})),__webpack_require__.d(__webpack_exports__,"isThisMinute",(function(){return isThisMinute})),__webpack_require__.d(__webpack_exports__,"isThisMonth",(function(){return isThisMonth})),__webpack_require__.d(__webpack_exports__,"isThisQuarter",(function(){return isThisQuarter})),__webpack_require__.d(__webpack_exports__,"isThisSecond",(function(){return isThisSecond})),__webpack_require__.d(__webpack_exports__,"isThisWeek",(function(){return isThisWeek})),__webpack_require__.d(__webpack_exports__,"isThisYear",(function(){return isThisYear})),__webpack_require__.d(__webpack_exports__,"isThursday",(function(){return isThursday})),__webpack_require__.d(__webpack_exports__,"isToday",(function(){return isToday})),__webpack_require__.d(__webpack_exports__,"isTomorrow",(function(){return isTomorrow})),__webpack_require__.d(__webpack_exports__,"isTuesday",(function(){return isTuesday})),__webpack_require__.d(__webpack_exports__,"isValid",(function(){return isValid.a})),__webpack_require__.d(__webpack_exports__,"isWednesday",(function(){return isWednesday})),__webpack_require__.d(__webpack_exports__,"isWeekend",(function(){return isWeekend})),__webpack_require__.d(__webpack_exports__,"isWithinInterval",(function(){return isWithinInterval.a})),__webpack_require__.d(__webpack_exports__,"isYesterday",(function(){return isYesterday})),__webpack_require__.d(__webpack_exports__,"lastDayOfDecade",(function(){return lastDayOfDecade})),__webpack_require__.d(__webpack_exports__,"lastDayOfISOWeek",(function(){return lastDayOfISOWeek})),__webpack_require__.d(__webpack_exports__,"lastDayOfISOWeekYear",(function(){return lastDayOfISOWeekYear})),__webpack_require__.d(__webpack_exports__,"lastDayOfMonth",(function(){return lastDayOfMonth})),__webpack_require__.d(__webpack_exports__,"lastDayOfQuarter",(function(){return lastDayOfQuarter})),__webpack_require__.d(__webpack_exports__,"lastDayOfWeek",(function(){return lastDayOfWeek})),__webpack_require__.d(__webpack_exports__,"lastDayOfYear",(function(){return lastDayOfYear})),__webpack_require__.d(__webpack_exports__,"lightFormat",(function(){return lightFormat})),__webpack_require__.d(__webpack_exports__,"max",(function(){return max.a})),__webpack_require__.d(__webpack_exports__,"min",(function(){return min.a})),__webpack_require__.d(__webpack_exports__,"parse",(function(){return parse.a})),__webpack_require__.d(__webpack_exports__,"parseISO",(function(){return parseISO.a})),__webpack_require__.d(__webpack_exports__,"parseJSON",(function(){return parseJSON})),__webpack_require__.d(__webpack_exports__,"roundToNearestMinutes",(function(){return roundToNearestMinutes})),__webpack_require__.d(__webpack_exports__,"set",(function(){return set})),__webpack_require__.d(__webpack_exports__,"setDate",(function(){return setDate})),__webpack_require__.d(__webpack_exports__,"setDay",(function(){return setDay})),__webpack_require__.d(__webpack_exports__,"setDayOfYear",(function(){return setDayOfYear})),__webpack_require__.d(__webpack_exports__,"setHours",(function(){return setHours.a})),__webpack_require__.d(__webpack_exports__,"setISODay",(function(){return setISODay})),__webpack_require__.d(__webpack_exports__,"setISOWeek",(function(){return setISOWeek})),__webpack_require__.d(__webpack_exports__,"setISOWeekYear",(function(){return setISOWeekYear})),__webpack_require__.d(__webpack_exports__,"setMilliseconds",(function(){return setMilliseconds})),__webpack_require__.d(__webpack_exports__,"setMinutes",(function(){return setMinutes.a})),__webpack_require__.d(__webpack_exports__,"setMonth",(function(){return setMonth.a})),__webpack_require__.d(__webpack_exports__,"setQuarter",(function(){return setQuarter.a})),__webpack_require__.d(__webpack_exports__,"setSeconds",(function(){return setSeconds.a})),__webpack_require__.d(__webpack_exports__,"setWeek",(function(){return setWeek})),__webpack_require__.d(__webpack_exports__,"setWeekYear",(function(){return setWeekYear})),__webpack_require__.d(__webpack_exports__,"setYear",(function(){return setYear.a})),__webpack_require__.d(__webpack_exports__,"startOfDay",(function(){return startOfDay.a})),__webpack_require__.d(__webpack_exports__,"startOfDecade",(function(){return startOfDecade})),__webpack_require__.d(__webpack_exports__,"startOfHour",(function(){return startOfHour})),__webpack_require__.d(__webpack_exports__,"startOfISOWeek",(function(){return startOfISOWeek})),__webpack_require__.d(__webpack_exports__,"startOfISOWeekYear",(function(){return startOfISOWeekYear})),__webpack_require__.d(__webpack_exports__,"startOfMinute",(function(){return startOfMinute})),__webpack_require__.d(__webpack_exports__,"startOfMonth",(function(){return startOfMonth.a})),__webpack_require__.d(__webpack_exports__,"startOfQuarter",(function(){return startOfQuarter.a})),__webpack_require__.d(__webpack_exports__,"startOfSecond",(function(){return startOfSecond})),__webpack_require__.d(__webpack_exports__,"startOfToday",(function(){return startOfToday})),__webpack_require__.d(__webpack_exports__,"startOfTomorrow",(function(){return startOfTomorrow})),__webpack_require__.d(__webpack_exports__,"startOfWeek",(function(){return startOfWeek.a})),__webpack_require__.d(__webpack_exports__,"startOfWeekYear",(function(){return startOfWeekYear.a})),__webpack_require__.d(__webpack_exports__,"startOfYear",(function(){return startOfYear.a})),__webpack_require__.d(__webpack_exports__,"startOfYesterday",(function(){return startOfYesterday})),__webpack_require__.d(__webpack_exports__,"sub",(function(){return sub})),__webpack_require__.d(__webpack_exports__,"subBusinessDays",(function(){return subBusinessDays})),__webpack_require__.d(__webpack_exports__,"subDays",(function(){return subDays.a})),__webpack_require__.d(__webpack_exports__,"subHours",(function(){return subHours.a})),__webpack_require__.d(__webpack_exports__,"subISOWeekYears",(function(){return subISOWeekYears})),__webpack_require__.d(__webpack_exports__,"subMilliseconds",(function(){return subMilliseconds.a})),__webpack_require__.d(__webpack_exports__,"subMinutes",(function(){return subMinutes.a})),__webpack_require__.d(__webpack_exports__,"subMonths",(function(){return subMonths.a})),__webpack_require__.d(__webpack_exports__,"subQuarters",(function(){return subQuarters})),__webpack_require__.d(__webpack_exports__,"subSeconds",(function(){return subSeconds})),__webpack_require__.d(__webpack_exports__,"subWeeks",(function(){return subWeeks.a})),__webpack_require__.d(__webpack_exports__,"subYears",(function(){return subYears.a})),__webpack_require__.d(__webpack_exports__,"toDate",(function(){return toDate.a})),__webpack_require__.d(__webpack_exports__,"maxTime",(function(){return maxTime})),__webpack_require__.d(__webpack_exports__,"minTime",(function(){return minTime}));var addDays=__webpack_require__(9),addMonths=__webpack_require__(14),toDate=__webpack_require__(1),requiredArgs=__webpack_require__(0),toInteger=__webpack_require__(2);function add(dirtyDate,duration){if(Object(requiredArgs.a)(2,arguments),!duration||"object"!=typeof duration)return new Date(NaN);var years="years"in duration?Object(toInteger.a)(duration.years):0,months="months"in duration?Object(toInteger.a)(duration.months):0,weeks="weeks"in duration?Object(toInteger.a)(duration.weeks):0,days="days"in duration?Object(toInteger.a)(duration.days):0,hours="hours"in duration?Object(toInteger.a)(duration.hours):0,minutes="minutes"in duration?Object(toInteger.a)(duration.minutes):0,seconds="seconds"in duration?Object(toInteger.a)(duration.seconds):0,date=Object(toDate.a)(dirtyDate),dateWithMonths=months||years?Object(addMonths.a)(date,months+12*years):date,dateWithDays=days||weeks?Object(addDays.a)(dateWithMonths,days+7*weeks):dateWithMonths,minutesToAdd=minutes+60*hours,secondsToAdd=seconds+60*minutesToAdd,msToAdd=1e3*secondsToAdd,finalDate=new Date(dateWithDays.getTime()+msToAdd);return finalDate}function isWeekend(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),day=date.getDay();return 0===day||6===day}function isSunday(dirtyDate){return Object(requiredArgs.a)(1,arguments),0===Object(toDate.a)(dirtyDate).getDay()}function isSaturday(dirtyDate){return Object(requiredArgs.a)(1,arguments),6===Object(toDate.a)(dirtyDate).getDay()}function addBusinessDays(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),startedOnWeekend=isWeekend(date),amount=Object(toInteger.a)(dirtyAmount);if(isNaN(amount))return new Date(NaN);var hours=date.getHours(),sign=amount<0?-1:1,fullWeeks=Object(toInteger.a)(amount/5);date.setDate(date.getDate()+7*fullWeeks);for(var restDays=Math.abs(amount%5);restDays>0;)date.setDate(date.getDate()+sign),isWeekend(date)||(restDays-=1);return startedOnWeekend&&isWeekend(date)&&0!==amount&&(isSaturday(date)&&date.setDate(date.getDate()+(sign<0?2:-1)),isSunday(date)&&date.setDate(date.getDate()+(sign<0?1:-2))),date.setHours(hours),date}var addHours=__webpack_require__(43),startOfWeek=__webpack_require__(8);function startOfISOWeek(dirtyDate){return Object(requiredArgs.a)(1,arguments),Object(startOfWeek.a)(dirtyDate,{weekStartsOn:1})}function getISOWeekYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear(),fourthOfJanuaryOfNextYear=new Date(0);fourthOfJanuaryOfNextYear.setFullYear(year+1,0,4),fourthOfJanuaryOfNextYear.setHours(0,0,0,0);var startOfNextYear=startOfISOWeek(fourthOfJanuaryOfNextYear),fourthOfJanuaryOfThisYear=new Date(0);fourthOfJanuaryOfThisYear.setFullYear(year,0,4),fourthOfJanuaryOfThisYear.setHours(0,0,0,0);var startOfThisYear=startOfISOWeek(fourthOfJanuaryOfThisYear);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}function startOfISOWeekYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var year=getISOWeekYear(dirtyDate),fourthOfJanuary=new Date(0);fourthOfJanuary.setFullYear(year,0,4),fourthOfJanuary.setHours(0,0,0,0);var date=startOfISOWeek(fourthOfJanuary);return date}var differenceInCalendarDays=__webpack_require__(13);function setISOWeekYear(dirtyDate,dirtyISOWeekYear){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),isoWeekYear=Object(toInteger.a)(dirtyISOWeekYear),diff=Object(differenceInCalendarDays.a)(date,startOfISOWeekYear(date)),fourthOfJanuary=new Date(0);return fourthOfJanuary.setFullYear(isoWeekYear,0,4),fourthOfJanuary.setHours(0,0,0,0),(date=startOfISOWeekYear(fourthOfJanuary)).setDate(date.getDate()+diff),date}function addISOWeekYears(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return setISOWeekYear(dirtyDate,getISOWeekYear(dirtyDate)+amount)}var addMilliseconds=__webpack_require__(29),addMinutes=__webpack_require__(45);function addQuarters(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount),months=3*amount;return Object(addMonths.a)(dirtyDate,months)}function addSeconds(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return Object(addMilliseconds.a)(dirtyDate,1e3*amount)}var addWeeks=__webpack_require__(26),addYears=__webpack_require__(37);function areIntervalsOverlapping(dirtyIntervalLeft,dirtyIntervalRight){var options=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object(requiredArgs.a)(2,arguments);var intervalLeft=dirtyIntervalLeft||{},intervalRight=dirtyIntervalRight||{},leftStartTime=Object(toDate.a)(intervalLeft.start).getTime(),leftEndTime=Object(toDate.a)(intervalLeft.end).getTime(),rightStartTime=Object(toDate.a)(intervalRight.start).getTime(),rightEndTime=Object(toDate.a)(intervalRight.end).getTime();if(!(leftStartTime<=leftEndTime&&rightStartTime<=rightEndTime))throw new RangeError("Invalid interval");return options.inclusive?leftStartTime<=rightEndTime&&rightStartTime<=leftEndTime:leftStartTime0?1:diff}function compareDesc(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),diff=dateLeft.getTime()-dateRight.getTime();return diff>0?-1:diff<0?1:diff}var isValid=__webpack_require__(6),isSameDay=__webpack_require__(21);function differenceInBusinessDays(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight);if(!Object(isValid.a)(dateLeft)||!Object(isValid.a)(dateRight))return new Date(NaN);var calendarDifference=Object(differenceInCalendarDays.a)(dateLeft,dateRight),sign=calendarDifference<0?-1:1,weeks=Object(toInteger.a)(calendarDifference/7),result=5*weeks;for(dateRight=Object(addDays.a)(dateRight,7*weeks);!Object(isSameDay.a)(dateLeft,dateRight);)result+=isWeekend(dateRight)?0:sign,dateRight=Object(addDays.a)(dateRight,sign);return 0===result?0:result}function differenceInCalendarISOWeekYears(dirtyDateLeft,dirtyDateRight){return Object(requiredArgs.a)(2,arguments),getISOWeekYear(dirtyDateLeft)-getISOWeekYear(dirtyDateRight)}var getTimezoneOffsetInMilliseconds=__webpack_require__(7);function differenceInCalendarISOWeeks(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var startOfISOWeekLeft=startOfISOWeek(dirtyDateLeft),startOfISOWeekRight=startOfISOWeek(dirtyDateRight),timestampLeft=startOfISOWeekLeft.getTime()-Object(getTimezoneOffsetInMilliseconds.a)(startOfISOWeekLeft),timestampRight=startOfISOWeekRight.getTime()-Object(getTimezoneOffsetInMilliseconds.a)(startOfISOWeekRight);return Math.round((timestampLeft-timestampRight)/6048e5)}var differenceInCalendarMonths=__webpack_require__(36),getQuarter=__webpack_require__(34);function differenceInCalendarQuarters(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),yearDiff=dateLeft.getFullYear()-dateRight.getFullYear(),quarterDiff=Object(getQuarter.a)(dateLeft)-Object(getQuarter.a)(dateRight);return 4*yearDiff+quarterDiff}var differenceInCalendarWeeks=__webpack_require__(67),differenceInCalendarYears=__webpack_require__(38);function compareLocalAsc(dateLeft,dateRight){var diff=dateLeft.getFullYear()-dateRight.getFullYear()||dateLeft.getMonth()-dateRight.getMonth()||dateLeft.getDate()-dateRight.getDate()||dateLeft.getHours()-dateRight.getHours()||dateLeft.getMinutes()-dateRight.getMinutes()||dateLeft.getSeconds()-dateRight.getSeconds()||dateLeft.getMilliseconds()-dateRight.getMilliseconds();return diff<0?-1:diff>0?1:diff}function differenceInDays(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareLocalAsc(dateLeft,dateRight),difference=Math.abs(Object(differenceInCalendarDays.a)(dateLeft,dateRight));dateLeft.setDate(dateLeft.getDate()-sign*difference);var isLastDayNotFull=compareLocalAsc(dateLeft,dateRight)===-sign,result=sign*(difference-isLastDayNotFull);return 0===result?0:result}function differenceInMilliseconds(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight);return dateLeft.getTime()-dateRight.getTime()}function differenceInHours(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMilliseconds(dirtyDateLeft,dirtyDateRight)/36e5;return diff>0?Math.floor(diff):Math.ceil(diff)}function subISOWeekYears(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addISOWeekYears(dirtyDate,-amount)}function differenceInISOWeekYears(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareAsc(dateLeft,dateRight),difference=Math.abs(differenceInCalendarISOWeekYears(dateLeft,dateRight)),isLastISOWeekYearNotFull=compareAsc(dateLeft=subISOWeekYears(dateLeft,sign*difference),dateRight)===-sign,result=sign*(difference-isLastISOWeekYearNotFull);return 0===result?0:result}function differenceInMinutes(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMilliseconds(dirtyDateLeft,dirtyDateRight)/6e4;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInMonths(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareAsc(dateLeft,dateRight),difference=Math.abs(Object(differenceInCalendarMonths.a)(dateLeft,dateRight));dateLeft.setMonth(dateLeft.getMonth()-sign*difference);var isLastMonthNotFull=compareAsc(dateLeft,dateRight)===-sign,result=sign*(difference-isLastMonthNotFull);return 0===result?0:result}function differenceInQuarters(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMonths(dirtyDateLeft,dirtyDateRight)/3;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInSeconds(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMilliseconds(dirtyDateLeft,dirtyDateRight)/1e3;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInWeeks(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInDays(dirtyDateLeft,dirtyDateRight)/7;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInYears(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareAsc(dateLeft,dateRight),difference=Math.abs(Object(differenceInCalendarYears.a)(dateLeft,dateRight));dateLeft.setFullYear("1584"),dateRight.setFullYear("1584");var isLastYearNotFull=compareAsc(dateLeft,dateRight)===-sign,result=sign*(difference-isLastYearNotFull);return 0===result?0:result}function eachDayOfInterval(dirtyInterval,options){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var dates=[],currentDate=startDate;currentDate.setHours(0,0,0,0);var step=options&&"step"in options?Number(options.step):1;if(step<1||isNaN(step))throw new RangeError("`options.step` must be a number greater than 1");for(;currentDate.getTime()<=endTime;)dates.push(Object(toDate.a)(currentDate)),currentDate.setDate(currentDate.getDate()+step),currentDate.setHours(0,0,0,0);return dates}function eachHourOfInterval(dirtyInterval,options){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),startTime=startDate.getTime(),endTime=endDate.getTime();if(!(startTime<=endTime))throw new RangeError("Invalid interval");var dates=[],currentDate=startDate;currentDate.setMinutes(0,0,0);var step=options&&"step"in options?Number(options.step):1;if(step<1||isNaN(step))throw new RangeError("`options.step` must be a number greater than 1");for(;currentDate.getTime()<=endTime;)dates.push(Object(toDate.a)(currentDate)),currentDate=Object(addHours.a)(currentDate,step);return dates}function eachMonthOfInterval(dirtyInterval){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var dates=[],currentDate=startDate;for(currentDate.setHours(0,0,0,0),currentDate.setDate(1);currentDate.getTime()<=endTime;)dates.push(Object(toDate.a)(currentDate)),currentDate.setMonth(currentDate.getMonth()+1);return dates}var startOfQuarter=__webpack_require__(31);function eachQuarterOfInterval(dirtyInterval){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var startDateQuarter=Object(startOfQuarter.a)(startDate),endDateQuarter=Object(startOfQuarter.a)(endDate);endTime=endDateQuarter.getTime();for(var quarters=[],currentQuarter=startDateQuarter;currentQuarter.getTime()<=endTime;)quarters.push(Object(toDate.a)(currentQuarter)),currentQuarter=addQuarters(currentQuarter,1);return quarters}function eachWeekOfInterval(dirtyInterval,options){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var startDateWeek=Object(startOfWeek.a)(startDate,options),endDateWeek=Object(startOfWeek.a)(endDate,options);startDateWeek.setHours(15),endDateWeek.setHours(15),endTime=endDateWeek.getTime();for(var weeks=[],currentWeek=startDateWeek;currentWeek.getTime()<=endTime;)currentWeek.setHours(0),weeks.push(Object(toDate.a)(currentWeek)),(currentWeek=Object(addWeeks.a)(currentWeek,1)).setHours(15);return weeks}function eachWeekendOfInterval(interval){Object(requiredArgs.a)(1,arguments);for(var dateInterval=eachDayOfInterval(interval),weekends=[],index=0;index0?(dateLeft=Object(toDate.a)(dirtyBaseDate),dateRight=Object(toDate.a)(dirtyDate)):(dateLeft=Object(toDate.a)(dirtyDate),dateRight=Object(toDate.a)(dirtyBaseDate));var months,seconds=differenceInSeconds(dateRight,dateLeft),offsetInSeconds=(Object(getTimezoneOffsetInMilliseconds.a)(dateRight)-Object(getTimezoneOffsetInMilliseconds.a)(dateLeft))/1e3,minutes=Math.round((seconds-offsetInSeconds)/60);if(minutes<2)return options.includeSeconds?seconds<5?locale.formatDistance("lessThanXSeconds",5,localizeOptions):seconds<10?locale.formatDistance("lessThanXSeconds",10,localizeOptions):seconds<20?locale.formatDistance("lessThanXSeconds",20,localizeOptions):seconds<40?locale.formatDistance("halfAMinute",null,localizeOptions):seconds<60?locale.formatDistance("lessThanXMinutes",1,localizeOptions):locale.formatDistance("xMinutes",1,localizeOptions):0===minutes?locale.formatDistance("lessThanXMinutes",1,localizeOptions):locale.formatDistance("xMinutes",minutes,localizeOptions);if(minutes<45)return locale.formatDistance("xMinutes",minutes,localizeOptions);if(minutes<90)return locale.formatDistance("aboutXHours",1,localizeOptions);if(minutes<1440){var hours=Math.round(minutes/60);return locale.formatDistance("aboutXHours",hours,localizeOptions)}if(minutes<2520)return locale.formatDistance("xDays",1,localizeOptions);if(minutes<43200){var days=Math.round(minutes/1440);return locale.formatDistance("xDays",days,localizeOptions)}if(minutes<86400)return months=Math.round(minutes/43200),locale.formatDistance("aboutXMonths",months,localizeOptions);if((months=differenceInMonths(dateRight,dateLeft))<12){var nearestMonth=Math.round(minutes/43200);return locale.formatDistance("xMonths",nearestMonth,localizeOptions)}var monthsSinceStartOfYear=months%12,years=Math.floor(months/12);return monthsSinceStartOfYear<3?locale.formatDistance("aboutXYears",years,localizeOptions):monthsSinceStartOfYear<9?locale.formatDistance("overXYears",years,localizeOptions):locale.formatDistance("almostXYears",years+1,localizeOptions)}function formatDistanceStrict(dirtyDate,dirtyBaseDate,dirtyOptions){Object(requiredArgs.a)(2,arguments);var options=dirtyOptions||{},locale=options.locale||en_US.a;if(!locale.formatDistance)throw new RangeError("locale must contain localize.formatDistance property");var comparison=compareAsc(dirtyDate,dirtyBaseDate);if(isNaN(comparison))throw new RangeError("Invalid time value");var dateLeft,dateRight,localizeOptions=cloneObject(options);localizeOptions.addSuffix=Boolean(options.addSuffix),localizeOptions.comparison=comparison,comparison>0?(dateLeft=Object(toDate.a)(dirtyBaseDate),dateRight=Object(toDate.a)(dirtyDate)):(dateLeft=Object(toDate.a)(dirtyDate),dateRight=Object(toDate.a)(dirtyBaseDate));var roundingMethodFn,roundingMethod=null==options.roundingMethod?"round":String(options.roundingMethod);if("floor"===roundingMethod)roundingMethodFn=Math.floor;else if("ceil"===roundingMethod)roundingMethodFn=Math.ceil;else{if("round"!==roundingMethod)throw new RangeError("roundingMethod must be 'floor', 'ceil' or 'round'");roundingMethodFn=Math.round}var unit,seconds=differenceInSeconds(dateRight,dateLeft),offsetInSeconds=(Object(getTimezoneOffsetInMilliseconds.a)(dateRight)-Object(getTimezoneOffsetInMilliseconds.a)(dateLeft))/1e3,minutes=roundingMethodFn((seconds-offsetInSeconds)/60);if("second"===(unit=null==options.unit?minutes<1?"second":minutes<60?"minute":minutes<1440?"hour":minutes<43200?"day":minutes<525600?"month":"year":String(options.unit)))return locale.formatDistance("xSeconds",seconds,localizeOptions);if("minute"===unit)return locale.formatDistance("xMinutes",minutes,localizeOptions);if("hour"===unit){var hours=roundingMethodFn(minutes/60);return locale.formatDistance("xHours",hours,localizeOptions)}if("day"===unit){var days=roundingMethodFn(minutes/1440);return locale.formatDistance("xDays",days,localizeOptions)}if("month"===unit){var months=roundingMethodFn(minutes/43200);return locale.formatDistance("xMonths",months,localizeOptions)}if("year"===unit){var years=roundingMethodFn(minutes/525600);return locale.formatDistance("xYears",years,localizeOptions)}throw new RangeError("unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'")}function formatDistanceToNow(dirtyDate,dirtyOptions){return Object(requiredArgs.a)(1,arguments),formatDistance(dirtyDate,Date.now(),dirtyOptions)}function formatDistanceToNowStrict(dirtyDate,dirtyOptions){return Object(requiredArgs.a)(1,arguments),formatDistanceStrict(dirtyDate,Date.now(),dirtyOptions)}var defaultFormat=["years","months","weeks","days","hours","minutes","seconds"];function formatDuration(duration){var options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(arguments.length<1)throw new TypeError("1 argument required, but only ".concat(arguments.length," present"));var format=options.format||defaultFormat,locale=options.locale||en_US.a,zero=options.zero||!1,delimiter=options.delimiter||" ",result=format.reduce((function(acc,unit){var token="x".concat(unit.replace(/(^.)/,(function(m){return m.toUpperCase()})));return"number"==typeof duration[unit]&&(zero||duration[unit])?acc.concat(locale.formatDistance(token,duration[unit])):acc}),[]).join(delimiter);return result}var addLeadingZeros=__webpack_require__(4);function formatISO(dirtyDate,dirtyOptions){if(arguments.length<1)throw new TypeError("1 argument required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var options=dirtyOptions||{},format=null==options.format?"extended":String(options.format),representation=null==options.representation?"complete":String(options.representation);if("extended"!==format&&"basic"!==format)throw new RangeError("format must be 'extended' or 'basic'");if("date"!==representation&&"time"!==representation&&"complete"!==representation)throw new RangeError("representation must be 'date', 'time', or 'complete'");var result="",tzOffset="",dateDelimiter="extended"===format?"-":"",timeDelimiter="extended"===format?":":"";if("time"!==representation){var day=Object(addLeadingZeros.a)(originalDate.getDate(),2),month=Object(addLeadingZeros.a)(originalDate.getMonth()+1,2),year=Object(addLeadingZeros.a)(originalDate.getFullYear(),4);result="".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day)}if("date"!==representation){var offset=originalDate.getTimezoneOffset();if(0!==offset){var absoluteOffset=Math.abs(offset),hourOffset=Object(addLeadingZeros.a)(Math.floor(absoluteOffset/60),2),minuteOffset=Object(addLeadingZeros.a)(absoluteOffset%60,2),sign=offset<0?"+":"-";tzOffset="".concat(sign).concat(hourOffset,":").concat(minuteOffset)}else tzOffset="Z";var hour=Object(addLeadingZeros.a)(originalDate.getHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getSeconds(),2),separator=""===result?"":"T",time=[hour,minute,second].join(timeDelimiter);result="".concat(result).concat(separator).concat(time).concat(tzOffset)}return result}function formatISO9075(dirtyDate,dirtyOptions){if(arguments.length<1)throw new TypeError("1 argument required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var options=dirtyOptions||{},format=null==options.format?"extended":String(options.format),representation=null==options.representation?"complete":String(options.representation);if("extended"!==format&&"basic"!==format)throw new RangeError("format must be 'extended' or 'basic'");if("date"!==representation&&"time"!==representation&&"complete"!==representation)throw new RangeError("representation must be 'date', 'time', or 'complete'");var result="",dateDelimiter="extended"===format?"-":"",timeDelimiter="extended"===format?":":"";if("time"!==representation){var day=Object(addLeadingZeros.a)(originalDate.getDate(),2),month=Object(addLeadingZeros.a)(originalDate.getMonth()+1,2),year=Object(addLeadingZeros.a)(originalDate.getFullYear(),4);result="".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day)}if("date"!==representation){var hour=Object(addLeadingZeros.a)(originalDate.getHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getSeconds(),2),separator=""===result?"":" ";result="".concat(result).concat(separator).concat(hour).concat(timeDelimiter).concat(minute).concat(timeDelimiter).concat(second)}return result}function formatISODuration(duration){if(Object(requiredArgs.a)(1,arguments),"object"!=typeof duration)throw new Error("Duration must be an object");var _duration$years=duration.years,years=void 0===_duration$years?0:_duration$years,_duration$months=duration.months,months=void 0===_duration$months?0:_duration$months,_duration$days=duration.days,days=void 0===_duration$days?0:_duration$days,_duration$hours=duration.hours,hours=void 0===_duration$hours?0:_duration$hours,_duration$minutes=duration.minutes,minutes=void 0===_duration$minutes?0:_duration$minutes,_duration$seconds=duration.seconds,seconds=void 0===_duration$seconds?0:_duration$seconds;return"P".concat(years,"Y").concat(months,"M").concat(days,"DT").concat(hours,"H").concat(minutes,"M").concat(seconds,"S")}function formatRFC3339(dirtyDate,dirtyOptions){if(arguments.length<1)throw new TypeError("1 arguments required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var options=dirtyOptions||{},fractionDigits=null==options.fractionDigits?0:Object(toInteger.a)(options.fractionDigits);if(!(fractionDigits>=0&&fractionDigits<=3))throw new RangeError("fractionDigits must be between 0 and 3 inclusively");var day=Object(addLeadingZeros.a)(originalDate.getDate(),2),month=Object(addLeadingZeros.a)(originalDate.getMonth()+1,2),year=originalDate.getFullYear(),hour=Object(addLeadingZeros.a)(originalDate.getHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getSeconds(),2),fractionalSecond="";if(fractionDigits>0){var milliseconds=originalDate.getMilliseconds(),fractionalSeconds=Math.floor(milliseconds*Math.pow(10,fractionDigits-3));fractionalSecond="."+Object(addLeadingZeros.a)(fractionalSeconds,fractionDigits)}var offset="",tzOffset=originalDate.getTimezoneOffset();if(0!==tzOffset){var absoluteOffset=Math.abs(tzOffset),hourOffset=Object(addLeadingZeros.a)(absoluteOffset/60,2),minuteOffset=Object(addLeadingZeros.a)(absoluteOffset%60,2),sign=tzOffset<0?"+":"-";offset="".concat(sign).concat(hourOffset,":").concat(minuteOffset)}else offset="Z";return"".concat(year,"-").concat(month,"-").concat(day,"T").concat(hour,":").concat(minute,":").concat(second).concat(fractionalSecond).concat(offset)}var formatRFC7231_days=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],formatRFC7231_months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function formatRFC7231(dirtyDate){if(arguments.length<1)throw new TypeError("1 arguments required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var dayName=formatRFC7231_days[originalDate.getUTCDay()],dayOfMonth=Object(addLeadingZeros.a)(originalDate.getUTCDate(),2),monthName=formatRFC7231_months[originalDate.getUTCMonth()],year=originalDate.getUTCFullYear(),hour=Object(addLeadingZeros.a)(originalDate.getUTCHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getUTCMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getUTCSeconds(),2);return"".concat(dayName,", ").concat(dayOfMonth," ").concat(monthName," ").concat(year," ").concat(hour,":").concat(minute,":").concat(second," GMT")}var subMilliseconds=__webpack_require__(25);function formatRelative(dirtyDate,dirtyBaseDate,dirtyOptions){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),baseDate=Object(toDate.a)(dirtyBaseDate),options=dirtyOptions||{},locale=options.locale||en_US.a;if(!locale.localize)throw new RangeError("locale must contain localize property");if(!locale.formatLong)throw new RangeError("locale must contain formatLong property");if(!locale.formatRelative)throw new RangeError("locale must contain formatRelative property");var token,diff=Object(differenceInCalendarDays.a)(date,baseDate);if(isNaN(diff))throw new RangeError("Invalid time value");token=diff<-6?"other":diff<-1?"lastWeek":diff<0?"yesterday":diff<1?"today":diff<2?"tomorrow":diff<7?"nextWeek":"other";var utcDate=Object(subMilliseconds.a)(date,Object(getTimezoneOffsetInMilliseconds.a)(date)),utcBaseDate=Object(subMilliseconds.a)(baseDate,Object(getTimezoneOffsetInMilliseconds.a)(baseDate)),formatStr=locale.formatRelative(token,utcDate,utcBaseDate,options);return Object(esm_format.a)(date,formatStr,options)}function fromUnixTime(dirtyUnixTime){Object(requiredArgs.a)(1,arguments);var unixTime=Object(toInteger.a)(dirtyUnixTime);return Object(toDate.a)(1e3*unixTime)}var getDate=__webpack_require__(52),getDay=__webpack_require__(63);function getDayOfYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=Object(differenceInCalendarDays.a)(date,Object(startOfYear.a)(date)),dayOfYear=diff+1;return dayOfYear}var getDaysInMonth=__webpack_require__(78);function isLeapYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear();return year%400==0||year%4==0&&year%100!=0}function getDaysInYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate);return isNaN(date)?NaN:isLeapYear(date)?366:365}function getDecade(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear(),decade=10*Math.floor(year/10);return decade}var getHours=__webpack_require__(15);function getISODay(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),day=date.getDay();return 0===day&&(day=7),day}function getISOWeek(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=startOfISOWeek(date).getTime()-startOfISOWeekYear(date).getTime();return Math.round(diff/6048e5)+1}function getISOWeeksInYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var thisYear=startOfISOWeekYear(dirtyDate),nextYear=startOfISOWeekYear(Object(addWeeks.a)(thisYear,60)),diff=nextYear.valueOf()-thisYear.valueOf();return Math.round(diff/6048e5)}function getMilliseconds(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),milliseconds=date.getMilliseconds();return milliseconds}var getMinutes=__webpack_require__(17),getMonth=__webpack_require__(24);function getOverlappingDaysInIntervals(dirtyIntervalLeft,dirtyIntervalRight){Object(requiredArgs.a)(2,arguments);var intervalLeft=dirtyIntervalLeft||{},intervalRight=dirtyIntervalRight||{},leftStartTime=Object(toDate.a)(intervalLeft.start).getTime(),leftEndTime=Object(toDate.a)(intervalLeft.end).getTime(),rightStartTime=Object(toDate.a)(intervalRight.start).getTime(),rightEndTime=Object(toDate.a)(intervalRight.end).getTime();if(!(leftStartTime<=leftEndTime&&rightStartTime<=rightEndTime))throw new RangeError("Invalid interval");var isOverlapping=leftStartTimeleftEndTime?leftEndTime:rightEndTime,differenceInMs=overlapEndDate-overlapStartDate;return Math.ceil(differenceInMs/864e5)}var getSeconds=__webpack_require__(79),getTime=__webpack_require__(46);function getUnixTime(dirtyDate){return Object(requiredArgs.a)(1,arguments),Math.floor(Object(getTime.a)(dirtyDate)/1e3)}var getWeek=__webpack_require__(59);function getWeekOfMonth(date,dirtyOptions){Object(requiredArgs.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var currentDayOfMonth=Object(getDate.a)(date);if(isNaN(currentDayOfMonth))return currentDayOfMonth;var startWeekDay=Object(getDay.a)(Object(startOfMonth.a)(date)),lastDayOfFirstWeek=0,weekNumber=1;if(currentDayOfMonth>(lastDayOfFirstWeek=startWeekDay>=weekStartsOn?weekStartsOn+7-startWeekDay:weekStartsOn-startWeekDay)){var remainingDaysAfterFirstWeek=currentDayOfMonth-lastDayOfFirstWeek;weekNumber+=Math.ceil(remainingDaysAfterFirstWeek/7)}return weekNumber}var getWeekYear=__webpack_require__(76);function lastDayOfMonth(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),month=date.getMonth();return date.setFullYear(date.getFullYear(),month+1,0),date.setHours(0,0,0,0),date}function getWeeksInMonth(date,options){return Object(requiredArgs.a)(1,arguments),Object(differenceInCalendarWeeks.a)(lastDayOfMonth(date),Object(startOfMonth.a)(date),options)+1}var getYear=__webpack_require__(5),subDays=__webpack_require__(44),subMonths=__webpack_require__(35);function sub(dirtyDate,duration){if(Object(requiredArgs.a)(2,arguments),!duration||"object"!=typeof duration)return new Date(NaN);var years="years"in duration?Object(toInteger.a)(duration.years):0,months="months"in duration?Object(toInteger.a)(duration.months):0,weeks="weeks"in duration?Object(toInteger.a)(duration.weeks):0,days="days"in duration?Object(toInteger.a)(duration.days):0,hours="hours"in duration?Object(toInteger.a)(duration.hours):0,minutes="minutes"in duration?Object(toInteger.a)(duration.minutes):0,seconds="seconds"in duration?Object(toInteger.a)(duration.seconds):0,dateWithoutMonths=Object(subMonths.a)(Object(toDate.a)(dirtyDate),months+12*years),dateWithoutDays=Object(subDays.a)(dateWithoutMonths,days+7*weeks),minutestoSub=minutes+60*hours,secondstoSub=seconds+60*minutestoSub,mstoSub=1e3*secondstoSub,finalDate=new Date(dateWithoutDays.getTime()-mstoSub);return finalDate}function intervalToDuration(_ref){var start=_ref.start,end=_ref.end;Object(requiredArgs.a)(1,arguments);var dateLeft=Object(toDate.a)(start),dateRight=Object(toDate.a)(end);if(!Object(isValid.a)(dateLeft))throw new RangeError("Start Date is invalid");if(!Object(isValid.a)(dateRight))throw new RangeError("End Date is invalid");var duration={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},sign=compareAsc(dateLeft,dateRight);duration.years=Math.abs(differenceInYears(dateLeft,dateRight));var remainingMonths=sub(dateLeft,{years:sign*duration.years});duration.months=Math.abs(differenceInMonths(remainingMonths,dateRight));var remainingDays=sub(remainingMonths,{months:sign*duration.months});duration.days=Math.abs(differenceInDays(remainingDays,dateRight));var remainingHours=sub(remainingDays,{days:sign*duration.days});duration.hours=Math.abs(differenceInHours(remainingHours,dateRight));var remainingMinutes=sub(remainingHours,{hours:sign*duration.hours});duration.minutes=Math.abs(differenceInMinutes(remainingMinutes,dateRight));var remainingSeconds=sub(remainingMinutes,{minutes:sign*duration.minutes});return duration.seconds=Math.abs(differenceInSeconds(remainingSeconds,dateRight)),duration}var isAfter=__webpack_require__(23),isBefore=__webpack_require__(40),isDate=__webpack_require__(72),isEqual=__webpack_require__(77);function isExists(year,month,day){if(arguments.length<3)throw new TypeError("3 argument required, but only "+arguments.length+" present");var date=new Date(year,month,day);return date.getFullYear()===year&&date.getMonth()===month&&date.getDate()===day}function isFirstDayOfMonth(dirtyDate){return Object(requiredArgs.a)(1,arguments),1===Object(toDate.a)(dirtyDate).getDate()}function isFriday(dirtyDate){return Object(requiredArgs.a)(1,arguments),5===Object(toDate.a)(dirtyDate).getDay()}function isFuture(dirtyDate){return Object(requiredArgs.a)(1,arguments),Object(toDate.a)(dirtyDate).getTime()>Date.now()}function isLastDayOfMonth(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate);return Object(endOfDay.a)(date).getTime()===Object(endOfMonth.a)(date).getTime()}var parse=__webpack_require__(47);function isMatch(dateString,formatString,dirtyOptions){return Object(requiredArgs.a)(2,arguments),Object(isValid.a)(Object(parse.a)(dateString,formatString,new Date,dirtyOptions))}function isMonday(dirtyDate){return Object(requiredArgs.a)(1,arguments),1===Object(toDate.a)(dirtyDate).getDay()}function isPast(dirtyDate){return Object(requiredArgs.a)(1,arguments),Object(toDate.a)(dirtyDate).getTime()=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6");var date=Object(toDate.a)(dirtyDate),day=date.getDay(),diff=6+(day30)throw new RangeError("`options.nearestTo` must be between 1 and 30");var date=Object(toDate.a)(dirtyDate),seconds=date.getSeconds(),minutes=date.getMinutes()+seconds/60,roundedMinutes=Math.floor(minutes/nearestTo)*nearestTo,remainderMinutes=minutes%nearestTo,addedMinutes=Math.round(remainderMinutes/nearestTo)*nearestTo;return new Date(date.getFullYear(),date.getMonth(),date.getDate(),date.getHours(),roundedMinutes+addedMinutes)}var setMonth=__webpack_require__(16);function set(dirtyDate,values){if(Object(requiredArgs.a)(2,arguments),"object"!=typeof values||null===values)throw new RangeError("values parameter must be an object");var date=Object(toDate.a)(dirtyDate);return isNaN(date)?new Date(NaN):(null!=values.year&&date.setFullYear(values.year),null!=values.month&&(date=Object(setMonth.a)(date,values.month)),null!=values.date&&date.setDate(Object(toInteger.a)(values.date)),null!=values.hours&&date.setHours(Object(toInteger.a)(values.hours)),null!=values.minutes&&date.setMinutes(Object(toInteger.a)(values.minutes)),null!=values.seconds&&date.setSeconds(Object(toInteger.a)(values.seconds)),null!=values.milliseconds&&date.setMilliseconds(Object(toInteger.a)(values.milliseconds)),date)}function setDate(dirtyDate,dirtyDayOfMonth){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),dayOfMonth=Object(toInteger.a)(dirtyDayOfMonth);return date.setDate(dayOfMonth),date}function setDay(dirtyDate,dirtyDay,dirtyOptions){Object(requiredArgs.a)(2,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(toDate.a)(dirtyDate,options),day=Object(toInteger.a)(dirtyDay),currentDay=date.getDay(),remainder=day%7,dayIndex=(remainder+7)%7,delta=7-weekStartsOn,diff=day<0||day>6?day-(currentDay+delta)%7:(dayIndex+delta)%7-(currentDay+delta)%7;return Object(addDays.a)(date,diff,options)}function setDayOfYear(dirtyDate,dirtyDayOfYear){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),dayOfYear=Object(toInteger.a)(dirtyDayOfYear);return date.setMonth(0),date.setDate(dayOfYear),date}var setHours=__webpack_require__(53);function setISODay(dirtyDate,dirtyDay){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),day=Object(toInteger.a)(dirtyDay),currentDay=getISODay(date),diff=day-currentDay;return Object(addDays.a)(date,diff)}function setISOWeek(dirtyDate,dirtyISOWeek){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),isoWeek=Object(toInteger.a)(dirtyISOWeek),diff=getISOWeek(date)-isoWeek;return date.setDate(date.getDate()-7*diff),date}function setMilliseconds(dirtyDate,dirtyMilliseconds){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),milliseconds=Object(toInteger.a)(dirtyMilliseconds);return date.setMilliseconds(milliseconds),date}var setMinutes=__webpack_require__(54),setQuarter=__webpack_require__(48),setSeconds=__webpack_require__(75);function setWeek(dirtyDate,dirtyWeek,dirtyOptions){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),week=Object(toInteger.a)(dirtyWeek),diff=Object(getWeek.a)(date,dirtyOptions)-week;return date.setDate(date.getDate()-7*diff),date}var startOfWeekYear=__webpack_require__(51);function setWeekYear(dirtyDate,dirtyWeekYear,dirtyOptions){Object(requiredArgs.a)(2,arguments);var options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate),date=Object(toDate.a)(dirtyDate),weekYear=Object(toInteger.a)(dirtyWeekYear),diff=Object(differenceInCalendarDays.a)(date,Object(startOfWeekYear.a)(date,dirtyOptions)),firstWeek=new Date(0);return firstWeek.setFullYear(weekYear,0,firstWeekContainsDate),firstWeek.setHours(0,0,0,0),(date=Object(startOfWeekYear.a)(firstWeek,dirtyOptions)).setDate(date.getDate()+diff),date}var setYear=__webpack_require__(56),startOfDay=__webpack_require__(19);function startOfDecade(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear(),decade=10*Math.floor(year/10);return date.setFullYear(decade,0,1),date.setHours(0,0,0,0),date}function startOfToday(){return Object(startOfDay.a)(Date.now())}function startOfTomorrow(){var now=new Date,year=now.getFullYear(),month=now.getMonth(),day=now.getDate(),date=new Date(0);return date.setFullYear(year,month,day+1),date.setHours(0,0,0,0),date}function startOfYesterday(){var now=new Date,year=now.getFullYear(),month=now.getMonth(),day=now.getDate(),date=new Date(0);return date.setFullYear(year,month,day-1),date.setHours(0,0,0,0),date}function subBusinessDays(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addBusinessDays(dirtyDate,-amount)}var subHours=__webpack_require__(91),subMinutes=__webpack_require__(92);function subQuarters(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addQuarters(dirtyDate,-amount)}function subSeconds(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addSeconds(dirtyDate,-amount)}var subWeeks=__webpack_require__(80),subYears=__webpack_require__(55),maxTime=24*Math.pow(10,8)*60*60*1e3,minTime=-maxTime},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"CalendarContainer",(function(){return Et})),__webpack_require__.d(__webpack_exports__,"getDefaultLocale",(function(){return Ke})),__webpack_require__.d(__webpack_exports__,"registerLocale",(function(){return Be})),__webpack_require__.d(__webpack_exports__,"setDefaultLocale",(function(){return je}));var react=__webpack_require__(3),react_default=__webpack_require__.n(react),classnames=(__webpack_require__(106),__webpack_require__(18)),classnames_default=__webpack_require__.n(classnames),isDate=__webpack_require__(72),isValid=__webpack_require__(6),format=__webpack_require__(39),addMinutes=__webpack_require__(45),addHours=__webpack_require__(43),addDays=__webpack_require__(9),addWeeks=__webpack_require__(26),addMonths=__webpack_require__(14),addYears=__webpack_require__(37),subDays=__webpack_require__(44),subWeeks=__webpack_require__(80),subMonths=__webpack_require__(35),subYears=__webpack_require__(55),getSeconds=__webpack_require__(79),getMinutes=__webpack_require__(17),getHours=__webpack_require__(15),getDay=__webpack_require__(63),getDate=__webpack_require__(52),getWeek=__webpack_require__(59),getMonth=__webpack_require__(24),getQuarter=__webpack_require__(34),getYear=__webpack_require__(5),getTime=__webpack_require__(46),setSeconds=__webpack_require__(75),setMinutes=__webpack_require__(54),setHours=__webpack_require__(53),setMonth=__webpack_require__(16),setQuarter=__webpack_require__(48),setYear=__webpack_require__(56),min=__webpack_require__(70),max=__webpack_require__(71),differenceInCalendarDays=__webpack_require__(13),differenceInCalendarMonths=__webpack_require__(36),differenceInCalendarYears=__webpack_require__(38),startOfDay=__webpack_require__(19),startOfWeek=__webpack_require__(8),startOfMonth=__webpack_require__(30),startOfQuarter=__webpack_require__(31),startOfYear=__webpack_require__(41),endOfDay=__webpack_require__(42),isEqual=__webpack_require__(77),isSameDay=__webpack_require__(21),isSameMonth=__webpack_require__(61),isSameYear=__webpack_require__(60),isSameQuarter=__webpack_require__(62),isAfter=__webpack_require__(23),isBefore=__webpack_require__(40),isWithinInterval=__webpack_require__(69),toDate=__webpack_require__(1),parse=__webpack_require__(47),parseISO=__webpack_require__(74),react_dom=__webpack_require__(49),react_dom_default=__webpack_require__.n(react_dom);function isNodeFound(current,componentNode,ignoreClass){return current===componentNode||(current.correspondingElement?current.correspondingElement.classList.contains(ignoreClass):current.classList.contains(ignoreClass))}var passiveEventSupport,uid=function autoInc(seed){return void 0===seed&&(seed=0),function(){return++seed}}(),handlersMap={},enabledInstances={},touchEvents=["touchstart","touchmove"];function getEventHandlerOptions(instance,eventName){var handlerOptions=null;return-1!==touchEvents.indexOf(eventName)&&passiveEventSupport&&(handlerOptions={passive:!instance.props.preventDefault}),handlerOptions}var react_onclickoutside_es=function onClickOutsideHOC(WrappedComponent,config){var _class,_temp,componentName=WrappedComponent.displayName||WrappedComponent.name||"Component";return _temp=_class=function(_Component){function onClickOutside(props){var _this;return(_this=_Component.call(this,props)||this).__outsideClickHandler=function(event){if("function"!=typeof _this.__clickOutsideHandlerProp){var instance=_this.getInstance();if("function"!=typeof instance.props.handleClickOutside){if("function"!=typeof instance.handleClickOutside)throw new Error("WrappedComponent: "+componentName+" lacks a handleClickOutside(event) function for processing outside click events.");instance.handleClickOutside(event)}else instance.props.handleClickOutside(event)}else _this.__clickOutsideHandlerProp(event)},_this.__getComponentNode=function(){var instance=_this.getInstance();return config&&"function"==typeof config.setClickOutsideRef?config.setClickOutsideRef()(instance):"function"==typeof instance.setClickOutsideRef?instance.setClickOutsideRef():Object(react_dom.findDOMNode)(instance)},_this.enableOnClickOutside=function(){if("undefined"!=typeof document&&!enabledInstances[_this._uid]){void 0===passiveEventSupport&&(passiveEventSupport=function testPassiveEventSupport(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var passive=!1,options=Object.defineProperty({},"passive",{get:function get(){passive=!0}}),noop=function noop(){};return window.addEventListener("testPassiveEventSupport",noop,options),window.removeEventListener("testPassiveEventSupport",noop,options),passive}}()),enabledInstances[_this._uid]=!0;var events=_this.props.eventTypes;events.forEach||(events=[events]),handlersMap[_this._uid]=function(event){null!==_this.componentNode&&(_this.props.preventDefault&&event.preventDefault(),_this.props.stopPropagation&&event.stopPropagation(),_this.props.excludeScrollbar&&function clickedScrollbar(evt){return document.documentElement.clientWidth<=evt.clientX||document.documentElement.clientHeight<=evt.clientY}(event)||function findHighest(current,componentNode,ignoreClass){if(current===componentNode)return!0;for(;current.parentNode;){if(isNodeFound(current,componentNode,ignoreClass))return!0;current=current.parentNode}return current}(event.target,_this.componentNode,_this.props.outsideClickIgnoreClass)===document&&_this.__outsideClickHandler(event))},events.forEach((function(eventName){document.addEventListener(eventName,handlersMap[_this._uid],getEventHandlerOptions(_this,eventName))}))}},_this.disableOnClickOutside=function(){delete enabledInstances[_this._uid];var fn=handlersMap[_this._uid];if(fn&&"undefined"!=typeof document){var events=_this.props.eventTypes;events.forEach||(events=[events]),events.forEach((function(eventName){return document.removeEventListener(eventName,fn,getEventHandlerOptions(_this,eventName))})),delete handlersMap[_this._uid]}},_this.getRef=function(ref){return _this.instanceRef=ref},_this._uid=uid(),_this}!function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype),subClass.prototype.constructor=subClass,subClass.__proto__=superClass}(onClickOutside,_Component);var _proto=onClickOutside.prototype;return _proto.getInstance=function getInstance(){if(!WrappedComponent.prototype.isReactComponent)return this;var ref=this.instanceRef;return ref.getInstance?ref.getInstance():ref},_proto.componentDidMount=function componentDidMount(){if("undefined"!=typeof document&&document.createElement){var instance=this.getInstance();if(config&&"function"==typeof config.handleClickOutside&&(this.__clickOutsideHandlerProp=config.handleClickOutside(instance),"function"!=typeof this.__clickOutsideHandlerProp))throw new Error("WrappedComponent: "+componentName+" lacks a function for processing outside click events specified by the handleClickOutside config option.");this.componentNode=this.__getComponentNode(),this.props.disableOnClickOutside||this.enableOnClickOutside()}},_proto.componentDidUpdate=function componentDidUpdate(){this.componentNode=this.__getComponentNode()},_proto.componentWillUnmount=function componentWillUnmount(){this.disableOnClickOutside()},_proto.render=function render(){var _props=this.props,props=(_props.excludeScrollbar,function _objectWithoutProperties(source,excluded){if(null==source)return{};var key,i,target={},sourceKeys=Object.keys(source);for(i=0;i=0||(target[key]=source[key]);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}(_props,["excludeScrollbar"]));return WrappedComponent.prototype.isReactComponent?props.ref=this.getRef:props.wrappedRef=this.getRef,props.disableOnClickOutside=this.disableOnClickOutside,props.enableOnClickOutside=this.enableOnClickOutside,Object(react.createElement)(WrappedComponent,props)},onClickOutside}(react.Component),_class.displayName="OnClickOutside("+componentName+")",_class.defaultProps={eventTypes:["mousedown","touchstart"],excludeScrollbar:config&&config.excludeScrollbar||!1,outsideClickIgnoreClass:"ignore-react-onclickoutside",preventDefault:!1,stopPropagation:!1},_class.getClass=function(){return WrappedComponent.getClass?WrappedComponent.getClass():WrappedComponent},_temp},objectWithoutPropertiesLoose=__webpack_require__(117),objectWithoutPropertiesLoose_default=__webpack_require__.n(objectWithoutPropertiesLoose),helpers_extends=__webpack_require__(57),extends_default=__webpack_require__.n(helpers_extends),assertThisInitialized=__webpack_require__(10),assertThisInitialized_default=__webpack_require__.n(assertThisInitialized),inheritsLoose=__webpack_require__(65),inheritsLoose_default=__webpack_require__.n(inheritsLoose),defineProperty=__webpack_require__(11),defineProperty_default=__webpack_require__.n(defineProperty),deep_equal=__webpack_require__(118),deep_equal_default=__webpack_require__.n(deep_equal),isBrowser="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,timeoutDuration=function(){for(var longerTimeoutBrowsers=["Edge","Trident","Firefox"],i=0;i=0)return 1;return 0}();var debounce=isBrowser&&window.Promise?function microtaskDebounce(fn){var called=!1;return function(){called||(called=!0,window.Promise.resolve().then((function(){called=!1,fn()})))}}:function taskDebounce(fn){var scheduled=!1;return function(){scheduled||(scheduled=!0,setTimeout((function(){scheduled=!1,fn()}),timeoutDuration))}};function isFunction(functionToCheck){return functionToCheck&&"[object Function]"==={}.toString.call(functionToCheck)}function getStyleComputedProperty(element,property){if(1!==element.nodeType)return[];var css=element.ownerDocument.defaultView.getComputedStyle(element,null);return property?css[property]:css}function getParentNode(element){return"HTML"===element.nodeName?element:element.parentNode||element.host}function getScrollParent(element){if(!element)return document.body;switch(element.nodeName){case"HTML":case"BODY":return element.ownerDocument.body;case"#document":return element.body}var _getStyleComputedProp=getStyleComputedProperty(element),overflow=_getStyleComputedProp.overflow,overflowX=_getStyleComputedProp.overflowX,overflowY=_getStyleComputedProp.overflowY;return/(auto|scroll|overlay)/.test(overflow+overflowY+overflowX)?element:getScrollParent(getParentNode(element))}function getReferenceNode(reference){return reference&&reference.referenceNode?reference.referenceNode:reference}var isIE11=isBrowser&&!(!window.MSInputMethodContext||!document.documentMode),isIE10=isBrowser&&/MSIE 10/.test(navigator.userAgent);function isIE(version){return 11===version?isIE11:10===version?isIE10:isIE11||isIE10}function getOffsetParent(element){if(!element)return document.documentElement;for(var noOffsetParent=isIE(10)?document.body:null,offsetParent=element.offsetParent||null;offsetParent===noOffsetParent&&element.nextElementSibling;)offsetParent=(element=element.nextElementSibling).offsetParent;var nodeName=offsetParent&&offsetParent.nodeName;return nodeName&&"BODY"!==nodeName&&"HTML"!==nodeName?-1!==["TH","TD","TABLE"].indexOf(offsetParent.nodeName)&&"static"===getStyleComputedProperty(offsetParent,"position")?getOffsetParent(offsetParent):offsetParent:element?element.ownerDocument.documentElement:document.documentElement}function getRoot(node){return null!==node.parentNode?getRoot(node.parentNode):node}function findCommonOffsetParent(element1,element2){if(!(element1&&element1.nodeType&&element2&&element2.nodeType))return document.documentElement;var order=element1.compareDocumentPosition(element2)&Node.DOCUMENT_POSITION_FOLLOWING,start=order?element1:element2,end=order?element2:element1,range=document.createRange();range.setStart(start,0),range.setEnd(end,0);var commonAncestorContainer=range.commonAncestorContainer;if(element1!==commonAncestorContainer&&element2!==commonAncestorContainer||start.contains(end))return function isOffsetContainer(element){var nodeName=element.nodeName;return"BODY"!==nodeName&&("HTML"===nodeName||getOffsetParent(element.firstElementChild)===element)}(commonAncestorContainer)?commonAncestorContainer:getOffsetParent(commonAncestorContainer);var element1root=getRoot(element1);return element1root.host?findCommonOffsetParent(element1root.host,element2):findCommonOffsetParent(element1,getRoot(element2).host)}function getScroll(element){var side=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",upperSide="top"===side?"scrollTop":"scrollLeft",nodeName=element.nodeName;if("BODY"===nodeName||"HTML"===nodeName){var html=element.ownerDocument.documentElement,scrollingElement=element.ownerDocument.scrollingElement||html;return scrollingElement[upperSide]}return element[upperSide]}function includeScroll(rect,element){var subtract=arguments.length>2&&void 0!==arguments[2]&&arguments[2],scrollTop=getScroll(element,"top"),scrollLeft=getScroll(element,"left"),modifier=subtract?-1:1;return rect.top+=scrollTop*modifier,rect.bottom+=scrollTop*modifier,rect.left+=scrollLeft*modifier,rect.right+=scrollLeft*modifier,rect}function getBordersSize(styles,axis){var sideA="x"===axis?"Left":"Top",sideB="Left"===sideA?"Right":"Bottom";return parseFloat(styles["border"+sideA+"Width"])+parseFloat(styles["border"+sideB+"Width"])}function getSize(axis,body,html,computedStyle){return Math.max(body["offset"+axis],body["scroll"+axis],html["client"+axis],html["offset"+axis],html["scroll"+axis],isIE(10)?parseInt(html["offset"+axis])+parseInt(computedStyle["margin"+("Height"===axis?"Top":"Left")])+parseInt(computedStyle["margin"+("Height"===axis?"Bottom":"Right")]):0)}function getWindowSizes(document){var body=document.body,html=document.documentElement,computedStyle=isIE(10)&&getComputedStyle(html);return{height:getSize("Height",body,html,computedStyle),width:getSize("Width",body,html,computedStyle)}}var classCallCheck=function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")},createClass=function(){function defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isIE10=isIE(10),isHTML="HTML"===parent.nodeName,childrenRect=getBoundingClientRect(children),parentRect=getBoundingClientRect(parent),scrollParent=getScrollParent(children),styles=getStyleComputedProperty(parent),borderTopWidth=parseFloat(styles.borderTopWidth),borderLeftWidth=parseFloat(styles.borderLeftWidth);fixedPosition&&isHTML&&(parentRect.top=Math.max(parentRect.top,0),parentRect.left=Math.max(parentRect.left,0));var offsets=getClientRect({top:childrenRect.top-parentRect.top-borderTopWidth,left:childrenRect.left-parentRect.left-borderLeftWidth,width:childrenRect.width,height:childrenRect.height});if(offsets.marginTop=0,offsets.marginLeft=0,!isIE10&&isHTML){var marginTop=parseFloat(styles.marginTop),marginLeft=parseFloat(styles.marginLeft);offsets.top-=borderTopWidth-marginTop,offsets.bottom-=borderTopWidth-marginTop,offsets.left-=borderLeftWidth-marginLeft,offsets.right-=borderLeftWidth-marginLeft,offsets.marginTop=marginTop,offsets.marginLeft=marginLeft}return(isIE10&&!fixedPosition?parent.contains(scrollParent):parent===scrollParent&&"BODY"!==scrollParent.nodeName)&&(offsets=includeScroll(offsets,parent)),offsets}function getViewportOffsetRectRelativeToArtbitraryNode(element){var excludeScroll=arguments.length>1&&void 0!==arguments[1]&&arguments[1],html=element.ownerDocument.documentElement,relativeOffset=getOffsetRectRelativeToArbitraryNode(element,html),width=Math.max(html.clientWidth,window.innerWidth||0),height=Math.max(html.clientHeight,window.innerHeight||0),scrollTop=excludeScroll?0:getScroll(html),scrollLeft=excludeScroll?0:getScroll(html,"left"),offset={top:scrollTop-relativeOffset.top+relativeOffset.marginTop,left:scrollLeft-relativeOffset.left+relativeOffset.marginLeft,width:width,height:height};return getClientRect(offset)}function isFixed(element){var nodeName=element.nodeName;if("BODY"===nodeName||"HTML"===nodeName)return!1;if("fixed"===getStyleComputedProperty(element,"position"))return!0;var parentNode=getParentNode(element);return!!parentNode&&isFixed(parentNode)}function getFixedPositionOffsetParent(element){if(!element||!element.parentElement||isIE())return document.documentElement;for(var el=element.parentElement;el&&"none"===getStyleComputedProperty(el,"transform");)el=el.parentElement;return el||document.documentElement}function getBoundaries(popper,reference,padding,boundariesElement){var fixedPosition=arguments.length>4&&void 0!==arguments[4]&&arguments[4],boundaries={top:0,left:0},offsetParent=fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,getReferenceNode(reference));if("viewport"===boundariesElement)boundaries=getViewportOffsetRectRelativeToArtbitraryNode(offsetParent,fixedPosition);else{var boundariesNode=void 0;"scrollParent"===boundariesElement?"BODY"===(boundariesNode=getScrollParent(getParentNode(reference))).nodeName&&(boundariesNode=popper.ownerDocument.documentElement):boundariesNode="window"===boundariesElement?popper.ownerDocument.documentElement:boundariesElement;var offsets=getOffsetRectRelativeToArbitraryNode(boundariesNode,offsetParent,fixedPosition);if("HTML"!==boundariesNode.nodeName||isFixed(offsetParent))boundaries=offsets;else{var _getWindowSizes=getWindowSizes(popper.ownerDocument),height=_getWindowSizes.height,width=_getWindowSizes.width;boundaries.top+=offsets.top-offsets.marginTop,boundaries.bottom=height+offsets.top,boundaries.left+=offsets.left-offsets.marginLeft,boundaries.right=width+offsets.left}}var isPaddingNumber="number"==typeof(padding=padding||0);return boundaries.left+=isPaddingNumber?padding:padding.left||0,boundaries.top+=isPaddingNumber?padding:padding.top||0,boundaries.right-=isPaddingNumber?padding:padding.right||0,boundaries.bottom-=isPaddingNumber?padding:padding.bottom||0,boundaries}function getArea(_ref){return _ref.width*_ref.height}function computeAutoPlacement(placement,refRect,popper,reference,boundariesElement){var padding=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===placement.indexOf("auto"))return placement;var boundaries=getBoundaries(popper,reference,padding,boundariesElement),rects={top:{width:boundaries.width,height:refRect.top-boundaries.top},right:{width:boundaries.right-refRect.right,height:boundaries.height},bottom:{width:boundaries.width,height:boundaries.bottom-refRect.bottom},left:{width:refRect.left-boundaries.left,height:boundaries.height}},sortedAreas=Object.keys(rects).map((function(key){return _extends({key:key},rects[key],{area:getArea(rects[key])})})).sort((function(a,b){return b.area-a.area})),filteredAreas=sortedAreas.filter((function(_ref2){var width=_ref2.width,height=_ref2.height;return width>=popper.clientWidth&&height>=popper.clientHeight})),computedPlacement=filteredAreas.length>0?filteredAreas[0].key:sortedAreas[0].key,variation=placement.split("-")[1];return computedPlacement+(variation?"-"+variation:"")}function getReferenceOffsets(state,popper,reference){var fixedPosition=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,commonOffsetParent=fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,getReferenceNode(reference));return getOffsetRectRelativeToArbitraryNode(reference,commonOffsetParent,fixedPosition)}function getOuterSizes(element){var styles=element.ownerDocument.defaultView.getComputedStyle(element),x=parseFloat(styles.marginTop||0)+parseFloat(styles.marginBottom||0),y=parseFloat(styles.marginLeft||0)+parseFloat(styles.marginRight||0);return{width:element.offsetWidth+y,height:element.offsetHeight+x}}function getOppositePlacement(placement){var hash={left:"right",right:"left",bottom:"top",top:"bottom"};return placement.replace(/left|right|bottom|top/g,(function(matched){return hash[matched]}))}function getPopperOffsets(popper,referenceOffsets,placement){placement=placement.split("-")[0];var popperRect=getOuterSizes(popper),popperOffsets={width:popperRect.width,height:popperRect.height},isHoriz=-1!==["right","left"].indexOf(placement),mainSide=isHoriz?"top":"left",secondarySide=isHoriz?"left":"top",measurement=isHoriz?"height":"width",secondaryMeasurement=isHoriz?"width":"height";return popperOffsets[mainSide]=referenceOffsets[mainSide]+referenceOffsets[measurement]/2-popperRect[measurement]/2,popperOffsets[secondarySide]=placement===secondarySide?referenceOffsets[secondarySide]-popperRect[secondaryMeasurement]:referenceOffsets[getOppositePlacement(secondarySide)],popperOffsets}function find(arr,check){return Array.prototype.find?arr.find(check):arr.filter(check)[0]}function runModifiers(modifiers,data,ends){return(void 0===ends?modifiers:modifiers.slice(0,function findIndex(arr,prop,value){if(Array.prototype.findIndex)return arr.findIndex((function(cur){return cur[prop]===value}));var match=find(arr,(function(obj){return obj[prop]===value}));return arr.indexOf(match)}(modifiers,"name",ends))).forEach((function(modifier){modifier.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var fn=modifier.function||modifier.fn;modifier.enabled&&isFunction(fn)&&(data.offsets.popper=getClientRect(data.offsets.popper),data.offsets.reference=getClientRect(data.offsets.reference),data=fn(data,modifier))})),data}function update(){if(!this.state.isDestroyed){var data={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};data.offsets.reference=getReferenceOffsets(this.state,this.popper,this.reference,this.options.positionFixed),data.placement=computeAutoPlacement(this.options.placement,data.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),data.originalPlacement=data.placement,data.positionFixed=this.options.positionFixed,data.offsets.popper=getPopperOffsets(this.popper,data.offsets.reference,data.placement),data.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",data=runModifiers(this.modifiers,data),this.state.isCreated?this.options.onUpdate(data):(this.state.isCreated=!0,this.options.onCreate(data))}}function isModifierEnabled(modifiers,modifierName){return modifiers.some((function(_ref){var name=_ref.name;return _ref.enabled&&name===modifierName}))}function getSupportedPropertyName(property){for(var prefixes=[!1,"ms","Webkit","Moz","O"],upperProp=property.charAt(0).toUpperCase()+property.slice(1),i=0;i1&&void 0!==arguments[1]&&arguments[1],index=validPlacements.indexOf(placement),arr=validPlacements.slice(index+1).concat(validPlacements.slice(0,index));return counter?arr.reverse():arr}var BEHAVIORS_FLIP="flip",BEHAVIORS_CLOCKWISE="clockwise",BEHAVIORS_COUNTERCLOCKWISE="counterclockwise";function parseOffset(offset,popperOffsets,referenceOffsets,basePlacement){var offsets=[0,0],useHeight=-1!==["right","left"].indexOf(basePlacement),fragments=offset.split(/(\+|\-)/).map((function(frag){return frag.trim()})),divider=fragments.indexOf(find(fragments,(function(frag){return-1!==frag.search(/,|\s/)})));fragments[divider]&&-1===fragments[divider].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var splitRegex=/\s*,\s*|\s+/,ops=-1!==divider?[fragments.slice(0,divider).concat([fragments[divider].split(splitRegex)[0]]),[fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider+1))]:[fragments];return(ops=ops.map((function(op,index){var measurement=(1===index?!useHeight:useHeight)?"height":"width",mergeWithPrevious=!1;return op.reduce((function(a,b){return""===a[a.length-1]&&-1!==["+","-"].indexOf(b)?(a[a.length-1]=b,mergeWithPrevious=!0,a):mergeWithPrevious?(a[a.length-1]+=b,mergeWithPrevious=!1,a):a.concat(b)}),[]).map((function(str){return function toValue(str,measurement,popperOffsets,referenceOffsets){var split=str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),value=+split[1],unit=split[2];if(!value)return str;if(0===unit.indexOf("%")){var element=void 0;switch(unit){case"%p":element=popperOffsets;break;case"%":case"%r":default:element=referenceOffsets}return getClientRect(element)[measurement]/100*value}if("vh"===unit||"vw"===unit){return("vh"===unit?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*value}return value}(str,measurement,popperOffsets,referenceOffsets)}))}))).forEach((function(op,index){op.forEach((function(frag,index2){isNumeric(frag)&&(offsets[index]+=frag*("-"===op[index2-1]?-1:1))}))})),offsets}var Defaults={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function onCreate(){},onUpdate:function onUpdate(){},modifiers:{shift:{order:100,enabled:!0,fn:function shift(data){var placement=data.placement,basePlacement=placement.split("-")[0],shiftvariation=placement.split("-")[1];if(shiftvariation){var _data$offsets=data.offsets,reference=_data$offsets.reference,popper=_data$offsets.popper,isVertical=-1!==["bottom","top"].indexOf(basePlacement),side=isVertical?"left":"top",measurement=isVertical?"width":"height",shiftOffsets={start:popper_defineProperty({},side,reference[side]),end:popper_defineProperty({},side,reference[side]+reference[measurement]-popper[measurement])};data.offsets.popper=_extends({},popper,shiftOffsets[shiftvariation])}return data}},offset:{order:200,enabled:!0,fn:function offset(data,_ref){var offset=_ref.offset,placement=data.placement,_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,basePlacement=placement.split("-")[0],offsets=void 0;return offsets=isNumeric(+offset)?[+offset,0]:parseOffset(offset,popper,reference,basePlacement),"left"===basePlacement?(popper.top+=offsets[0],popper.left-=offsets[1]):"right"===basePlacement?(popper.top+=offsets[0],popper.left+=offsets[1]):"top"===basePlacement?(popper.left+=offsets[0],popper.top-=offsets[1]):"bottom"===basePlacement&&(popper.left+=offsets[0],popper.top+=offsets[1]),data.popper=popper,data},offset:0},preventOverflow:{order:300,enabled:!0,fn:function preventOverflow(data,options){var boundariesElement=options.boundariesElement||getOffsetParent(data.instance.popper);data.instance.reference===boundariesElement&&(boundariesElement=getOffsetParent(boundariesElement));var transformProp=getSupportedPropertyName("transform"),popperStyles=data.instance.popper.style,top=popperStyles.top,left=popperStyles.left,transform=popperStyles[transformProp];popperStyles.top="",popperStyles.left="",popperStyles[transformProp]="";var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,boundariesElement,data.positionFixed);popperStyles.top=top,popperStyles.left=left,popperStyles[transformProp]=transform,options.boundaries=boundaries;var order=options.priority,popper=data.offsets.popper,check={primary:function primary(placement){var value=popper[placement];return popper[placement]boundaries[placement]&&!options.escapeWithReference&&(value=Math.min(popper[mainSide],boundaries[placement]-("right"===placement?popper.width:popper.height))),popper_defineProperty({},mainSide,value)}};return order.forEach((function(placement){var side=-1!==["left","top"].indexOf(placement)?"primary":"secondary";popper=_extends({},popper,check[side](placement))})),data.offsets.popper=popper,data},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function keepTogether(data){var _data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,placement=data.placement.split("-")[0],floor=Math.floor,isVertical=-1!==["top","bottom"].indexOf(placement),side=isVertical?"right":"bottom",opSide=isVertical?"left":"top",measurement=isVertical?"width":"height";return popper[side]floor(reference[side])&&(data.offsets.popper[opSide]=floor(reference[side])),data}},arrow:{order:500,enabled:!0,fn:function arrow(data,options){var _data$offsets$arrow;if(!isModifierRequired(data.instance.modifiers,"arrow","keepTogether"))return data;var arrowElement=options.element;if("string"==typeof arrowElement){if(!(arrowElement=data.instance.popper.querySelector(arrowElement)))return data}else if(!data.instance.popper.contains(arrowElement))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),data;var placement=data.placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isVertical=-1!==["left","right"].indexOf(placement),len=isVertical?"height":"width",sideCapitalized=isVertical?"Top":"Left",side=sideCapitalized.toLowerCase(),altSide=isVertical?"left":"top",opSide=isVertical?"bottom":"right",arrowElementSize=getOuterSizes(arrowElement)[len];reference[opSide]-arrowElementSizepopper[opSide]&&(data.offsets.popper[side]+=reference[side]+arrowElementSize-popper[opSide]),data.offsets.popper=getClientRect(data.offsets.popper);var center=reference[side]+reference[len]/2-arrowElementSize/2,css=getStyleComputedProperty(data.instance.popper),popperMarginSide=parseFloat(css["margin"+sideCapitalized]),popperBorderSide=parseFloat(css["border"+sideCapitalized+"Width"]),sideValue=center-data.offsets.popper[side]-popperMarginSide-popperBorderSide;return sideValue=Math.max(Math.min(popper[len]-arrowElementSize,sideValue),0),data.arrowElement=arrowElement,data.offsets.arrow=(popper_defineProperty(_data$offsets$arrow={},side,Math.round(sideValue)),popper_defineProperty(_data$offsets$arrow,altSide,""),_data$offsets$arrow),data},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function flip(data,options){if(isModifierEnabled(data.instance.modifiers,"inner"))return data;if(data.flipped&&data.placement===data.originalPlacement)return data;var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,options.boundariesElement,data.positionFixed),placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement),variation=data.placement.split("-")[1]||"",flipOrder=[];switch(options.behavior){case BEHAVIORS_FLIP:flipOrder=[placement,placementOpposite];break;case BEHAVIORS_CLOCKWISE:flipOrder=clockwise(placement);break;case BEHAVIORS_COUNTERCLOCKWISE:flipOrder=clockwise(placement,!0);break;default:flipOrder=options.behavior}return flipOrder.forEach((function(step,index){if(placement!==step||flipOrder.length===index+1)return data;placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement);var popperOffsets=data.offsets.popper,refOffsets=data.offsets.reference,floor=Math.floor,overlapsRef="left"===placement&&floor(popperOffsets.right)>floor(refOffsets.left)||"right"===placement&&floor(popperOffsets.left)floor(refOffsets.top)||"bottom"===placement&&floor(popperOffsets.top)floor(boundaries.right),overflowsTop=floor(popperOffsets.top)floor(boundaries.bottom),overflowsBoundaries="left"===placement&&overflowsLeft||"right"===placement&&overflowsRight||"top"===placement&&overflowsTop||"bottom"===placement&&overflowsBottom,isVertical=-1!==["top","bottom"].indexOf(placement),flippedVariationByRef=!!options.flipVariations&&(isVertical&&"start"===variation&&overflowsLeft||isVertical&&"end"===variation&&overflowsRight||!isVertical&&"start"===variation&&overflowsTop||!isVertical&&"end"===variation&&overflowsBottom),flippedVariationByContent=!!options.flipVariationsByContent&&(isVertical&&"start"===variation&&overflowsRight||isVertical&&"end"===variation&&overflowsLeft||!isVertical&&"start"===variation&&overflowsBottom||!isVertical&&"end"===variation&&overflowsTop),flippedVariation=flippedVariationByRef||flippedVariationByContent;(overlapsRef||overflowsBoundaries||flippedVariation)&&(data.flipped=!0,(overlapsRef||overflowsBoundaries)&&(placement=flipOrder[index+1]),flippedVariation&&(variation=function getOppositeVariation(variation){return"end"===variation?"start":"start"===variation?"end":variation}(variation)),data.placement=placement+(variation?"-"+variation:""),data.offsets.popper=_extends({},data.offsets.popper,getPopperOffsets(data.instance.popper,data.offsets.reference,data.placement)),data=runModifiers(data.instance.modifiers,data,"flip"))})),data},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function inner(data){var placement=data.placement,basePlacement=placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isHoriz=-1!==["left","right"].indexOf(basePlacement),subtractLength=-1===["top","left"].indexOf(basePlacement);return popper[isHoriz?"left":"top"]=reference[basePlacement]-(subtractLength?popper[isHoriz?"width":"height"]:0),data.placement=getOppositePlacement(placement),data.offsets.popper=getClientRect(popper),data}},hide:{order:800,enabled:!0,fn:function hide(data){if(!isModifierRequired(data.instance.modifiers,"hide","preventOverflow"))return data;var refRect=data.offsets.reference,bound=find(data.instance.modifiers,(function(modifier){return"preventOverflow"===modifier.name})).boundaries;if(refRect.bottombound.right||refRect.top>bound.bottom||refRect.right2&&void 0!==arguments[2]?arguments[2]:{};classCallCheck(this,Popper),this.scheduleUpdate=function(){return requestAnimationFrame(_this.update)},this.update=debounce(this.update.bind(this)),this.options=_extends({},Popper.Defaults,options),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=reference&&reference.jquery?reference[0]:reference,this.popper=popper&&popper.jquery?popper[0]:popper,this.options.modifiers={},Object.keys(_extends({},Popper.Defaults.modifiers,options.modifiers)).forEach((function(name){_this.options.modifiers[name]=_extends({},Popper.Defaults.modifiers[name]||{},options.modifiers?options.modifiers[name]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(name){return _extends({name:name},_this.options.modifiers[name])})).sort((function(a,b){return a.order-b.order})),this.modifiers.forEach((function(modifierOptions){modifierOptions.enabled&&isFunction(modifierOptions.onLoad)&&modifierOptions.onLoad(_this.reference,_this.popper,_this.options,modifierOptions,_this.state)})),this.update();var eventsEnabled=this.options.eventsEnabled;eventsEnabled&&this.enableEventListeners(),this.state.eventsEnabled=eventsEnabled}return createClass(Popper,[{key:"update",value:function update$$1(){return update.call(this)}},{key:"destroy",value:function destroy$$1(){return destroy.call(this)}},{key:"enableEventListeners",value:function enableEventListeners$$1(){return enableEventListeners.call(this)}},{key:"disableEventListeners",value:function disableEventListeners$$1(){return disableEventListeners.call(this)}}]),Popper}();Popper.Utils=("undefined"!=typeof window?window:global).PopperUtils,Popper.placements=placements,Popper.Defaults=Defaults;var popper=Popper,lib=__webpack_require__(94),lib_default=__webpack_require__.n(lib),ManagerReferenceNodeContext=lib_default()(),ManagerReferenceNodeSetterContext=lib_default()(),Manager_Manager=function(_React$Component){function Manager(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _this=_React$Component.call.apply(_React$Component,[this].concat(args))||this,defineProperty_default()(assertThisInitialized_default()(_this),"referenceNode",void 0),defineProperty_default()(assertThisInitialized_default()(_this),"setReferenceNode",(function(newReferenceNode){newReferenceNode&&_this.referenceNode!==newReferenceNode&&(_this.referenceNode=newReferenceNode,_this.forceUpdate())})),_this}inheritsLoose_default()(Manager,_React$Component);var _proto=Manager.prototype;return _proto.componentWillUnmount=function componentWillUnmount(){this.referenceNode=null},_proto.render=function render(){return react.createElement(ManagerReferenceNodeContext.Provider,{value:this.referenceNode},react.createElement(ManagerReferenceNodeSetterContext.Provider,{value:this.setReferenceNode},this.props.children))},Manager}(react.Component),unwrapArray=function unwrapArray(arg){return Array.isArray(arg)?arg[0]:arg},safeInvoke=function safeInvoke(fn){if("function"==typeof fn){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return fn.apply(void 0,args)}},setRef=function setRef(ref,node){if("function"==typeof ref)return safeInvoke(ref,node);null!=ref&&(ref.current=node)},initialStyle={position:"absolute",top:0,left:0,opacity:0,pointerEvents:"none"},initialArrowStyle={},Popper_InnerPopper=function(_React$Component){function InnerPopper(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _this=_React$Component.call.apply(_React$Component,[this].concat(args))||this,defineProperty_default()(assertThisInitialized_default()(_this),"state",{data:void 0,placement:void 0}),defineProperty_default()(assertThisInitialized_default()(_this),"popperInstance",void 0),defineProperty_default()(assertThisInitialized_default()(_this),"popperNode",null),defineProperty_default()(assertThisInitialized_default()(_this),"arrowNode",null),defineProperty_default()(assertThisInitialized_default()(_this),"setPopperNode",(function(popperNode){popperNode&&_this.popperNode!==popperNode&&(setRef(_this.props.innerRef,popperNode),_this.popperNode=popperNode,_this.updatePopperInstance())})),defineProperty_default()(assertThisInitialized_default()(_this),"setArrowNode",(function(arrowNode){_this.arrowNode=arrowNode})),defineProperty_default()(assertThisInitialized_default()(_this),"updateStateModifier",{enabled:!0,order:900,fn:function fn(data){var placement=data.placement;return _this.setState({data:data,placement:placement}),data}}),defineProperty_default()(assertThisInitialized_default()(_this),"getOptions",(function(){return{placement:_this.props.placement,eventsEnabled:_this.props.eventsEnabled,positionFixed:_this.props.positionFixed,modifiers:extends_default()({},_this.props.modifiers,{arrow:extends_default()({},_this.props.modifiers&&_this.props.modifiers.arrow,{enabled:!!_this.arrowNode,element:_this.arrowNode}),applyStyle:{enabled:!1},updateStateModifier:_this.updateStateModifier})}})),defineProperty_default()(assertThisInitialized_default()(_this),"getPopperStyle",(function(){return _this.popperNode&&_this.state.data?extends_default()({position:_this.state.data.offsets.popper.position},_this.state.data.styles):initialStyle})),defineProperty_default()(assertThisInitialized_default()(_this),"getPopperPlacement",(function(){return _this.state.data?_this.state.placement:void 0})),defineProperty_default()(assertThisInitialized_default()(_this),"getArrowStyle",(function(){return _this.arrowNode&&_this.state.data?_this.state.data.arrowStyles:initialArrowStyle})),defineProperty_default()(assertThisInitialized_default()(_this),"getOutOfBoundariesState",(function(){return _this.state.data?_this.state.data.hide:void 0})),defineProperty_default()(assertThisInitialized_default()(_this),"destroyPopperInstance",(function(){_this.popperInstance&&(_this.popperInstance.destroy(),_this.popperInstance=null)})),defineProperty_default()(assertThisInitialized_default()(_this),"updatePopperInstance",(function(){_this.destroyPopperInstance();var popperNode=assertThisInitialized_default()(_this).popperNode,referenceElement=_this.props.referenceElement;referenceElement&&popperNode&&(_this.popperInstance=new popper(referenceElement,popperNode,_this.getOptions()))})),defineProperty_default()(assertThisInitialized_default()(_this),"scheduleUpdate",(function(){_this.popperInstance&&_this.popperInstance.scheduleUpdate()})),_this}inheritsLoose_default()(InnerPopper,_React$Component);var _proto=InnerPopper.prototype;return _proto.componentDidUpdate=function componentDidUpdate(prevProps,prevState){this.props.placement===prevProps.placement&&this.props.referenceElement===prevProps.referenceElement&&this.props.positionFixed===prevProps.positionFixed&&deep_equal_default()(this.props.modifiers,prevProps.modifiers,{strict:!0})?this.props.eventsEnabled!==prevProps.eventsEnabled&&this.popperInstance&&(this.props.eventsEnabled?this.popperInstance.enableEventListeners():this.popperInstance.disableEventListeners()):this.updatePopperInstance(),prevState.placement!==this.state.placement&&this.scheduleUpdate()},_proto.componentWillUnmount=function componentWillUnmount(){setRef(this.props.innerRef,null),this.destroyPopperInstance()},_proto.render=function render(){return unwrapArray(this.props.children)({ref:this.setPopperNode,style:this.getPopperStyle(),placement:this.getPopperPlacement(),outOfBoundaries:this.getOutOfBoundariesState(),scheduleUpdate:this.scheduleUpdate,arrowProps:{ref:this.setArrowNode,style:this.getArrowStyle()}})},InnerPopper}(react.Component);defineProperty_default()(Popper_InnerPopper,"defaultProps",{placement:"bottom",eventsEnabled:!0,referenceElement:void 0,positionFixed:!1});popper.placements;function Popper_Popper(_ref){var referenceElement=_ref.referenceElement,props=objectWithoutPropertiesLoose_default()(_ref,["referenceElement"]);return react.createElement(ManagerReferenceNodeContext.Consumer,null,(function(referenceNode){return react.createElement(Popper_InnerPopper,extends_default()({referenceElement:void 0!==referenceElement?referenceElement:referenceNode},props))}))}var warning=__webpack_require__(93),warning_default=__webpack_require__.n(warning),Reference_InnerReference=function(_React$Component){function InnerReference(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _this=_React$Component.call.apply(_React$Component,[this].concat(args))||this,defineProperty_default()(assertThisInitialized_default()(_this),"refHandler",(function(node){setRef(_this.props.innerRef,node),safeInvoke(_this.props.setReferenceNode,node)})),_this}inheritsLoose_default()(InnerReference,_React$Component);var _proto=InnerReference.prototype;return _proto.componentWillUnmount=function componentWillUnmount(){setRef(this.props.innerRef,null)},_proto.render=function render(){return warning_default()(Boolean(this.props.setReferenceNode),"`Reference` should not be used outside of a `Manager` component."),unwrapArray(this.props.children)({ref:this.refHandler})},InnerReference}(react.Component);function Reference(props){return react.createElement(ManagerReferenceNodeSetterContext.Consumer,null,(function(setReferenceNode){return react.createElement(Reference_InnerReference,extends_default()({setReferenceNode:setReferenceNode},props))}))}function oe(e){return(oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function se(e,t){for(var r=0;r0&&(a=Object(parse.a)(e,t.slice(0,e.length),new Date)),_e(a)||(a=new Date(e))),_e(a)&&p?a:null)}function _e(e){return Object(isValid.a)(e)&&Object(isAfter.a)(e,new Date("1/1/1000"))}function Se(e,t,r){if("en"===r)return Object(format.a)(e,t,{awareOfUnicodeTokens:!0});var n=He(r);return r&&!n&&console.warn('A locale object was not found for the provided string ["'.concat(r,'"].')),!n&&Ke()&&He(Ke())&&(n=He(Ke())),Object(format.a)(e,t,{locale:n||null,awareOfUnicodeTokens:!0})}function Me(e,t){var r=t.hour,n=void 0===r?0:r,o=t.minute,a=void 0===o?0:o,s=t.second;return Object(setHours.a)(Object(setMinutes.a)(Object(setSeconds.a)(e,void 0===s?0:s),a),n)}function Pe(e,t){var r=t&&He(t)||Ke()&&He(Ke());return Object(getWeek.a)(e,r?{locale:r}:null)}function Ee(e,t){return Se(e,"ddd",t)}function Ne(e){return Object(startOfDay.a)(e)}function Oe(e,t){var r=He(t||Ke());return Object(startOfWeek.a)(e,{locale:r})}function xe(e){return Object(startOfMonth.a)(e)}function Ye(e){return Object(startOfYear.a)(e)}function Te(e){return Object(startOfQuarter.a)(e)}function Ie(e,t){return e&&t?Object(isSameYear.a)(e,t):!e&&!t}function Le(e,t){return e&&t?Object(isSameMonth.a)(e,t):!e&&!t}function Fe(e,t){return e&&t?Object(isSameQuarter.a)(e,t):!e&&!t}function Re(e,t){return e&&t?Object(isSameDay.a)(e,t):!e&&!t}function We(e,t){return e&&t?Object(isEqual.a)(e,t):!e&&!t}function Ae(e,t,r){var n,o=Object(startOfDay.a)(t),a=Object(endOfDay.a)(r);try{n=Object(isWithinInterval.a)(e,{start:o,end:a})}catch(e){n=!1}return n}function Be(e,t){var r="undefined"!=typeof window?window:global;r.__localeData__||(r.__localeData__={}),r.__localeData__[e]=t}function je(e){("undefined"!=typeof window?window:global).__localeId__=e}function Ke(){return("undefined"!=typeof window?window:global).__localeId__}function He(e){if("string"==typeof e){var t="undefined"!=typeof window?window:global;return t.__localeData__?t.__localeData__[e]:null}return e}function Qe(e,t){return Se(Object(setMonth.a)(be(),e),"LLLL",t)}function Ve(e,t){return Se(Object(setMonth.a)(be(),e),"LLL",t)}function qe(e,t){return Se(Object(setQuarter.a)(be(),e),"QQQ",t)}function Ue(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return et(e,{minDate:r,maxDate:n})||o&&o.some((function(t){return Re(e,t)}))||a&&!a.some((function(t){return Re(e,t)}))||s&&!s(be(e))||!1}function $e(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.excludeDates;return r&&r.some((function(t){return Re(e,t)}))||!1}function ze(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return et(e,{minDate:r,maxDate:n})||o&&o.some((function(t){return Le(e,t)}))||a&&!a.some((function(t){return Le(e,t)}))||s&&!s(be(e))||!1}function Ge(e,t,r,n){var o=Object(getYear.a)(e),a=Object(getMonth.a)(e),s=Object(getYear.a)(t),p=Object(getMonth.a)(t),i=Object(getYear.a)(n);return o===s&&o===i?a<=r&&r<=p:o=r||io:void 0}function Je(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return et(e,{minDate:r,maxDate:n})||o&&o.some((function(t){return Fe(e,t)}))||a&&!a.some((function(t){return Fe(e,t)}))||s&&!s(be(e))||!1}function Xe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=new Date(e,0,1);return et(o,{minDate:r,maxDate:n})||!1}function Ze(e,t,r,n){var o=Object(getYear.a)(e),a=Object(getQuarter.a)(e),s=Object(getYear.a)(t),p=Object(getQuarter.a)(t),i=Object(getYear.a)(n);return o===s&&o===i?a<=r&&r<=p:o=r||io:void 0}function et(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate;return r&&Object(differenceInCalendarDays.a)(e,r)<0||n&&Object(differenceInCalendarDays.a)(e,n)>0}function tt(e,t){for(var r=t.length,n=0;n1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,o=Object(subMonths.a)(e,1);return r&&Object(differenceInCalendarMonths.a)(r,o)>0||n&&n.every((function(e){return Object(differenceInCalendarMonths.a)(e,o)>0}))||!1}function ot(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,o=Object(addMonths.a)(e,1);return r&&Object(differenceInCalendarMonths.a)(o,r)>0||n&&n.every((function(e){return Object(differenceInCalendarMonths.a)(o,e)>0}))||!1}function at(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,o=Object(subYears.a)(e,1);return r&&Object(differenceInCalendarYears.a)(r,o)>0||n&&n.every((function(e){return Object(differenceInCalendarYears.a)(e,o)>0}))||!1}function st(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,o=Object(addYears.a)(e,1);return r&&Object(differenceInCalendarYears.a)(o,r)>0||n&&n.every((function(e){return Object(differenceInCalendarYears.a)(o,e)>0}))||!1}function pt(e){var t=e.minDate,r=e.includeDates;if(r&&t){var n=r.filter((function(e){return Object(differenceInCalendarDays.a)(e,t)>=0}));return Object(min.a)(n)}return r?Object(min.a)(r):t}function it(e){var t=e.maxDate,r=e.includeDates;if(r&&t){var n=r.filter((function(e){return Object(differenceInCalendarDays.a)(e,t)<=0}));return Object(max.a)(n)}return r?Object(max.a)(r):t}function ct(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"react-datepicker__day--highlighted",n=new Map,o=0,a=e.length;o=s),p&&o.push(s)}return o}var mt=react_onclickoutside_es(function(r){ue(o,react_default.a.Component);var n=ye(o);function o(t){var r;ae(this,o),ie(fe(r=n.call(this,t)),"renderOptions",(function(){var t=r.props.year,n=r.state.yearsList.map((function(n){return react_default.a.createElement("div",{className:t===n?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:n,onClick:r.onChange.bind(fe(r),n)},t===n?react_default.a.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",n)})),o=r.props.minDate?Object(getYear.a)(r.props.minDate):null,a=r.props.maxDate?Object(getYear.a)(r.props.maxDate):null;return a&&r.state.yearsList.find((function(e){return e===a}))||n.unshift(react_default.a.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:r.incrementYears},react_default.a.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),o&&r.state.yearsList.find((function(e){return e===o}))||n.push(react_default.a.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:r.decrementYears},react_default.a.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),n})),ie(fe(r),"onChange",(function(e){r.props.onChange(e)})),ie(fe(r),"handleClickOutside",(function(){r.props.onCancel()})),ie(fe(r),"shiftYears",(function(e){var t=r.state.yearsList.map((function(t){return t+e}));r.setState({yearsList:t})})),ie(fe(r),"incrementYears",(function(){return r.shiftYears(1)})),ie(fe(r),"decrementYears",(function(){return r.shiftYears(-1)}));var a=t.yearDropdownItemNumber,s=t.scrollableYearDropdown,p=a||(s?10:5);return r.state={yearsList:ht(r.props.year,p,r.props.minDate,r.props.maxDate)},r}return pe(o,[{key:"render",value:function(){var r=classnames_default()({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return react_default.a.createElement("div",{className:r},this.renderOptions())}}]),o}()),ft=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(){var t;ae(this,n);for(var o=arguments.length,a=new Array(o),s=0;s0&&void 0!==arguments[0]?arguments[0]:{},t=!1;0===r.getTabIndex()&&!e.isInputFocused&&r.isSameDay(r.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(t=!0),r.props.containerRef&&r.props.containerRef.current&&r.props.containerRef.current.contains(document.activeElement)&&document.activeElement.classList.contains("react-datepicker__day")&&(t=!0)),t&&r.dayEl.current.focus({preventScroll:!0})})),ie(fe(r),"render",(function(){return react_default.a.createElement("div",{ref:r.dayEl,className:r.getClassNames(r.props.day),onKeyDown:r.handleOnKeyDown,onClick:r.handleClick,onMouseEnter:r.handleMouseEnter,tabIndex:r.getTabIndex(),"aria-label":r.getAriaLabel(),role:"button","aria-disabled":r.isDisabled()},r.props.renderDayContents?r.props.renderDayContents(Object(getDate.a)(r.props.day),r.props.day):Object(getDate.a)(r.props.day))})),r}return pe(o,[{key:"componentDidMount",value:function(){this.handleFocusDay()}},{key:"componentDidUpdate",value:function(e){this.handleFocusDay(e)}}]),o}(),bt=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(){var e;ae(this,o);for(var t=arguments.length,r=new Array(t),a=0;a=6,c=!n&&!r.isWeekInMonth(o);if(p||c){if(!r.props.peekNextMonth)break;s=!0}}return t})),ie(fe(r),"onMonthClick",(function(e,t){r.handleDayClick(xe(Object(setMonth.a)(r.props.day,t)),e)})),ie(fe(r),"onQuarterClick",(function(e,t){r.handleDayClick(Te(Object(setQuarter.a)(r.props.day,t)),e)})),ie(fe(r),"getMonthClassNames",(function(e){var n=r.props,o=n.day,a=n.startDate,s=n.endDate,p=n.selected,i=n.minDate,c=n.maxDate;return classnames_default()("react-datepicker__month-text","react-datepicker__month-".concat(e),{"react-datepicker__month--disabled":(i||c)&&ze(Object(setMonth.a)(o,e),r.props),"react-datepicker__month--selected":Object(getMonth.a)(o)===e&&Object(getYear.a)(o)===Object(getYear.a)(p),"react-datepicker__month--in-range":Ge(a,s,e,o),"react-datepicker__month--range-start":r.isRangeStartMonth(e),"react-datepicker__month--range-end":r.isRangeEndMonth(e)})})),ie(fe(r),"getQuarterClassNames",(function(e){var n=r.props,o=n.day,a=n.startDate,s=n.endDate,p=n.selected,i=n.minDate,c=n.maxDate;return classnames_default()("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter--disabled":(i||c)&&Je(Object(setQuarter.a)(o,e),r.props),"react-datepicker__quarter--selected":Object(getQuarter.a)(o)===e&&Object(getYear.a)(o)===Object(getYear.a)(p),"react-datepicker__quarter--in-range":Ze(a,s,e,o),"react-datepicker__quarter--range-start":r.isRangeStartQuarter(e),"react-datepicker__quarter--range-end":r.isRangeEndQuarter(e)})})),ie(fe(r),"renderMonths",(function(){var t=r.props,n=t.showFullMonthYearPicker,o=t.showTwoColumnMonthYearPicker,a=t.locale;return(o?[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]]:[[0,1,2],[3,4,5],[6,7,8],[9,10,11]]).map((function(t,o){return react_default.a.createElement("div",{className:"react-datepicker__month-wrapper",key:o},t.map((function(t,o){return react_default.a.createElement("div",{key:o,onClick:function(e){r.onMonthClick(e,t)},className:r.getMonthClassNames(t)},n?Qe(t,a):Ve(t,a))})))}))})),ie(fe(r),"renderQuarters",(function(){return react_default.a.createElement("div",{className:"react-datepicker__quarter-wrapper"},[1,2,3,4].map((function(t,n){return react_default.a.createElement("div",{key:n,onClick:function(e){r.onQuarterClick(e,t)},className:r.getQuarterClassNames(t)},qe(t,r.props.locale))})))})),ie(fe(r),"getClassNames",(function(){var e=r.props,n=e.selectingDate,o=e.selectsStart,a=e.selectsEnd,s=e.showMonthYearPicker,p=e.showQuarterYearPicker;return classnames_default()("react-datepicker__month",{"react-datepicker__month--selecting-range":n&&(o||a)},{"react-datepicker__monthPicker":s},{"react-datepicker__quarterPicker":p})})),r}return pe(o,[{key:"render",value:function(){var t=this.props,r=t.showMonthYearPicker,n=t.showQuarterYearPicker,o=t.day,a=t.ariaLabelPrefix,s=void 0===a?"month ":a;return react_default.a.createElement("div",{className:this.getClassNames(),onMouseLeave:this.handleMouseLeave,"aria-label":"".concat(s," ").concat(Se(o,"yyyy-MM"))},r?this.renderMonths():n?this.renderQuarters():this.renderWeeks())}}]),o}(),St=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(){var t;ae(this,n);for(var o=arguments.length,s=new Array(o),p=0;p=Object(getMinutes.a)(r)?t.centerLi=e:t.centerLi||u.indexOf(r)!==u.length-1||(t.centerLi=e))}},Se(r,n,t.props.locale))}))})),t}return pe(n,[{key:"componentDidMount",value:function(){this.list.scrollTop=n.calcCenterPosition(this.props.monthRef?this.props.monthRef.clientHeight-this.header.clientHeight:this.list.clientHeight,this.centerLi),this.props.monthRef&&this.header&&this.setState({height:this.props.monthRef.clientHeight-this.header.clientHeight})}},{key:"render",value:function(){var t=this,r=this.state.height;return react_default.a.createElement("div",{className:"react-datepicker__time-container ".concat(this.props.todayButton?"react-datepicker__time-container--with-today-button":"")},react_default.a.createElement("div",{className:"react-datepicker__header react-datepicker__header--time",ref:function(e){t.header=e}},react_default.a.createElement("div",{className:"react-datepicker-time__header"},this.props.timeCaption)),react_default.a.createElement("div",{className:"react-datepicker__time"},react_default.a.createElement("div",{className:"react-datepicker__time-box"},react_default.a.createElement("ul",{className:"react-datepicker__time-list",ref:function(e){t.list=e},style:r?{height:r}:{}},this.renderTimes()))))}}],[{key:"defaultProps",get:function(){return{intervals:30,onTimeChange:function(){},todayButton:null,timeCaption:"Time"}}}]),n}();ie(St,"calcCenterPosition",(function(e,t){return t.offsetTop-(e/2-t.clientHeight/2)}));var Mt=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(e){var r;return ae(this,o),ie(fe(r=n.call(this,e)),"handleYearClick",(function(e,t){r.props.onDayClick&&r.props.onDayClick(e,t)})),ie(fe(r),"isSameDay",(function(e,t){return Re(e,t)})),ie(fe(r),"isKeyboardSelected",(function(e){var t=Ye(Object(setYear.a)(r.props.date,e));return!r.props.disabledKeyboardNavigation&&!r.props.inline&&!Re(t,Ye(r.props.selected))&&Re(t,Ye(r.props.preSelection))})),ie(fe(r),"onYearClick",(function(e,t){var n=r.props.date;r.handleYearClick(Ye(Object(setYear.a)(n,t)),e)})),ie(fe(r),"getYearClassNames",(function(e){var n=r.props,o=n.minDate,a=n.maxDate,s=n.selected;return classnames_default()("react-datepicker__year-text",{"react-datepicker__year-text--selected":e===Object(getYear.a)(s),"react-datepicker__year-text--disabled":(o||a)&&Xe(e,r.props),"react-datepicker__year-text--keyboard-selected":r.isKeyboardSelected(e)})})),r}return pe(o,[{key:"render",value:function(){for(var t=this,r=[],n=ut(this.props.date),o=n.startPeriod,a=n.endPeriod,s=function(n){r.push(react_default.a.createElement("div",{onClick:function(e){t.onYearClick(e,n)},className:t.getYearClassNames(n),key:n},n))},p=o;p<=a;p++)s(p);return react_default.a.createElement("div",{className:"react-datepicker__year"},react_default.a.createElement("div",{className:"react-datepicker__year-wrapper"},r))}}]),o}(),Pt=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(t){var o;return ae(this,n),ie(fe(o=r.call(this,t)),"onTimeChange",(function(e){o.setState({time:e});var t=new Date;t.setHours(e.split(":")[0]),t.setMinutes(e.split(":")[1]),o.props.onChange(t)})),ie(fe(o),"renderTimeInput",(function(){var t=o.state.time,r=o.props,n=r.timeString,a=r.customTimeInput;return a?react_default.a.cloneElement(a,{value:t,onChange:o.onTimeChange}):react_default.a.createElement("input",{type:"time",className:"react-datepicker-time__input",placeholder:"Time",name:"time-input",required:!0,value:t,onChange:function(e){o.onTimeChange(e.target.value||n)}})})),o.state={time:o.props.timeString},o}return pe(n,[{key:"render",value:function(){return react_default.a.createElement("div",{className:"react-datepicker__input-time-container"},react_default.a.createElement("div",{className:"react-datepicker-time__caption"},this.props.timeInputLabel),react_default.a.createElement("div",{className:"react-datepicker-time__input-container"},react_default.a.createElement("div",{className:"react-datepicker-time__input"},this.renderTimeInput())))}}]),n}();function Et(t){var r=t.className,n=t.children,o=t.showPopperArrow,a=t.arrowProps,s=void 0===a?{}:a;return react_default.a.createElement("div",{className:r},o&&react_default.a.createElement("div",ce({className:"react-datepicker__triangle"},s)),n)}var Nt=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Ot=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(r){var a;return ae(this,o),ie(fe(a=n.call(this,r)),"handleClickOutside",(function(e){a.props.onClickOutside(e)})),ie(fe(a),"setClickOutsideRef",(function(){return a.containerRef.current})),ie(fe(a),"handleDropdownFocus",(function(e){(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(e.className||"").split(/\s+/);return Nt.some((function(e){return t.indexOf(e)>=0}))})(e.target)&&a.props.onDropdownFocus()})),ie(fe(a),"getDateInView",(function(){var e=a.props,t=e.preSelection,r=e.selected,n=e.openToDate,o=pt(a.props),s=it(a.props),p=be();return n||r||t||(o&&Object(isBefore.a)(p,o)?o:s&&Object(isAfter.a)(p,s)?s:p)})),ie(fe(a),"increaseMonth",(function(){a.setState((function(e){var t=e.date;return{date:Object(addMonths.a)(t,1)}}),(function(){return a.handleMonthChange(a.state.date)}))})),ie(fe(a),"decreaseMonth",(function(){a.setState((function(e){var t=e.date;return{date:Object(subMonths.a)(t,1)}}),(function(){return a.handleMonthChange(a.state.date)}))})),ie(fe(a),"handleDayClick",(function(e,t,r){return a.props.onSelect(e,t,r)})),ie(fe(a),"handleDayMouseEnter",(function(e){a.setState({selectingDate:e}),a.props.onDayMouseEnter&&a.props.onDayMouseEnter(e)})),ie(fe(a),"handleMonthMouseLeave",(function(){a.setState({selectingDate:null}),a.props.onMonthMouseLeave&&a.props.onMonthMouseLeave()})),ie(fe(a),"handleYearChange",(function(e){a.props.onYearChange&&a.props.onYearChange(e),a.props.adjustDateOnChange&&(a.props.onSelect&&a.props.onSelect(e),a.props.setOpen&&a.props.setOpen(!0)),a.props.setPreSelection&&a.props.setPreSelection(e)})),ie(fe(a),"handleMonthChange",(function(e){a.props.onMonthChange&&a.props.onMonthChange(e),a.props.adjustDateOnChange&&(a.props.onSelect&&a.props.onSelect(e),a.props.setOpen&&a.props.setOpen(!0)),a.props.setPreSelection&&a.props.setPreSelection(e)})),ie(fe(a),"handleMonthYearChange",(function(e){a.handleYearChange(e),a.handleMonthChange(e)})),ie(fe(a),"changeYear",(function(e){a.setState((function(t){var r=t.date;return{date:Object(setYear.a)(r,e)}}),(function(){return a.handleYearChange(a.state.date)}))})),ie(fe(a),"changeMonth",(function(e){a.setState((function(t){var r=t.date;return{date:Object(setMonth.a)(r,e)}}),(function(){return a.handleMonthChange(a.state.date)}))})),ie(fe(a),"changeMonthYear",(function(e){a.setState((function(t){var r=t.date;return{date:Object(setYear.a)(Object(setMonth.a)(r,Object(getMonth.a)(e)),Object(getYear.a)(e))}}),(function(){return a.handleMonthYearChange(a.state.date)}))})),ie(fe(a),"header",(function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.state.date,n=Oe(r,a.props.locale),o=[];return a.props.showWeekNumbers&&o.push(react_default.a.createElement("div",{key:"W",className:"react-datepicker__day-name"},a.props.weekLabel||"#")),o.concat([0,1,2,3,4,5,6].map((function(r){var o=Object(addDays.a)(n,r),s=a.formatWeekday(o,a.props.locale),i=a.props.weekDayClassName?a.props.weekDayClassName(o):void 0;return react_default.a.createElement("div",{key:r,className:classnames_default()("react-datepicker__day-name",i)},s)})))})),ie(fe(a),"formatWeekday",(function(e,t){return a.props.formatWeekDay?function(e,t,r){return t(Se(e,"EEEE",r))}(e,a.props.formatWeekDay,t):a.props.useWeekdaysShort?function(e,t){return Se(e,"EEE",t)}(e,t):function(e,t){return Se(e,"EEEEEE",t)}(e,t)})),ie(fe(a),"decreaseYear",(function(){a.setState((function(e){var t=e.date;return{date:Object(subYears.a)(t,a.props.showYearPicker?12:1)}}),(function(){return a.handleYearChange(a.state.date)}))})),ie(fe(a),"renderPreviousButton",(function(){if(!a.props.renderCustomHeader){var t;switch(!0){case a.props.showMonthYearPicker:t=at(a.state.date,a.props);break;case a.props.showYearPicker:t=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=Ye(Object(subYears.a)(e,12)),o=ut(n),a=o.startPeriod,s=o.endPeriod,p=r&&Object(getYear.a)(r);return p&&(ps)||!1}(a.state.date,a.props);break;default:t=nt(a.state.date,a.props)}if((a.props.forceShowMonthNavigation||a.props.showDisabledMonthNavigation||!t)&&!a.props.showTimeSelectOnly){var r=["react-datepicker__navigation","react-datepicker__navigation--previous"],n=a.decreaseMonth;(a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker)&&(n=a.decreaseYear),t&&a.props.showDisabledMonthNavigation&&(r.push("react-datepicker__navigation--previous--disabled"),n=null);var o=a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker,s=a.props,p=s.previousMonthAriaLabel,i=void 0===p?"Previous Month":p,c=s.previousYearAriaLabel,l=void 0===c?"Previous Year":c;return react_default.a.createElement("button",{type:"button",className:r.join(" "),onClick:n,"aria-label":o?l:i},o?a.props.previousYearButtonLabel:a.props.previousMonthButtonLabel)}}})),ie(fe(a),"increaseYear",(function(){a.setState((function(e){var t=e.date;return{date:Object(addYears.a)(t,a.props.showYearPicker?12:1)}}),(function(){return a.handleYearChange(a.state.date)}))})),ie(fe(a),"renderNextButton",(function(){if(!a.props.renderCustomHeader){var t;switch(!0){case a.props.showMonthYearPicker:t=st(a.state.date,a.props);break;case a.props.showYearPicker:t=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=Object(addYears.a)(e,12),o=ut(n),a=o.startPeriod,s=o.endPeriod,p=r&&Object(getYear.a)(r);return p&&(ps)||!1}(a.state.date,a.props);break;default:t=ot(a.state.date,a.props)}if((a.props.forceShowMonthNavigation||a.props.showDisabledMonthNavigation||!t)&&!a.props.showTimeSelectOnly){var r=["react-datepicker__navigation","react-datepicker__navigation--next"];a.props.showTimeSelect&&r.push("react-datepicker__navigation--next--with-time"),a.props.todayButton&&r.push("react-datepicker__navigation--next--with-today-button");var n=a.increaseMonth;(a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker)&&(n=a.increaseYear),t&&a.props.showDisabledMonthNavigation&&(r.push("react-datepicker__navigation--next--disabled"),n=null);var o=a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker,s=a.props,p=s.nextMonthAriaLabel,i=void 0===p?"Next Month":p,c=s.nextYearAriaLabel,d=void 0===c?"Next Year":c;return react_default.a.createElement("button",{type:"button",className:r.join(" "),onClick:n,"aria-label":o?d:i},o?a.props.nextYearButtonLabel:a.props.nextMonthButtonLabel)}}})),ie(fe(a),"renderCurrentMonth",(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.state.date,r=["react-datepicker__current-month"];return a.props.showYearDropdown&&r.push("react-datepicker__current-month--hasYearDropdown"),a.props.showMonthDropdown&&r.push("react-datepicker__current-month--hasMonthDropdown"),a.props.showMonthYearDropdown&&r.push("react-datepicker__current-month--hasMonthYearDropdown"),react_default.a.createElement("div",{className:r.join(" ")},Se(t,a.props.dateFormat,a.props.locale))})),ie(fe(a),"renderYearDropdown",(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showYearDropdown&&!t)return react_default.a.createElement(ft,{adjustDateOnChange:a.props.adjustDateOnChange,date:a.state.date,onSelect:a.props.onSelect,setOpen:a.props.setOpen,dropdownMode:a.props.dropdownMode,onChange:a.changeYear,minDate:a.props.minDate,maxDate:a.props.maxDate,year:Object(getYear.a)(a.state.date),scrollableYearDropdown:a.props.scrollableYearDropdown,yearDropdownItemNumber:a.props.yearDropdownItemNumber})})),ie(fe(a),"renderMonthDropdown",(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showMonthDropdown&&!t)return react_default.a.createElement(yt,{dropdownMode:a.props.dropdownMode,locale:a.props.locale,onChange:a.changeMonth,month:Object(getMonth.a)(a.state.date),useShortMonthInDropdown:a.props.useShortMonthInDropdown})})),ie(fe(a),"renderMonthYearDropdown",(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showMonthYearDropdown&&!t)return react_default.a.createElement(kt,{dropdownMode:a.props.dropdownMode,locale:a.props.locale,dateFormat:a.props.dateFormat,onChange:a.changeMonthYear,minDate:a.props.minDate,maxDate:a.props.maxDate,date:a.state.date,scrollableMonthYearDropdown:a.props.scrollableMonthYearDropdown})})),ie(fe(a),"renderTodayButton",(function(){if(a.props.todayButton&&!a.props.showTimeSelectOnly)return react_default.a.createElement("div",{className:"react-datepicker__today-button",onClick:function(e){return a.props.onSelect(Object(startOfDay.a)(be()),e)}},a.props.todayButton)})),ie(fe(a),"renderDefaultHeader",(function(t){var r=t.monthDate,n=t.i;return react_default.a.createElement("div",{className:"react-datepicker__header"},a.renderCurrentMonth(r),react_default.a.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(a.props.dropdownMode),onFocus:a.handleDropdownFocus},a.renderMonthDropdown(0!==n),a.renderMonthYearDropdown(0!==n),a.renderYearDropdown(0!==n)),react_default.a.createElement("div",{className:"react-datepicker__day-names"},a.header(r)))})),ie(fe(a),"renderCustomHeader",(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.monthDate,n=t.i;if(0!==n&&void 0!==n)return null;var o=nt(a.state.date,a.props),s=ot(a.state.date,a.props),p=at(a.state.date,a.props),i=st(a.state.date,a.props),c=!a.props.showMonthYearPicker&&!a.props.showQuarterYearPicker&&!a.props.showYearPicker;return react_default.a.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:a.props.onDropdownFocus},a.props.renderCustomHeader(de(de({},a.state),{},{changeMonth:a.changeMonth,changeYear:a.changeYear,decreaseMonth:a.decreaseMonth,increaseMonth:a.increaseMonth,decreaseYear:a.decreaseYear,increaseYear:a.increaseYear,prevMonthButtonDisabled:o,nextMonthButtonDisabled:s,prevYearButtonDisabled:p,nextYearButtonDisabled:i})),c&&react_default.a.createElement("div",{className:"react-datepicker__day-names"},a.header(r)))})),ie(fe(a),"renderYearHeader",(function(){var t=a.state.date,r=a.props.showYearPicker,n=ut(t),o=n.startPeriod,s=n.endPeriod;return react_default.a.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},r?"".concat(o," - ").concat(s):Object(getYear.a)(t))})),ie(fe(a),"renderHeader",(function(e){switch(!0){case void 0!==a.props.renderCustomHeader:return a.renderCustomHeader(e);case a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker:return a.renderYearHeader(e);default:return a.renderDefaultHeader(e)}})),ie(fe(a),"renderMonths",(function(){if(!a.props.showTimeSelectOnly&&!a.props.showYearPicker){for(var t=[],r=a.props.showPreviousMonths?a.props.monthsShown-1:0,n=Object(subMonths.a)(a.state.date,r),o=0;o1&&t[t.length-1].focus()})),ie(fe(o),"handleFocusEnd",(function(e){var t=o.getTabChildren();t&&t.length>1&&t[0].focus()})),o.tabLoopRef=react_default.a.createRef(),o}return pe(n,null,[{key:"defaultProps",get:function(){return{enableTabLoop:!0}}}]),pe(n,[{key:"render",value:function(){return this.props.enableTabLoop?react_default.a.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},react_default.a.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:"0",onFocus:this.handleFocusStart}),this.props.children,react_default.a.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:"0",onFocus:this.handleFocusEnd})):this.props.children}}]),n}(),Tt=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(e){var t;return ae(this,n),(t=r.call(this,e)).el=document.createElement("div"),t}return pe(n,[{key:"componentDidMount",value:function(){this.portalRoot=document.getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),document.body.appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)}},{key:"componentWillUnmount",value:function(){this.portalRoot.removeChild(this.el)}},{key:"render",value:function(){return react_dom_default.a.createPortal(this.props.children,this.el)}}]),n}(),It=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(){return ae(this,o),n.apply(this,arguments)}return pe(o,[{key:"render",value:function(){var r,n=this.props,o=n.className,a=n.wrapperClassName,s=n.hidePopper,p=n.popperComponent,i=n.popperModifiers,c=n.popperPlacement,l=n.popperProps,d=n.targetComponent,u=n.enableTabLoop,h=n.popperOnKeyDown,m=n.portalId;if(!s){var f=classnames_default()("react-datepicker-popper",o);r=react_default.a.createElement(Popper_Popper,ce({modifiers:i,placement:c},l),(function(t){var r=t.ref,n=t.style,o=t.placement,a=t.arrowProps;return react_default.a.createElement(Yt,{enableTabLoop:u},react_default.a.createElement("div",ce({ref:r,style:n},{className:f,"data-placement":o,onKeyDown:h}),react_default.a.cloneElement(p,{arrowProps:a})))}))}this.props.popperContainer&&(r=react_default.a.createElement(this.props.popperContainer,{},r)),m&&!s&&(r=react_default.a.createElement(Tt,{portalId:m},r));var v=classnames_default()("react-datepicker-wrapper",a);return react_default.a.createElement(Manager_Manager,{className:"react-datepicker-manager"},react_default.a.createElement(Reference,null,(function(t){var r=t.ref;return react_default.a.createElement("div",{ref:r,className:v},d)})),r)}}],[{key:"defaultProps",get:function(){return{hidePopper:!0,popperModifiers:{preventOverflow:{enabled:!0,escapeWithReference:!0,boundariesElement:"viewport"}},popperProps:{},popperPlacement:"bottom-start"}}}]),o}(),Lt=react_onclickoutside_es(Ot),Ft=function(n){ue(a,react_default.a.Component);var o=ye(a);function a(n){var s;return ae(this,a),ie(fe(s=o.call(this,n)),"getPreSelection",(function(){return s.props.openToDate?s.props.openToDate:s.props.selectsEnd&&s.props.startDate?s.props.startDate:s.props.selectsStart&&s.props.endDate?s.props.endDate:be()})),ie(fe(s),"calcInitialState",(function(){var e=s.getPreSelection(),t=pt(s.props),r=it(s.props),n=t&&Object(isBefore.a)(e,t)?t:r&&Object(isAfter.a)(e,r)?r:e;return{open:s.props.startOpen||!1,preventFocus:!1,preSelection:s.props.selected?s.props.selected:n,highlightDates:ct(s.props.highlightDates),focused:!1}})),ie(fe(s),"clearPreventFocusTimeout",(function(){s.preventFocusTimeout&&clearTimeout(s.preventFocusTimeout)})),ie(fe(s),"setFocus",(function(){s.input&&s.input.focus&&s.input.focus({preventScroll:!0})})),ie(fe(s),"setBlur",(function(){s.input&&s.input.blur&&s.input.blur(),s.cancelFocusInput()})),ie(fe(s),"setOpen",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];s.setState({open:e,preSelection:e&&s.state.open?s.state.preSelection:s.calcInitialState().preSelection,lastPreSelectChange:Wt},(function(){e||s.setState((function(e){return{focused:!!t&&e.focused}}),(function(){!t&&s.setBlur(),s.setState({inputValue:null})}))}))})),ie(fe(s),"inputOk",(function(){return Object(isDate.a)(s.state.preSelection)})),ie(fe(s),"isCalendarOpen",(function(){return void 0===s.props.open?s.state.open&&!s.props.disabled&&!s.props.readOnly:s.props.open})),ie(fe(s),"handleFocus",(function(e){s.state.preventFocus||(s.props.onFocus(e),s.props.preventOpenOnFocus||s.props.readOnly||s.setOpen(!0)),s.setState({focused:!0})})),ie(fe(s),"cancelFocusInput",(function(){clearTimeout(s.inputFocusTimeout),s.inputFocusTimeout=null})),ie(fe(s),"deferFocusInput",(function(){s.cancelFocusInput(),s.inputFocusTimeout=setTimeout((function(){return s.setFocus()}),1)})),ie(fe(s),"handleDropdownFocus",(function(){s.cancelFocusInput()})),ie(fe(s),"handleBlur",(function(e){(!s.state.open||s.props.withPortal||s.props.showTimeInput)&&s.props.onBlur(e),s.setState({focused:!1})})),ie(fe(s),"handleCalendarClickOutside",(function(e){s.props.inline||s.setOpen(!1),s.props.onClickOutside(e),s.props.withPortal&&e.preventDefault()})),ie(fe(s),"handleChange",(function(){for(var e=arguments.length,t=new Array(e),r=0;r1?"s":"")+" required, but only "+args.length+" present")}__webpack_require__.d(__webpack_exports__,"a",(function(){return requiredArgs}))},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return toDate}));var _lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(0);function toDate(argument){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(1,arguments);var argStr=Object.prototype.toString.call(argument);return argument instanceof Date||"object"==typeof argument&&"[object Date]"===argStr?new Date(argument.getTime()):"number"==typeof argument||"[object Number]"===argStr?new Date(argument):("string"!=typeof argument&&"[object String]"!==argStr||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}},function(module,__webpack_exports__,__webpack_require__){"use strict";function toInteger(dirtyNumber){if(null===dirtyNumber||!0===dirtyNumber||!1===dirtyNumber)return NaN;var number=Number(dirtyNumber);return isNaN(number)?number:number<0?Math.ceil(number):Math.floor(number)}__webpack_require__.d(__webpack_exports__,"a",(function(){return toInteger}))},function(module,exports,__webpack_require__){window.React=window.React||(()=>{try{return window.BdApi.React}catch(e){return null}})()||(()=>{try{return __webpack_require__(97).React}catch(e){return null}})()||(()=>{try{return window.EDApi.React}catch(e){return null}})(),module.exports=window.React},function(module,__webpack_exports__,__webpack_require__){"use strict";function addLeadingZeros(number,targetLength){for(var sign=number<0?"-":"",output=Math.abs(number).toString();output.length0?(6e4+getDateMillisecondsPart(date))%6e4:getDateMillisecondsPart(date))}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfWeek}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function startOfWeek(dirtyDate,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getDay(),diff=(day{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})[0]}filter(filter){return BDModules.get(filter)}filterByUniqueProperties(props){return BDModules.get(mod=>{if(mod.__esModule&&"default"in mod){let doesMatch=!0;for(let prop of props)Object.prototype.hasOwnProperty.call(mod.default,prop)||(doesMatch=!1);if(doesMatch)return!0}for(let prop of props)if(!Object.prototype.hasOwnProperty.call(mod,prop))return!1;return!0})}};class WebpackLoaderError extends Error{constructor(message=""){super(message+="\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error to the devs. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in our discord server."),this.name="WebpackLoaderError"}}exports.WebpackLoaderError=WebpackLoaderError},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return differenceInCalendarDays}));var _lib_getTimezoneOffsetInMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(7),_startOfDay_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(19),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function differenceInCalendarDays(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var startOfDayLeft=Object(_startOfDay_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDateLeft),startOfDayRight=Object(_startOfDay_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDateRight),timestampLeft=startOfDayLeft.getTime()-Object(_lib_getTimezoneOffsetInMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(startOfDayLeft),timestampRight=startOfDayRight.getTime()-Object(_lib_getTimezoneOffsetInMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(startOfDayRight);return Math.round((timestampLeft-timestampRight)/864e5)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return addMonths}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function addMonths(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);if(isNaN(amount))return new Date(NaN);if(!amount)return date;var dayOfMonth=date.getDate(),endOfDesiredMonth=new Date(date.getTime());endOfDesiredMonth.setMonth(date.getMonth()+amount+1,0);var daysInMonth=endOfDesiredMonth.getDate();return dayOfMonth>=daysInMonth?endOfDesiredMonth:(date.setFullYear(endOfDesiredMonth.getFullYear(),endOfDesiredMonth.getMonth(),dayOfMonth),date)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getHours}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getHours(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),hours=date.getHours();return hours}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setMonth}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_getDaysInMonth_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(78),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function setMonth(dirtyDate,dirtyMonth){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),month=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyMonth),year=date.getFullYear(),day=date.getDate(),dateWithDesiredMonth=new Date(0);dateWithDesiredMonth.setFullYear(year,month,15),dateWithDesiredMonth.setHours(0,0,0,0);var daysInMonth=Object(_getDaysInMonth_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(dateWithDesiredMonth);return date.setMonth(month,Math.min(day,daysInMonth)),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getMinutes}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getMinutes(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),minutes=date.getMinutes();return minutes}},function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes=[],i=0;i0?"in "+result:result+" ago":result},formatLong:formatLong,formatRelative:function formatRelative(token,_date,_baseDate,_options){return formatRelativeLocale[token]},localize:{ordinalNumber:function ordinalNumber(dirtyNumber,_dirtyOptions){var number=Number(dirtyNumber),rem100=number%100;if(rem100>20||rem100<10)switch(rem100%10){case 1:return number+"st";case 2:return number+"nd";case 3:return number+"rd"}return number+"th"},era:buildLocalizeFn({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:buildLocalizeFn({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(quarter){return Number(quarter)-1}}),month:buildLocalizeFn({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:buildLocalizeFn({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:buildLocalizeFn({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:function buildMatchPatternFn(args){return function(dirtyString,dirtyOptions){var string=String(dirtyString),options=dirtyOptions||{},matchResult=string.match(args.matchPattern);if(!matchResult)return null;var matchedString=matchResult[0],parseResult=string.match(args.parsePattern);if(!parseResult)return null;var value=args.valueCallback?args.valueCallback(parseResult[0]):parseResult[0];return{value:value=options.valueCallback?options.valueCallback(value):value,rest:string.slice(matchedString.length)}}}({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(value){return parseInt(value,10)}}),era:buildMatchFn({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:buildMatchFn({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(index){return index+1}}),month:buildMatchFn({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:buildMatchFn({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:buildMatchFn({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};__webpack_exports__.a=locale},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isAfter}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isAfter(dirtyDate,dirtyDateToCompare){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),dateToCompare=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateToCompare);return date.getTime()>dateToCompare.getTime()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),month=date.getMonth();return month}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subMilliseconds}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(29),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subMilliseconds(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addMilliseconds_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return addWeeks}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addDays_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(9),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function addWeeks(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount),days=7*amount;return Object(_addDays_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,days)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfUTCWeek}));var _toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function startOfUTCWeek(dirtyDate,dirtyOptions){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),day=date.getUTCDay(),diff=(day0?signedYear:1-signedYear;return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)("yy"===token?year%100:year,token.length)},M:function(date,token){var month=date.getUTCMonth();return"M"===token?String(month+1):Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(month+1,2)},d:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCDate(),token.length)},a:function(date,token){var dayPeriodEnumValue=date.getUTCHours()/12>=1?"pm":"am";switch(token){case"a":case"aa":case"aaa":return dayPeriodEnumValue.toUpperCase();case"aaaaa":return dayPeriodEnumValue[0];case"aaaa":default:return"am"===dayPeriodEnumValue?"a.m.":"p.m."}},h:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCHours()%12||12,token.length)},H:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCHours(),token.length)},m:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCMinutes(),token.length)},s:function(date,token){return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date.getUTCSeconds(),token.length)},S:function(date,token){var numberOfDigits=token.length,milliseconds=date.getUTCMilliseconds(),fractionalSeconds=Math.floor(milliseconds*Math.pow(10,numberOfDigits-3));return Object(_addLeadingZeros_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(fractionalSeconds,token.length)}};__webpack_exports__.a=formatters},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return addMilliseconds}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function addMilliseconds(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var timestamp=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate).getTime(),amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return new Date(timestamp+amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function startOfMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate);return date.setDate(1),date.setHours(0,0,0,0),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfQuarter}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function startOfQuarter(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),currentMonth=date.getMonth(),month=currentMonth-currentMonth%3;return date.setMonth(month,1),date.setHours(0,0,0,0),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfUTCISOWeek}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function startOfUTCISOWeek(dirtyDate){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var weekStartsOn=1,date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getUTCDay(),diff=(day0?"-":"+",absOffset=Math.abs(offset),hours=Math.floor(absOffset/60),minutes=absOffset%60;if(0===minutes)return sign+String(hours);var delimiter=dirtyDelimiter||"";return sign+String(hours)+delimiter+Object(addLeadingZeros.a)(minutes,2)}function formatTimezoneWithOptionalMinutes(offset,dirtyDelimiter){return offset%60==0?(offset>0?"-":"+")+Object(addLeadingZeros.a)(Math.abs(offset)/60,2):formatTimezone(offset,dirtyDelimiter)}function formatTimezone(offset,dirtyDelimiter){var delimiter=dirtyDelimiter||"",sign=offset>0?"-":"+",absOffset=Math.abs(offset);return sign+Object(addLeadingZeros.a)(Math.floor(absOffset/60),2)+delimiter+Object(addLeadingZeros.a)(absOffset%60,2)}var format_formatters={G:function(date,token,localize){var era=date.getUTCFullYear()>0?1:0;switch(token){case"G":case"GG":case"GGG":return localize.era(era,{width:"abbreviated"});case"GGGGG":return localize.era(era,{width:"narrow"});case"GGGG":default:return localize.era(era,{width:"wide"})}},y:function(date,token,localize){if("yo"===token){var signedYear=date.getUTCFullYear(),year=signedYear>0?signedYear:1-signedYear;return localize.ordinalNumber(year,{unit:"year"})}return lightFormatters.a.y(date,token)},Y:function(date,token,localize,options){var signedWeekYear=Object(getUTCWeekYear.a)(date,options),weekYear=signedWeekYear>0?signedWeekYear:1-signedWeekYear;if("YY"===token){var twoDigitYear=weekYear%100;return Object(addLeadingZeros.a)(twoDigitYear,2)}return"Yo"===token?localize.ordinalNumber(weekYear,{unit:"year"}):Object(addLeadingZeros.a)(weekYear,token.length)},R:function(date,token){var isoWeekYear=Object(getUTCISOWeekYear.a)(date);return Object(addLeadingZeros.a)(isoWeekYear,token.length)},u:function(date,token){var year=date.getUTCFullYear();return Object(addLeadingZeros.a)(year,token.length)},Q:function(date,token,localize){var quarter=Math.ceil((date.getUTCMonth()+1)/3);switch(token){case"Q":return String(quarter);case"QQ":return Object(addLeadingZeros.a)(quarter,2);case"Qo":return localize.ordinalNumber(quarter,{unit:"quarter"});case"QQQ":return localize.quarter(quarter,{width:"abbreviated",context:"formatting"});case"QQQQQ":return localize.quarter(quarter,{width:"narrow",context:"formatting"});case"QQQQ":default:return localize.quarter(quarter,{width:"wide",context:"formatting"})}},q:function(date,token,localize){var quarter=Math.ceil((date.getUTCMonth()+1)/3);switch(token){case"q":return String(quarter);case"qq":return Object(addLeadingZeros.a)(quarter,2);case"qo":return localize.ordinalNumber(quarter,{unit:"quarter"});case"qqq":return localize.quarter(quarter,{width:"abbreviated",context:"standalone"});case"qqqqq":return localize.quarter(quarter,{width:"narrow",context:"standalone"});case"qqqq":default:return localize.quarter(quarter,{width:"wide",context:"standalone"})}},M:function(date,token,localize){var month=date.getUTCMonth();switch(token){case"M":case"MM":return lightFormatters.a.M(date,token);case"Mo":return localize.ordinalNumber(month+1,{unit:"month"});case"MMM":return localize.month(month,{width:"abbreviated",context:"formatting"});case"MMMMM":return localize.month(month,{width:"narrow",context:"formatting"});case"MMMM":default:return localize.month(month,{width:"wide",context:"formatting"})}},L:function(date,token,localize){var month=date.getUTCMonth();switch(token){case"L":return String(month+1);case"LL":return Object(addLeadingZeros.a)(month+1,2);case"Lo":return localize.ordinalNumber(month+1,{unit:"month"});case"LLL":return localize.month(month,{width:"abbreviated",context:"standalone"});case"LLLLL":return localize.month(month,{width:"narrow",context:"standalone"});case"LLLL":default:return localize.month(month,{width:"wide",context:"standalone"})}},w:function(date,token,localize,options){var week=Object(getUTCWeek.a)(date,options);return"wo"===token?localize.ordinalNumber(week,{unit:"week"}):Object(addLeadingZeros.a)(week,token.length)},I:function(date,token,localize){var isoWeek=Object(getUTCISOWeek.a)(date);return"Io"===token?localize.ordinalNumber(isoWeek,{unit:"week"}):Object(addLeadingZeros.a)(isoWeek,token.length)},d:function(date,token,localize){return"do"===token?localize.ordinalNumber(date.getUTCDate(),{unit:"date"}):lightFormatters.a.d(date,token)},D:function(date,token,localize){var dayOfYear=function getUTCDayOfYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),timestamp=date.getTime();date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0);var startOfYearTimestamp=date.getTime(),difference=timestamp-startOfYearTimestamp;return Math.floor(difference/864e5)+1}(date);return"Do"===token?localize.ordinalNumber(dayOfYear,{unit:"dayOfYear"}):Object(addLeadingZeros.a)(dayOfYear,token.length)},E:function(date,token,localize){var dayOfWeek=date.getUTCDay();switch(token){case"E":case"EE":case"EEE":return localize.day(dayOfWeek,{width:"abbreviated",context:"formatting"});case"EEEEE":return localize.day(dayOfWeek,{width:"narrow",context:"formatting"});case"EEEEEE":return localize.day(dayOfWeek,{width:"short",context:"formatting"});case"EEEE":default:return localize.day(dayOfWeek,{width:"wide",context:"formatting"})}},e:function(date,token,localize,options){var dayOfWeek=date.getUTCDay(),localDayOfWeek=(dayOfWeek-options.weekStartsOn+8)%7||7;switch(token){case"e":return String(localDayOfWeek);case"ee":return Object(addLeadingZeros.a)(localDayOfWeek,2);case"eo":return localize.ordinalNumber(localDayOfWeek,{unit:"day"});case"eee":return localize.day(dayOfWeek,{width:"abbreviated",context:"formatting"});case"eeeee":return localize.day(dayOfWeek,{width:"narrow",context:"formatting"});case"eeeeee":return localize.day(dayOfWeek,{width:"short",context:"formatting"});case"eeee":default:return localize.day(dayOfWeek,{width:"wide",context:"formatting"})}},c:function(date,token,localize,options){var dayOfWeek=date.getUTCDay(),localDayOfWeek=(dayOfWeek-options.weekStartsOn+8)%7||7;switch(token){case"c":return String(localDayOfWeek);case"cc":return Object(addLeadingZeros.a)(localDayOfWeek,token.length);case"co":return localize.ordinalNumber(localDayOfWeek,{unit:"day"});case"ccc":return localize.day(dayOfWeek,{width:"abbreviated",context:"standalone"});case"ccccc":return localize.day(dayOfWeek,{width:"narrow",context:"standalone"});case"cccccc":return localize.day(dayOfWeek,{width:"short",context:"standalone"});case"cccc":default:return localize.day(dayOfWeek,{width:"wide",context:"standalone"})}},i:function(date,token,localize){var dayOfWeek=date.getUTCDay(),isoDayOfWeek=0===dayOfWeek?7:dayOfWeek;switch(token){case"i":return String(isoDayOfWeek);case"ii":return Object(addLeadingZeros.a)(isoDayOfWeek,token.length);case"io":return localize.ordinalNumber(isoDayOfWeek,{unit:"day"});case"iii":return localize.day(dayOfWeek,{width:"abbreviated",context:"formatting"});case"iiiii":return localize.day(dayOfWeek,{width:"narrow",context:"formatting"});case"iiiiii":return localize.day(dayOfWeek,{width:"short",context:"formatting"});case"iiii":default:return localize.day(dayOfWeek,{width:"wide",context:"formatting"})}},a:function(date,token,localize){var dayPeriodEnumValue=date.getUTCHours()/12>=1?"pm":"am";switch(token){case"a":case"aa":case"aaa":return localize.dayPeriod(dayPeriodEnumValue,{width:"abbreviated",context:"formatting"});case"aaaaa":return localize.dayPeriod(dayPeriodEnumValue,{width:"narrow",context:"formatting"});case"aaaa":default:return localize.dayPeriod(dayPeriodEnumValue,{width:"wide",context:"formatting"})}},b:function(date,token,localize){var dayPeriodEnumValue,hours=date.getUTCHours();switch(dayPeriodEnumValue=12===hours?dayPeriodEnum_noon:0===hours?dayPeriodEnum_midnight:hours/12>=1?"pm":"am",token){case"b":case"bb":case"bbb":return localize.dayPeriod(dayPeriodEnumValue,{width:"abbreviated",context:"formatting"});case"bbbbb":return localize.dayPeriod(dayPeriodEnumValue,{width:"narrow",context:"formatting"});case"bbbb":default:return localize.dayPeriod(dayPeriodEnumValue,{width:"wide",context:"formatting"})}},B:function(date,token,localize){var dayPeriodEnumValue,hours=date.getUTCHours();switch(dayPeriodEnumValue=hours>=17?dayPeriodEnum_evening:hours>=12?dayPeriodEnum_afternoon:hours>=4?dayPeriodEnum_morning:dayPeriodEnum_night,token){case"B":case"BB":case"BBB":return localize.dayPeriod(dayPeriodEnumValue,{width:"abbreviated",context:"formatting"});case"BBBBB":return localize.dayPeriod(dayPeriodEnumValue,{width:"narrow",context:"formatting"});case"BBBB":default:return localize.dayPeriod(dayPeriodEnumValue,{width:"wide",context:"formatting"})}},h:function(date,token,localize){if("ho"===token){var hours=date.getUTCHours()%12;return 0===hours&&(hours=12),localize.ordinalNumber(hours,{unit:"hour"})}return lightFormatters.a.h(date,token)},H:function(date,token,localize){return"Ho"===token?localize.ordinalNumber(date.getUTCHours(),{unit:"hour"}):lightFormatters.a.H(date,token)},K:function(date,token,localize){var hours=date.getUTCHours()%12;return"Ko"===token?localize.ordinalNumber(hours,{unit:"hour"}):Object(addLeadingZeros.a)(hours,token.length)},k:function(date,token,localize){var hours=date.getUTCHours();return 0===hours&&(hours=24),"ko"===token?localize.ordinalNumber(hours,{unit:"hour"}):Object(addLeadingZeros.a)(hours,token.length)},m:function(date,token,localize){return"mo"===token?localize.ordinalNumber(date.getUTCMinutes(),{unit:"minute"}):lightFormatters.a.m(date,token)},s:function(date,token,localize){return"so"===token?localize.ordinalNumber(date.getUTCSeconds(),{unit:"second"}):lightFormatters.a.s(date,token)},S:function(date,token){return lightFormatters.a.S(date,token)},X:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();if(0===timezoneOffset)return"Z";switch(token){case"X":return formatTimezoneWithOptionalMinutes(timezoneOffset);case"XXXX":case"XX":return formatTimezone(timezoneOffset);case"XXXXX":case"XXX":default:return formatTimezone(timezoneOffset,":")}},x:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();switch(token){case"x":return formatTimezoneWithOptionalMinutes(timezoneOffset);case"xxxx":case"xx":return formatTimezone(timezoneOffset);case"xxxxx":case"xxx":default:return formatTimezone(timezoneOffset,":")}},O:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();switch(token){case"O":case"OO":case"OOO":return"GMT"+formatTimezoneShort(timezoneOffset,":");case"OOOO":default:return"GMT"+formatTimezone(timezoneOffset,":")}},z:function(date,token,_localize,options){var timezoneOffset=(options._originalDate||date).getTimezoneOffset();switch(token){case"z":case"zz":case"zzz":return"GMT"+formatTimezoneShort(timezoneOffset,":");case"zzzz":default:return"GMT"+formatTimezone(timezoneOffset,":")}},t:function(date,token,_localize,options){var originalDate=options._originalDate||date,timestamp=Math.floor(originalDate.getTime()/1e3);return Object(addLeadingZeros.a)(timestamp,token.length)},T:function(date,token,_localize,options){var timestamp=(options._originalDate||date).getTime();return Object(addLeadingZeros.a)(timestamp,token.length)}},longFormatters=__webpack_require__(81),getTimezoneOffsetInMilliseconds=__webpack_require__(7),protectedTokens=__webpack_require__(33),toInteger=__webpack_require__(2),formattingTokensRegExp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,longFormattingTokensRegExp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,escapedStringRegExp=/^'([^]*?)'?$/,doubleQuoteRegExp=/''/g,unescapedLatinCharacterRegExp=/[a-zA-Z]/;function format(dirtyDate,dirtyFormatStr,dirtyOptions){Object(requiredArgs.a)(2,arguments);var formatStr=String(dirtyFormatStr),options=dirtyOptions||{},locale=options.locale||en_US.a,localeFirstWeekContainsDate=locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var localeWeekStartsOn=locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!locale.localize)throw new RangeError("locale must contain localize property");if(!locale.formatLong)throw new RangeError("locale must contain formatLong property");var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var timezoneOffset=Object(getTimezoneOffsetInMilliseconds.a)(originalDate),utcDate=Object(subMilliseconds.a)(originalDate,timezoneOffset),formatterOptions={firstWeekContainsDate:firstWeekContainsDate,weekStartsOn:weekStartsOn,locale:locale,_originalDate:originalDate},result=formatStr.match(longFormattingTokensRegExp).map((function(substring){var firstCharacter=substring[0];return"p"===firstCharacter||"P"===firstCharacter?(0,longFormatters.a[firstCharacter])(substring,locale.formatLong,formatterOptions):substring})).join("").match(formattingTokensRegExp).map((function(substring){if("''"===substring)return"'";var firstCharacter=substring[0];if("'"===firstCharacter)return cleanEscapedString(substring);var formatter=format_formatters[firstCharacter];if(formatter)return!options.useAdditionalWeekYearTokens&&Object(protectedTokens.b)(substring)&&Object(protectedTokens.c)(substring,dirtyFormatStr,dirtyDate),!options.useAdditionalDayOfYearTokens&&Object(protectedTokens.a)(substring)&&Object(protectedTokens.c)(substring,dirtyFormatStr,dirtyDate),formatter(utcDate,substring,locale.localize,formatterOptions);if(firstCharacter.match(unescapedLatinCharacterRegExp))throw new RangeError("Format string contains an unescaped latin alphabet character `"+firstCharacter+"`");return substring})).join("");return result}function cleanEscapedString(input){return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp,"'")}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isBefore}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isBefore(dirtyDate,dirtyDateToCompare){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),dateToCompare=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateToCompare);return date.getTime()=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(toDate.a)(dirtyDate),day=Object(toInteger.a)(dirtyDay),currentDay=date.getUTCDay(),remainder=day%7,dayIndex=(remainder+7)%7,diff=(dayIndex0,absCurrentYear=isCommonEra?currentYear:1-currentYear;if(absCurrentYear<=50)result=twoDigitYear||100;else{var rangeEnd=absCurrentYear+50;result=twoDigitYear+100*Math.floor(rangeEnd/100)-(twoDigitYear>=rangeEnd%100?100:0)}return isCommonEra?result:1-result}var DAYS_IN_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31],DAYS_IN_MONTH_LEAP_YEAR=[31,29,31,30,31,30,31,31,30,31,30,31];function isLeapYearIndex(year){return year%400==0||year%4==0&&year%100!=0}var _lib_parsers={G:{priority:140,parse:function(string,token,match,_options){switch(token){case"G":case"GG":case"GGG":return match.era(string,{width:"abbreviated"})||match.era(string,{width:"narrow"});case"GGGGG":return match.era(string,{width:"narrow"});case"GGGG":default:return match.era(string,{width:"wide"})||match.era(string,{width:"abbreviated"})||match.era(string,{width:"narrow"})}},set:function(date,flags,value,_options){return flags.era=value,date.setUTCFullYear(value,0,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["R","u","t","T"]},y:{priority:130,parse:function(string,token,match,_options){var valueCallback=function(year){return{year:year,isTwoDigitYear:"yy"===token}};switch(token){case"y":return parseNDigits(4,string,valueCallback);case"yo":return match.ordinalNumber(string,{unit:"year",valueCallback:valueCallback});default:return parseNDigits(token.length,string,valueCallback)}},validate:function(_date,value,_options){return value.isTwoDigitYear||value.year>0},set:function(date,flags,value,_options){var currentYear=date.getUTCFullYear();if(value.isTwoDigitYear){var normalizedTwoDigitYear=normalizeTwoDigitYear(value.year,currentYear);return date.setUTCFullYear(normalizedTwoDigitYear,0,1),date.setUTCHours(0,0,0,0),date}var year="era"in flags&&1!==flags.era?1-value.year:value.year;return date.setUTCFullYear(year,0,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","u","w","I","i","e","c","t","T"]},Y:{priority:130,parse:function(string,token,match,_options){var valueCallback=function(year){return{year:year,isTwoDigitYear:"YY"===token}};switch(token){case"Y":return parseNDigits(4,string,valueCallback);case"Yo":return match.ordinalNumber(string,{unit:"year",valueCallback:valueCallback});default:return parseNDigits(token.length,string,valueCallback)}},validate:function(_date,value,_options){return value.isTwoDigitYear||value.year>0},set:function(date,flags,value,options){var currentYear=Object(getUTCWeekYear.a)(date,options);if(value.isTwoDigitYear){var normalizedTwoDigitYear=normalizeTwoDigitYear(value.year,currentYear);return date.setUTCFullYear(normalizedTwoDigitYear,0,options.firstWeekContainsDate),date.setUTCHours(0,0,0,0),Object(startOfUTCWeek.a)(date,options)}var year="era"in flags&&1!==flags.era?1-value.year:value.year;return date.setUTCFullYear(year,0,options.firstWeekContainsDate),date.setUTCHours(0,0,0,0),Object(startOfUTCWeek.a)(date,options)},incompatibleTokens:["y","R","u","Q","q","M","L","I","d","D","i","t","T"]},R:{priority:130,parse:function(string,token,_match,_options){return parseNDigitsSigned("R"===token?4:token.length,string)},set:function(_date,_flags,value,_options){var firstWeekOfYear=new Date(0);return firstWeekOfYear.setUTCFullYear(value,0,4),firstWeekOfYear.setUTCHours(0,0,0,0),Object(startOfUTCISOWeek.a)(firstWeekOfYear)},incompatibleTokens:["G","y","Y","u","Q","q","M","L","w","d","D","e","c","t","T"]},u:{priority:130,parse:function(string,token,_match,_options){return parseNDigitsSigned("u"===token?4:token.length,string)},set:function(date,_flags,value,_options){return date.setUTCFullYear(value,0,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["G","y","Y","R","w","I","i","e","c","t","T"]},Q:{priority:120,parse:function(string,token,match,_options){switch(token){case"Q":case"QQ":return parseNDigits(token.length,string);case"Qo":return match.ordinalNumber(string,{unit:"quarter"});case"QQQ":return match.quarter(string,{width:"abbreviated",context:"formatting"})||match.quarter(string,{width:"narrow",context:"formatting"});case"QQQQQ":return match.quarter(string,{width:"narrow",context:"formatting"});case"QQQQ":default:return match.quarter(string,{width:"wide",context:"formatting"})||match.quarter(string,{width:"abbreviated",context:"formatting"})||match.quarter(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=1&&value<=4},set:function(date,_flags,value,_options){return date.setUTCMonth(3*(value-1),1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","M","L","w","I","d","D","i","e","c","t","T"]},q:{priority:120,parse:function(string,token,match,_options){switch(token){case"q":case"qq":return parseNDigits(token.length,string);case"qo":return match.ordinalNumber(string,{unit:"quarter"});case"qqq":return match.quarter(string,{width:"abbreviated",context:"standalone"})||match.quarter(string,{width:"narrow",context:"standalone"});case"qqqqq":return match.quarter(string,{width:"narrow",context:"standalone"});case"qqqq":default:return match.quarter(string,{width:"wide",context:"standalone"})||match.quarter(string,{width:"abbreviated",context:"standalone"})||match.quarter(string,{width:"narrow",context:"standalone"})}},validate:function(_date,value,_options){return value>=1&&value<=4},set:function(date,_flags,value,_options){return date.setUTCMonth(3*(value-1),1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","Q","M","L","w","I","d","D","i","e","c","t","T"]},M:{priority:110,parse:function(string,token,match,_options){var valueCallback=function(value){return value-1};switch(token){case"M":return parseNumericPattern(numericPatterns_month,string,valueCallback);case"MM":return parseNDigits(2,string,valueCallback);case"Mo":return match.ordinalNumber(string,{unit:"month",valueCallback:valueCallback});case"MMM":return match.month(string,{width:"abbreviated",context:"formatting"})||match.month(string,{width:"narrow",context:"formatting"});case"MMMMM":return match.month(string,{width:"narrow",context:"formatting"});case"MMMM":default:return match.month(string,{width:"wide",context:"formatting"})||match.month(string,{width:"abbreviated",context:"formatting"})||match.month(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=0&&value<=11},set:function(date,_flags,value,_options){return date.setUTCMonth(value,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","L","w","I","D","i","e","c","t","T"]},L:{priority:110,parse:function(string,token,match,_options){var valueCallback=function(value){return value-1};switch(token){case"L":return parseNumericPattern(numericPatterns_month,string,valueCallback);case"LL":return parseNDigits(2,string,valueCallback);case"Lo":return match.ordinalNumber(string,{unit:"month",valueCallback:valueCallback});case"LLL":return match.month(string,{width:"abbreviated",context:"standalone"})||match.month(string,{width:"narrow",context:"standalone"});case"LLLLL":return match.month(string,{width:"narrow",context:"standalone"});case"LLLL":default:return match.month(string,{width:"wide",context:"standalone"})||match.month(string,{width:"abbreviated",context:"standalone"})||match.month(string,{width:"narrow",context:"standalone"})}},validate:function(_date,value,_options){return value>=0&&value<=11},set:function(date,_flags,value,_options){return date.setUTCMonth(value,1),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","M","w","I","D","i","e","c","t","T"]},w:{priority:100,parse:function(string,token,match,_options){switch(token){case"w":return parseNumericPattern(numericPatterns_week,string);case"wo":return match.ordinalNumber(string,{unit:"week"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=1&&value<=53},set:function(date,_flags,value,options){return Object(startOfUTCWeek.a)(function setUTCWeek(dirtyDate,dirtyWeek,options){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),week=Object(toInteger.a)(dirtyWeek),diff=Object(getUTCWeek.a)(date,options)-week;return date.setUTCDate(date.getUTCDate()-7*diff),date}(date,value,options),options)},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","i","t","T"]},I:{priority:100,parse:function(string,token,match,_options){switch(token){case"I":return parseNumericPattern(numericPatterns_week,string);case"Io":return match.ordinalNumber(string,{unit:"week"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=1&&value<=53},set:function(date,_flags,value,options){return Object(startOfUTCISOWeek.a)(function setUTCISOWeek(dirtyDate,dirtyISOWeek){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),isoWeek=Object(toInteger.a)(dirtyISOWeek),diff=Object(getUTCISOWeek.a)(date)-isoWeek;return date.setUTCDate(date.getUTCDate()-7*diff),date}(date,value,options),options)},incompatibleTokens:["y","Y","u","q","Q","M","L","w","d","D","e","c","t","T"]},d:{priority:90,subPriority:1,parse:function(string,token,match,_options){switch(token){case"d":return parseNumericPattern(numericPatterns_date,string);case"do":return match.ordinalNumber(string,{unit:"date"});default:return parseNDigits(token.length,string)}},validate:function(date,value,_options){var isLeapYear=isLeapYearIndex(date.getUTCFullYear()),month=date.getUTCMonth();return isLeapYear?value>=1&&value<=DAYS_IN_MONTH_LEAP_YEAR[month]:value>=1&&value<=DAYS_IN_MONTH[month]},set:function(date,_flags,value,_options){return date.setUTCDate(value),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","w","I","D","i","e","c","t","T"]},D:{priority:90,subPriority:1,parse:function(string,token,match,_options){switch(token){case"D":case"DD":return parseNumericPattern(numericPatterns_dayOfYear,string);case"Do":return match.ordinalNumber(string,{unit:"date"});default:return parseNDigits(token.length,string)}},validate:function(date,value,_options){return isLeapYearIndex(date.getUTCFullYear())?value>=1&&value<=366:value>=1&&value<=365},set:function(date,_flags,value,_options){return date.setUTCMonth(0,value),date.setUTCHours(0,0,0,0),date},incompatibleTokens:["Y","R","q","Q","M","L","w","I","d","E","i","e","c","t","T"]},E:{priority:90,parse:function(string,token,match,_options){switch(token){case"E":case"EE":case"EEE":return match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"EEEEE":return match.day(string,{width:"narrow",context:"formatting"});case"EEEEEE":return match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"EEEE":default:return match.day(string,{width:"wide",context:"formatting"})||match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=0&&value<=6},set:function(date,_flags,value,options){return(date=setUTCDay(date,value,options)).setUTCHours(0,0,0,0),date},incompatibleTokens:["D","i","e","c","t","T"]},e:{priority:90,parse:function(string,token,match,options){var valueCallback=function(value){var wholeWeekDays=7*Math.floor((value-1)/7);return(value+options.weekStartsOn+6)%7+wholeWeekDays};switch(token){case"e":case"ee":return parseNDigits(token.length,string,valueCallback);case"eo":return match.ordinalNumber(string,{unit:"day",valueCallback:valueCallback});case"eee":return match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"eeeee":return match.day(string,{width:"narrow",context:"formatting"});case"eeeeee":return match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"});case"eeee":default:return match.day(string,{width:"wide",context:"formatting"})||match.day(string,{width:"abbreviated",context:"formatting"})||match.day(string,{width:"short",context:"formatting"})||match.day(string,{width:"narrow",context:"formatting"})}},validate:function(_date,value,_options){return value>=0&&value<=6},set:function(date,_flags,value,options){return(date=setUTCDay(date,value,options)).setUTCHours(0,0,0,0),date},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","c","t","T"]},c:{priority:90,parse:function(string,token,match,options){var valueCallback=function(value){var wholeWeekDays=7*Math.floor((value-1)/7);return(value+options.weekStartsOn+6)%7+wholeWeekDays};switch(token){case"c":case"cc":return parseNDigits(token.length,string,valueCallback);case"co":return match.ordinalNumber(string,{unit:"day",valueCallback:valueCallback});case"ccc":return match.day(string,{width:"abbreviated",context:"standalone"})||match.day(string,{width:"short",context:"standalone"})||match.day(string,{width:"narrow",context:"standalone"});case"ccccc":return match.day(string,{width:"narrow",context:"standalone"});case"cccccc":return match.day(string,{width:"short",context:"standalone"})||match.day(string,{width:"narrow",context:"standalone"});case"cccc":default:return match.day(string,{width:"wide",context:"standalone"})||match.day(string,{width:"abbreviated",context:"standalone"})||match.day(string,{width:"short",context:"standalone"})||match.day(string,{width:"narrow",context:"standalone"})}},validate:function(_date,value,_options){return value>=0&&value<=6},set:function(date,_flags,value,options){return(date=setUTCDay(date,value,options)).setUTCHours(0,0,0,0),date},incompatibleTokens:["y","R","u","q","Q","M","L","I","d","D","E","i","e","t","T"]},i:{priority:90,parse:function(string,token,match,_options){var valueCallback=function(value){return 0===value?7:value};switch(token){case"i":case"ii":return parseNDigits(token.length,string);case"io":return match.ordinalNumber(string,{unit:"day"});case"iii":return match.day(string,{width:"abbreviated",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"short",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback});case"iiiii":return match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback});case"iiiiii":return match.day(string,{width:"short",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback});case"iiii":default:return match.day(string,{width:"wide",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"abbreviated",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"short",context:"formatting",valueCallback:valueCallback})||match.day(string,{width:"narrow",context:"formatting",valueCallback:valueCallback})}},validate:function(_date,value,_options){return value>=1&&value<=7},set:function(date,_flags,value,options){return(date=function setUTCISODay(dirtyDate,dirtyDay){Object(requiredArgs.a)(2,arguments);var day=Object(toInteger.a)(dirtyDay);day%7==0&&(day-=7);var weekStartsOn=1,date=Object(toDate.a)(dirtyDate),currentDay=date.getUTCDay(),remainder=day%7,dayIndex=(remainder+7)%7,diff=(dayIndex=1&&value<=12},set:function(date,_flags,value,_options){var isPM=date.getUTCHours()>=12;return isPM&&value<12?date.setUTCHours(value+12,0,0,0):isPM||12!==value?date.setUTCHours(value,0,0,0):date.setUTCHours(0,0,0,0),date},incompatibleTokens:["H","K","k","t","T"]},H:{priority:70,parse:function(string,token,match,_options){switch(token){case"H":return parseNumericPattern(numericPatterns_hour23h,string);case"Ho":return match.ordinalNumber(string,{unit:"hour"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=23},set:function(date,_flags,value,_options){return date.setUTCHours(value,0,0,0),date},incompatibleTokens:["a","b","h","K","k","t","T"]},K:{priority:70,parse:function(string,token,match,_options){switch(token){case"K":return parseNumericPattern(numericPatterns_hour11h,string);case"Ko":return match.ordinalNumber(string,{unit:"hour"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=11},set:function(date,_flags,value,_options){return date.getUTCHours()>=12&&value<12?date.setUTCHours(value+12,0,0,0):date.setUTCHours(value,0,0,0),date},incompatibleTokens:["a","b","h","H","k","t","T"]},k:{priority:70,parse:function(string,token,match,_options){switch(token){case"k":return parseNumericPattern(numericPatterns_hour24h,string);case"ko":return match.ordinalNumber(string,{unit:"hour"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=1&&value<=24},set:function(date,_flags,value,_options){var hours=value<=24?value%24:value;return date.setUTCHours(hours,0,0,0),date},incompatibleTokens:["a","b","h","H","K","t","T"]},m:{priority:60,parse:function(string,token,match,_options){switch(token){case"m":return parseNumericPattern(numericPatterns_minute,string);case"mo":return match.ordinalNumber(string,{unit:"minute"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=59},set:function(date,_flags,value,_options){return date.setUTCMinutes(value,0,0),date},incompatibleTokens:["t","T"]},s:{priority:50,parse:function(string,token,match,_options){switch(token){case"s":return parseNumericPattern(numericPatterns_second,string);case"so":return match.ordinalNumber(string,{unit:"second"});default:return parseNDigits(token.length,string)}},validate:function(_date,value,_options){return value>=0&&value<=59},set:function(date,_flags,value,_options){return date.setUTCSeconds(value,0),date},incompatibleTokens:["t","T"]},S:{priority:30,parse:function(string,token,_match,_options){return parseNDigits(token.length,string,(function(value){return Math.floor(value*Math.pow(10,3-token.length))}))},set:function(date,_flags,value,_options){return date.setUTCMilliseconds(value),date},incompatibleTokens:["t","T"]},X:{priority:10,parse:function(string,token,_match,_options){switch(token){case"X":return parseTimezonePattern(timezonePatterns_basicOptionalMinutes,string);case"XX":return parseTimezonePattern(timezonePatterns_basic,string);case"XXXX":return parseTimezonePattern(timezonePatterns_basicOptionalSeconds,string);case"XXXXX":return parseTimezonePattern(timezonePatterns_extendedOptionalSeconds,string);case"XXX":default:return parseTimezonePattern(timezonePatterns_extended,string)}},set:function(date,flags,value,_options){return flags.timestampIsSet?date:new Date(date.getTime()-value)},incompatibleTokens:["t","T","x"]},x:{priority:10,parse:function(string,token,_match,_options){switch(token){case"x":return parseTimezonePattern(timezonePatterns_basicOptionalMinutes,string);case"xx":return parseTimezonePattern(timezonePatterns_basic,string);case"xxxx":return parseTimezonePattern(timezonePatterns_basicOptionalSeconds,string);case"xxxxx":return parseTimezonePattern(timezonePatterns_extendedOptionalSeconds,string);case"xxx":default:return parseTimezonePattern(timezonePatterns_extended,string)}},set:function(date,flags,value,_options){return flags.timestampIsSet?date:new Date(date.getTime()-value)},incompatibleTokens:["t","T","X"]},t:{priority:40,parse:function(string,_token,_match,_options){return parseAnyDigitsSigned(string)},set:function(_date,_flags,value,_options){return[new Date(1e3*value),{timestampIsSet:!0}]},incompatibleTokens:"*"},T:{priority:20,parse:function(string,_token,_match,_options){return parseAnyDigitsSigned(string)},set:function(_date,_flags,value,_options){return[new Date(value),{timestampIsSet:!0}]},incompatibleTokens:"*"}},formattingTokensRegExp=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,longFormattingTokensRegExp=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,escapedStringRegExp=/^'([^]*?)'?$/,doubleQuoteRegExp=/''/g,notWhitespaceRegExp=/\S/,unescapedLatinCharacterRegExp=/[a-zA-Z]/;function parse(dirtyDateString,dirtyFormatString,dirtyReferenceDate,dirtyOptions){Object(requiredArgs.a)(3,arguments);var dateString=String(dirtyDateString),formatString=String(dirtyFormatString),options=dirtyOptions||{},locale=options.locale||en_US.a;if(!locale.match)throw new RangeError("locale must contain match property");var localeFirstWeekContainsDate=locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var localeWeekStartsOn=locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(""===formatString)return""===dateString?Object(toDate.a)(dirtyReferenceDate):new Date(NaN);var i,subFnOptions={firstWeekContainsDate:firstWeekContainsDate,weekStartsOn:weekStartsOn,locale:locale},setters=[{priority:10,subPriority:-1,set:dateToSystemTimezone,index:0}],tokens=formatString.match(longFormattingTokensRegExp).map((function(substring){var firstCharacter=substring[0];return"p"===firstCharacter||"P"===firstCharacter?(0,longFormatters.a[firstCharacter])(substring,locale.formatLong,subFnOptions):substring})).join("").match(formattingTokensRegExp),usedTokens=[];for(i=0;i0&¬WhitespaceRegExp.test(dateString))return new Date(NaN);var uniquePrioritySetters=setters.map((function(setter){return setter.priority})).sort((function(a,b){return b-a})).filter((function(priority,index,array){return array.indexOf(priority)===index})).map((function(priority){return setters.filter((function(setter){return setter.priority===priority})).sort((function(a,b){return b.subPriority-a.subPriority}))})).map((function(setterArray){return setterArray[0]})),date=Object(toDate.a)(dirtyReferenceDate);if(isNaN(date))return new Date(NaN);var utcDate=Object(subMilliseconds.a)(date,Object(getTimezoneOffsetInMilliseconds.a)(date)),flags={};for(i=0;i{try{return window.BdApi.ReactDOM}catch(e){return null}})()||(()=>{try{return __webpack_require__(97).ReactDOM}catch(e){return null}})()||(()=>{try{return window.EDApi.ReactDOM}catch(e){return null}})(),module.exports=window.ReactDOM},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return endOfMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function endOfMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),month=date.getMonth();return date.setFullYear(date.getFullYear(),month+1,0),date.setHours(23,59,59,999),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return startOfWeekYear}));var _getWeekYear_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(76),_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(8),_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function startOfWeekYear(dirtyDate,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(options.firstWeekContainsDate),year=Object(_getWeekYear_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate,dirtyOptions),firstWeek=new Date(0);firstWeek.setFullYear(year,0,firstWeekContainsDate),firstWeek.setHours(0,0,0,0);var date=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(firstWeek,dirtyOptions);return date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getDate}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getDate(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),dayOfMonth=date.getDate();return dayOfMonth}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setHours}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setHours(dirtyDate,dirtyHours){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),hours=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyHours);return date.setHours(hours),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setMinutes}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setMinutes(dirtyDate,dirtyMinutes){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),minutes=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyMinutes);return date.setMinutes(minutes),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subYears}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addYears_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(37),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subYears(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addYears_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setYear}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setYear(dirtyDate,dirtyYear){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),year=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyYear);return isNaN(date)?new Date(NaN):(date.setFullYear(year),date)}},function(module,exports){function _extends(){return module.exports=_extends=Object.assign||function(target){for(var i=1;i!e.startsWith("da-")).join(" "):className}FindReact(dom,traverseUp=0){const domFiber=dom[Object.keys(dom).find(key=>key.startsWith("__reactInternalInstance$"))];if(null==domFiber)return null;if(domFiber._currentElement){let compFiber=domFiber._currentElement._owner;for(let i=0;i{let parentFiber=fiber.return;for(;"string"==typeof parentFiber.type;)parentFiber=parentFiber.return;return parentFiber};let compFiber=GetCompFiber(domFiber);for(let i=0;ithis.formatJSObject(e)).join(",\n ")}\n]`:"[]";{const keys=Object.keys(obj);return 0===keys.length?"{}":`{\n ${keys.map(key=>{let original=key;return"symbol"==typeof key?key="["+String(key)+"]":"number"==typeof key?key=String(key):(console.log(key),(isNaN(parseInt(key[0]))||/[^\w\d_$]/g.test(key))&&(key=this.formatJSObject(key))),`${key}: ${this.formatJSObject(obj[original])}`})}\n}`}}getColor(color_name){return Lightcord.DiscordModules.constants.Colors[color_name.toUpperCase()]}firstLetterUppercase(str){return str?str[0].toUpperCase()+str.slice(1):""}executeXTimes(func,times){let results=[];for(let i=0;times>i;i++)results.push(func(i));return results}};class LightcordApiError extends Error{constructor(){super(...arguments),this.name="LightcordApiError"}}exports.LightcordApiError=LightcordApiError},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getWeek}));var _startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8),_startOfWeekYear_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(51),_toDate_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function getWeek(dirtyDate,options){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(dirtyDate),diff=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(date,options).getTime()-Object(_startOfWeekYear_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(date,options).getTime();return Math.round(diff/6048e5)+1}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isSameYear}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isSameYear(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeft=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateLeft),dateRight=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateRight);return dateLeft.getFullYear()===dateRight.getFullYear()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isSameMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isSameMonth(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeft=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateLeft),dateRight=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateRight);return dateLeft.getFullYear()===dateRight.getFullYear()&&dateLeft.getMonth()===dateRight.getMonth()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isSameQuarter}));var _startOfQuarter_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(31),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isSameQuarter(dirtyDateLeft,dirtyDateRight){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeftStartOfQuarter=Object(_startOfQuarter_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateLeft),dateRightStartOfQuarter=Object(_startOfQuarter_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDateRight);return dateLeftStartOfQuarter.getTime()===dateRightStartOfQuarter.getTime()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getDay}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getDay(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getDay();return day}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCWeekYear}));var _toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_startOfUTCWeek_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(27),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function getUTCWeekYear(dirtyDate,dirtyOptions){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,dirtyOptions),year=date.getUTCFullYear(),options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var firstWeekOfNextYear=new Date(0);firstWeekOfNextYear.setUTCFullYear(year+1,0,firstWeekContainsDate),firstWeekOfNextYear.setUTCHours(0,0,0,0);var startOfNextYear=Object(_startOfUTCWeek_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(firstWeekOfNextYear,dirtyOptions),firstWeekOfThisYear=new Date(0);firstWeekOfThisYear.setUTCFullYear(year,0,firstWeekContainsDate),firstWeekOfThisYear.setUTCHours(0,0,0,0);var startOfThisYear=Object(_startOfUTCWeek_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(firstWeekOfThisYear,dirtyOptions);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}},function(module,exports){module.exports=function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype),subClass.prototype.constructor=subClass,subClass.__proto__=superClass}},function(module,exports,__webpack_require__){"use strict";var keys=__webpack_require__(107),hasSymbols="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),toStr=Object.prototype.toString,concat=Array.prototype.concat,origDefineProperty=Object.defineProperty,supportsDescriptors=origDefineProperty&&function(){var obj={};try{for(var _ in origDefineProperty(obj,"x",{enumerable:!1,value:obj}),obj)return!1;return obj.x===obj}catch(e){return!1}}(),defineProperty=function(object,name,value,predicate){var fn;(!(name in object)||"function"==typeof(fn=predicate)&&"[object Function]"===toStr.call(fn)&&predicate())&&(supportsDescriptors?origDefineProperty(object,name,{configurable:!0,enumerable:!1,value:value,writable:!0}):object[name]=value)},defineProperties=function(object,map){var predicates=arguments.length>2?arguments[2]:{},props=keys(map);hasSymbols&&(props=concat.call(props,Object.getOwnPropertySymbols(map)));for(var i=0;i=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),day=date.getDay(),diff=6+(day=startTime&&time<=endTime}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return min}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function min(dirtyDatesArray){var datesArray,result;if(Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments),dirtyDatesArray&&"function"==typeof dirtyDatesArray.forEach)datesArray=dirtyDatesArray;else{if("object"!=typeof dirtyDatesArray||null===dirtyDatesArray)return new Date(NaN);datesArray=Array.prototype.slice.call(dirtyDatesArray)}return datesArray.forEach((function(dirtyDate){var currentDate=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate);(void 0===result||result>currentDate||isNaN(currentDate))&&(result=currentDate)})),result||new Date(NaN)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return max}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function max(dirtyDatesArray){var datesArray,result;if(Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments),dirtyDatesArray&&"function"==typeof dirtyDatesArray.forEach)datesArray=dirtyDatesArray;else{if("object"!=typeof dirtyDatesArray||null===dirtyDatesArray)return new Date(NaN);datesArray=Array.prototype.slice.call(dirtyDatesArray)}return datesArray.forEach((function(dirtyDate){var currentDate=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate);(void 0===result||resultuuidv1(),v4:()=>uuidv4()});exports.default=uuid},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return parseISO}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0),patterns={dateTimeDelimiter:/[T ]/,timeZoneDelimiter:/[Z ]/i,timezone:/([Z+-].*)$/},dateRegex=/^-?(?:(\d{3})|(\d{2})(?:-?(\d{2}))?|W(\d{2})(?:-?(\d{1}))?|)$/,timeRegex=/^(\d{2}(?:[.,]\d*)?)(?::?(\d{2}(?:[.,]\d*)?))?(?::?(\d{2}(?:[.,]\d*)?))?$/,timezoneRegex=/^([+-])(\d{2})(?::?(\d{2}))?$/;function parseISO(argument,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var options=dirtyOptions||{},additionalDigits=null==options.additionalDigits?2:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(options.additionalDigits);if(2!==additionalDigits&&1!==additionalDigits&&0!==additionalDigits)throw new RangeError("additionalDigits must be 0, 1 or 2");if("string"!=typeof argument&&"[object String]"!==Object.prototype.toString.call(argument))return new Date(NaN);var date,dateStrings=splitDateString(argument);if(dateStrings.date){var parseYearResult=parseYear(dateStrings.date,additionalDigits);date=parseDate(parseYearResult.restDateString,parseYearResult.year)}if(isNaN(date)||!date)return new Date(NaN);var offset,timestamp=date.getTime(),time=0;if(dateStrings.time&&(time=parseTime(dateStrings.time),isNaN(time)||null===time))return new Date(NaN);if(!dateStrings.timezone){var dirtyDate=new Date(timestamp+time),result=new Date(dirtyDate.getUTCFullYear(),dirtyDate.getUTCMonth(),dirtyDate.getUTCDate(),dirtyDate.getUTCHours(),dirtyDate.getUTCMinutes(),dirtyDate.getUTCSeconds(),dirtyDate.getUTCMilliseconds());return result.setFullYear(dirtyDate.getUTCFullYear()),result}return offset=parseTimezone(dateStrings.timezone),isNaN(offset)?new Date(NaN):new Date(timestamp+time+offset)}function splitDateString(dateString){var timeString,dateStrings={},array=dateString.split(patterns.dateTimeDelimiter);if(array.length>2)return dateStrings;if(/:/.test(array[0])?(dateStrings.date=null,timeString=array[0]):(dateStrings.date=array[0],timeString=array[1],patterns.timeZoneDelimiter.test(dateStrings.date)&&(dateStrings.date=dateString.split(patterns.timeZoneDelimiter)[0],timeString=dateString.substr(dateStrings.date.length,dateString.length))),timeString){var token=patterns.timezone.exec(timeString);token?(dateStrings.time=timeString.replace(token[1],""),dateStrings.timezone=token[1]):dateStrings.time=timeString}return dateStrings}function parseYear(dateString,additionalDigits){var regex=new RegExp("^(?:(\\d{4}|[+-]\\d{"+(4+additionalDigits)+"})|(\\d{2}|[+-]\\d{"+(2+additionalDigits)+"})$)"),captures=dateString.match(regex);if(!captures)return{year:null};var year=captures[1]&&parseInt(captures[1]),century=captures[2]&&parseInt(captures[2]);return{year:null==century?year:100*century,restDateString:dateString.slice((captures[1]||captures[2]).length)}}function parseDate(dateString,year){if(null===year)return null;var captures=dateString.match(dateRegex);if(!captures)return null;var isWeekDate=!!captures[4],dayOfYear=parseDateUnit(captures[1]),month=parseDateUnit(captures[2])-1,day=parseDateUnit(captures[3]),week=parseDateUnit(captures[4]),dayOfWeek=parseDateUnit(captures[5])-1;if(isWeekDate)return function validateWeekDate(_year,week,day){return week>=1&&week<=53&&day>=0&&day<=6}(0,week,dayOfWeek)?function dayOfISOWeekYear(isoWeekYear,week,day){var date=new Date(0);date.setUTCFullYear(isoWeekYear,0,4);var fourthOfJanuaryDay=date.getUTCDay()||7,diff=7*(week-1)+day+1-fourthOfJanuaryDay;return date.setUTCDate(date.getUTCDate()+diff),date}(year,week,dayOfWeek):new Date(NaN);var date=new Date(0);return function validateDate(year,month,date){return month>=0&&month<=11&&date>=1&&date<=(daysInMonths[month]||(isLeapYearIndex(year)?29:28))}(year,month,day)&&function validateDayOfYearDate(year,dayOfYear){return dayOfYear>=1&&dayOfYear<=(isLeapYearIndex(year)?366:365)}(year,dayOfYear)?(date.setUTCFullYear(year,month,Math.max(dayOfYear,day)),date):new Date(NaN)}function parseDateUnit(value){return value?parseInt(value):1}function parseTime(timeString){var captures=timeString.match(timeRegex);if(!captures)return null;var hours=parseTimeUnit(captures[1]),minutes=parseTimeUnit(captures[2]),seconds=parseTimeUnit(captures[3]);return function validateTime(hours,minutes,seconds){if(24===hours)return 0===minutes&&0===seconds;return seconds>=0&&seconds<60&&minutes>=0&&minutes<60&&hours>=0&&hours<25}(hours,minutes,seconds)?36e5*hours+6e4*minutes+1e3*seconds:NaN}function parseTimeUnit(value){return value&&parseFloat(value.replace(",","."))||0}function parseTimezone(timezoneString){if("Z"===timezoneString)return 0;var captures=timezoneString.match(timezoneRegex);if(!captures)return 0;var sign="+"===captures[1]?-1:1,hours=parseInt(captures[2]),minutes=captures[3]&&parseInt(captures[3])||0;return function validateTimezone(_hours,minutes){return minutes>=0&&minutes<=59}(0,minutes)?sign*(36e5*hours+6e4*minutes):NaN}var daysInMonths=[31,null,31,30,31,30,31,31,30,31,30,31];function isLeapYearIndex(year){return year%400==0||year%4==0&&year%100}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return setSeconds}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function setSeconds(dirtyDate,dirtySeconds){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),seconds=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtySeconds);return date.setSeconds(seconds),date}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getWeekYear}));var _startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(8),_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1),_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(2),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(0);function getWeekYear(dirtyDate,dirtyOptions){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_3__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate),year=date.getFullYear(),options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(options.firstWeekContainsDate);if(!(firstWeekContainsDate>=1&&firstWeekContainsDate<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var firstWeekOfNextYear=new Date(0);firstWeekOfNextYear.setFullYear(year+1,0,firstWeekContainsDate),firstWeekOfNextYear.setHours(0,0,0,0);var startOfNextYear=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(firstWeekOfNextYear,dirtyOptions),firstWeekOfThisYear=new Date(0);firstWeekOfThisYear.setFullYear(year,0,firstWeekContainsDate),firstWeekOfThisYear.setHours(0,0,0,0);var startOfThisYear=Object(_startOfWeek_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(firstWeekOfThisYear,dirtyOptions);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return isEqual}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function isEqual(dirtyLeftDate,dirtyRightDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(2,arguments);var dateLeft=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyLeftDate),dateRight=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyRightDate);return dateLeft.getTime()===dateRight.getTime()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getDaysInMonth}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getDaysInMonth(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),year=date.getFullYear(),monthIndex=date.getMonth(),lastDayOfMonth=new Date(0);return lastDayOfMonth.setFullYear(year,monthIndex+1,0),lastDayOfMonth.setHours(0,0,0,0),lastDayOfMonth.getDate()}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getSeconds}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function getSeconds(dirtyDate){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),seconds=date.getSeconds();return seconds}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subWeeks}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addWeeks_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(26),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subWeeks(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addWeeks_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";function dateLongFormatter(pattern,formatLong){switch(pattern){case"P":return formatLong.date({width:"short"});case"PP":return formatLong.date({width:"medium"});case"PPP":return formatLong.date({width:"long"});case"PPPP":default:return formatLong.date({width:"full"})}}function timeLongFormatter(pattern,formatLong){switch(pattern){case"p":return formatLong.time({width:"short"});case"pp":return formatLong.time({width:"medium"});case"ppp":return formatLong.time({width:"long"});case"pppp":default:return formatLong.time({width:"full"})}}var longFormatters={p:timeLongFormatter,P:function dateTimeLongFormatter(pattern,formatLong){var dateTimeFormat,matchResult=pattern.match(/(P+)(p+)?/),datePattern=matchResult[1],timePattern=matchResult[2];if(!timePattern)return dateLongFormatter(pattern,formatLong);switch(datePattern){case"P":dateTimeFormat=formatLong.dateTime({width:"short"});break;case"PP":dateTimeFormat=formatLong.dateTime({width:"medium"});break;case"PPP":dateTimeFormat=formatLong.dateTime({width:"long"});break;case"PPPP":default:dateTimeFormat=formatLong.dateTime({width:"full"})}return dateTimeFormat.replace("{{date}}",dateLongFormatter(datePattern,formatLong)).replace("{{time}}",timeLongFormatter(timePattern,formatLong))}};__webpack_exports__.a=longFormatters},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCISOWeekYear}));var _toDate_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(1),_startOfUTCISOWeek_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(32),_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function getUTCISOWeekYear(dirtyDate){Object(_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(1,arguments);var date=Object(_toDate_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyDate),year=date.getUTCFullYear(),fourthOfJanuaryOfNextYear=new Date(0);fourthOfJanuaryOfNextYear.setUTCFullYear(year+1,0,4),fourthOfJanuaryOfNextYear.setUTCHours(0,0,0,0);var startOfNextYear=Object(_startOfUTCISOWeek_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(fourthOfJanuaryOfNextYear),fourthOfJanuaryOfThisYear=new Date(0);fourthOfJanuaryOfThisYear.setUTCFullYear(year,0,4),fourthOfJanuaryOfThisYear.setUTCHours(0,0,0,0);var startOfThisYear=Object(_startOfUTCISOWeek_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(fourthOfJanuaryOfThisYear);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}},function(module,__webpack_exports__,__webpack_require__){"use strict";function assign(target,dirtyObject){if(null==target)throw new TypeError("assign requires that input parameter not be null or undefined");for(var property in dirtyObject=dirtyObject||{})dirtyObject.hasOwnProperty(property)&&(target[property]=dirtyObject[property]);return target}__webpack_require__.d(__webpack_exports__,"a",(function(){return assign}))},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCWeek}));var toDate=__webpack_require__(1),startOfUTCWeek=__webpack_require__(27),toInteger=__webpack_require__(2),getUTCWeekYear=__webpack_require__(64),requiredArgs=__webpack_require__(0);function startOfUTCWeekYear(dirtyDate,dirtyOptions){Object(requiredArgs.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate),year=Object(getUTCWeekYear.a)(dirtyDate,dirtyOptions),firstWeek=new Date(0);firstWeek.setUTCFullYear(year,0,firstWeekContainsDate),firstWeek.setUTCHours(0,0,0,0);var date=Object(startOfUTCWeek.a)(firstWeek,dirtyOptions);return date}function getUTCWeek(dirtyDate,options){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=Object(startOfUTCWeek.a)(date,options).getTime()-startOfUTCWeekYear(date,options).getTime();return Math.round(diff/6048e5)+1}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return getUTCISOWeek}));var toDate=__webpack_require__(1),startOfUTCISOWeek=__webpack_require__(32),getUTCISOWeekYear=__webpack_require__(82),requiredArgs=__webpack_require__(0);function startOfUTCISOWeekYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var year=Object(getUTCISOWeekYear.a)(dirtyDate),fourthOfJanuary=new Date(0);fourthOfJanuary.setUTCFullYear(year,0,4),fourthOfJanuary.setUTCHours(0,0,0,0);var date=Object(startOfUTCISOWeek.a)(fourthOfJanuary);return date}function getUTCISOWeek(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=Object(startOfUTCISOWeek.a)(date).getTime()-startOfUTCISOWeekYear(date).getTime();return Math.round(diff/6048e5)+1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getInternalTextInput=void 0;const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let TextInputModules,AllPreviews;exports.getInternalTextInput=function getInternalTextInput(){return TextInput.prototype.modules[0]};class TextInput extends React.PureComponent{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.state={value:props.value||""}}get modules(){return TextInputModules||(TextInputModules=[WebpackLoader_1.default.find(e=>e.default&&"TextInput"===e.default.displayName).default])}onChange(value,name){this.hasSet=!1,this.props.onChange(value,name,this),this.hasSet||(this.setState({value:value}),this.forceUpdate())}onFocus(ev,name){this.props.onFocus(ev,name,this)}onBlur(ev,name){this.props.onBlur(ev,name,this)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,value:this.state.value}))}get value(){return this.state.value||""}setValue(value){this.setState({value:value}),this.forceUpdate(),this.hasSet=!0}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textinput"}],[{size:"default"},{size:"mini"}],[{disabled:!1},{disabled:!0}],[{placeholder:""}],[{value:""}],[{error:null},{error:"Example error"}],[{maxLength:999}],[{className:""}],[{inputClassName:""}],[{id:"api-preview-textinput"}],[{onChange:(value,name)=>{}}]),AllPreviews)}}exports.default=TextInput,TextInput.defaultProps={name:"",size:"default",disabled:!1,placeholder:"",value:"",error:null,maxLength:999,className:"",inputClassName:"",id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default},TextInput.help={warn:"This should be used for single line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let TitleModules,AllPreviews;class Title extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.colorStandard),WebpackLoader_1.default.find(e=>"string"==typeof e.size32),WebpackLoader_1.default.find(e=>"string"==typeof e.h2)])}render(){let[colorModule,sizeModule,titleModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h2} ${titleModule.defaultColor} ${titleModule.defaultMarginh2}`;return props.className&&(className+=" "+props.className),React.createElement("h2",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=Title,Title.defaultProps={children:null,className:null}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function cloneNullProto(obj){let o=Object.create(null);return Object.keys(obj).forEach(k=>{o[k]=obj[k]}),o}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function excludeProperties(obj,props){let newObj={};return Object.keys(obj).forEach(k=>{props.includes(k)||(newObj[k]=obj[k])}),newObj}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notices=exports.events=void 0;const Notice_1=__webpack_require__(100),events_1=__webpack_require__(101);exports.events=new events_1.EventEmitter;class Notices extends React.Component{constructor(props){super(props),this.noticeHandler=this.noticeHandler.bind(this)}noticeHandler(){this.forceUpdate()}componentWillMount(){exports.events.on("noticeUpdate",this.noticeHandler)}componentWillUnmount(){exports.events.off("noticeUpdate",this.noticeHandler)}render(){if(!this.hasNotice)return null;const notice=exports.notices[0];return React.createElement(Notice_1.default,Object.assign({},notice))}get hasNotice(){return exports.notices.length>0}}exports.default=Notices,Notices.displayName="LightcordNotices",Notices.defaultProps={},exports.notices=[]},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subHours}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addHours_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(43),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subHours(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addHours_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.d(__webpack_exports__,"a",(function(){return subMinutes}));var _lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(2),_addMinutes_index_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(45),_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0);function subMinutes(dirtyDate,dirtyAmount){Object(_lib_requiredArgs_index_js__WEBPACK_IMPORTED_MODULE_2__.a)(2,arguments);var amount=Object(_lib_toInteger_index_js__WEBPACK_IMPORTED_MODULE_0__.a)(dirtyAmount);return Object(_addMinutes_index_js__WEBPACK_IMPORTED_MODULE_1__.a)(dirtyDate,-amount)}},function(module,exports,__webpack_require__){"use strict";var warning=function(){};module.exports=warning},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var _react2=_interopRequireDefault(__webpack_require__(3)),_implementation2=_interopRequireDefault(__webpack_require__(148));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default=_react2.default.createContext||_implementation2.default,module.exports=exports.default},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const Button_1=__webpack_require__(96),Switch_1=__webpack_require__(121),RadioGroup_1=__webpack_require__(122),TextArea_1=__webpack_require__(123),TextInput_1=__webpack_require__(86),Dropdown_1=__webpack_require__(124),Title_1=__webpack_require__(87),SettingsTitle_1=__webpack_require__(125),Tabs_1=__webpack_require__(126),SettingSubTitle_1=__webpack_require__(127),CodeBlock_1=__webpack_require__(128),cloneNullProto_1=__webpack_require__(88),Tooltip_1=__webpack_require__(129),ColorPicker_1=__webpack_require__(130),AlertBox_1=__webpack_require__(98),ErrorCatcher_1=__webpack_require__(134),Flex_1=__webpack_require__(102),Text_1=__webpack_require__(103),DateRange_1=__webpack_require__(104),DateInput_1=__webpack_require__(105),RadioGroupProxied=ErrorCatcher_1.createProxyErrorCatcherClass(RadioGroup_1.default);exports.default=cloneNullProto_1.default({inputs:cloneNullProto_1.default({Button:ErrorCatcher_1.createProxyErrorCatcherClass(Button_1.default),Switch:ErrorCatcher_1.createProxyErrorCatcherClass(Switch_1.default),Choices:RadioGroupProxied,RadioGroup:RadioGroupProxied,TextArea:ErrorCatcher_1.createProxyErrorCatcherClass(TextArea_1.default),TextInput:ErrorCatcher_1.createProxyErrorCatcherClass(TextInput_1.default),Dropdown:ErrorCatcher_1.createProxyErrorCatcherClass(Dropdown_1.default),ColorPicker:ErrorCatcher_1.createProxyErrorCatcherClass(ColorPicker_1.default),DateRange:ErrorCatcher_1.createProxyErrorCatcherClass(DateRange_1.default),DateInput:ErrorCatcher_1.createProxyErrorCatcherClass(DateInput_1.default)}),general:cloneNullProto_1.default({Title:ErrorCatcher_1.createProxyErrorCatcherClass(Title_1.default),SettingsTitle:ErrorCatcher_1.createProxyErrorCatcherClass(SettingsTitle_1.default),SettingSubTitle:ErrorCatcher_1.createProxyErrorCatcherClass(SettingSubTitle_1.default),Tabs:ErrorCatcher_1.createProxyErrorCatcherClass(Tabs_1.default),CodeBlock:ErrorCatcher_1.createProxyErrorCatcherClass(CodeBlock_1.default),Tooltip:ErrorCatcher_1.createProxyErrorCatcherClass(Tooltip_1.default),AlertBox:ErrorCatcher_1.createProxyErrorCatcherClass(AlertBox_1.default),Flex:ErrorCatcher_1.createProxyErrorCatcherClass(Flex_1.default),FlexChild:ErrorCatcher_1.createProxyErrorCatcherClass(Flex_1.FlexChild),ErrorCatcher:ErrorCatcher_1.default,Text:Text_1.default})})},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let ButtonModules,AllPreviews;class Button extends React.Component{constructor(props){super(props),this.state={hover:!1}}get modules(){return ButtonModules||(ButtonModules=[WebpackLoader_1.default.findByUniqueProperties(["_horizontal"]),WebpackLoader_1.default.findByUniqueProperties(["colorTransparent"]),WebpackLoader_1.default.findByUniqueProperties(["buttonWrapper"]),WebpackLoader_1.default.findByUniqueProperties(["ButtonColors"])])}render(){let[flexModule,euhModule1,buttonModule,colorsModule]=this.modules,props={};this.props&&("color"in this.props&&(props.color=this.props.color),"children"in this.props&&(props.children=this.props.children),"onClick"in this.props&&(props.onClick=this.props.onClick),"onMouseDown"in this.props&&(props.onMouseDown=this.props.onMouseDown),"wrapper"in this.props&&(props.wrapper=!!this.props.wrapper),"look"in this.props&&(props.look=this.props.look),"size"in this.props&&(props.size=this.props.size),"hoverColor"in this.props&&(props.hoverColor=this.props.hoverColor),"disabled"in this.props?props.disabled=this.props.disabled:props.disabled=!1,"style"in this.props?props.style=this.props.style:props.style={},"onRightClick"in this.props?props.onRightClick=this.props.onRightClick:props.onRightClick=noop_1.default),props.color?(props.color=props.color.toLowerCase(),Button.Colors.includes(props.color)||(props.color=Button.Colors[0])):props.color=Button.Colors[0],props.look?(props.look=props.look.toLowerCase(),Button.Looks.includes(props.look)||(props.look=Button.Looks[0])):props.look=Button.Looks[0],props.size?(props.size=props.size.toLowerCase(),Button.Sizes.includes(props.size)||(props.size=Button.Sizes[0])):props.size=Button.Sizes[0],props.hoverColor?(props.hoverColor=props.hoverColor.toLowerCase(),Button.HoverColors.includes(props.hoverColor)||(props.hoverColor=Button.HoverColors[0])):props.hoverColor=Button.HoverColors[0];let buttonSize=props.size&&colorsModule.ButtonSizes[props.size.toUpperCase()]||"";buttonSize&&(buttonSize=" "+buttonSize);let hoverColor=props.hoverColor&&colorsModule.ButtonHovers[props.hoverColor.toUpperCase()]||"";hoverColor&&(hoverColor=" "+hoverColor),props.onClick="function"==typeof props.onClick?props.onClick:noop_1.default,"boolean"!=typeof props.wrapper&&(props.wrapper=!0),props.onMouseDown="function"==typeof props.onMouseDown?props.onMouseDown:noop_1.default;let hover=this.state.hover?euhModule1.hasHover:"";hover&&(hover=" "+hover);let classListButton=`${flexModule.flexChild} ${euhModule1.button} ${colorsModule.ButtonLooks[props.look.toUpperCase()]} ${colorsModule.ButtonColors[props.color.toUpperCase()]}${buttonSize}${hoverColor}${hover} ${euhModule1.grow}`.split(" ");"string"==typeof this.props.className&&this.props.className&&(classListButton=this.props.className.split(" ").concat(classListButton));let button=React.createElement("button",{type:"button",ref:"button",className:classListButton.join(" "),style:Object.assign({flex:"0 1 auto"},props.style),onClick:props.onClick,onMouseEnter:ev=>{hoverColor&&this.setState({hover:!0})},onMouseLeave:ev=>{hoverColor&&this.setState({hover:!1})},disabled:props.disabled,onContextMenu:()=>props.onRightClick(),onMouseDown:props.onMouseDown},React.createElement("div",{className:euhModule1.contents},props.children));return props.wrapper?React.createElement("div",{ref:"wrapper",className:buttonModule.buttonWrapper},button):button}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[];let colors=[];for(let color of Button.Colors)colors.push({color:color});AllPreviews.push(colors);let looks=[];for(let look of Button.Looks)looks.push({look:look});AllPreviews.push(looks);let sizes=[];for(let size of Button.Sizes)sizes.push({size:size});AllPreviews.push(sizes);let hovers=[];for(let hover of Button.HoverColors)hovers.push({hoverColor:hover});return AllPreviews.push(hovers),AllPreviews.push([{children:"Test Button"}]),AllPreviews.push([{onClick:()=>{}}]),AllPreviews.push([{wrapper:!1}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews})()}}exports.default=Button,Button.Colors=["brand","grey","red","green","yellow","primary","link","white","black","transparent"],Button.Looks=["filled","inverted","outlined","ghost","link","blank"],Button.Sizes=["small","medium","large","xlarge","min","max","icon","none"],Button.HoverColors=["default",...Button.Colors]},function(module,exports){module.exports=require("powercord/webpack")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let AlertBoxModules,AllPreviews;class AlertBox extends React.Component{get modules(){return AlertBoxModules||(AlertBoxModules=[WebpackLoader_1.default.find(e=>e.default&&"Markdown"===e.default.displayName&&e.default.defaultProps.parser).default])}render(){const[Markdown]=this.modules;let wrap,children;return"string"==typeof this.props.children?(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:this.props.children},Markdown.defaultProps)}),children=wrap.props.children):(wrap=Markdown.prototype.render.call({props:Object.assign({className:"",children:""},Markdown.defaultProps)}),children=this.props.children),wrap.props.children=React.createElement("div",{className:"lc-alert-box lc-alert-box-"+this.props.type},React.createElement("blockquote",{className:"lc-blockquote"},children)),wrap}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"***Discord's*** **Markdown** _is_ [supported](https://google.com) or you can just insert your own react childs."}],[{type:"info"},{type:"success"},{type:"warn"},{type:"error"}]),AllPreviews)}}exports.default=AlertBox,AlertBox.defaultProps={type:"info",children:null},AlertBox.help={info:"You can insert markdown (as string) or normal react childs",warn:"All string will be interpreted as markdown. If you want raw string, pass an array with the string inside."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Notice=void 0;const Notices_1=__webpack_require__(90),Utils_1=__webpack_require__(58),uuid_1=__webpack_require__(73),cloneNullProto_1=__webpack_require__(88),events_1=__webpack_require__(101),Notice_1=__webpack_require__(100),excludeProperties_1=__webpack_require__(89),noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12);let soundModule;exports.default=new class DiscordTools{showNotice(data){if("object"!=typeof data||"string"!=typeof data.text)throw new Error("This notice is not valid. Given: "+Utils_1.default.formatJSObject(data));let newData=cloneNullProto_1.default(Object.assign({},Notice_1.defaultNotice,data));newData.id=uuid_1.default(),Notices_1.notices.push(newData),Notices_1.events.emit("noticeUpdate");return new Notice(newData)}get notices(){return Notices_1.notices.map(data=>new Notice(data))}showNotification(data){const notification=new window.Notification(data.title,excludeProperties_1.default(data,["title","onClick","onClose","onShow"]));return notification.onclick=data.onClick||noop_1.default,notification.onshow=data.onShow||noop_1.default,notification.onclose=data.onClose||noop_1.default,notification}createSound(sound){if(soundModule=soundModule||WebpackLoader_1.default.findByUniqueProperties(["createSound"]),!soundModule)throw new WebpackLoader_1.WebpackLoaderError("Couldn't find soundModule here.");return soundModule.createSound(sound)}playSound(sound){const created=this.createSound(sound);return created.play(),created}};const EventHandler=function(){this.removed!==this.state.removed&&this.removed&&this.emit("removed"),this.showing!==this.state.showing&&(this.showing?this.emit("showing",!0):this.emit("showing",!1)),this.index!==this.state.index&&this.emit("index",this.index)};class Notice extends events_1.EventEmitter{constructor(data){super(),this.nextTickRefresh=!1,this.data=data,this.state={removed:this.removed,showing:this.showing,index:this.index};let eventFunc=EventHandler.bind(this);Notices_1.events.on("noticeUpdate",eventFunc),this.on("removed",()=>{Notices_1.events.off("noticeUpdate",eventFunc)})}on(event,listener){return super.on(event,listener)}once(event,listener){return super.once(event,listener)}off(event,listener){return super.off(event,listener)}get removed(){return!Notices_1.notices.find(e=>e.id===this.id)}get showing(){return 0===this.index}get index(){return Notices_1.notices.findIndex(e=>e.id===this.id)}get id(){return this.data.id}update(data){for(let key in data)"id"!==key&&(this.data[key]=data[key]);this.nextTickRefresh||(this.nextTickRefresh=!0,process.nextTick(()=>{this.nextTickRefresh=!1,Notices_1.events.emit("noticeUpdate")}))}get text(){return this.data.text}set text(text){this.update({text:text})}get type(){return this.data.type}set type(type){this.update({type:type})}get buttonText(){return this.data.buttonText}set buttonText(buttonText){this.update({buttonText:buttonText})}get onClick(){return this.data.onClick}set onClick(onClick){this.update({onClick:onClick})}remove(){this.removed||(Notices_1.notices.splice(this.index,1),Notices_1.events.emit("noticeUpdate"))}}exports.Notice=Notice},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaultNotice=void 0;const WebpackLoader_1=__webpack_require__(12),Notices_1=__webpack_require__(90),noop_1=__webpack_require__(20);let NoticeModules;exports.defaultNotice={text:"",id:"unknown id",onClick:noop_1.default,buttonText:null,type:"default"};class Notice extends React.Component{get modules(){return NoticeModules||(NoticeModules=[WebpackLoader_1.default.find(e=>e.noticeInfo)])}render(){const[noticeClasses]=this.modules,className=noticeClasses["notice"+this.props.type.slice(0,1).toUpperCase()+this.props.type.slice(1)];if(!className)return Notices_1.notices.pop(),setImmediate(()=>{Notices_1.events.emit("noticeUpdate")}),null;const button=this.props.buttonText?React.createElement("button",{className:noticeClasses.button,onClick:()=>{Notices_1.notices.pop(),this.props.onClick(),Notices_1.events.emit("noticeUpdate")}},this.props.buttonText):null;return React.createElement("div",{className:className},React.createElement("div",{className:noticeClasses.dismiss,role:"button",tabIndex:0,onClick:()=>{Notices_1.notices.pop(),Notices_1.events.emit("noticeUpdate")}}),this.props.text,button)}}exports.default=Notice,Notice.displayName="LightcordNotice",Notice.defaultProps=exports.defaultNotice},function(module,exports){module.exports=require("events")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.FlexChild=void 0;const WebpackLoader_1=__webpack_require__(12);function getModules(){return FlexModules||(FlexModules=[(()=>{let Flex=WebpackLoader_1.default.find(e=>e.default&&"Flex"===e.default.displayName);return Flex&&(Flex=Flex.default),Flex})()])}let FlexModules,AllPreviews;class Flex extends React.Component{constructor(props){super(props)}get modules(){return getModules()}render(){let[FlexComponent]=this.modules;return React.createElement(FlexComponent,Object.assign({},this.props))}static get Direction(){return getModules()[0].Direction}static get Align(){return getModules()[0].Align}static get Justify(){return getModules()[0].Justify}static get Wrap(){return getModules()[0].Justify}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Your components here."}]),AllPreviews)}}exports.default=Flex;class FlexChild extends React.Component{get modules(){return getModules()}render(){const[FlexComponent]=this.modules;return React.createElement(FlexComponent.Child,Object.assign({},this.props))}}exports.FlexChild=FlexChild},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Constants=void 0;const React=__webpack_require__(3),Utils_1=__webpack_require__(58);class Text extends React.Component{render(){let classList=this.props.className?this.props.className.split(" "):[],style=this.props.style?Object.assign({},this.props.style):{};return style.flexGrow=0,this.props.weight&&classList.push("lc-text-weight"+Utils_1.default.firstLetterUppercase(this.props.weight)),this.props.color&&(style.color=Utils_1.default.getColor(this.props.color)||this.props.color),this.props.textCase&&classList.push("lc-text-cases"+Utils_1.default.firstLetterUppercase(this.props.textCase)),this.props.size&&classList.push(...exports.Constants.sizes[this.props.size]),this.props.family&&classList.push("lc-text-"+this.props.family),this.props.selectable&&classList.push("lc-text-selectable"),React.createElement(this.props.tag,{style:style,className:classList.join(" ")},this.props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[this.weights.map(e=>({weight:e})),this.colors.map(e=>({color:e})),this.textCases.map(e=>({textCase:e})),this.sizes.map(e=>({size:e})),this.familys.map(e=>({family:e})),[{children:"Test Text"}],["div","p",...Utils_1.default.executeXTimes(index=>"h"+(index+1),6)].map(e=>({tag:e})),[!0,!1].map(e=>({selectable:e}))])}static get colors(){return Object.keys(Lightcord.DiscordModules.constants.Colors).map(e=>e.toLowerCase())}}let AllPreviews;exports.default=Text,Text.defaultProps={tag:"div",children:null},Text.weights=["light","normal","medium","semibold","bold"],Text.textCases=["lowercase","uppercase"],Text.sizes=["small","medium","medium_small","medium_large","large"],Text.familys=["primary","code"],exports.Constants={sizes:{small:["lc-text-size12","lc-text-height16"],medium_small:["lc-text-size14","lc-text-height16"],medium:["lc-text-size16","lc-text-height20"],medium_large:["lc-text-size20","lc-text-height26"],large:["lc-text-size28","lc-text-height34"]}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DateConstants=void 0;const React=__webpack_require__(3),Flex_1=__webpack_require__(102),Text_1=__webpack_require__(103);exports.DateConstants={DATE_FORMAT:"yyyy-MM-dd"};const DateInput_1=__webpack_require__(105);let AllPreviews;class DateRange extends React.Component{constructor(props){super(props),this.state={end:props.defaultEnd,start:props.defaultStart}}static get AllPreviews(){return AllPreviews||(AllPreviews=[[{dateFormat:exports.DateConstants.DATE_FORMAT},{dateFormat:"dd/MM/yyyy"},{dateFormat:"MM/dd/yyyy"}],[{defaultEnd:new Date(Date.now()+6048e5)}],[{defaultStart:new Date(Date.now()-6048e5)}],[{onChange:(start,end)=>{}}],[{maxDate:new Date(Date.now()+12096e5)},{maxDate:null}],[{minDate:new Date(Date.now()-12096e5)},{minDate:null}],[{filterDate:date=>!0}],[{showMonthYearPicker:!1},{showMonthYearPicker:!0}]])}componentDidUpdate(oldProps){let defaultStart=this.props.defaultStart;oldProps.defaultStart!==defaultStart&&this.setState({start:defaultStart})}handleEndChange(end){this.setState({end:end},this.handleChange)}handleStartChange(start){this.setState({start:start},this.handleChange)}getMaxDate(){return this.props.maxDate?this.props.maxDate:null}getMinDate(){return this.props.minDate?this.props.minDate:null}handleChange(){const onChange=this.props.onChange;if(null==onChange)return;const state=this.state;onChange(state.start,state.end)}render(){const state=this.state,start=state.start,end=state.end,props=this.props,filterDate=props.filterDate,showMonthYearPicker=props.showMonthYearPicker;return React.createElement(Flex_1.default,{className:"lc-dateWrapper"},React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(Text_1.default,{className:"lc-dateLabel",size:"small",textCase:"uppercase",weight:"semibold",color:"primary_dark_300"},"FROM")),React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(DateInput_1.default,{defaultValue:start,minDate:this.getMinDate(),maxDate:end,onChange:this.handleStartChange.bind(this),startDate:start,endDate:end,filterDate:filterDate,selectsStart:!0,showMonthYearPicker:showMonthYearPicker})),React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(Text_1.default,{className:"lc-dateLabel",size:"small",textCase:"uppercase",weight:"semibold",color:"primary_dark_300"},"TO")),React.createElement(Flex_1.FlexChild,{grow:0},React.createElement(DateInput_1.default,{defaultValue:end,minDate:start,maxDate:this.getMaxDate(),onChange:this.handleEndChange.bind(this),startDate:start,endDate:end,filterDate:filterDate,selectsStart:!0,showMonthYearPicker:showMonthYearPicker})))}}exports.default=DateRange,DateRange.defaultProps={dateFormat:exports.DateConstants.DATE_FORMAT},DateRange.displayName="DateRange",DateRange.help={warn:"This component is still `experimental`. Please report issues to [Lightcord's developers](https://github.com/Lightcord/Lightcord/issues)."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CalendarPicker=exports.AnimatedCalendarPicker=exports.isDateValid=exports.getEmotion=exports.getDateFNS=void 0;const React=__webpack_require__(3),DateRange_1=__webpack_require__(104),WebpackLoader_1=__webpack_require__(12),TextInput_1=__webpack_require__(86),Button_1=__webpack_require__(96),ReactDOM=__webpack_require__(49),DatePicker=__webpack_require__(154);let _datefns,DateInputModules,AllPreviews,AnimatedCalendarPickerModules;function getDateFNS(){return _datefns||(_datefns=__webpack_require__(153))}function getEmotion(){return window.__SECRET_EMOTION__}exports.getDateFNS=getDateFNS,exports.getEmotion=getEmotion;class DateInput extends React.Component{constructor(props){super(props),this.state={inputResetKey:0,isCalendarPickerOpen:!1,calendarRight:null,calendarTop:null,value:props.defaultValue}}get modules(){return DateInputModules||(DateInputModules=[WebpackLoader_1.default.find(e=>e.default&&"Clickable"===e.default.displayName),WebpackLoader_1.default.find(e=>e.default&&"TransitionGroup"===e.default.displayName)])}componentDidUpdate(e){const defaultValue=this.props.defaultValue,dateFormat=this.props.dateFormat;if(e.defaultValue!==defaultValue&&null!=defaultValue){if(!this.inputRef)return;let str=getDateFNS().format(defaultValue,dateFormat);this.inputRef.value=str}}closeCalendarPicker(){this.setState({isCalendarPickerOpen:!1})}getCurrentValue(){let value=this.state.value,dateFormat=this.props.dateFormat;if(value)return isDateValid(value)?getDateFNS().format(value,dateFormat):null}handleDateChange(value){this.closeCalendarPicker();const onChange=this.props.onChange,name=this.props.name;this.setState(state=>({value:value,inputResetKey:state.inputResetKey+1}),(function(){null!=onChange&&onChange(value,name)}))}handleInputBlur(ev){const value=this.state.value,newvalue=ev.currentTarget.value,iso=getDateFNS().parseISO(newvalue);isDateValid(iso)&&value&&iso.valueOf()!==value.valueOf()&&this.setState((function(state){return{value:iso,inputResetKey:state.inputResetKey+1}}),(function(){const props=this.props,onChange=props.onChange,name=props.name;onChange&&onChange(iso,name)}))}toggleCalendarVisibility(ev){const rect=ev.currentTarget.getBoundingClientRect(),bottom=rect.bottom,right=rect.right,innerWidth=window.innerWidth;this.setState((function(state){return{isCalendarPickerOpen:!state.isCalendarPickerOpen,calendarRight:innerWidth-right,calendarTop:bottom}}))}setRef(ref){this.inputRef=ref}renderCalendarPicker(){let state=this.state,calendarRight=state.calendarRight,calendarTop=state.calendarTop,isCalendarPickerOpen=state.isCalendarPickerOpen,value=state.value,props=this.props,minDate=props.minDate,maxDate=props.maxDate,endDate=props.endDate,filterDate=props.filterDate,startDate=props.startDate,selectsEnd=props.selectsEnd,selectsStart=props.selectsStart,isModalInput=props.isModalInput,y=props.showMonthYearPicker;return isCalendarPickerOpen?React.createElement(AnimatedCalendarPicker,{value:value||void 0,onClickOutside:this.closeCalendarPicker.bind(this),onSelect:this.handleDateChange.bind(this),minDate:minDate,maxDate:maxDate,endDate:endDate,filterDate:filterDate,startDate:startDate,selectsEnd:selectsEnd,selectsStart:selectsStart,right:calendarRight,top:calendarTop,isModalInput:isModalInput,showMonthYearPicker:y}):null}render(){const[Clickable,TransitionGroup]=this.modules;let name=this.props.name;return React.createElement(Clickable.default,{className:getEmotion().css({position:"relative"})},React.createElement(TextInput_1.getInternalTextInput(),{inputClassName:getEmotion().css({paddingRight:"32px"}),name:name,onBlur:this.handleInputBlur.bind(this),defaultValue:this.getCurrentValue(),inputRef:this.setRef.bind(this)}),React.createElement(Button_1.default,{className:getEmotion().css({"&:hover":{opacity:1},position:"absolute",right:0,top:"50%",opacity:.6,padding:"8px",transform:"translateY(-50%)",transition:"opacity .125s"}),color:"transparent",onMouseDown:this.toggleCalendarVisibility.bind(this),wrapper:!1}),ReactDOM.createPortal(React.createElement(TransitionGroup.default,{component:"div",transitionAppear:!1},this.renderCalendarPicker()),window.document.body))}static get AllPreviews(){return AllPreviews||(AllPreviews=[[{dateFormat:DateRange_1.DateConstants.DATE_FORMAT},{dateFormat:"dd/MM/yyyy"},{dateFormat:"MM/dd/yyyy"}],[{defaultValue:new Date},{defaultValue:null},{defaultValue:new Date(1597061085498)}],[{filterDate:date=>!0},{filterDate:date=>0===date.getDay()}],[{isModalInput:!0},{isModalInput:!1}],[{maxDate:null},{maxDate:new Date(Date.now()+6048e5)}],[{minDate:null},{minDate:new Date(Date.now()-6048e5)}],[{onChange:(value,name)=>{}}],[{selectsStart:null},{selectsStart:new Date(Date.now()-1728e5)}],[{selectsEnd:null},{selectsEnd:new Date(Date.now()+1728e5)}],[{showMonthYearPicker:!1},{showMonthYearPicker:!0}],[{startDate:null},{endDate:null}],[{name:"api-preview-dateinput"}]])}}function isDateValid(date){return(date instanceof Date||"object"==typeof date||"[object Date]"===Object.prototype.toString.call(date))&&!isNaN(date.valueOf())}exports.default=DateInput,DateInput.defaultProps={dateFormat:DateRange_1.DateConstants.DATE_FORMAT,isModalInput:!0},DateInput.help={warn:"This component is still `experimental`. Please report issues to [Lightcord's developers](https://github.com/Lightcord/Lightcord/issues)."},exports.isDateValid=isDateValid;class AnimatedCalendarPicker extends React.Component{constructor(props){super(props),this.state={menuAnimation:new this.modules[0].default.Value(0)}}get modules(){return AnimatedCalendarPickerModules||(AnimatedCalendarPickerModules=[WebpackLoader_1.default.findByUniqueProperties(["Value","timing"])])}componentWillEnter(ev){this.modules[0].default.timing(this.state.menuAnimation,{toValue:1,duration:150}).start(ev)}componentWillLeave(e){this.modules[0].default.timing(this.state.menuAnimation,{toValue:0,duration:150}).start(e)}render(){let props=this.props,value=props.value,onClickOutside=props.onClickOutside,onSelect=props.onSelect,minDate=props.minDate,maxDate=props.maxDate,endDate=props.endDate,filterDate=props.filterDate,startDate=props.startDate,selectsEnd=props.selectsEnd,selectsStart=props.selectsStart,top=props.top,right=props.right,isModalInput=props.isModalInput,showMonthYearPicker=props.showMonthYearPicker,menuAnimation=this.state.menuAnimation,interpolation=menuAnimation.interpolate({inputRange:[0,1],outputRange:["-10px","0px"]});const emotion=getEmotion();return React.createElement(this.modules[0].default.div,{className:[emotion.css({marginRight:"1px",margintop:"6px",position:"fixed",zIndex:2}),isModalInput?emotion.css({zIndex:1e4}):null].filter(e=>e).join(" "),style:{opacity:menuAnimation,right:right,top:top,transform:[{translateY:interpolation}]}},React.createElement(CalendarPicker,{minDate:minDate,maxDate:maxDate,endDate:endDate,filterDate:filterDate,startDate:startDate,selectsEnd:selectsEnd,selectsStart:selectsStart,value:value,onSelect:onSelect,onClickOutside:onClickOutside,showMonthYearPicker:showMonthYearPicker,onChange:console.log}))}}exports.AnimatedCalendarPicker=AnimatedCalendarPicker,AnimatedCalendarPicker.displayName="AnimatedCalendarPicker";class CalendarPicker extends React.Component{render(){var e=this.props,t=e.onClickOutside,r=e.onSelect,n=e.locale,l=e.value,o=e.endDate,u=e.filterDate,f=e.startDate,c=e.minDate,d=e.maxDate,p=e.selectsEnd,y=e.selectsStart,v=e.showMonthYearPicker;return React.createElement("div",{className:"lc-calendarPicker"},React.createElement(DatePicker.default,{fixedHeight:!0,inline:!0,selected:l,locale:n,onClickOutside:t,onSelect:r,onChange:r,endDate:o,filterDate:u,startDate:f,minDate:c,maxDate:d,selectsEnd:p,selectsStart:y,showMonthYearPicker:v}))}}exports.CalendarPicker=CalendarPicker,CalendarPicker.defaultProps={value:new Date},CalendarPicker.displayName="CalendarPicker"},function(module,exports,__webpack_require__){module.exports=__webpack_require__(135)()},function(module,exports,__webpack_require__){"use strict";var slice=Array.prototype.slice,isArgs=__webpack_require__(108),origKeys=Object.keys,keysShim=origKeys?function keys(o){return origKeys(o)}:__webpack_require__(137),originalKeys=Object.keys;keysShim.shim=function shimObjectKeys(){Object.keys?function(){var args=Object.keys(arguments);return args&&args.length===arguments.length}(1,2)||(Object.keys=function keys(object){return isArgs(object)?originalKeys(slice.call(object)):originalKeys(object)}):Object.keys=keysShim;return Object.keys||keysShim},module.exports=keysShim},function(module,exports,__webpack_require__){"use strict";var toStr=Object.prototype.toString;module.exports=function isArguments(value){var str=toStr.call(value),isArgs="[object Arguments]"===str;return isArgs||(isArgs="[object Array]"!==str&&null!==value&&"object"==typeof value&&"number"==typeof value.length&&value.length>=0&&"[object Function]"===toStr.call(value.callee)),isArgs}},function(module,exports,__webpack_require__){"use strict";var bind=__webpack_require__(110),GetIntrinsic=__webpack_require__(141),$apply=GetIntrinsic("%Function.prototype.apply%"),$call=GetIntrinsic("%Function.prototype.call%"),$reflectApply=GetIntrinsic("%Reflect.apply%",!0)||bind.call($call,$apply);module.exports=function callBind(){return $reflectApply(bind,$call,arguments)},module.exports.apply=function applyBind(){return $reflectApply(bind,$apply,arguments)}},function(module,exports,__webpack_require__){"use strict";var implementation=__webpack_require__(140);module.exports=Function.prototype.bind||implementation},function(module,exports,__webpack_require__){"use strict";var origSymbol=global.Symbol,hasSymbolSham=__webpack_require__(142);module.exports=function hasNativeSymbols(){return"function"==typeof origSymbol&&("function"==typeof Symbol&&("symbol"==typeof origSymbol("foo")&&("symbol"==typeof Symbol("bar")&&hasSymbolSham())))}},function(module,exports,__webpack_require__){"use strict";var numberIsNaN=function(value){return value!=value};module.exports=function is(a,b){return 0===a&&0===b?1/a==1/b:a===b||!(!numberIsNaN(a)||!numberIsNaN(b))}},function(module,exports,__webpack_require__){"use strict";var implementation=__webpack_require__(112);module.exports=function getPolyfill(){return"function"==typeof Object.is?Object.is:implementation}},function(module,exports,__webpack_require__){"use strict";var $Object=Object,$TypeError=TypeError;module.exports=function flags(){if(null!=this&&this!==$Object(this))throw new $TypeError("RegExp.prototype.flags getter called on non-object");var result="";return this.global&&(result+="g"),this.ignoreCase&&(result+="i"),this.multiline&&(result+="m"),this.dotAll&&(result+="s"),this.unicode&&(result+="u"),this.sticky&&(result+="y"),result}},function(module,exports,__webpack_require__){"use strict";var implementation=__webpack_require__(114),supportsDescriptors=__webpack_require__(66).supportsDescriptors,$gOPD=Object.getOwnPropertyDescriptor,$TypeError=TypeError;module.exports=function getPolyfill(){if(!supportsDescriptors)throw new $TypeError("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");if("gim"===/a/gim.flags){var descriptor=$gOPD(RegExp.prototype,"flags");if(descriptor&&"function"==typeof descriptor.get&&"boolean"==typeof/a/.dotAll)return descriptor.get}return implementation}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isImported=exports.isNative=void 0,exports.isNative=void 0===window.BDModules,exports.isImported=void 0!==window.BDModules},function(module,exports){module.exports=function _objectWithoutPropertiesLoose(source,excluded){if(null==source)return{};var key,i,target={},sourceKeys=Object.keys(source);for(i=0;i=0||(target[key]=source[key]);return target}},function(module,exports,__webpack_require__){var objectKeys=__webpack_require__(107),isArguments=__webpack_require__(138),is=__webpack_require__(139),isRegex=__webpack_require__(144),flags=__webpack_require__(145),isDate=__webpack_require__(147),getTime=Date.prototype.getTime;function deepEqual(actual,expected,options){var opts=options||{};return!!(opts.strict?is(actual,expected):actual===expected)||(!actual||!expected||"object"!=typeof actual&&"object"!=typeof expected?opts.strict?is(actual,expected):actual==expected:function objEquiv(a,b,opts){var i,key;if(typeof a!=typeof b)return!1;if(isUndefinedOrNull(a)||isUndefinedOrNull(b))return!1;if(a.prototype!==b.prototype)return!1;if(isArguments(a)!==isArguments(b))return!1;var aIsRegex=isRegex(a),bIsRegex=isRegex(b);if(aIsRegex!==bIsRegex)return!1;if(aIsRegex||bIsRegex)return a.source===b.source&&flags(a)===flags(b);if(isDate(a)&&isDate(b))return getTime.call(a)===getTime.call(b);var aIsBuffer=isBuffer(a),bIsBuffer=isBuffer(b);if(aIsBuffer!==bIsBuffer)return!1;if(aIsBuffer||bIsBuffer){if(a.length!==b.length)return!1;for(i=0;i=0;i--)if(ka[i]!=kb[i])return!1;for(i=ka.length-1;i>=0;i--)if(key=ka[i],!deepEqual(a[key],b[key],opts))return!1;return!0}(actual,expected,opts))}function isUndefinedOrNull(value){return null==value}function isBuffer(x){return!(!x||"object"!=typeof x||"number"!=typeof x.length)&&("function"==typeof x.copy&&"function"==typeof x.slice&&!(x.length>0&&"number"!=typeof x[0]))}module.exports=deepEqual},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),components_1=__webpack_require__(95),uuid_1=__webpack_require__(73),Utils_1=__webpack_require__(58),DiscordTools_1=__webpack_require__(99),patchers=__webpack_require__(150),excludeProperties_1=__webpack_require__(89),cloneNullProto_1=__webpack_require__(88),noop_1=__webpack_require__(20),Unfreeze_1=__webpack_require__(151),environnement_1=__webpack_require__(116);__webpack_require__(3),__webpack_require__(49);const lazyLoader_1=__webpack_require__(152);patchers.patch();const LightcordApi={WebpackLoader:WebpackLoader_1.default,Components:components_1.default,uuid:uuid_1.default,Utils:Utils_1.default,DiscordTools:DiscordTools_1.default,_:{excludeProperties:excludeProperties_1.default,cloneNullProto:cloneNullProto_1.default,NOOP:noop_1.default,unfreeze:Unfreeze_1.default},get isNative(){return environnement_1.isNative},get isImported(){return environnement_1.isImported},LazyLoad:lazyLoader_1.LazyLoad};exports.default=LightcordApi,Object.assign(window.Lightcord.Api,LightcordApi)},function(module,exports,__webpack_require__){"use strict";let req;function filterDangerous(mods){return mods.map(e=>function protect(exports){let theModule=exports.exports,mod=theModule.default;if(!mod)return exports;if(mod.remove&&mod.set&&mod.clear&&mod.get&&!mod.sort)return null;if(!mod.getToken&&!mod.getEmail&&!mod.showToken)return exports;const proxy=new Proxy(mod,{getOwnPropertyDescriptor:function(obj,prop){if("getToken"!==prop&&"getEmail"!==prop&&"showToken"!==prop)return Object.getOwnPropertyDescriptor(obj,prop)},get:function(obj,func){return"getToken"==func&&obj.getToken?()=>"mfa.XCnbKzo0CLIqdJzBnL0D8PfDruqkJNHjwHXtr39UU3F8hHx43jojISyi5jdjO52e9_e9MjmafZFFpc-seOMa":"getEmail"==func&&obj.getEmail?()=>"puppet11112@gmail.com":"showToken"==func&&obj.showToken?()=>!0:"__proto__"==func&&obj.__proto__?proxy:obj[func]}});return Object.assign({},exports,{exports:Object.assign({},theModule,{default:proxy})})}(e))}Object.defineProperty(exports,"__esModule",{value:!0}),setReq();function setReq(){try{req=window.webpackJsonp.push([[],{__extra_id__:(mdl,exports,req)=>mdl.exports=req},[["__extra_id__"]]]),req&&(delete req.m.__extra_id__,delete req.c.__extra_id__)}catch(e){req=void 0}}exports.default=new class Webpackloader{get modules(){return req?filterDangerous(Object.values(req.c).filter(e=>e&&e.exports)):(setReq(),req?filterDangerous(Object.values(req.c).filter(e=>e&&e.exports)):[])}get(ids,modules){if("function"==typeof ids)return(modules||this.modules).map(mdl=>mdl&&void 0!==mdl.exports?mdl.exports:null).filter(e=>e).filter(ids);if(Array.isArray(ids))return modules=modules||this.modules,ids.map(id=>this.get(id,modules));{let module=(modules=modules||this.modules).filter(e=>!!e).find(e=>e.i===ids);if(!module)return;return module.exports}}get default(){return this}}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let SwitchModules,AllPreviews;class Switch extends React.Component{constructor(props){super(props),this.state={value:props.value||!1},this.onChange=this.onChange.bind(this)}get modules(){return SwitchModules||(SwitchModules=[WebpackLoader_1.default.find(e=>e.default&&"Switch"===e.default.displayName).default])}render(){let[SwitchComponent]=this.modules,props=this.props;return React.createElement(SwitchComponent,{id:props.id,onChange:this.onChange,value:this.state.value||!1,fill:props.fill,theme:SwitchComponent.Themes[props.theme.toUpperCase()],disabled:props.disabled,className:props.className,size:SwitchComponent.Sizes[props.size.toUpperCase()],style:props.style})}onChange(value){this.props.onChange(!this.state.value),this.setState({value:!this.state.value})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{onChange:value=>{}}]),AllPreviews.push([{value:!1}],[{theme:"default"},{theme:"clear"}],[{disabled:!1},{disabled:!0}],[{id:"api-preview-switch"}],[{fill:null}],[{size:"default"},{size:"mini"}],[{style:{}}]),AllPreviews)}}exports.default=Switch,Switch.defaultProps={id:null,onChange:noop_1.default,value:!1,fill:null,theme:"default",disabled:!1,className:null,size:"default",style:{}},Switch.help={error:"The `clear` option doesn't work well on light theme."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12);let RadioGroupModule,AllPreviews;class RadioGroup extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value}}onChange(ev){this.props.onChange(ev.value),this.setState({value:ev.value})}get modules(){return RadioGroupModule||(RadioGroupModule=[WebpackLoader_1.default.find(e=>e.default&&"RadioGroup"===e.default.displayName).default])}render(){let[RadioGroupComponent]=this.modules,props=this.props;return React.createElement(RadioGroupComponent,{options:props.options,onChange:this.onChange,value:this.state.value,disabled:props.disabled,size:RadioGroupComponent.Sizes[props.size.toUpperCase()],itemType:RadioGroupComponent.ItemTypes[props.itemType.toUpperCase()],infoClassName:props.infoClassName})}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{options:[{value:"option1",name:"Option 1",desc:"description 1"},{value:"option2",name:"Option 2",desc:"description 2"},{value:"option3",name:"Option 3",desc:"description 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{size:"medium"},{size:"small"}],[{itemType:"bar"},{itemType:"panel"}]),AllPreviews)}}exports.default=RadioGroup,RadioGroup.defaultProps={options:[{value:"none",name:"No options",desc:"No options was passed to Choices. If you meant to display no options at all, please pass an empty array.",color:"#f04747"}],value:null,disabled:!1,size:"medium",itemType:"bar",infoClassName:null,onChange:noop_1.default}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),noop_1=__webpack_require__(20);let TextAreaModules,AllPreviews;class TextArea extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),this.onKeyDown=this.onKeyDown.bind(this),this.state={value:props.value||""}}get modules(){return TextAreaModules||(TextAreaModules=[WebpackLoader_1.default.find(e=>e.default&&"TextArea"===e.default.displayName).default])}onChange(value,name){this.props.onChange(value,name),this.setState({value:value})}onFocus(ev,name){this.props.onFocus(ev,name)}onBlur(ev,name){this.props.onBlur(ev,name)}onKeyDown(ev){this.props.onKeyDown(ev)}render(){let[TextAreaComponent]=this.modules,props=this.props;return React.createElement(TextAreaComponent,Object.assign({},props,{onChange:this.onChange,onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown,value:this.state.value}))}get value(){return this.state.value||""}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{name:"api-preview-textarea"}]),AllPreviews.push([{disabled:!1},{disabled:!0}]),AllPreviews.push([{placeholder:null}]),AllPreviews.push([{autoFocus:!1},{autoFocus:!0}]),AllPreviews.push([{resizeable:!1},{resizeable:!0}]),AllPreviews.push([{flex:!1},{flex:!0}]),AllPreviews.push([{autosize:!1},{autosize:!0}]),AllPreviews.push([{rows:3},{rows:2},{rows:1}]),AllPreviews.push([{value:""}]),AllPreviews.push([{error:null},{error:"Example error"}]),AllPreviews.push([{maxLength:100}]),AllPreviews.push([{className:""}]),AllPreviews.push([{inputClassName:""}]),AllPreviews.push([{id:"api-preview-textarea"}]),AllPreviews)}}exports.default=TextArea,TextArea.defaultProps={name:null,disabled:!1,placeholder:null,autoFocus:!1,resizeable:!1,flex:!1,autosize:!1,rows:3,value:"",error:null,maxLength:null,className:null,id:null,onChange:noop_1.default,onFocus:noop_1.default,onBlur:noop_1.default,onKeyDown:noop_1.default},TextArea.help={warn:"This should be used for multi line inputs."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12);let DropdownModules,AllPreviews;class Dropdown extends React.Component{constructor(props){super(props),this.onChange=this.onChange.bind(this),this.state={value:props.value||null}}onChange(value){this.props.onChange(value),this.setState({value:value})}get modules(){return DropdownModules||(DropdownModules=[WebpackLoader_1.default.find(e=>e.default&&"SelectTempWrapper"===e.default.displayName).default])}render(){let[DropdownComponent]=this.modules,props=this.props;return React.createElement(DropdownComponent,Object.assign({},props,{onChange:this.onChange,value:this.state.value}))}get value(){return this.state.value}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{error:null},{error:"An error occured"}],[{options:[{value:"option1",label:"Option 1"},{value:"option2",label:"Option 2"},{value:"option3",label:"Option 3"}]}],[{value:"option1"}],[{disabled:!1},{disabled:!0}],[{searchable:!0},{searchable:!1}],[{clearable:!0},{clearable:!1}],[{isMulti:!1},{isMulti:!0}]),AllPreviews)}}exports.default=Dropdown,Dropdown.defaultProps={className:null,error:null,options:[{value:"none",label:"No options - No options was passed to Dropdown. If you meant to put an empty dropdown, input an empty array."}],valueRenderer:null,multiValueRenderer:null,optionRenderer:null,onChange:noop_1.default,value:null,disabled:!1,searchable:!1,clearable:!1,styleOverrides:null,lightThemeColorOverrides:null,darkThemeColorOverrides:null,isMulti:!1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),Title_1=__webpack_require__(87);let TitleModules,AllPreviews;class SettingsTitle extends React.Component{constructor(props){super(props)}get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60)])}render(){let[marginModule]=this.modules,props=this.props,className=`${marginModule.marginTop60} ${marginModule.marginBottom20}`;return props.className&&(className=0+props.className),React.createElement(Title_1.default,{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingsTitle,SettingsTitle.defaultProps={children:[""],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Tab=void 0;const noop_1=__webpack_require__(20),Title_1=__webpack_require__(87);class Tabs extends React.Component{constructor(props){super(props),this.tabsElements=[],this.state={active:this.props.active||null}}get tabs(){return this.props.tabs||[]}changeTab(tab){tab!==this.state.active&&(this.props.onChange&&this.props.onChange(tab),this.setState({active:tab}),this.tabsElements.forEach(e=>e.setActive(tab===e.props.id)))}render(){return React.createElement("div",{className:"lc-tabWrapper",style:this.props.style},React.createElement("div",{className:"lc-tabnav",style:{flex:"0 1 auto"}},this.tabs.map(tab=>React.createElement(Tab,{TabContainer:this,title:tab.label,id:tab.id,key:btoa(tab.label+":"+tab.id)}))),React.createElement("div",{className:"lc-tab"},this.props.children))}isActive(tab){return this.state.active===tab}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:React.createElement("div",{style:{marginTop:"20px",marginBottom:"20px"}},React.createElement("div",{style:{backgroundColor:"var(--background-primary)",padding:"30px 30px",borderRadius:"8px"},className:"lc-tab-box-shadow"},React.createElement(Title_1.default,null,"Preview tabs")))}],[{tabs:[{label:"Active tab",id:"1"},{label:"Unactive tab",id:"2"}]}],[{active:"1"}],[{onChange:tabId=>{}}]),AllPreviews)}}let AllPreviews;exports.default=Tabs,Tabs.defaultProps={children:null,tabs:[{label:"No tabs was passed to .",id:"none"}],active:null,onChange:noop_1.default,style:{}};class Tab extends React.Component{constructor(props){super(props),this.state={active:props.TabContainer.isActive(props.id)},this.props.TabContainer.tabsElements.push(this)}setActive(isActive){this.setState({active:!!isActive})}render(){let className="lc-navItem";return this.state.active?className+=" lc-navItemActive":className+=" lc-navItemInactive",React.createElement("div",{className:className,onClick:()=>{this.props.TabContainer.changeTab(this.props.id)}},this.props.title)}}exports.Tab=Tab},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let TitleModules,AllPreviews;class SettingSubTitle extends React.Component{get modules(){return TitleModules||(TitleModules=[WebpackLoader_1.default.find(e=>"string"==typeof e.marginTop60),WebpackLoader_1.default.findByUniqueProperties(["h5"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["size14"]),window.Lightcord.Api.WebpackLoader.findByUniqueProperties(["colorStandard"])])}render(){let[marginModule,titleModule,sizeModule,colorModule]=this.modules,props=this.props,className=`${colorModule.colorStandard} ${sizeModule.size14} ${titleModule.h5} ${marginModule.marginBottom4}`;return props.className&&(className=0+props.className),React.createElement("h5",{className:className},props.children)}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{children:"Exemple title"}]),AllPreviews)}}exports.default=SettingSubTitle,SettingSubTitle.defaultProps={children:[],className:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12);let CodeBlockModules,AllPreviews;class CodeBlock extends React.Component{get modules(){return CodeBlockModules||(CodeBlockModules=[WebpackLoader_1.default.find(e=>e.markup),WebpackLoader_1.default.find(e=>e.messageContent),WebpackLoader_1.default.find(e=>e.scrollbarGhostHairline),WebpackLoader_1.default.find(e=>e.highlight),WebpackLoader_1.default.find(e=>e.marginBottom8)])}render(){let[messageModule1,messageModule2,scrollbarModule1,hightlightJS,marginModule1]=this.modules;const code="plaintext"===this.props.language?React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs"},this.props.content):React.createElement("code",{className:scrollbarModule1.scrollbarGhostHairline+" hljs",dangerouslySetInnerHTML:{__html:hightlightJS.highlight(this.props.language,this.props.content).value}});return React.createElement("div",{className:`${messageModule1.markup} ${messageModule2.messageContent}`},React.createElement("pre",null,code),React.createElement("div",{className:marginModule1.marginBottom8}))}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{content:'console.log("Exemple code")'}]),AllPreviews.push([{language:"js"},{language:"plaintext"},...CodeBlock.prototype.modules[3].listLanguages().filter(e=>"js"!==e).map(e=>({language:e}))]),AllPreviews)}}exports.default=CodeBlock,CodeBlock.defaultProps={language:"plaintext",content:""}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const WebpackLoader_1=__webpack_require__(12),excludeProperties_1=__webpack_require__(89);let TooltipModules,AllPreviews;class Tooltip extends React.Component{constructor(props){super(props)}get modules(){return TooltipModules||(TooltipModules=[WebpackLoader_1.default.find(e=>e.default&&"Tooltip"===e.default.displayName)])}render(){let[Tooltip]=this.modules,props=excludeProperties_1.default(this.props,["children"]);return React.createElement(Tooltip.default,props,data=>React.createElement("div",Object.assign(Object.assign({},data),{style:{width:"fit-content",height:"fit-content"}}),this.props.children))}static get AllPreviews(){return AllPreviews||(()=>{AllPreviews=[],AllPreviews.push([{children:React.createElement(window.Lightcord.Api.Components.inputs.Button,{color:"green",look:"ghost",size:"small",hoverColor:"yellow",onClick:()=>{},wrapper:!1},"Hover this button to see the tooltip")}]),AllPreviews.push([{text:"Example Tooltip Text"}]);let colors=[];Tooltip.Colors.forEach(color=>{colors.push({color:color})}),AllPreviews.push(colors);let positions=[];return Tooltip.Positions.forEach(p=>{positions.push({position:p})}),AllPreviews.push(positions),AllPreviews})()}}exports.default=Tooltip,Tooltip.defaultProps={children:null,text:"No text was passed to Tooltip",position:"top",color:"brand"},Tooltip.Positions=["top","left","right","bottom"],Tooltip.Colors=["black","grey","brand","green","yellow","red"]},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const noop_1=__webpack_require__(20),WebpackLoader_1=__webpack_require__(12),Utils_1=__webpack_require__(58),Constants={defaultColor:10070709,baseColors:[1752220,3066993,3447003,10181046,15277667,15844367,15105570,15158332,9807270,6323595,1146986,2067276,2123412,7419530,11342935,12745742,11027200,10038562,9936031,5533306]};let ColorPickerModules,AllPreviews,isFetching=null;class ColorPicker extends React.PureComponent{constructor(props){super(props),this.state={value:props.value||null,lastColor:this.props.value},this.onChange=this.onChange.bind(this)}static preload(){if(!ColorPicker.prototype.modules[0]&&!isFetching)try{new ColorPicker({}).render()}catch(e){console.error(e)}}onChange(val){this.props.onChange(val),this.setState({value:val}),this.forceUpdate()}get modules(){return ColorPickerModules||(ColorPickerModules=[WebpackLoader_1.default.find(e=>e.default&&"ColorPicker"===e.default.displayName)])}renderColorPicker(){let[ColorPickerComponent]=this.modules;if(!ColorPickerComponent){if(isFetching)return isFetching.then(()=>this.forceUpdate()),null;let resolve;ColorPickerModules=null,isFetching=new Promise(res=>resolve=res);const GuildSettingsRoles=(new(WebpackLoader_1.default.find(e=>e.default&&e.default.displayName&&e.default.displayName.includes("GuildSettingsRoles")).default)).render().type;let children=GuildSettingsRoles.prototype.renderRoleSettings.call({props:{guild:{roles:[],id:null,isOwner:()=>!1},currentUser:{id:null}},getSelectedRole:()=>({id:null}),renderHeader:GuildSettingsRoles.prototype.renderHeader}).props.children[1].type.prototype.renderColorPicker.call({props:{role:{id:null,color:0},locked:!1,everyone:!1}}).props.children;return children.type(children.props).props.children.type._ctor().then(c=>{ColorPickerModules=null,this.forceUpdate(),resolve()}),null}return React.createElement(ColorPickerComponent.default,{colors:this.props.baseColors,defaultColor:this.props.defaultColor,value:this.state.value,disabled:this.props.disabled,onChange:this.onChange,customColor:this.props.customColor})}render(){return this.state.lastColor!==this.props.value&&(this.state={value:this.props.value,lastColor:this.props.value}),this.renderColorPicker()}static get AllPreviews(){return AllPreviews||(AllPreviews=[],AllPreviews.push([{disabled:!1},{disabled:!0}],[{value:Utils_1.default.HexColorToDecimal("#7289DA")},{value:null}],[{onChange:color=>{}}]),AllPreviews)}}exports.default=ColorPicker,ColorPicker.defaultProps={defaultColor:Constants.defaultColor,customColor:null,baseColors:Constants.baseColors,value:null,disabled:!1,onChange:noop_1.default},ColorPicker.help={info:"To convert hex colors to decimal, you can do `Lightcord.Api.Utils.HexColorToDecimal('#7289DA')` and go back with `Lightcord.Api.Utils.DecimalColorToHex(7506394)`",warn:"The component may not appear instantly. The component needs to be loaded, so you could experience 50-300ms loading time depending on your internet connection."}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const components_1=__webpack_require__(95),Utils_1=__webpack_require__(58),uuid_1=__webpack_require__(73),TextInput_1=__webpack_require__(86);exports.default=new class PluginUtilities{constructor(){}renderSettings(settings){let items=this.renderSettingsToReact(settings),elem=React.createElement("div",{key:uuid_1.default()},items);return Utils_1.default.ReactToHTMLElement(elem)}renderSettingsToReact(settings){let items=[];return settings.forEach(item=>{if("object"!=typeof item)return items.push(item);item.props&&"children"in item.props&&(Array.isArray(item.props.children)||(item.props.children=[item.props.children]),item.props.children=this.renderSettingsToReact(item.props.children)),item.props||(item.props={}),item.props.key=uuid_1.default();let component=Utils_1.default.getNestedProps(components_1.default,item.component);if(component)items.push(React.createElement(component,Object.create(item.props)));else{let warning=new TextInput_1.default({value:`Warning: No component was found for: "${item.component}". Please correct your code.`,disabled:!0,error:`Warning: No component was found for: "${item.component}". Please correct your code.`}).render();items.push(warning)}}),items}}},function(module,exports){module.exports=require("uuid/v1")},function(module,exports){module.exports=require("uuid/v4")},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProxyErrorCatcherClass=void 0;const WebpackLoader_1=__webpack_require__(12),DiscordTools_1=__webpack_require__(99),noop_1=__webpack_require__(20),uuid_1=__webpack_require__(73),AlertBox_1=__webpack_require__(98);let ErrorCatcherModules,AllPreviews;class ErrorCatcher extends React.Component{constructor(props){super(props),this.defaultProps={children:null},this.state={error:!1,hasSentNotification:!1}}static get original(){return ErrorCatcher}get modules(){return ErrorCatcherModules||(ErrorCatcherModules=[WebpackLoader_1.default.find(e=>e.emptyStateImage&&e.emptyState)])}render(){if(this.state.error){const[emptyClasses]=this.modules;if(!emptyClasses){if(this.state.hasSentNotification)return null;const notification=DiscordTools_1.default.showNotification({body:"An error occured. Please check the console for more informations.",icon:"https://github.com/lightcord.png",onClick:noop_1.default,onClose:noop_1.default,onShow:noop_1.default,title:"Lightcord Informations"});return this.setState({hasSentNotification:!0}),setTimeout(()=>{notification.close()},2e3),null}return React.createElement("div",{className:emptyClasses.emptyState},React.createElement("div",{className:emptyClasses.emptyStateImage,style:{marginTop:"20px"}}),React.createElement("div",{className:emptyClasses.emptyStateHeader},"An error occured"),React.createElement("p",{className:emptyClasses.emptyStateSubtext},"Please check the console for more informations. Join our ­support server for more help."))}return this.props.children}componentDidCatch(error,errorInfo){console.error(errorInfo.componentStack),this.setState({error:!0})}static get AllPreviews(){return AllPreviews||(AllPreviews=[[{children:React.createElement(AlertBox_1.default,{type:"info"},"This AlertBox is protected by an ErrorCatcher.")}]])}}exports.default=ErrorCatcher,exports.createProxyErrorCatcherClass=function createProxyErrorCatcherClass(Class){var _a;const ClassCopy=((_a=class Proxied extends React.Component{render(){return React.createElement(ErrorCatcher,{key:uuid_1.default()},React.createElement(Class,Object.assign(Object.assign({ref:"original"},this.props),{key:uuid_1.default()})))}static get original(){return Class}}).displayName=Class.displayName||Class.name,_a);return Object.entries(Object.getOwnPropertyDescriptors(Class)).forEach(value=>{value[0]in ClassCopy||Object.defineProperty(ClassCopy,value[0],value[1])}),ClassCopy}},function(module,exports,__webpack_require__){"use strict";var ReactPropTypesSecret=__webpack_require__(136);function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},function(module,exports,__webpack_require__){"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(module,exports,__webpack_require__){"use strict";var keysShim;if(!Object.keys){var has=Object.prototype.hasOwnProperty,toStr=Object.prototype.toString,isArgs=__webpack_require__(108),isEnumerable=Object.prototype.propertyIsEnumerable,hasDontEnumBug=!isEnumerable.call({toString:null},"toString"),hasProtoEnumBug=isEnumerable.call((function(){}),"prototype"),dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],equalsConstructorPrototype=function(o){var ctor=o.constructor;return ctor&&ctor.prototype===o},excludedKeys={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},hasAutomationEqualityBug=function(){if("undefined"==typeof window)return!1;for(var k in window)try{if(!excludedKeys["$"+k]&&has.call(window,k)&&null!==window[k]&&"object"==typeof window[k])try{equalsConstructorPrototype(window[k])}catch(e){return!0}}catch(e){return!0}return!1}();keysShim=function keys(object){var isObject=null!==object&&"object"==typeof object,isFunction="[object Function]"===toStr.call(object),isArguments=isArgs(object),isString=isObject&&"[object String]"===toStr.call(object),theKeys=[];if(!isObject&&!isFunction&&!isArguments)throw new TypeError("Object.keys called on a non-object");var skipProto=hasProtoEnumBug&&isFunction;if(isString&&object.length>0&&!has.call(object,0))for(var i=0;i0)for(var j=0;j=0&&"[object Array]"!==toStr.call(value)&&"[object Function]"===toStr.call(value.callee)},supportsStandardArguments=function(){return isStandardArguments(arguments)}();isStandardArguments.isLegacyArguments=isLegacyArguments,module.exports=supportsStandardArguments?isStandardArguments:isLegacyArguments},function(module,exports,__webpack_require__){"use strict";var define=__webpack_require__(66),callBind=__webpack_require__(109),implementation=__webpack_require__(112),getPolyfill=__webpack_require__(113),shim=__webpack_require__(143),polyfill=callBind(getPolyfill(),Object);define(polyfill,{getPolyfill:getPolyfill,implementation:implementation,shim:shim}),module.exports=polyfill},function(module,exports,__webpack_require__){"use strict";var ERROR_MESSAGE="Function.prototype.bind called on incompatible ",slice=Array.prototype.slice,toStr=Object.prototype.toString;module.exports=function bind(that){var target=this;if("function"!=typeof target||"[object Function]"!==toStr.call(target))throw new TypeError(ERROR_MESSAGE+target);for(var bound,args=slice.call(arguments,1),binder=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))},boundLength=Math.max(0,target.length-args.length),boundArgs=[],i=0;i1&&"boolean"!=typeof allowMissing)throw new TypeError('"allowMissing" argument must be a boolean');for(var parts=stringToPath(name),value=getBaseIntrinsic("%"+(parts.length>0?parts[0]:"")+"%",allowMissing),i=1;i=parts.length){var desc=$gOPD(value,parts[i]);if(!allowMissing&&!(parts[i]in value))throw new $TypeError("base intrinsic for "+name+" exists, but the property is not available.");value=desc?desc.get||desc.value:value[parts[i]]}else value=value[parts[i]];return value}},function(module,exports,__webpack_require__){"use strict";module.exports=function hasSymbols(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var obj={},sym=Symbol("test"),symObj=Object(sym);if("string"==typeof sym)return!1;if("[object Symbol]"!==Object.prototype.toString.call(sym))return!1;if("[object Symbol]"!==Object.prototype.toString.call(symObj))return!1;for(sym in obj[sym]=42,obj)return!1;if("function"==typeof Object.keys&&0!==Object.keys(obj).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(obj).length)return!1;var syms=Object.getOwnPropertySymbols(obj);if(1!==syms.length||syms[0]!==sym)return!1;if(!Object.prototype.propertyIsEnumerable.call(obj,sym))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var descriptor=Object.getOwnPropertyDescriptor(obj,sym);if(42!==descriptor.value||!0!==descriptor.enumerable)return!1}return!0}},function(module,exports,__webpack_require__){"use strict";var getPolyfill=__webpack_require__(113),define=__webpack_require__(66);module.exports=function shimObjectIs(){var polyfill=getPolyfill();return define(Object,{is:polyfill},{is:function testObjectIs(){return Object.is!==polyfill}}),polyfill}},function(module,exports,__webpack_require__){"use strict";var hasOwnProperty,regexExec,isRegexMarker,badStringifier,hasToStringTag=__webpack_require__(111)()&&"symbol"==typeof Symbol.toStringTag;if(hasToStringTag){hasOwnProperty=Function.call.bind(Object.prototype.hasOwnProperty),regexExec=Function.call.bind(RegExp.prototype.exec),isRegexMarker={};var throwRegexMarker=function(){throw isRegexMarker};badStringifier={toString:throwRegexMarker,valueOf:throwRegexMarker},"symbol"==typeof Symbol.toPrimitive&&(badStringifier[Symbol.toPrimitive]=throwRegexMarker)}var toStr=Object.prototype.toString,gOPD=Object.getOwnPropertyDescriptor;module.exports=hasToStringTag?function isRegex(value){if(!value||"object"!=typeof value)return!1;var descriptor=gOPD(value,"lastIndex");if(!(descriptor&&hasOwnProperty(descriptor,"value")))return!1;try{regexExec(value,badStringifier)}catch(e){return e===isRegexMarker}}:function isRegex(value){return!(!value||"object"!=typeof value&&"function"!=typeof value)&&"[object RegExp]"===toStr.call(value)}},function(module,exports,__webpack_require__){"use strict";var define=__webpack_require__(66),callBind=__webpack_require__(109),implementation=__webpack_require__(114),getPolyfill=__webpack_require__(115),shim=__webpack_require__(146),flagsBound=callBind(implementation);define(flagsBound,{getPolyfill:getPolyfill,implementation:implementation,shim:shim}),module.exports=flagsBound},function(module,exports,__webpack_require__){"use strict";var supportsDescriptors=__webpack_require__(66).supportsDescriptors,getPolyfill=__webpack_require__(115),gOPD=Object.getOwnPropertyDescriptor,defineProperty=Object.defineProperty,TypeErr=TypeError,getProto=Object.getPrototypeOf,regex=/a/;module.exports=function shimFlags(){if(!supportsDescriptors||!getProto)throw new TypeErr("RegExp.prototype.flags requires a true ES5 environment that supports property descriptors");var polyfill=getPolyfill(),proto=getProto(regex),descriptor=gOPD(proto,"flags");return descriptor&&descriptor.get===polyfill||defineProperty(proto,"flags",{configurable:!0,enumerable:!1,get:polyfill}),polyfill}},function(module,exports,__webpack_require__){"use strict";var getDay=Date.prototype.getDay,toStr=Object.prototype.toString,hasToStringTag="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;module.exports=function isDateObject(value){return"object"==typeof value&&null!==value&&(hasToStringTag?function tryDateGetDayCall(value){try{return getDay.call(value),!0}catch(e){return!1}}(value):"[object Date]"===toStr.call(value))}},function(module,exports,__webpack_require__){"use strict";exports.__esModule=!0;var _react=__webpack_require__(3),_propTypes2=(_interopRequireDefault(_react),_interopRequireDefault(__webpack_require__(106))),_gud2=_interopRequireDefault(__webpack_require__(149));_interopRequireDefault(__webpack_require__(93));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}function createEventEmitter(value){var handlers=[];return{on:function on(handler){handlers.push(handler)},off:function off(handler){handlers=handlers.filter((function(h){return h!==handler}))},get:function get(){return value},set:function set(newValue,changedBits){value=newValue,handlers.forEach((function(handler){return handler(value,changedBits)}))}}}exports.default=function createReactContext(defaultValue,calculateChangedBits){var _Provider$childContex,_Consumer$contextType,contextProp="__create-react-context-"+(0,_gud2.default)()+"__",Provider=function(_Component){function Provider(){var _temp,_this;_classCallCheck(this,Provider);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=_possibleConstructorReturn(this,_Component.call.apply(_Component,[this].concat(args))),_this.emitter=createEventEmitter(_this.props.value),_possibleConstructorReturn(_this,_temp)}return _inherits(Provider,_Component),Provider.prototype.getChildContext=function getChildContext(){var _ref;return(_ref={})[contextProp]=this.emitter,_ref},Provider.prototype.componentWillReceiveProps=function componentWillReceiveProps(nextProps){if(this.props.value!==nextProps.value){var oldValue=this.props.value,newValue=nextProps.value,changedBits=void 0;!function objectIs(x,y){return x===y?0!==x||1/x==1/y:x!=x&&y!=y}(oldValue,newValue)?(changedBits="function"==typeof calculateChangedBits?calculateChangedBits(oldValue,newValue):1073741823,0!==(changedBits|=0)&&this.emitter.set(nextProps.value,changedBits)):changedBits=0}},Provider.prototype.render=function render(){return this.props.children},Provider}(_react.Component);Provider.childContextTypes=((_Provider$childContex={})[contextProp]=_propTypes2.default.object.isRequired,_Provider$childContex);var Consumer=function(_Component2){function Consumer(){var _temp2,_this2;_classCallCheck(this,Consumer);for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2<_len2;_key2++)args[_key2]=arguments[_key2];return _temp2=_this2=_possibleConstructorReturn(this,_Component2.call.apply(_Component2,[this].concat(args))),_this2.state={value:_this2.getValue()},_this2.onUpdate=function(newValue,changedBits){0!=((0|_this2.observedBits)&changedBits)&&_this2.setState({value:_this2.getValue()})},_possibleConstructorReturn(_this2,_temp2)}return _inherits(Consumer,_Component2),Consumer.prototype.componentWillReceiveProps=function componentWillReceiveProps(nextProps){var observedBits=nextProps.observedBits;this.observedBits=null==observedBits?1073741823:observedBits},Consumer.prototype.componentDidMount=function componentDidMount(){this.context[contextProp]&&this.context[contextProp].on(this.onUpdate);var observedBits=this.props.observedBits;this.observedBits=null==observedBits?1073741823:observedBits},Consumer.prototype.componentWillUnmount=function componentWillUnmount(){this.context[contextProp]&&this.context[contextProp].off(this.onUpdate)},Consumer.prototype.getValue=function getValue(){return this.context[contextProp]?this.context[contextProp].get():defaultValue},Consumer.prototype.render=function render(){return function onlyChild(children){return Array.isArray(children)?children[0]:children}(this.props.children)(this.state.value)},Consumer}(_react.Component);return Consumer.contextTypes=((_Consumer$contextType={})[contextProp]=_propTypes2.default.object,_Consumer$contextType),{Provider:Provider,Consumer:Consumer}},module.exports=exports.default},function(module,exports,__webpack_require__){"use strict";var key="__global_unique_id__";module.exports=function(){return global[key]=(global[key]||0)+1}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.patch=void 0;const Utils_1=__webpack_require__(58),Notices_1=__webpack_require__(90),environnement_1=__webpack_require__(116);function getModule(filter){return new Promise(resolve=>{window.Lightcord.Api.ensureExported(filter).then(resolve).catch(err=>{console.error("[LIGHTCORD]",err,filter)})})}exports.patch=function patch(){getModule(e=>e.default&&"ConnectedAppView"===e.default.displayName).then(async mod=>{const appClasses=await getModule(e=>e.hasNotice),buildRender=original=>function render(){const returnValue=original.call(this,...arguments),newchildren=[];let children=returnValue.props.children[1].props.children;return Array.isArray(children)||(children=[children]),newchildren.push(children[0]),newchildren.push(React.createElement(Notices_1.default,{container:this})),newchildren.push(children[1]),returnValue.props.children[1].props.children=newchildren,returnValue.props.children[1].props.children[2].props.children[0].props.render=buildRenderChannelSidebar(returnValue.props.children[1].props.children[2].props.children[0].props.render),returnValue},buildRenderChannelSidebar=original=>function renderChannelSidebar(){const returnValue=original.call(this,...arguments),hasNotice=Notices_1.notices.length>0;return hasNotice?(Utils_1.default.hasClass(returnValue.props.className,appClasses.hasNotice)||(returnValue.props.className+=" "+Utils_1.default.removeDa(appClasses.hasNotice)),returnValue):returnValue};mod.default.prototype.render=buildRender(mod.default.prototype.render),async function(){const base=document.querySelector("."+Utils_1.default.removeDa(appClasses.base));if(!base)throw new Error("Could not find base here");const elem=Utils_1.default.FindReact(base);elem.render=buildRender(elem.render),elem.forceUpdate()}()}),environnement_1.isNative&&(awaitLogin().then(async()=>{let UserPopout=await getModule(e=>e.default&&"FluxContainer(ForwardRef(SubscribeGuildMembersContainer(UserPopout)))"===e.default.displayName);const userModule=await getModule(e=>e.default&&e.default.getCurrentUser),render1=new UserPopout.default({userId:userModule.default.getCurrentUser().id,guildId:null,channelId:null,disableUserProfileLink:!0}).render(),PopoutProps=render1.props,render2=render1.type.render(PopoutProps,null),UserPopoutComponent=new render2.type(render2.props).render().type;if(!UserPopoutComponent)throw new Error("Couldn't find the UserPopoutComponent component.");const render=UserPopoutComponent.prototype.render;UserPopoutComponent.prototype.render=function(){const returnValue=render.call(this,...arguments);try{returnValue.props.children.props["data-user-id"]=this.props.user.id}catch(e){console.error(e)}return returnValue}}),awaitLogin().then(async()=>{let UserProfile=await getModule(e=>e.default&&"UserProfile"===e.default.displayName);const userModule=await getModule(e=>e.default&&e.default.getCurrentUser),render1=new UserProfile.default({user:userModule.default.getCurrentUser()}).render(),render2=new render1.type(render1.props).render(),render3=render2.type.render(render2.props,null),UserProfileComponent=new render3.type(render3.props).render().type;if(!UserProfileComponent)throw new Error("Couldn't find the UserProfileComponent component.");const render=UserProfileComponent.prototype.render;UserProfileComponent.prototype.render=function(){const returnValue=render.call(this,...arguments);console.log(returnValue);try{returnValue.props.children.props["data-user-id"]=this.props.user.id}catch(e){console.error(e)}return returnValue}}))};let loginPromise,hasCompletedLogin=!1;function awaitLogin(){return hasCompletedLogin?Promise.resolve():loginPromise||(loginPromise=new Promise(resolve=>{let isResolved=!1;window.Lightcord.DiscordModules.dispatcher.subscribe("CONNECTION_OPEN",ev=>{isResolved||(hasCompletedLogin=!0,resolve(),isResolved=!0)})}))}window.Lightcord.DiscordModules.dispatcher.subscribe("LOGOUT",ev=>{hasCompletedLogin=!1,loginPromise=void 0})},function(module,exports,__webpack_require__){"use strict";function unfreeze(o){var oo=void 0;if(o instanceof Array){oo=[];o.forEach((function(v){oo.push(v)}))}else if(o instanceof String)oo=new String(o).toString();else if("object"==typeof o)for(var property in oo={},o)oo[property]=o[property];return oo}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=unfreeze,Object.unfreeze=unfreeze},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LazyLoad=void 0;let cache=new Map;exports.LazyLoad=function LazyLoad(getObject){if(cache.has(getObject))return cache.get(getObject);let mdl=null,setModule=()=>{mdl||(mdl=getObject())},handler={get:(target,prop)=>(setModule(),mdl[prop]),set:(target,prop,value)=>(setModule(),mdl[prop]=value,!0),apply(target,thisArg,args){setModule(),mdl.apply(this,args)},construct(target,args){setModule();const prototype=Object.create(mdl.prototype);return handler.apply(target,prototype,args),prototype},deleteProperty:(target,prop)=>(setModule(),prop in mdl&&(delete mdl[prop],!0)),enumerate:target=>(setModule(),Object.keys(mdl)),ownKeys:target=>(setModule(),Object.keys(mdl)),has:(target,prop)=>(setModule(),prop in mdl),defineProperty:(target,prop,attributes)=>(setModule(),Object.defineProperty(mdl,prop,attributes)),getOwnPropertyDescriptor:(target,prop)=>(setModule(),Object.getOwnPropertyDescriptor(mdl,prop)),getPrototypeOf:target=>(setModule(),Object.getPrototypeOf(mdl)),setPrototypeOf(target,proto){setModule();try{return Object.setPrototypeOf(mdl,proto),!0}catch(e){return!1}},isExtensible:target=>(setModule(),Object.isExtensible(mdl)),preventExtensions:target=>(setModule(),Object.preventExtensions(mdl),!0)};const proxy=new Proxy({},handler);return cache.set(getObject,proxy),proxy}},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"add",(function(){return add})),__webpack_require__.d(__webpack_exports__,"addBusinessDays",(function(){return addBusinessDays})),__webpack_require__.d(__webpack_exports__,"addDays",(function(){return addDays.a})),__webpack_require__.d(__webpack_exports__,"addHours",(function(){return addHours.a})),__webpack_require__.d(__webpack_exports__,"addISOWeekYears",(function(){return addISOWeekYears})),__webpack_require__.d(__webpack_exports__,"addMilliseconds",(function(){return addMilliseconds.a})),__webpack_require__.d(__webpack_exports__,"addMinutes",(function(){return addMinutes.a})),__webpack_require__.d(__webpack_exports__,"addMonths",(function(){return addMonths.a})),__webpack_require__.d(__webpack_exports__,"addQuarters",(function(){return addQuarters})),__webpack_require__.d(__webpack_exports__,"addSeconds",(function(){return addSeconds})),__webpack_require__.d(__webpack_exports__,"addWeeks",(function(){return addWeeks.a})),__webpack_require__.d(__webpack_exports__,"addYears",(function(){return addYears.a})),__webpack_require__.d(__webpack_exports__,"areIntervalsOverlapping",(function(){return areIntervalsOverlapping})),__webpack_require__.d(__webpack_exports__,"closestIndexTo",(function(){return closestIndexTo})),__webpack_require__.d(__webpack_exports__,"closestTo",(function(){return closestTo})),__webpack_require__.d(__webpack_exports__,"compareAsc",(function(){return compareAsc})),__webpack_require__.d(__webpack_exports__,"compareDesc",(function(){return compareDesc})),__webpack_require__.d(__webpack_exports__,"differenceInBusinessDays",(function(){return differenceInBusinessDays})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarDays",(function(){return differenceInCalendarDays.a})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarISOWeekYears",(function(){return differenceInCalendarISOWeekYears})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarISOWeeks",(function(){return differenceInCalendarISOWeeks})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarMonths",(function(){return differenceInCalendarMonths.a})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarQuarters",(function(){return differenceInCalendarQuarters})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarWeeks",(function(){return differenceInCalendarWeeks.a})),__webpack_require__.d(__webpack_exports__,"differenceInCalendarYears",(function(){return differenceInCalendarYears.a})),__webpack_require__.d(__webpack_exports__,"differenceInDays",(function(){return differenceInDays})),__webpack_require__.d(__webpack_exports__,"differenceInHours",(function(){return differenceInHours})),__webpack_require__.d(__webpack_exports__,"differenceInISOWeekYears",(function(){return differenceInISOWeekYears})),__webpack_require__.d(__webpack_exports__,"differenceInMilliseconds",(function(){return differenceInMilliseconds})),__webpack_require__.d(__webpack_exports__,"differenceInMinutes",(function(){return differenceInMinutes})),__webpack_require__.d(__webpack_exports__,"differenceInMonths",(function(){return differenceInMonths})),__webpack_require__.d(__webpack_exports__,"differenceInQuarters",(function(){return differenceInQuarters})),__webpack_require__.d(__webpack_exports__,"differenceInSeconds",(function(){return differenceInSeconds})),__webpack_require__.d(__webpack_exports__,"differenceInWeeks",(function(){return differenceInWeeks})),__webpack_require__.d(__webpack_exports__,"differenceInYears",(function(){return differenceInYears})),__webpack_require__.d(__webpack_exports__,"eachDayOfInterval",(function(){return eachDayOfInterval})),__webpack_require__.d(__webpack_exports__,"eachHourOfInterval",(function(){return eachHourOfInterval})),__webpack_require__.d(__webpack_exports__,"eachMonthOfInterval",(function(){return eachMonthOfInterval})),__webpack_require__.d(__webpack_exports__,"eachQuarterOfInterval",(function(){return eachQuarterOfInterval})),__webpack_require__.d(__webpack_exports__,"eachWeekOfInterval",(function(){return eachWeekOfInterval})),__webpack_require__.d(__webpack_exports__,"eachWeekendOfInterval",(function(){return eachWeekendOfInterval})),__webpack_require__.d(__webpack_exports__,"eachWeekendOfMonth",(function(){return eachWeekendOfMonth})),__webpack_require__.d(__webpack_exports__,"eachWeekendOfYear",(function(){return eachWeekendOfYear})),__webpack_require__.d(__webpack_exports__,"eachYearOfInterval",(function(){return eachYearOfInterval})),__webpack_require__.d(__webpack_exports__,"endOfDay",(function(){return endOfDay.a})),__webpack_require__.d(__webpack_exports__,"endOfDecade",(function(){return endOfDecade})),__webpack_require__.d(__webpack_exports__,"endOfHour",(function(){return endOfHour})),__webpack_require__.d(__webpack_exports__,"endOfISOWeek",(function(){return endOfISOWeek})),__webpack_require__.d(__webpack_exports__,"endOfISOWeekYear",(function(){return endOfISOWeekYear})),__webpack_require__.d(__webpack_exports__,"endOfMinute",(function(){return endOfMinute})),__webpack_require__.d(__webpack_exports__,"endOfMonth",(function(){return endOfMonth.a})),__webpack_require__.d(__webpack_exports__,"endOfQuarter",(function(){return endOfQuarter})),__webpack_require__.d(__webpack_exports__,"endOfSecond",(function(){return endOfSecond})),__webpack_require__.d(__webpack_exports__,"endOfToday",(function(){return endOfToday})),__webpack_require__.d(__webpack_exports__,"endOfTomorrow",(function(){return endOfTomorrow})),__webpack_require__.d(__webpack_exports__,"endOfWeek",(function(){return endOfWeek.a})),__webpack_require__.d(__webpack_exports__,"endOfYear",(function(){return endOfYear})),__webpack_require__.d(__webpack_exports__,"endOfYesterday",(function(){return endOfYesterday})),__webpack_require__.d(__webpack_exports__,"format",(function(){return esm_format.a})),__webpack_require__.d(__webpack_exports__,"formatDistance",(function(){return formatDistance})),__webpack_require__.d(__webpack_exports__,"formatDistanceStrict",(function(){return formatDistanceStrict})),__webpack_require__.d(__webpack_exports__,"formatDistanceToNow",(function(){return formatDistanceToNow})),__webpack_require__.d(__webpack_exports__,"formatDistanceToNowStrict",(function(){return formatDistanceToNowStrict})),__webpack_require__.d(__webpack_exports__,"formatDuration",(function(){return formatDuration})),__webpack_require__.d(__webpack_exports__,"formatISO",(function(){return formatISO})),__webpack_require__.d(__webpack_exports__,"formatISO9075",(function(){return formatISO9075})),__webpack_require__.d(__webpack_exports__,"formatISODuration",(function(){return formatISODuration})),__webpack_require__.d(__webpack_exports__,"formatRFC3339",(function(){return formatRFC3339})),__webpack_require__.d(__webpack_exports__,"formatRFC7231",(function(){return formatRFC7231})),__webpack_require__.d(__webpack_exports__,"formatRelative",(function(){return formatRelative})),__webpack_require__.d(__webpack_exports__,"fromUnixTime",(function(){return fromUnixTime})),__webpack_require__.d(__webpack_exports__,"getDate",(function(){return getDate.a})),__webpack_require__.d(__webpack_exports__,"getDay",(function(){return getDay.a})),__webpack_require__.d(__webpack_exports__,"getDayOfYear",(function(){return getDayOfYear})),__webpack_require__.d(__webpack_exports__,"getDaysInMonth",(function(){return getDaysInMonth.a})),__webpack_require__.d(__webpack_exports__,"getDaysInYear",(function(){return getDaysInYear})),__webpack_require__.d(__webpack_exports__,"getDecade",(function(){return getDecade})),__webpack_require__.d(__webpack_exports__,"getHours",(function(){return getHours.a})),__webpack_require__.d(__webpack_exports__,"getISODay",(function(){return getISODay})),__webpack_require__.d(__webpack_exports__,"getISOWeek",(function(){return getISOWeek})),__webpack_require__.d(__webpack_exports__,"getISOWeekYear",(function(){return getISOWeekYear})),__webpack_require__.d(__webpack_exports__,"getISOWeeksInYear",(function(){return getISOWeeksInYear})),__webpack_require__.d(__webpack_exports__,"getMilliseconds",(function(){return getMilliseconds})),__webpack_require__.d(__webpack_exports__,"getMinutes",(function(){return getMinutes.a})),__webpack_require__.d(__webpack_exports__,"getMonth",(function(){return getMonth.a})),__webpack_require__.d(__webpack_exports__,"getOverlappingDaysInIntervals",(function(){return getOverlappingDaysInIntervals})),__webpack_require__.d(__webpack_exports__,"getQuarter",(function(){return getQuarter.a})),__webpack_require__.d(__webpack_exports__,"getSeconds",(function(){return getSeconds.a})),__webpack_require__.d(__webpack_exports__,"getTime",(function(){return getTime.a})),__webpack_require__.d(__webpack_exports__,"getUnixTime",(function(){return getUnixTime})),__webpack_require__.d(__webpack_exports__,"getWeek",(function(){return getWeek.a})),__webpack_require__.d(__webpack_exports__,"getWeekOfMonth",(function(){return getWeekOfMonth})),__webpack_require__.d(__webpack_exports__,"getWeekYear",(function(){return getWeekYear.a})),__webpack_require__.d(__webpack_exports__,"getWeeksInMonth",(function(){return getWeeksInMonth})),__webpack_require__.d(__webpack_exports__,"getYear",(function(){return getYear.a})),__webpack_require__.d(__webpack_exports__,"intervalToDuration",(function(){return intervalToDuration})),__webpack_require__.d(__webpack_exports__,"isAfter",(function(){return isAfter.a})),__webpack_require__.d(__webpack_exports__,"isBefore",(function(){return isBefore.a})),__webpack_require__.d(__webpack_exports__,"isDate",(function(){return isDate.a})),__webpack_require__.d(__webpack_exports__,"isEqual",(function(){return isEqual.a})),__webpack_require__.d(__webpack_exports__,"isExists",(function(){return isExists})),__webpack_require__.d(__webpack_exports__,"isFirstDayOfMonth",(function(){return isFirstDayOfMonth})),__webpack_require__.d(__webpack_exports__,"isFriday",(function(){return isFriday})),__webpack_require__.d(__webpack_exports__,"isFuture",(function(){return isFuture})),__webpack_require__.d(__webpack_exports__,"isLastDayOfMonth",(function(){return isLastDayOfMonth})),__webpack_require__.d(__webpack_exports__,"isLeapYear",(function(){return isLeapYear})),__webpack_require__.d(__webpack_exports__,"isMatch",(function(){return isMatch})),__webpack_require__.d(__webpack_exports__,"isMonday",(function(){return isMonday})),__webpack_require__.d(__webpack_exports__,"isPast",(function(){return isPast})),__webpack_require__.d(__webpack_exports__,"isSameDay",(function(){return isSameDay.a})),__webpack_require__.d(__webpack_exports__,"isSameHour",(function(){return isSameHour})),__webpack_require__.d(__webpack_exports__,"isSameISOWeek",(function(){return isSameISOWeek})),__webpack_require__.d(__webpack_exports__,"isSameISOWeekYear",(function(){return isSameISOWeekYear})),__webpack_require__.d(__webpack_exports__,"isSameMinute",(function(){return isSameMinute})),__webpack_require__.d(__webpack_exports__,"isSameMonth",(function(){return isSameMonth.a})),__webpack_require__.d(__webpack_exports__,"isSameQuarter",(function(){return isSameQuarter.a})),__webpack_require__.d(__webpack_exports__,"isSameSecond",(function(){return isSameSecond})),__webpack_require__.d(__webpack_exports__,"isSameWeek",(function(){return isSameWeek})),__webpack_require__.d(__webpack_exports__,"isSameYear",(function(){return isSameYear.a})),__webpack_require__.d(__webpack_exports__,"isSaturday",(function(){return isSaturday})),__webpack_require__.d(__webpack_exports__,"isSunday",(function(){return isSunday})),__webpack_require__.d(__webpack_exports__,"isThisHour",(function(){return isThisHour})),__webpack_require__.d(__webpack_exports__,"isThisISOWeek",(function(){return isThisISOWeek})),__webpack_require__.d(__webpack_exports__,"isThisMinute",(function(){return isThisMinute})),__webpack_require__.d(__webpack_exports__,"isThisMonth",(function(){return isThisMonth})),__webpack_require__.d(__webpack_exports__,"isThisQuarter",(function(){return isThisQuarter})),__webpack_require__.d(__webpack_exports__,"isThisSecond",(function(){return isThisSecond})),__webpack_require__.d(__webpack_exports__,"isThisWeek",(function(){return isThisWeek})),__webpack_require__.d(__webpack_exports__,"isThisYear",(function(){return isThisYear})),__webpack_require__.d(__webpack_exports__,"isThursday",(function(){return isThursday})),__webpack_require__.d(__webpack_exports__,"isToday",(function(){return isToday})),__webpack_require__.d(__webpack_exports__,"isTomorrow",(function(){return isTomorrow})),__webpack_require__.d(__webpack_exports__,"isTuesday",(function(){return isTuesday})),__webpack_require__.d(__webpack_exports__,"isValid",(function(){return isValid.a})),__webpack_require__.d(__webpack_exports__,"isWednesday",(function(){return isWednesday})),__webpack_require__.d(__webpack_exports__,"isWeekend",(function(){return isWeekend})),__webpack_require__.d(__webpack_exports__,"isWithinInterval",(function(){return isWithinInterval.a})),__webpack_require__.d(__webpack_exports__,"isYesterday",(function(){return isYesterday})),__webpack_require__.d(__webpack_exports__,"lastDayOfDecade",(function(){return lastDayOfDecade})),__webpack_require__.d(__webpack_exports__,"lastDayOfISOWeek",(function(){return lastDayOfISOWeek})),__webpack_require__.d(__webpack_exports__,"lastDayOfISOWeekYear",(function(){return lastDayOfISOWeekYear})),__webpack_require__.d(__webpack_exports__,"lastDayOfMonth",(function(){return lastDayOfMonth})),__webpack_require__.d(__webpack_exports__,"lastDayOfQuarter",(function(){return lastDayOfQuarter})),__webpack_require__.d(__webpack_exports__,"lastDayOfWeek",(function(){return lastDayOfWeek})),__webpack_require__.d(__webpack_exports__,"lastDayOfYear",(function(){return lastDayOfYear})),__webpack_require__.d(__webpack_exports__,"lightFormat",(function(){return lightFormat})),__webpack_require__.d(__webpack_exports__,"max",(function(){return max.a})),__webpack_require__.d(__webpack_exports__,"min",(function(){return min.a})),__webpack_require__.d(__webpack_exports__,"parse",(function(){return parse.a})),__webpack_require__.d(__webpack_exports__,"parseISO",(function(){return parseISO.a})),__webpack_require__.d(__webpack_exports__,"parseJSON",(function(){return parseJSON})),__webpack_require__.d(__webpack_exports__,"roundToNearestMinutes",(function(){return roundToNearestMinutes})),__webpack_require__.d(__webpack_exports__,"set",(function(){return set})),__webpack_require__.d(__webpack_exports__,"setDate",(function(){return setDate})),__webpack_require__.d(__webpack_exports__,"setDay",(function(){return setDay})),__webpack_require__.d(__webpack_exports__,"setDayOfYear",(function(){return setDayOfYear})),__webpack_require__.d(__webpack_exports__,"setHours",(function(){return setHours.a})),__webpack_require__.d(__webpack_exports__,"setISODay",(function(){return setISODay})),__webpack_require__.d(__webpack_exports__,"setISOWeek",(function(){return setISOWeek})),__webpack_require__.d(__webpack_exports__,"setISOWeekYear",(function(){return setISOWeekYear})),__webpack_require__.d(__webpack_exports__,"setMilliseconds",(function(){return setMilliseconds})),__webpack_require__.d(__webpack_exports__,"setMinutes",(function(){return setMinutes.a})),__webpack_require__.d(__webpack_exports__,"setMonth",(function(){return setMonth.a})),__webpack_require__.d(__webpack_exports__,"setQuarter",(function(){return setQuarter.a})),__webpack_require__.d(__webpack_exports__,"setSeconds",(function(){return setSeconds.a})),__webpack_require__.d(__webpack_exports__,"setWeek",(function(){return setWeek})),__webpack_require__.d(__webpack_exports__,"setWeekYear",(function(){return setWeekYear})),__webpack_require__.d(__webpack_exports__,"setYear",(function(){return setYear.a})),__webpack_require__.d(__webpack_exports__,"startOfDay",(function(){return startOfDay.a})),__webpack_require__.d(__webpack_exports__,"startOfDecade",(function(){return startOfDecade})),__webpack_require__.d(__webpack_exports__,"startOfHour",(function(){return startOfHour})),__webpack_require__.d(__webpack_exports__,"startOfISOWeek",(function(){return startOfISOWeek})),__webpack_require__.d(__webpack_exports__,"startOfISOWeekYear",(function(){return startOfISOWeekYear})),__webpack_require__.d(__webpack_exports__,"startOfMinute",(function(){return startOfMinute})),__webpack_require__.d(__webpack_exports__,"startOfMonth",(function(){return startOfMonth.a})),__webpack_require__.d(__webpack_exports__,"startOfQuarter",(function(){return startOfQuarter.a})),__webpack_require__.d(__webpack_exports__,"startOfSecond",(function(){return startOfSecond})),__webpack_require__.d(__webpack_exports__,"startOfToday",(function(){return startOfToday})),__webpack_require__.d(__webpack_exports__,"startOfTomorrow",(function(){return startOfTomorrow})),__webpack_require__.d(__webpack_exports__,"startOfWeek",(function(){return startOfWeek.a})),__webpack_require__.d(__webpack_exports__,"startOfWeekYear",(function(){return startOfWeekYear.a})),__webpack_require__.d(__webpack_exports__,"startOfYear",(function(){return startOfYear.a})),__webpack_require__.d(__webpack_exports__,"startOfYesterday",(function(){return startOfYesterday})),__webpack_require__.d(__webpack_exports__,"sub",(function(){return sub})),__webpack_require__.d(__webpack_exports__,"subBusinessDays",(function(){return subBusinessDays})),__webpack_require__.d(__webpack_exports__,"subDays",(function(){return subDays.a})),__webpack_require__.d(__webpack_exports__,"subHours",(function(){return subHours.a})),__webpack_require__.d(__webpack_exports__,"subISOWeekYears",(function(){return subISOWeekYears})),__webpack_require__.d(__webpack_exports__,"subMilliseconds",(function(){return subMilliseconds.a})),__webpack_require__.d(__webpack_exports__,"subMinutes",(function(){return subMinutes.a})),__webpack_require__.d(__webpack_exports__,"subMonths",(function(){return subMonths.a})),__webpack_require__.d(__webpack_exports__,"subQuarters",(function(){return subQuarters})),__webpack_require__.d(__webpack_exports__,"subSeconds",(function(){return subSeconds})),__webpack_require__.d(__webpack_exports__,"subWeeks",(function(){return subWeeks.a})),__webpack_require__.d(__webpack_exports__,"subYears",(function(){return subYears.a})),__webpack_require__.d(__webpack_exports__,"toDate",(function(){return toDate.a})),__webpack_require__.d(__webpack_exports__,"maxTime",(function(){return maxTime})),__webpack_require__.d(__webpack_exports__,"minTime",(function(){return minTime}));var addDays=__webpack_require__(9),addMonths=__webpack_require__(14),toDate=__webpack_require__(1),requiredArgs=__webpack_require__(0),toInteger=__webpack_require__(2);function add(dirtyDate,duration){if(Object(requiredArgs.a)(2,arguments),!duration||"object"!=typeof duration)return new Date(NaN);var years="years"in duration?Object(toInteger.a)(duration.years):0,months="months"in duration?Object(toInteger.a)(duration.months):0,weeks="weeks"in duration?Object(toInteger.a)(duration.weeks):0,days="days"in duration?Object(toInteger.a)(duration.days):0,hours="hours"in duration?Object(toInteger.a)(duration.hours):0,minutes="minutes"in duration?Object(toInteger.a)(duration.minutes):0,seconds="seconds"in duration?Object(toInteger.a)(duration.seconds):0,date=Object(toDate.a)(dirtyDate),dateWithMonths=months||years?Object(addMonths.a)(date,months+12*years):date,dateWithDays=days||weeks?Object(addDays.a)(dateWithMonths,days+7*weeks):dateWithMonths,minutesToAdd=minutes+60*hours,secondsToAdd=seconds+60*minutesToAdd,msToAdd=1e3*secondsToAdd,finalDate=new Date(dateWithDays.getTime()+msToAdd);return finalDate}function isWeekend(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),day=date.getDay();return 0===day||6===day}function isSunday(dirtyDate){return Object(requiredArgs.a)(1,arguments),0===Object(toDate.a)(dirtyDate).getDay()}function isSaturday(dirtyDate){return Object(requiredArgs.a)(1,arguments),6===Object(toDate.a)(dirtyDate).getDay()}function addBusinessDays(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),startedOnWeekend=isWeekend(date),amount=Object(toInteger.a)(dirtyAmount);if(isNaN(amount))return new Date(NaN);var hours=date.getHours(),sign=amount<0?-1:1,fullWeeks=Object(toInteger.a)(amount/5);date.setDate(date.getDate()+7*fullWeeks);for(var restDays=Math.abs(amount%5);restDays>0;)date.setDate(date.getDate()+sign),isWeekend(date)||(restDays-=1);return startedOnWeekend&&isWeekend(date)&&0!==amount&&(isSaturday(date)&&date.setDate(date.getDate()+(sign<0?2:-1)),isSunday(date)&&date.setDate(date.getDate()+(sign<0?1:-2))),date.setHours(hours),date}var addHours=__webpack_require__(43),startOfWeek=__webpack_require__(8);function startOfISOWeek(dirtyDate){return Object(requiredArgs.a)(1,arguments),Object(startOfWeek.a)(dirtyDate,{weekStartsOn:1})}function getISOWeekYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear(),fourthOfJanuaryOfNextYear=new Date(0);fourthOfJanuaryOfNextYear.setFullYear(year+1,0,4),fourthOfJanuaryOfNextYear.setHours(0,0,0,0);var startOfNextYear=startOfISOWeek(fourthOfJanuaryOfNextYear),fourthOfJanuaryOfThisYear=new Date(0);fourthOfJanuaryOfThisYear.setFullYear(year,0,4),fourthOfJanuaryOfThisYear.setHours(0,0,0,0);var startOfThisYear=startOfISOWeek(fourthOfJanuaryOfThisYear);return date.getTime()>=startOfNextYear.getTime()?year+1:date.getTime()>=startOfThisYear.getTime()?year:year-1}function startOfISOWeekYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var year=getISOWeekYear(dirtyDate),fourthOfJanuary=new Date(0);fourthOfJanuary.setFullYear(year,0,4),fourthOfJanuary.setHours(0,0,0,0);var date=startOfISOWeek(fourthOfJanuary);return date}var differenceInCalendarDays=__webpack_require__(13);function setISOWeekYear(dirtyDate,dirtyISOWeekYear){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),isoWeekYear=Object(toInteger.a)(dirtyISOWeekYear),diff=Object(differenceInCalendarDays.a)(date,startOfISOWeekYear(date)),fourthOfJanuary=new Date(0);return fourthOfJanuary.setFullYear(isoWeekYear,0,4),fourthOfJanuary.setHours(0,0,0,0),(date=startOfISOWeekYear(fourthOfJanuary)).setDate(date.getDate()+diff),date}function addISOWeekYears(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return setISOWeekYear(dirtyDate,getISOWeekYear(dirtyDate)+amount)}var addMilliseconds=__webpack_require__(29),addMinutes=__webpack_require__(45);function addQuarters(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount),months=3*amount;return Object(addMonths.a)(dirtyDate,months)}function addSeconds(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return Object(addMilliseconds.a)(dirtyDate,1e3*amount)}var addWeeks=__webpack_require__(26),addYears=__webpack_require__(37);function areIntervalsOverlapping(dirtyIntervalLeft,dirtyIntervalRight){var options=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Object(requiredArgs.a)(2,arguments);var intervalLeft=dirtyIntervalLeft||{},intervalRight=dirtyIntervalRight||{},leftStartTime=Object(toDate.a)(intervalLeft.start).getTime(),leftEndTime=Object(toDate.a)(intervalLeft.end).getTime(),rightStartTime=Object(toDate.a)(intervalRight.start).getTime(),rightEndTime=Object(toDate.a)(intervalRight.end).getTime();if(!(leftStartTime<=leftEndTime&&rightStartTime<=rightEndTime))throw new RangeError("Invalid interval");return options.inclusive?leftStartTime<=rightEndTime&&rightStartTime<=leftEndTime:leftStartTime0?1:diff}function compareDesc(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),diff=dateLeft.getTime()-dateRight.getTime();return diff>0?-1:diff<0?1:diff}var isValid=__webpack_require__(6),isSameDay=__webpack_require__(21);function differenceInBusinessDays(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight);if(!Object(isValid.a)(dateLeft)||!Object(isValid.a)(dateRight))return new Date(NaN);var calendarDifference=Object(differenceInCalendarDays.a)(dateLeft,dateRight),sign=calendarDifference<0?-1:1,weeks=Object(toInteger.a)(calendarDifference/7),result=5*weeks;for(dateRight=Object(addDays.a)(dateRight,7*weeks);!Object(isSameDay.a)(dateLeft,dateRight);)result+=isWeekend(dateRight)?0:sign,dateRight=Object(addDays.a)(dateRight,sign);return 0===result?0:result}function differenceInCalendarISOWeekYears(dirtyDateLeft,dirtyDateRight){return Object(requiredArgs.a)(2,arguments),getISOWeekYear(dirtyDateLeft)-getISOWeekYear(dirtyDateRight)}var getTimezoneOffsetInMilliseconds=__webpack_require__(7);function differenceInCalendarISOWeeks(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var startOfISOWeekLeft=startOfISOWeek(dirtyDateLeft),startOfISOWeekRight=startOfISOWeek(dirtyDateRight),timestampLeft=startOfISOWeekLeft.getTime()-Object(getTimezoneOffsetInMilliseconds.a)(startOfISOWeekLeft),timestampRight=startOfISOWeekRight.getTime()-Object(getTimezoneOffsetInMilliseconds.a)(startOfISOWeekRight);return Math.round((timestampLeft-timestampRight)/6048e5)}var differenceInCalendarMonths=__webpack_require__(36),getQuarter=__webpack_require__(34);function differenceInCalendarQuarters(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),yearDiff=dateLeft.getFullYear()-dateRight.getFullYear(),quarterDiff=Object(getQuarter.a)(dateLeft)-Object(getQuarter.a)(dateRight);return 4*yearDiff+quarterDiff}var differenceInCalendarWeeks=__webpack_require__(67),differenceInCalendarYears=__webpack_require__(38);function compareLocalAsc(dateLeft,dateRight){var diff=dateLeft.getFullYear()-dateRight.getFullYear()||dateLeft.getMonth()-dateRight.getMonth()||dateLeft.getDate()-dateRight.getDate()||dateLeft.getHours()-dateRight.getHours()||dateLeft.getMinutes()-dateRight.getMinutes()||dateLeft.getSeconds()-dateRight.getSeconds()||dateLeft.getMilliseconds()-dateRight.getMilliseconds();return diff<0?-1:diff>0?1:diff}function differenceInDays(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareLocalAsc(dateLeft,dateRight),difference=Math.abs(Object(differenceInCalendarDays.a)(dateLeft,dateRight));dateLeft.setDate(dateLeft.getDate()-sign*difference);var isLastDayNotFull=compareLocalAsc(dateLeft,dateRight)===-sign,result=sign*(difference-isLastDayNotFull);return 0===result?0:result}function differenceInMilliseconds(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight);return dateLeft.getTime()-dateRight.getTime()}function differenceInHours(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMilliseconds(dirtyDateLeft,dirtyDateRight)/36e5;return diff>0?Math.floor(diff):Math.ceil(diff)}function subISOWeekYears(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addISOWeekYears(dirtyDate,-amount)}function differenceInISOWeekYears(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareAsc(dateLeft,dateRight),difference=Math.abs(differenceInCalendarISOWeekYears(dateLeft,dateRight)),isLastISOWeekYearNotFull=compareAsc(dateLeft=subISOWeekYears(dateLeft,sign*difference),dateRight)===-sign,result=sign*(difference-isLastISOWeekYearNotFull);return 0===result?0:result}function differenceInMinutes(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMilliseconds(dirtyDateLeft,dirtyDateRight)/6e4;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInMonths(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareAsc(dateLeft,dateRight),difference=Math.abs(Object(differenceInCalendarMonths.a)(dateLeft,dateRight));dateLeft.setMonth(dateLeft.getMonth()-sign*difference);var isLastMonthNotFull=compareAsc(dateLeft,dateRight)===-sign,result=sign*(difference-isLastMonthNotFull);return 0===result?0:result}function differenceInQuarters(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMonths(dirtyDateLeft,dirtyDateRight)/3;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInSeconds(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInMilliseconds(dirtyDateLeft,dirtyDateRight)/1e3;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInWeeks(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var diff=differenceInDays(dirtyDateLeft,dirtyDateRight)/7;return diff>0?Math.floor(diff):Math.ceil(diff)}function differenceInYears(dirtyDateLeft,dirtyDateRight){Object(requiredArgs.a)(2,arguments);var dateLeft=Object(toDate.a)(dirtyDateLeft),dateRight=Object(toDate.a)(dirtyDateRight),sign=compareAsc(dateLeft,dateRight),difference=Math.abs(Object(differenceInCalendarYears.a)(dateLeft,dateRight));dateLeft.setFullYear("1584"),dateRight.setFullYear("1584");var isLastYearNotFull=compareAsc(dateLeft,dateRight)===-sign,result=sign*(difference-isLastYearNotFull);return 0===result?0:result}function eachDayOfInterval(dirtyInterval,options){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var dates=[],currentDate=startDate;currentDate.setHours(0,0,0,0);var step=options&&"step"in options?Number(options.step):1;if(step<1||isNaN(step))throw new RangeError("`options.step` must be a number greater than 1");for(;currentDate.getTime()<=endTime;)dates.push(Object(toDate.a)(currentDate)),currentDate.setDate(currentDate.getDate()+step),currentDate.setHours(0,0,0,0);return dates}function eachHourOfInterval(dirtyInterval,options){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),startTime=startDate.getTime(),endTime=endDate.getTime();if(!(startTime<=endTime))throw new RangeError("Invalid interval");var dates=[],currentDate=startDate;currentDate.setMinutes(0,0,0);var step=options&&"step"in options?Number(options.step):1;if(step<1||isNaN(step))throw new RangeError("`options.step` must be a number greater than 1");for(;currentDate.getTime()<=endTime;)dates.push(Object(toDate.a)(currentDate)),currentDate=Object(addHours.a)(currentDate,step);return dates}function eachMonthOfInterval(dirtyInterval){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var dates=[],currentDate=startDate;for(currentDate.setHours(0,0,0,0),currentDate.setDate(1);currentDate.getTime()<=endTime;)dates.push(Object(toDate.a)(currentDate)),currentDate.setMonth(currentDate.getMonth()+1);return dates}var startOfQuarter=__webpack_require__(31);function eachQuarterOfInterval(dirtyInterval){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var startDateQuarter=Object(startOfQuarter.a)(startDate),endDateQuarter=Object(startOfQuarter.a)(endDate);endTime=endDateQuarter.getTime();for(var quarters=[],currentQuarter=startDateQuarter;currentQuarter.getTime()<=endTime;)quarters.push(Object(toDate.a)(currentQuarter)),currentQuarter=addQuarters(currentQuarter,1);return quarters}function eachWeekOfInterval(dirtyInterval,options){Object(requiredArgs.a)(1,arguments);var interval=dirtyInterval||{},startDate=Object(toDate.a)(interval.start),endDate=Object(toDate.a)(interval.end),endTime=endDate.getTime();if(!(startDate.getTime()<=endTime))throw new RangeError("Invalid interval");var startDateWeek=Object(startOfWeek.a)(startDate,options),endDateWeek=Object(startOfWeek.a)(endDate,options);startDateWeek.setHours(15),endDateWeek.setHours(15),endTime=endDateWeek.getTime();for(var weeks=[],currentWeek=startDateWeek;currentWeek.getTime()<=endTime;)currentWeek.setHours(0),weeks.push(Object(toDate.a)(currentWeek)),(currentWeek=Object(addWeeks.a)(currentWeek,1)).setHours(15);return weeks}function eachWeekendOfInterval(interval){Object(requiredArgs.a)(1,arguments);for(var dateInterval=eachDayOfInterval(interval),weekends=[],index=0;index0?(dateLeft=Object(toDate.a)(dirtyBaseDate),dateRight=Object(toDate.a)(dirtyDate)):(dateLeft=Object(toDate.a)(dirtyDate),dateRight=Object(toDate.a)(dirtyBaseDate));var months,seconds=differenceInSeconds(dateRight,dateLeft),offsetInSeconds=(Object(getTimezoneOffsetInMilliseconds.a)(dateRight)-Object(getTimezoneOffsetInMilliseconds.a)(dateLeft))/1e3,minutes=Math.round((seconds-offsetInSeconds)/60);if(minutes<2)return options.includeSeconds?seconds<5?locale.formatDistance("lessThanXSeconds",5,localizeOptions):seconds<10?locale.formatDistance("lessThanXSeconds",10,localizeOptions):seconds<20?locale.formatDistance("lessThanXSeconds",20,localizeOptions):seconds<40?locale.formatDistance("halfAMinute",null,localizeOptions):seconds<60?locale.formatDistance("lessThanXMinutes",1,localizeOptions):locale.formatDistance("xMinutes",1,localizeOptions):0===minutes?locale.formatDistance("lessThanXMinutes",1,localizeOptions):locale.formatDistance("xMinutes",minutes,localizeOptions);if(minutes<45)return locale.formatDistance("xMinutes",minutes,localizeOptions);if(minutes<90)return locale.formatDistance("aboutXHours",1,localizeOptions);if(minutes<1440){var hours=Math.round(minutes/60);return locale.formatDistance("aboutXHours",hours,localizeOptions)}if(minutes<2520)return locale.formatDistance("xDays",1,localizeOptions);if(minutes<43200){var days=Math.round(minutes/1440);return locale.formatDistance("xDays",days,localizeOptions)}if(minutes<86400)return months=Math.round(minutes/43200),locale.formatDistance("aboutXMonths",months,localizeOptions);if((months=differenceInMonths(dateRight,dateLeft))<12){var nearestMonth=Math.round(minutes/43200);return locale.formatDistance("xMonths",nearestMonth,localizeOptions)}var monthsSinceStartOfYear=months%12,years=Math.floor(months/12);return monthsSinceStartOfYear<3?locale.formatDistance("aboutXYears",years,localizeOptions):monthsSinceStartOfYear<9?locale.formatDistance("overXYears",years,localizeOptions):locale.formatDistance("almostXYears",years+1,localizeOptions)}function formatDistanceStrict(dirtyDate,dirtyBaseDate,dirtyOptions){Object(requiredArgs.a)(2,arguments);var options=dirtyOptions||{},locale=options.locale||en_US.a;if(!locale.formatDistance)throw new RangeError("locale must contain localize.formatDistance property");var comparison=compareAsc(dirtyDate,dirtyBaseDate);if(isNaN(comparison))throw new RangeError("Invalid time value");var dateLeft,dateRight,localizeOptions=cloneObject(options);localizeOptions.addSuffix=Boolean(options.addSuffix),localizeOptions.comparison=comparison,comparison>0?(dateLeft=Object(toDate.a)(dirtyBaseDate),dateRight=Object(toDate.a)(dirtyDate)):(dateLeft=Object(toDate.a)(dirtyDate),dateRight=Object(toDate.a)(dirtyBaseDate));var roundingMethodFn,roundingMethod=null==options.roundingMethod?"round":String(options.roundingMethod);if("floor"===roundingMethod)roundingMethodFn=Math.floor;else if("ceil"===roundingMethod)roundingMethodFn=Math.ceil;else{if("round"!==roundingMethod)throw new RangeError("roundingMethod must be 'floor', 'ceil' or 'round'");roundingMethodFn=Math.round}var unit,seconds=differenceInSeconds(dateRight,dateLeft),offsetInSeconds=(Object(getTimezoneOffsetInMilliseconds.a)(dateRight)-Object(getTimezoneOffsetInMilliseconds.a)(dateLeft))/1e3,minutes=roundingMethodFn((seconds-offsetInSeconds)/60);if("second"===(unit=null==options.unit?minutes<1?"second":minutes<60?"minute":minutes<1440?"hour":minutes<43200?"day":minutes<525600?"month":"year":String(options.unit)))return locale.formatDistance("xSeconds",seconds,localizeOptions);if("minute"===unit)return locale.formatDistance("xMinutes",minutes,localizeOptions);if("hour"===unit){var hours=roundingMethodFn(minutes/60);return locale.formatDistance("xHours",hours,localizeOptions)}if("day"===unit){var days=roundingMethodFn(minutes/1440);return locale.formatDistance("xDays",days,localizeOptions)}if("month"===unit){var months=roundingMethodFn(minutes/43200);return locale.formatDistance("xMonths",months,localizeOptions)}if("year"===unit){var years=roundingMethodFn(minutes/525600);return locale.formatDistance("xYears",years,localizeOptions)}throw new RangeError("unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'")}function formatDistanceToNow(dirtyDate,dirtyOptions){return Object(requiredArgs.a)(1,arguments),formatDistance(dirtyDate,Date.now(),dirtyOptions)}function formatDistanceToNowStrict(dirtyDate,dirtyOptions){return Object(requiredArgs.a)(1,arguments),formatDistanceStrict(dirtyDate,Date.now(),dirtyOptions)}var defaultFormat=["years","months","weeks","days","hours","minutes","seconds"];function formatDuration(duration){var options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(arguments.length<1)throw new TypeError("1 argument required, but only ".concat(arguments.length," present"));var format=options.format||defaultFormat,locale=options.locale||en_US.a,zero=options.zero||!1,delimiter=options.delimiter||" ",result=format.reduce((function(acc,unit){var token="x".concat(unit.replace(/(^.)/,(function(m){return m.toUpperCase()})));return"number"==typeof duration[unit]&&(zero||duration[unit])?acc.concat(locale.formatDistance(token,duration[unit])):acc}),[]).join(delimiter);return result}var addLeadingZeros=__webpack_require__(4);function formatISO(dirtyDate,dirtyOptions){if(arguments.length<1)throw new TypeError("1 argument required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var options=dirtyOptions||{},format=null==options.format?"extended":String(options.format),representation=null==options.representation?"complete":String(options.representation);if("extended"!==format&&"basic"!==format)throw new RangeError("format must be 'extended' or 'basic'");if("date"!==representation&&"time"!==representation&&"complete"!==representation)throw new RangeError("representation must be 'date', 'time', or 'complete'");var result="",tzOffset="",dateDelimiter="extended"===format?"-":"",timeDelimiter="extended"===format?":":"";if("time"!==representation){var day=Object(addLeadingZeros.a)(originalDate.getDate(),2),month=Object(addLeadingZeros.a)(originalDate.getMonth()+1,2),year=Object(addLeadingZeros.a)(originalDate.getFullYear(),4);result="".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day)}if("date"!==representation){var offset=originalDate.getTimezoneOffset();if(0!==offset){var absoluteOffset=Math.abs(offset),hourOffset=Object(addLeadingZeros.a)(Math.floor(absoluteOffset/60),2),minuteOffset=Object(addLeadingZeros.a)(absoluteOffset%60,2),sign=offset<0?"+":"-";tzOffset="".concat(sign).concat(hourOffset,":").concat(minuteOffset)}else tzOffset="Z";var hour=Object(addLeadingZeros.a)(originalDate.getHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getSeconds(),2),separator=""===result?"":"T",time=[hour,minute,second].join(timeDelimiter);result="".concat(result).concat(separator).concat(time).concat(tzOffset)}return result}function formatISO9075(dirtyDate,dirtyOptions){if(arguments.length<1)throw new TypeError("1 argument required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var options=dirtyOptions||{},format=null==options.format?"extended":String(options.format),representation=null==options.representation?"complete":String(options.representation);if("extended"!==format&&"basic"!==format)throw new RangeError("format must be 'extended' or 'basic'");if("date"!==representation&&"time"!==representation&&"complete"!==representation)throw new RangeError("representation must be 'date', 'time', or 'complete'");var result="",dateDelimiter="extended"===format?"-":"",timeDelimiter="extended"===format?":":"";if("time"!==representation){var day=Object(addLeadingZeros.a)(originalDate.getDate(),2),month=Object(addLeadingZeros.a)(originalDate.getMonth()+1,2),year=Object(addLeadingZeros.a)(originalDate.getFullYear(),4);result="".concat(year).concat(dateDelimiter).concat(month).concat(dateDelimiter).concat(day)}if("date"!==representation){var hour=Object(addLeadingZeros.a)(originalDate.getHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getSeconds(),2),separator=""===result?"":" ";result="".concat(result).concat(separator).concat(hour).concat(timeDelimiter).concat(minute).concat(timeDelimiter).concat(second)}return result}function formatISODuration(duration){if(Object(requiredArgs.a)(1,arguments),"object"!=typeof duration)throw new Error("Duration must be an object");var _duration$years=duration.years,years=void 0===_duration$years?0:_duration$years,_duration$months=duration.months,months=void 0===_duration$months?0:_duration$months,_duration$days=duration.days,days=void 0===_duration$days?0:_duration$days,_duration$hours=duration.hours,hours=void 0===_duration$hours?0:_duration$hours,_duration$minutes=duration.minutes,minutes=void 0===_duration$minutes?0:_duration$minutes,_duration$seconds=duration.seconds,seconds=void 0===_duration$seconds?0:_duration$seconds;return"P".concat(years,"Y").concat(months,"M").concat(days,"DT").concat(hours,"H").concat(minutes,"M").concat(seconds,"S")}function formatRFC3339(dirtyDate,dirtyOptions){if(arguments.length<1)throw new TypeError("1 arguments required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var options=dirtyOptions||{},fractionDigits=null==options.fractionDigits?0:Object(toInteger.a)(options.fractionDigits);if(!(fractionDigits>=0&&fractionDigits<=3))throw new RangeError("fractionDigits must be between 0 and 3 inclusively");var day=Object(addLeadingZeros.a)(originalDate.getDate(),2),month=Object(addLeadingZeros.a)(originalDate.getMonth()+1,2),year=originalDate.getFullYear(),hour=Object(addLeadingZeros.a)(originalDate.getHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getSeconds(),2),fractionalSecond="";if(fractionDigits>0){var milliseconds=originalDate.getMilliseconds(),fractionalSeconds=Math.floor(milliseconds*Math.pow(10,fractionDigits-3));fractionalSecond="."+Object(addLeadingZeros.a)(fractionalSeconds,fractionDigits)}var offset="",tzOffset=originalDate.getTimezoneOffset();if(0!==tzOffset){var absoluteOffset=Math.abs(tzOffset),hourOffset=Object(addLeadingZeros.a)(absoluteOffset/60,2),minuteOffset=Object(addLeadingZeros.a)(absoluteOffset%60,2),sign=tzOffset<0?"+":"-";offset="".concat(sign).concat(hourOffset,":").concat(minuteOffset)}else offset="Z";return"".concat(year,"-").concat(month,"-").concat(day,"T").concat(hour,":").concat(minute,":").concat(second).concat(fractionalSecond).concat(offset)}var formatRFC7231_days=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],formatRFC7231_months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function formatRFC7231(dirtyDate){if(arguments.length<1)throw new TypeError("1 arguments required, but only ".concat(arguments.length," present"));var originalDate=Object(toDate.a)(dirtyDate);if(!Object(isValid.a)(originalDate))throw new RangeError("Invalid time value");var dayName=formatRFC7231_days[originalDate.getUTCDay()],dayOfMonth=Object(addLeadingZeros.a)(originalDate.getUTCDate(),2),monthName=formatRFC7231_months[originalDate.getUTCMonth()],year=originalDate.getUTCFullYear(),hour=Object(addLeadingZeros.a)(originalDate.getUTCHours(),2),minute=Object(addLeadingZeros.a)(originalDate.getUTCMinutes(),2),second=Object(addLeadingZeros.a)(originalDate.getUTCSeconds(),2);return"".concat(dayName,", ").concat(dayOfMonth," ").concat(monthName," ").concat(year," ").concat(hour,":").concat(minute,":").concat(second," GMT")}var subMilliseconds=__webpack_require__(25);function formatRelative(dirtyDate,dirtyBaseDate,dirtyOptions){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),baseDate=Object(toDate.a)(dirtyBaseDate),options=dirtyOptions||{},locale=options.locale||en_US.a;if(!locale.localize)throw new RangeError("locale must contain localize property");if(!locale.formatLong)throw new RangeError("locale must contain formatLong property");if(!locale.formatRelative)throw new RangeError("locale must contain formatRelative property");var token,diff=Object(differenceInCalendarDays.a)(date,baseDate);if(isNaN(diff))throw new RangeError("Invalid time value");token=diff<-6?"other":diff<-1?"lastWeek":diff<0?"yesterday":diff<1?"today":diff<2?"tomorrow":diff<7?"nextWeek":"other";var utcDate=Object(subMilliseconds.a)(date,Object(getTimezoneOffsetInMilliseconds.a)(date)),utcBaseDate=Object(subMilliseconds.a)(baseDate,Object(getTimezoneOffsetInMilliseconds.a)(baseDate)),formatStr=locale.formatRelative(token,utcDate,utcBaseDate,options);return Object(esm_format.a)(date,formatStr,options)}function fromUnixTime(dirtyUnixTime){Object(requiredArgs.a)(1,arguments);var unixTime=Object(toInteger.a)(dirtyUnixTime);return Object(toDate.a)(1e3*unixTime)}var getDate=__webpack_require__(52),getDay=__webpack_require__(63);function getDayOfYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=Object(differenceInCalendarDays.a)(date,Object(startOfYear.a)(date)),dayOfYear=diff+1;return dayOfYear}var getDaysInMonth=__webpack_require__(78);function isLeapYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear();return year%400==0||year%4==0&&year%100!=0}function getDaysInYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate);return isNaN(date)?NaN:isLeapYear(date)?366:365}function getDecade(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear(),decade=10*Math.floor(year/10);return decade}var getHours=__webpack_require__(15);function getISODay(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),day=date.getDay();return 0===day&&(day=7),day}function getISOWeek(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),diff=startOfISOWeek(date).getTime()-startOfISOWeekYear(date).getTime();return Math.round(diff/6048e5)+1}function getISOWeeksInYear(dirtyDate){Object(requiredArgs.a)(1,arguments);var thisYear=startOfISOWeekYear(dirtyDate),nextYear=startOfISOWeekYear(Object(addWeeks.a)(thisYear,60)),diff=nextYear.valueOf()-thisYear.valueOf();return Math.round(diff/6048e5)}function getMilliseconds(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),milliseconds=date.getMilliseconds();return milliseconds}var getMinutes=__webpack_require__(17),getMonth=__webpack_require__(24);function getOverlappingDaysInIntervals(dirtyIntervalLeft,dirtyIntervalRight){Object(requiredArgs.a)(2,arguments);var intervalLeft=dirtyIntervalLeft||{},intervalRight=dirtyIntervalRight||{},leftStartTime=Object(toDate.a)(intervalLeft.start).getTime(),leftEndTime=Object(toDate.a)(intervalLeft.end).getTime(),rightStartTime=Object(toDate.a)(intervalRight.start).getTime(),rightEndTime=Object(toDate.a)(intervalRight.end).getTime();if(!(leftStartTime<=leftEndTime&&rightStartTime<=rightEndTime))throw new RangeError("Invalid interval");var isOverlapping=leftStartTimeleftEndTime?leftEndTime:rightEndTime,differenceInMs=overlapEndDate-overlapStartDate;return Math.ceil(differenceInMs/864e5)}var getSeconds=__webpack_require__(79),getTime=__webpack_require__(46);function getUnixTime(dirtyDate){return Object(requiredArgs.a)(1,arguments),Math.floor(Object(getTime.a)(dirtyDate)/1e3)}var getWeek=__webpack_require__(59);function getWeekOfMonth(date,dirtyOptions){Object(requiredArgs.a)(1,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var currentDayOfMonth=Object(getDate.a)(date);if(isNaN(currentDayOfMonth))return currentDayOfMonth;var startWeekDay=Object(getDay.a)(Object(startOfMonth.a)(date)),lastDayOfFirstWeek=0,weekNumber=1;if(currentDayOfMonth>(lastDayOfFirstWeek=startWeekDay>=weekStartsOn?weekStartsOn+7-startWeekDay:weekStartsOn-startWeekDay)){var remainingDaysAfterFirstWeek=currentDayOfMonth-lastDayOfFirstWeek;weekNumber+=Math.ceil(remainingDaysAfterFirstWeek/7)}return weekNumber}var getWeekYear=__webpack_require__(76);function lastDayOfMonth(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),month=date.getMonth();return date.setFullYear(date.getFullYear(),month+1,0),date.setHours(0,0,0,0),date}function getWeeksInMonth(date,options){return Object(requiredArgs.a)(1,arguments),Object(differenceInCalendarWeeks.a)(lastDayOfMonth(date),Object(startOfMonth.a)(date),options)+1}var getYear=__webpack_require__(5),subDays=__webpack_require__(44),subMonths=__webpack_require__(35);function sub(dirtyDate,duration){if(Object(requiredArgs.a)(2,arguments),!duration||"object"!=typeof duration)return new Date(NaN);var years="years"in duration?Object(toInteger.a)(duration.years):0,months="months"in duration?Object(toInteger.a)(duration.months):0,weeks="weeks"in duration?Object(toInteger.a)(duration.weeks):0,days="days"in duration?Object(toInteger.a)(duration.days):0,hours="hours"in duration?Object(toInteger.a)(duration.hours):0,minutes="minutes"in duration?Object(toInteger.a)(duration.minutes):0,seconds="seconds"in duration?Object(toInteger.a)(duration.seconds):0,dateWithoutMonths=Object(subMonths.a)(Object(toDate.a)(dirtyDate),months+12*years),dateWithoutDays=Object(subDays.a)(dateWithoutMonths,days+7*weeks),minutestoSub=minutes+60*hours,secondstoSub=seconds+60*minutestoSub,mstoSub=1e3*secondstoSub,finalDate=new Date(dateWithoutDays.getTime()-mstoSub);return finalDate}function intervalToDuration(_ref){var start=_ref.start,end=_ref.end;Object(requiredArgs.a)(1,arguments);var dateLeft=Object(toDate.a)(start),dateRight=Object(toDate.a)(end);if(!Object(isValid.a)(dateLeft))throw new RangeError("Start Date is invalid");if(!Object(isValid.a)(dateRight))throw new RangeError("End Date is invalid");var duration={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},sign=compareAsc(dateLeft,dateRight);duration.years=Math.abs(differenceInYears(dateLeft,dateRight));var remainingMonths=sub(dateLeft,{years:sign*duration.years});duration.months=Math.abs(differenceInMonths(remainingMonths,dateRight));var remainingDays=sub(remainingMonths,{months:sign*duration.months});duration.days=Math.abs(differenceInDays(remainingDays,dateRight));var remainingHours=sub(remainingDays,{days:sign*duration.days});duration.hours=Math.abs(differenceInHours(remainingHours,dateRight));var remainingMinutes=sub(remainingHours,{hours:sign*duration.hours});duration.minutes=Math.abs(differenceInMinutes(remainingMinutes,dateRight));var remainingSeconds=sub(remainingMinutes,{minutes:sign*duration.minutes});return duration.seconds=Math.abs(differenceInSeconds(remainingSeconds,dateRight)),duration}var isAfter=__webpack_require__(23),isBefore=__webpack_require__(40),isDate=__webpack_require__(72),isEqual=__webpack_require__(77);function isExists(year,month,day){if(arguments.length<3)throw new TypeError("3 argument required, but only "+arguments.length+" present");var date=new Date(year,month,day);return date.getFullYear()===year&&date.getMonth()===month&&date.getDate()===day}function isFirstDayOfMonth(dirtyDate){return Object(requiredArgs.a)(1,arguments),1===Object(toDate.a)(dirtyDate).getDate()}function isFriday(dirtyDate){return Object(requiredArgs.a)(1,arguments),5===Object(toDate.a)(dirtyDate).getDay()}function isFuture(dirtyDate){return Object(requiredArgs.a)(1,arguments),Object(toDate.a)(dirtyDate).getTime()>Date.now()}function isLastDayOfMonth(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate);return Object(endOfDay.a)(date).getTime()===Object(endOfMonth.a)(date).getTime()}var parse=__webpack_require__(47);function isMatch(dateString,formatString,dirtyOptions){return Object(requiredArgs.a)(2,arguments),Object(isValid.a)(Object(parse.a)(dateString,formatString,new Date,dirtyOptions))}function isMonday(dirtyDate){return Object(requiredArgs.a)(1,arguments),1===Object(toDate.a)(dirtyDate).getDay()}function isPast(dirtyDate){return Object(requiredArgs.a)(1,arguments),Object(toDate.a)(dirtyDate).getTime()=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6");var date=Object(toDate.a)(dirtyDate),day=date.getDay(),diff=6+(day30)throw new RangeError("`options.nearestTo` must be between 1 and 30");var date=Object(toDate.a)(dirtyDate),seconds=date.getSeconds(),minutes=date.getMinutes()+seconds/60,roundedMinutes=Math.floor(minutes/nearestTo)*nearestTo,remainderMinutes=minutes%nearestTo,addedMinutes=Math.round(remainderMinutes/nearestTo)*nearestTo;return new Date(date.getFullYear(),date.getMonth(),date.getDate(),date.getHours(),roundedMinutes+addedMinutes)}var setMonth=__webpack_require__(16);function set(dirtyDate,values){if(Object(requiredArgs.a)(2,arguments),"object"!=typeof values||null===values)throw new RangeError("values parameter must be an object");var date=Object(toDate.a)(dirtyDate);return isNaN(date)?new Date(NaN):(null!=values.year&&date.setFullYear(values.year),null!=values.month&&(date=Object(setMonth.a)(date,values.month)),null!=values.date&&date.setDate(Object(toInteger.a)(values.date)),null!=values.hours&&date.setHours(Object(toInteger.a)(values.hours)),null!=values.minutes&&date.setMinutes(Object(toInteger.a)(values.minutes)),null!=values.seconds&&date.setSeconds(Object(toInteger.a)(values.seconds)),null!=values.milliseconds&&date.setMilliseconds(Object(toInteger.a)(values.milliseconds)),date)}function setDate(dirtyDate,dirtyDayOfMonth){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),dayOfMonth=Object(toInteger.a)(dirtyDayOfMonth);return date.setDate(dayOfMonth),date}function setDay(dirtyDate,dirtyDay,dirtyOptions){Object(requiredArgs.a)(2,arguments);var options=dirtyOptions||{},locale=options.locale,localeWeekStartsOn=locale&&locale.options&&locale.options.weekStartsOn,defaultWeekStartsOn=null==localeWeekStartsOn?0:Object(toInteger.a)(localeWeekStartsOn),weekStartsOn=null==options.weekStartsOn?defaultWeekStartsOn:Object(toInteger.a)(options.weekStartsOn);if(!(weekStartsOn>=0&&weekStartsOn<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var date=Object(toDate.a)(dirtyDate,options),day=Object(toInteger.a)(dirtyDay),currentDay=date.getDay(),remainder=day%7,dayIndex=(remainder+7)%7,delta=7-weekStartsOn,diff=day<0||day>6?day-(currentDay+delta)%7:(dayIndex+delta)%7-(currentDay+delta)%7;return Object(addDays.a)(date,diff,options)}function setDayOfYear(dirtyDate,dirtyDayOfYear){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),dayOfYear=Object(toInteger.a)(dirtyDayOfYear);return date.setMonth(0),date.setDate(dayOfYear),date}var setHours=__webpack_require__(53);function setISODay(dirtyDate,dirtyDay){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),day=Object(toInteger.a)(dirtyDay),currentDay=getISODay(date),diff=day-currentDay;return Object(addDays.a)(date,diff)}function setISOWeek(dirtyDate,dirtyISOWeek){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),isoWeek=Object(toInteger.a)(dirtyISOWeek),diff=getISOWeek(date)-isoWeek;return date.setDate(date.getDate()-7*diff),date}function setMilliseconds(dirtyDate,dirtyMilliseconds){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),milliseconds=Object(toInteger.a)(dirtyMilliseconds);return date.setMilliseconds(milliseconds),date}var setMinutes=__webpack_require__(54),setQuarter=__webpack_require__(48),setSeconds=__webpack_require__(75);function setWeek(dirtyDate,dirtyWeek,dirtyOptions){Object(requiredArgs.a)(2,arguments);var date=Object(toDate.a)(dirtyDate),week=Object(toInteger.a)(dirtyWeek),diff=Object(getWeek.a)(date,dirtyOptions)-week;return date.setDate(date.getDate()-7*diff),date}var startOfWeekYear=__webpack_require__(51);function setWeekYear(dirtyDate,dirtyWeekYear,dirtyOptions){Object(requiredArgs.a)(2,arguments);var options=dirtyOptions||{},locale=options.locale,localeFirstWeekContainsDate=locale&&locale.options&&locale.options.firstWeekContainsDate,defaultFirstWeekContainsDate=null==localeFirstWeekContainsDate?1:Object(toInteger.a)(localeFirstWeekContainsDate),firstWeekContainsDate=null==options.firstWeekContainsDate?defaultFirstWeekContainsDate:Object(toInteger.a)(options.firstWeekContainsDate),date=Object(toDate.a)(dirtyDate),weekYear=Object(toInteger.a)(dirtyWeekYear),diff=Object(differenceInCalendarDays.a)(date,Object(startOfWeekYear.a)(date,dirtyOptions)),firstWeek=new Date(0);return firstWeek.setFullYear(weekYear,0,firstWeekContainsDate),firstWeek.setHours(0,0,0,0),(date=Object(startOfWeekYear.a)(firstWeek,dirtyOptions)).setDate(date.getDate()+diff),date}var setYear=__webpack_require__(56),startOfDay=__webpack_require__(19);function startOfDecade(dirtyDate){Object(requiredArgs.a)(1,arguments);var date=Object(toDate.a)(dirtyDate),year=date.getFullYear(),decade=10*Math.floor(year/10);return date.setFullYear(decade,0,1),date.setHours(0,0,0,0),date}function startOfToday(){return Object(startOfDay.a)(Date.now())}function startOfTomorrow(){var now=new Date,year=now.getFullYear(),month=now.getMonth(),day=now.getDate(),date=new Date(0);return date.setFullYear(year,month,day+1),date.setHours(0,0,0,0),date}function startOfYesterday(){var now=new Date,year=now.getFullYear(),month=now.getMonth(),day=now.getDate(),date=new Date(0);return date.setFullYear(year,month,day-1),date.setHours(0,0,0,0),date}function subBusinessDays(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addBusinessDays(dirtyDate,-amount)}var subHours=__webpack_require__(91),subMinutes=__webpack_require__(92);function subQuarters(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addQuarters(dirtyDate,-amount)}function subSeconds(dirtyDate,dirtyAmount){Object(requiredArgs.a)(2,arguments);var amount=Object(toInteger.a)(dirtyAmount);return addSeconds(dirtyDate,-amount)}var subWeeks=__webpack_require__(80),subYears=__webpack_require__(55),maxTime=24*Math.pow(10,8)*60*60*1e3,minTime=-maxTime},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"CalendarContainer",(function(){return Et})),__webpack_require__.d(__webpack_exports__,"getDefaultLocale",(function(){return Ke})),__webpack_require__.d(__webpack_exports__,"registerLocale",(function(){return Be})),__webpack_require__.d(__webpack_exports__,"setDefaultLocale",(function(){return je}));var react=__webpack_require__(3),react_default=__webpack_require__.n(react),classnames=(__webpack_require__(106),__webpack_require__(18)),classnames_default=__webpack_require__.n(classnames),isDate=__webpack_require__(72),isValid=__webpack_require__(6),format=__webpack_require__(39),addMinutes=__webpack_require__(45),addHours=__webpack_require__(43),addDays=__webpack_require__(9),addWeeks=__webpack_require__(26),addMonths=__webpack_require__(14),addYears=__webpack_require__(37),subDays=__webpack_require__(44),subWeeks=__webpack_require__(80),subMonths=__webpack_require__(35),subYears=__webpack_require__(55),getSeconds=__webpack_require__(79),getMinutes=__webpack_require__(17),getHours=__webpack_require__(15),getDay=__webpack_require__(63),getDate=__webpack_require__(52),getWeek=__webpack_require__(59),getMonth=__webpack_require__(24),getQuarter=__webpack_require__(34),getYear=__webpack_require__(5),getTime=__webpack_require__(46),setSeconds=__webpack_require__(75),setMinutes=__webpack_require__(54),setHours=__webpack_require__(53),setMonth=__webpack_require__(16),setQuarter=__webpack_require__(48),setYear=__webpack_require__(56),min=__webpack_require__(70),max=__webpack_require__(71),differenceInCalendarDays=__webpack_require__(13),differenceInCalendarMonths=__webpack_require__(36),differenceInCalendarYears=__webpack_require__(38),startOfDay=__webpack_require__(19),startOfWeek=__webpack_require__(8),startOfMonth=__webpack_require__(30),startOfQuarter=__webpack_require__(31),startOfYear=__webpack_require__(41),endOfDay=__webpack_require__(42),isEqual=__webpack_require__(77),isSameDay=__webpack_require__(21),isSameMonth=__webpack_require__(61),isSameYear=__webpack_require__(60),isSameQuarter=__webpack_require__(62),isAfter=__webpack_require__(23),isBefore=__webpack_require__(40),isWithinInterval=__webpack_require__(69),toDate=__webpack_require__(1),parse=__webpack_require__(47),parseISO=__webpack_require__(74),react_dom=__webpack_require__(49),react_dom_default=__webpack_require__.n(react_dom);function isNodeFound(current,componentNode,ignoreClass){return current===componentNode||(current.correspondingElement?current.correspondingElement.classList.contains(ignoreClass):current.classList.contains(ignoreClass))}var passiveEventSupport,uid=function autoInc(seed){return void 0===seed&&(seed=0),function(){return++seed}}(),handlersMap={},enabledInstances={},touchEvents=["touchstart","touchmove"];function getEventHandlerOptions(instance,eventName){var handlerOptions=null;return-1!==touchEvents.indexOf(eventName)&&passiveEventSupport&&(handlerOptions={passive:!instance.props.preventDefault}),handlerOptions}var react_onclickoutside_es=function onClickOutsideHOC(WrappedComponent,config){var _class,_temp,componentName=WrappedComponent.displayName||WrappedComponent.name||"Component";return _temp=_class=function(_Component){function onClickOutside(props){var _this;return(_this=_Component.call(this,props)||this).__outsideClickHandler=function(event){if("function"!=typeof _this.__clickOutsideHandlerProp){var instance=_this.getInstance();if("function"!=typeof instance.props.handleClickOutside){if("function"!=typeof instance.handleClickOutside)throw new Error("WrappedComponent: "+componentName+" lacks a handleClickOutside(event) function for processing outside click events.");instance.handleClickOutside(event)}else instance.props.handleClickOutside(event)}else _this.__clickOutsideHandlerProp(event)},_this.__getComponentNode=function(){var instance=_this.getInstance();return config&&"function"==typeof config.setClickOutsideRef?config.setClickOutsideRef()(instance):"function"==typeof instance.setClickOutsideRef?instance.setClickOutsideRef():Object(react_dom.findDOMNode)(instance)},_this.enableOnClickOutside=function(){if("undefined"!=typeof document&&!enabledInstances[_this._uid]){void 0===passiveEventSupport&&(passiveEventSupport=function testPassiveEventSupport(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var passive=!1,options=Object.defineProperty({},"passive",{get:function get(){passive=!0}}),noop=function noop(){};return window.addEventListener("testPassiveEventSupport",noop,options),window.removeEventListener("testPassiveEventSupport",noop,options),passive}}()),enabledInstances[_this._uid]=!0;var events=_this.props.eventTypes;events.forEach||(events=[events]),handlersMap[_this._uid]=function(event){null!==_this.componentNode&&(_this.props.preventDefault&&event.preventDefault(),_this.props.stopPropagation&&event.stopPropagation(),_this.props.excludeScrollbar&&function clickedScrollbar(evt){return document.documentElement.clientWidth<=evt.clientX||document.documentElement.clientHeight<=evt.clientY}(event)||function findHighest(current,componentNode,ignoreClass){if(current===componentNode)return!0;for(;current.parentNode;){if(isNodeFound(current,componentNode,ignoreClass))return!0;current=current.parentNode}return current}(event.target,_this.componentNode,_this.props.outsideClickIgnoreClass)===document&&_this.__outsideClickHandler(event))},events.forEach((function(eventName){document.addEventListener(eventName,handlersMap[_this._uid],getEventHandlerOptions(_this,eventName))}))}},_this.disableOnClickOutside=function(){delete enabledInstances[_this._uid];var fn=handlersMap[_this._uid];if(fn&&"undefined"!=typeof document){var events=_this.props.eventTypes;events.forEach||(events=[events]),events.forEach((function(eventName){return document.removeEventListener(eventName,fn,getEventHandlerOptions(_this,eventName))})),delete handlersMap[_this._uid]}},_this.getRef=function(ref){return _this.instanceRef=ref},_this._uid=uid(),_this}!function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype),subClass.prototype.constructor=subClass,subClass.__proto__=superClass}(onClickOutside,_Component);var _proto=onClickOutside.prototype;return _proto.getInstance=function getInstance(){if(!WrappedComponent.prototype.isReactComponent)return this;var ref=this.instanceRef;return ref.getInstance?ref.getInstance():ref},_proto.componentDidMount=function componentDidMount(){if("undefined"!=typeof document&&document.createElement){var instance=this.getInstance();if(config&&"function"==typeof config.handleClickOutside&&(this.__clickOutsideHandlerProp=config.handleClickOutside(instance),"function"!=typeof this.__clickOutsideHandlerProp))throw new Error("WrappedComponent: "+componentName+" lacks a function for processing outside click events specified by the handleClickOutside config option.");this.componentNode=this.__getComponentNode(),this.props.disableOnClickOutside||this.enableOnClickOutside()}},_proto.componentDidUpdate=function componentDidUpdate(){this.componentNode=this.__getComponentNode()},_proto.componentWillUnmount=function componentWillUnmount(){this.disableOnClickOutside()},_proto.render=function render(){var _props=this.props,props=(_props.excludeScrollbar,function _objectWithoutProperties(source,excluded){if(null==source)return{};var key,i,target={},sourceKeys=Object.keys(source);for(i=0;i=0||(target[key]=source[key]);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}(_props,["excludeScrollbar"]));return WrappedComponent.prototype.isReactComponent?props.ref=this.getRef:props.wrappedRef=this.getRef,props.disableOnClickOutside=this.disableOnClickOutside,props.enableOnClickOutside=this.enableOnClickOutside,Object(react.createElement)(WrappedComponent,props)},onClickOutside}(react.Component),_class.displayName="OnClickOutside("+componentName+")",_class.defaultProps={eventTypes:["mousedown","touchstart"],excludeScrollbar:config&&config.excludeScrollbar||!1,outsideClickIgnoreClass:"ignore-react-onclickoutside",preventDefault:!1,stopPropagation:!1},_class.getClass=function(){return WrappedComponent.getClass?WrappedComponent.getClass():WrappedComponent},_temp},objectWithoutPropertiesLoose=__webpack_require__(117),objectWithoutPropertiesLoose_default=__webpack_require__.n(objectWithoutPropertiesLoose),helpers_extends=__webpack_require__(57),extends_default=__webpack_require__.n(helpers_extends),assertThisInitialized=__webpack_require__(10),assertThisInitialized_default=__webpack_require__.n(assertThisInitialized),inheritsLoose=__webpack_require__(65),inheritsLoose_default=__webpack_require__.n(inheritsLoose),defineProperty=__webpack_require__(11),defineProperty_default=__webpack_require__.n(defineProperty),deep_equal=__webpack_require__(118),deep_equal_default=__webpack_require__.n(deep_equal),isBrowser="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,timeoutDuration=function(){for(var longerTimeoutBrowsers=["Edge","Trident","Firefox"],i=0;i=0)return 1;return 0}();var debounce=isBrowser&&window.Promise?function microtaskDebounce(fn){var called=!1;return function(){called||(called=!0,window.Promise.resolve().then((function(){called=!1,fn()})))}}:function taskDebounce(fn){var scheduled=!1;return function(){scheduled||(scheduled=!0,setTimeout((function(){scheduled=!1,fn()}),timeoutDuration))}};function isFunction(functionToCheck){return functionToCheck&&"[object Function]"==={}.toString.call(functionToCheck)}function getStyleComputedProperty(element,property){if(1!==element.nodeType)return[];var css=element.ownerDocument.defaultView.getComputedStyle(element,null);return property?css[property]:css}function getParentNode(element){return"HTML"===element.nodeName?element:element.parentNode||element.host}function getScrollParent(element){if(!element)return document.body;switch(element.nodeName){case"HTML":case"BODY":return element.ownerDocument.body;case"#document":return element.body}var _getStyleComputedProp=getStyleComputedProperty(element),overflow=_getStyleComputedProp.overflow,overflowX=_getStyleComputedProp.overflowX,overflowY=_getStyleComputedProp.overflowY;return/(auto|scroll|overlay)/.test(overflow+overflowY+overflowX)?element:getScrollParent(getParentNode(element))}function getReferenceNode(reference){return reference&&reference.referenceNode?reference.referenceNode:reference}var isIE11=isBrowser&&!(!window.MSInputMethodContext||!document.documentMode),isIE10=isBrowser&&/MSIE 10/.test(navigator.userAgent);function isIE(version){return 11===version?isIE11:10===version?isIE10:isIE11||isIE10}function getOffsetParent(element){if(!element)return document.documentElement;for(var noOffsetParent=isIE(10)?document.body:null,offsetParent=element.offsetParent||null;offsetParent===noOffsetParent&&element.nextElementSibling;)offsetParent=(element=element.nextElementSibling).offsetParent;var nodeName=offsetParent&&offsetParent.nodeName;return nodeName&&"BODY"!==nodeName&&"HTML"!==nodeName?-1!==["TH","TD","TABLE"].indexOf(offsetParent.nodeName)&&"static"===getStyleComputedProperty(offsetParent,"position")?getOffsetParent(offsetParent):offsetParent:element?element.ownerDocument.documentElement:document.documentElement}function getRoot(node){return null!==node.parentNode?getRoot(node.parentNode):node}function findCommonOffsetParent(element1,element2){if(!(element1&&element1.nodeType&&element2&&element2.nodeType))return document.documentElement;var order=element1.compareDocumentPosition(element2)&Node.DOCUMENT_POSITION_FOLLOWING,start=order?element1:element2,end=order?element2:element1,range=document.createRange();range.setStart(start,0),range.setEnd(end,0);var commonAncestorContainer=range.commonAncestorContainer;if(element1!==commonAncestorContainer&&element2!==commonAncestorContainer||start.contains(end))return function isOffsetContainer(element){var nodeName=element.nodeName;return"BODY"!==nodeName&&("HTML"===nodeName||getOffsetParent(element.firstElementChild)===element)}(commonAncestorContainer)?commonAncestorContainer:getOffsetParent(commonAncestorContainer);var element1root=getRoot(element1);return element1root.host?findCommonOffsetParent(element1root.host,element2):findCommonOffsetParent(element1,getRoot(element2).host)}function getScroll(element){var side=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",upperSide="top"===side?"scrollTop":"scrollLeft",nodeName=element.nodeName;if("BODY"===nodeName||"HTML"===nodeName){var html=element.ownerDocument.documentElement,scrollingElement=element.ownerDocument.scrollingElement||html;return scrollingElement[upperSide]}return element[upperSide]}function includeScroll(rect,element){var subtract=arguments.length>2&&void 0!==arguments[2]&&arguments[2],scrollTop=getScroll(element,"top"),scrollLeft=getScroll(element,"left"),modifier=subtract?-1:1;return rect.top+=scrollTop*modifier,rect.bottom+=scrollTop*modifier,rect.left+=scrollLeft*modifier,rect.right+=scrollLeft*modifier,rect}function getBordersSize(styles,axis){var sideA="x"===axis?"Left":"Top",sideB="Left"===sideA?"Right":"Bottom";return parseFloat(styles["border"+sideA+"Width"])+parseFloat(styles["border"+sideB+"Width"])}function getSize(axis,body,html,computedStyle){return Math.max(body["offset"+axis],body["scroll"+axis],html["client"+axis],html["offset"+axis],html["scroll"+axis],isIE(10)?parseInt(html["offset"+axis])+parseInt(computedStyle["margin"+("Height"===axis?"Top":"Left")])+parseInt(computedStyle["margin"+("Height"===axis?"Bottom":"Right")]):0)}function getWindowSizes(document){var body=document.body,html=document.documentElement,computedStyle=isIE(10)&&getComputedStyle(html);return{height:getSize("Height",body,html,computedStyle),width:getSize("Width",body,html,computedStyle)}}var classCallCheck=function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")},createClass=function(){function defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isIE10=isIE(10),isHTML="HTML"===parent.nodeName,childrenRect=getBoundingClientRect(children),parentRect=getBoundingClientRect(parent),scrollParent=getScrollParent(children),styles=getStyleComputedProperty(parent),borderTopWidth=parseFloat(styles.borderTopWidth),borderLeftWidth=parseFloat(styles.borderLeftWidth);fixedPosition&&isHTML&&(parentRect.top=Math.max(parentRect.top,0),parentRect.left=Math.max(parentRect.left,0));var offsets=getClientRect({top:childrenRect.top-parentRect.top-borderTopWidth,left:childrenRect.left-parentRect.left-borderLeftWidth,width:childrenRect.width,height:childrenRect.height});if(offsets.marginTop=0,offsets.marginLeft=0,!isIE10&&isHTML){var marginTop=parseFloat(styles.marginTop),marginLeft=parseFloat(styles.marginLeft);offsets.top-=borderTopWidth-marginTop,offsets.bottom-=borderTopWidth-marginTop,offsets.left-=borderLeftWidth-marginLeft,offsets.right-=borderLeftWidth-marginLeft,offsets.marginTop=marginTop,offsets.marginLeft=marginLeft}return(isIE10&&!fixedPosition?parent.contains(scrollParent):parent===scrollParent&&"BODY"!==scrollParent.nodeName)&&(offsets=includeScroll(offsets,parent)),offsets}function getViewportOffsetRectRelativeToArtbitraryNode(element){var excludeScroll=arguments.length>1&&void 0!==arguments[1]&&arguments[1],html=element.ownerDocument.documentElement,relativeOffset=getOffsetRectRelativeToArbitraryNode(element,html),width=Math.max(html.clientWidth,window.innerWidth||0),height=Math.max(html.clientHeight,window.innerHeight||0),scrollTop=excludeScroll?0:getScroll(html),scrollLeft=excludeScroll?0:getScroll(html,"left"),offset={top:scrollTop-relativeOffset.top+relativeOffset.marginTop,left:scrollLeft-relativeOffset.left+relativeOffset.marginLeft,width:width,height:height};return getClientRect(offset)}function isFixed(element){var nodeName=element.nodeName;if("BODY"===nodeName||"HTML"===nodeName)return!1;if("fixed"===getStyleComputedProperty(element,"position"))return!0;var parentNode=getParentNode(element);return!!parentNode&&isFixed(parentNode)}function getFixedPositionOffsetParent(element){if(!element||!element.parentElement||isIE())return document.documentElement;for(var el=element.parentElement;el&&"none"===getStyleComputedProperty(el,"transform");)el=el.parentElement;return el||document.documentElement}function getBoundaries(popper,reference,padding,boundariesElement){var fixedPosition=arguments.length>4&&void 0!==arguments[4]&&arguments[4],boundaries={top:0,left:0},offsetParent=fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,getReferenceNode(reference));if("viewport"===boundariesElement)boundaries=getViewportOffsetRectRelativeToArtbitraryNode(offsetParent,fixedPosition);else{var boundariesNode=void 0;"scrollParent"===boundariesElement?"BODY"===(boundariesNode=getScrollParent(getParentNode(reference))).nodeName&&(boundariesNode=popper.ownerDocument.documentElement):boundariesNode="window"===boundariesElement?popper.ownerDocument.documentElement:boundariesElement;var offsets=getOffsetRectRelativeToArbitraryNode(boundariesNode,offsetParent,fixedPosition);if("HTML"!==boundariesNode.nodeName||isFixed(offsetParent))boundaries=offsets;else{var _getWindowSizes=getWindowSizes(popper.ownerDocument),height=_getWindowSizes.height,width=_getWindowSizes.width;boundaries.top+=offsets.top-offsets.marginTop,boundaries.bottom=height+offsets.top,boundaries.left+=offsets.left-offsets.marginLeft,boundaries.right=width+offsets.left}}var isPaddingNumber="number"==typeof(padding=padding||0);return boundaries.left+=isPaddingNumber?padding:padding.left||0,boundaries.top+=isPaddingNumber?padding:padding.top||0,boundaries.right-=isPaddingNumber?padding:padding.right||0,boundaries.bottom-=isPaddingNumber?padding:padding.bottom||0,boundaries}function getArea(_ref){return _ref.width*_ref.height}function computeAutoPlacement(placement,refRect,popper,reference,boundariesElement){var padding=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===placement.indexOf("auto"))return placement;var boundaries=getBoundaries(popper,reference,padding,boundariesElement),rects={top:{width:boundaries.width,height:refRect.top-boundaries.top},right:{width:boundaries.right-refRect.right,height:boundaries.height},bottom:{width:boundaries.width,height:boundaries.bottom-refRect.bottom},left:{width:refRect.left-boundaries.left,height:boundaries.height}},sortedAreas=Object.keys(rects).map((function(key){return _extends({key:key},rects[key],{area:getArea(rects[key])})})).sort((function(a,b){return b.area-a.area})),filteredAreas=sortedAreas.filter((function(_ref2){var width=_ref2.width,height=_ref2.height;return width>=popper.clientWidth&&height>=popper.clientHeight})),computedPlacement=filteredAreas.length>0?filteredAreas[0].key:sortedAreas[0].key,variation=placement.split("-")[1];return computedPlacement+(variation?"-"+variation:"")}function getReferenceOffsets(state,popper,reference){var fixedPosition=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,commonOffsetParent=fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,getReferenceNode(reference));return getOffsetRectRelativeToArbitraryNode(reference,commonOffsetParent,fixedPosition)}function getOuterSizes(element){var styles=element.ownerDocument.defaultView.getComputedStyle(element),x=parseFloat(styles.marginTop||0)+parseFloat(styles.marginBottom||0),y=parseFloat(styles.marginLeft||0)+parseFloat(styles.marginRight||0);return{width:element.offsetWidth+y,height:element.offsetHeight+x}}function getOppositePlacement(placement){var hash={left:"right",right:"left",bottom:"top",top:"bottom"};return placement.replace(/left|right|bottom|top/g,(function(matched){return hash[matched]}))}function getPopperOffsets(popper,referenceOffsets,placement){placement=placement.split("-")[0];var popperRect=getOuterSizes(popper),popperOffsets={width:popperRect.width,height:popperRect.height},isHoriz=-1!==["right","left"].indexOf(placement),mainSide=isHoriz?"top":"left",secondarySide=isHoriz?"left":"top",measurement=isHoriz?"height":"width",secondaryMeasurement=isHoriz?"width":"height";return popperOffsets[mainSide]=referenceOffsets[mainSide]+referenceOffsets[measurement]/2-popperRect[measurement]/2,popperOffsets[secondarySide]=placement===secondarySide?referenceOffsets[secondarySide]-popperRect[secondaryMeasurement]:referenceOffsets[getOppositePlacement(secondarySide)],popperOffsets}function find(arr,check){return Array.prototype.find?arr.find(check):arr.filter(check)[0]}function runModifiers(modifiers,data,ends){return(void 0===ends?modifiers:modifiers.slice(0,function findIndex(arr,prop,value){if(Array.prototype.findIndex)return arr.findIndex((function(cur){return cur[prop]===value}));var match=find(arr,(function(obj){return obj[prop]===value}));return arr.indexOf(match)}(modifiers,"name",ends))).forEach((function(modifier){modifier.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var fn=modifier.function||modifier.fn;modifier.enabled&&isFunction(fn)&&(data.offsets.popper=getClientRect(data.offsets.popper),data.offsets.reference=getClientRect(data.offsets.reference),data=fn(data,modifier))})),data}function update(){if(!this.state.isDestroyed){var data={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};data.offsets.reference=getReferenceOffsets(this.state,this.popper,this.reference,this.options.positionFixed),data.placement=computeAutoPlacement(this.options.placement,data.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),data.originalPlacement=data.placement,data.positionFixed=this.options.positionFixed,data.offsets.popper=getPopperOffsets(this.popper,data.offsets.reference,data.placement),data.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",data=runModifiers(this.modifiers,data),this.state.isCreated?this.options.onUpdate(data):(this.state.isCreated=!0,this.options.onCreate(data))}}function isModifierEnabled(modifiers,modifierName){return modifiers.some((function(_ref){var name=_ref.name;return _ref.enabled&&name===modifierName}))}function getSupportedPropertyName(property){for(var prefixes=[!1,"ms","Webkit","Moz","O"],upperProp=property.charAt(0).toUpperCase()+property.slice(1),i=0;i1&&void 0!==arguments[1]&&arguments[1],index=validPlacements.indexOf(placement),arr=validPlacements.slice(index+1).concat(validPlacements.slice(0,index));return counter?arr.reverse():arr}var BEHAVIORS_FLIP="flip",BEHAVIORS_CLOCKWISE="clockwise",BEHAVIORS_COUNTERCLOCKWISE="counterclockwise";function parseOffset(offset,popperOffsets,referenceOffsets,basePlacement){var offsets=[0,0],useHeight=-1!==["right","left"].indexOf(basePlacement),fragments=offset.split(/(\+|\-)/).map((function(frag){return frag.trim()})),divider=fragments.indexOf(find(fragments,(function(frag){return-1!==frag.search(/,|\s/)})));fragments[divider]&&-1===fragments[divider].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var splitRegex=/\s*,\s*|\s+/,ops=-1!==divider?[fragments.slice(0,divider).concat([fragments[divider].split(splitRegex)[0]]),[fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider+1))]:[fragments];return(ops=ops.map((function(op,index){var measurement=(1===index?!useHeight:useHeight)?"height":"width",mergeWithPrevious=!1;return op.reduce((function(a,b){return""===a[a.length-1]&&-1!==["+","-"].indexOf(b)?(a[a.length-1]=b,mergeWithPrevious=!0,a):mergeWithPrevious?(a[a.length-1]+=b,mergeWithPrevious=!1,a):a.concat(b)}),[]).map((function(str){return function toValue(str,measurement,popperOffsets,referenceOffsets){var split=str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),value=+split[1],unit=split[2];if(!value)return str;if(0===unit.indexOf("%")){var element=void 0;switch(unit){case"%p":element=popperOffsets;break;case"%":case"%r":default:element=referenceOffsets}return getClientRect(element)[measurement]/100*value}if("vh"===unit||"vw"===unit){return("vh"===unit?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*value}return value}(str,measurement,popperOffsets,referenceOffsets)}))}))).forEach((function(op,index){op.forEach((function(frag,index2){isNumeric(frag)&&(offsets[index]+=frag*("-"===op[index2-1]?-1:1))}))})),offsets}var Defaults={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function onCreate(){},onUpdate:function onUpdate(){},modifiers:{shift:{order:100,enabled:!0,fn:function shift(data){var placement=data.placement,basePlacement=placement.split("-")[0],shiftvariation=placement.split("-")[1];if(shiftvariation){var _data$offsets=data.offsets,reference=_data$offsets.reference,popper=_data$offsets.popper,isVertical=-1!==["bottom","top"].indexOf(basePlacement),side=isVertical?"left":"top",measurement=isVertical?"width":"height",shiftOffsets={start:popper_defineProperty({},side,reference[side]),end:popper_defineProperty({},side,reference[side]+reference[measurement]-popper[measurement])};data.offsets.popper=_extends({},popper,shiftOffsets[shiftvariation])}return data}},offset:{order:200,enabled:!0,fn:function offset(data,_ref){var offset=_ref.offset,placement=data.placement,_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,basePlacement=placement.split("-")[0],offsets=void 0;return offsets=isNumeric(+offset)?[+offset,0]:parseOffset(offset,popper,reference,basePlacement),"left"===basePlacement?(popper.top+=offsets[0],popper.left-=offsets[1]):"right"===basePlacement?(popper.top+=offsets[0],popper.left+=offsets[1]):"top"===basePlacement?(popper.left+=offsets[0],popper.top-=offsets[1]):"bottom"===basePlacement&&(popper.left+=offsets[0],popper.top+=offsets[1]),data.popper=popper,data},offset:0},preventOverflow:{order:300,enabled:!0,fn:function preventOverflow(data,options){var boundariesElement=options.boundariesElement||getOffsetParent(data.instance.popper);data.instance.reference===boundariesElement&&(boundariesElement=getOffsetParent(boundariesElement));var transformProp=getSupportedPropertyName("transform"),popperStyles=data.instance.popper.style,top=popperStyles.top,left=popperStyles.left,transform=popperStyles[transformProp];popperStyles.top="",popperStyles.left="",popperStyles[transformProp]="";var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,boundariesElement,data.positionFixed);popperStyles.top=top,popperStyles.left=left,popperStyles[transformProp]=transform,options.boundaries=boundaries;var order=options.priority,popper=data.offsets.popper,check={primary:function primary(placement){var value=popper[placement];return popper[placement]boundaries[placement]&&!options.escapeWithReference&&(value=Math.min(popper[mainSide],boundaries[placement]-("right"===placement?popper.width:popper.height))),popper_defineProperty({},mainSide,value)}};return order.forEach((function(placement){var side=-1!==["left","top"].indexOf(placement)?"primary":"secondary";popper=_extends({},popper,check[side](placement))})),data.offsets.popper=popper,data},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function keepTogether(data){var _data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,placement=data.placement.split("-")[0],floor=Math.floor,isVertical=-1!==["top","bottom"].indexOf(placement),side=isVertical?"right":"bottom",opSide=isVertical?"left":"top",measurement=isVertical?"width":"height";return popper[side]floor(reference[side])&&(data.offsets.popper[opSide]=floor(reference[side])),data}},arrow:{order:500,enabled:!0,fn:function arrow(data,options){var _data$offsets$arrow;if(!isModifierRequired(data.instance.modifiers,"arrow","keepTogether"))return data;var arrowElement=options.element;if("string"==typeof arrowElement){if(!(arrowElement=data.instance.popper.querySelector(arrowElement)))return data}else if(!data.instance.popper.contains(arrowElement))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),data;var placement=data.placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isVertical=-1!==["left","right"].indexOf(placement),len=isVertical?"height":"width",sideCapitalized=isVertical?"Top":"Left",side=sideCapitalized.toLowerCase(),altSide=isVertical?"left":"top",opSide=isVertical?"bottom":"right",arrowElementSize=getOuterSizes(arrowElement)[len];reference[opSide]-arrowElementSizepopper[opSide]&&(data.offsets.popper[side]+=reference[side]+arrowElementSize-popper[opSide]),data.offsets.popper=getClientRect(data.offsets.popper);var center=reference[side]+reference[len]/2-arrowElementSize/2,css=getStyleComputedProperty(data.instance.popper),popperMarginSide=parseFloat(css["margin"+sideCapitalized]),popperBorderSide=parseFloat(css["border"+sideCapitalized+"Width"]),sideValue=center-data.offsets.popper[side]-popperMarginSide-popperBorderSide;return sideValue=Math.max(Math.min(popper[len]-arrowElementSize,sideValue),0),data.arrowElement=arrowElement,data.offsets.arrow=(popper_defineProperty(_data$offsets$arrow={},side,Math.round(sideValue)),popper_defineProperty(_data$offsets$arrow,altSide,""),_data$offsets$arrow),data},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function flip(data,options){if(isModifierEnabled(data.instance.modifiers,"inner"))return data;if(data.flipped&&data.placement===data.originalPlacement)return data;var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,options.boundariesElement,data.positionFixed),placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement),variation=data.placement.split("-")[1]||"",flipOrder=[];switch(options.behavior){case BEHAVIORS_FLIP:flipOrder=[placement,placementOpposite];break;case BEHAVIORS_CLOCKWISE:flipOrder=clockwise(placement);break;case BEHAVIORS_COUNTERCLOCKWISE:flipOrder=clockwise(placement,!0);break;default:flipOrder=options.behavior}return flipOrder.forEach((function(step,index){if(placement!==step||flipOrder.length===index+1)return data;placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement);var popperOffsets=data.offsets.popper,refOffsets=data.offsets.reference,floor=Math.floor,overlapsRef="left"===placement&&floor(popperOffsets.right)>floor(refOffsets.left)||"right"===placement&&floor(popperOffsets.left)floor(refOffsets.top)||"bottom"===placement&&floor(popperOffsets.top)floor(boundaries.right),overflowsTop=floor(popperOffsets.top)floor(boundaries.bottom),overflowsBoundaries="left"===placement&&overflowsLeft||"right"===placement&&overflowsRight||"top"===placement&&overflowsTop||"bottom"===placement&&overflowsBottom,isVertical=-1!==["top","bottom"].indexOf(placement),flippedVariationByRef=!!options.flipVariations&&(isVertical&&"start"===variation&&overflowsLeft||isVertical&&"end"===variation&&overflowsRight||!isVertical&&"start"===variation&&overflowsTop||!isVertical&&"end"===variation&&overflowsBottom),flippedVariationByContent=!!options.flipVariationsByContent&&(isVertical&&"start"===variation&&overflowsRight||isVertical&&"end"===variation&&overflowsLeft||!isVertical&&"start"===variation&&overflowsBottom||!isVertical&&"end"===variation&&overflowsTop),flippedVariation=flippedVariationByRef||flippedVariationByContent;(overlapsRef||overflowsBoundaries||flippedVariation)&&(data.flipped=!0,(overlapsRef||overflowsBoundaries)&&(placement=flipOrder[index+1]),flippedVariation&&(variation=function getOppositeVariation(variation){return"end"===variation?"start":"start"===variation?"end":variation}(variation)),data.placement=placement+(variation?"-"+variation:""),data.offsets.popper=_extends({},data.offsets.popper,getPopperOffsets(data.instance.popper,data.offsets.reference,data.placement)),data=runModifiers(data.instance.modifiers,data,"flip"))})),data},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function inner(data){var placement=data.placement,basePlacement=placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isHoriz=-1!==["left","right"].indexOf(basePlacement),subtractLength=-1===["top","left"].indexOf(basePlacement);return popper[isHoriz?"left":"top"]=reference[basePlacement]-(subtractLength?popper[isHoriz?"width":"height"]:0),data.placement=getOppositePlacement(placement),data.offsets.popper=getClientRect(popper),data}},hide:{order:800,enabled:!0,fn:function hide(data){if(!isModifierRequired(data.instance.modifiers,"hide","preventOverflow"))return data;var refRect=data.offsets.reference,bound=find(data.instance.modifiers,(function(modifier){return"preventOverflow"===modifier.name})).boundaries;if(refRect.bottombound.right||refRect.top>bound.bottom||refRect.right2&&void 0!==arguments[2]?arguments[2]:{};classCallCheck(this,Popper),this.scheduleUpdate=function(){return requestAnimationFrame(_this.update)},this.update=debounce(this.update.bind(this)),this.options=_extends({},Popper.Defaults,options),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=reference&&reference.jquery?reference[0]:reference,this.popper=popper&&popper.jquery?popper[0]:popper,this.options.modifiers={},Object.keys(_extends({},Popper.Defaults.modifiers,options.modifiers)).forEach((function(name){_this.options.modifiers[name]=_extends({},Popper.Defaults.modifiers[name]||{},options.modifiers?options.modifiers[name]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(name){return _extends({name:name},_this.options.modifiers[name])})).sort((function(a,b){return a.order-b.order})),this.modifiers.forEach((function(modifierOptions){modifierOptions.enabled&&isFunction(modifierOptions.onLoad)&&modifierOptions.onLoad(_this.reference,_this.popper,_this.options,modifierOptions,_this.state)})),this.update();var eventsEnabled=this.options.eventsEnabled;eventsEnabled&&this.enableEventListeners(),this.state.eventsEnabled=eventsEnabled}return createClass(Popper,[{key:"update",value:function update$$1(){return update.call(this)}},{key:"destroy",value:function destroy$$1(){return destroy.call(this)}},{key:"enableEventListeners",value:function enableEventListeners$$1(){return enableEventListeners.call(this)}},{key:"disableEventListeners",value:function disableEventListeners$$1(){return disableEventListeners.call(this)}}]),Popper}();Popper.Utils=("undefined"!=typeof window?window:global).PopperUtils,Popper.placements=placements,Popper.Defaults=Defaults;var popper=Popper,lib=__webpack_require__(94),lib_default=__webpack_require__.n(lib),ManagerReferenceNodeContext=lib_default()(),ManagerReferenceNodeSetterContext=lib_default()(),Manager_Manager=function(_React$Component){function Manager(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _this=_React$Component.call.apply(_React$Component,[this].concat(args))||this,defineProperty_default()(assertThisInitialized_default()(_this),"referenceNode",void 0),defineProperty_default()(assertThisInitialized_default()(_this),"setReferenceNode",(function(newReferenceNode){newReferenceNode&&_this.referenceNode!==newReferenceNode&&(_this.referenceNode=newReferenceNode,_this.forceUpdate())})),_this}inheritsLoose_default()(Manager,_React$Component);var _proto=Manager.prototype;return _proto.componentWillUnmount=function componentWillUnmount(){this.referenceNode=null},_proto.render=function render(){return react.createElement(ManagerReferenceNodeContext.Provider,{value:this.referenceNode},react.createElement(ManagerReferenceNodeSetterContext.Provider,{value:this.setReferenceNode},this.props.children))},Manager}(react.Component),unwrapArray=function unwrapArray(arg){return Array.isArray(arg)?arg[0]:arg},safeInvoke=function safeInvoke(fn){if("function"==typeof fn){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return fn.apply(void 0,args)}},setRef=function setRef(ref,node){if("function"==typeof ref)return safeInvoke(ref,node);null!=ref&&(ref.current=node)},initialStyle={position:"absolute",top:0,left:0,opacity:0,pointerEvents:"none"},initialArrowStyle={},Popper_InnerPopper=function(_React$Component){function InnerPopper(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _this=_React$Component.call.apply(_React$Component,[this].concat(args))||this,defineProperty_default()(assertThisInitialized_default()(_this),"state",{data:void 0,placement:void 0}),defineProperty_default()(assertThisInitialized_default()(_this),"popperInstance",void 0),defineProperty_default()(assertThisInitialized_default()(_this),"popperNode",null),defineProperty_default()(assertThisInitialized_default()(_this),"arrowNode",null),defineProperty_default()(assertThisInitialized_default()(_this),"setPopperNode",(function(popperNode){popperNode&&_this.popperNode!==popperNode&&(setRef(_this.props.innerRef,popperNode),_this.popperNode=popperNode,_this.updatePopperInstance())})),defineProperty_default()(assertThisInitialized_default()(_this),"setArrowNode",(function(arrowNode){_this.arrowNode=arrowNode})),defineProperty_default()(assertThisInitialized_default()(_this),"updateStateModifier",{enabled:!0,order:900,fn:function fn(data){var placement=data.placement;return _this.setState({data:data,placement:placement}),data}}),defineProperty_default()(assertThisInitialized_default()(_this),"getOptions",(function(){return{placement:_this.props.placement,eventsEnabled:_this.props.eventsEnabled,positionFixed:_this.props.positionFixed,modifiers:extends_default()({},_this.props.modifiers,{arrow:extends_default()({},_this.props.modifiers&&_this.props.modifiers.arrow,{enabled:!!_this.arrowNode,element:_this.arrowNode}),applyStyle:{enabled:!1},updateStateModifier:_this.updateStateModifier})}})),defineProperty_default()(assertThisInitialized_default()(_this),"getPopperStyle",(function(){return _this.popperNode&&_this.state.data?extends_default()({position:_this.state.data.offsets.popper.position},_this.state.data.styles):initialStyle})),defineProperty_default()(assertThisInitialized_default()(_this),"getPopperPlacement",(function(){return _this.state.data?_this.state.placement:void 0})),defineProperty_default()(assertThisInitialized_default()(_this),"getArrowStyle",(function(){return _this.arrowNode&&_this.state.data?_this.state.data.arrowStyles:initialArrowStyle})),defineProperty_default()(assertThisInitialized_default()(_this),"getOutOfBoundariesState",(function(){return _this.state.data?_this.state.data.hide:void 0})),defineProperty_default()(assertThisInitialized_default()(_this),"destroyPopperInstance",(function(){_this.popperInstance&&(_this.popperInstance.destroy(),_this.popperInstance=null)})),defineProperty_default()(assertThisInitialized_default()(_this),"updatePopperInstance",(function(){_this.destroyPopperInstance();var popperNode=assertThisInitialized_default()(_this).popperNode,referenceElement=_this.props.referenceElement;referenceElement&&popperNode&&(_this.popperInstance=new popper(referenceElement,popperNode,_this.getOptions()))})),defineProperty_default()(assertThisInitialized_default()(_this),"scheduleUpdate",(function(){_this.popperInstance&&_this.popperInstance.scheduleUpdate()})),_this}inheritsLoose_default()(InnerPopper,_React$Component);var _proto=InnerPopper.prototype;return _proto.componentDidUpdate=function componentDidUpdate(prevProps,prevState){this.props.placement===prevProps.placement&&this.props.referenceElement===prevProps.referenceElement&&this.props.positionFixed===prevProps.positionFixed&&deep_equal_default()(this.props.modifiers,prevProps.modifiers,{strict:!0})?this.props.eventsEnabled!==prevProps.eventsEnabled&&this.popperInstance&&(this.props.eventsEnabled?this.popperInstance.enableEventListeners():this.popperInstance.disableEventListeners()):this.updatePopperInstance(),prevState.placement!==this.state.placement&&this.scheduleUpdate()},_proto.componentWillUnmount=function componentWillUnmount(){setRef(this.props.innerRef,null),this.destroyPopperInstance()},_proto.render=function render(){return unwrapArray(this.props.children)({ref:this.setPopperNode,style:this.getPopperStyle(),placement:this.getPopperPlacement(),outOfBoundaries:this.getOutOfBoundariesState(),scheduleUpdate:this.scheduleUpdate,arrowProps:{ref:this.setArrowNode,style:this.getArrowStyle()}})},InnerPopper}(react.Component);defineProperty_default()(Popper_InnerPopper,"defaultProps",{placement:"bottom",eventsEnabled:!0,referenceElement:void 0,positionFixed:!1});popper.placements;function Popper_Popper(_ref){var referenceElement=_ref.referenceElement,props=objectWithoutPropertiesLoose_default()(_ref,["referenceElement"]);return react.createElement(ManagerReferenceNodeContext.Consumer,null,(function(referenceNode){return react.createElement(Popper_InnerPopper,extends_default()({referenceElement:void 0!==referenceElement?referenceElement:referenceNode},props))}))}var warning=__webpack_require__(93),warning_default=__webpack_require__.n(warning),Reference_InnerReference=function(_React$Component){function InnerReference(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _this=_React$Component.call.apply(_React$Component,[this].concat(args))||this,defineProperty_default()(assertThisInitialized_default()(_this),"refHandler",(function(node){setRef(_this.props.innerRef,node),safeInvoke(_this.props.setReferenceNode,node)})),_this}inheritsLoose_default()(InnerReference,_React$Component);var _proto=InnerReference.prototype;return _proto.componentWillUnmount=function componentWillUnmount(){setRef(this.props.innerRef,null)},_proto.render=function render(){return warning_default()(Boolean(this.props.setReferenceNode),"`Reference` should not be used outside of a `Manager` component."),unwrapArray(this.props.children)({ref:this.refHandler})},InnerReference}(react.Component);function Reference(props){return react.createElement(ManagerReferenceNodeSetterContext.Consumer,null,(function(setReferenceNode){return react.createElement(Reference_InnerReference,extends_default()({setReferenceNode:setReferenceNode},props))}))}function oe(e){return(oe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function se(e,t){for(var r=0;r0&&(a=Object(parse.a)(e,t.slice(0,e.length),new Date)),_e(a)||(a=new Date(e))),_e(a)&&p?a:null)}function _e(e){return Object(isValid.a)(e)&&Object(isAfter.a)(e,new Date("1/1/1000"))}function Se(e,t,r){if("en"===r)return Object(format.a)(e,t,{awareOfUnicodeTokens:!0});var n=He(r);return r&&!n&&console.warn('A locale object was not found for the provided string ["'.concat(r,'"].')),!n&&Ke()&&He(Ke())&&(n=He(Ke())),Object(format.a)(e,t,{locale:n||null,awareOfUnicodeTokens:!0})}function Me(e,t){var r=t.hour,n=void 0===r?0:r,o=t.minute,a=void 0===o?0:o,s=t.second;return Object(setHours.a)(Object(setMinutes.a)(Object(setSeconds.a)(e,void 0===s?0:s),a),n)}function Pe(e,t){var r=t&&He(t)||Ke()&&He(Ke());return Object(getWeek.a)(e,r?{locale:r}:null)}function Ee(e,t){return Se(e,"ddd",t)}function Ne(e){return Object(startOfDay.a)(e)}function Oe(e,t){var r=He(t||Ke());return Object(startOfWeek.a)(e,{locale:r})}function xe(e){return Object(startOfMonth.a)(e)}function Ye(e){return Object(startOfYear.a)(e)}function Te(e){return Object(startOfQuarter.a)(e)}function Ie(e,t){return e&&t?Object(isSameYear.a)(e,t):!e&&!t}function Le(e,t){return e&&t?Object(isSameMonth.a)(e,t):!e&&!t}function Fe(e,t){return e&&t?Object(isSameQuarter.a)(e,t):!e&&!t}function Re(e,t){return e&&t?Object(isSameDay.a)(e,t):!e&&!t}function We(e,t){return e&&t?Object(isEqual.a)(e,t):!e&&!t}function Ae(e,t,r){var n,o=Object(startOfDay.a)(t),a=Object(endOfDay.a)(r);try{n=Object(isWithinInterval.a)(e,{start:o,end:a})}catch(e){n=!1}return n}function Be(e,t){var r="undefined"!=typeof window?window:global;r.__localeData__||(r.__localeData__={}),r.__localeData__[e]=t}function je(e){("undefined"!=typeof window?window:global).__localeId__=e}function Ke(){return("undefined"!=typeof window?window:global).__localeId__}function He(e){if("string"==typeof e){var t="undefined"!=typeof window?window:global;return t.__localeData__?t.__localeData__[e]:null}return e}function Qe(e,t){return Se(Object(setMonth.a)(be(),e),"LLLL",t)}function Ve(e,t){return Se(Object(setMonth.a)(be(),e),"LLL",t)}function qe(e,t){return Se(Object(setQuarter.a)(be(),e),"QQQ",t)}function Ue(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return et(e,{minDate:r,maxDate:n})||o&&o.some((function(t){return Re(e,t)}))||a&&!a.some((function(t){return Re(e,t)}))||s&&!s(be(e))||!1}function $e(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.excludeDates;return r&&r.some((function(t){return Re(e,t)}))||!1}function ze(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return et(e,{minDate:r,maxDate:n})||o&&o.some((function(t){return Le(e,t)}))||a&&!a.some((function(t){return Le(e,t)}))||s&&!s(be(e))||!1}function Ge(e,t,r,n){var o=Object(getYear.a)(e),a=Object(getMonth.a)(e),s=Object(getYear.a)(t),p=Object(getMonth.a)(t),i=Object(getYear.a)(n);return o===s&&o===i?a<=r&&r<=p:o=r||io:void 0}function Je(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=t.excludeDates,a=t.includeDates,s=t.filterDate;return et(e,{minDate:r,maxDate:n})||o&&o.some((function(t){return Fe(e,t)}))||a&&!a.some((function(t){return Fe(e,t)}))||s&&!s(be(e))||!1}function Xe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate,o=new Date(e,0,1);return et(o,{minDate:r,maxDate:n})||!1}function Ze(e,t,r,n){var o=Object(getYear.a)(e),a=Object(getQuarter.a)(e),s=Object(getYear.a)(t),p=Object(getQuarter.a)(t),i=Object(getYear.a)(n);return o===s&&o===i?a<=r&&r<=p:o=r||io:void 0}function et(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.maxDate;return r&&Object(differenceInCalendarDays.a)(e,r)<0||n&&Object(differenceInCalendarDays.a)(e,n)>0}function tt(e,t){for(var r=t.length,n=0;n1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,o=Object(subMonths.a)(e,1);return r&&Object(differenceInCalendarMonths.a)(r,o)>0||n&&n.every((function(e){return Object(differenceInCalendarMonths.a)(e,o)>0}))||!1}function ot(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,o=Object(addMonths.a)(e,1);return r&&Object(differenceInCalendarMonths.a)(o,r)>0||n&&n.every((function(e){return Object(differenceInCalendarMonths.a)(o,e)>0}))||!1}function at(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=t.includeDates,o=Object(subYears.a)(e,1);return r&&Object(differenceInCalendarYears.a)(r,o)>0||n&&n.every((function(e){return Object(differenceInCalendarYears.a)(e,o)>0}))||!1}function st(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=t.includeDates,o=Object(addYears.a)(e,1);return r&&Object(differenceInCalendarYears.a)(o,r)>0||n&&n.every((function(e){return Object(differenceInCalendarYears.a)(o,e)>0}))||!1}function pt(e){var t=e.minDate,r=e.includeDates;if(r&&t){var n=r.filter((function(e){return Object(differenceInCalendarDays.a)(e,t)>=0}));return Object(min.a)(n)}return r?Object(min.a)(r):t}function it(e){var t=e.maxDate,r=e.includeDates;if(r&&t){var n=r.filter((function(e){return Object(differenceInCalendarDays.a)(e,t)<=0}));return Object(max.a)(n)}return r?Object(max.a)(r):t}function ct(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"react-datepicker__day--highlighted",n=new Map,o=0,a=e.length;o=s),p&&o.push(s)}return o}var mt=react_onclickoutside_es(function(r){ue(o,react_default.a.Component);var n=ye(o);function o(t){var r;ae(this,o),ie(fe(r=n.call(this,t)),"renderOptions",(function(){var t=r.props.year,n=r.state.yearsList.map((function(n){return react_default.a.createElement("div",{className:t===n?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:n,onClick:r.onChange.bind(fe(r),n)},t===n?react_default.a.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",n)})),o=r.props.minDate?Object(getYear.a)(r.props.minDate):null,a=r.props.maxDate?Object(getYear.a)(r.props.maxDate):null;return a&&r.state.yearsList.find((function(e){return e===a}))||n.unshift(react_default.a.createElement("div",{className:"react-datepicker__year-option",key:"upcoming",onClick:r.incrementYears},react_default.a.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),o&&r.state.yearsList.find((function(e){return e===o}))||n.push(react_default.a.createElement("div",{className:"react-datepicker__year-option",key:"previous",onClick:r.decrementYears},react_default.a.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),n})),ie(fe(r),"onChange",(function(e){r.props.onChange(e)})),ie(fe(r),"handleClickOutside",(function(){r.props.onCancel()})),ie(fe(r),"shiftYears",(function(e){var t=r.state.yearsList.map((function(t){return t+e}));r.setState({yearsList:t})})),ie(fe(r),"incrementYears",(function(){return r.shiftYears(1)})),ie(fe(r),"decrementYears",(function(){return r.shiftYears(-1)}));var a=t.yearDropdownItemNumber,s=t.scrollableYearDropdown,p=a||(s?10:5);return r.state={yearsList:ht(r.props.year,p,r.props.minDate,r.props.maxDate)},r}return pe(o,[{key:"render",value:function(){var r=classnames_default()({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return react_default.a.createElement("div",{className:r},this.renderOptions())}}]),o}()),ft=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(){var t;ae(this,n);for(var o=arguments.length,a=new Array(o),s=0;s0&&void 0!==arguments[0]?arguments[0]:{},t=!1;0===r.getTabIndex()&&!e.isInputFocused&&r.isSameDay(r.props.preSelection)&&(document.activeElement&&document.activeElement!==document.body||(t=!0),r.props.containerRef&&r.props.containerRef.current&&r.props.containerRef.current.contains(document.activeElement)&&document.activeElement.classList.contains("react-datepicker__day")&&(t=!0)),t&&r.dayEl.current.focus({preventScroll:!0})})),ie(fe(r),"render",(function(){return react_default.a.createElement("div",{ref:r.dayEl,className:r.getClassNames(r.props.day),onKeyDown:r.handleOnKeyDown,onClick:r.handleClick,onMouseEnter:r.handleMouseEnter,tabIndex:r.getTabIndex(),"aria-label":r.getAriaLabel(),role:"button","aria-disabled":r.isDisabled()},r.props.renderDayContents?r.props.renderDayContents(Object(getDate.a)(r.props.day),r.props.day):Object(getDate.a)(r.props.day))})),r}return pe(o,[{key:"componentDidMount",value:function(){this.handleFocusDay()}},{key:"componentDidUpdate",value:function(e){this.handleFocusDay(e)}}]),o}(),bt=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(){var e;ae(this,o);for(var t=arguments.length,r=new Array(t),a=0;a=6,c=!n&&!r.isWeekInMonth(o);if(p||c){if(!r.props.peekNextMonth)break;s=!0}}return t})),ie(fe(r),"onMonthClick",(function(e,t){r.handleDayClick(xe(Object(setMonth.a)(r.props.day,t)),e)})),ie(fe(r),"onQuarterClick",(function(e,t){r.handleDayClick(Te(Object(setQuarter.a)(r.props.day,t)),e)})),ie(fe(r),"getMonthClassNames",(function(e){var n=r.props,o=n.day,a=n.startDate,s=n.endDate,p=n.selected,i=n.minDate,c=n.maxDate;return classnames_default()("react-datepicker__month-text","react-datepicker__month-".concat(e),{"react-datepicker__month--disabled":(i||c)&&ze(Object(setMonth.a)(o,e),r.props),"react-datepicker__month--selected":Object(getMonth.a)(o)===e&&Object(getYear.a)(o)===Object(getYear.a)(p),"react-datepicker__month--in-range":Ge(a,s,e,o),"react-datepicker__month--range-start":r.isRangeStartMonth(e),"react-datepicker__month--range-end":r.isRangeEndMonth(e)})})),ie(fe(r),"getQuarterClassNames",(function(e){var n=r.props,o=n.day,a=n.startDate,s=n.endDate,p=n.selected,i=n.minDate,c=n.maxDate;return classnames_default()("react-datepicker__quarter-text","react-datepicker__quarter-".concat(e),{"react-datepicker__quarter--disabled":(i||c)&&Je(Object(setQuarter.a)(o,e),r.props),"react-datepicker__quarter--selected":Object(getQuarter.a)(o)===e&&Object(getYear.a)(o)===Object(getYear.a)(p),"react-datepicker__quarter--in-range":Ze(a,s,e,o),"react-datepicker__quarter--range-start":r.isRangeStartQuarter(e),"react-datepicker__quarter--range-end":r.isRangeEndQuarter(e)})})),ie(fe(r),"renderMonths",(function(){var t=r.props,n=t.showFullMonthYearPicker,o=t.showTwoColumnMonthYearPicker,a=t.locale;return(o?[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11]]:[[0,1,2],[3,4,5],[6,7,8],[9,10,11]]).map((function(t,o){return react_default.a.createElement("div",{className:"react-datepicker__month-wrapper",key:o},t.map((function(t,o){return react_default.a.createElement("div",{key:o,onClick:function(e){r.onMonthClick(e,t)},className:r.getMonthClassNames(t)},n?Qe(t,a):Ve(t,a))})))}))})),ie(fe(r),"renderQuarters",(function(){return react_default.a.createElement("div",{className:"react-datepicker__quarter-wrapper"},[1,2,3,4].map((function(t,n){return react_default.a.createElement("div",{key:n,onClick:function(e){r.onQuarterClick(e,t)},className:r.getQuarterClassNames(t)},qe(t,r.props.locale))})))})),ie(fe(r),"getClassNames",(function(){var e=r.props,n=e.selectingDate,o=e.selectsStart,a=e.selectsEnd,s=e.showMonthYearPicker,p=e.showQuarterYearPicker;return classnames_default()("react-datepicker__month",{"react-datepicker__month--selecting-range":n&&(o||a)},{"react-datepicker__monthPicker":s},{"react-datepicker__quarterPicker":p})})),r}return pe(o,[{key:"render",value:function(){var t=this.props,r=t.showMonthYearPicker,n=t.showQuarterYearPicker,o=t.day,a=t.ariaLabelPrefix,s=void 0===a?"month ":a;return react_default.a.createElement("div",{className:this.getClassNames(),onMouseLeave:this.handleMouseLeave,"aria-label":"".concat(s," ").concat(Se(o,"yyyy-MM"))},r?this.renderMonths():n?this.renderQuarters():this.renderWeeks())}}]),o}(),St=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(){var t;ae(this,n);for(var o=arguments.length,s=new Array(o),p=0;p=Object(getMinutes.a)(r)?t.centerLi=e:t.centerLi||u.indexOf(r)!==u.length-1||(t.centerLi=e))}},Se(r,n,t.props.locale))}))})),t}return pe(n,[{key:"componentDidMount",value:function(){this.list.scrollTop=n.calcCenterPosition(this.props.monthRef?this.props.monthRef.clientHeight-this.header.clientHeight:this.list.clientHeight,this.centerLi),this.props.monthRef&&this.header&&this.setState({height:this.props.monthRef.clientHeight-this.header.clientHeight})}},{key:"render",value:function(){var t=this,r=this.state.height;return react_default.a.createElement("div",{className:"react-datepicker__time-container ".concat(this.props.todayButton?"react-datepicker__time-container--with-today-button":"")},react_default.a.createElement("div",{className:"react-datepicker__header react-datepicker__header--time",ref:function(e){t.header=e}},react_default.a.createElement("div",{className:"react-datepicker-time__header"},this.props.timeCaption)),react_default.a.createElement("div",{className:"react-datepicker__time"},react_default.a.createElement("div",{className:"react-datepicker__time-box"},react_default.a.createElement("ul",{className:"react-datepicker__time-list",ref:function(e){t.list=e},style:r?{height:r}:{}},this.renderTimes()))))}}],[{key:"defaultProps",get:function(){return{intervals:30,onTimeChange:function(){},todayButton:null,timeCaption:"Time"}}}]),n}();ie(St,"calcCenterPosition",(function(e,t){return t.offsetTop-(e/2-t.clientHeight/2)}));var Mt=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(e){var r;return ae(this,o),ie(fe(r=n.call(this,e)),"handleYearClick",(function(e,t){r.props.onDayClick&&r.props.onDayClick(e,t)})),ie(fe(r),"isSameDay",(function(e,t){return Re(e,t)})),ie(fe(r),"isKeyboardSelected",(function(e){var t=Ye(Object(setYear.a)(r.props.date,e));return!r.props.disabledKeyboardNavigation&&!r.props.inline&&!Re(t,Ye(r.props.selected))&&Re(t,Ye(r.props.preSelection))})),ie(fe(r),"onYearClick",(function(e,t){var n=r.props.date;r.handleYearClick(Ye(Object(setYear.a)(n,t)),e)})),ie(fe(r),"getYearClassNames",(function(e){var n=r.props,o=n.minDate,a=n.maxDate,s=n.selected;return classnames_default()("react-datepicker__year-text",{"react-datepicker__year-text--selected":e===Object(getYear.a)(s),"react-datepicker__year-text--disabled":(o||a)&&Xe(e,r.props),"react-datepicker__year-text--keyboard-selected":r.isKeyboardSelected(e)})})),r}return pe(o,[{key:"render",value:function(){for(var t=this,r=[],n=ut(this.props.date),o=n.startPeriod,a=n.endPeriod,s=function(n){r.push(react_default.a.createElement("div",{onClick:function(e){t.onYearClick(e,n)},className:t.getYearClassNames(n),key:n},n))},p=o;p<=a;p++)s(p);return react_default.a.createElement("div",{className:"react-datepicker__year"},react_default.a.createElement("div",{className:"react-datepicker__year-wrapper"},r))}}]),o}(),Pt=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(t){var o;return ae(this,n),ie(fe(o=r.call(this,t)),"onTimeChange",(function(e){o.setState({time:e});var t=new Date;t.setHours(e.split(":")[0]),t.setMinutes(e.split(":")[1]),o.props.onChange(t)})),ie(fe(o),"renderTimeInput",(function(){var t=o.state.time,r=o.props,n=r.timeString,a=r.customTimeInput;return a?react_default.a.cloneElement(a,{value:t,onChange:o.onTimeChange}):react_default.a.createElement("input",{type:"time",className:"react-datepicker-time__input",placeholder:"Time",name:"time-input",required:!0,value:t,onChange:function(e){o.onTimeChange(e.target.value||n)}})})),o.state={time:o.props.timeString},o}return pe(n,[{key:"render",value:function(){return react_default.a.createElement("div",{className:"react-datepicker__input-time-container"},react_default.a.createElement("div",{className:"react-datepicker-time__caption"},this.props.timeInputLabel),react_default.a.createElement("div",{className:"react-datepicker-time__input-container"},react_default.a.createElement("div",{className:"react-datepicker-time__input"},this.renderTimeInput())))}}]),n}();function Et(t){var r=t.className,n=t.children,o=t.showPopperArrow,a=t.arrowProps,s=void 0===a?{}:a;return react_default.a.createElement("div",{className:r},o&&react_default.a.createElement("div",ce({className:"react-datepicker__triangle"},s)),n)}var Nt=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Ot=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(r){var a;return ae(this,o),ie(fe(a=n.call(this,r)),"handleClickOutside",(function(e){a.props.onClickOutside(e)})),ie(fe(a),"setClickOutsideRef",(function(){return a.containerRef.current})),ie(fe(a),"handleDropdownFocus",(function(e){(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=(e.className||"").split(/\s+/);return Nt.some((function(e){return t.indexOf(e)>=0}))})(e.target)&&a.props.onDropdownFocus()})),ie(fe(a),"getDateInView",(function(){var e=a.props,t=e.preSelection,r=e.selected,n=e.openToDate,o=pt(a.props),s=it(a.props),p=be();return n||r||t||(o&&Object(isBefore.a)(p,o)?o:s&&Object(isAfter.a)(p,s)?s:p)})),ie(fe(a),"increaseMonth",(function(){a.setState((function(e){var t=e.date;return{date:Object(addMonths.a)(t,1)}}),(function(){return a.handleMonthChange(a.state.date)}))})),ie(fe(a),"decreaseMonth",(function(){a.setState((function(e){var t=e.date;return{date:Object(subMonths.a)(t,1)}}),(function(){return a.handleMonthChange(a.state.date)}))})),ie(fe(a),"handleDayClick",(function(e,t,r){return a.props.onSelect(e,t,r)})),ie(fe(a),"handleDayMouseEnter",(function(e){a.setState({selectingDate:e}),a.props.onDayMouseEnter&&a.props.onDayMouseEnter(e)})),ie(fe(a),"handleMonthMouseLeave",(function(){a.setState({selectingDate:null}),a.props.onMonthMouseLeave&&a.props.onMonthMouseLeave()})),ie(fe(a),"handleYearChange",(function(e){a.props.onYearChange&&a.props.onYearChange(e),a.props.adjustDateOnChange&&(a.props.onSelect&&a.props.onSelect(e),a.props.setOpen&&a.props.setOpen(!0)),a.props.setPreSelection&&a.props.setPreSelection(e)})),ie(fe(a),"handleMonthChange",(function(e){a.props.onMonthChange&&a.props.onMonthChange(e),a.props.adjustDateOnChange&&(a.props.onSelect&&a.props.onSelect(e),a.props.setOpen&&a.props.setOpen(!0)),a.props.setPreSelection&&a.props.setPreSelection(e)})),ie(fe(a),"handleMonthYearChange",(function(e){a.handleYearChange(e),a.handleMonthChange(e)})),ie(fe(a),"changeYear",(function(e){a.setState((function(t){var r=t.date;return{date:Object(setYear.a)(r,e)}}),(function(){return a.handleYearChange(a.state.date)}))})),ie(fe(a),"changeMonth",(function(e){a.setState((function(t){var r=t.date;return{date:Object(setMonth.a)(r,e)}}),(function(){return a.handleMonthChange(a.state.date)}))})),ie(fe(a),"changeMonthYear",(function(e){a.setState((function(t){var r=t.date;return{date:Object(setYear.a)(Object(setMonth.a)(r,Object(getMonth.a)(e)),Object(getYear.a)(e))}}),(function(){return a.handleMonthYearChange(a.state.date)}))})),ie(fe(a),"header",(function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.state.date,n=Oe(r,a.props.locale),o=[];return a.props.showWeekNumbers&&o.push(react_default.a.createElement("div",{key:"W",className:"react-datepicker__day-name"},a.props.weekLabel||"#")),o.concat([0,1,2,3,4,5,6].map((function(r){var o=Object(addDays.a)(n,r),s=a.formatWeekday(o,a.props.locale),i=a.props.weekDayClassName?a.props.weekDayClassName(o):void 0;return react_default.a.createElement("div",{key:r,className:classnames_default()("react-datepicker__day-name",i)},s)})))})),ie(fe(a),"formatWeekday",(function(e,t){return a.props.formatWeekDay?function(e,t,r){return t(Se(e,"EEEE",r))}(e,a.props.formatWeekDay,t):a.props.useWeekdaysShort?function(e,t){return Se(e,"EEE",t)}(e,t):function(e,t){return Se(e,"EEEEEE",t)}(e,t)})),ie(fe(a),"decreaseYear",(function(){a.setState((function(e){var t=e.date;return{date:Object(subYears.a)(t,a.props.showYearPicker?12:1)}}),(function(){return a.handleYearChange(a.state.date)}))})),ie(fe(a),"renderPreviousButton",(function(){if(!a.props.renderCustomHeader){var t;switch(!0){case a.props.showMonthYearPicker:t=at(a.state.date,a.props);break;case a.props.showYearPicker:t=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.minDate,n=Ye(Object(subYears.a)(e,12)),o=ut(n),a=o.startPeriod,s=o.endPeriod,p=r&&Object(getYear.a)(r);return p&&(ps)||!1}(a.state.date,a.props);break;default:t=nt(a.state.date,a.props)}if((a.props.forceShowMonthNavigation||a.props.showDisabledMonthNavigation||!t)&&!a.props.showTimeSelectOnly){var r=["react-datepicker__navigation","react-datepicker__navigation--previous"],n=a.decreaseMonth;(a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker)&&(n=a.decreaseYear),t&&a.props.showDisabledMonthNavigation&&(r.push("react-datepicker__navigation--previous--disabled"),n=null);var o=a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker,s=a.props,p=s.previousMonthAriaLabel,i=void 0===p?"Previous Month":p,c=s.previousYearAriaLabel,l=void 0===c?"Previous Year":c;return react_default.a.createElement("button",{type:"button",className:r.join(" "),onClick:n,"aria-label":o?l:i},o?a.props.previousYearButtonLabel:a.props.previousMonthButtonLabel)}}})),ie(fe(a),"increaseYear",(function(){a.setState((function(e){var t=e.date;return{date:Object(addYears.a)(t,a.props.showYearPicker?12:1)}}),(function(){return a.handleYearChange(a.state.date)}))})),ie(fe(a),"renderNextButton",(function(){if(!a.props.renderCustomHeader){var t;switch(!0){case a.props.showMonthYearPicker:t=st(a.state.date,a.props);break;case a.props.showYearPicker:t=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.maxDate,n=Object(addYears.a)(e,12),o=ut(n),a=o.startPeriod,s=o.endPeriod,p=r&&Object(getYear.a)(r);return p&&(ps)||!1}(a.state.date,a.props);break;default:t=ot(a.state.date,a.props)}if((a.props.forceShowMonthNavigation||a.props.showDisabledMonthNavigation||!t)&&!a.props.showTimeSelectOnly){var r=["react-datepicker__navigation","react-datepicker__navigation--next"];a.props.showTimeSelect&&r.push("react-datepicker__navigation--next--with-time"),a.props.todayButton&&r.push("react-datepicker__navigation--next--with-today-button");var n=a.increaseMonth;(a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker)&&(n=a.increaseYear),t&&a.props.showDisabledMonthNavigation&&(r.push("react-datepicker__navigation--next--disabled"),n=null);var o=a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker,s=a.props,p=s.nextMonthAriaLabel,i=void 0===p?"Next Month":p,c=s.nextYearAriaLabel,d=void 0===c?"Next Year":c;return react_default.a.createElement("button",{type:"button",className:r.join(" "),onClick:n,"aria-label":o?d:i},o?a.props.nextYearButtonLabel:a.props.nextMonthButtonLabel)}}})),ie(fe(a),"renderCurrentMonth",(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:a.state.date,r=["react-datepicker__current-month"];return a.props.showYearDropdown&&r.push("react-datepicker__current-month--hasYearDropdown"),a.props.showMonthDropdown&&r.push("react-datepicker__current-month--hasMonthDropdown"),a.props.showMonthYearDropdown&&r.push("react-datepicker__current-month--hasMonthYearDropdown"),react_default.a.createElement("div",{className:r.join(" ")},Se(t,a.props.dateFormat,a.props.locale))})),ie(fe(a),"renderYearDropdown",(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showYearDropdown&&!t)return react_default.a.createElement(ft,{adjustDateOnChange:a.props.adjustDateOnChange,date:a.state.date,onSelect:a.props.onSelect,setOpen:a.props.setOpen,dropdownMode:a.props.dropdownMode,onChange:a.changeYear,minDate:a.props.minDate,maxDate:a.props.maxDate,year:Object(getYear.a)(a.state.date),scrollableYearDropdown:a.props.scrollableYearDropdown,yearDropdownItemNumber:a.props.yearDropdownItemNumber})})),ie(fe(a),"renderMonthDropdown",(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showMonthDropdown&&!t)return react_default.a.createElement(yt,{dropdownMode:a.props.dropdownMode,locale:a.props.locale,onChange:a.changeMonth,month:Object(getMonth.a)(a.state.date),useShortMonthInDropdown:a.props.useShortMonthInDropdown})})),ie(fe(a),"renderMonthYearDropdown",(function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(a.props.showMonthYearDropdown&&!t)return react_default.a.createElement(kt,{dropdownMode:a.props.dropdownMode,locale:a.props.locale,dateFormat:a.props.dateFormat,onChange:a.changeMonthYear,minDate:a.props.minDate,maxDate:a.props.maxDate,date:a.state.date,scrollableMonthYearDropdown:a.props.scrollableMonthYearDropdown})})),ie(fe(a),"renderTodayButton",(function(){if(a.props.todayButton&&!a.props.showTimeSelectOnly)return react_default.a.createElement("div",{className:"react-datepicker__today-button",onClick:function(e){return a.props.onSelect(Object(startOfDay.a)(be()),e)}},a.props.todayButton)})),ie(fe(a),"renderDefaultHeader",(function(t){var r=t.monthDate,n=t.i;return react_default.a.createElement("div",{className:"react-datepicker__header"},a.renderCurrentMonth(r),react_default.a.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(a.props.dropdownMode),onFocus:a.handleDropdownFocus},a.renderMonthDropdown(0!==n),a.renderMonthYearDropdown(0!==n),a.renderYearDropdown(0!==n)),react_default.a.createElement("div",{className:"react-datepicker__day-names"},a.header(r)))})),ie(fe(a),"renderCustomHeader",(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.monthDate,n=t.i;if(0!==n&&void 0!==n)return null;var o=nt(a.state.date,a.props),s=ot(a.state.date,a.props),p=at(a.state.date,a.props),i=st(a.state.date,a.props),c=!a.props.showMonthYearPicker&&!a.props.showQuarterYearPicker&&!a.props.showYearPicker;return react_default.a.createElement("div",{className:"react-datepicker__header react-datepicker__header--custom",onFocus:a.props.onDropdownFocus},a.props.renderCustomHeader(de(de({},a.state),{},{changeMonth:a.changeMonth,changeYear:a.changeYear,decreaseMonth:a.decreaseMonth,increaseMonth:a.increaseMonth,decreaseYear:a.decreaseYear,increaseYear:a.increaseYear,prevMonthButtonDisabled:o,nextMonthButtonDisabled:s,prevYearButtonDisabled:p,nextYearButtonDisabled:i})),c&&react_default.a.createElement("div",{className:"react-datepicker__day-names"},a.header(r)))})),ie(fe(a),"renderYearHeader",(function(){var t=a.state.date,r=a.props.showYearPicker,n=ut(t),o=n.startPeriod,s=n.endPeriod;return react_default.a.createElement("div",{className:"react-datepicker__header react-datepicker-year-header"},r?"".concat(o," - ").concat(s):Object(getYear.a)(t))})),ie(fe(a),"renderHeader",(function(e){switch(!0){case void 0!==a.props.renderCustomHeader:return a.renderCustomHeader(e);case a.props.showMonthYearPicker||a.props.showQuarterYearPicker||a.props.showYearPicker:return a.renderYearHeader(e);default:return a.renderDefaultHeader(e)}})),ie(fe(a),"renderMonths",(function(){if(!a.props.showTimeSelectOnly&&!a.props.showYearPicker){for(var t=[],r=a.props.showPreviousMonths?a.props.monthsShown-1:0,n=Object(subMonths.a)(a.state.date,r),o=0;o1&&t[t.length-1].focus()})),ie(fe(o),"handleFocusEnd",(function(e){var t=o.getTabChildren();t&&t.length>1&&t[0].focus()})),o.tabLoopRef=react_default.a.createRef(),o}return pe(n,null,[{key:"defaultProps",get:function(){return{enableTabLoop:!0}}}]),pe(n,[{key:"render",value:function(){return this.props.enableTabLoop?react_default.a.createElement("div",{className:"react-datepicker__tab-loop",ref:this.tabLoopRef},react_default.a.createElement("div",{className:"react-datepicker__tab-loop__start",tabIndex:"0",onFocus:this.handleFocusStart}),this.props.children,react_default.a.createElement("div",{className:"react-datepicker__tab-loop__end",tabIndex:"0",onFocus:this.handleFocusEnd})):this.props.children}}]),n}(),Tt=function(t){ue(n,react_default.a.Component);var r=ye(n);function n(e){var t;return ae(this,n),(t=r.call(this,e)).el=document.createElement("div"),t}return pe(n,[{key:"componentDidMount",value:function(){this.portalRoot=document.getElementById(this.props.portalId),this.portalRoot||(this.portalRoot=document.createElement("div"),this.portalRoot.setAttribute("id",this.props.portalId),document.body.appendChild(this.portalRoot)),this.portalRoot.appendChild(this.el)}},{key:"componentWillUnmount",value:function(){this.portalRoot.removeChild(this.el)}},{key:"render",value:function(){return react_dom_default.a.createPortal(this.props.children,this.el)}}]),n}(),It=function(r){ue(o,react_default.a.Component);var n=ye(o);function o(){return ae(this,o),n.apply(this,arguments)}return pe(o,[{key:"render",value:function(){var r,n=this.props,o=n.className,a=n.wrapperClassName,s=n.hidePopper,p=n.popperComponent,i=n.popperModifiers,c=n.popperPlacement,l=n.popperProps,d=n.targetComponent,u=n.enableTabLoop,h=n.popperOnKeyDown,m=n.portalId;if(!s){var f=classnames_default()("react-datepicker-popper",o);r=react_default.a.createElement(Popper_Popper,ce({modifiers:i,placement:c},l),(function(t){var r=t.ref,n=t.style,o=t.placement,a=t.arrowProps;return react_default.a.createElement(Yt,{enableTabLoop:u},react_default.a.createElement("div",ce({ref:r,style:n},{className:f,"data-placement":o,onKeyDown:h}),react_default.a.cloneElement(p,{arrowProps:a})))}))}this.props.popperContainer&&(r=react_default.a.createElement(this.props.popperContainer,{},r)),m&&!s&&(r=react_default.a.createElement(Tt,{portalId:m},r));var v=classnames_default()("react-datepicker-wrapper",a);return react_default.a.createElement(Manager_Manager,{className:"react-datepicker-manager"},react_default.a.createElement(Reference,null,(function(t){var r=t.ref;return react_default.a.createElement("div",{ref:r,className:v},d)})),r)}}],[{key:"defaultProps",get:function(){return{hidePopper:!0,popperModifiers:{preventOverflow:{enabled:!0,escapeWithReference:!0,boundariesElement:"viewport"}},popperProps:{},popperPlacement:"bottom-start"}}}]),o}(),Lt=react_onclickoutside_es(Ot),Ft=function(n){ue(a,react_default.a.Component);var o=ye(a);function a(n){var s;return ae(this,a),ie(fe(s=o.call(this,n)),"getPreSelection",(function(){return s.props.openToDate?s.props.openToDate:s.props.selectsEnd&&s.props.startDate?s.props.startDate:s.props.selectsStart&&s.props.endDate?s.props.endDate:be()})),ie(fe(s),"calcInitialState",(function(){var e=s.getPreSelection(),t=pt(s.props),r=it(s.props),n=t&&Object(isBefore.a)(e,t)?t:r&&Object(isAfter.a)(e,r)?r:e;return{open:s.props.startOpen||!1,preventFocus:!1,preSelection:s.props.selected?s.props.selected:n,highlightDates:ct(s.props.highlightDates),focused:!1}})),ie(fe(s),"clearPreventFocusTimeout",(function(){s.preventFocusTimeout&&clearTimeout(s.preventFocusTimeout)})),ie(fe(s),"setFocus",(function(){s.input&&s.input.focus&&s.input.focus({preventScroll:!0})})),ie(fe(s),"setBlur",(function(){s.input&&s.input.blur&&s.input.blur(),s.cancelFocusInput()})),ie(fe(s),"setOpen",(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];s.setState({open:e,preSelection:e&&s.state.open?s.state.preSelection:s.calcInitialState().preSelection,lastPreSelectChange:Wt},(function(){e||s.setState((function(e){return{focused:!!t&&e.focused}}),(function(){!t&&s.setBlur(),s.setState({inputValue:null})}))}))})),ie(fe(s),"inputOk",(function(){return Object(isDate.a)(s.state.preSelection)})),ie(fe(s),"isCalendarOpen",(function(){return void 0===s.props.open?s.state.open&&!s.props.disabled&&!s.props.readOnly:s.props.open})),ie(fe(s),"handleFocus",(function(e){s.state.preventFocus||(s.props.onFocus(e),s.props.preventOpenOnFocus||s.props.readOnly||s.setOpen(!0)),s.setState({focused:!0})})),ie(fe(s),"cancelFocusInput",(function(){clearTimeout(s.inputFocusTimeout),s.inputFocusTimeout=null})),ie(fe(s),"deferFocusInput",(function(){s.cancelFocusInput(),s.inputFocusTimeout=setTimeout((function(){return s.setFocus()}),1)})),ie(fe(s),"handleDropdownFocus",(function(){s.cancelFocusInput()})),ie(fe(s),"handleBlur",(function(e){(!s.state.open||s.props.withPortal||s.props.showTimeInput)&&s.props.onBlur(e),s.setState({focused:!1})})),ie(fe(s),"handleCalendarClickOutside",(function(e){s.props.inline||s.setOpen(!1),s.props.onClickOutside(e),s.props.withPortal&&e.preventDefault()})),ie(fe(s),"handleChange",(function(){for(var e=arguments.length,t=new Array(e),r=0;r