{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\control\\HtUserSelector.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\control\\HtUserSelector.vue","mtime":1701311300928},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgVnVlIGZyb20gInZ1ZSI7DQppbXBvcnQgeyBtYXBTdGF0ZSB9IGZyb20gInZ1ZXgiOw0KaW1wb3J0IHV0aWxzIGZyb20gIkAvdXRpbHMuanMiOw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJodC11c2VyLXNlbGVjdG9yIiwNCiAgcHJvcHM6IFsNCiAgICAidmFsaWRhdGUiLA0KICAgICJ2YWx1ZSIsDQogICAgIm5hbWUiLA0KICAgICJwZXJtaXNzaW9uIiwNCiAgICAic2luZ2xlIiwNCiAgICAic2VsZWN0b3Jjb25maWciLA0KCSJ0b29sdGlwcGxhY2VtZW50Ig0KICBdLA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICB0YWJsZURhdGE6ICIiLA0KICAgICAgb3JnSWQ6ICIiLA0KICAgICAgdXNlckRpYWxvZ1Zpc2libGU6IGZhbHNlLA0KICAgICAgZGVmYXVsdFByb3BzOiB7DQogICAgICAgIGNoaWxkcmVuOiAiY2hpbGRyZW4iLA0KICAgICAgICBsYWJlbDogIm5hbWUiDQogICAgICB9LA0KICAgICAgc2VsZWN0VXNlclByb3BzOiB7DQogICAgICAgIGxhYmVsOiAiZnVsbG5hbWUiDQogICAgICB9LA0KICAgICAgc2VsZWN0VXNlcnM6IG51bGwsDQogICAgICBjdXJyZW50RGltZW5zaW9uOiBudWxsLA0KICAgICAgaW5wdXRTdWZmaXhIZWlnaHQ6IDMwLA0KICAgICAgY29uZmlnOiBudWxsLA0KICAgICAgdXBkYXRpbmc6IGZhbHNlLA0KICAgICAgY3VycmVudFVzZXI6IG51bGwsDQogICAgICBzaW5nbGVTZWxlY3RJZDogbnVsbA0KICAgIH07DQogIH0sDQogIGNvbXB1dGVkOiBtYXBTdGF0ZSh7DQogICAgcGFnaW5hdGlvbjogc3RhdGUgPT4gc3RhdGUudXNlci5wYWdpbmF0aW9uLA0KICAgIHRvdGFsOiBzdGF0ZSA9PiBzdGF0ZS51c2VyLnRvdGFsLA0KICAgIGRpbWVuc2lvbnM6IHN0YXRlID0+IHsNCiAgICAgIHJldHVybiBzdGF0ZS51c2VyLmRpbWVuc2lvbnM7DQogICAgfSwNCiAgICAvLyDlt6bkvqfnu4Tnu4fmoJHnmoTmlbDmja4NCiAgICBvcmdzOiBzdGF0ZSA9PiB7DQogICAgICByZXR1cm4gc3RhdGUudXNlci5vcmdzOw0KICAgIH0sDQogICAgLy8g5Lit6Ze055So5oi36KGo5qC855qE5pWw5o2uDQogICAgdXNlcnM6IHN0YXRlID0+IHsNCiAgICAgIHJldHVybiBzdGF0ZS51c2VyLnVzZXJzOw0KICAgIH0sDQogICAgaXNTaW5nbGU6IGZ1bmN0aW9uKCkgew0KICAgICAgaWYgKHRoaXMuc2luZ2xlID09PSB1bmRlZmluZWQgfHwgdGhpcy5zaW5nbGUgPT09IG51bGwpIHsNCiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3Jjb25maWcpIHsNCiAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RvcmNvbmZpZy5pc1NpbmdsZTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICB9DQogICAgICBpZiAodGhpcy5zaW5nbGUgPT09ICIiKSB7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgfQ0KICAgICAgcmV0dXJuICEhdGhpcy5zaW5nbGU7DQogICAgfSwNCiAgICBpbnB1dFZhbDogZnVuY3Rpb24oKSB7DQogICAgICBpZiAoIXRoaXMudmFsdWUpIHsNCiAgICAgICAgcmV0dXJuIG51bGw7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYmluZFNldCkgew0KICAgICAgICBpZiAoIXV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJmdWxsbmFtZSIpKSB7DQogICAgICAgICAgdGhyb3cgImh0LXVzZXItc2VsZWN0b3LnmoRiaW5k5bGe5oCn5Lit5b+F6aG76YWN572uZnVsbG5hbWXlsZ7mgKcuIjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAodGhpcy52YWx1ZS5jb25zdHJ1Y3RvciAhPSBTdHJpbmcpIHsNCiAgICAgICAgICB0aHJvdyAiaHQtdXNlci1zZWxlY3RvcuS4reaciWJpbmTlsZ7mgKfml7bvvIxmdWxsbmFtZeW/hemhu+aYr+Wtl+espuS4si4iOw0KICAgICAgICB9DQogICAgICAgIGxldCBzdWJJbmRleCA9IG51bGw7DQogICAgICAgIGlmICh0aGlzLiRlbCkgew0KICAgICAgICAgIHN1YkluZGV4ID0gdXRpbHMuZ2V0U29tZUF0dHJpYnV0ZUZyb21QYXJlbnRFbGVtZW50KA0KICAgICAgICAgICAgdGhpcy4kZWwsDQogICAgICAgICAgICAiZGF0YS1pbmRleCINCiAgICAgICAgICApOw0KICAgICAgICB9DQogICAgICAgIGxldCBuYW1lQXJ5ID0gdGhpcy52YWx1ZS5zcGxpdCgiLCIpOw0KICAgICAgICBsZXQgaWRBcnkgPSBudWxsOw0KICAgICAgICBsZXQgYWNjb3VudEFyeSA9IG51bGw7DQogICAgICAgIGxldCBlbWFpbEFyeSA9IFtdOw0KICAgICAgICBsZXQgbW9iaWxlQXJ5ID0gW107DQogICAgICAgIGNvbnN0IGlkUGF0aCA9IHV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJpZCIpOw0KICAgICAgICBpZiAoaWRQYXRoKSB7DQogICAgICAgICAgbGV0IGlkVmFsID0gdXRpbHMuZ2V0VmFsdWVCeVBhdGgodGhpcy4kcGFyZW50LCBpZFBhdGgsIHN1YkluZGV4KTsNCiAgICAgICAgICBpZiAoIWlkVmFsIHx8IGlkVmFsLmNvbnN0cnVjdG9yICE9IFN0cmluZykgew0KICAgICAgICAgICAgdGhyb3cgImh0LXVzZXItc2VsZWN0b3LkuK3mnIliaW5k5bGe5oCn5LitaWTnmoTlgLzlv4XpobvmmK/pnZ7nqbrnmoTlrZfnrKbkuLIuIjsNCiAgICAgICAgICB9DQogICAgICAgICAgaWRBcnkgPSBpZFZhbC5zcGxpdCgiLCIpOw0KICAgICAgICB9DQogICAgICAgIGNvbnN0IGFjY291bnRQYXRoID0gdXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImFjY291bnQiKTsNCiAgICAgICAgaWYgKGFjY291bnRQYXRoKSB7DQogICAgICAgICAgbGV0IGFjY291bnRWYWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aCgNCiAgICAgICAgICAgIHRoaXMuJHBhcmVudCwNCiAgICAgICAgICAgIGFjY291bnRQYXRoLA0KICAgICAgICAgICAgc3ViSW5kZXgNCiAgICAgICAgICApOw0KICAgICAgICAgIGlmICghYWNjb3VudFZhbCB8fCBhY2NvdW50VmFsLmNvbnN0cnVjdG9yICE9IFN0cmluZykgew0KICAgICAgICAgICAgdGhyb3cgImh0LXVzZXItc2VsZWN0b3LkuK3mnIliaW5k5bGe5oCn5LitYWNjb3VudOeahOWAvOW/hemhu+aYr+mdnuepuueahOWtl+espuS4si4iOw0KICAgICAgICAgIH0NCiAgICAgICAgICBhY2NvdW50QXJ5ID0gYWNjb3VudFZhbC5zcGxpdCgiLCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgY29uc3QgZW1haWxQYXRoID0gdXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImVtYWlsIik7DQogICAgICAgIGlmIChlbWFpbFBhdGgpIHsNCiAgICAgICAgICBsZXQgZW1haWxWYWwgPSB1dGlscy5nZXRWYWx1ZUJ5UGF0aCgNCiAgICAgICAgICAgIHRoaXMuJHBhcmVudCwNCiAgICAgICAgICAgIGVtYWlsUGF0aCwNCiAgICAgICAgICAgIHN1YkluZGV4DQogICAgICAgICAgKTsNCiAgICAgICAgICBpZiAoZW1haWxWYWwgJiYgIGVtYWlsVmFsLmNvbnN0cnVjdG9yID09IFN0cmluZykgew0KICAgICAgICAgICAgZW1haWxBcnkgPSBlbWFpbFZhbC5zcGxpdCgiLCIpOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IG1vYmlsZVBhdGggPSB1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAibW9iaWxlIik7DQogICAgICAgIGlmIChtb2JpbGVQYXRoKSB7DQogICAgICAgICAgbGV0IG1vYmlsZVZhbCA9IHV0aWxzLmdldFZhbHVlQnlQYXRoKA0KICAgICAgICAgICAgdGhpcy4kcGFyZW50LA0KICAgICAgICAgICAgbW9iaWxlUGF0aCwNCiAgICAgICAgICAgIHN1YkluZGV4DQogICAgICAgICAgKTsNCiAgICAgICAgICBpZiAobW9iaWxlVmFsICYmIG1vYmlsZVZhbC5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHsNCiAgICAgICAgICAgIG1vYmlsZUFyeSA9IG1vYmlsZVZhbC5zcGxpdCgiLCIpOw0KICAgICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgICAgICAgbGV0IHJlc3VsdCA9IFtdOw0KICAgICAgICBuYW1lQXJ5LmZvckVhY2goKG0sIGkpID0+IHsNCiAgICAgICAgICBsZXQgbiA9IHsgZnVsbG5hbWU6IG0gfTsNCiAgICAgICAgICBpZiAoaWRBcnkpIHsNCiAgICAgICAgICAgIG5bImlkIl0gPSBpZEFyeVtpXTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGFjY291bnRBcnkpIHsNCiAgICAgICAgICAgIG5bImFjY291bnQiXSA9IGFjY291bnRBcnlbaV07DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmIChlbWFpbEFyeSkgew0KICAgICAgICAgICAgblsiZW1haWwiXSA9IGVtYWlsQXJ5W2ldOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGlmIChtb2JpbGVBcnkpIHsNCiAgICAgICAgICAgIG5bIm1vYmlsZSJdID0gbW9iaWxlQXJ5W2ldOw0KICAgICAgICAgIH0NCiAgICAgICAgICByZXN1bHQucHVzaChuKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUuY29uc3RydWN0b3IgPT0gQXJyYXkpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gbnVsbDsNCiAgICAgIH0NCiAgICB9LA0KICAgIGlucHV0V3JpdGVhYmxlOiBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB1dGlscy5nZXRXcml0ZWFibGUodGhpcy5wZXJtaXNzaW9uKTsNCiAgICB9LA0KICAgIGlucHV0VmFsaWRhdGU6IGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIHZhbGlkYXRlT2JqID0gdGhpcy4kc3RvcmUuc3RhdGUuaW5kZXgudmFsaWRhdGU7DQogICAgICByZXR1cm4gdXRpbHMuYWRkUmVxdWlyZWRPck5vdCgNCiAgICAgICAgdGhpcy5wZXJtaXNzaW9uLA0KICAgICAgICB0aGlzLnZhbGlkYXRlLA0KICAgICAgICB2YWxpZGF0ZU9iaiwNCiAgICAgICAgdGhpcw0KICAgICAgKTsNCiAgICB9LA0KICAgIGlucHV0TmFtZTogZnVuY3Rpb24oKSB7DQogICAgICBsZXQgbGFiZWxkZXNjID0gIiI7DQogICAgICBpZih0aGlzLiRzbG90cyAmJiB0aGlzLiRzbG90cy5sYWJlbGRlc2MgJiYgdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuICYmIHRoaXMuJHNsb3RzLmxhYmVsZGVzY1swXS5jaGlsZHJlblswXS50ZXh0KXsNCiAgICAgICAgbGFiZWxkZXNjID0gdGhpcy4kc2xvdHMubGFiZWxkZXNjWzBdLmNoaWxkcmVuWzBdLnRleHQ7DQogICAgICAgIHJldHVybiB0aGlzLm5hbWUgPyB0aGlzLm5hbWUgOiB1dGlscy5nZXROYW1lKCkrICItIiArbGFiZWxkZXNjOw0KICAgICAgfWVsc2V7DQogICAgICAgIHJldHVybiB0aGlzLm5hbWUgPyB0aGlzLm5hbWUgOiB1dGlscy5nZXROYW1lKCk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDmmK/lkKbmmL7npLrlvZPliY3nlKjmiLcNCiAgICBzZWxlY3RDdXJyZW50OiBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yY29uZmlnID8gdGhpcy5zZWxlY3RvcmNvbmZpZy5zZWxlY3RDdXJyZW50IDogZmFsc2U7DQogICAgfSwNCiAgICAvLyDmmK/lkKbmnInlm57loavorr7nva4NCiAgICBiaW5kU2V0OiBmdW5jdGlvbigpIHsNCiAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yY29uZmlnID8gdGhpcy5zZWxlY3RvcmNvbmZpZy5iaW5kIDogbnVsbDsNCiAgICB9DQogIH0pLA0KICBtb3VudGVkKCkgew0KICAgIC8vIOayoeacieWAvOiAjOS4lOmcgOimgeaYvuekuuW9k+WJjeeUqOaItw0KICAgIGlmICghdGhpcy5pbnB1dFZhbCAmJiB0aGlzLnNlbGVjdEN1cnJlbnQpIHsNCiAgICAgIGlmICh0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmN1cnJlbnRVc2VyRGV0YWlsID09IG51bGwpIHsNCiAgICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgICAuZGlzcGF0Y2goInVzZXIvbG9hZEN1cnJlbnRVc2VyRGV0YWlsIikNCiAgICAgICAgICAudGhlbihjdXJyZW50VXNlckRldGFpbCA9PiB7DQogICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gY3VycmVudFVzZXJEZXRhaWwudXNlcjsNCiAgICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcnMgPSBbY3VycmVudFVzZXJEZXRhaWwudXNlcl07DQogICAgICAgICAgICB0aGlzLnN5bmNJbnB1dFZhbHVlKCk7DQogICAgICAgICAgICB0aGlzLmNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKTsNCiAgICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB0aGlzLiRzdG9yZS5zdGF0ZS51c2VyLmN1cnJlbnRVc2VyRGV0YWlsLnVzZXI7DQogICAgICAgIHRoaXMuc2VsZWN0VXNlcnMgPSBbdGhpcy5jdXJyZW50VXNlcl07DQogICAgICAgIHRoaXMuc3luY0lucHV0VmFsdWUoKTsNCiAgICAgICAgdGhpcy5jYWxhY0lucHV0U3VmZml4SGVpZ2h0KCk7DQogICAgICB9DQogICAgfQ0KICB9LA0KICBjcmVhdGVkKCkgew0KICAgIHRoaXMuJHZhbGlkYXRvciA9IHRoaXMuJHJvb3QuJHZhbGlkYXRvcjsNCiAgICBsZXQgcGFnZUJlYW4gPSB7DQogICAgICBwYWdlQmVhbjogeyBwYWdlOiAiMSIsIHBhZ2VTaXplOiAiMTAiLCBzaG93VG90YWw6ICJ0cnVlIiB9DQogICAgfTsNCiAgICAvL+WIneasoeWKoOi9vem7mOiupHBhZ2VCZWFuDQogICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInVzZXIvbG9hZERpbWVuc2lvbiIpOw0KICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJ1c2VyL2xvYWRVc2Vyc0J5T3JnSWQiLCBwYWdlQmVhbik7DQogIH0sDQogIHdhdGNoOiB7DQogICAgdXNlckRpYWxvZ1Zpc2libGU6IGZ1bmN0aW9uKG5ld1ZhbCkgew0KICAgICAgaWYgKG5ld1ZhbCkgew0KICAgICAgICBpZiAodGhpcy5pbnB1dFZhbCAmJiB0aGlzLmlucHV0VmFsLmNvbnN0cnVjdG9yID09IEFycmF5KSB7DQogICAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IFsuLi50aGlzLmlucHV0VmFsXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnNlbGVjdFVzZXJzID0gW107DQogICAgICAgIH0NCiAgICAgICAgdGhpcy5zeW5jQ2hlY2tlZFN0YXR1cygpOw0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgbWV0aG9kczogew0KICAgIGxvYWRPcmdUcmVlKG5vZGUsIHJlc29sdmUpIHsNCiAgICAgIGlmIChub2RlICYmIG5vZGUuZGF0YSAmJiBub2RlLmRhdGEuaXNQYXJlbnQpIHsNCiAgICAgICAgaWYgKG5vZGUuZGF0YS5jaGlsZHJlbikgew0KICAgICAgICAgIHJlc29sdmUobm9kZS5kYXRhLmNoaWxkcmVuKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLiRzdG9yZQ0KICAgICAgICAgICAgLmRpc3BhdGNoKCJ1c2VyL2xvYWRPcmdzQnlQYXJlbnRJZCIsIG5vZGUuZGF0YS5pZCkNCiAgICAgICAgICAgIC50aGVuKHJlcCA9PiB7DQogICAgICAgICAgICAgIHJlc29sdmUocmVwKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KICAgICAgICByZXNvbHZlKFtdKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8v54K55Ye757uE57uH5p+l6K+i55So5oi3DQogICAgaGFuZGxlTm9kZUNsaWNrKGRhdGEsIG5vZGUsIHZ1ZWNvbXBvbmVudCkgew0KICAgICAgaWYgKGRhdGEuaWQpIHsNCiAgICAgICAgdGhpcy5vcmdJZCA9IGRhdGEuaWQ7DQogICAgICB9DQogICAgICBsZXQgcGFnZUJlYW4gPSB7DQogICAgICAgIHBhZ2VCZWFuOiB7IHBhZ2U6ICIxIiwgcGFnZVNpemU6ICIxMCIsIHNob3dUb3RhbDogInRydWUiIH0NCiAgICAgIH07DQogICAgICBsZXQgcXVlcnlzID0gWw0KICAgICAgICB7DQogICAgICAgICAgcHJvcGVydHk6ICJvcmdfaWRfIiwNCiAgICAgICAgICB2YWx1ZTogdGhpcy5vcmdJZCwNCiAgICAgICAgICBncm91cDogIm1haW4iLA0KICAgICAgICAgIG9wZXJhdGlvbjogIkVRVUFMIiwNCiAgICAgICAgICByZWxhdGlvbjogIkFORCINCiAgICAgICAgfQ0KICAgICAgXTsNCiAgICAgIGxldCBxdWVyeUZpbHRlciA9IHsgcGFnZUJlYW4sIHF1ZXJ5cyB9Ow0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInVzZXIvbG9hZFVzZXJzQnlPcmdJZCIsIHF1ZXJ5RmlsdGVyKTsNCiAgICB9LA0KICAgIGhhbmRsZVNpemVDaGFuZ2U6IGZ1bmN0aW9uKHNpemUpIHsNCiAgICAgIC8v5q+P6aG15LiL5ouJ5pi+56S65pWw5o2uDQogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgidXNlci9zZXRQYWdpbmF0aW9uU2l6ZSIsIHNpemUpOw0KICAgICAgdGhpcy5zZWFyY2goKTsNCiAgICB9LA0KICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uKGN1cnJlbnRQYWdlKSB7DQogICAgICAvL+eCueWHu+esrOWHoOmhtQ0KICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInVzZXIvc2V0UGFnaW5hdGlvblBhZ2VOdW0iLCBjdXJyZW50UGFnZSk7DQogICAgICB0aGlzLnNlYXJjaCgpOw0KICAgIH0sDQogICAgLy/lm57ovabmn6Xor6INCiAgICBzZWFyY2hFbnRlckZ1bjogZnVuY3Rpb24oZSkgew0KICAgICAgdmFyIGtleUNvZGUgPSB3aW5kb3cuZXZlbnQgPyBlLmtleUNvZGUgOiBlLndoaWNoOw0KICAgICAgaWYgKGtleUNvZGUgPT0gMTMpIHsNCiAgICAgICAgdGhpcy5zZWFyY2goImZpbmQiKTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOafpeivog0KICAgIHNlYXJjaChzdHIpIHsNCiAgICAgIGlmIChzdHIgPT0gImZpbmQiKSB7DQogICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJ1c2VyL3NldFBhZ2luYXRpb25QYWdlTnVtIiwgMSk7DQogICAgICB9DQogICAgICBsZXQgcXVlcnlzID0gW107IC8v5p+l6K+i5p2h5Lu2DQogICAgICBsZXQgcXVlcnlGaWx0ZXIgPSB7fTsNCiAgICAgIGxldCBwYWdlQmVhbiA9IHsgcGFnZUJlYW46IHRoaXMucGFnaW5hdGlvbiB9Ow0KICAgICAgaWYgKHRoaXMudGFibGVEYXRhID09ICIiICYmIHRoaXMub3JnSWQgPT0gIiIpIHsNCiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInVzZXIvbG9hZFVzZXJzQnlPcmdJZCIsIHBhZ2VCZWFuKS50aGVuKCgpID0+IHsNCiAgICAgICAgICB0aGlzLnN5bmNDaGVja2VkU3RhdHVzKCk7DQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaWYgKHRoaXMub3JnSWQgJiYgdGhpcy50YWJsZURhdGEgPT0gIiIpIHsNCiAgICAgICAgICBxdWVyeXMucHVzaCh7DQogICAgICAgICAgICBwcm9wZXJ0eTogIm9yZ19pZF8iLA0KICAgICAgICAgICAgdmFsdWU6IHRoaXMub3JnSWQsDQogICAgICAgICAgICBncm91cDogIm1haW4xIiwNCiAgICAgICAgICAgIG9wZXJhdGlvbjogIkVRVUFMIiwNCiAgICAgICAgICAgIHJlbGF0aW9uOiAiQU5EIg0KICAgICAgICAgIH0pOw0KICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3JnSWQgJiYgdGhpcy50YWJsZURhdGEgIT0gIiIpIHsNCiAgICAgICAgICBxdWVyeXMgPSBbDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHByb3BlcnR5OiAib3JnX2lkXyIsDQogICAgICAgICAgICAgIHZhbHVlOiB0aGlzLm9yZ0lkLA0KICAgICAgICAgICAgICBncm91cDogIm1haW4xIiwNCiAgICAgICAgICAgICAgb3BlcmF0aW9uOiAiRVFVQUwiLA0KICAgICAgICAgICAgICByZWxhdGlvbjogIkFORCINCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHByb3BlcnR5OiAiZnVsbG5hbWUiLA0KICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YWJsZURhdGEsDQogICAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsDQogICAgICAgICAgICAgIG9wZXJhdGlvbjogIkxJS0UiLA0KICAgICAgICAgICAgICByZWxhdGlvbjogIk9SIg0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgcHJvcGVydHk6ICJhY2NvdW50IiwNCiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFibGVEYXRhLA0KICAgICAgICAgICAgICBncm91cDogIm1haW4iLA0KICAgICAgICAgICAgICBvcGVyYXRpb246ICJMSUtFIiwNCiAgICAgICAgICAgICAgcmVsYXRpb246ICJPUiINCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHByb3BlcnR5OiAiZW1haWwiLA0KICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YWJsZURhdGEsDQogICAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsDQogICAgICAgICAgICAgIG9wZXJhdGlvbjogIkxJS0UiLA0KICAgICAgICAgICAgICByZWxhdGlvbjogIk9SIg0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgcHJvcGVydHk6ICJtb2JpbGUiLA0KICAgICAgICAgICAgICB2YWx1ZTogdGhpcy50YWJsZURhdGEsDQogICAgICAgICAgICAgIGdyb3VwOiAibWFpbiIsDQogICAgICAgICAgICAgIG9wZXJhdGlvbjogIkxJS0UiLA0KICAgICAgICAgICAgICByZWxhdGlvbjogIk9SIg0KICAgICAgICAgICAgfQ0KICAgICAgICAgIF07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgcXVlcnlzID0gWw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBwcm9wZXJ0eTogImZ1bGxuYW1lIiwNCiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFibGVEYXRhLA0KICAgICAgICAgICAgICBncm91cDogIm1haW4iLA0KICAgICAgICAgICAgICBvcGVyYXRpb246ICJMSUtFIiwNCiAgICAgICAgICAgICAgcmVsYXRpb246ICJPUiINCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHByb3BlcnR5OiAiYWNjb3VudCIsDQogICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRhYmxlRGF0YSwNCiAgICAgICAgICAgICAgZ3JvdXA6ICJtYWluIiwNCiAgICAgICAgICAgICAgb3BlcmF0aW9uOiAiTElLRSIsDQogICAgICAgICAgICAgIHJlbGF0aW9uOiAiT1IiDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBwcm9wZXJ0eTogImVtYWlsIiwNCiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFibGVEYXRhLA0KICAgICAgICAgICAgICBncm91cDogIm1haW4iLA0KICAgICAgICAgICAgICBvcGVyYXRpb246ICJMSUtFIiwNCiAgICAgICAgICAgICAgcmVsYXRpb246ICJPUiINCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHByb3BlcnR5OiAibW9iaWxlIiwNCiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudGFibGVEYXRhLA0KICAgICAgICAgICAgICBncm91cDogIm1haW4iLA0KICAgICAgICAgICAgICBvcGVyYXRpb246ICJMSUtFIiwNCiAgICAgICAgICAgICAgcmVsYXRpb246ICJPUiINCiAgICAgICAgICAgIH0NCiAgICAgICAgICBdOw0KICAgICAgICB9DQogICAgICAgIHF1ZXJ5RmlsdGVyID0geyBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLCBxdWVyeXMgfTsNCiAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goInVzZXIvbG9hZFVzZXJzQnlPcmdJZCIsIHF1ZXJ5RmlsdGVyKS50aGVuKCgpID0+IHsNCiAgICAgICAgICB0aGlzLnN5bmNDaGVja2VkU3RhdHVzKCk7DQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogICAgLy/ph43nva4NCiAgICByZXNldCgpIHsNCiAgICAgIHRoaXMudGFibGVEYXRhID0gIiI7DQogICAgICB0aGlzLm9yZ0lkPSIiOw0KICAgICAgaWYodGhpcy4kcmVmcy50cmVlKXsNCiAgICAgICAgICB0aGlzLiRyZWZzLnRyZWUuc2V0Q3VycmVudEtleShudWxsKTsNCiAgICAgIH0NCiAgICAgIHRoaXMuc2VhcmNoKCJmaW5kIik7DQogICAgfSwNCiAgICBzaG93RGlhbG9nKCkgew0KICAgICAgdGhpcy5yZXNldCgpOw0KICAgICAgdGhpcy51c2VyRGlhbG9nVmlzaWJsZSA9IHRydWU7DQogICAgfSwNCiAgICAvL+mAmui/h+e7tOW6puiOt+WPlue7hOe7hw0KICAgIGNoYW5nZURpbWVuc2lvbih2YWwpIHsNCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJ1c2VyL2xvYWRPcmdzQnlEaW1lbnNpb24iLCB2YWwpOw0KICAgIH0sDQogICAgcmFkaW9DaGFuZ2VIYW5kbGVyKGluZGV4KSB7DQogICAgICB0aGlzLnNlbGVjdFVzZXJzID0gW3RoaXMudXNlcnNbaW5kZXhdXTsNCiAgICB9LA0KICAgIHVzZXJTZWxlY3Rpb25DaGFuZ2UoKSB7DQogICAgICAhdGhpcy51cGRhdGluZyAmJiB0aGlzLnN5bmNTZWxlY3Rpb24yc2VsZWN0VXNlcnMoKTsNCiAgICB9LA0KICAgIHVzZXJSb3dDbGljayhyb3csIGNvbHVtbiwgZXZlbnQpIHsNCiAgICAgIC8vIOWNlemAiQ0KICAgICAgaWYgKHRoaXMuaXNTaW5nbGUpIHsNCiAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IFtyb3ddOw0KICAgICAgICB0aGlzLnNpbmdsZVNlbGVjdElkID0gcm93LmlkOw0KICAgICAgfQ0KICAgICAgLy8g5aSa6YCJDQogICAgICBlbHNlIHsNCiAgICAgICAgY29uc3QgYXJnID0gdGhpcy5nZXRVbmlxdWVBcmcoKTsNCiAgICAgICAgbGV0IF90YWcgPSB0cnVlOw0KICAgICAgICB0aGlzLiRyZWZzLnVzZXJUYWJsZSAmJg0KICAgICAgICAgIHRoaXMuJHJlZnMudXNlclRhYmxlLnNlbGVjdGlvbiAmJg0KICAgICAgICAgIHRoaXMuJHJlZnMudXNlclRhYmxlLnNlbGVjdGlvbi5mb3JFYWNoKG0gPT4gew0KICAgICAgICAgICAgaWYgKG0gPT09IHJvdykgew0KICAgICAgICAgICAgICAvLyDlr7nkuo7lt7LpgInkuK3or6XooYzml7bvvIzlj5bmtojpgInkuK3nirbmgIENCiAgICAgICAgICAgICAgdGhpcy4kcmVmcy51c2VyVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgZmFsc2UpOw0KICAgICAgICAgICAgICBfdGFnID0gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgIC8vIOWvueS6juacqumAieS4reivpeihjOaXtu+8jOWIh+aNouS4uumAieS4reeKtuaAgQ0KICAgICAgICB0aGlzLiRyZWZzLnVzZXJUYWJsZSAmJg0KICAgICAgICAgIF90YWcgJiYNCiAgICAgICAgICB0aGlzLiRyZWZzLnVzZXJUYWJsZS50b2dnbGVSb3dTZWxlY3Rpb24ocm93KTsNCiAgICAgICAgdGhpcy5zeW5jU2VsZWN0aW9uMnNlbGVjdFVzZXJzKCk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDojrflj5blvZPliY3nlKjkvZzllK/kuIDplK7nmoTlj4LmlbANCiAgICBnZXRVbmlxdWVBcmcoKSB7DQogICAgICBsZXQgYXJnID0gImZ1bGxuYW1lIjsNCiAgICAgIGlmICh1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAiaWQiKSkgew0KICAgICAgICBhcmcgPSAiaWQiOw0KICAgICAgfSBlbHNlIGlmICh1dGlscy5nZXRBbmRWYWxpZFBhdGgodGhpcy5iaW5kU2V0LCAiYWNjb3VudCIpKSB7DQogICAgICAgIGFyZyA9ICJhY2NvdW50IjsNCiAgICAgIH0NCiAgICAgIHJldHVybiBhcmc7DQogICAgfSwNCiAgICBkaWFsb2dDb25maXJtKCkgew0KICAgICAgdGhpcy51c2VyRGlhbG9nVmlzaWJsZSA9IGZhbHNlOw0KICAgICAgdGhpcy5zeW5jSW5wdXRWYWx1ZSgpOw0KICAgIH0sDQogICAgLy8g5ZCM5q2ldXNlclRhYmxl5Lit5bey6YCJ6KGM5Yiw5bey6YCJ5pWw5o2u5Lit5Y67DQogICAgc3luY1NlbGVjdGlvbjJzZWxlY3RVc2VycygpIHsNCiAgICAgIGxldCBhcmcgPSB0aGlzLmdldFVuaXF1ZUFyZygpOw0KICAgICAgLy8g5b2T5YmN5YiG6aG155qEb3JnVGFibGXooYzkuK3lt7LooqvpgInmi6nnmoTmlbDmja4NCiAgICAgIGxldCBjdXJQYWdlQXJ5ID0gdGhpcy5zZWxlY3RVc2Vycy5maWx0ZXIobSA9Pg0KICAgICAgICB0aGlzLnVzZXJzLnNvbWUobiA9PiBtW2FyZ10gPT09IG5bYXJnXSkNCiAgICAgICk7DQogICAgICBjdXJQYWdlQXJ5LmZvckVhY2goaXRlbSA9PiB7DQogICAgICAgIHRoaXMuc2VsZWN0VXNlcnMucmVtb3ZlKGl0ZW0pOw0KICAgICAgfSk7DQogICAgICB0aGlzLnNlbGVjdFVzZXJzID0gWw0KICAgICAgICAuLi50aGlzLnNlbGVjdFVzZXJzLA0KICAgICAgICAuLi50aGlzLiRyZWZzLnVzZXJUYWJsZS5zZWxlY3Rpb24NCiAgICAgIF07DQogICAgfSwNCiAgICAvLyDlkIzmraXlt7LpgInmlbDmja7lnKhvcmdUYWJsZeS4reeahGNoZWNrYm945ZKMcmFkaW/nmoTpgInkuK3nirbmgIENCiAgICBzeW5jQ2hlY2tlZFN0YXR1cygpIHsNCiAgICAgIGxldCBhcmcgPSB0aGlzLmdldFVuaXF1ZUFyZygpOw0KICAgICAgY29uc3QgX21lID0gdGhpczsNCiAgICAgIHNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgICBfbWUudXBkYXRpbmcgPSB0cnVlOw0KICAgICAgICBfbWUuc2luZ2xlU2VsZWN0SWQgPSBudWxsOw0KICAgICAgICBfbWUuJHJlZnMudXNlclRhYmxlICYmIF9tZS4kcmVmcy51c2VyVGFibGUuY2xlYXJTZWxlY3Rpb24oKTsNCiAgICAgICAgX21lLnVzZXJzICYmDQogICAgICAgICAgX21lLnVzZXJzLmZvckVhY2gobSA9PiB7DQogICAgICAgICAgICBpZiAoDQogICAgICAgICAgICAgIF9tZS5zZWxlY3RVc2VycyAmJg0KICAgICAgICAgICAgICBfbWUuc2VsZWN0VXNlcnMuc29tZShuID0+IG5bYXJnXSA9PT0gbVthcmddKQ0KICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgIF9tZS5zaW5nbGVTZWxlY3RJZCA9IG0uaWQ7DQogICAgICAgICAgICAgIGlmICghX21lLmlzU2luZ2xlICYmIF9tZS4kcmVmcy51c2VyVGFibGUpIHsNCiAgICAgICAgICAgICAgICBfbWUuJHJlZnMudXNlclRhYmxlLnRvZ2dsZVJvd1NlbGVjdGlvbihtKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgaWYgKCFfbWUuaXNTaW5nbGUgJiYgX21lLiRyZWZzLnVzZXJUYWJsZSkgew0KICAgICAgICAgICAgICAgIF9tZS4kcmVmcy51c2VyVGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKG0sIGZhbHNlKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICBfbWUudXBkYXRpbmcgPSBmYWxzZTsNCiAgICAgIH0sIDIwMCk7DQogICAgfSwNCiAgICAvLyDlkIzmraXpgInmi6nnu5PmnpzliLDooajljZXkuIrvvIjkvJroh6rliqjkv67mraPooajljZXkuIrovpPlhaXmoYbnmoTpq5jluqbvvIkNCiAgICBzeW5jSW5wdXRWYWx1ZShpdGVtKSB7DQogICAgICBpZiAoaXRlbSkgew0KICAgICAgICBpZiAodGhpcy5pbnB1dFZhbCAmJiB0aGlzLmlucHV0VmFsLmNvbnN0cnVjdG9yID09IEFycmF5KSB7DQogICAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IFsuLi50aGlzLmlucHV0VmFsXTsNCiAgICAgICAgfQ0KICAgICAgICAvLyDlnKjooajljZXkuIrngrnlh7tY5Yig6Zmk5bey6YCJ5pWw5o2uDQogICAgICAgIHRoaXMuc2VsZWN0VXNlcnMucmVtb3ZlKGl0ZW0pOw0KICAgICAgfQ0KICAgICAgbGV0IHN1YkluZGV4ID0gbnVsbDsNCiAgICAgIGlmICh0aGlzLiRlbCkgew0KICAgICAgICBzdWJJbmRleCA9IHV0aWxzLmdldFNvbWVBdHRyaWJ1dGVGcm9tUGFyZW50RWxlbWVudCgNCiAgICAgICAgICB0aGlzLiRlbCwNCiAgICAgICAgICAiZGF0YS1pbmRleCINCiAgICAgICAgKTsNCiAgICAgIH0NCiAgICAgIHRoaXMudXBkYXRpbmcgPSB0cnVlOw0KICAgICAgaWYgKHRoaXMuYmluZFNldCkgew0KICAgICAgICBpZiAoIXV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJmdWxsbmFtZSIpKSB7DQogICAgICAgICAgdGhyb3cgImh0LXVzZXItc2VsZWN0b3LnmoRiaW5k5bGe5oCn5Lit5b+F6aG76YWN572uZnVsbG5hbWXlsZ7mgKcuIjsNCiAgICAgICAgfQ0KICAgICAgICBsZXQgbmFtZUFyeSA9IFtdOw0KICAgICAgICBsZXQgaWRBcnkgPSBbXTsNCiAgICAgICAgbGV0IGFjY291bnRBcnkgPSBbXTsNCiAgICAgICAgbGV0IG1vYmlsZUFyciA9IFtdOw0KICAgICAgICBsZXQgZW1haWxBcnIgPSBbXTsNCiAgICAgICAgdGhpcy5zZWxlY3RVc2VycyAmJg0KICAgICAgICAgIHRoaXMuc2VsZWN0VXNlcnMuZm9yRWFjaChtID0+IHsNCiAgICAgICAgICAgIG5hbWVBcnkucHVzaChtLmZ1bGxuYW1lKTsNCiAgICAgICAgICAgIGlkQXJ5LnB1c2gobS5pZCk7DQogICAgICAgICAgICBhY2NvdW50QXJ5LnB1c2gobS5hY2NvdW50KTsNCiAgICAgICAgICAgIG1vYmlsZUFyci5wdXNoKG0ubW9iaWxlKTsNCiAgICAgICAgICAgIGVtYWlsQXJyLnB1c2gobS5lbWFpbCk7DQogICAgICAgICAgfSk7DQogICAgICAgIGNvbnN0IGlkUGF0aCA9IHV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJpZCIpOw0KICAgICAgICBpZFBhdGggJiYNCiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aCh0aGlzLiRwYXJlbnQsIGlkUGF0aCwgaWRBcnkuam9pbigiLCIpLCBzdWJJbmRleCk7DQogICAgICAgIGNvbnN0IGFjY291bnRQYXRoID0gdXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImFjY291bnQiKTsNCiAgICAgICAgYWNjb3VudFBhdGggJiYNCiAgICAgICAgICB1dGlscy5zZXRWYWx1ZUJ5UGF0aCgNCiAgICAgICAgICAgIHRoaXMuJHBhcmVudCwNCiAgICAgICAgICAgIGFjY291bnRQYXRoLA0KICAgICAgICAgICAgYWNjb3VudEFyeS5qb2luKCIsIiksDQogICAgICAgICAgICBzdWJJbmRleA0KICAgICAgICAgICk7DQoNCiAgICAgICAgY29uc3QgbW9iaWxlUGF0aCA9IHV0aWxzLmdldEFuZFZhbGlkUGF0aCh0aGlzLmJpbmRTZXQsICJtb2JpbGUiKTsNCiAgICAgICAgbW9iaWxlUGF0aCAmJg0KICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKA0KICAgICAgICAgICAgdGhpcy4kcGFyZW50LA0KICAgICAgICAgICAgbW9iaWxlUGF0aCwNCiAgICAgICAgICAgIG1vYmlsZUFyci5qb2luKCIsIiksDQogICAgICAgICAgICBzdWJJbmRleA0KICAgICAgICAgICk7DQoNCiAgICAgICAgY29uc3QgZW1haWxQYXRoID0gdXRpbHMuZ2V0QW5kVmFsaWRQYXRoKHRoaXMuYmluZFNldCwgImVtYWlsIik7DQogICAgICAgIGVtYWlsUGF0aCAmJg0KICAgICAgICAgIHV0aWxzLnNldFZhbHVlQnlQYXRoKA0KICAgICAgICAgICAgdGhpcy4kcGFyZW50LA0KICAgICAgICAgICAgZW1haWxQYXRoLA0KICAgICAgICAgICAgZW1haWxBcnIuam9pbigiLCIpLA0KICAgICAgICAgICAgc3ViSW5kZXgNCiAgICAgICAgICApOw0KICAgICAgICB0aGlzLiRlbWl0KCJpbnB1dCIsIG5hbWVBcnkuam9pbigiLCIpKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJGVtaXQoImlucHV0IiwgdGhpcy5zZWxlY3RVc2Vycyk7DQogICAgICB9DQogICAgICB0aGlzLnVwZGF0aW5nID0gZmFsc2U7DQogICAgICB0aGlzLmNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKTsNCiAgICB9LA0KICAgIGRpYWxvZ0NhbmNlbCgpIHsNCiAgICAgIHRoaXMudXNlckRpYWxvZ1Zpc2libGUgPSBmYWxzZTsNCiAgICB9LA0KICAgIGNsZWFyQWxsU2VsZWN0VXNlcnMoKSB7DQogICAgICB0aGlzLnNlbGVjdFVzZXJzID0gW107DQogICAgICB0aGlzLnN5bmNDaGVja2VkU3RhdHVzKCk7DQogICAgICB0aGlzLnNpbmdsZVNlbGVjdElkID0gbnVsbDsNCiAgICB9LA0KICAgIC8vIOiwg+aVtOW3sumAieWIl+ihqOS4reWFg+e0oOeahOmhuuW6jw0KICAgIG1vdmVTZWxlY3RVc2VyKGRpcmVjdCkgew0KICAgICAgbGV0IGFyeSA9IHRoaXMuJHJlZnMuc2VsZWN0VHJlZS5nZXRDaGVja2VkTm9kZXMoKTsNCiAgICAgIGlmIChkaXJlY3QgPT0gInVwIikgew0KICAgICAgICBhcnkuZm9yRWFjaChtID0+IHsNCiAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnNlbGVjdFVzZXJzLmluZGV4T2YobSwgMSk7DQogICAgICAgICAgaWYgKGluZGV4ID4gMCkgew0KICAgICAgICAgICAgbGV0IG5ld0FyeSA9IFsuLi50aGlzLnNlbGVjdFVzZXJzXTsNCiAgICAgICAgICAgIG5ld0FyeVtpbmRleCAtIDFdID0gdGhpcy5zZWxlY3RVc2Vyc1tpbmRleF07DQogICAgICAgICAgICBuZXdBcnlbaW5kZXhdID0gdGhpcy5zZWxlY3RVc2Vyc1tpbmRleCAtIDFdOw0KICAgICAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IG5ld0FyeTsNCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIGlmIChkaXJlY3QgPT0gImRvd24iKSB7DQogICAgICAgIGZvciAodmFyIGkgPSBhcnkubGVuZ3RoIC0gMSwgbTsgKG0gPSBhcnlbaS0tXSk7ICkgew0KICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc2VsZWN0VXNlcnMuaW5kZXhPZihtLCAwKTsNCiAgICAgICAgICBpZiAoaW5kZXggPiAtMSAmJiBpbmRleCA8IHRoaXMuc2VsZWN0VXNlcnMubGVuZ3RoIC0gMSkgew0KICAgICAgICAgICAgbGV0IG5ld0FyeSA9IFsuLi50aGlzLnNlbGVjdFVzZXJzXTsNCiAgICAgICAgICAgIG5ld0FyeVtpbmRleCArIDFdID0gdGhpcy5zZWxlY3RVc2Vyc1tpbmRleF07DQogICAgICAgICAgICBuZXdBcnlbaW5kZXhdID0gdGhpcy5zZWxlY3RVc2Vyc1tpbmRleCArIDFdOw0KICAgICAgICAgICAgdGhpcy5zZWxlY3RVc2VycyA9IG5ld0FyeTsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgICB0aGlzLiRyZWZzLnNlbGVjdFRyZWUuc2V0Q2hlY2tlZE5vZGVzKGFyeSk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOWcqOW8ueahhuS4reeahOW3sumAieaVsOaNruS4reWIoOmZpOWLvumAieeahOmhuQ0KICAgIHJlbW92ZVNlbGVjdFVzZXJzKCkgew0KICAgICAgbGV0IGFyeSA9IHRoaXMuJHJlZnMuc2VsZWN0VHJlZS5nZXRDaGVja2VkTm9kZXMoKTsNCiAgICAgIGFyeS5mb3JFYWNoKGl0ZW0gPT4gew0KICAgICAgICB0aGlzLnNlbGVjdFVzZXJzLnJlbW92ZShpdGVtKTsNCiAgICAgIH0pOw0KICAgICAgdGhpcy5zeW5jQ2hlY2tlZFN0YXR1cygpOw0KICAgIH0sDQogICAgLy8g5Zyo6KGo5Y2V55qE6L6T5YWl5qGG5Lit54K55Ye7WOWIoOmZpOS4gOadoeW3sumAieaVsOaNrg0KICAgIHJlbW92ZVNlbGVjdFVzZXIoaXRlbSkgew0KICAgICAgdGhpcy5zeW5jSW5wdXRWYWx1ZShpdGVtKTsNCiAgICB9LA0KICAgIGNhbGFjSW5wdXRTdWZmaXhIZWlnaHQoKSB7DQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgaWYoIXRoaXMuJHJlZnMudGFnU3BhbnMpIHJldHVybjsNCiAgICAgICAgaWYgKHRoaXMuJHJlZnMudGFnU3BhbnMub2Zmc2V0SGVpZ2h0KSB7DQogICAgICAgICAgdGhpcy5pbnB1dFN1ZmZpeEhlaWdodCA9IHRoaXMuJHJlZnMudGFnU3BhbnMub2Zmc2V0SGVpZ2h0ICsgNTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLmlucHV0U3VmZml4SGVpZ2h0ID0gMzA7DQogICAgICAgIH0NCiAgICAgICAgLy8g6Kem5Y+R6aqM6K+BDQogICAgICAgIHRoaXMuJHZhbGlkYXRvci52YWxpZGF0ZSgpOw0KICAgICAgfSwgMCk7DQogICAgfQ0KICB9DQp9Ow0K"},null]}