@discordeno/rest 21.0.1-next.d9831f6 → 21.0.1-next.f199bbf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/manager.cjs +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/manager.js +2 -2
- package/dist/esm/types.js +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +1 -1
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/cjs/manager.cjs
CHANGED
|
@@ -1640,4 +1640,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
|
|
|
1640
1640
|
return HttpResponseCode;
|
|
1641
1641
|
}(HttpResponseCode || {});
|
|
1642
1642
|
|
|
1643
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcydcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcbiAgLy8gRGlzY29yZCBlcnJvciBjYW4gZ2V0IG5lc3RlZCBhIGxvdCwgc28gd2UgdXNlIGEgY3VzdG9tIGluc3BlY3QgdG8gY2hhbmdlIHRoZSBkZXB0aCB0byBJbmZpbml0eVxuICBjb25zdCBiYXNlRXJyb3JQcm90b3R5cGUgPSB7XG4gICAgW2luc3BlY3QuY3VzdG9tXShfZGVwdGg6IG51bWJlciwgb3B0aW9uczogSW5zcGVjdE9wdGlvbnMsIF9pbnNwZWN0OiB0eXBlb2YgaW5zcGVjdCkge1xuICAgICAgcmV0dXJuIF9pbnNwZWN0KHRoaXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVwdGg6IEluZmluaXR5LFxuICAgICAgICAvLyBTaW5jZSB3ZSBjYWxsIGluc3BlY3Qgb24gb3Vyc2VsZiwgd2UgbmVlZCB0byBkaXNhYmxlIHRoZSBjYWxscyB0byB0aGUgaW5zcGVjdC5jdXN0b20gc3ltYm9sIG9yIGVsc2UgaXQgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG4gICAgZXZlbnRzOiB7XG4gICAgICByZXF1ZXN0OiAoKSA9PiB7fSxcbiAgICAgIHJlc3BvbnNlOiAoKSA9PiB7fSxcbiAgICAgIHJlcXVlc3RFcnJvcjogKCkgPT4ge30sXG4gICAgICAuLi5vcHRpb25zLmV2ZW50cyxcbiAgICB9LFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7RElTQ09SREVOT19WRVJTSU9OfSlgLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGVja1JhdGVMaW1pdHModXJsLCBpZGVudGlmaWVyKSB7XG4gICAgICBjb25zdCByYXRlbGltaXRlZCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZVRva2VuUXVldWVzKG9sZFRva2VuLCBuZXdUb2tlbikge1xuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmICghcmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUaGUgJ3Byb3h5LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQnIG9wdGlvbiBuZWVkcyB0byBiZSBzZXQgd2hlbiB1c2luZyBhIHJlc3QgcHJveHkgYW5kIG5lZWRlZCB0byBjYWxsICd1cGRhdGVUb2tlblF1ZXVlcydcIixcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS8ke3Jlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludH1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb2xkVG9rZW4sXG4gICAgICAgICAgICBuZXdUb2tlbixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdJZGVudGlmaWVyID0gYEJlYXJlciAke25ld1Rva2VufWBcblxuICAgICAgLy8gVXBkYXRlIGFsbCB0aGUgcXVldWVzXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHF1ZXVlXSBvZiByZXN0LnF1ZXVlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5xdWV1ZXMuZGVsZXRlKGtleSlcbiAgICAgICAgcXVldWUuaWRlbnRpZmllciA9IG5ld0lkZW50aWZpZXJcblxuICAgICAgICBjb25zdCBuZXdLZXkgPSBgJHtuZXdJZGVudGlmaWVyfSR7cXVldWUudXJsfWBcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KVxuXG4gICAgICAgIC8vIE1lcmdlIHRoZSBxdWV1ZXNcbiAgICAgICAgaWYgKG5ld1F1ZXVlKSB7XG4gICAgICAgICAgbmV3UXVldWUud2FpdGluZy51bnNoaWZ0KC4uLnF1ZXVlLndhaXRpbmcpXG4gICAgICAgICAgbmV3UXVldWUucGVuZGluZy51bnNoaWZ0KC4uLnF1ZXVlLnBlbmRpbmcpXG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW11cbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gW11cblxuICAgICAgICAgIHF1ZXVlLmNsZWFudXAoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgcmF0ZWxpbWl0UGF0aF0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLnVybH1gLCByYXRlbGltaXRQYXRoKVxuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHNuYWtlX2Nhc2Ugd2UgY2FuIGFzc3VtZSBpdCBpcyBhbHJlYWR5IGluIHRoZSBkaXNjb3JkIGZvcm1hdC5cbiAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfJykpIHtcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gdmFsdWVcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU29tZSBmYWxzeSB2YWx1ZXMgc2hvdWxkIGJlIGFsbG93ZWQgbGlrZSBudWxsIG9yIDBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICBjYXNlICdhbGxvdyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnknOlxuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0TWVtYmVyUGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnbmFtZUxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5uYW1lX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZUJhc2VIZWFkZXJzKClcblxuICAgICAgaWYgKG9wdGlvbnM/LnVuYXV0aG9yaXplZCAhPT0gdHJ1ZSkgaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbilcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIHNwZWNpZmljIGNoZWNrIGZvciBHRVQgbWV0aG9kXG4gICAgICAvLyBTaW5jZSBHRVQgZG9lcyBub3QgYWxsb3cgYm9kaWVzXG5cbiAgICAgIC8vIEhhdmUgdG8gY2hlY2sgZm9yIGF0dGFjaG1lbnRzIGZpcnN0LCBzaW5jZSBib2R5IHRoZW4gaGFzIHRvIGJlIHNlbmQgaW4gYSBkaWZmZXJlbnQgd2F5LlxuICAgICAgaWYgKG9wdGlvbnM/LmZpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlc1ske2l9XWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGF2ZSB0byB1c2UgY2hhbmdlVG9EaXNjb3JkRm9ybWF0IG9yIGVsc2UgSlNPTi5zdHJpbmdpZnkgbWF5IHRocm93IGFuIGVycm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgQmlnSW50KHMpIGluIHRoZSBqc29uXG4gICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh7IC4uLm9wdGlvbnMuYm9keSwgZmlsZXM6IHVuZGVmaW5lZCB9KSkpXG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICBib2R5ID0gZm9ybVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIGNvbnN0IGRpc2NvcmRCb2R5ID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaXNjb3JkQm9keSkge1xuICAgICAgICAgIGZvcm1Cb2R5LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3ApfT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNjb3JkQm9keVtwcm9wXSl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJylcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgIGJvZHkgPSBvcHRpb25zLmJvZHlcbiAgICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpXG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBtZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzLCBpZGVudGlmaWVyKSB7XG4gICAgICBsZXQgcmF0ZUxpbWl0ZWQgPSBmYWxzZVxuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIpXG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICBjb25zdCByZXNldCA9IERhdGUubm93KCkgKyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwXG4gICAgICBjb25zdCBnbG9iYWwgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIpXG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSKSA/PyB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9MSU1JVF9IRUFERVIpXG5cbiAgICAgIC8vIElmIHdlIGRpZG4ndCByZWNlaXZlZCB0aGUgaWRlbnRpZmllciwgZmFsbGJhY2sgdG8gdGhlIGJvdCB0b2tlblxuICAgICAgaWRlbnRpZmllciA/Pz0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgUkFURSBMSU1JVCwgTUFSSyBJVCBBUyBSQVRFIExJTUlURURcbiAgICAgIGlmIChyZW1haW5pbmcgPT09ICcwJykge1xuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKSkgKiAxMDAwXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXJcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCByZXRyeUFmdGVyKVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoJ2dsb2JhbCcsIHtcbiAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpXG5cbiAgICAgIGNvbnN0IGxvZ2dpbmdIZWFkZXJzID0geyAuLi5wYXlsb2FkLmhlYWRlcnMgfVxuXG4gICAgICBpZiAocGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdXG4gICAgICAgIGxvZ2dpbmdIZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9uU2NoZW1lfSB0b2tlbmhlcmVgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHBheWxvYWQpXG4gICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHksXG4gICAgICB9KVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3RFcnJvcihyZXF1ZXN0LCBlcnJvciwgeyBib2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSB9KVxuICAgICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3BvbnNlLmpzb24oKSA6IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgcmVzdC5ldmVudHMucmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UsIHtcbiAgICAgICAgcmVxdWVzdEJvZHk6IG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zPy5ib2R5LFxuICAgICAgICByZXNwb25zZUJvZHk6IGJvZHksXG4gICAgICB9KVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LCBib2R5IH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGVycm9yOiAnVGhlIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDFcblxuICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLnJldHJ5UmVxdWVzdD8uKG9wdGlvbnMpXG4gICAgICB9XG5cbiAgICAgIC8vIERpc2NvcmQgc29tZXRpbWVzIHNlbmRzIGEgcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50XG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBib2R5IH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3QocmVxdWVzdCwge1xuICAgICAgICAgIGJvZHk6IG9wdGlvbnM/LmJvZHksXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2gocmVxdWVzdClcblxuICAgICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgKHJlc3VsdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3VsdC5qc29uKCkgOiByZXN1bHQudGV4dCgpKS5jYXRjaCgoKSA9PiBudWxsKVxuXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3VsdCwge1xuICAgICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICAgIHJlc3BvbnNlQm9keTogYm9keSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5KSA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgZGF0YS5ib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YS5ib2R5KSA6IGRhdGEuYm9keSkgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvclRleHQ6IHN0cmluZ1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgb3B0aW9ucyB3YXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQsIG9yIHRoZSBzZXJ2ZXIgY291bGRuJ3QgdW5kZXJzdGFuZCBpdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgd2FzIG1pc3Npbmcgb3IgaW52YWxpZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIHRva2VuIHlvdSBwYXNzZWQgZGlkIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gdGhlIHJlc291cmNlLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSByZXNvdXJjZSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3QuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEhUVFAgbWV0aG9kIHVzZWQgaXMgbm90IHZhbGlkIGZvciB0aGUgbG9jYXRpb24gc3BlY2lmaWVkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIllvdSdyZSBiZWluZyByYXRlbGltaXRlZC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNTAyOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGVyZSB3YXMgbm90IGEgZ2F0ZXdheSBhdmFpbGFibGUgdG8gcHJvY2VzcyB5b3VyIG9wdGlvbnMuIFdhaXQgYSBiaXQgYW5kIHJldHJ5LidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IHJlYXNvbi5zdGF0dXNUZXh0ID8/ICdVbmtub3duIGVycm9yJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFske3JlYXNvbi5zdGF0dXN9XSAke2Vycm9yVGV4dH1gXG5cbiAgICAgICAgICAgIC8vIElmIGRpc2NvcmQgc2VudCB1cyBKU09OLCBpdCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhbiBlcnJvciBtZXNzYWdlIGZyb20gd2hpY2ggd2UgY2FuIGdldCBhbmQgYWRkIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgZnVsbCBib2R5IHdpbGwgYmUgaW4gdGhlIGVycm9yLmNhdXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2UjZXJyb3ItbWVzc2FnZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVhc29uLmJvZHkgPT09ICdvYmplY3QnICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnY29kZScpICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnbWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYFxcbkRpc2NvcmQgZXJyb3I6IFske3JlYXNvbi5ib2R5LmNvZGV9XSAke3JlYXNvbi5ib2R5Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCByZWFzb24pXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGJvZHksIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbilcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBib2R5ID0ge30sIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUFwcGxpY2F0aW9uRW1vamkoaWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmdldFVzZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRJbmNpZGVudHNEYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVMb2JieShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkuY3JlYXRlKCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldExvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlMb2JieShsb2JieUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZE1lbWJlclRvTG9iYnkobG9iYnlJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZExvYmJ5TWVtYmVyPihyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5KGxvYmJ5SWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUxvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubGVhdmUobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVubGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsImJhc2VFcnJvclByb3RvdHlwZSIsImluc3BlY3QiLCJjdXN0b20iLCJfZGVwdGgiLCJfaW5zcGVjdCIsImRlcHRoIiwiSW5maW5pdHkiLCJjdXN0b21JbnNwZWN0IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwiZXZlbnRzIiwicmVxdWVzdCIsInJlc3BvbnNlIiwicmVxdWVzdEVycm9yIiwicm91dGVzIiwiY3JlYXRlUm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImNhbGN1bGF0ZUJpdHMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJjYW1lbFRvU25ha2VDYXNlIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJSZXF1ZXN0IiwiZGVidWciLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwianNvbiIsInRleHQiLCJyZXF1ZXN0Qm9keSIsInJlc3BvbnNlQm9keSIsInNpbXBsaWZ5VXJsIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJyZXN1bHQiLCJjYXVzZSIsImNyZWF0ZSIsInBhcnNlIiwiUHJvbWlzZSIsImRhdGEiLCJlcnJvclRleHQiLCJtZXNzYWdlIiwiaGFzUHJvcGVydHkiLCJjb2RlIiwiY2FtZWxpemUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVzIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwidXJsVG9CYXNlNjQiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJndWlsZCIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldENoYW5uZWxQaW5zIiwibWVzc2FnZVBpbnMiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFVzZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsIm1lc3NhZ2VQaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsIm1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zIiwiaW5jaWRlbnRBY3Rpb25zIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhIiwidXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJjcmVhdGVMb2JieSIsImxvYmJ5IiwiZ2V0TG9iYnkiLCJsb2JieUlkIiwibW9kaWZ5TG9iYnkiLCJkZWxldGVMb2JieSIsImFkZE1lbWJlclRvTG9iYnkiLCJyZW1vdmVNZW1iZXJGcm9tTG9iYnkiLCJsZWF2ZUxvYmJ5IiwibGlua0NoYW5uZWxUb0xvYmJ5IiwibGluayIsInVubGlua0NoYW5uZWxUb0xvYmJ5IiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWdGYUE7ZUFBQUE7O1FBRkFDO2VBQUFBOztRQURBQztlQUFBQTs7UUFPQUM7ZUFBQUE7O1FBREFDO2VBQUFBOztRQUVBQztlQUFBQTs7UUFKQUM7ZUFBQUE7O1FBQ0FDO2VBQUFBOztRQUlBQztlQUFBQTs7UUFFR0M7ZUFBQUE7Ozs0QkF4Rk87MEJBQ3NCO3VCQXNFdEM7K0JBQ29DO3VCQUNyQjt3QkFD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
|
|
1643
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcydcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcbiAgLy8gRGlzY29yZCBlcnJvciBjYW4gZ2V0IG5lc3RlZCBhIGxvdCwgc28gd2UgdXNlIGEgY3VzdG9tIGluc3BlY3QgdG8gY2hhbmdlIHRoZSBkZXB0aCB0byBJbmZpbml0eVxuICBjb25zdCBiYXNlRXJyb3JQcm90b3R5cGUgPSB7XG4gICAgW2luc3BlY3QuY3VzdG9tXShfZGVwdGg6IG51bWJlciwgb3B0aW9uczogSW5zcGVjdE9wdGlvbnMsIF9pbnNwZWN0OiB0eXBlb2YgaW5zcGVjdCkge1xuICAgICAgcmV0dXJuIF9pbnNwZWN0KHRoaXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVwdGg6IEluZmluaXR5LFxuICAgICAgICAvLyBTaW5jZSB3ZSBjYWxsIGluc3BlY3Qgb24gb3Vyc2VsZiwgd2UgbmVlZCB0byBkaXNhYmxlIHRoZSBjYWxscyB0byB0aGUgaW5zcGVjdC5jdXN0b20gc3ltYm9sIG9yIGVsc2UgaXQgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG4gICAgZXZlbnRzOiB7XG4gICAgICByZXF1ZXN0OiAoKSA9PiB7fSxcbiAgICAgIHJlc3BvbnNlOiAoKSA9PiB7fSxcbiAgICAgIHJlcXVlc3RFcnJvcjogKCkgPT4ge30sXG4gICAgICAuLi5vcHRpb25zLmV2ZW50cyxcbiAgICB9LFxuXG4gICAgcm91dGVzOiBjcmVhdGVSb3V0ZXMoKSxcblxuICAgIGNyZWF0ZUJhc2VIZWFkZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ3VzZXItYWdlbnQnOiBgRGlzY29yZEJvdCAoaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvcmRlbm8vZGlzY29yZGVubywgdiR7RElTQ09SREVOT19WRVJTSU9OfSlgLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGVja1JhdGVMaW1pdHModXJsLCBpZGVudGlmaWVyKSB7XG4gICAgICBjb25zdCByYXRlbGltaXRlZCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZVRva2VuUXVldWVzKG9sZFRva2VuLCBuZXdUb2tlbikge1xuICAgICAgaWYgKHJlc3QuaXNQcm94aWVkKSB7XG4gICAgICAgIGlmICghcmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJUaGUgJ3Byb3h5LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQnIG9wdGlvbiBuZWVkcyB0byBiZSBzZXQgd2hlbiB1c2luZyBhIHJlc3QgcHJveHkgYW5kIG5lZWRlZCB0byBjYWxsICd1cGRhdGVUb2tlblF1ZXVlcydcIixcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIH0gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXG4gICAgICAgIGlmIChyZXN0LmF1dGhvcml6YXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGhlYWRlcnNbcmVzdC5hdXRob3JpemF0aW9uSGVhZGVyXSA9IHJlc3QuYXV0aG9yaXphdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgZmV0Y2goYCR7cmVzdC5iYXNlVXJsfS8ke3Jlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludH1gLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgb2xkVG9rZW4sXG4gICAgICAgICAgICBuZXdUb2tlbixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdJZGVudGlmaWVyID0gYEJlYXJlciAke25ld1Rva2VufWBcblxuICAgICAgLy8gVXBkYXRlIGFsbCB0aGUgcXVldWVzXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHF1ZXVlXSBvZiByZXN0LnF1ZXVlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5xdWV1ZXMuZGVsZXRlKGtleSlcbiAgICAgICAgcXVldWUuaWRlbnRpZmllciA9IG5ld0lkZW50aWZpZXJcblxuICAgICAgICBjb25zdCBuZXdLZXkgPSBgJHtuZXdJZGVudGlmaWVyfSR7cXVldWUudXJsfWBcbiAgICAgICAgY29uc3QgbmV3UXVldWUgPSByZXN0LnF1ZXVlcy5nZXQobmV3S2V5KVxuXG4gICAgICAgIC8vIE1lcmdlIHRoZSBxdWV1ZXNcbiAgICAgICAgaWYgKG5ld1F1ZXVlKSB7XG4gICAgICAgICAgbmV3UXVldWUud2FpdGluZy51bnNoaWZ0KC4uLnF1ZXVlLndhaXRpbmcpXG4gICAgICAgICAgbmV3UXVldWUucGVuZGluZy51bnNoaWZ0KC4uLnF1ZXVlLnBlbmRpbmcpXG5cbiAgICAgICAgICBxdWV1ZS53YWl0aW5nID0gW11cbiAgICAgICAgICBxdWV1ZS5wZW5kaW5nID0gW11cblxuICAgICAgICAgIHF1ZXVlLmNsZWFudXAoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3QucXVldWVzLnNldChuZXdLZXksIHF1ZXVlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgcmF0ZWxpbWl0UGF0aF0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLnVybH1gLCByYXRlbGltaXRQYXRoKVxuXG4gICAgICAgIGlmIChyYXRlbGltaXRQYXRoLmJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC5idWNrZXRJZH1gLCByYXRlbGltaXRQYXRoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBhbHJlYWR5IGluIHNuYWtlX2Nhc2Ugd2UgY2FuIGFzc3VtZSBpdCBpcyBhbHJlYWR5IGluIHRoZSBkaXNjb3JkIGZvcm1hdC5cbiAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfJykpIHtcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gdmFsdWVcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU29tZSBmYWxzeSB2YWx1ZXMgc2hvdWxkIGJlIGFsbG93ZWQgbGlrZSBudWxsIG9yIDBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgY2FzZSAncGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICBjYXNlICdhbGxvdyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnknOlxuICAgICAgICAgICAgICAgIG5ld09ialtrZXldID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZWZhdWx0TWVtYmVyUGVybWlzc2lvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnbmFtZUxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5uYW1lX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh2YWx1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmNyZWF0ZUJhc2VIZWFkZXJzKClcblxuICAgICAgaWYgKG9wdGlvbnM/LnVuYXV0aG9yaXplZCAhPT0gdHJ1ZSkgaGVhZGVycy5hdXRob3JpemF0aW9uID0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnM/LnJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGhlYWRlcnNbQVVESVRfTE9HX1JFQVNPTl9IRUFERVJdID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnM/LnJlYXNvbilcbiAgICAgIH1cblxuICAgICAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkXG5cbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIHNwZWNpZmljIGNoZWNrIGZvciBHRVQgbWV0aG9kXG4gICAgICAvLyBTaW5jZSBHRVQgZG9lcyBub3QgYWxsb3cgYm9kaWVzXG5cbiAgICAgIC8vIEhhdmUgdG8gY2hlY2sgZm9yIGF0dGFjaG1lbnRzIGZpcnN0LCBzaW5jZSBib2R5IHRoZW4gaGFzIHRvIGJlIHNlbmQgaW4gYSBkaWZmZXJlbnQgd2F5LlxuICAgICAgaWYgKG9wdGlvbnM/LmZpbGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5maWxlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGBmaWxlc1ske2l9XWAsIG9wdGlvbnMuZmlsZXNbaV0uYmxvYiwgb3B0aW9ucy5maWxlc1tpXS5uYW1lKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGF2ZSB0byB1c2UgY2hhbmdlVG9EaXNjb3JkRm9ybWF0IG9yIGVsc2UgSlNPTi5zdHJpbmdpZnkgbWF5IHRocm93IGFuIGVycm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YgQmlnSW50KHMpIGluIHRoZSBqc29uXG4gICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdCh7IC4uLm9wdGlvbnMuYm9keSwgZmlsZXM6IHVuZGVmaW5lZCB9KSkpXG5cbiAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICBib2R5ID0gZm9ybVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICYmIG9wdGlvbnMuaGVhZGVycyAmJiBvcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID09PSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykge1xuICAgICAgICAvLyBPQXV0aDIgYm9keSBoYW5kbGluZ1xuICAgICAgICBjb25zdCBmb3JtQm9keTogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgIGNvbnN0IGRpc2NvcmRCb2R5ID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBkaXNjb3JkQm9keSkge1xuICAgICAgICAgIGZvcm1Cb2R5LnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3ApfT0ke2VuY29kZVVSSUNvbXBvbmVudChkaXNjb3JkQm9keVtwcm9wXSl9YClcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHkgPSBmb3JtQm9keS5qb2luKCcmJylcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgIGJvZHkgPSBvcHRpb25zLmJvZHlcbiAgICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSkpXG4gICAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBgYXBwbGljYXRpb24vanNvbmBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTT01FVElNRVMgU1BFQ0lBTCBIRUFERVJTIChFLkcuIENVU1RPTSBBVVRIT1JJWkFUSU9OKSBORUVEIFRPIEJFIFVTRURcbiAgICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBtZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzLCBpZGVudGlmaWVyKSB7XG4gICAgICBsZXQgcmF0ZUxpbWl0ZWQgPSBmYWxzZVxuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIpXG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICBjb25zdCByZXNldCA9IERhdGUubm93KCkgKyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwXG4gICAgICBjb25zdCBnbG9iYWwgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIpXG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSKSA/PyB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9MSU1JVF9IRUFERVIpXG5cbiAgICAgIC8vIElmIHdlIGRpZG4ndCByZWNlaXZlZCB0aGUgaWRlbnRpZmllciwgZmFsbGJhY2sgdG8gdGhlIGJvdCB0b2tlblxuICAgICAgaWRlbnRpZmllciA/Pz0gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgUkFURSBMSU1JVCwgTUFSSyBJVCBBUyBSQVRFIExJTUlURURcbiAgICAgIGlmIChyZW1haW5pbmcgPT09ICcwJykge1xuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke2J1Y2tldElkfWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IE51bWJlcihoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKSkgKiAxMDAwXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIHJldHJ5QWZ0ZXJcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCByZXRyeUFmdGVyKVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoJ2dsb2JhbCcsIHtcbiAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy5yb3V0ZX1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShvcHRpb25zLm1ldGhvZCwgb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnMpXG5cbiAgICAgIGNvbnN0IGxvZ2dpbmdIZWFkZXJzID0geyAuLi5wYXlsb2FkLmhlYWRlcnMgfVxuXG4gICAgICBpZiAocGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXphdGlvblNjaGVtZSA9IHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uPy5zcGxpdCgnICcpWzBdXG4gICAgICAgIGxvZ2dpbmdIZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgJHthdXRob3JpemF0aW9uU2NoZW1lfSB0b2tlbmhlcmVgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHBheWxvYWQpXG4gICAgICByZXN0LmV2ZW50cy5yZXF1ZXN0KHJlcXVlc3QsIHtcbiAgICAgICAgYm9keTogb3B0aW9ucy5yZXF1ZXN0Qm9keU9wdGlvbnM/LmJvZHksXG4gICAgICB9KVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3RFcnJvcihyZXF1ZXN0LCBlcnJvciwgeyBib2R5OiBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucz8uYm9keSB9KVxuICAgICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3BvbnNlLmpzb24oKSA6IHJlc3BvbnNlLnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgcmVzdC5ldmVudHMucmVzcG9uc2UocmVxdWVzdCwgcmVzcG9uc2UsIHtcbiAgICAgICAgcmVxdWVzdEJvZHk6IG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zPy5ib2R5LFxuICAgICAgICByZXNwb25zZUJvZHk6IGJvZHksXG4gICAgICB9KVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYXMgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LCBib2R5IH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGVycm9yOiAnVGhlIHJlcXVlc3Qgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5yZXRyeUNvdW50ICs9IDFcblxuICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIpXG4gICAgICAgIGlmIChyZXNldEFmdGVyKSBhd2FpdCBkZWxheShOdW1iZXIocmVzZXRBZnRlcikgKiAxMDAwKVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLnJldHJ5UmVxdWVzdD8uKG9wdGlvbnMpXG4gICAgICB9XG5cbiAgICAgIC8vIERpc2NvcmQgc29tZXRpbWVzIHNlbmRzIGEgcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50XG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBib2R5IH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IFJlcXVlc3QoYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtyb3V0ZX1gLCByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykpXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlcXVlc3QocmVxdWVzdCwge1xuICAgICAgICAgIGJvZHk6IG9wdGlvbnM/LmJvZHksXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2gocmVxdWVzdClcblxuICAgICAgICAvLyBTb21ldGltZXMgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgKHJlc3VsdC5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk/LnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSA/IHJlc3VsdC5qc29uKCkgOiByZXN1bHQudGV4dCgpKS5jYXRjaCgoKSA9PiBudWxsKVxuXG4gICAgICAgIHJlc3QuZXZlbnRzLnJlc3BvbnNlKHJlcXVlc3QsIHJlc3VsdCwge1xuICAgICAgICAgIHJlcXVlc3RCb2R5OiBvcHRpb25zPy5ib2R5LFxuICAgICAgICAgIHJlc3BvbnNlQm9keTogYm9keSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5KSA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/ICh0eXBlb2YgZGF0YS5ib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YS5ib2R5KSA6IGRhdGEuYm9keSkgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvclRleHQ6IHN0cmluZ1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgb3B0aW9ucyB3YXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQsIG9yIHRoZSBzZXJ2ZXIgY291bGRuJ3QgdW5kZXJzdGFuZCBpdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgd2FzIG1pc3Npbmcgb3IgaW52YWxpZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIHRva2VuIHlvdSBwYXNzZWQgZGlkIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gdGhlIHJlc291cmNlLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSByZXNvdXJjZSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3QuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEhUVFAgbWV0aG9kIHVzZWQgaXMgbm90IHZhbGlkIGZvciB0aGUgbG9jYXRpb24gc3BlY2lmaWVkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIllvdSdyZSBiZWluZyByYXRlbGltaXRlZC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNTAyOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGVyZSB3YXMgbm90IGEgZ2F0ZXdheSBhdmFpbGFibGUgdG8gcHJvY2VzcyB5b3VyIG9wdGlvbnMuIFdhaXQgYSBiaXQgYW5kIHJldHJ5LidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IHJlYXNvbi5zdGF0dXNUZXh0ID8/ICdVbmtub3duIGVycm9yJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFske3JlYXNvbi5zdGF0dXN9XSAke2Vycm9yVGV4dH1gXG5cbiAgICAgICAgICAgIC8vIElmIGRpc2NvcmQgc2VudCB1cyBKU09OLCBpdCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhbiBlcnJvciBtZXNzYWdlIGZyb20gd2hpY2ggd2UgY2FuIGdldCBhbmQgYWRkIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgZnVsbCBib2R5IHdpbGwgYmUgaW4gdGhlIGVycm9yLmNhdXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2UjZXJyb3ItbWVzc2FnZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVhc29uLmJvZHkgPT09ICdvYmplY3QnICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnY29kZScpICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnbWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYFxcbkRpc2NvcmQgZXJyb3I6IFske3JlYXNvbi5ib2R5LmNvZGV9XSAke3JlYXNvbi5ib2R5Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCByZWFzb24pXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGJvZHksIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbilcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBib2R5ID0ge30sIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUFwcGxpY2F0aW9uRW1vamkoaWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmdldFVzZXIoY2hhbm5lbElkLCB1c2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VQaW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRJbmNpZGVudHNEYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVMb2JieShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkuY3JlYXRlKCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldExvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlMb2JieShsb2JieUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZE1lbWJlclRvTG9iYnkobG9iYnlJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZExvYmJ5TWVtYmVyPihyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5KGxvYmJ5SWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUxvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubGVhdmUobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVubGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsImJhc2VFcnJvclByb3RvdHlwZSIsImluc3BlY3QiLCJjdXN0b20iLCJfZGVwdGgiLCJfaW5zcGVjdCIsImRlcHRoIiwiSW5maW5pdHkiLCJjdXN0b21JbnNwZWN0IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwiZXZlbnRzIiwicmVxdWVzdCIsInJlc3BvbnNlIiwicmVxdWVzdEVycm9yIiwicm91dGVzIiwiY3JlYXRlUm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImNhbGN1bGF0ZUJpdHMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJjYW1lbFRvU25ha2VDYXNlIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJSZXF1ZXN0IiwiZGVidWciLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwianNvbiIsInRleHQiLCJyZXF1ZXN0Qm9keSIsInJlc3BvbnNlQm9keSIsInNpbXBsaWZ5VXJsIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJyZXN1bHQiLCJjYXVzZSIsImNyZWF0ZSIsInBhcnNlIiwiUHJvbWlzZSIsImRhdGEiLCJlcnJvclRleHQiLCJtZXNzYWdlIiwiaGFzUHJvcGVydHkiLCJjb2RlIiwiY2FtZWxpemUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVzIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwidXJsVG9CYXNlNjQiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJndWlsZCIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldENoYW5uZWxQaW5zIiwibWVzc2FnZVBpbnMiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFVzZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsIm1lc3NhZ2VQaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsIm1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zIiwiaW5jaWRlbnRBY3Rpb25zIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhIiwidXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJjcmVhdGVMb2JieSIsImxvYmJ5IiwiZ2V0TG9iYnkiLCJsb2JieUlkIiwibW9kaWZ5TG9iYnkiLCJkZWxldGVMb2JieSIsImFkZE1lbWJlclRvTG9iYnkiLCJyZW1vdmVNZW1iZXJGcm9tTG9iYnkiLCJsZWF2ZUxvYmJ5IiwibGlua0NoYW5uZWxUb0xvYmJ5IiwibGluayIsInVubGlua0NoYW5uZWxUb0xvYmJ5IiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWdGYUE7ZUFBQUE7O1FBRkFDO2VBQUFBOztRQURBQztlQUFBQTs7UUFPQUM7ZUFBQUE7O1FBREFDO2VBQUFBOztRQUVBQztlQUFBQTs7UUFKQUM7ZUFBQUE7O1FBQ0FDO2VBQUFBOztRQUlBQztlQUFBQTs7UUFFR0M7ZUFBQUE7Ozs0QkF4Rk87MEJBQ3NCO3VCQXNFdEM7K0JBQ29DO3VCQUNyQjt3QkFD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
|