1 |
- {"remainingRequest":"D:\\test\\ssi-satoken\\ui\\node_modules\\babel-loader\\lib\\index.js!D:\\test\\ssi-satoken\\ui\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\test\\ssi-satoken\\ui\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\test\\ssi-satoken\\ui\\src\\views\\sysManager\\userManager\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\test\\ssi-satoken\\ui\\src\\views\\sysManager\\userManager\\index.vue","mtime":1696909835000},{"path":"D:\\test\\ssi-satoken\\ui\\babel.config.js","mtime":1696909835000},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1697005520931},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\babel-loader\\lib\\index.js","mtime":1697005523218},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1697005520931},{"path":"D:\\test\\ssi-satoken\\ui\\node_modules\\vue-loader\\lib\\index.js","mtime":1697005524089}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCJEOi90ZXN0L3NzaS1zYXRva2VuL3VpL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIpLmRlZmF1bHQ7Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsKICB2YWx1ZTogdHJ1ZQp9KTsKZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIpOwp2YXIgX3JlZ2VuZXJhdG9yUnVudGltZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoIkQ6L3Rlc3Qvc3NpLXNhdG9rZW4vdWkvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIikpOwp2YXIgX2FzeW5jVG9HZW5lcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCJEOi90ZXN0L3NzaS1zYXRva2VuL3VpL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3IuanMiKSk7CnZhciBfbG9kYXNoID0gcmVxdWlyZSgibG9kYXNoIik7CnZhciBfc211dGlsID0gcmVxdWlyZSgiQC91dGlscy9zbXV0aWwiKTsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KdmFyIF9kZWZhdWx0ID0gewogIG5hbWU6ICJVc2VyIiwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgcGlja2VyT3B0aW9uczogewogICAgICAgIGRpc2FibGVkRGF0ZTogZnVuY3Rpb24gZGlzYWJsZWREYXRlKHRpbWUpIHsKICAgICAgICAgIHJldHVybiB0aW1lLmdldFRpbWUoKSA8IERhdGUubm93KCkgLSA4LjY0ZTc7CiAgICAgICAgfQogICAgICB9LAogICAgICBzeXNSb2xlOiAnJywKICAgICAgaWQ6IHVuZGVmaW5lZCwKICAgICAgdXNlcm5hbWU6IHVuZGVmaW5lZCwKICAgICAgbmlja25hbWU6IHVuZGVmaW5lZCwKICAgICAgaWRjYXJkOiB1bmRlZmluZWQsCiAgICAgIHBob25lbnVtYmVyOiB1bmRlZmluZWQsCiAgICAgIG1haWxib3g6IHVuZGVmaW5lZCwKICAgICAgc3RhdHVzOiAiMCIsCiAgICAgIHVzZXJ0eXBlOiAiMCIsCiAgICAgIHJlbWFyazogdW5kZWZpbmVkLAogICAgICBleHBEYXRlOiB1bmRlZmluZWQsCiAgICAgIC8vIOinkuiJsuihqOagvOaVsOaNrgogICAgICBqc3VzZXJpZDogJycsCiAgICAgIHJvbGVMaXN0OiBbXSwKICAgICAganN1c2VybmFtZTogJycsCiAgICAgIGpzbmlja25hbWU6ICcnLAogICAgICB1c2VyUm9sZUlkOiAnJywKICAgICAganN1c2VydHlwZTogJycsCiAgICAgIHN0YXR1c09wdGlvbnM6IFt7CiAgICAgICAgdmFsdWU6ICcwJywKICAgICAgICBsYWJlbDogJ+ato+W4uCcKICAgICAgfSwgewogICAgICAgIHZhbHVlOiAnMScsCiAgICAgICAgbGFiZWw6ICfplIHlrponCiAgICAgIH0sIHsKICAgICAgICB2YWx1ZTogJzInLAogICAgICAgIGxhYmVsOiAn5rOo6ZSAJwogICAgICB9XSwKICAgICAgdHlwZU9wdGlvbnM6IFt7CiAgICAgICAgdmFsdWU6ICcwJywKICAgICAgICBsYWJlbDogJ+euoeeQhuWRmCcKICAgICAgfSwgewogICAgICAgIHZhbHVlOiAnMScsCiAgICAgICAgbGFiZWw6ICfkuJrliqHnlKjmiLcnCiAgICAgIH1dLAogICAgICAvLyDpga7nvanlsYIKICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgc2hvd1RhYmxlOiB0cnVlLAogICAgICAvLyDpgInkuK3mlbDnu4QKICAgICAgaWRzOiBbXSwKICAgICAgLy8g6Z2e5Y2V5Liq56aB55SoCiAgICAgIHNpbmdsZTogdHJ1ZSwKICAgICAgLy8g6Z2e5aSa5Liq56aB55SoCiAgICAgIG11bHRpcGxlOiB0cnVlLAogICAgICBjdXJyZW50UGFnZTogMSwKICAgICAgcGFnZVNpemU6IDEwLAogICAgICAvLyDmgLvmnaHmlbAKICAgICAgdG90YWw6IDAsCiAgICAgIC8vIOeUqOaIt+ihqOagvOaVsOaNrgogICAgICB1c2VyTGlzdDogW10sCiAgICAgIGxvY2t0aXRsZTogIumJtOWIq+aTjeS9nCIsCiAgICAgIC8vIOW8ueWHuuWxguagh+mimAogICAgICB0aXRsZTogIiIsCiAgICAgIC8vIOinkuiJsuWIhumFjeW8ueWHuuWxguagh+mimAogICAgICBqc3RpdGxlOiAiIiwKICAgICAgLy8g5piv5ZCm5pi+56S65by55Ye65bGCCiAgICAgIG9wZW46IGZhbHNlLAogICAgICBsb2Nrb3BlbjogZmFsc2UsCiAgICAgIC8vIOinkuiJsuaYr+WQpuaYvuekuuW8ueWHuuWxggogICAgICBqc29wZW46IGZhbHNlLAogICAgICAvLyDpu5jorqTlr4bnoIEKICAgICAgaW5pdFBhc3N3b3JkOiB1bmRlZmluZWQsCiAgICAgIC8vIOinkuiJsumAiemhuQogICAgICByb2xlT3B0aW9uczogW10sCiAgICAgIC8vIOihqOWNleWPguaVsAogICAgICBmb3JtOiB7fSwKICAgICAgbG9ja2Zvcm06IHt9LAogICAgICAvLyDmn6Xor6Llj4LmlbAKICAgICAgcXVlcnlQYXJhbXM6IHsKICAgICAgICB1c2VybmFtZTogdW5kZWZpbmVkLAogICAgICAgIHBob25lbnVtYmVyOiB1bmRlZmluZWQsCiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQKICAgICAgfSwKICAgICAgbWVudUV4cGFuZDogZmFsc2UsCiAgICAgIC8vIOiPnOWNleWIl+ihqAogICAgICBtZW51T3B0aW9uczogW10sCiAgICAgIGRlZmF1bHRQcm9wczogewogICAgICAgIGNoaWxkcmVuOiAiY2hpbGRyZW4iLAogICAgICAgIGxhYmVsOiAibGFiZWwiCiAgICAgIH0sCiAgICAgIGVkaXQ6IGZhbHNlLAogICAgICAvLyDooajljZXmoKHpqowKICAgICAgcnVsZXM6IHsKICAgICAgICB1c2VybmFtZTogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIueUqOaIt+i0puWPt+S4jeiDveS4uuepuiIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9LCB7CiAgICAgICAgICBtaW46IDUsCiAgICAgICAgICBtYXg6IDIwLAogICAgICAgICAgbWVzc2FnZTogJ+eUqOaIt+i0puWPt+mVv+W6puW/hemhu+S7i+S6jiA1IOWSjCAyMCDkuYvpl7QnLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0sCiAgICAgICAgbmlja25hbWU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLnlKjmiLflp5PlkI3kuI3og73kuLrnqboiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfSwgewogICAgICAgICAgbWluOiAyLAogICAgICAgICAgbWF4OiAzMCwKICAgICAgICAgIG1lc3NhZ2U6ICfnlKjmiLflp5PlkI3plb/luqblv4Xpobvku4vkuo4gMiDlkowgMzAg5LmL6Ze0JywKICAgICAgICAgIHRyaWdnZXI6ICdibHVyJwogICAgICAgIH1dLAogICAgICAgIGlkY2FyZDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogIui6q+S7veivgeWPt+eggeS4jeiDveS4uuepuiIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9LCB7CiAgICAgICAgICBtaW46IDE1LAogICAgICAgICAgbWF4OiAxOCwKICAgICAgICAgIG1lc3NhZ2U6ICfouqvku73or4Hlj7for7fovpPlhaUxNeS9jeaIluiAhTE45L2NJywKICAgICAgICAgIHRyaWdnZXI6ICdibHVyJwogICAgICAgIH1dLAogICAgICAgIG1haWxib3g6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLpgq7nrrHkuI3og73kuLrnqboiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfSwgewogICAgICAgICAgdHlwZTogImVtYWlsIiwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fovpPlhaXmraPnoa7nmoTpgq7nrrHlnLDlnYAiLAogICAgICAgICAgdHJpZ2dlcjogWyJibHVyIiwgImNoYW5nZSJdCiAgICAgICAgfV0sCiAgICAgICAgcGhvbmVudW1iZXI6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICLmiYvmnLrlj7fnoIHkuI3og73kuLrnqboiLAogICAgICAgICAgdHJpZ2dlcjogImJsdXIiCiAgICAgICAgfSwgewogICAgICAgICAgcGF0dGVybjogL14xWzN8NHw1fDZ8N3w4fDldWzAtOV1cZHs4fSQvLAogICAgICAgICAgbWVzc2FnZTogIuivt+i+k+WFpeato+ehrueahOaJi+acuuWPt+eggSIsCiAgICAgICAgICB0cmlnZ2VyOiAiYmx1ciIKICAgICAgICB9XQogICAgICB9CiAgICB9OwogIH0sCiAgd2F0Y2g6IHt9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICB0aGlzLmdldExpc3QoKTsKICAgIHRoaXMuZ2V0VXNlckJ5Um9sZSgpOwogIH0sCiAgbWV0aG9kczogewogICAgZ2V0VXNlckJ5Um9sZTogZnVuY3Rpb24gZ2V0VXNlckJ5Um9sZSgpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHJldHVybiAoMCwgX2FzeW5jVG9HZW5lcmF0b3IyLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBzeXNUaW1lMiwgbGsyLCBzZWFyY2hQYXJhbXMyOwogICAgICAgIHJldHVybiAoMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi4kYXhpb3MuZ2V0KCcvc3lzUG9saWN5Q29udHJvbGxlci9nZXRMaWNlbnNlS2V5JykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICBzeXNUaW1lMiA9IHJlcy5kYXRhLnN5c1RpbWU7CiAgICAgICAgICAgICAgICBsazIgPSByZXMuZGF0YS5sazsKICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHt9KTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHNlYXJjaFBhcmFtczIgPSB7CiAgICAgICAgICAgICAgICBzeXNUaW1lOiBzeXNUaW1lMiwKICAgICAgICAgICAgICAgIGxrOiBsazIKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA1OwogICAgICAgICAgICAgIHJldHVybiBfdGhpczIuJGF4aW9zLmdldCgnL3N5c1JvbGVDb250cm9sbGVyL2dldFVzZXJCeVJvbGUnLCB7CiAgICAgICAgICAgICAgICBwYXJhbXM6IHNlYXJjaFBhcmFtczIKICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIF90aGlzMi5zeXNSb2xlID0gcmVzLmRhdGE7CiAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7fSk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDmoJHmnYPpmZDvvIjlsZXlvIAv5oqY5Y+g77yJCiAgICBoYW5kbGVDaGVja2VkVHJlZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlQ2hlY2tlZFRyZWVFeHBhbmQodmFsdWUsIHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gJ21lbnUnKSB7CiAgICAgICAgdmFyIHRyZWVMaXN0ID0gdGhpcy5tZW51T3B0aW9uczsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWVMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB0aGlzLiRyZWZzLm1lbnUuc3RvcmUubm9kZXNNYXBbdHJlZUxpc3RbaV0uaWRdLmV4cGFuZGVkID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgc2V0Um93Q2xhc3M6IGZ1bmN0aW9uIHNldFJvd0NsYXNzKF9yZWYpIHsKICAgICAgdmFyIHJvdyA9IF9yZWYucm93LAogICAgICAgIHJvd0luZGV4ID0gX3JlZi5yb3dJbmRleDsKICAgICAgaWYgKHJvdy5zaWduc3RyID09PSAnMScpIHsKICAgICAgICByZXR1cm4gImJhY2tncm91bmQ6ICNGRkVGRDUiOwogICAgICB9CiAgICB9LAogICAgLy8g5rOo6ZSA5pON5L2cCiAgICBoYW5kbGVMb2dPZmY6IGZ1bmN0aW9uIGhhbmRsZUxvZ09mZigpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHZhciBfc2VsZWN0RGF0YSA9IHRoaXMuJHJlZnMudXNlclRhYmxlLmdldFJhZGlvUmVjb3JkKHRydWUpOwogICAgICBpZiAoX3NlbGVjdERhdGEgPT0gbnVsbCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+ivt+mAieaLqeiusOW9lSEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChfc2VsZWN0RGF0YS5pZCA9PSAxKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn5YaF572u57O757uf566h55CG5ZGY55So5oi35LiN6IO95rOo6ZSAIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKF9zZWxlY3REYXRhLmlkID09IDIpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflhoXnva7lrqHorqHnrqHnkIblkZjnlKjmiLfkuI3og73ms6jplIAhJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoX3NlbGVjdERhdGEuaWQgPT0gMjQpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflhoXnva7lrqHmoLjnrqHnkIblkZjnlKjmiLfkuI3og73ms6jplIAhJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoX3NlbGVjdERhdGEuc3RhdHVzID09IDIpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflt7Lms6jplIDnmoTotKblj7fkuI3og73lho3mrKHms6jplIAhJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoX3NlbGVjdERhdGEuc2lnbnN0ciA9PSAnMScpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflrZjlnKjlvoXlrqHmoLjvvIzlrqHmoLjnrqHnkIblkZjlrqHmoLjlkI7or7fliLfmlrDliJfooagnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuJHByb21wdCgn6K+36L6T5YWl55m75b2V5a+G56CBJywgJ+mJtOWIq+aTjeS9nCcsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgaW5wdXRUeXBlOiAncGFzc3dvcmQnLAogICAgICAgIC8vIGN1c3RvbUNsYXNzOiduby1hdXRvZmlsbC1wd2QnLAogICAgICAgIGlucHV0VmFsaWRhdG9yOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRvcih2YWwpIHsKICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsLmxlbmd0aCA8IDEgfHwgdmFsLmxlbmd0aCA+IDIwKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGlucHV0RXJyb3JNZXNzYWdlOiAn5LiN6IO95Li656m6LOacgOWkmuWPr+W9leWFpTIw5Liq5a2X56ymJywKICAgICAgICBiZWZvcmVDbG9zZTogZnVuY3Rpb24gYmVmb3JlQ2xvc2UoYWN0aW9uLCBpbnN0YW5jZSwgZG9uZSkgewogICAgICAgICAgaWYgKGFjdGlvbiA9PT0gImNvbmZpcm0iKSB7CiAgICAgICAgICAgIGluc3RhbmNlLiRyZWZzWyJjb25maXJtIl0uJGVsLm9uY2xpY2sgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgIT0gMCkgewogICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSkudGhlbiggLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IyLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMihfcmVmMikgewogICAgICAgICAgdmFyIHZhbHVlOwogICAgICAgICAgcmV0dXJuICgwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0MikgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgdmFsdWUgPSBfcmVmMi52YWx1ZTsKICAgICAgICAgICAgICAgIF90aGlzMy5kb0xvZ29mZihfc2VsZWN0RGF0YSwgdmFsdWUpOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeCkgewogICAgICAgICAgcmV0dXJuIF9yZWYzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgfSwKICAgIC8qKg0KICAgICAqIOazqOmUgOaPkOS6pA0KICAgICAqLwogICAgZG9Mb2dvZmY6ICgwLCBfbG9kYXNoLmRlYm91bmNlKSggLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgdmFyIF9yZWY0ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoX3NlbGVjdERhdGEsIGFnYWluUHdkKSB7CiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgICAgdmFyIHN5c1RpbWUsIGxrLCBwYXJhbTsKICAgICAgICByZXR1cm4gKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDI7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF4aW9zLmdldCgnL3N5c1BvbGljeUNvbnRyb2xsZXIvZ2V0TGljZW5zZUtleScpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgc3lzVGltZSA9IHJlcy5kYXRhLnN5c1RpbWU7CiAgICAgICAgICAgICAgICBsayA9IHJlcy5kYXRhLmxrOwogICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge30pOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgcGFyYW0gPSB7CiAgICAgICAgICAgICAgICBpZDogX3NlbGVjdERhdGEuaWQsCiAgICAgICAgICAgICAgICBhZ2FpblB3ZDogYWdhaW5Qd2QsCiAgICAgICAgICAgICAgICBzeXNUaW1lOiBzeXNUaW1lLAogICAgICAgICAgICAgICAgbGs6IGxrCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF4aW9zLnBvc3QoJy9zeXNVc2VyQ29udHJvbGxlci9sb2dPZmZVc2VyJywgcGFyYW0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDApIHsKICAgICAgICAgICAgICAgICAgX3RoaXM0LiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIF90aGlzNC5nZXRMaXN0KCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBfdGhpczQuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICAgICBfdGhpczQuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5Yig6Zmk5aSx6LSlIScKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgX3RoaXM0LmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUzLCB0aGlzKTsKICAgICAgfSkpOwogICAgICByZXR1cm4gZnVuY3Rpb24gKF94MiwgX3gzKSB7CiAgICAgICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICB9KCksIDUwMCksCiAgICAvLyDliJfooajnirbmgIHmoLzlvI/ljJYKICAgIHN0YXR1c0Zvcm1hdDogZnVuY3Rpb24gc3RhdHVzRm9ybWF0KF9yZWY1KSB7CiAgICAgIHZhciBjZWxsVmFsdWUgPSBfcmVmNS5jZWxsVmFsdWU7CiAgICAgIHZhciBiZWxvbmdUbyA9ICfmnKrnn6XnmoTnsbvlnosnOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhdHVzT3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChjZWxsVmFsdWUgPT0gIjAiKSB7CiAgICAgICAgICBiZWxvbmdUbyA9ICLmraPluLgiOwogICAgICAgIH0gZWxzZSBpZiAoY2VsbFZhbHVlID09ICIxIikgewogICAgICAgICAgYmVsb25nVG8gPSAi6ZSB5a6aIjsKICAgICAgICB9IGVsc2UgaWYgKGNlbGxWYWx1ZSA9PSAiMiIpIHsKICAgICAgICAgIGJlbG9uZ1RvID0gIuazqOmUgCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBiZWxvbmdUbzsKICAgIH0sCiAgICAvLyDliJfooajnirbmgIHmoLzlvI/ljJYKICAgIHNmc2g6IGZ1bmN0aW9uIHNmc2goX3JlZjYpIHsKICAgICAgdmFyIGNlbGxWYWx1ZSA9IF9yZWY2LmNlbGxWYWx1ZTsKICAgICAgdmFyIGJlbG9uZ1RvID0gJ+WQpic7CiAgICAgIGlmIChjZWxsVmFsdWUgPT0gIjEiKSB7CiAgICAgICAgYmVsb25nVG8gPSAi5pivIjsKICAgICAgfQogICAgICByZXR1cm4gYmVsb25nVG87CiAgICB9LAogICAgLy8g5YiX6KGo54q25oCB5qC85byP5YyWCiAgICB0eXBlRm9ybWF0OiBmdW5jdGlvbiB0eXBlRm9ybWF0KF9yZWY3KSB7CiAgICAgIHZhciBjZWxsVmFsdWUgPSBfcmVmNy5jZWxsVmFsdWU7CiAgICAgIHZhciBiZWxvbmdUbyA9ICfmnKrnn6XnmoTnsbvlnosnOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHlwZU9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoY2VsbFZhbHVlID09ICIwIikgewogICAgICAgICAgYmVsb25nVG8gPSAi566h55CG5ZGYIjsKICAgICAgICB9IGVsc2UgaWYgKGNlbGxWYWx1ZSA9PSAiMSIpIHsKICAgICAgICAgIGJlbG9uZ1RvID0gIuS4muWKoeeUqOaItyI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBiZWxvbmdUbzsKICAgIH0sCiAgICAvKiog5pCc57Si5oyJ6ZKu5pON5L2cICovCiAgICBoYW5kbGVRdWVyeTogKDAsIF9sb2Rhc2guZGVib3VuY2UpKGZ1bmN0aW9uICgpIHsKICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7CiAgICAgIHRoaXMucGFnZVNpemUgPSAxMDsKICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICB9LCAxMDAwKSwKICAgIC8qKiDmn6Xor6LnlKjmiLfliJfooaggKi9nZXRMaXN0OiBmdW5jdGlvbiBnZXRMaXN0KCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgcmV0dXJuICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KCkgewogICAgICAgIHZhciBzeXNUaW1lLCBsaywgc2VhcmNoUGFyYW1zOwogICAgICAgIHJldHVybiAoMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU0JChfY29udGV4dDQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzNS5sb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDM7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNS4kYXhpb3MuZ2V0KCcvc3lzUG9saWN5Q29udHJvbGxlci9nZXRMaWNlbnNlS2V5JykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICBzeXNUaW1lID0gcmVzLmRhdGEuc3lzVGltZTsKICAgICAgICAgICAgICAgIGxrID0gcmVzLmRhdGEubGs7CiAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICAgICBfdGhpczUubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgc2VhcmNoUGFyYW1zID0gewogICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IF90aGlzNS5jdXJyZW50UGFnZSwKICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBfdGhpczUucGFnZVNpemUsCiAgICAgICAgICAgICAgICB1c2VybmFtZTogX3RoaXM1LnF1ZXJ5UGFyYW1zLnVzZXJuYW1lLAogICAgICAgICAgICAgICAgcGhvbmVudW1iZXI6IF90aGlzNS5xdWVyeVBhcmFtcy5waG9uZW51bWJlciwKICAgICAgICAgICAgICAgIHN0YXR1czogX3RoaXM1LnF1ZXJ5UGFyYW1zLnN0YXR1cywKICAgICAgICAgICAgICAgIHN5c1RpbWU6IHN5c1RpbWUsCiAgICAgICAgICAgICAgICBsazogbGsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gNjsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXM1LiRheGlvcy5nZXQoJy9zeXNVc2VyQ29udHJvbGxlci9nZXRBbGwnLCB7CiAgICAgICAgICAgICAgICBwYXJhbXM6IHNlYXJjaFBhcmFtcwogICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgX3RoaXM1LnVzZXJMaXN0ID0gcmVzLmRhdGE7CiAgICAgICAgICAgICAgICBfdGhpczUudG90YWwgPSByZXMuZGF0YS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEucmVjb3JkcyA9PSAnJykgewogICAgICAgICAgICAgICAgICBfdGhpczUuc2hvd1RhYmxlID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBfdGhpczUuc2hvd1RhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF90aGlzNS5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICAgICBfdGhpczUubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgLy8gdGhpcy4kbWVzc2FnZS5lcnJvcihlcnJvcikKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU0KTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g55So5oi354q25oCB5L+u5pS5CiAgICBoYW5kbGVTdGF0dXNDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVN0YXR1c0NoYW5nZShyb3cpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHZhciB0ZXh0ID0gcm93LnN0YXR1cyA9PT0gIjAiID8gIuWQr+eUqCIgOiAi5YGc55SoIjsKICAgICAgdGhpcy4kbW9kYWwuY29uZmlybSgn56Gu6K6k6KaBIicgKyB0ZXh0ICsgJyIiJyArIHJvdy51c2VyTmFtZSArICci55So5oi35ZCX77yfJykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIGNoYW5nZVVzZXJTdGF0dXMocm93LnVzZXJJZCwgcm93LnN0YXR1cyk7CiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzNi4kbW9kYWwubXNnU3VjY2Vzcyh0ZXh0ICsgIuaIkOWKnyIpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgcm93LnN0YXR1cyA9IHJvdy5zdGF0dXMgPT09ICIwIiA/ICIxIiA6ICIwIjsKICAgICAgfSk7CiAgICB9LAogICAgLy8g5Y+W5raI5oyJ6ZKuCiAgICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbCgpIHsKICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICAgIHRoaXMub3BlbiA9IGZhbHNlOwogICAgICB0aGlzLnJlc2V0KCk7CiAgICB9LAogICAgLy8g6KeS6Imy5Y+W5raI5oyJ6ZKuCiAgICBqc2NhbmNlbDogZnVuY3Rpb24ganNjYW5jZWwoKSB7CiAgICAgIHRoaXMuanNvcGVuID0gZmFsc2U7CiAgICAgIHRoaXMudXNlclJvbGVJZCA9ICcnOwogICAgICB0aGlzLm1lbnVPcHRpb25zID0gW107CiAgICB9LAogICAgLy8g6KGo5Y2V6YeN572uCiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7CiAgICAgIHRoaXMuZWRpdCA9IGZhbHNlOwogICAgICB0aGlzLmZvcm0gPSB7CiAgICAgICAgaWQ6IHVuZGVmaW5lZCwKICAgICAgICB1c2VybmFtZTogdW5kZWZpbmVkLAogICAgICAgIG5pY2tuYW1lOiB1bmRlZmluZWQsCiAgICAgICAgaWRjYXJkOiB1bmRlZmluZWQsCiAgICAgICAgcGhvbmVudW1iZXI6IHVuZGVmaW5lZCwKICAgICAgICBtYWlsYm94OiB1bmRlZmluZWQsCiAgICAgICAgc3RhdHVzOiAiMCIsCiAgICAgICAgdXNlcnR5cGU6ICIwIiwKICAgICAgICByZW1hcms6IHVuZGVmaW5lZCwKICAgICAgICBleHBEYXRlOiB1bmRlZmluZWQKICAgICAgfTsKICAgICAgaWYgKHRoaXMuJHJlZnNbImZvcm0iXSkgewogICAgICAgIHRoaXMuJHJlZnNbImZvcm0iXS5jbGVhclZhbGlkYXRlKCk7CiAgICAgIH0KICAgIH0sCiAgICAvKiog6YeN572u5oyJ6ZKu5pON5L2cICovcmVzZXRRdWVyeTogZnVuY3Rpb24gcmVzZXRRdWVyeSgpIHsKICAgICAgdGhpcy5yZXNldEZvcm0oInF1ZXJ5Rm9ybSIpOwogICAgfSwKICAgIC8qKiDmlrDlop7mjInpkq7mk43kvZwgKi9oYW5kbGVBZGQ6IGZ1bmN0aW9uIGhhbmRsZUFkZCgpIHsKICAgICAgdGhpcy5yZXNldCgpOwogICAgICB0aGlzLmVkaXQgPSBmYWxzZTsKICAgICAgdGhpcy5vcGVuID0gdHJ1ZTsKICAgICAgdGhpcy50aXRsZSA9ICLmt7vliqDnlKjmiLciOwogICAgICB0aGlzLmZvcm0ucGFzc3dvcmQgPSB0aGlzLmluaXRQYXNzd29yZDsKICAgIH0sCiAgICAvKiog5o+Q5Lqk5oyJ6ZKuICovCiAgICBzdWJtaXRGb3JtOiAoMCwgX2xvZGFzaC5kZWJvdW5jZSkoZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdGhpcy4kcmVmc1siZm9ybSJdLnZhbGlkYXRlKCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmOCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU3KHZhbGlkKSB7CiAgICAgICAgICByZXR1cm4gKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNyQoX2NvbnRleHQ3KSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Ny5wcmV2ID0gX2NvbnRleHQ3Lm5leHQpIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNy5mb3JtLmlkICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIF90aGlzNy4kcHJvbXB0KCfor7fovpPlhaXnmbvlvZXlr4bnoIEnLCAn6Ym05Yir5pON5L2cJywgewogICAgICAgICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGU6ICdwYXNzd29yZCcsCiAgICAgICAgICAgICAgICAgICAgICAvLyBjdXN0b21DbGFzczonbm8tYXV0b2ZpbGwtcHdkJywKICAgICAgICAgICAgICAgICAgICAgIGlucHV0VmFsaWRhdG9yOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRvcih2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwubGVuZ3RoIDwgMSB8fCB2YWwubGVuZ3RoID4gMjApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dEVycm9yTWVzc2FnZTogJ+S4jeiDveS4uuepuizmnIDlpJrlj6/lvZXlhaUyMOS4quWtl+espicsCiAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVDbG9zZTogZnVuY3Rpb24gYmVmb3JlQ2xvc2UoYWN0aW9uLCBpbnN0YW5jZSwgZG9uZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAiY29uZmlybSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS4kcmVmc1siY29uZmlybSJdLiRlbC5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSkudGhlbiggLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmMTAgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IyLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNShfcmVmOSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUsIHN5c1RpbWUsIGxrOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNSQoX2NvbnRleHQ1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ1LnByZXYgPSBfY29udGV4dDUubmV4dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9yZWY5LnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczcuJGF4aW9zLmdldCgnL3N5c1BvbGljeUNvbnRyb2xsZXIvZ2V0TGljZW5zZUtleScpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c1RpbWUgPSByZXMuZGF0YS5zeXNUaW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxrID0gcmVzLmRhdGEubGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuZm9ybS5zeXNUaW1lID0gc3lzVGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LmZvcm0ubGsgPSBsazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LmZvcm0uYWdhaW5Qd2QgPSB2YWx1ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOabtOaWsOaTjeS9nAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczcuJGF4aW9zLnBvc3QoJy9zeXNVc2VyQ29udHJvbGxlci91cGRhdGVVc2VyJywgX3RoaXM3LmZvcm0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuY29kZSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcub3BlbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuZ2V0TGlzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LiRtZXNzYWdlLmVycm9yKHJlcy5kYXRhKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kbWVzc2FnZS5lcnJvcihlcnJvcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTUpOwogICAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWYxMC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXM3LiRwcm9tcHQoJ+ivt+i+k+WFpeeZu+W9leWvhueggScsICfpibTliKvmk43kvZwnLCB7CiAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgICAgICAgICAgICAgICAgIGlucHV0VHlwZTogJ3Bhc3N3b3JkJywKICAgICAgICAgICAgICAgICAgICAgIC8vIGN1c3RvbUNsYXNzOiduby1hdXRvZmlsbC1wd2QnLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWxpZGF0b3I6IGZ1bmN0aW9uIGlucHV0VmFsaWRhdG9yKHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbC5sZW5ndGggPCAxIHx8IHZhbC5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgIGlucHV0RXJyb3JNZXNzYWdlOiAn5LiN6IO95Li656m6LOacgOWkmuWPr+W9leWFpTIw5Liq5a2X56ymJywKICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUNsb3NlOiBmdW5jdGlvbiBiZWZvcmVDbG9zZShhY3Rpb24sIGluc3RhbmNlLCBkb25lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICJjb25maXJtIikgewogICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLiRyZWZzWyJjb25maXJtIl0uJGVsLm9uY2xpY2sgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KS50aGVuKCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYxMiA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU2KF9yZWYxMSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUsIHN5c1RpbWUsIGxrOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNiQoX2NvbnRleHQ2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ2LnByZXYgPSBfY29udGV4dDYubmV4dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9yZWYxMS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM3LiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNUaW1lID0gcmVzLmRhdGEuc3lzVGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsayA9IHJlcy5kYXRhLmxrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHt9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LmZvcm0uc3lzVGltZSA9IHN5c1RpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5mb3JtLmxrID0gbGs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5mb3JtLmFnYWluUHdkID0gdmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmm7TmlrDmk43kvZwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSA4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM3LiRheGlvcy5wb3N0KCcvc3lzVXNlckNvbnRyb2xsZXIvYWRkVXNlcicsIF90aGlzNy5mb3JtKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LiRtZXNzYWdlLnN1Y2Nlc3MocmVzLmRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3Lm9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5yZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LmdldExpc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy4kbWVzc2FnZS5lcnJvcihyZXMuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyb3IpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3LmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LnN0b3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU2KTsKICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMTIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZTcpOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94NCkgewogICAgICAgICAgcmV0dXJuIF9yZWY4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKTsKICAgIH0sIDEwMDApLAogICAgLyoqIOmHjee9ruWvhueggeaMiemSruaTjeS9nCAqL2hhbmRsZVJlc2V0UHdkOiBmdW5jdGlvbiBoYW5kbGVSZXNldFB3ZChyb3cpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIGlmIChyb3cuc2lnbnN0ciA9PSAnMScpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflrZjlnKjlvoXlrqHmoLjvvIzlrqHmoLjnrqHnkIblkZjlrqHmoLjlkI7or7fliLfmlrDliJfooagnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChyb3cuc3RhdHVzID09ICcyJykgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+W3suazqOmUgOeahOi0puWPt+S4jeiDveWIneWniy/ph43nva7lr4bnoIEhJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiRwcm9tcHQoJ+ivt+i+k+WFpeeZu+W9leWvhueggScsICfpibTliKvmk43kvZwnLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIGlucHV0VHlwZTogJ3Bhc3N3b3JkJywKICAgICAgICAvLyBjdXN0b21DbGFzczonbm8tYXV0b2ZpbGwtcHdkJywKICAgICAgICBpbnB1dFZhbGlkYXRvcjogZnVuY3Rpb24gaW5wdXRWYWxpZGF0b3IodmFsKSB7CiAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbC5sZW5ndGggPCAxIHx8IHZhbC5sZW5ndGggPiAyMCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBpbnB1dEVycm9yTWVzc2FnZTogJ+S4jeiDveS4uuepuizmnIDlpJrlj6/lvZXlhaUyMOS4quWtl+espicsCiAgICAgICAgYmVmb3JlQ2xvc2U6IGZ1bmN0aW9uIGJlZm9yZUNsb3NlKGFjdGlvbiwgaW5zdGFuY2UsIGRvbmUpIHsKICAgICAgICAgIGlmIChhY3Rpb24gPT09ICJjb25maXJtIikgewogICAgICAgICAgICBpbnN0YW5jZS4kcmVmc1siY29uZmlybSJdLiRlbC5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7CiAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsICE9IDApIHsKICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0oKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pLnRoZW4oIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYxNCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU4KF9yZWYxMykgewogICAgICAgICAgdmFyIHZhbHVlOwogICAgICAgICAgcmV0dXJuICgwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTgkKF9jb250ZXh0OCkgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDgucHJldiA9IF9jb250ZXh0OC5uZXh0KSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgdmFsdWUgPSBfcmVmMTMudmFsdWU7CiAgICAgICAgICAgICAgICBfdGhpczguZG9SZXNldFB3ZChyb3csIHZhbHVlKTsKICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguc3RvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlOCk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g3KSB7CiAgICAgICAgICByZXR1cm4gX3JlZjE0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgfSwKICAgIGRvUmVzZXRQd2Q6ICgwLCBfbG9kYXNoLmRlYm91bmNlKSggLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgdmFyIF9yZWYxNSA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU5KHJvdywgYWdhaW5Qd2QpIHsKICAgICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgICB2YXIgc3lzVGltZSwgbGssIHBhcmFtOwogICAgICAgIHJldHVybiAoMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU5JChfY29udGV4dDkpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0OS5wcmV2ID0gX2NvbnRleHQ5Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0OS5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kYXhpb3MuZ2V0KCcvc3lzUG9saWN5Q29udHJvbGxlci9nZXRMaWNlbnNlS2V5JykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICBzeXNUaW1lID0gcmVzLmRhdGEuc3lzVGltZTsKICAgICAgICAgICAgICAgIGxrID0gcmVzLmRhdGEubGs7CiAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7fSk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBwYXJhbSA9IHsKICAgICAgICAgICAgICAgIGlkOiByb3cuaWQsCiAgICAgICAgICAgICAgICBhZ2FpblB3ZDogYWdhaW5Qd2QsCiAgICAgICAgICAgICAgICBzeXNUaW1lOiBzeXNUaW1lLAogICAgICAgICAgICAgICAgbGs6IGxrCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dDkubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF4aW9zLnBvc3QoJy9zeXNVc2VyQ29udHJvbGxlci9yZXNldFBhc3N3b3JkJywgcGFyYW0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDApIHsKICAgICAgICAgICAgICAgICAgX3RoaXM5LiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WIm+W7uuW5tuWPkemAgeaIkOWKnyEnCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgX3RoaXM5LiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5kYXRhCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgICAgICAgICAgX3RoaXM5LiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+WIm+W7uuWvhueggeWksei0pSEnCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIF90aGlzOS5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ5LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlOSwgdGhpcyk7CiAgICAgIH0pKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDgsIF94OSkgewogICAgICAgIHJldHVybiBfcmVmMTUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0oKSwgMTAwMCksCiAgICAvKiog5Yig6Zmk5oyJ6ZKu5pON5L2cICovaGFuZGxlRGVsZXRlOiBmdW5jdGlvbiBoYW5kbGVEZWxldGUoKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgdmFyIF9zZWxlY3REYXRhID0gdGhpcy4kcmVmcy51c2VyVGFibGUuZ2V0UmFkaW9SZWNvcmQodHJ1ZSk7CiAgICAgIGlmIChfc2VsZWN0RGF0YSA9PSBudWxsKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36YCJ5oup6K6w5b2VIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKF9zZWxlY3REYXRhLmlkID09IDEpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflhoXnva7ns7vnu5/nrqHnkIblkZjkuI3og73liKDpmaQhJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoX3NlbGVjdERhdGEuaWQgPT0gMikgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+WGhee9ruWuoeiuoeeuoeeQhuWRmOS4jeiDveWIoOmZpCEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChfc2VsZWN0RGF0YS5pZCA9PSAyNCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+WGhee9ruWuoeaguOeuoeeQhuWRmOS4jeiDveWIoOmZpCEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuJHByb21wdCgn6K+36L6T5YWl5a+G56CBJywgJ+mJtOWIq+aTjeS9nCcsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgaW5wdXRUeXBlOiAncGFzc3dvcmQnLAogICAgICAgIC8vIGN1c3RvbUNsYXNzOiduby1hdXRvZmlsbC1wd2QnLAogICAgICAgIGlucHV0VmFsaWRhdG9yOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRvcih2YWwpIHsKICAgICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsLmxlbmd0aCA8IDEgfHwgdmFsLmxlbmd0aCA+IDIwKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGlucHV0RXJyb3JNZXNzYWdlOiAn5LiN6IO95Li656m6LOacgOWkmuWPr+W9leWFpTIw5Liq5a2X56ymJywKICAgICAgICBiZWZvcmVDbG9zZTogZnVuY3Rpb24gYmVmb3JlQ2xvc2UoYWN0aW9uLCBpbnN0YW5jZSwgZG9uZSkgewogICAgICAgICAgaWYgKGFjdGlvbiA9PT0gImNvbmZpcm0iKSB7CiAgICAgICAgICAgIGluc3RhbmNlLiRyZWZzWyJjb25maXJtIl0uJGVsLm9uY2xpY2sgPSBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwgIT0gMCkgewogICAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSkudGhlbiggLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZjE3ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTEwKF9yZWYxNikgewogICAgICAgICAgdmFyIHZhbHVlOwogICAgICAgICAgcmV0dXJuICgwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTEwJChfY29udGV4dDEwKSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0MTAucHJldiA9IF9jb250ZXh0MTAubmV4dCkgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIHZhbHVlID0gX3JlZjE2LnZhbHVlOwogICAgICAgICAgICAgICAgX3RoaXMxMC5kb0RlbGV0ZShfc2VsZWN0RGF0YSwgdmFsdWUpOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTAuc3RvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlMTApOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MTApIHsKICAgICAgICAgIHJldHVybiBfcmVmMTcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICB9LAogICAgLyoqDQogICAgICog5Yig6Zmk5o+Q5LqkDQogICAgICovCiAgICBkb0RlbGV0ZTogKDAsIF9sb2Rhc2guZGVib3VuY2UpKCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3JlZjE4ID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTExKF9zZWxlY3REYXRhLCBhZ2FpblB3ZCkgewogICAgICAgIHZhciBfdGhpczExID0gdGhpczsKICAgICAgICB2YXIgc3lzVGltZSwgbGssIHBhcmFtOwogICAgICAgIHJldHVybiAoMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxMSQoX2NvbnRleHQxMSkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQxMS5wcmV2ID0gX2NvbnRleHQxMS5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDExLm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0aGlzLiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIHN5c1RpbWUgPSByZXMuZGF0YS5zeXNUaW1lOwogICAgICAgICAgICAgICAgbGsgPSByZXMuZGF0YS5sazsKICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHt9KTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHBhcmFtID0gewogICAgICAgICAgICAgICAgaWQ6IF9zZWxlY3REYXRhLmlkLAogICAgICAgICAgICAgICAgYWdhaW5Qd2Q6IGFnYWluUHdkLAogICAgICAgICAgICAgICAgc3lzVGltZTogc3lzVGltZSwKICAgICAgICAgICAgICAgIGxrOiBsawogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQxMS5uZXh0ID0gNTsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kYXhpb3MucG9zdCgnL3N5c1VzZXJDb250cm9sbGVyL2RlbFVzZXInLCBwYXJhbSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUgPT0gMCkgewogICAgICAgICAgICAgICAgICBfdGhpczExLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIF90aGlzMTEuZ2V0TGlzdCgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXMuZGF0YQogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIF90aGlzMTEuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5Yig6Zmk5aSx6LSlIScKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgX3RoaXMxMS5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMS5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTExLCB0aGlzKTsKICAgICAgfSkpOwogICAgICByZXR1cm4gZnVuY3Rpb24gKF94MTEsIF94MTIpIHsKICAgICAgICByZXR1cm4gX3JlZjE4LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICB9KCksIDUwMCksCiAgICAvKiog5L+u5pS55oyJ6ZKu5pON5L2cICovaGFuZGxlVXBkYXRlOiBmdW5jdGlvbiBoYW5kbGVVcGRhdGUoKSB7CiAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgdmFyIF9zZWxlY3REYXRhID0gdGhpcy4kcmVmcy51c2VyVGFibGUuZ2V0UmFkaW9SZWNvcmQodHJ1ZSk7CiAgICAgIGlmIChfc2VsZWN0RGF0YSA9PSBudWxsKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36YCJ5oup6K6w5b2VIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKF9zZWxlY3REYXRhLmlkID09IDEpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflhoXnva7ns7vnu5/nrqHnkIblkZjkuI3og73kv67mlLkhJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoX3NlbGVjdERhdGEuaWQgPT0gMikgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+WGhee9ruWuoeiuoeeuoeeQhuWRmOS4jeiDveS/ruaUuSEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChfc2VsZWN0RGF0YS5pZCA9PSAyNCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+WGhee9ruWuoeaguOeuoeeQhuWRmOS4jeiDveS/ruaUuSEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChfc2VsZWN0RGF0YS5zdGF0dXMgPT0gMikgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+azqOmUgOeahOi0puWPt+S4jeiDveaTjeS9nCEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChfc2VsZWN0RGF0YS5zaWduc3RyID09ICcxJykgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+WtmOWcqOW+heWuoeaguO+8jOWuoeaguOeuoeeQhuWRmOWuoeaguOWQjuivt+WIt+aWsOWIl+ihqCcKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5mb3JtID0gX3NlbGVjdERhdGE7CiAgICAgIHRoaXMub3BlbiA9IHRydWU7CiAgICAgIHRoaXMudGl0bGUgPSAi5L+u5pS555So5oi3IjsKICAgICAgdGhpcy5lZGl0ID0gdHJ1ZTsKICAgIH0sCiAgICAvLyDlj5bmtojmjInpkq4KICAgIGxvY2tmb3JtY2FuY2VsOiBmdW5jdGlvbiBsb2NrZm9ybWNhbmNlbCgpIHsKICAgICAgdGhpcy5sb2Nrb3BlbiA9IGZhbHNlOwogICAgICB0aGlzLmxvY2tmb3JtID0ge307CiAgICB9LAogICAgc3VibG9ja2Zvcm06IGZ1bmN0aW9uIHN1YmxvY2tmb3JtKCkgewogICAgICBpZiAodGhpcy5sb2NrZm9ybS5leHBEYXRlID09IG51bGwgfHwgdGhpcy5sb2NrZm9ybS5leHBEYXRlID09IHVuZGVmaW5lZCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+ivt+mAieaLqeaIquatouaXpeacnyEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLmxvY2tmb3JtLnBhc3N3b3JkID09IG51bGwgfHwgdGhpcy5sb2NrZm9ybS5wYXNzd29yZCA9PSB1bmRlZmluZWQpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXnmbvlvZXlr4bnoIEhJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgX3NlbGVjdERhdGEgPSB0aGlzLiRyZWZzLnVzZXJUYWJsZS5nZXRSYWRpb1JlY29yZCh0cnVlKTsKICAgICAgdGhpcy5kb1JlbG9jayhfc2VsZWN0RGF0YSwgdGhpcy5sb2NrZm9ybS5wYXNzd29yZCwgdGhpcy5sb2NrZm9ybS5leHBEYXRlKTsKICAgIH0sCiAgICAvKiog6Kej6ZSB5oyJ6ZKu5pON5L2cICovaGFuZGxlUmVsb2NrOiBmdW5jdGlvbiBoYW5kbGVSZWxvY2soKSB7CiAgICAgIHZhciBfdGhpczEyID0gdGhpczsKICAgICAgdmFyIF9zZWxlY3REYXRhID0gdGhpcy4kcmVmcy51c2VyVGFibGUuZ2V0UmFkaW9SZWNvcmQodHJ1ZSk7CiAgICAgIGlmIChfc2VsZWN0RGF0YSA9PSBudWxsKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36YCJ5oup6K6w5b2VIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKF9zZWxlY3REYXRhLnN0YXR1cyA9PSAyKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn5rOo6ZSA55qE6LSm5Y+35LiN6IO95pON5L2cIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKF9zZWxlY3REYXRhLnN0YXR1cyAhPT0gJzEnKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn5Y+q6IO95a+544CQ6ZSB5a6a44CR54q25oCB55qE6L+b6KGM6Kej6ZSBIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKF9zZWxlY3REYXRhLnNpZ25zdHIgPT0gJzEnKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn5a2Y5Zyo5b6F5a6h5qC477yM5a6h5qC4566h55CG5ZGY5a6h5qC45ZCO6K+35Yi35paw5YiX6KGoJwogICAgICAgIH0pOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgLy8g5Yik5pat5piv5ZCm5Li05pe26LSm5Y+3CiAgICAgIGlmIChfc2VsZWN0RGF0YS5leHBEYXRlKSB7CiAgICAgICAgdGhpcy5sb2Nrb3BlbiA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kcHJvbXB0KCfor7fovpPlhaXnmbvlvZXlr4bnoIEnLCAn6Ym05Yir5pON5L2cJywgewogICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgICBpbnB1dFR5cGU6ICdwYXNzd29yZCcsCiAgICAgICAgICAvLyBjdXN0b21DbGFzczonbm8tYXV0b2ZpbGwtcHdkJywKICAgICAgICAgIGlucHV0VmFsaWRhdG9yOiBmdW5jdGlvbiBpbnB1dFZhbGlkYXRvcih2YWwpIHsKICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwubGVuZ3RoIDwgMSB8fCB2YWwubGVuZ3RoID4gMjApIHsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBpbnB1dEVycm9yTWVzc2FnZTogJ+S4jeiDveS4uuepuizmnIDlpJrlj6/lvZXlhaUyMOS4quWtl+espicsCiAgICAgICAgICBiZWZvcmVDbG9zZTogZnVuY3Rpb24gYmVmb3JlQ2xvc2UoYWN0aW9uLCBpbnN0YW5jZSwgZG9uZSkgewogICAgICAgICAgICBpZiAoYWN0aW9uID09PSAiY29uZmlybSIpIHsKICAgICAgICAgICAgICBpbnN0YW5jZS4kcmVmc1siY29uZmlybSJdLiRlbC5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSkudGhlbiggLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBfcmVmMjAgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IyLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMTIoX3JlZjE5KSB7CiAgICAgICAgICAgIHZhciB2YWx1ZTsKICAgICAgICAgICAgcmV0dXJuICgwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTEyJChfY29udGV4dDEyKSB7CiAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQxMi5wcmV2ID0gX2NvbnRleHQxMi5uZXh0KSB7CiAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgIHZhbHVlID0gX3JlZjE5LnZhbHVlOwogICAgICAgICAgICAgICAgICBfdGhpczEyLmRvUmVsb2NrKF9zZWxlY3REYXRhLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMi5zdG9wKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCBfY2FsbGVlMTIpOwogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDEzKSB7CiAgICAgICAgICAgIHJldHVybiBfcmVmMjAuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgIH07CiAgICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAoZSkge30pOwogICAgICB9CiAgICB9LAogICAgLyoqDQogICAgICog6Kej6ZSB5o+Q5LqkDQogICAgICovCiAgICBkb1JlbG9jazogKDAsIF9sb2Rhc2guZGVib3VuY2UpKCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICB2YXIgX3JlZjIxID0gKDAsIF9hc3luY1RvR2VuZXJhdG9yMi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTEzKF9zZWxlY3REYXRhLCBhZ2FpblB3ZCwgZXhwRGF0ZSkgewogICAgICAgIHZhciBfdGhpczEzID0gdGhpczsKICAgICAgICB2YXIgc3lzVGltZSwgbGssIHBhcmFtOwogICAgICAgIHJldHVybiAoMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxMyQoX2NvbnRleHQxMykgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQxMy5wcmV2ID0gX2NvbnRleHQxMy5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDEzLm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0aGlzLiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIHN5c1RpbWUgPSByZXMuZGF0YS5zeXNUaW1lOwogICAgICAgICAgICAgICAgbGsgPSByZXMuZGF0YS5sazsKICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHt9KTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHBhcmFtID0gewogICAgICAgICAgICAgICAgaWQ6IF9zZWxlY3REYXRhLmlkLAogICAgICAgICAgICAgICAgYWdhaW5Qd2Q6IGFnYWluUHdkLAogICAgICAgICAgICAgICAgZXhwRGF0ZTogZXhwRGF0ZSwKICAgICAgICAgICAgICAgIHN5c1RpbWU6IHN5c1RpbWUsCiAgICAgICAgICAgICAgICBsazogbGsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIF9jb250ZXh0MTMubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF4aW9zLnBvc3QoJy9zeXNVc2VyQ29udHJvbGxlci9yZWxvY2tVc2VyJywgcGFyYW0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDApIHsKICAgICAgICAgICAgICAgICAgX3RoaXMxMy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5kYXRhCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICBfdGhpczEzLmdldExpc3QoKTsKICAgICAgICAgICAgICAgICAgX3RoaXMxMy5sb2NrZm9ybWNhbmNlbCgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgX3RoaXMxMy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXMuZGF0YQogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIF90aGlzMTMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn6Kej6ZSB5aSx6LSlIScKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgX3RoaXMxMy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMy5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTEzLCB0aGlzKTsKICAgICAgfSkpOwogICAgICByZXR1cm4gZnVuY3Rpb24gKF94MTQsIF94MTUsIF94MTYpIHsKICAgICAgICByZXR1cm4gX3JlZjIxLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICB9KCksIDEwMDApLAogICAgLyoqDQogICAgICog6KeS6Imy57G75Z6L5pS55Y+Y5pe25pu05pS55p2D6ZmQ5YiX6KGoDQogICAgICogQHBhcmFtIHJvd1JvbGVJZA0KICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fQ0KICAgICAqLwogICAgZ2V0TWVudTogZnVuY3Rpb24gZ2V0TWVudShyb3dSb2xlSWQpIHsKICAgICAgdmFyIGEgPSB0aGlzLiRheGlvczsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmMjIgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IyLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMTQocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICB2YXIgc3lzVGltZSwgbGssIHBhcmFtMTsKICAgICAgICAgIHJldHVybiAoMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxNCQoX2NvbnRleHQxNCkgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDE0LnByZXYgPSBfY29udGV4dDE0Lm5leHQpIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBfY29udGV4dDE0Lm5leHQgPSAyOwogICAgICAgICAgICAgICAgcmV0dXJuIGEuZ2V0KCcvc3lzUG9saWN5Q29udHJvbGxlci9nZXRMaWNlbnNlS2V5JykudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICAgIHN5c1RpbWUgPSByZXMuZGF0YS5zeXNUaW1lOwogICAgICAgICAgICAgICAgICBsayA9IHJlcy5kYXRhLmxrOwogICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7fSk7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgcGFyYW0xID0gewogICAgICAgICAgICAgICAgICByb2xlSWQ6IHJvd1JvbGVJZCwKICAgICAgICAgICAgICAgICAgc3lzVGltZTogc3lzVGltZSwKICAgICAgICAgICAgICAgICAgbGs6IGxrCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgX2NvbnRleHQxNC5uZXh0ID0gNTsKICAgICAgICAgICAgICAgIHJldHVybiBhLmdldCgnL3N5c01lbnVDb250cm9sbGVyL3JvbGVNZW51VHJlZXNlbGVjdEZvclVzZXInLCB7CiAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW0xCiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMubWVudU9wdGlvbnMgPSByZXMuZGF0YS5tZW51czsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTQuc3RvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlMTQpOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MTcsIF94MTgpIHsKICAgICAgICAgIHJldHVybiBfcmVmMjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoJ+iOt+WPlueUqOaIt+inkuiJsuWHuumUmScgKyBlcnJvcik7CiAgICAgIH0pOwogICAgfSwKICAgIGdldFVzZXJSb2xlOiBmdW5jdGlvbiBnZXRVc2VyUm9sZSh1c2VyaWQpIHsKICAgICAgdmFyIGEgPSB0aGlzLiRheGlvczsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmMjMgPSAoMCwgX2FzeW5jVG9HZW5lcmF0b3IyLmRlZmF1bHQpKCAvKiNfX1BVUkVfXyovKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMTUocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgICB2YXIgc3lzVGltZSwgbGssIHVzZXJSb2xlUGFyYW1zLCBzeXNUaW1lMSwgbGsxLCBwYXJhbTE7CiAgICAgICAgICByZXR1cm4gKDAsIF9yZWdlbmVyYXRvclJ1bnRpbWUyLmRlZmF1bHQpKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMTUkKF9jb250ZXh0MTUpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQxNS5wcmV2ID0gX2NvbnRleHQxNS5uZXh0KSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgX2NvbnRleHQxNS5uZXh0ID0gMjsKICAgICAgICAgICAgICAgIHJldHVybiBhLmdldCgnL3N5c1BvbGljeUNvbnRyb2xsZXIvZ2V0TGljZW5zZUtleScpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgICBzeXNUaW1lID0gcmVzLmRhdGEuc3lzVGltZTsKICAgICAgICAgICAgICAgICAgbGsgPSByZXMuZGF0YS5sazsKICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge30pOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgIHVzZXJSb2xlUGFyYW1zID0gewogICAgICAgICAgICAgICAgICB1c2VySWQ6IHVzZXJpZCwKICAgICAgICAgICAgICAgICAgc3lzVGltZTogc3lzVGltZSwKICAgICAgICAgICAgICAgICAgbGs6IGxrCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgX2NvbnRleHQxNS5uZXh0ID0gNTsKICAgICAgICAgICAgICAgIHJldHVybiBhLmdldCgnL3N5c1VzZXJDb250cm9sbGVyL2dldFVzZXJSb2xlJywgewogICAgICAgICAgICAgICAgICBwYXJhbXM6IHVzZXJSb2xlUGFyYW1zCiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIF90aGlzLnVzZXJSb2xlSWQgPSAnJzsKICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBfdGhpcy51c2VyUm9sZUlkID0gcmVzLmRhdGEucm9sZUlkOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIC8vIOi/lOWbnnVzZXJSb2xl5a+56LGhCiAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgX2NvbnRleHQxNS5uZXh0ID0gNzsKICAgICAgICAgICAgICAgIHJldHVybiBhLmdldCgnL3N5c1BvbGljeUNvbnRyb2xsZXIvZ2V0TGljZW5zZUtleScpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgICBzeXNUaW1lMSA9IHJlcy5kYXRhLnN5c1RpbWU7CiAgICAgICAgICAgICAgICAgIGxrMSA9IHJlcy5kYXRhLmxrOwogICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7fSk7CiAgICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgICAgcGFyYW0xID0gewogICAgICAgICAgICAgICAgICByb2xlSWQ6IF90aGlzLnVzZXJSb2xlSWQsCiAgICAgICAgICAgICAgICAgIHN5c1RpbWU6IHN5c1RpbWUxLAogICAgICAgICAgICAgICAgICBsazogbGsxCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgX2NvbnRleHQxNS5uZXh0ID0gMTA7CiAgICAgICAgICAgICAgICByZXR1cm4gYS5nZXQoJy9zeXNNZW51Q29udHJvbGxlci9yb2xlTWVudVRyZWVzZWxlY3RGb3JVc2VyJywgewogICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtMQogICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLm1lbnVPcHRpb25zID0gcmVzLmRhdGEubWVudXM7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBjYXNlIDEwOgogICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxNS5zdG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWUxNSk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gxOSwgX3gyMCkgewogICAgICAgICAgcmV0dXJuIF9yZWYyMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICAgIH0oKSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcign6I635Y+W55So5oi36KeS6Imy5Ye66ZSZJyArIGVycm9yKTsKICAgICAgfSk7CiAgICB9LAogICAgZ2V0Um9sZUJ5VHlwZTogZnVuY3Rpb24gZ2V0Um9sZUJ5VHlwZSh1c2VydHlwZSkgewogICAgICB2YXIgX3RoaXMxNSA9IHRoaXM7CiAgICAgIC8vIOagueaNrueUqOaIt+exu+Wei+iOt+WPluinkuiJsuWIl+ihqAogICAgICB2YXIgYSA9IHRoaXMuJGF4aW9zOwogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICByZXR1cm4gbmV3IFByb21pc2UoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYyNCA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxNihyZXNvbHZlLCByZWplY3QpIHsKICAgICAgICAgIHZhciBfdGhpczE0ID0gdGhpczsKICAgICAgICAgIHZhciBzeXNUaW1lLCBsaywgc2VhcmNoUGFyYW1zOwogICAgICAgICAgcmV0dXJuICgwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTE2JChfY29udGV4dDE2KSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0MTYucHJldiA9IF9jb250ZXh0MTYubmV4dCkgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIF9jb250ZXh0MTYubmV4dCA9IDI7CiAgICAgICAgICAgICAgICByZXR1cm4gYS5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgICAgc3lzVGltZSA9IHJlcy5kYXRhLnN5c1RpbWU7CiAgICAgICAgICAgICAgICAgIGxrID0gcmVzLmRhdGEubGs7CiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHt9KTsKICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICBzZWFyY2hQYXJhbXMgPSB7CiAgICAgICAgICAgICAgICAgIHVzZXJ0eXBlOiB1c2VydHlwZSwKICAgICAgICAgICAgICAgICAgc3lzVGltZTogc3lzVGltZSwKICAgICAgICAgICAgICAgICAgbGs6IGxrCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgX2NvbnRleHQxNi5uZXh0ID0gNTsKICAgICAgICAgICAgICAgIHJldHVybiBhLmdldCgnL3N5c1JvbGVDb250cm9sbGVyL2dldFJvbGVCeVR5cGUnLCB7CiAgICAgICAgICAgICAgICAgIHBhcmFtczogc2VhcmNoUGFyYW1zCiAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb2RlID09IDApIHsKICAgICAgICAgICAgICAgICAgICAvLyDov5Tlm57op5LoibLliJfooagKICAgICAgICAgICAgICAgICAgICBfdGhpcy5yb2xlTGlzdCA9IHJlcy5kYXRhOwogICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIOi+k+WHuuWQjuerr+i/lOWbnuS/oeaBrwogICAgICAgICAgICAgICAgICAgIF90aGlzMTQuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlcy5kYXRhCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTYuc3RvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlMTYpOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MjEsIF94MjIpIHsKICAgICAgICAgIHJldHVybiBfcmVmMjQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgIF90aGlzMTUubG9hZGluZyA9IGZhbHNlOwogICAgICAgIF90aGlzMTUuJG1lc3NhZ2UuZXJyb3IoZXJyb3IpOwogICAgICB9KTsKICAgIH0sCiAgICAvKiog5YiG6YWN6KeS6Imy5pON5L2cICovCiAgICBoYW5kbGVBdXRoUm9sZTogKDAsIF9sb2Rhc2guZGVib3VuY2UpKGZ1bmN0aW9uIChyb3cpIHsKICAgICAgaWYgKHRoaXMuc3lzUm9sZS5yb2xlS2V5ID09ICdYVEdMJyAmJiByb3cudXNlcnR5cGUgPT0gJzEnKSB7CiAgICAgICAgLy8g57O757uf566h55CG5ZGY5LiN6IO957uZ5Lia5Yqh55So5oi35YiG6YWN5p2D6ZmQCiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn57O757uf566h55CG5ZGY5LiN6IO957uZ5Lia5Yqh55So5oi35YiG6YWN5p2D6ZmQ77yM6K+35Lia5Yqh566h55CG5ZGY6L+b6KGM5YiG6YWNIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHJvdy5pZCA9PSAxKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn5YaF572u57O757uf566h55CG5ZGY5LiN6IO95YiG6YWN6KeS6ImyIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHJvdy5pZCA9PSAyKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn5YaF572u5a6h6K6h566h55CG5ZGY5LiN6IO95YiG6YWN6KeS6ImyIScKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHJvdy5pZCA9PSAyNCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+WGhee9ruWuoeaguOeuoeeQhuWRmOS4jeiDveWIhumFjeinkuiJsiEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChyb3cuc3RhdHVzID09ICcyJykgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgbWVzc2FnZTogJ+azqOmUgOeahOi0puWPt+S4jeiDveaTjeS9nCEnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChyb3cuc2lnbnN0ciA9PSAnMScpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgIG1lc3NhZ2U6ICflrZjlnKjlvoXlrqHmoLjvvIzlrqHmoLjnrqHnkIblkZjlrqHmoLjlkI7or7fliLfmlrDliJfooagnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuanN1c2VyaWQgPSByb3cuaWQ7CiAgICAgIHRoaXMuanN1c2VybmFtZSA9IHJvdy51c2VybmFtZTsKICAgICAgdGhpcy5qc25pY2tuYW1lID0gcm93Lm5pY2tuYW1lOwogICAgICB0aGlzLmdldFJvbGVCeVR5cGUocm93LnVzZXJ0eXBlKTsKICAgICAgdGhpcy5nZXRVc2VyUm9sZSh0aGlzLmpzdXNlcmlkKTsKICAgICAgdGhpcy5qc29wZW4gPSB0cnVlOwogICAgICB0aGlzLnRpdGxlID0gIuWIhumFjeinkuiJsiI7CiAgICAgIC8vIFByb21pc2UuYWxsKFt0aGlzLmdldFJvbGVCeVR5cGUocm93LnVzZXJ0eXBlKSwgdGhpcy5nZXRVc2VyUm9sZSh0aGlzLmpzdXNlcmlkKV0pLnRoZW4oKHJlcykgPT4gewogICAgICAvLyAgIGlmIChyZXNbMV0gIT0gJycgJiYgcmVzWzFdICE9IHVuZGVmaW5lZCkgewogICAgICAvLyAgICAgY29uc3Qgcm9sZVRhYmxlID0gdGhpcy4kcmVmcy54VGFibGUuZ2V0VGFibGVEYXRhKCkKICAgICAgLy8gICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm9sZVRhYmxlLnRhYmxlRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAvLyAgICAgICBpZiAocmVzWzFdLnJvbGVJZCA9PSByb2xlVGFibGUudGFibGVEYXRhW2ldLnJvbGVJZCkgewogICAgICAvLyAgICAgICAgIC8vIOWwhuWOn+acieeahOinkuiJsuWLvumAieS4igogICAgICAvLyAgICAgICAgIHRoaXMuJHJlZnMueFRhYmxlLnNldENoZWNrYm94Um93KHJvbGVUYWJsZS50YWJsZURhdGFbaV0sIHRydWUpCiAgICAgIC8vICAgICAgIH0KICAgICAgLy8gICAgIH0KICAgICAgLy8gICB9CiAgICAgIC8vIH0pLmNhdGNoKGUgPT4gewogICAgICAvLyAgIHRoaXMubG9hZGluZyA9IGZhbHNlCiAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS5lcnJvcigi6I635Y+W5YiG6YWN6KeS6Imy5byC5bi477yaIiArIGUpCiAgICAgIC8vIH0pCiAgICB9LCAxMDAwKSwKICAgIC8qKiDop5LoibLliIbphY3mj5DkuqTmjInpkq4gKi8KICAgIGpzc3VibWl0Rm9ybTogKDAsIF9sb2Rhc2guZGVib3VuY2UpKCAvKiNfX1BVUkVfXyovKDAsIF9hc3luY1RvR2VuZXJhdG9yMi5kZWZhdWx0KSggLyojX19QVVJFX18qLygwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTE4KCkgewogICAgICB2YXIgX3RoaXMxNiA9IHRoaXM7CiAgICAgIHJldHVybiAoMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxOCQoX2NvbnRleHQxOCkgewogICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0MTgucHJldiA9IF9jb250ZXh0MTgubmV4dCkgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICB0aGlzLiRwcm9tcHQoJ+ivt+i+k+WFpeeZu+W9leWvhueggScsICfpibTliKvmk43kvZwnLCB7CiAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgICAgICAgIGlucHV0VHlwZTogJ3Bhc3N3b3JkJywKICAgICAgICAgICAgICAvLyBjdXN0b21DbGFzczonbm8tYXV0b2ZpbGwtcHdkJywKICAgICAgICAgICAgICBpbnB1dFZhbGlkYXRvcjogZnVuY3Rpb24gaW5wdXRWYWxpZGF0b3IodmFsKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbC5sZW5ndGggPCAxIHx8IHZhbC5sZW5ndGggPiAyMCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBpbnB1dEVycm9yTWVzc2FnZTogJ+S4jeiDveS4uuepuizmnIDlpJrlj6/lvZXlhaUyMOS4quWtl+espicsCiAgICAgICAgICAgICAgYmVmb3JlQ2xvc2U6IGZ1bmN0aW9uIGJlZm9yZUNsb3NlKGFjdGlvbiwgaW5zdGFuY2UsIGRvbmUpIHsKICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICJjb25maXJtIikgewogICAgICAgICAgICAgICAgICBpbnN0YW5jZS4kcmVmc1siY29uZmlybSJdLiRlbC5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBlID0gZSB8fCB3aW5kb3cuZXZlbnQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0oKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGRvbmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pLnRoZW4oIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgdmFyIF9yZWYyNyA9ICgwLCBfYXN5bmNUb0dlbmVyYXRvcjIuZGVmYXVsdCkoIC8qI19fUFVSRV9fKi8oMCwgX3JlZ2VuZXJhdG9yUnVudGltZTIuZGVmYXVsdCkoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxNyhfcmVmMjYpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwgc3lzVGltZSwgbGssIHBhcmFtOwogICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfcmVnZW5lcmF0b3JSdW50aW1lMi5kZWZhdWx0KSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTE3JChfY29udGV4dDE3KSB7CiAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0MTcucHJldiA9IF9jb250ZXh0MTcubmV4dCkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX3JlZjI2LnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQxNy5uZXh0ID0gMzsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczE2LiRheGlvcy5nZXQoJy9zeXNQb2xpY3lDb250cm9sbGVyL2dldExpY2Vuc2VLZXknKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3lzVGltZSA9IHJlcy5kYXRhLnN5c1RpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxrID0gcmVzLmRhdGEubGs7CiAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHt9KTsKICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAvLyDmj5DkuqTlkI7lj7Dop5LoibLliIbphY0KICAgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gewogICAgICAgICAgICAgICAgICAgICAgICB1c2VySWQ6IF90aGlzMTYuanN1c2VyaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVJZDogX3RoaXMxNi51c2VyUm9sZUlkLAogICAgICAgICAgICAgICAgICAgICAgICBzeXNUaW1lOiBzeXNUaW1lLAogICAgICAgICAgICAgICAgICAgICAgICBsazogbGssCiAgICAgICAgICAgICAgICAgICAgICAgIGFnYWluUHdkOiB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0MTcubmV4dCA9IDY7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxNi4kYXhpb3MucG9zdCgnL3N5c1VzZXJDb250cm9sbGVyL2F1dGhSb2xlJywgcGFyYW0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGUgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTYuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE2LmpzY2FuY2VsKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNi5nZXRMaXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNi4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzLmRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTYuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+inkuiJsuWIhumFjeWksei0pSEnCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE2LmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTcuc3RvcCgpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMTcpOwogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94MjMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBfcmVmMjcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChlKSB7fSk7CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxOC5zdG9wKCk7CiAgICAgICAgfQogICAgICB9LCBfY2FsbGVlMTgsIHRoaXMpOwogICAgfSkpLCAxMDAwKQogIH0KfTsKZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7"},{"version":3,"names":["_lodash","require","_smutil","name","data","pickerOptions","disabledDate","time","getTime","Date","now","sysRole","id","undefined","username","nickname","idcard","phonenumber","mailbox","status","usertype","remark","expDate","jsuserid","roleList","jsusername","jsnickname","userRoleId","jsusertype","statusOptions","value","label","typeOptions","loading","showTable","ids","single","multiple","currentPage","pageSize","total","userList","locktitle","title","jstitle","open","lockopen","jsopen","initPassword","roleOptions","form","lockform","queryParams","menuExpand","menuOptions","defaultProps","children","edit","rules","required","message","trigger","min","max","type","pattern","watch","created","getList","getUserByRole","methods","_this2","_asyncToGenerator2","default","_regeneratorRuntime2","mark","_callee","sysTime2","lk2","searchParams2","wrap","_callee$","_context","prev","next","$axios","get","then","res","sysTime","lk","catch","error","params","stop","handleCheckedTreeExpand","treeList","i","length","$refs","menu","store","nodesMap","expanded","setRowClass","_ref","row","rowIndex","signstr","handleLogOff","_this3","_selectData","userTable","getRadioRecord","$message","$prompt","confirmButtonText","cancelButtonText","inputType","inputValidator","val","inputErrorMessage","beforeClose","action","instance","done","$el","onclick","e","window","event","detail","_ref3","_callee2","_ref2","_callee2$","_context2","doLogoff","_x","apply","arguments","debounce","_ref4","_callee3","againPwd","_this4","param","_callee3$","_context3","post","code","_x2","_x3","statusFormat","_ref5","cellValue","belongTo","sfsh","_ref6","typeFormat","_ref7","handleQuery","_this5","_callee4","searchParams","_callee4$","_context4","records","handleStatusChange","_this6","text","$modal","confirm","userName","changeUserStatus","userId","msgSuccess","cancel","reset","jscancel","clearValidate","resetQuery","resetForm","handleAdd","password","submitForm","_this7","validate","_ref8","_callee7","valid","_callee7$","_context7","_ref10","_callee5","_ref9","_callee5$","_context5","success","_x5","_ref12","_callee6","_ref11","_callee6$","_context6","_x6","_x4","handleResetPwd","_this8","_ref14","_callee8","_ref13","_callee8$","_context8","doResetPwd","_x7","_ref15","_callee9","_this9","_callee9$","_context9","_x8","_x9","handleDelete","_this10","_ref17","_callee10","_ref16","_callee10$","_context10","doDelete","_x10","_ref18","_callee11","_this11","_callee11$","_context11","_x11","_x12","handleUpdate","lockformcancel","sublockform","doRelock","handleRelock","_this12","_ref20","_callee12","_ref19","_callee12$","_context12","_x13","_ref21","_callee13","_this13","_callee13$","_context13","_x14","_x15","_x16","getMenu","rowRoleId","a","_this","Promise","_ref22","_callee14","resolve","reject","param1","_callee14$","_context14","roleId","menus","_x17","_x18","console","getUserRole","userid","_ref23","_callee15","userRoleParams","sysTime1","lk1","_callee15$","_context15","_x19","_x20","getRoleByType","_this15","_ref24","_callee16","_this14","_callee16$","_context16","_x21","_x22","handleAuthRole","roleKey","jssubmitForm","_callee18","_this16","_callee18$","_context18","_ref27","_callee17","_ref26","_callee17$","_context17","_x23","exports","_default"],"sources":["src/views/sysManager/userManager/index.vue"],"sourcesContent":["<template>\r\n <div class=\"app-container\">\r\n <el-row :gutter=\"24\">\r\n <!--用户数据-->\r\n <el-col :span=\"24\" :xs=\"24\">\r\n <el-form :model=\"queryParams\" ref=\"queryForm\" size=\"small\" :inline=\"true\" label-width=\"68px\">\r\n <el-form-item label=\"用户账号\" prop=\"username\">\r\n <el-input\r\n maxlength=\"20\"\r\n v-model=\"queryParams.username\"\r\n placeholder=\"请输入用户账号\"\r\n clearable\r\n style=\"width: 240px\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n <el-input\r\n maxlength=\"11\"\r\n v-model=\"queryParams.phonenumber\"\r\n placeholder=\"请输入手机号码\"\r\n clearable\r\n style=\"width: 240px\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"用户状态\" prop=\"status\">\r\n <el-select\r\n v-model=\"queryParams.status\"\r\n placeholder=\"请选择用户状态\"\r\n clearable\r\n style=\"width: 240px\"\r\n >\r\n <el-option\r\n v-for=\"item in statusOptions\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\">\r\n </el-option>\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" icon=\"el-icon-search\" size=\"mini\" @click=\"handleQuery\">搜索</el-button>\r\n <el-button icon=\"el-icon-refresh\" size=\"mini\" @click=\"resetQuery\">重置</el-button>\r\n </el-form-item>\r\n </el-form>\r\n <el-row :gutter=\"10\" class=\"mb8\">\r\n <el-col :span=\"1.5\">\r\n <el-button\r\n type=\"primary\"\r\n plain\r\n icon=\"el-icon-plus\"\r\n size=\"mini\"\r\n @click=\"handleAdd\"\r\n v-hasPermi=\"['system:user:add']\"\r\n >新增\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button\r\n type=\"success\"\r\n plain\r\n icon=\"el-icon-edit\"\r\n size=\"mini\"\r\n @click=\"handleUpdate\"\r\n v-hasPermi=\"['system:user:edit']\"\r\n >修改\r\n </el-button>\r\n </el-col>\r\n<!-- <el-col :span=\"1.5\">-->\r\n<!-- <el-button-->\r\n<!-- type=\"danger\"-->\r\n<!-- plain-->\r\n<!-- icon=\"el-icon-delete\"-->\r\n<!-- size=\"mini\"-->\r\n<!-- @click=\"handleDelete\"-->\r\n<!-- v-hasPermi=\"['system:user:remove']\"-->\r\n<!-- >删除-->\r\n<!-- </el-button>-->\r\n<!-- </el-col>-->\r\n <el-col :span=\"1.5\">\r\n <el-button\r\n type=\"danger\"\r\n plain\r\n icon=\"el-icon-delete\"\r\n size=\"mini\"\r\n @click=\"handleLogOff\"\r\n v-hasPermi=\"['system:user:logoff']\"\r\n >注销\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button\r\n type=\"success\"\r\n plain\r\n icon=\"el-icon-unlock\"\r\n size=\"mini\"\r\n @click=\"handleRelock\"\r\n v-hasPermi=\"['system:user:relock']\"\r\n >解锁\r\n </el-button>\r\n </el-col>\r\n </el-row>\r\n <div style=\"padding-top: 10px\">\r\n <vxe-table\r\n :row-style=\"setRowClass\"\r\n ref=\"userTable\"\r\n align=\"center\"\r\n :loading=\"loading\"\r\n class=\"mytable-style\"\r\n auto-resize\r\n border\r\n resizable\r\n highlight-current-row\r\n show-overflow\r\n max-height=\"700\"\r\n :radio-config=\"{trigger: 'row'}\"\r\n :data=\"userList.slice((currentPage-1)*pageSize,currentPage*pageSize)\"\r\n >\r\n <vxe-column type=\"radio\" width=\"60\"/>\r\n <vxe-table-column field=\"username\" title=\"用户账号\"/>\r\n <vxe-table-column field=\"nickname\" title=\"用户姓名\"/>\r\n <vxe-table-column field=\"idcard\" title=\"身份证号码\"/>\r\n <vxe-table-column field=\"mailbox\" title=\"用户邮箱\"/>\r\n <vxe-table-column field=\"phonenumber\" title=\"手机号码\"/>\r\n <vxe-table-column field=\"status\" title=\"用户状态\" :formatter=\"statusFormat\"/>\r\n <vxe-table-column field=\"usertype\" title=\"用户类型\" :formatter=\"typeFormat\"/>\r\n <vxe-table-column field=\"signstr\" title=\"是否审核\" :formatter=\"sfsh\"/>\r\n <vxe-table-column field=\"expDate\" title=\"账号截止日期\"/>\r\n <vxe-table-column title=\"操作\" width=\"320\">\r\n <template slot-scope=\"scope\">\r\n <el-button\r\n v-if=\"scope.row.id !== 1 && scope.row.id !== 2 && scope.row.id !== 24\"\r\n size=\"mini\"\r\n type=\"text\"\r\n icon=\"el-icon-edit\"\r\n @click=\"handleResetPwd(scope.row)\"\r\n v-hasPermi=\"['system:user:send']\"\r\n >初始/重置密码\r\n </el-button>\r\n <el-button\r\n v-if=\"scope.row.id !== 1 && scope.row.id !== 2 && scope.row.id !== 24\"\r\n size=\"mini\"\r\n type=\"text\"\r\n icon=\"el-icon-circle-check\"\r\n @click=\"handleAuthRole(scope.row)\"\r\n v-hasPermi=\"['system:user:role']\"\r\n >分配角色\r\n </el-button>\r\n </template>\r\n </vxe-table-column>\r\n </vxe-table>\r\n\r\n <vxe-pager\r\n v-show=\"showTable\"\r\n perfect\r\n :current-page.sync=\"currentPage\"\r\n :page-size.sync=\"pageSize\"\r\n :total=\"total\"\r\n :page-sizes=\"[10,50,100]\"\r\n :layouts=\"['PrevJump', 'PrevPage','JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']\"\r\n >\r\n </vxe-pager>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n\r\n <!-- 添加或修改用户配置对话框 -->\r\n <el-dialog :title=\"title\" :visible.sync=\"open\" width=\"750px\" append-to-body>\r\n <el-form ref=\"form\" :model=\"form\" :rules=\"rules\" width=\"730px\" label-width=\"100px\">\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户账号\" prop=\"username\">\r\n <el-input id=\"un\" ref=\"un\" style=\"width: 220px\" v-model=\"form.username\" placeholder=\"请输入用户账号\"\r\n maxlength=\"20\" :disabled=\"edit\"/>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"身份证号码\" prop=\"idcard\">\r\n <el-input style=\"width: 220px\" v-model=\"form.idcard\" placeholder=\"请输入身份证号码\" maxlength=\"18\" :disabled=\"edit\"/>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户类型\">\r\n <el-select style=\"width: 220px\" v-model=\"form.usertype\" placeholder=\"请选择类型\" :disabled=\"edit\">\r\n <el-option\r\n v-for=\"item in typeOptions\"\r\n :key=\"item.value\"\r\n :label=\"item.label\"\r\n :value=\"item.value\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户姓名\" prop=\"nickname\">\r\n <el-input style=\"width: 220px\" v-model=\"form.nickname\" placeholder=\"请输入用户姓名\" maxlength=\"30\"/>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"手机号码\" prop=\"phonenumber\">\r\n <el-input style=\"width: 220px\" v-model=\"form.phonenumber\" placeholder=\"请输入手机号码\" maxlength=\"11\"/>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户邮箱\" prop=\"mailbox\">\r\n <el-input style=\"width: 220px\" v-model=\"form.mailbox\" placeholder=\"请输入邮箱\" maxlength=\"50\"/>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"账号截止日期\">\r\n <el-date-picker\r\n value-format=\"yyyy-MM-dd\"\r\n v-model=\"form.expDate\"\r\n type=\"date\"\r\n placeholder=\"请选择账号截止日期\"\r\n :picker-options=\"pickerOptions\">\r\n </el-date-picker>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n <el-button @click=\"cancel\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 解锁用户对于临时账号需要弹出页面选择截止日期 -->\r\n <el-dialog :title=\"locktitle\" :visible.sync=\"lockopen\" width=\"430px\" append-to-body>\r\n <el-form ref=\"lockform\" :model=\"lockform\" width=\"430px\" label-width=\"120px\">\r\n <font size=\"3\" color=\"red\">解锁临时账号,需要重置账号截止日期!</font>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"账号截止日期\">\r\n <el-date-picker\r\n style=\"width: 220px\"\r\n value-format=\"yyyy-MM-dd\"\r\n v-model=\"lockform.expDate\"\r\n type=\"date\"\r\n placeholder=\"请选择账号截止日期\"\r\n :picker-options=\"pickerOptions\">\r\n </el-date-picker>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"输入登录密码\">\r\n <el-input\r\n style=\"width: 220px\"\r\n v-model=\"lockform.password\"\r\n type=\"password\"\r\n auto-complete=\"off\"\r\n placeholder=\"密码\"\r\n maxlength=\"20\"\r\n />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"sublockform\">确 定</el-button>\r\n <el-button @click=\"lockformcancel\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 分配角色对话框 -->\r\n <el-dialog :title=\"jstitle\" :visible.sync=\"jsopen\" width=\"650px\" append-to-body>\r\n <el-form width=\"630px\" label-width=\"80px\">\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户账号\">\r\n <el-input style=\"width: 220px\" v-model=\"jsusername\"\r\n maxlength=\"20\" :disabled=\"true\"/>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"用户姓名\">\r\n <el-input style=\"width: 220px\" v-model=\"jsnickname\" maxlength=\"30\" :disabled=\"true\"/>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"角色类型\" style=\"width: 100px\">\r\n <el-select style=\"width: 220px\" v-model=\"userRoleId\" placeholder=\"请选择类型\" :disabled=\"edit\" @change=\"getMenu(userRoleId)\">\r\n <el-option\r\n v-for=\"item in roleList\"\r\n :key=\"item.roleId\"\r\n :label=\"item.roleName\"\r\n :value=\"item.roleId\"\r\n ></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"菜单权限\">\r\n <el-checkbox v-model=\"menuExpand\" @change=\"handleCheckedTreeExpand($event, 'menu')\">展开/折叠</el-checkbox>\r\n <el-tree\r\n class=\"tree-border\"\r\n :data=\"menuOptions\"\r\n ref=\"menu\"\r\n node-key=\"id\"\r\n empty-text=\"无数据,请选择角色类型!\"\r\n :props=\"defaultProps\"\r\n ></el-tree>\r\n </el-form-item>\r\n\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"jssubmitForm\">确 定</el-button>\r\n <el-button @click=\"jscancel\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {debounce} from 'lodash'\r\nimport {userinfoDecrypt} from \"@/utils/smutil\";\r\n\r\nexport default {\r\n name: \"User\",\r\n data() {\r\n return {\r\n pickerOptions:{\r\n disabledDate(time){\r\n return time.getTime()<Date.now()-8.64e7\r\n }\r\n },\r\n sysRole:'',\r\n id: undefined,\r\n username: undefined,\r\n nickname: undefined,\r\n idcard: undefined,\r\n phonenumber: undefined,\r\n mailbox: undefined,\r\n status: \"0\",\r\n usertype: \"0\",\r\n remark: undefined,\r\n expDate: undefined,\r\n // 角色表格数据\r\n jsuserid: '',\r\n roleList: [],\r\n jsusername: '',\r\n jsnickname: '',\r\n userRoleId: '',\r\n jsusertype: '',\r\n statusOptions: [\r\n {value: '0', label: '正常'},\r\n {value: '1', label: '锁定'},\r\n {value: '2', label: '注销'}\r\n ],\r\n typeOptions: [\r\n {value: '0', label: '管理员'},\r\n {value: '1', label: '业务用户'}\r\n ],\r\n // 遮罩层\r\n loading: true,\r\n showTable: true,\r\n // 选中数组\r\n ids: [],\r\n // 非单个禁用\r\n single: true,\r\n // 非多个禁用\r\n multiple: true,\r\n currentPage: 1,\r\n pageSize: 10,\r\n // 总条数\r\n total: 0,\r\n // 用户表格数据\r\n userList: [],\r\n locktitle:\"鉴别操作\",\r\n // 弹出层标题\r\n title: \"\",\r\n // 角色分配弹出层标题\r\n jstitle: \"\",\r\n // 是否显示弹出层\r\n open: false,\r\n lockopen:false,\r\n // 角色是否显示弹出层\r\n jsopen: false,\r\n // 默认密码\r\n initPassword: undefined,\r\n // 角色选项\r\n roleOptions: [],\r\n // 表单参数\r\n form: {},\r\n lockform:{},\r\n // 查询参数\r\n queryParams: {\r\n username: undefined,\r\n phonenumber: undefined,\r\n status: undefined\r\n },\r\n menuExpand: false,\r\n // 菜单列表\r\n menuOptions: [],\r\n defaultProps: {\r\n children: \"children\",\r\n label: \"label\"\r\n },\r\n edit: false,\r\n // 表单校验\r\n rules: {\r\n username: [\r\n {required: true, message: \"用户账号不能为空\", trigger: \"blur\"},\r\n {min: 5, max: 20, message: '用户账号长度必须介于 5 和 20 之间', trigger: 'blur'}\r\n ],\r\n nickname: [\r\n {required: true, message: \"用户姓名不能为空\", trigger: \"blur\"},\r\n {min: 2, max: 30, message: '用户姓名长度必须介于 2 和 30 之间', trigger: 'blur'}\r\n ],\r\n idcard: [\r\n {required: true, message: \"身份证号码不能为空\", trigger: \"blur\"},\r\n {min: 15, max: 18, message: '身份证号请输入15位或者18位', trigger: 'blur'}\r\n ],\r\n mailbox: [\r\n {required: true, message: \"邮箱不能为空\", trigger: \"blur\"},\r\n {type: \"email\", message: \"请输入正确的邮箱地址\", trigger: [\"blur\", \"change\"]}\r\n ],\r\n phonenumber: [\r\n {required: true, message: \"手机号码不能为空\", trigger: \"blur\"},\r\n {pattern: /^1[3|4|5|6|7|8|9][0-9]\\d{8}$/, message: \"请输入正确的手机号码\", trigger: \"blur\"}\r\n ]\r\n }\r\n };\r\n },\r\n watch: {},\r\n created() {\r\n this.getList()\r\n this.getUserByRole()\r\n },\r\n methods: {\r\n async getUserByRole(){\r\n // 获取当前用户的角色\r\n let sysTime2\r\n let lk2\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime2 = res.data.sysTime\r\n lk2 = res.data.lk\r\n }).catch((error) => {\r\n })\r\n var searchParams2 = {\r\n sysTime: sysTime2,\r\n lk: lk2\r\n }\r\n await this.$axios.get('/sysRoleController/getUserByRole', {params: searchParams2}).then((res) => {\r\n this.sysRole = res.data\r\n }).catch((error) => {\r\n })\r\n },\r\n // 树权限(展开/折叠)\r\n handleCheckedTreeExpand(value, type) {\r\n if (type == 'menu') {\r\n let treeList = this.menuOptions;\r\n for (let i = 0; i < treeList.length; i++) {\r\n this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;\r\n }\r\n }\r\n },\r\n\r\n setRowClass({row, rowIndex}){\r\n if(row.signstr === '1'){\r\n return \"background: #FFEFD5\";\r\n }\r\n },\r\n // 注销操作\r\n handleLogOff(){\r\n let _selectData = this.$refs.userTable.getRadioRecord(true)\r\n if (_selectData == null) {\r\n this.$message({\r\n type: 'warning',\r\n message: '请选择记录!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 1) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置系统管理员用户不能注销!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 2) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审计管理员用户不能注销!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 24) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审核管理员用户不能注销!'\r\n });\r\n return\r\n }\r\n if (_selectData.status == 2) {\r\n this.$message({\r\n type: 'warning',\r\n message: '已注销的账号不能再次注销!'\r\n });\r\n return\r\n }\r\n if (_selectData.signstr == '1') {\r\n this.$message({\r\n type: 'warning',\r\n message: '存在待审核,审核管理员审核后请刷新列表'\r\n });\r\n return\r\n }\r\n this.$prompt('请输入登录密码', '鉴别操作', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputType: 'password',\r\n // customClass:'no-autofill-pwd',\r\n inputValidator: (val) => {\r\n if (val === null || val.length < 1 || val.length > 20) {\r\n return false;\r\n }\r\n },\r\n inputErrorMessage: '不能为空,最多可录入20个字符',\r\n beforeClose(action, instance, done) {\r\n if (action === \"confirm\") {\r\n instance.$refs[\"confirm\"].$el.onclick = (function (e) {\r\n e = e || window.event;\r\n if (e.detail != 0) {\r\n done();\r\n }\r\n })();\r\n } else {\r\n done();\r\n }\r\n }\r\n }).then(async ({value}) => {\r\n this.doLogoff(_selectData, value)\r\n }).catch((e) => {\r\n })\r\n },\r\n /**\r\n * 注销提交\r\n */\r\n doLogoff: debounce(async function (_selectData, againPwd) {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n const param = {\r\n id: _selectData.id,\r\n againPwd: againPwd,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.post('/sysUserController/logOffUser', param).then((res) => {\r\n if (res.code == 0) {\r\n this.$message({\r\n type: 'success',\r\n message: res.data\r\n });\r\n this.getList();\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.data\r\n });\r\n }\r\n }).catch((error) => {\r\n this.$message({\r\n type: 'error',\r\n message: '删除失败!'\r\n });\r\n this.loading = false\r\n })\r\n }, 500),\r\n // 列表状态格式化\r\n statusFormat({cellValue}) {\r\n let belongTo = '未知的类型'\r\n for (let i = 0; i < this.statusOptions.length; i++) {\r\n if (cellValue == \"0\") {\r\n belongTo = \"正常\"\r\n } else if (cellValue == \"1\") {\r\n belongTo = \"锁定\"\r\n } else if (cellValue == \"2\") {\r\n belongTo = \"注销\"\r\n }\r\n }\r\n return belongTo\r\n },\r\n // 列表状态格式化\r\n sfsh({cellValue}) {\r\n let belongTo = '否'\r\n if (cellValue == \"1\") {\r\n belongTo = \"是\"\r\n }\r\n return belongTo\r\n },\r\n // 列表状态格式化\r\n typeFormat({cellValue}) {\r\n let belongTo = '未知的类型'\r\n for (let i = 0; i < this.typeOptions.length; i++) {\r\n if (cellValue == \"0\") {\r\n belongTo = \"管理员\"\r\n } else if (cellValue == \"1\") {\r\n belongTo = \"业务用户\"\r\n }\r\n }\r\n return belongTo\r\n },\r\n /** 搜索按钮操作 */\r\n handleQuery: debounce(function () {\r\n this.currentPage = 1\r\n this.pageSize = 10\r\n this.getList()\r\n }, 1000),\r\n /** 查询用户列表 */\r\n async getList() {\r\n this.loading = true;\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n this.loading = false;\r\n })\r\n\r\n var searchParams = {\r\n currentPage: this.currentPage,\r\n pageSize: this.pageSize,\r\n username: this.queryParams.username,\r\n phonenumber: this.queryParams.phonenumber,\r\n status: this.queryParams.status,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.get('/sysUserController/getAll',\r\n {params: searchParams}).then((res) => {\r\n this.userList = res.data\r\n this.total = res.data.length\r\n\r\n if (res.data.records == '') {\r\n this.showTable = false\r\n } else {\r\n this.showTable = true\r\n }\r\n this.loading = false\r\n }).catch((error) => {\r\n this.loading = false;\r\n // this.$message.error(error)\r\n })\r\n },\r\n // 用户状态修改\r\n handleStatusChange(row) {\r\n let text = row.status === \"0\" ? \"启用\" : \"停用\";\r\n this.$modal.confirm('确认要\"' + text + '\"\"' + row.userName + '\"用户吗?').then(function () {\r\n return changeUserStatus(row.userId, row.status);\r\n }).then(() => {\r\n this.$modal.msgSuccess(text + \"成功\");\r\n }).catch(function () {\r\n row.status = row.status === \"0\" ? \"1\" : \"0\";\r\n });\r\n },\r\n // 取消按钮\r\n cancel() {\r\n this.getList()\r\n this.open = false;\r\n this.reset();\r\n },\r\n // 角色取消按钮\r\n jscancel() {\r\n this.jsopen = false;\r\n this.userRoleId = ''\r\n this.menuOptions=[]\r\n },\r\n // 表单重置\r\n reset() {\r\n this.edit = false;\r\n this.form = {\r\n id: undefined,\r\n username: undefined,\r\n nickname: undefined,\r\n idcard: undefined,\r\n phonenumber: undefined,\r\n mailbox: undefined,\r\n status: \"0\",\r\n usertype: \"0\",\r\n remark: undefined,\r\n expDate: undefined\r\n };\r\n\r\n if (this.$refs[\"form\"]) {\r\n this.$refs[\"form\"].clearValidate();\r\n }\r\n },\r\n /** 重置按钮操作 */\r\n resetQuery() {\r\n this.resetForm(\"queryForm\");\r\n },\r\n /** 新增按钮操作 */\r\n handleAdd() {\r\n this.reset();\r\n this.edit = false;\r\n this.open = true;\r\n this.title = \"添加用户\";\r\n this.form.password = this.initPassword;\r\n },\r\n /** 提交按钮 */\r\n submitForm: debounce(function () {\r\n this.$refs[\"form\"].validate(async valid => {\r\n if (valid) {\r\n if (this.form.id != undefined) {\r\n this.$prompt('请输入登录密码', '鉴别操作', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputType: 'password',\r\n // customClass:'no-autofill-pwd',\r\n inputValidator: (val) => {\r\n if (val === null || val.length < 1 || val.length > 20) {\r\n return false;\r\n }\r\n },\r\n inputErrorMessage: '不能为空,最多可录入20个字符',\r\n beforeClose(action, instance, done) {\r\n if (action === \"confirm\") {\r\n instance.$refs[\"confirm\"].$el.onclick = (function (e) {\r\n e = e || window.event;\r\n if (e.detail != 0) {\r\n done();\r\n }\r\n })();\r\n } else {\r\n done();\r\n }\r\n }\r\n }).then(async ({value}) => {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n this.form.sysTime = sysTime\r\n this.form.lk = lk\r\n this.form.againPwd = value\r\n\r\n // 更新操作\r\n await this.$axios.post('/sysUserController/updateUser', this.form).then((res) => {\r\n if (res.code == 0) {\r\n this.$message.success(res.data)\r\n this.open = false;\r\n this.reset();\r\n this.getList();\r\n }\r\n if (res.code == 1) {\r\n this.$message.error(res.data)\r\n }\r\n this.loading = false\r\n }).catch((error) => {\r\n // this.$message.error(error)\r\n this.loading = false\r\n })\r\n }).catch((e) => {\r\n })\r\n } else {\r\n this.$prompt('请输入登录密码', '鉴别操作', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputType: 'password',\r\n // customClass:'no-autofill-pwd',\r\n inputValidator: (val) => {\r\n if (val === null || val.length < 1 || val.length > 20) {\r\n return false;\r\n }\r\n },\r\n inputErrorMessage: '不能为空,最多可录入20个字符',\r\n beforeClose(action, instance, done) {\r\n if (action === \"confirm\") {\r\n instance.$refs[\"confirm\"].$el.onclick = (function (e) {\r\n e = e || window.event;\r\n if (e.detail != 0) {\r\n done();\r\n }\r\n })();\r\n } else {\r\n done();\r\n }\r\n }\r\n }).then(async ({value}) => {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n this.form.sysTime = sysTime\r\n this.form.lk = lk\r\n this.form.againPwd = value\r\n\r\n // 更新操作\r\n await this.$axios.post('/sysUserController/addUser', this.form).then((res) => {\r\n if (res.code == 0) {\r\n this.$message.success(res.data)\r\n this.open = false;\r\n this.reset();\r\n this.getList();\r\n }\r\n if (res.code == 1) {\r\n this.$message.error(res.data)\r\n }\r\n this.loading = false\r\n }).catch((error) => {\r\n // this.$message.error(error)\r\n this.loading = false\r\n })\r\n }).catch((e) => {\r\n })\r\n }\r\n }\r\n });\r\n }, 1000),\r\n /** 重置密码按钮操作 */\r\n handleResetPwd(row) {\r\n if (row.signstr == '1') {\r\n this.$message({\r\n type: 'warning',\r\n message: '存在待审核,审核管理员审核后请刷新列表'\r\n });\r\n return\r\n }\r\n if (row.status == '2') {\r\n this.$message({\r\n type: 'warning',\r\n message: '已注销的账号不能初始/重置密码!'\r\n });\r\n return\r\n }\r\n\r\n this.$prompt('请输入登录密码', '鉴别操作', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputType: 'password',\r\n // customClass:'no-autofill-pwd',\r\n inputValidator: (val) => {\r\n if (val === null || val.length < 1 || val.length > 20) {\r\n return false;\r\n }\r\n },\r\n inputErrorMessage: '不能为空,最多可录入20个字符',\r\n beforeClose(action, instance, done) {\r\n if (action === \"confirm\") {\r\n instance.$refs[\"confirm\"].$el.onclick = (function (e) {\r\n e = e || window.event;\r\n if (e.detail != 0) {\r\n done();\r\n }\r\n })();\r\n } else {\r\n done();\r\n }\r\n }\r\n }).then(async ({value}) => {\r\n this.doResetPwd(row, value)\r\n }).catch((e) => {\r\n })\r\n },\r\n doResetPwd: debounce(async function (row,againPwd) {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n const param = {\r\n id: row.id,\r\n againPwd: againPwd,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.post('/sysUserController/resetPassword', param).then((res) => {\r\n if (res.code == 0) {\r\n this.$message({\r\n type: 'success',\r\n message: '创建并发送成功!'\r\n });\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.data\r\n });\r\n }\r\n }).catch((error) => {\r\n this.$message({\r\n type: 'error',\r\n message: '创建密码失败!'\r\n });\r\n this.loading = false\r\n })\r\n }, 1000),\r\n\r\n /** 删除按钮操作 */\r\n handleDelete() {\r\n const _selectData = this.$refs.userTable.getRadioRecord(true)\r\n if (_selectData == null) {\r\n this.$message({\r\n type: 'warning',\r\n message: '请选择记录!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 1) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置系统管理员不能删除!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 2) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审计管理员不能删除!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 24) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审核管理员不能删除!'\r\n });\r\n return\r\n }\r\n this.$prompt('请输入密码', '鉴别操作', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputType: 'password',\r\n // customClass:'no-autofill-pwd',\r\n inputValidator: (val) => {\r\n if (val === null || val.length < 1 || val.length > 20) {\r\n return false;\r\n }\r\n },\r\n inputErrorMessage: '不能为空,最多可录入20个字符',\r\n beforeClose(action, instance, done) {\r\n if (action === \"confirm\") {\r\n instance.$refs[\"confirm\"].$el.onclick = (function (e) {\r\n e = e || window.event;\r\n if (e.detail != 0) {\r\n done();\r\n }\r\n })();\r\n } else {\r\n done();\r\n }\r\n }\r\n }).then(async ({value}) => {\r\n this.doDelete(_selectData, value)\r\n }).catch((e) => {\r\n })\r\n },\r\n /**\r\n * 删除提交\r\n */\r\n doDelete: debounce(async function (_selectData, againPwd) {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n const param = {\r\n id: _selectData.id,\r\n againPwd: againPwd,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.post('/sysUserController/delUser', param).then((res) => {\r\n if (res.code == 0) {\r\n this.$message({\r\n type: 'success',\r\n message: res.data\r\n });\r\n this.getList();\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.data\r\n });\r\n }\r\n }).catch((error) => {\r\n this.$message({\r\n type: 'error',\r\n message: '删除失败!'\r\n });\r\n this.loading = false\r\n })\r\n }, 500),\r\n /** 修改按钮操作 */\r\n handleUpdate() {\r\n this.reset();\r\n let _selectData = this.$refs.userTable.getRadioRecord(true)\r\n if (_selectData == null) {\r\n this.$message({\r\n type: 'warning',\r\n message: '请选择记录!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 1) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置系统管理员不能修改!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 2) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审计管理员不能修改!'\r\n });\r\n return\r\n }\r\n if (_selectData.id == 24) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审核管理员不能修改!'\r\n });\r\n return\r\n }\r\n if (_selectData.status == 2) {\r\n this.$message({\r\n type: 'warning',\r\n message: '注销的账号不能操作!'\r\n });\r\n return\r\n }\r\n if (_selectData.signstr == '1') {\r\n this.$message({\r\n type: 'warning',\r\n message: '存在待审核,审核管理员审核后请刷新列表'\r\n });\r\n return\r\n }\r\n this.form = _selectData;\r\n this.open = true;\r\n this.title = \"修改用户\";\r\n this.edit = true;\r\n },\r\n\r\n // 取消按钮\r\n lockformcancel() {\r\n this.lockopen = false;\r\n this.lockform = {}\r\n },\r\n sublockform(){\r\n if (this.lockform.expDate==null || this.lockform.expDate==undefined){\r\n this.$message({\r\n type: 'warning',\r\n message: '请选择截止日期!'\r\n });\r\n return\r\n }\r\n if (this.lockform.password==null || this.lockform.password==undefined){\r\n this.$message({\r\n type: 'warning',\r\n message: '请输入登录密码!'\r\n });\r\n return\r\n }\r\n const _selectData = this.$refs.userTable.getRadioRecord(true)\r\n this.doRelock(_selectData, this.lockform.password,this.lockform.expDate)\r\n },\r\n /** 解锁按钮操作 */\r\n handleRelock() {\r\n const _selectData = this.$refs.userTable.getRadioRecord(true)\r\n if (_selectData == null) {\r\n this.$message({\r\n type: 'warning',\r\n message: '请选择记录!'\r\n });\r\n return\r\n }\r\n if (_selectData.status == 2) {\r\n this.$message({\r\n type: 'warning',\r\n message: '注销的账号不能操作!'\r\n });\r\n return\r\n }\r\n if (_selectData.status !== '1') {\r\n this.$message({\r\n type: 'warning',\r\n message: '只能对【锁定】状态的进行解锁!'\r\n });\r\n return\r\n }\r\n if (_selectData.signstr == '1') {\r\n this.$message({\r\n type: 'warning',\r\n message: '存在待审核,审核管理员审核后请刷新列表'\r\n });\r\n return\r\n }\r\n\r\n // 判断是否临时账号\r\n if (_selectData.expDate){\r\n this.lockopen = true\r\n }\r\n else{\r\n this.$prompt('请输入登录密码', '鉴别操作', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputType: 'password',\r\n // customClass:'no-autofill-pwd',\r\n inputValidator: (val) => {\r\n if (val === null || val.length < 1 || val.length > 20) {\r\n return false;\r\n }\r\n },\r\n inputErrorMessage: '不能为空,最多可录入20个字符',\r\n beforeClose(action, instance, done) {\r\n if (action === \"confirm\") {\r\n instance.$refs[\"confirm\"].$el.onclick = (function (e) {\r\n e = e || window.event;\r\n if (e.detail != 0) {\r\n done();\r\n }\r\n })();\r\n } else {\r\n done();\r\n }\r\n }\r\n }).then(async ({value}) => {\r\n this.doRelock(_selectData, value)\r\n }).catch((e) => {\r\n })\r\n }\r\n },\r\n /**\r\n * 解锁提交\r\n */\r\n doRelock: debounce(async function (_selectData, againPwd,expDate) {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n const param = {\r\n id: _selectData.id,\r\n againPwd: againPwd,\r\n expDate:expDate,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await this.$axios.post('/sysUserController/relockUser', param).then((res) => {\r\n if (res.code == 0) {\r\n this.$message({\r\n type: 'success',\r\n message: res.data\r\n });\r\n this.getList();\r\n this.lockformcancel();\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.data\r\n });\r\n }\r\n }).catch((error) => {\r\n this.$message({\r\n type: 'error',\r\n message: '解锁失败!'\r\n });\r\n this.loading = false\r\n })\r\n }, 1000),\r\n\r\n /**\r\n * 角色类型改变时更改权限列表\r\n * @param rowRoleId\r\n * @returns {Promise<unknown>}\r\n */\r\n getMenu(rowRoleId){\r\n const a = this.$axios\r\n const _this = this\r\n return new Promise(async function (resolve, reject) {\r\n let sysTime\r\n let lk\r\n await a.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n\r\n var param1 = {\r\n roleId: rowRoleId,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n\r\n await a.get('/sysMenuController/roleMenuTreeselectForUser',\r\n {params: param1}).then((res) => {\r\n _this.menuOptions = res.data.menus;\r\n })\r\n }).catch((error) => {\r\n console.error('获取用户角色出错' + error)\r\n })\r\n },\r\n getUserRole(userid) {\r\n const a = this.$axios\r\n const _this = this\r\n return new Promise(async function (resolve, reject) {\r\n let sysTime\r\n let lk\r\n await a.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n var userRoleParams = {\r\n userId: userid,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await a.get('/sysUserController/getUserRole',\r\n {params: userRoleParams}).then(res => {\r\n if (res.data==undefined){\r\n _this.userRoleId = ''\r\n }\r\n else{\r\n _this.userRoleId = res.data.roleId\r\n }\r\n // 返回userRole对象\r\n resolve(res.data)\r\n })\r\n\r\n let sysTime1\r\n let lk1\r\n await a.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime1 = res.data.sysTime\r\n lk1 = res.data.lk\r\n }).catch((error) => {\r\n })\r\n var param1 = {\r\n roleId: _this.userRoleId,\r\n sysTime: sysTime1,\r\n lk: lk1\r\n }\r\n\r\n await a.get('/sysMenuController/roleMenuTreeselectForUser',\r\n {params: param1}).then((res) => {\r\n _this.menuOptions = res.data.menus;\r\n })\r\n }).catch((error) => {\r\n console.error('获取用户角色出错' + error)\r\n })\r\n },\r\n getRoleByType(usertype) {\r\n // 根据用户类型获取角色列表\r\n const a = this.$axios\r\n let _this = this\r\n return new Promise(async function (resolve, reject) {\r\n let sysTime\r\n let lk\r\n await a.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n var searchParams = {\r\n usertype: usertype,\r\n sysTime: sysTime,\r\n lk: lk\r\n }\r\n await a.get('/sysRoleController/getRoleByType',\r\n {params: searchParams}).then(res => {\r\n if (res.code == 0) {\r\n // 返回角色列表\r\n _this.roleList = res.data\r\n resolve(res.data)\r\n } else {\r\n // 输出后端返回信息\r\n this.$message({\r\n type: 'error',\r\n message: res.data\r\n });\r\n }\r\n })\r\n }).catch((error) => {\r\n this.loading = false\r\n this.$message.error(error)\r\n })\r\n },\r\n /** 分配角色操作 */\r\n handleAuthRole: debounce(function (row) {\r\n if (this.sysRole.roleKey=='XTGL' && row.usertype=='1'){\r\n // 系统管理员不能给业务用户分配权限\r\n this.$message({\r\n type: 'warning',\r\n message: '系统管理员不能给业务用户分配权限,请业务管理员进行分配!'\r\n });\r\n return\r\n }\r\n if (row.id == 1) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置系统管理员不能分配角色!'\r\n });\r\n return\r\n }\r\n if (row.id == 2) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审计管理员不能分配角色!'\r\n });\r\n return\r\n }\r\n if (row.id == 24) {\r\n this.$message({\r\n type: 'warning',\r\n message: '内置审核管理员不能分配角色!'\r\n });\r\n return\r\n }\r\n if (row.status == '2') {\r\n this.$message({\r\n type: 'warning',\r\n message: '注销的账号不能操作!'\r\n });\r\n return\r\n }\r\n if (row.signstr == '1') {\r\n this.$message({\r\n type: 'warning',\r\n message: '存在待审核,审核管理员审核后请刷新列表'\r\n });\r\n return\r\n }\r\n\r\n this.jsuserid = row.id\r\n this.jsusername = row.username\r\n this.jsnickname = row.nickname\r\n\r\n this.getRoleByType(row.usertype)\r\n this.getUserRole(this.jsuserid)\r\n this.jsopen = true;\r\n this.title = \"分配角色\";\r\n // Promise.all([this.getRoleByType(row.usertype), this.getUserRole(this.jsuserid)]).then((res) => {\r\n // if (res[1] != '' && res[1] != undefined) {\r\n // const roleTable = this.$refs.xTable.getTableData()\r\n // for (var i = 0; i < roleTable.tableData.length; i++) {\r\n // if (res[1].roleId == roleTable.tableData[i].roleId) {\r\n // // 将原有的角色勾选上\r\n // this.$refs.xTable.setCheckboxRow(roleTable.tableData[i], true)\r\n // }\r\n // }\r\n // }\r\n // }).catch(e => {\r\n // this.loading = false\r\n // this.$message.error(\"获取分配角色异常:\" + e)\r\n // })\r\n }, 1000),\r\n\r\n\r\n /** 角色分配提交按钮 */\r\n jssubmitForm: debounce(async function () {\r\n this.$prompt('请输入登录密码', '鉴别操作', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputType: 'password',\r\n // customClass:'no-autofill-pwd',\r\n inputValidator: (val) => {\r\n if (val === null || val.length < 1 || val.length > 20) {\r\n return false;\r\n }\r\n },\r\n inputErrorMessage: '不能为空,最多可录入20个字符',\r\n beforeClose(action, instance, done) {\r\n if (action === \"confirm\") {\r\n instance.$refs[\"confirm\"].$el.onclick = (function (e) {\r\n e = e || window.event;\r\n if (e.detail != 0) {\r\n done();\r\n }\r\n })();\r\n } else {\r\n done();\r\n }\r\n }\r\n }).then(async ({value}) => {\r\n let sysTime\r\n let lk\r\n await this.$axios.get('/sysPolicyController/getLicenseKey').then((res) => {\r\n sysTime = res.data.sysTime\r\n lk = res.data.lk\r\n }).catch((error) => {\r\n })\r\n\r\n // 提交后台角色分配\r\n const param = {\r\n userId: this.jsuserid,\r\n roleId: this.userRoleId,\r\n sysTime: sysTime,\r\n lk: lk,\r\n againPwd: value\r\n }\r\n await this.$axios.post('/sysUserController/authRole', param).then((res) => {\r\n if (res.code == 0) {\r\n this.$message({\r\n type: 'success',\r\n message: res.data\r\n });\r\n this.jscancel()\r\n this.getList()\r\n } else {\r\n this.$message({\r\n type: 'error',\r\n message: res.data\r\n });\r\n }\r\n }).catch((error) => {\r\n this.$message({\r\n type: 'error',\r\n message: '角色分配失败!'\r\n });\r\n this.loading = false\r\n })\r\n }).catch((e) => {\r\n })\r\n }, 1000)\r\n }\r\n};\r\n</script>\r\n<!--<style rel=\"stylesheet/scss\" lang=\"scss\">-->\r\n<!--.no-autofill-pwd{-->\r\n<!-- .el-message-box__content{-->\r\n<!-- .el-input__inner{-->\r\n<!-- text-security:disc!important;-->\r\n<!-- -webkit-text-security:disc!important;-->\r\n<!-- }-->\r\n<!-- }-->\r\n<!--}-->\r\n<!--</style>-->\r\n"],"mappings":"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"}]}
|