@cloudbase/auth 2.24.5 → 2.24.6
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/adapter.js +3 -3
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/esm/adapter.js +3 -3
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/miniprogram/index.js +1 -1
- package/package.json +5 -5
- package/src/adapter.ts +2 -2
- package/src/index.ts +1 -0
package/dist/esm/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import type { authModels, AuthOptions, Credentials } from '@cloudbase/oauth';
|
|
|
7
7
|
import { CloudbaseOAuth } from '@cloudbase/oauth';
|
|
8
8
|
import { CloudbaseEventEmitter } from './utilities';
|
|
9
9
|
import { SbaseApi } from './sbaseApi';
|
|
10
|
-
export type { SignInRes, GetUserRes, CommonRes, SignInWithOtpRes, SignInOAuthRes, GetClaimsRes, ResetPasswordForEmailRes, GetUserIdentitiesRes, LinkIdentityRes, ReauthenticateRes, ResendRes, UpdateUserWithVerificationRes, OnAuthStateChangeCallback, SignInWithPasswordReq, SignInWithIdTokenReq, SignInWithOAuthReq, VerifyOAuthReq, VerifyOtpReq, LinkIdentityReq, UnlinkIdentityReq, UpdateUserReq, SignInWithOtpReq, ResetPasswordForOldReq, ResendReq, SetSessionReq, DeleteMeReq, } from './type';
|
|
10
|
+
export type { SignInRes, GetUserRes, CommonRes, SignInWithOtpRes, SignInOAuthRes, GetClaimsRes, ResetPasswordForEmailRes, GetUserIdentitiesRes, LinkIdentityRes, ReauthenticateRes, ResendRes, UpdateUserWithVerificationRes, OnAuthStateChangeCallback, SignInWithPasswordReq, SignInWithIdTokenReq, SignInWithOAuthReq, VerifyOAuthReq, VerifyOtpReq, LinkIdentityReq, UnlinkIdentityReq, UpdateUserReq, SignInWithOtpReq, ResetPasswordForOldReq, ResendReq, SetSessionReq, DeleteMeReq, SignUpRes, } from './type';
|
|
11
11
|
interface UserInfo {
|
|
12
12
|
uid?: string;
|
|
13
13
|
gender?: string;
|
package/dist/esm/index.js
CHANGED
|
@@ -1528,4 +1528,4 @@ export function registerAuth(app) {
|
|
|
1528
1528
|
console.warn(e);
|
|
1529
1529
|
}
|
|
1530
1530
|
}
|
|
1531
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZix3QkFBd0IsRUFDeEIsTUFBTSxFQUNOLHVCQUF1QixFQUN2QixVQUFVLEdBQ1gsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBa0NyQyxJQUFNLGNBQWMsR0FBRyxNQUFNLENBQUE7QUFrQjdCLE1BQU0sQ0FBQyxJQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUE7QUFFbkQsSUFBTSxrQkFBa0IsR0FBRyxVQUFDLE1BQU07SUFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLHdCQUFPLE1BQU0sS0FBRSxTQUFTLEVBQUUsd0JBQXdCLENBQUMsaUJBQWlCLElBQUcsQ0FBQTtBQUNqSCxDQUFDLENBQUE7QUFPRDtJQXVCRSxjQUFZLE9BQXFCO1FBQ3ZCLElBQUEsS0FBSyxHQUFvQixPQUFPLE1BQTNCLEVBQUUsYUFBYSxHQUFLLE9BQU8sY0FBWixDQUFZO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLElBQUksQ0FBQyxXQUFXLEVB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cnQgdHlwZSB7IElDbG91ZGJhc2UsIElDbG91ZGJhc2VDb25maWcsIElDbG91ZGJhc2VQbGF0Zm9ybUluZm8gfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ2FjaGUgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2NhY2hlJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlUmVxdWVzdCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvcmVxdWVzdCdcbmltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZUF1dGhDb25maWcsIElVc2VyLCBJVXNlckluZm8sIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ29tcG9uZW50IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb21wb25lbnQnXG5pbXBvcnQgdHlwZSB7IEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlLCBQcm92aWRlclN1YlR5cGUgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoL2Rpc3QvY2pzL2F1dGgvbW9kZWxzJ1xuaW1wb3J0IHR5cGUgeyBhdXRoTW9kZWxzLCBBdXRoT3B0aW9ucywgQ3JlZGVudGlhbHMgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHtcbiAgQ2xvdWRiYXNlT0F1dGgsXG4gIEFVVEhfQVBJX1BSRUZJWCxcbiAgTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBFVkVOVFMsXG4gIEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBPQVVUSF9UWVBFLFxufSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHsgdXNlQXV0aEFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXInXG5pbXBvcnQge1xuICBwcmludFdhcm4sXG4gIHRocm93RXJyb3IsXG4gIEVSUk9SUyxcbiAgQ09NTVVOSVRZX1NJVEVfVVJMLFxuICBjYXRjaEVycm9yc0RlY29yYXRvcixcbiAgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyLFxuICBDbG91ZGJhc2VDYWNoZSxcbiAgYWRhcHRlckZvcld4TXAsXG4gIHVzZURlZmF1bHRBZGFwdGVyLFxufSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IFNiYXNlQXBpIH0gZnJvbSAnLi9zYmFzZUFwaSdcblxuZXhwb3J0IHR5cGUge1xuICBTaWduSW5SZXMsXG4gIEdldFVzZXJSZXMsXG4gIENvbW1vblJlcyxcbiAgU2lnbkluV2l0aE90cFJlcyxcbiAgU2lnbkluT0F1dGhSZXMsXG4gIEdldENsYWltc1JlcyxcbiAgUmVzZXRQYXNzd29yZEZvckVtYWlsUmVzLFxuICBHZXRVc2VySWRlbnRpdGllc1JlcyxcbiAgTGlua0lkZW50aXR5UmVzLFxuICBSZWF1dGhlbnRpY2F0ZVJlcyxcbiAgUmVzZW5kUmVzLFxuICBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcyxcbiAgT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayxcbiAgU2lnbkluV2l0aFBhc3N3b3JkUmVxLFxuICBTaWduSW5XaXRoSWRUb2tlblJlcSxcbiAgU2lnbkluV2l0aE9BdXRoUmVxLFxuICBWZXJpZnlPQXV0aFJlcSxcbiAgVmVyaWZ5T3RwUmVxLFxuICBMaW5rSWRlbnRpdHlSZXEsXG4gIFVubGlua0lkZW50aXR5UmVxLFxuICBVcGRhdGVVc2VyUmVxLFxuICBTaWduSW5XaXRoT3RwUmVxLFxuICBSZXNldFBhc3N3b3JkRm9yT2xkUmVxLFxuICBSZXNlbmRSZXEsXG4gIFNldFNlc3Npb25SZXEsXG4gIERlbGV0ZU1lUmVxLFxufSBmcm9tICcuL3R5cGUnXG5cbmRlY2xhcmUgY29uc3QgY2xvdWRiYXNlOiBJQ2xvdWRiYXNlXG5kZWNsYXJlIGNvbnN0IHd4OiBhbnlcblxuY29uc3QgQ09NUE9ORU5UX05BTUUgPSAnYXV0aCdcblxuaW50ZXJmYWNlIFVzZXJJbmZvIHtcbiAgdWlkPzogc3RyaW5nXG4gIGdlbmRlcj86IHN0cmluZ1xuICBwaWN0dXJlPzogc3RyaW5nXG4gIGVtYWlsPzogc3RyaW5nXG4gIGVtYWlsX3ZlcmlmaWVkPzogYm9vbGVhblxuICBwaG9uZV9udW1iZXI/OiBzdHJpbmdcbiAgdXNlcm5hbWU/OiBzdHJpbmdcbiAgbmFtZT86IHN0cmluZ1xuICBiaXJ0aGRhdGU/OiBzdHJpbmdcbiAgem9uZWluZm8/OiBzdHJpbmdcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHN1Yj86IHN0cmluZ1xuICBjcmVhdGVkX2Zyb20/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IGV2ZW50QnVzID0gbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpXG5cbmNvbnN0IG9uQ3JlZGVudGlhbHNFcnJvciA9IChwYXJhbXMpID0+IHtcbiAgZXZlbnRCdXMuZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyAuLi5wYXJhbXMsIGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLkNSRURFTlRJQUxTX0VSUk9SIH0pXG59XG5cbmludGVyZmFjZSBJVXNlck9wdGlvbnMge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyIGltcGxlbWVudHMgSVVzZXIge1xuICBwdWJsaWMgdWlkPzogc3RyaW5nXG4gIHB1YmxpYyBnZW5kZXI/OiBzdHJpbmdcbiAgcHVibGljIHBpY3R1cmU/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsPzogc3RyaW5nXG4gIHB1YmxpYyBlbWFpbFZlcmlmaWVkPzogYm9vbGVhblxuICBwdWJsaWMgcGhvbmVOdW1iZXI/OiBzdHJpbmdcbiAgcHVibGljIHVzZXJuYW1lPzogc3RyaW5nIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gIHB1YmxpYyBuYW1lPzogc3RyaW5nXG4gIHB1YmxpYyBwcm92aWRlcnM/OiB7XG4gICAgaWQ/OiBzdHJpbmdcbiAgICBwcm92aWRlclVzZXJJZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgfVtdXG4gIHB1YmxpYyBiaXJ0aGRhdGU/OiBzdHJpbmdcbiAgcHVibGljIHpvbmVpbmZvPzogc3RyaW5nXG4gIHB1YmxpYyBsb2NhbGU/OiBzdHJpbmdcbiAgcHVibGljIHN1Yj86IHN0cmluZ1xuICBwdWJsaWMgY3JlYXRlZEZyb20/OiBzdHJpbmdcblxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aCAvLyBDbG91ZGJhc2VPQXV0aCDnsbvlnotcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJVXNlck9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNhY2hlLCBvYXV0aEluc3RhbmNlIH0gPSBvcHRpb25zXG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lkIzmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mbygpIHtcbiAgICB0aGlzLnVpZCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygndWlkJykgYXMgc3RyaW5nXG4gICAgdGhpcy5nZW5kZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2dlbmRlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMucGljdHVyZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGljdHVyZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuZW1haWwgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1c2VybmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbEluZm9Bc3luYygpIHtcbiAgICB0aGlzLnVpZCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCd1aWQnKVxuICAgIHRoaXMuZ2VuZGVyID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2dlbmRlcicpXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCdlbWFpbCcpXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VzZXJuYW1lJylcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ25hbWUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmJpcnRoZGF0ZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnYmlydGhkYXRlJykgYXMgc3RyaW5nXG4gICAgdGhpcy56b25laW5mbyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnem9uZWluZm8nKSBhcyBzdHJpbmdcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbG9jYWxlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5zdWIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3N1YicpIGFzIHN0cmluZ1xuICAgIHRoaXMuY3JlYXRlZEZyb20gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2NyZWF0ZWRfZnJvbScpIGFzIHN0cmluZ1xuICAgIHRoaXMucHJvdmlkZXJzID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwcm92aWRlcnMnKSBhcyBhbnlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHVzZXJJbmZvXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDnlKjmiLfkv6Hmga/kuK3mmK/lkKbljIXlkKvpnZ7ms5XlgLwnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1c2VySW5mbzogYXV0aE1vZGVscy5Vc2VyUHJvZmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnN0IHsgbmFtZSwgZ2VuZGVyLCBhdmF0YXJVcmwsIHByb3ZpbmNlLCBjb3VudHJ5LCBjaXR5IH0gPSB1c2VySW5mb1xuICAgIGNvbnN0IG5ld1VzZXJJbmZvID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0VXNlclByb2ZpbGUoeyAuLi51c2VySW5mbyB9KVxuXG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlVXNlckJhc2ljSW5mbyh7IC4uLnBhcmFtcyB9KVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw5a+G56CBXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZFxuICAgKiBAcGFyYW0gb2xkUGFzc3dvcmRcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDlr4bnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVQYXNzd29yZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAzIC0g5paw5a+G56CB5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVQYXNzd29yZChuZXdQYXNzd29yZDogc3RyaW5nLCBvbGRQYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVBhc3N3b3JkQnlPbGQoe1xuICAgICAgb2xkX3Bhc3N3b3JkOiBvbGRQYXNzd29yZCxcbiAgICAgIG5ld19wYXNzd29yZDogbmV3UGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLflkI1cbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35ZCN5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlVXNlcm5hbWUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6hueUqOaIt+WQjeWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlVXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZSh7XG4gICAgICB1c2VybmFtZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+OAguW9k+eUqOaIt+WcqOWFtuS7luWuouaIt+err+abtOaWsOeUqOaIt+S/oeaBr+S5i+WQju+8jOWPr+S7peiwg+eUqOatpOaOpeWPo+WQjOatpeabtOaWsOS5i+WQjueahOS/oeaBr+OAglxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+WIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnJlZnJlc2goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHJlZnJlc2gocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxJVXNlckluZm8+IHtcbiAgICBjb25zdCBuZXdVc2VySW5mbyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFVzZXJJbmZvKHBhcmFtcylcbiAgICBpZiAoKG5ld1VzZXJJbmZvIGFzIGFueSkuY29kZSA9PT0gJ0lOVkFMSURfQUNDRVNTX1RPS0VOJykge1xuICAgICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKHt9KVxuICAgICAgdGhyb3cgbmV3VXNlckluZm9cbiAgICB9XG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICAgIHJldHVybiBuZXdVc2VySW5mb1xuICB9XG5cbiAgcHVibGljIGdldExvY2FsVXNlckluZm8oa2V5Pzogc3RyaW5nKTogc3RyaW5nIHwgYm9vbGVhbiB8IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5jYWNoZS5nZXRTdG9yZSh1c2VySW5mb0tleSlcblxuICAgIGlmICgha2V5KSByZXR1cm4gdXNlckluZm8gfHwge31cblxuICAgIHJldHVybiB1c2VySW5mb1trZXldXG4gIH1cblxuICBwdWJsaWMgc2V0TG9jYWxVc2VySW5mbyh1c2VySW5mbzogYW55KSB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgdGhpcy5jYWNoZS5zZXRTdG9yZSh1c2VySW5mb0tleSwgdXNlckluZm8pXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldExvY2FsVXNlckluZm9Bc3luYyhrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmNhY2hlLmdldFN0b3JlQXN5bmModXNlckluZm9LZXkpXG4gICAgcmV0dXJuIHVzZXJJbmZvW2tleV1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VXNlckluZm8oKSB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSB0aGlzLmNhY2hlLmdldFN0b3JlKHVzZXJJbmZvS2V5KVxuICAgIDtbXG4gICAgICAndWlkJyxcbiAgICAgICdlbWFpbCcsXG4gICAgICAnbmFtZScsXG4gICAgICAnZ2VuZGVyJyxcbiAgICAgICdwaWN0dXJlJyxcbiAgICAgICdlbWFpbF92ZXJpZmllZCcsXG4gICAgICAncGhvbmVfbnVtYmVyJyxcbiAgICAgICdiaXJ0aGRhdGUnLFxuICAgICAgJ3pvbmVpbmZvJyxcbiAgICAgICdsb2NhbGUnLFxuICAgICAgJ3N1YicsXG4gICAgICAnY3JlYXRlZF9mcm9tJyxcbiAgICAgICdwcm92aWRlcnMnLFxuICAgICAgJ3VzZXJuYW1lJyxcbiAgICAgICdjcmVhdGVkX2F0JyxcbiAgICBdLmZvckVhY2goKGluZm9LZXkpID0+IHtcbiAgICAgIHRoaXNbaW5mb0tleV0gPSB1c2VySW5mb1tpbmZvS2V5XVxuICAgIH0pXG4gIH1cbn1cbmludGVyZmFjZSBJTG9naW5TdGF0ZU9wdGlvbnMgZXh0ZW5kcyBJVXNlck9wdGlvbnMge1xuICBlbnZJZDogc3RyaW5nXG59XG5leHBvcnQgY2xhc3MgTG9naW5TdGF0ZSBpbXBsZW1lbnRzIElMb2dpblN0YXRlIHtcbiAgcHVibGljIHVzZXI6IFVzZXJcbiAgcHVibGljIG9hdXRoTG9naW5TdGF0ZTogYW55XG5cbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aFxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJTG9naW5TdGF0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGVudklkLCBjYWNoZSwgb2F1dGhJbnN0YW5jZSB9ID0gb3B0aW9uc1xuICAgIGlmICghZW52SWQpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAnZW52SWQgaXMgbm90IGRlZmluZWQnKVxuICAgIH1cbiAgICB0aGlzLmNhY2hlID0gY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBvYXV0aEluc3RhbmNlXG5cbiAgICB0aGlzLnVzZXIgPSBuZXcgVXNlcih7XG4gICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgIG9hdXRoSW5zdGFuY2UsXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0xvY2FsU3RhdGUoKSB7XG4gICAgdGhpcy5vYXV0aExvZ2luU3RhdGUgPSB0aGlzLm9hdXRoSW5zdGFuY2U/LmF1dGhBcGkuaGFzTG9naW5TdGF0ZVN5bmMoKVxuICAgIHRoaXMudXNlci5jaGVja0xvY2FsSW5mbygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbFN0YXRlQXN5bmMoKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIGF3YWl0IHRoaXMudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgfVxufVxuXG5jbGFzcyBBdXRoIGV4dGVuZHMgU2Jhc2VBcGkge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IElDbG91ZGJhc2VBdXRoQ29uZmlnICYge1xuICAgIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgICByZXF1ZXN0PzogSUNsb3VkYmFzZVJlcXVlc3RcbiAgICBydW50aW1lPzogc3RyaW5nXG4gIH0sKSB7XG4gICAgc3VwZXIoY29uZmlnKVxuICAgIHRoaXMuc2V0QWNjZXNzS2V5KClcbiAgfVxuXG4gIC8qKlxuICAgKiDnu5HlrprmiYvmnLrlj7dcbiAgICogQHBhcmFtIHBob25lTnVtYmVyXG4gICAqIEBwYXJhbSBwaG9uZUNvZGVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5HlrprmiYvmnLrlj7flpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRQaG9uZU51bWJlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG55+t5L+h6aqM6K+B56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kUGhvbmVOdW1iZXIocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRQaG9uZVJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZWRpdENvbnRhY3QocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOino+e7keS4ieaWuee7keWumlxuICAgKiBAcGFyYW0gbG9naW5UeXBlXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6Kej6Zmk5LiJ5pa557uR5a6a5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS51bmJpbmRQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN6LSm5oi35piv5ZCm5bey57uP5LiO5q2k55m75b2V5pa55byP6Kej57uRJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB1bmJpbmRQcm92aWRlcihwYXJhbXM6IGF1dGhNb2RlbHMuVW5iaW5kUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVuYmluZFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDpgq7nrrHlnLDlnYBcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqIEBwYXJhbSBzdWRvX3Rva2VuXG4gICAqIEBwYXJhbSB2ZXJpZmljYXRpb25fdG9rZW5cbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5Hlrprpgq7nrrHlnLDlnYDlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRFbWFpbCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG6YKu566x5a+G56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBiaW5kRW1haWwocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRFbWFpbFJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZWRpdENvbnRhY3QocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIHZlcmlmeVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuVmVyaWZ5UmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgVXNlclxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+mqjOivgeeggemqjOivgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkudmVyaWZ5KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobmiYvmnLrpqozor4HnoIEv6YKu566x55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkocGFyYW1zOiBhdXRoTW9kZWxzLlZlcmlmeVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudmVyaWZ5KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bpqozor4HnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIFVzZXJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bpqozor4HnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFZlcmlmaWNhdGlvbigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG5omL5py66aqM6K+B56CBL+mCrueuseeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VmVyaWZpY2F0aW9uKFxuICAgIHBhcmFtczogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICAgIG9wdGlvbnM/OiB7IHdpdGhDYXB0Y2hhOiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRWZXJpZmljYXRpb24ocGFyYW1zLCBvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW9k+WJjeeZu+W9leeahOeUqOaIt+S/oeaBry3lkIzmraVcbiAgICovXG4gIGdldCBjdXJyZW50VXNlcigpIHtcbiAgICBpZiAodGhpcy5jYWNoZS5tb2RlID09PSAnYXN5bmMnKSB7XG4gICAgICAvLyBhc3luYyBzdG9yYWdl55qE5bmz5Y+w6LCD55So5q2kQVBJ5o+Q56S6XG4gICAgICBwcmludFdhcm4oXG4gICAgICAgIEVSUk9SUy5JTlZBTElEX09QRVJBVElPTixcbiAgICAgICAgJ2N1cnJlbnQgcGxhdGZvcm1cXCdzIHN0b3JhZ2UgaXMgYXN5bmNocm9ub3VzLCBwbGVhc2UgdXNlIGdldEN1cnJlbnRVc2VyIGluc3RlYWQnLFxuICAgICAgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG5cbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgcmV0dXJuIGxvZ2luU3RhdGUudXNlciB8fCBudWxsXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeW8guatpVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0Q3VycmVudFVzZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRVc2VyKCk6IFByb21pc2U8KGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+KSB8IG51bGw+IHtcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgdXNlckluZm8gPSBsb2dpblN0YXRlLnVzZXIuZ2V0TG9jYWxVc2VySW5mbygpIGFzIGF1dGhNb2RlbHMuVXNlckluZm9cbiAgICAgIGF3YWl0IGxvZ2luU3RhdGUudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgICAgIHJldHVybiB7IC4uLmxvZ2luU3RhdGUudXNlciwgLi4udXNlckluZm8gfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIOWMv+WQjeeZu+W9lVxuICAvLyAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgLy8gICogQG1lbWJlcm9mIEF1dGhcbiAgLy8gICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfljL/lkI3nmbvlvZXlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5KGRhdGE6IHtcbiAgLy8gICBwcm92aWRlcl90b2tlbj86IHN0cmluZ1xuICAvLyB9ID0ge30sKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gIC8vIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KGRhdGEpXG4gIC8vIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIOWMv+WQjeeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo/ljL/lkI3nmbvlvZXlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHlJbld4KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5Bbm9ueW1vdXNseUluV3goe1xuICAgIHVzZVd4Q2xvdWQsXG4gIH06IHtcbiAgICB1c2VXeENsb3VkPzogYm9vbGVhblxuICB9ID0ge30pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdvcGVuX2lkJyxcbiAgICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlV3hDbG91ZCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICgocmVzdWx0IGFzIGFueSk/LmVycm9yX2NvZGUgfHwgIXJlc3VsdC5wcm92aWRlcl90b2tlbikge1xuICAgICAgICAgIHRocm93IHJlc3VsdFxuICAgICAgICB9XG5cbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5Bbm9ueW1vdXNseShcbiAgICAgICAgICB7IHByb3ZpZGVyX3Rva2VuOiByZXN1bHQucHJvdmlkZXJfdG9rZW4gfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChjcmVkZW50aWFscyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgY3JlZGVudGlhbHNcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB3eC5sb2dpbih7XG4gICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUodW5kZWZpbmVkLCB7IGFzeW5jUmVmcmVzaFVzZXI6IHRydWUgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo/nu5HlrppPcGVuSURcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5bCP56iL5bqP57uR5a6aT3BlbklE5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqPb3Blbklk6Z2Z6buY55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLmJpbmRPcGVuSWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGJpbmRPcGVuSWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cblxuICAgIGNvbnN0IG1haW5GdW5jID0gYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbih7XG4gICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIoeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqPb3Blbklk6Z2Z6buY55m75b2VXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+Wwj+eoi+W6j29wZW5JZOmdmem7mOeZu+W9leWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j29wZW5JZOmdmem7mOeZu+W9lScsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoT3BlbklkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoT3BlbklkKHsgdXNlV3hDbG91ZCA9IHRydWUgfSA9IHt9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gIC8vICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgLy8gICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgLy8gICB9XG4gIC8vICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cblxuICAvLyAgIGNvbnN0IG1haW5GdW5jID0gYXN5bmMgKGNvZGUpID0+IHtcbiAgLy8gICAgIGxldCByZXN1bHQ6IEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gIC8vICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgLy8gICAgIHRyeSB7XG4gIC8vICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihcbiAgLy8gICAgICAgICB7XG4gIC8vICAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgLy8gICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gIC8vICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgLy8gICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gIC8vICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAvLyAgICAgICAgICAgfSxcbiAgLy8gICAgICAgICB9LFxuICAvLyAgICAgICAgIHVzZVd4Q2xvdWQsXG4gIC8vICAgICAgIClcblxuICAvLyAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgLy8gICAgICAgICB0aHJvdyByZXN1bHRcbiAgLy8gICAgICAgfVxuXG4gIC8vICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKFxuICAvLyAgICAgICAgIHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9LFxuICAvLyAgICAgICAgIHVzZVd4Q2xvdWQsXG4gIC8vICAgICAgIClcblxuICAvLyAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgLy8gICAgICAgICB0aHJvdyBjcmVkZW50aWFsc1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgICB0aHJvdyBlcnJvclxuICAvLyAgICAgfVxuICAvLyAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscyBhcyBDcmVkZW50aWFscylcbiAgLy8gICB9XG5cbiAgLy8gICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIC8vICAgICB3eC5sb2dpbih7XG4gIC8vICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgLy8gICAgICAgICB0cnkge1xuICAvLyAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gIC8vICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gIC8vICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgLy8gICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH0sXG4gIC8vICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAvLyAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAvLyAgICAgICAgIHJlamVjdChlcnJvcilcbiAgLy8gICAgICAgfSxcbiAgLy8gICAgIH0pXG4gIC8vICAgfSlcblxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j3VuaW9uSWTpnZnpu5jnmbvlvZVcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j3VuaW9uSWTpnZnpu5jnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aFVuaW9uSWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVbmlvbklkKCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gd3hJbmZvPy5hcHBJZFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9jb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXJJZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ3VuaW9uX2lkJyxcbiAgICAgICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbiB9ID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgaWYgKCFwcm92aWRlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcih7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVySWQsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChzaWduSW5SZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+aJi+acuuWPt+aOiOadg+eZu+W9le+8jOebruWJjeWPquaUr+aMgeWFqOaJmOeuoeaJi+acuuWPt+aOiOadg+eZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICflsI/nqIvluo/miYvmnLrlj7fmjojmnYPnmbvlvZXlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo/miYvmnLrlj7fmjojmnYPnmbvlvZUnLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aFBob25lQXV0aCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFBob25lQXV0aCh7IHBob25lQ29kZSA9ICcnIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgLy8gICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAvLyAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAvLyAgIH1cbiAgLy8gICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuICAvLyAgIGNvbnN0IHByb3ZpZGVySW5mbyA9IHtcbiAgLy8gICAgIHByb3ZpZGVyX3BhcmFtczogeyBwcm92aWRlcl9jb2RlX3R5cGU6ICdwaG9uZScgfSxcbiAgLy8gICAgIHByb3ZpZGVyX2lkOiB3eEluZm8uYXBwSWQsXG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgeyBjb2RlIH0gPSBhd2FpdCB3eC5sb2dpbigpXG4gIC8vICAgOyhwcm92aWRlckluZm8gYXMgYW55KS5wcm92aWRlcl9jb2RlID0gY29kZVxuXG4gIC8vICAgdHJ5IHtcbiAgLy8gICAgIGxldCBwcm92aWRlclRva2VuID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHByb3ZpZGVySW5mbylcbiAgLy8gICAgIGlmIChwcm92aWRlclRva2VuLmVycm9yX2NvZGUpIHtcbiAgLy8gICAgICAgdGhyb3cgcHJvdmlkZXJUb2tlblxuICAvLyAgICAgfVxuXG4gIC8vICAgICBwcm92aWRlclRva2VuID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucGF0Y2hQcm92aWRlclRva2VuKHtcbiAgLy8gICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4ucHJvdmlkZXJfdG9rZW4sXG4gIC8vICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8uYXBwSWQsXG4gIC8vICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAvLyAgICAgICAgIGNvZGU6IHBob25lQ29kZSxcbiAgLy8gICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdwaG9uZScsXG4gIC8vICAgICAgIH0sXG4gIC8vICAgICB9KVxuICAvLyAgICAgaWYgKHByb3ZpZGVyVG9rZW4uZXJyb3JfY29kZSkge1xuICAvLyAgICAgICB0aHJvdyBwcm92aWRlclRva2VuXG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcih7XG4gIC8vICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuLnByb3ZpZGVyX3Rva2VuLFxuICAvLyAgICAgfSlcblxuICAvLyAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAvLyAgICAgICB0aHJvdyBzaWduSW5SZXNcbiAgLy8gICAgIH1cbiAgLy8gICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgdGhyb3cgZXJyb3JcbiAgLy8gICB9XG5cbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo/nn63kv6Hpqozor4HnoIHnmbvpmYZcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn55+t5L+h6aqM6K+B56CB55m76ZmGJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqP55+t5L+h6aqM6K+B56CB55m76ZmGJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhTbXMoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhTbXMoe1xuICAgIHZlcmlmaWNhdGlvbkluZm8gPSB7IHZlcmlmaWNhdGlvbl9pZDogJycsIGlzX3VzZXI6IGZhbHNlIH0sXG4gICAgdmVyaWZpY2F0aW9uQ29kZSA9ICcnLFxuICAgIHBob25lTnVtID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgdmVyaWZpY2F0aW9uSW5mbyxcbiAgICAgICAgdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgICAgYmluZEluZm8sXG4gICAgICAgIHVzZXJuYW1lOiBwaG9uZU51bSxcbiAgICAgICAgbG9naW5UeXBlOiAnc21zJyxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOmCrueusemqjOivgeeggeeZu+mZhlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfpgq7nrrHpqozor4HnoIHnmbvpmYYnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobpgq7nrrHnmbvpmYYnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aEVtYWlsKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoRW1haWwoe1xuICAgIHZlcmlmaWNhdGlvbkluZm8gPSB7IHZlcmlmaWNhdGlvbl9pZDogJycsIGlzX3VzZXI6IGZhbHNlIH0sXG4gICAgdmVyaWZpY2F0aW9uQ29kZSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICAgIGVtYWlsID0gJycsXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgdmVyaWZpY2F0aW9uSW5mbyxcbiAgICAgICAgdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgICAgYmluZEluZm8sXG4gICAgICAgIHVzZXJuYW1lOiBlbWFpbCxcbiAgICAgICAgbG9naW5UeXBlOiAnZW1haWwnLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6K6+572u6I635Y+W6Ieq5a6a5LmJ55m75b2VIHRpY2tldCDlh73mlbBcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkdldEN1c3RvbVNpZ25UaWNrZXRGbn0gZ2V0VGlja0ZuXG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuOiBhdXRoTW9kZWxzLkdldEN1c3RvbVNpZ25UaWNrZXRGbik6IHZvaWQge1xuICAgIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbilcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfoh6rlrprkuYnnmbvlvZXlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoboh6rlrprkuYnnmbvlvZUnLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICAnICAzIC0gdGlja2V0IOaYr+WQpuW9kuWxnuS6juW9k+WJjeeOr+WigycsXG4gIC8vICAgICAnICA0IC0g5Yib5bu6IHRpY2tldCDnmoToh6rlrprkuYnnmbvlvZXnp4HpkqXmmK/lkKbov4fmnJ8nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQoKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gIC8vICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpXG4gIC8vICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlNpZ25JblJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW4ocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25JblJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW4ocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqXG4gIC8vICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduVXBSZXF1ZXN0fSBwYXJhbXNcbiAgLy8gICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gIC8vICAqIEBtZW1iZXJvZiBBdXRoXG4gIC8vICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn5rOo5YaM5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5oyH5a6a55m75b2V5pa55byPJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25VcCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnblVwKHBhcmFtczogYXV0aE1vZGVscy5TaWduVXBSZXF1ZXN0KTogUHJvbWlzZTxhbnk+IHtcbiAgLy8gICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAocGFyYW1zKVxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruWvhueggVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2V0UGFzc3dvcmRSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLlNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRQYXNzd29yZChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5qOA5rWL55So5oi35ZCN5piv5ZCm5bey57uP5Y2g55SoXG4gICAqIEBwYXJhbSB1c2VybmFtZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+aYr+WQpuiiq+WNoOeUqOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuaXNVc2VybmFtZVJlZ2lzdGVyZWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGlzVXNlcm5hbWVSZWdpc3RlcmVkKHVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodHlwZW9mIHVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICd1c2VybmFtZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBjb25zdCB7IGV4aXN0IH0gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5jaGVja0lmVXNlckV4aXN0KHsgdXNlcm5hbWUgfSlcbiAgICByZXR1cm4gZXhpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiDnmbvlh7pcbiAgICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfnlKjmiLfnmbvlh7rlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnNpZ25PdXQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgJyAgMiAtIOW9k+WJjeeUqOaIt+aYr+WQpuS4uuWMv+WQjeeZu+W9le+8iOWMv+WQjeeZu+W9leS4jeaUr+aMgXNpZ25PdXTvvIknLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25PdXQocGFyYW1zPzogYXV0aE1vZGVscy5TaWdub3V0UmVxdWVzdCk6IFByb21pc2U8dm9pZCB8IGF1dGhNb2RlbHMuU2lnbm91dFJlcG9uc2U+IHtcbiAgLy8gICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgLy8gICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduT3V0KHBhcmFtcylcbiAgLy8gICBhd2FpdCB0aGlzLmNhY2hlLnJlbW92ZVN0b3JlQXN5bmModXNlckluZm9LZXkpXG5cbiAgLy8gICBldmVudEJ1cy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05fT1VUIH0pXG5cbiAgLy8gICBldmVudEJ1cy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9PVVQgfSlcbiAgLy8gICByZXR1cm4gcmVzXG4gIC8vIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGhhc0xvZ2luU3RhdGUoKTogTG9naW5TdGF0ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0TG9naW5TdGF0ZSBpbnN0ZWVkJyxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9hdXRoTG9naW5TdGF0ZSA9IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5oYXNMb2dpblN0YXRlU3luYygpXG4gICAgaWYgKG9hdXRoTG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeZu+W9leaAgS3lvILmraVcbiAgICog5q2kQVBJ5Li65YW85a655byC5q2lc3RvcmFnZeeahOW5s+WPsFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluacrOWcsOeZu+W9leaAgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0TG9naW5TdGF0ZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0TG9naW5TdGF0ZSgpIHtcbiAgICBsZXQgb2F1dGhMb2dpblN0YXRlID0gbnVsbFxuXG4gICAgdHJ5IHtcbiAgICAgIG9hdXRoTG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8oKTogUHJvbWlzZTwoYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj4pIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRVc2VyKClcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5blvq7mkK3mj5Lku7bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDmmK/lkKblt7LnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuZ2V0V2VkYVVzZXJJbmZvKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRXZWRhVXNlckluZm8oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0V2VkYVVzZXJJbmZvKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCkge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBhd2FpdCAobG9naW5TdGF0ZS51c2VyIGFzIFVzZXIpLnVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRBdXRoSGVhZGVyIOWFvOWuueWkhOeQhlxuICAgKiDov5Tlm57nqbrlr7nosaFcbiAgICovXG4gIHB1YmxpYyBnZXRBdXRoSGVhZGVyKCk6IHt9IHtcbiAgICBjb25zb2xlLmVycm9yKCdBdXRoLmdldEF1dGhIZWFkZXIgQVBJIOW3suW6n+W8gycpXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICog5Li65bey5pyJ6LSm5oi357uR56ys5LiJ5pa56LSm5oi3XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumuesrOS4ieaWueeZu+W9leaWueW8j+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZFdpdGhQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5q2k6LSm5oi35piv5ZCm5bey57uP57uR5a6a5q2k56ys5LiJ5pa5JyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmn6Xor6LnlKjmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0fSBhcHBlbmRlZF9wYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyKHF1ZXJ5T2JqOiBhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5xdWVyeVVzZXJQcm9maWxlKHF1ZXJ5T2JqKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IG9hdXRoQWNjZXNzVG9rZW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzVG9rZW46IG9hdXRoQWNjZXNzVG9rZW5SZXMsXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucGF0Y2hQcm92aWRlclRva2VuKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhXZWNoYXQocGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhXZWNoYXQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50VG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRUb2tlbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXM6IGF1dGhNb2RlbHMuR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5SZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGV2aWNlQXV0aG9yaXplKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWRvKHBhcmFtczogYXV0aE1vZGVscy5TdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5TdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3VkbyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBhdXRoTW9kZWxzLldpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubG9naW5TY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpbkdyb3VwcygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25Mb2dpblN0YXRlQ2hhbmdlZChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICBldmVudEJ1cy5vbihFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgLy8gZ2V0TG9naW5TdGF0ZeS8mumHjeWkjeinpuWPkWdldENyZWRlbnRpYWxz77yM5a+86Ie05q275b6q546v77yM5omA5LulZ2V0Q3JlZGVudGlhbHPlh7rplJnkuI3lho3lh7rlj5FnZXRMb2dpblN0YXRlXG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gICAgICAgIHBhcmFtcz8uZGF0YT8uZXZlbnRUeXBlICE9PSBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IgPyBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKSA6IHt9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIHsgLi4ucGFyYW1zLCAuLi5sb2dpblN0YXRlIH0pXG4gICAgfSlcbiAgICAvLyDnq4vliLvmiafooYzkuIDmrKHlm57osINcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGxvZ2luU3RhdGUpXG4gIH1cblxuICAvKipcbiAgICog5by65Yi25Yi35pawdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bouqvku73kv6Hmga9cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldENyZWRlbnRpYWxzKClcbiAgfVxuICAvKipcbiAgICog5YaZ5YWl6Lqr5Lu95L+h5oGvXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bouqvku73mupDnsbvlnosnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFByb3ZpZGVyU3ViVHlwZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJTdWJUeXBlKCk6IFByb21pc2U8UHJvdmlkZXJTdWJUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFByb3ZpZGVyU3ViVHlwZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zOiB7IHN0YXRlOiBzdHJpbmc7IHJlZGlyZWN0X3VyaT86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmNyZWF0ZUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlDYXB0Y2hhRGF0YShwYXJhbXM6IHsgdG9rZW46IHN0cmluZzsga2V5OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnlDYXB0Y2hhRGF0YShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGUocGFyYW1zOiBhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRNaW5pUHJvZ3JhbUNvZGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzKHBhcmFtczogYXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1JlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIG1vZGlmeVBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5tb2RpZnlQYXNzd29yZChwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW4ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5tb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtczogYXV0aE1vZGVscy5HZXRVc2VyQmVoYXZpb3JMb2cpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0VXNlckJlaGF2aW9yTG9nUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFVzZXJCZWhhdmlvckxvZyhwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogc21zL2VtYWlsIOmqjOivgeeggeeZu+W9lS/ms6jlhozvvIzpgLvovpHkuIDoh7TmlLbmlZtcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgIHZlcmlmaWNhdGlvbkluZm8gPSB7IHZlcmlmaWNhdGlvbl9pZDogJycsIGlzX3VzZXI6IGZhbHNlIH0sXG4gICAgdmVyaWZpY2F0aW9uQ29kZSA9ICcnLFxuICAgIHVzZXJuYW1lOiByYXdVc2VybmFtZSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICAgIGxvZ2luVHlwZSA9ICcnLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIDEuIOmqjOivgemqjOivgeeggVxuICAgICAgY29uc3QgdmVyaWZ5UmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudmVyaWZ5KHtcbiAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICB9KVxuXG4gICAgICBpZiAoKHZlcmlmeVJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHZlcmlmeVJlc1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgICBjb25zdCB7IHZlcmlmaWNhdGlvbl90b2tlbiB9ID0gdmVyaWZ5UmVzXG5cbiAgICAgIC8vIOaJi+acuueZu+W9leWPguaVsFxuICAgICAgbGV0IHVzZXJuYW1lID0gL15cXCtcXGR7MSwzfVxccysvLnRlc3QocmF3VXNlcm5hbWUpID8gcmF3VXNlcm5hbWUgOiBgKzg2ICR7cmF3VXNlcm5hbWV9YFxuICAgICAgbGV0IHNpZ25VcFBhcmFtOiBhbnkgPSB7IHBob25lX251bWJlcjogdXNlcm5hbWUgfVxuXG4gICAgICAvLyDpgq7nrrHnmbvlvZXlj4LmlbBcbiAgICAgIGlmIChsb2dpblR5cGUgPT09ICdlbWFpbCcpIHtcbiAgICAgICAgdXNlcm5hbWUgPSByYXdVc2VybmFtZVxuICAgICAgICBzaWduVXBQYXJhbSA9IHsgZW1haWw6IHVzZXJuYW1lIH1cbiAgICAgIH1cblxuICAgICAgLy8gMi4g5qC55o2u5piv5ZCm5bey57uP5piv55So5oi377yM5YiG5Yir6LWw55m75b2V5oiW5rOo5YaM6YC76L6RXG4gICAgICBpZiAodmVyaWZpY2F0aW9uSW5mby5pc191c2VyKSB7XG4gICAgICAgIC8vIOengeacieWMlueOr+Wig+aIluiAheiHquWumuS5ieW6lOeUqOi1sHYx54mI5pys55qE6ICB6YC76L6RXG4gICAgICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25Jbih7XG4gICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBzaWduSW5SZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaW5kSW5mbykge1xuICAgICAgICAgIGNvbnN0IGJpbmRSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiAoYmluZEluZm8gYXMgYW55KT8ucHJvdmlkZXJUb2tlbixcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKChiaW5kUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICAgIHRocm93IGJpbmRSZXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOiHquWumuS5ieW6lOeUqOi1sHNpZ25VcOmAu+i+kVxuICAgICAgICBjb25zdCBzaWduVXBSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgIC4uLnNpZ25VcFBhcmFtLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICBwcm92aWRlcl90b2tlbjogKGJpbmRJbmZvIGFzIGFueSk/LnByb3ZpZGVySWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChzaWduVXBSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IHNpZ25VcFJlc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUxvZ2luU3RhdGUoXG4gICAgcGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9LFxuICAgIG9wdGlvbnM/OiB7IGFzeW5jUmVmcmVzaFVzZXI/OiBib29sZWFuOyB1c2VySW5mbz86IGFueSB9LFxuICApOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgIH0pXG5cbiAgICBhd2FpdCBsb2dpblN0YXRlLmNoZWNrTG9jYWxTdGF0ZUFzeW5jKClcblxuICAgIGlmIChvcHRpb25zPy51c2VySW5mbykge1xuICAgICAgbG9naW5TdGF0ZS51c2VyLnNldExvY2FsVXNlckluZm8ob3B0aW9ucy51c2VySW5mbylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnM/LmFzeW5jUmVmcmVzaFVzZXIpIHtcbiAgICAgICAgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfVxuICAgIH1cblxuICAgIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTl9JTiB9KVxuXG4gICAgZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfSU4gfSlcbiAgICByZXR1cm4gbG9naW5TdGF0ZVxuICB9XG5cbiAgYXN5bmMgc2V0QWNjZXNzS2V5KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZy5hY2Nlc3NLZXkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoe1xuICAgICAgICAgIGFjY2Vzc190b2tlbjogdGhpcy5jb25maWcuYWNjZXNzS2V5LFxuICAgICAgICAgIHRva2VuX3R5cGU6ICdCZWFyZXInLFxuICAgICAgICAgIHNjb3BlOiAnYWNjZXNzS2V5JyxcbiAgICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZSgrbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpKSxcbiAgICAgICAgICBleHBpcmVzX2luOiArbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdhY2Nlc3NLZXkgZXJyb3I6ICcsIGVycm9yKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG50eXBlIFRJbml0QXV0aE9wdGlvbnMgPSBQaWNrPElDbG91ZGJhc2VBdXRoQ29uZmlnLCAncmVnaW9uJyB8ICdwZXJzaXN0ZW5jZScgfCAnaTE4bicgfCAnYWNjZXNzS2V5JyB8ICd1c2VXeENsb3VkJz4gJlxuUGFydGlhbDxBdXRoT3B0aW9ucz4gJiB7XG4gIGRldGVjdFNlc3Npb25JblVybD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXV0aEluc3RhbmNlKFxuICBjb25maWc6IFRJbml0QXV0aE9wdGlvbnMsXG4gIG9wdGlvbnM/OiB7XG4gICAgY2xpZW50SWQ6IElDbG91ZGJhc2VDb25maWdbJ2NsaWVudElkJ11cbiAgICBlbnY6IElDbG91ZGJhc2VDb25maWdbJ2VudiddXG4gICAgYXBpT3JpZ2luOiBzdHJpbmdcbiAgICBjYWNoZT86IElDbG91ZGJhc2VDYWNoZVxuICAgIHBsYXRmb3JtPzogSUNsb3VkYmFzZVsncGxhdGZvcm0nXVxuICAgIGFwcD86IElDbG91ZGJhc2VcbiAgICBkZWJ1Zz86IElDbG91ZGJhc2VBdXRoQ29uZmlnWydkZWJ1ZyddXG4gICAgZGV0ZWN0U2Vzc2lvbkluVXJsPzogSUNsb3VkYmFzZUF1dGhDb25maWdbJ2RldGVjdFNlc3Npb25JblVybCddXG4gIH0sXG4pIHtcbiAgY29uc3QgeyByZWdpb24gPSAnYXAtc2hhbmdoYWknLCBpMThuLCBhY2Nlc3NLZXksIHVzZVd4Q2xvdWQgfSA9IGNvbmZpZ1xuICBjb25zdCBwbGF0Zm9ybSA9IG9wdGlvbnM/LnBsYXRmb3JtIHx8ICh1c2VEZWZhdWx0QWRhcHRlci5iaW5kKG9wdGlvbnMpKCkgYXMgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbylcbiAgY29uc3QgeyBydW50aW1lLCBhZGFwdGVyIH0gPSBwbGF0Zm9ybVxuXG4gIGNvbnN0IHsgZW52LCBjbGllbnRJZCwgZGVidWcsIGNhY2hlLCBhcHA6IGNsb3VkYmFzZSB9ID0gb3B0aW9ucyB8fCB7fVxuICBsZXQgeyBhcGlPcmlnaW4gfSA9IG9wdGlvbnMgfHwge31cbiAgaWYgKCFhcGlPcmlnaW4pIHtcbiAgICBhcGlPcmlnaW4gPSBgaHR0cHM6Ly8ke2Vudn0uJHtyZWdpb259LnRjYi1hcGkudGVuY2VudGNsb3VkYXBpLmNvbWBcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbk9wdHMgPSB7XG4gICAgZW52LFxuICAgIGNsaWVudElkLFxuICAgIGkxOG4sXG4gICAgYWNjZXNzS2V5LFxuICAgIHVzZVd4Q2xvdWQsXG4gICAgZXZlbnRCdXMsXG4gIH1cblxuICBjb25zdCBvYXV0aEluc3RhbmNlID0gbmV3IENsb3VkYmFzZU9BdXRoKHVzZUF1dGhBZGFwdGVyKHtcbiAgICAuLi5jb21tb25PcHRzLFxuICAgIGFwaU9yaWdpbixcbiAgICBhcGlQYXRoOiBjb25maWc/LmFwaVBhdGggfHwgQVVUSF9BUElfUFJFRklYLFxuICAgIC8vIEB0b2RvIOS7peS4i+acgOWlvei1sGFkYXB0b3LlpITnkIbvvIznm67liY1vYXV0aOaooeWdl+ayoeaMiWFkYXB0b3LmjqXlj6Porr7orqFcbiAgICBzdG9yYWdlOiBjb25maWc/LnN0b3JhZ2UsXG4gICAgYmFzZVJlcXVlc3Q6IGNvbmZpZz8uYmFzZVJlcXVlc3QsXG4gICAgcmVxdWVzdDogY29uZmlnPy5yZXF1ZXN0LFxuICAgIGFub255bW91c1NpZ25JbkZ1bmM6IGNvbmZpZz8uYW5vbnltb3VzU2lnbkluRnVuYyxcbiAgICBjYXB0Y2hhT3B0aW9uczogY29uZmlnPy5jYXB0Y2hhT3B0aW9ucyxcbiAgICB3eENsb3VkOiBjb25maWc/Lnd4Q2xvdWQsXG4gICAgYWRhcHRlcixcbiAgICBvbkNyZWRlbnRpYWxzRXJyb3IsXG4gICAgaGVhZGVyczogeyAnWC1TREstVmVyc2lvbic6IGBAY2xvdWRiYXNlL2pzLXNkay8ke2NvbmZpZy5zZGtWZXJzaW9ufWAsIC4uLihjb25maWcuaGVhZGVycyB8fCB7fSkgfSxcbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IGNvbmZpZy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgZGVidWcsXG4gIH0pLClcblxuICBjb25zdCBhdXRoSW5zdGFuY2UgPSBuZXcgQXV0aCh7XG4gICAgLi4uY29tbW9uT3B0cyxcbiAgICByZWdpb24sXG4gICAgcGVyc2lzdGVuY2U6IGNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICBkZWJ1ZyxcbiAgICBjYWNoZTpcbiAgICAgIGNhY2hlXG4gICAgICB8fCBuZXcgQ2xvdWRiYXNlQ2FjaGUoe1xuICAgICAgICBwZXJzaXN0ZW5jZTogY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgICAgICBrZXlzOiB7IHVzZXJJbmZvS2V5OiBgdXNlcl9pbmZvXyR7ZW52fWAgfSxcbiAgICAgICAgcGxhdGZvcm1JbmZvOiBwbGF0Zm9ybSxcbiAgICAgIH0pLFxuICAgIHJ1bnRpbWU6IHJ1bnRpbWUgfHwgJ3dlYicsXG4gICAgX2Zyb21BcHA6IGNsb3VkYmFzZSxcbiAgICBvYXV0aEluc3RhbmNlLFxuICB9KVxuXG4gIC8vIEluaXRpYWxpemUgc2Vzc2lvbiB3aXRoIHVzZXIgaW5mbyBjYWxsYmFja1xuICAvLyBUaGlzIGhhbmRsZXMgT0F1dGggY2FsbGJhY2sgVVJMIGRldGVjdGlvbiBhbmQgY3JlYXRlcyBsb2dpbiBzdGF0ZSBhdG9taWNhbGx5XG4gIG9hdXRoSW5zdGFuY2UuaW5pdGlhbGl6ZVNlc3Npb24oYXN5bmMgKGRhdGEsIGVycm9yKSA9PiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm5cblxuICAgIGlmIChkYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuU0lHTl9JTikge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwge1xuICAgICAgICAgIGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfSU4sXG4gICAgICAgICAgaW5mbzogeyAuLi5kYXRhLCBlcnJvciB9LFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChkYXRhLnVzZXIpIHtcbiAgICAgICAgLy8g5L2/55So5bey6I635Y+W55qEIHVzZXIg5L+h5oGv5Yib5bu6IExvZ2luU3RhdGXvvIzlpI3nlKggY3JlYXRlTG9naW5TdGF0ZSDpgLvovpFcbiAgICAgICAgLy8g5L2G6Lez6L+HIHJlZnJlc2goKSDpgb/lhY3lho3mrKHor7fmsYIgQVBJIOWvvOiHtOatu+mUgVxuICAgICAgICBhdXRoSW5zdGFuY2UuY3JlYXRlTG9naW5TdGF0ZSh7fSwgeyB1c2VySW5mbzogZGF0YS51c2VyIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuQklORF9JREVOVElUWSkge1xuICAgICAgZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgIGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4geyBhdXRoSW5zdGFuY2UsIG9hdXRoSW5zdGFuY2UgfVxufVxuXG5jb25zdCBjb21wb25lbnQ6IElDbG91ZGJhc2VDb21wb25lbnQgPSB7XG4gIG5hbWU6IENPTVBPTkVOVF9OQU1FLFxuICBuYW1lc3BhY2U6ICdhdXRoJyxcbiAgZW50aXR5KGNvbmZpZz86IFRJbml0QXV0aE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5hdXRoSW5zdGFuY2UgJiYgIWNvbmZpZykge1xuICAgICAgLy8gcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX09QRVJBVElPTiwgJ2V2ZXJ5IGNsb3VkYmFzZSBpbnN0YW5jZSBzaG91bGQgaGFzIG9ubHkgb25lIGF1dGggb2JqZWN0JylcbiAgICAgIHJldHVybiB0aGlzLmF1dGhJbnN0YW5jZVxuICAgIH1cblxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7XG4gICAgICByZWdpb246ICcnLFxuICAgICAgcGVyc2lzdGVuY2U6ICdsb2NhbCcsXG4gICAgICBhcGlQYXRoOiBBVVRIX0FQSV9QUkVGSVgsXG4gICAgfVxuICAgIGNvbnN0IHsgYWRhcHRlciB9ID0gdGhpcy5wbGF0Zm9ybVxuICAgIC8vIOWmguS4jeaYjuehruaMh+WumnBlcnNpc3RlbmNl5YiZ5LyY5YWI5Y+W5ZCE5bmz5Y+wYWRhcHRlcummlumAie+8jOWFtuasoWxvY2FsU3RvcmFnZVxuICAgIGNvbnN0IG5ld1BlcnNpc3RlbmNlID0gY29uZmlnLnBlcnNpc3RlbmNlIHx8IGFkYXB0ZXIucHJpbWFyeVN0b3JhZ2VcbiAgICBpZiAobmV3UGVyc2lzdGVuY2UgJiYgbmV3UGVyc2lzdGVuY2UgIT09IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh7IHBlcnNpc3RlbmNlOiBuZXdQZXJzaXN0ZW5jZSB9KVxuICAgIH1cblxuICAgIGNvbnN0IHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH0gPSBnZW5lcmF0ZUF1dGhJbnN0YW5jZShcbiAgICAgIHtcbiAgICAgICAgd3hDbG91ZDogdGhpcy5jb25maWcud3hDbG91ZCxcbiAgICAgICAgc3RvcmFnZTogdGhpcy5jb25maWcuc3RvcmFnZSxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICBwZXJzaXN0ZW5jZTogdGhpcy5jb25maWcucGVyc2lzdGVuY2UsXG4gICAgICAgIGkxOG46IHRoaXMuY29uZmlnLmkxOG4sXG4gICAgICAgIGFjY2Vzc0tleTogdGhpcy5jb25maWcuYWNjZXNzS2V5LFxuICAgICAgICB1c2VXeENsb3VkOiB0aGlzLmNvbmZpZy51c2VXeENsb3VkLFxuICAgICAgICBzZGtWZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgIGRldGVjdFNlc3Npb25JblVybDogdGhpcy5jb25maWcuYXV0aD8uZGV0ZWN0U2Vzc2lvbkluVXJsLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNsaWVudElkOiB0aGlzLmNvbmZpZy5jbGllbnRJZCxcbiAgICAgICAgYXBpT3JpZ2luOiB0aGlzLnJlcXVlc3QuZ2V0QmFzZUVuZFBvaW50KHRoaXMuY29uZmlnLmVuZFBvaW50TW9kZSB8fCAnQ0xPVURfQVBJJyksXG4gICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgICAgYXBwOiB0aGlzLFxuICAgICAgICBkZWJ1ZzogdGhpcy5jb25maWcuZGVidWcsXG4gICAgICB9LFxuICAgIClcblxuICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IG9hdXRoSW5zdGFuY2VcblxuICAgIHRoaXMuYXV0aEluc3RhbmNlID0gYXV0aEluc3RhbmNlXG5cbiAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgfSxcbn1cblxudHJ5IHtcbiAgLy8g5bCd6K+V6Ieq5Yqo5rOo5YaM6Iez5YWo5bGA5Y+Y6YePY2xvdWRiYXNlXG4gIC8vIOatpOihjOS4uuWPquWcqOa1j+iniOWZqOeOr+Wig+S4i+acieaViFxuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IHsgVXNlckluZm8sIEF1dGggfVxuLyoqXG4gKiBAYXBpIOaJi+WKqOazqOWGjOiHs2Nsb3VkYmFzZSBhcHBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXV0aChhcHA6IFBpY2s8SUNsb3VkYmFzZSwgJ3JlZ2lzdGVyQ29tcG9uZW50Jz4pIHtcbiAgdHJ5IHtcbiAgICBhcHAucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKGUpXG4gIH1cbn1cbiJdfQ==
|
|
1531
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZix3QkFBd0IsRUFDeEIsTUFBTSxFQUNOLHVCQUF1QixFQUN2QixVQUFVLEdBQ1gsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBbUNyQyxJQUFNLGNBQWMsR0FBRyxNQUFNLENBQUE7QUFrQjdCLE1BQU0sQ0FBQyxJQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUE7QUFFbkQsSUFBTSxrQkFBa0IsR0FBRyxVQUFDLE1BQU07SUFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLHdCQUFPLE1BQU0sS0FBRSxTQUFTLEVBQUUsd0JBQXdCLENBQUMsaUJBQWlCLElBQUcsQ0FBQTtBQUNqSCxDQUFDLENBQUE7QUFPRDtJQXVCRSxjQUFZLE9BQXFCO1FBQ3ZCLElBQUEsS0FBSyxHQUFvQixPQUFPLE1BQTNCLEVBQUUsYUFBYSxHQUFLLE9BQU8sY0FBWixDQUFZO1FBQ3hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBRWxDLElBQUksQ0FBQyxXQUFXLEVB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cnQgdHlwZSB7IElDbG91ZGJhc2UsIElDbG91ZGJhc2VDb25maWcsIElDbG91ZGJhc2VQbGF0Zm9ybUluZm8gfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ2FjaGUgfSBmcm9tICdAY2xvdWRiYXNlL3R5cGVzL2NhY2hlJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlUmVxdWVzdCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvcmVxdWVzdCdcbmltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZUF1dGhDb25maWcsIElVc2VyLCBJVXNlckluZm8sIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ29tcG9uZW50IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb21wb25lbnQnXG5pbXBvcnQgdHlwZSB7IEdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlLCBQcm92aWRlclN1YlR5cGUgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoL2Rpc3QvY2pzL2F1dGgvbW9kZWxzJ1xuaW1wb3J0IHR5cGUgeyBhdXRoTW9kZWxzLCBBdXRoT3B0aW9ucywgQ3JlZGVudGlhbHMgfSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHtcbiAgQ2xvdWRiYXNlT0F1dGgsXG4gIEFVVEhfQVBJX1BSRUZJWCxcbiAgTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBFVkVOVFMsXG4gIEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLFxuICBPQVVUSF9UWVBFLFxufSBmcm9tICdAY2xvdWRiYXNlL29hdXRoJ1xuaW1wb3J0IHsgdXNlQXV0aEFkYXB0ZXIgfSBmcm9tICcuL2FkYXB0ZXInXG5pbXBvcnQge1xuICBwcmludFdhcm4sXG4gIHRocm93RXJyb3IsXG4gIEVSUk9SUyxcbiAgQ09NTVVOSVRZX1NJVEVfVVJMLFxuICBjYXRjaEVycm9yc0RlY29yYXRvcixcbiAgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyLFxuICBDbG91ZGJhc2VDYWNoZSxcbiAgYWRhcHRlckZvcld4TXAsXG4gIHVzZURlZmF1bHRBZGFwdGVyLFxufSBmcm9tICcuL3V0aWxpdGllcydcbmltcG9ydCB7IFNiYXNlQXBpIH0gZnJvbSAnLi9zYmFzZUFwaSdcblxuZXhwb3J0IHR5cGUge1xuICBTaWduSW5SZXMsXG4gIEdldFVzZXJSZXMsXG4gIENvbW1vblJlcyxcbiAgU2lnbkluV2l0aE90cFJlcyxcbiAgU2lnbkluT0F1dGhSZXMsXG4gIEdldENsYWltc1JlcyxcbiAgUmVzZXRQYXNzd29yZEZvckVtYWlsUmVzLFxuICBHZXRVc2VySWRlbnRpdGllc1JlcyxcbiAgTGlua0lkZW50aXR5UmVzLFxuICBSZWF1dGhlbnRpY2F0ZVJlcyxcbiAgUmVzZW5kUmVzLFxuICBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcyxcbiAgT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayxcbiAgU2lnbkluV2l0aFBhc3N3b3JkUmVxLFxuICBTaWduSW5XaXRoSWRUb2tlblJlcSxcbiAgU2lnbkluV2l0aE9BdXRoUmVxLFxuICBWZXJpZnlPQXV0aFJlcSxcbiAgVmVyaWZ5T3RwUmVxLFxuICBMaW5rSWRlbnRpdHlSZXEsXG4gIFVubGlua0lkZW50aXR5UmVxLFxuICBVcGRhdGVVc2VyUmVxLFxuICBTaWduSW5XaXRoT3RwUmVxLFxuICBSZXNldFBhc3N3b3JkRm9yT2xkUmVxLFxuICBSZXNlbmRSZXEsXG4gIFNldFNlc3Npb25SZXEsXG4gIERlbGV0ZU1lUmVxLFxuICBTaWduVXBSZXMsXG59IGZyb20gJy4vdHlwZSdcblxuZGVjbGFyZSBjb25zdCBjbG91ZGJhc2U6IElDbG91ZGJhc2VcbmRlY2xhcmUgY29uc3Qgd3g6IGFueVxuXG5jb25zdCBDT01QT05FTlRfTkFNRSA9ICdhdXRoJ1xuXG5pbnRlcmZhY2UgVXNlckluZm8ge1xuICB1aWQ/OiBzdHJpbmdcbiAgZ2VuZGVyPzogc3RyaW5nXG4gIHBpY3R1cmU/OiBzdHJpbmdcbiAgZW1haWw/OiBzdHJpbmdcbiAgZW1haWxfdmVyaWZpZWQ/OiBib29sZWFuXG4gIHBob25lX251bWJlcj86IHN0cmluZ1xuICB1c2VybmFtZT86IHN0cmluZ1xuICBuYW1lPzogc3RyaW5nXG4gIGJpcnRoZGF0ZT86IHN0cmluZ1xuICB6b25laW5mbz86IHN0cmluZ1xuICBsb2NhbGU/OiBzdHJpbmdcbiAgc3ViPzogc3RyaW5nXG4gIGNyZWF0ZWRfZnJvbT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgZXZlbnRCdXMgPSBuZXcgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyKClcblxuY29uc3Qgb25DcmVkZW50aWFsc0Vycm9yID0gKHBhcmFtcykgPT4ge1xuICBldmVudEJ1cy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IC4uLnBhcmFtcywgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IgfSlcbn1cblxuaW50ZXJmYWNlIElVc2VyT3B0aW9ucyB7XG4gIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbn1cblxuZXhwb3J0IGNsYXNzIFVzZXIgaW1wbGVtZW50cyBJVXNlciB7XG4gIHB1YmxpYyB1aWQ/OiBzdHJpbmdcbiAgcHVibGljIGdlbmRlcj86IHN0cmluZ1xuICBwdWJsaWMgcGljdHVyZT86IHN0cmluZ1xuICBwdWJsaWMgZW1haWw/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsVmVyaWZpZWQ/OiBib29sZWFuXG4gIHB1YmxpYyBwaG9uZU51bWJlcj86IHN0cmluZ1xuICBwdWJsaWMgdXNlcm5hbWU/OiBzdHJpbmcgLy8g55So5oi35ZCN56ew77yM6ZW/5bqmIDUtMjQg5L2N77yM5pSv5oyB5a2X56ym5Lit6Iux5paH44CB5pWw5a2X44CB54m55q6K5a2X56ym77yI5LuF5pSv5oyBXy3vvInvvIzkuI3mlK/mjIHkuK3mlodcbiAgcHVibGljIG5hbWU/OiBzdHJpbmdcbiAgcHVibGljIHByb3ZpZGVycz86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIHByb3ZpZGVyVXNlcklkPzogc3RyaW5nXG4gICAgbmFtZT86IHN0cmluZ1xuICB9W11cbiAgcHVibGljIGJpcnRoZGF0ZT86IHN0cmluZ1xuICBwdWJsaWMgem9uZWluZm8/OiBzdHJpbmdcbiAgcHVibGljIGxvY2FsZT86IHN0cmluZ1xuICBwdWJsaWMgc3ViPzogc3RyaW5nXG4gIHB1YmxpYyBjcmVhdGVkRnJvbT86IHN0cmluZ1xuXG4gIHByaXZhdGUgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICBwcml2YXRlIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoIC8vIENsb3VkYmFzZU9BdXRoIOexu+Wei1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElVc2VyT3B0aW9ucykge1xuICAgIGNvbnN0IHsgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICB0aGlzLmNhY2hlID0gY2FjaGVcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBvYXV0aEluc3RhbmNlXG5cbiAgICB0aGlzLnNldFVzZXJJbmZvKClcbiAgfVxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxJbmZvKCkge1xuICAgIHRoaXMudWlkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1aWQnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmdlbmRlciA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZ2VuZGVyJykgYXMgc3RyaW5nXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnZW1haWwnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3VzZXJuYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5uYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCduYW1lJykgYXMgc3RyaW5nXG4gICAgdGhpcy5iaXJ0aGRhdGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2JpcnRoZGF0ZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuem9uZWluZm8gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3pvbmVpbmZvJykgYXMgc3RyaW5nXG4gICAgdGhpcy5sb2NhbGUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2xvY2FsZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuc3ViID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdzdWInKSBhcyBzdHJpbmdcbiAgICB0aGlzLmNyZWF0ZWRGcm9tID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdjcmVhdGVkX2Zyb20nKSBhcyBzdHJpbmdcbiAgICB0aGlzLnByb3ZpZGVycyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncHJvdmlkZXJzJykgYXMgYW55XG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lvILmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mb0FzeW5jKCkge1xuICAgIHRoaXMudWlkID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VpZCcpXG4gICAgdGhpcy5nZW5kZXIgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygnZ2VuZGVyJylcbiAgICB0aGlzLnBpY3R1cmUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3BpY3R1cmUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmVtYWlsID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2VtYWlsJylcbiAgICB0aGlzLmVtYWlsVmVyaWZpZWQgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsX3ZlcmlmaWVkJykgYXMgYm9vbGVhblxuICAgIHRoaXMucGhvbmVOdW1iZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Bob25lX251bWJlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMudXNlcm5hbWUgPSBhd2FpdCB0aGlzLmdldExvY2FsVXNlckluZm9Bc3luYygndXNlcm5hbWUnKVxuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOeUqOaIt+S/oeaBr1xuICAgKiBAcGFyYW0gdXNlckluZm9cbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOeUqOaIt+S/oeaBr+S4reaYr+WQpuWMheWQq+mdnuazleWAvCcsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgdXBkYXRlKHVzZXJJbmZvOiBhdXRoTW9kZWxzLlVzZXJQcm9maWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gY29uc3QgeyBuYW1lLCBnZW5kZXIsIGF2YXRhclVybCwgcHJvdmluY2UsIGNvdW50cnksIGNpdHkgfSA9IHVzZXJJbmZvXG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRVc2VyUHJvZmlsZSh7IC4uLnVzZXJJbmZvIH0pXG5cbiAgICB0aGlzLnNldExvY2FsVXNlckluZm8obmV3VXNlckluZm8pXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51cGRhdGVVc2VyQmFzaWNJbmZvKHsgLi4ucGFyYW1zIH0pXG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKClcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDlr4bnoIFcbiAgICogQHBhcmFtIG5ld1Bhc3N3b3JkXG4gICAqIEBwYXJhbSBvbGRQYXNzd29yZFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+abtOaWsOWvhueggeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnVwZGF0ZVBhc3N3b3JkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDMgLSDmlrDlr4bnoIHkuK3mmK/lkKbljIXlkKvpnZ7ms5XlrZfnrKYnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIHVwZGF0ZVBhc3N3b3JkKG5ld1Bhc3N3b3JkOiBzdHJpbmcsIG9sZFBhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlUGFzc3dvcmRCeU9sZCh7XG4gICAgICBvbGRfcGFzc3dvcmQ6IG9sZFBhc3N3b3JkLFxuICAgICAgbmV3X3Bhc3N3b3JkOiBuZXdQYXNzd29yZCxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOeUqOaIt+WQjVxuICAgKiBAcGFyYW0gdXNlcm5hbWVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDnlKjmiLflkI3lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVVc2VybmFtZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG55So5oi35ZCN5a+G56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB1c2VybmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAndXNlcm5hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlKHtcbiAgICAgIHVzZXJuYW1lLFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICog5Yi35paw5pys5Zyw55So5oi35L+h5oGv44CC5b2T55So5oi35Zyo5YW25LuW5a6i5oi356uv5pu05paw55So5oi35L+h5oGv5LmL5ZCO77yM5Y+v5Lul6LCD55So5q2k5o6l5Y+j5ZCM5q2l5pu05paw5LmL5ZCO55qE5L+h5oGv44CCXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5Yi35paw5pys5Zyw55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIucmVmcmVzaCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgcmVmcmVzaChwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmc7IHF1ZXJ5PzogYW55IH0pOiBQcm9taXNlPElVc2VySW5mbz4ge1xuICAgIGNvbnN0IG5ld1VzZXJJbmZvID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckluZm8ocGFyYW1zKVxuICAgIGlmICgobmV3VXNlckluZm8gYXMgYW55KS5jb2RlID09PSAnSU5WQUxJRF9BQ0NFU1NfVE9LRU4nKSB7XG4gICAgICB0aGlzLnNldExvY2FsVXNlckluZm8oe30pXG4gICAgICB0aHJvdyBuZXdVc2VySW5mb1xuICAgIH1cbiAgICB0aGlzLnNldExvY2FsVXNlckluZm8obmV3VXNlckluZm8pXG4gICAgcmV0dXJuIG5ld1VzZXJJbmZvXG4gIH1cblxuICBwdWJsaWMgZ2V0TG9jYWxVc2VySW5mbyhrZXk/OiBzdHJpbmcpOiBzdHJpbmcgfCBib29sZWFuIHwgUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgY29uc3QgdXNlckluZm8gPSB0aGlzLmNhY2hlLmdldFN0b3JlKHVzZXJJbmZvS2V5KVxuXG4gICAgaWYgKCFrZXkpIHJldHVybiB1c2VySW5mbyB8fCB7fVxuXG4gICAgcmV0dXJuIHVzZXJJbmZvW2tleV1cbiAgfVxuXG4gIHB1YmxpYyBzZXRMb2NhbFVzZXJJbmZvKHVzZXJJbmZvOiBhbnkpIHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICB0aGlzLmNhY2hlLnNldFN0b3JlKHVzZXJJbmZvS2V5LCB1c2VySW5mbylcbiAgICB0aGlzLnNldFVzZXJJbmZvKClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TG9jYWxVc2VySW5mb0FzeW5jKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuY2FjaGUuZ2V0U3RvcmVBc3luYyh1c2VySW5mb0tleSlcbiAgICByZXR1cm4gdXNlckluZm9ba2V5XVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRVc2VySW5mbygpIHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG4gICAgO1tcbiAgICAgICd1aWQnLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICduYW1lJyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ3BpY3R1cmUnLFxuICAgICAgJ2VtYWlsX3ZlcmlmaWVkJyxcbiAgICAgICdwaG9uZV9udW1iZXInLFxuICAgICAgJ2JpcnRoZGF0ZScsXG4gICAgICAnem9uZWluZm8nLFxuICAgICAgJ2xvY2FsZScsXG4gICAgICAnc3ViJyxcbiAgICAgICdjcmVhdGVkX2Zyb20nLFxuICAgICAgJ3Byb3ZpZGVycycsXG4gICAgICAndXNlcm5hbWUnLFxuICAgICAgJ2NyZWF0ZWRfYXQnLFxuICAgIF0uZm9yRWFjaCgoaW5mb0tleSkgPT4ge1xuICAgICAgdGhpc1tpbmZvS2V5XSA9IHVzZXJJbmZvW2luZm9LZXldXG4gICAgfSlcbiAgfVxufVxuaW50ZXJmYWNlIElMb2dpblN0YXRlT3B0aW9ucyBleHRlbmRzIElVc2VyT3B0aW9ucyB7XG4gIGVudklkOiBzdHJpbmdcbn1cbmV4cG9ydCBjbGFzcyBMb2dpblN0YXRlIGltcGxlbWVudHMgSUxvZ2luU3RhdGUge1xuICBwdWJsaWMgdXNlcjogVXNlclxuICBwdWJsaWMgb2F1dGhMb2dpblN0YXRlOiBhbnlcblxuICBwcml2YXRlIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG4gIHByaXZhdGUgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IElMb2dpblN0YXRlT3B0aW9ucykge1xuICAgIGNvbnN0IHsgZW52SWQsIGNhY2hlLCBvYXV0aEluc3RhbmNlIH0gPSBvcHRpb25zXG4gICAgaWYgKCFlbnZJZCkge1xuICAgICAgdGhyb3dFcnJvcihFUlJPUlMuSU5WQUxJRF9QQVJBTVMsICdlbnZJZCBpcyBub3QgZGVmaW5lZCcpXG4gICAgfVxuICAgIHRoaXMuY2FjaGUgPSBjYWNoZVxuICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IG9hdXRoSW5zdGFuY2VcblxuICAgIHRoaXMudXNlciA9IG5ldyBVc2VyKHtcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgb2F1dGhJbnN0YW5jZSxcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIGNoZWNrTG9jYWxTdGF0ZSgpIHtcbiAgICB0aGlzLm9hdXRoTG9naW5TdGF0ZSA9IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5oYXNMb2dpblN0YXRlU3luYygpXG4gICAgdGhpcy51c2VyLmNoZWNrTG9jYWxJbmZvKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsU3RhdGVBc3luYygpIHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2U/LmF1dGhBcGkuZ2V0TG9naW5TdGF0ZSgpXG4gICAgYXdhaXQgdGhpcy51c2VyLmNoZWNrTG9jYWxJbmZvQXN5bmMoKVxuICB9XG59XG5cbmNsYXNzIEF1dGggZXh0ZW5kcyBTYmFzZUFwaSB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogSUNsb3VkYmFzZUF1dGhDb25maWcgJiB7XG4gICAgY2FjaGU6IElDbG91ZGJhc2VDYWNoZVxuICAgIHJlcXVlc3Q/OiBJQ2xvdWRiYXNlUmVxdWVzdFxuICAgIHJ1bnRpbWU/OiBzdHJpbmdcbiAgfSwpIHtcbiAgICBzdXBlcihjb25maWcpXG4gICAgdGhpcy5zZXRBY2Nlc3NLZXkoKVxuICB9XG5cbiAgLyoqXG4gICAqIOe7keWumuaJi+acuuWPt1xuICAgKiBAcGFyYW0gcGhvbmVOdW1iZXJcbiAgICogQHBhcmFtIHBob25lQ29kZVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumuaJi+acuuWPt+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZFBob25lTnVtYmVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobnn63kv6Hpqozor4HnoIHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGJpbmRQaG9uZU51bWJlcihwYXJhbXM6IGF1dGhNb2RlbHMuQmluZFBob25lUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5lZGl0Q29udGFjdChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6Kej57uR5LiJ5pa557uR5a6aXG4gICAqIEBwYXJhbSBsb2dpblR5cGVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfop6PpmaTkuInmlrnnu5HlrprlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLnVuYmluZFByb3ZpZGVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3otKbmiLfmmK/lkKblt7Lnu4/kuI7mraTnmbvlvZXmlrnlvI/op6Pnu5EnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVuYmluZFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5VbmJpbmRQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudW5iaW5kUHJvdmlkZXIocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOabtOaWsOmCrueuseWcsOWdgFxuICAgKiBAcGFyYW0gZW1haWxcbiAgICogQHBhcmFtIHN1ZG9fdG9rZW5cbiAgICogQHBhcmFtIHZlcmlmaWNhdGlvbl90b2tlblxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumumCrueuseWcsOWdgOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZEVtYWlsKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobpgq7nrrHlr4bnoIHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGJpbmRFbWFpbChwYXJhbXM6IGF1dGhNb2RlbHMuQmluZEVtYWlsUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5lZGl0Q29udGFjdChwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogdmVyaWZ5XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5WZXJpZnlSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5WZXJpZnlSZXNwb25zZT59XG4gICAqIEBtZW1iZXJvZiBVc2VyXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6aqM6K+B56CB6aqM6K+B5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS52ZXJpZnkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6huaJi+acuumqjOivgeeggS/pgq7nrrHnmbvlvZUnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHZlcmlmeShwYXJhbXM6IGF1dGhNb2RlbHMuVmVyaWZ5UmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5WZXJpZnlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPlumqjOivgeeggVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgVXNlclxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlumqjOivgeeggeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0VmVyaWZpY2F0aW9uKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobmiYvmnLrpqozor4HnoIEv6YKu566x55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRWZXJpZmljYXRpb24oXG4gICAgcGFyYW1zOiBhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlcXVlc3QsXG4gICAgb3B0aW9ucz86IHsgd2l0aENhcHRjaGE6IGJvb2xlYW4gfSxcbiAgKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihwYXJhbXMsIG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeWQjOatpVxuICAgKi9cbiAgZ2V0IGN1cnJlbnRVc2VyKCkge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0Q3VycmVudFVzZXIgaW5zdGVhZCcsXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gdGhpcy5oYXNMb2dpblN0YXRlKClcblxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICByZXR1cm4gbG9naW5TdGF0ZS51c2VyIHx8IG51bGxcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRDdXJyZW50VXNlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0Q3VycmVudFVzZXIoKTogUHJvbWlzZTwoYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj4pIHwgbnVsbD4ge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBjb25zdCB1c2VySW5mbyA9IGxvZ2luU3RhdGUudXNlci5nZXRMb2NhbFVzZXJJbmZvKCkgYXMgYXV0aE1vZGVscy5Vc2VySW5mb1xuICAgICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLmNoZWNrTG9jYWxJbmZvQXN5bmMoKVxuICAgICAgcmV0dXJuIHsgLi4ubG9naW5TdGF0ZS51c2VyLCAuLi51c2VySW5mbyB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyAvKipcbiAgLy8gICog5Yy/5ZCN55m75b2VXG4gIC8vICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAvLyAgKiBAbWVtYmVyb2YgQXV0aFxuICAvLyAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+WMv+WQjeeZu+W9leWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWMv+WQjeeZu+W9lScsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5Bbm9ueW1vdXNseSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkoZGF0YToge1xuICAvLyAgIHByb3ZpZGVyX3Rva2VuPzogc3RyaW5nXG4gIC8vIH0gPSB7fSwpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgLy8gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluQW5vbnltb3VzbHkoZGF0YSlcbiAgLy8gcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICog5Yy/5ZCN55m75b2VXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j+WMv+WQjeeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWMv+WQjeeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5Bbm9ueW1vdXNseUluV3goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5SW5XeCh7XG4gICAgdXNlV3hDbG91ZCxcbiAgfToge1xuICAgIHVzZVd4Q2xvdWQ/OiBib29sZWFuXG4gIH0gPSB7fSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBHcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLFxuICAgICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KT8uZXJyb3JfY29kZSB8fCAhcmVzdWx0LnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0XG4gICAgICAgIH1cblxuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KFxuICAgICAgICAgIHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBjcmVkZW50aWFsc1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSh1bmRlZmluZWQsIHsgYXN5bmNSZWZyZXNoVXNlcjogdHJ1ZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+e7keWumk9wZW5JRFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo/nu5HlrppPcGVuSUTlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo9vcGVuSWTpnZnpu5jnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuYmluZE9wZW5JZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZE9wZW5JZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLFxuICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgocmVzdWx0IGFzIGFueSk/LmVycm9yX2NvZGUgfHwgIXJlc3VsdC5wcm92aWRlcl90b2tlbikge1xuICAgICAgICAgIHRocm93IHJlc3VsdFxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuYmluZFdpdGhQcm92aWRlcih7IHByb3ZpZGVyX3Rva2VuOiByZXN1bHQucHJvdmlkZXJfdG9rZW4gfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd3gubG9naW4oe1xuICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IG1haW5GdW5jKHJlcy5jb2RlKVxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiDlsI/nqIvluo9vcGVuSWTpnZnpu5jnmbvlvZVcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn5bCP56iL5bqPb3Blbklk6Z2Z6buY55m75b2V5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqPb3Blbklk6Z2Z6buY55m75b2VJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhPcGVuSWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbldpdGhPcGVuSWQoeyB1c2VXeENsb3VkID0gdHJ1ZSB9ID0ge30pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgLy8gICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAvLyAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAvLyAgIH1cbiAgLy8gICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gIC8vICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAvLyAgICAgbGV0IHJlc3VsdDogR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgLy8gICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAvLyAgICAgdHJ5IHtcbiAgLy8gICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKFxuICAvLyAgICAgICAgIHtcbiAgLy8gICAgICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8/LmFwcElkLFxuICAvLyAgICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgLy8gICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAvLyAgICAgICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdvcGVuX2lkJyxcbiAgLy8gICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gIC8vICAgICAgICAgICB9LFxuICAvLyAgICAgICAgIH0sXG4gIC8vICAgICAgICAgdXNlV3hDbG91ZCxcbiAgLy8gICAgICAgKVxuXG4gIC8vICAgICAgIGlmICgocmVzdWx0IGFzIGFueSk/LmVycm9yX2NvZGUgfHwgIXJlc3VsdC5wcm92aWRlcl90b2tlbikge1xuICAvLyAgICAgICAgIHRocm93IHJlc3VsdFxuICAvLyAgICAgICB9XG5cbiAgLy8gICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoXG4gIC8vICAgICAgICAgeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0sXG4gIC8vICAgICAgICAgdXNlV3hDbG91ZCxcbiAgLy8gICAgICAgKVxuXG4gIC8vICAgICAgIGlmICgoY3JlZGVudGlhbHMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAvLyAgICAgICAgIHRocm93IGNyZWRlbnRpYWxzXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gIC8vICAgICAgIHRocm93IGVycm9yXG4gIC8vICAgICB9XG4gIC8vICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzIGFzIENyZWRlbnRpYWxzKVxuICAvLyAgIH1cblxuICAvLyAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgLy8gICAgIHd4LmxvZ2luKHtcbiAgLy8gICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAvLyAgICAgICAgIHRyeSB7XG4gIC8vICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgLy8gICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgLy8gICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAvLyAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgfSxcbiAgLy8gICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gIC8vICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gIC8vICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gIC8vICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAvLyAgICAgICB9LFxuICAvLyAgICAgfSlcbiAgLy8gICB9KVxuXG4gIC8vICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICog5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo91bmlvbklk6Z2Z6buY55m75b2V5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoVW5pb25JZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFVuaW9uSWQoKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSB3eEluZm8/LmFwcElkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IHJlcy5jb2RlLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2lkOiBwcm92aWRlcklkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAndW5pb25faWQnLFxuICAgICAgICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBjb25zdCB7IHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuIH0gPSByZXN1bHRcblxuICAgICAgICAgICAgICBpZiAoIXByb3ZpZGVyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXJJZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHNpZ25JblJlcylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP5omL5py65Y+35o6I5p2D55m75b2V77yM55uu5YmN5Y+q5pSv5oyB5YWo5omY566h5omL5py65Y+35o6I5p2D55m75b2VXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+Wwj+eoi+W6j+aJi+acuuWPt+aOiOadg+eZu+W9leWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j+aJi+acuuWPt+aOiOadg+eZu+W9lScsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoUGhvbmVBdXRoKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUGhvbmVBdXRoKHsgcGhvbmVDb2RlID0gJycgfSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAvLyAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gIC8vICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gIC8vICAgY29uc3QgcHJvdmlkZXJJbmZvID0ge1xuICAvLyAgICAgcHJvdmlkZXJfcGFyYW1zOiB7IHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJyB9LFxuICAvLyAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mby5hcHBJZCxcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHd4LmxvZ2luKClcbiAgLy8gICA7KHByb3ZpZGVySW5mbyBhcyBhbnkpLnByb3ZpZGVyX2NvZGUgPSBjb2RlXG5cbiAgLy8gICB0cnkge1xuICAvLyAgICAgbGV0IHByb3ZpZGVyVG9rZW4gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocHJvdmlkZXJJbmZvKVxuICAvLyAgICAgaWYgKHByb3ZpZGVyVG9rZW4uZXJyb3JfY29kZSkge1xuICAvLyAgICAgICB0aHJvdyBwcm92aWRlclRva2VuXG4gIC8vICAgICB9XG5cbiAgLy8gICAgIHByb3ZpZGVyVG9rZW4gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5wYXRjaFByb3ZpZGVyVG9rZW4oe1xuICAvLyAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgLy8gICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mby5hcHBJZCxcbiAgLy8gICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gIC8vICAgICAgICAgY29kZTogcGhvbmVDb2RlLFxuICAvLyAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJyxcbiAgLy8gICAgICAgfSxcbiAgLy8gICAgIH0pXG4gIC8vICAgICBpZiAocHJvdmlkZXJUb2tlbi5lcnJvcl9jb2RlKSB7XG4gIC8vICAgICAgIHRocm93IHByb3ZpZGVyVG9rZW5cbiAgLy8gICAgIH1cblxuICAvLyAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgLy8gICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4ucHJvdmlkZXJfdG9rZW4sXG4gIC8vICAgICB9KVxuXG4gIC8vICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gIC8vICAgICAgIHRocm93IHNpZ25JblJlc1xuICAvLyAgICAgfVxuICAvLyAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gIC8vICAgICB0aHJvdyBlcnJvclxuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+efreS/oemqjOivgeeggeeZu+mZhlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnn63kv6Hpqozor4HnoIHnmbvpmYYnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo/nn63kv6Hpqozor4HnoIHnmbvpmYYnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aFNtcygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFNtcyh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgcGhvbmVOdW0gPSAnJyxcbiAgICBiaW5kSW5mbyA9IHVuZGVmaW5lZCxcbiAgfSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgICAgICB2ZXJpZmljYXRpb25JbmZvLFxuICAgICAgICB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgICBiaW5kSW5mbyxcbiAgICAgICAgdXNlcm5hbWU6IHBob25lTnVtLFxuICAgICAgICBsb2dpblR5cGU6ICdzbXMnLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6YKu566x6aqM6K+B56CB55m76ZmGXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+mCrueusemqjOivgeeggeeZu+mZhicsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6humCrueuseeZu+mZhicsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoRW1haWwoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhFbWFpbCh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gICAgZW1haWwgPSAnJyxcbiAgfSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgICAgICB2ZXJpZmljYXRpb25JbmZvLFxuICAgICAgICB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgICBiaW5kSW5mbyxcbiAgICAgICAgdXNlcm5hbWU6IGVtYWlsLFxuICAgICAgICBsb2dpblR5cGU6ICdlbWFpbCcsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDorr7nva7ojrflj5boh6rlrprkuYnnmbvlvZUgdGlja2V0IOWHveaVsFxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZufSBnZXRUaWNrRm5cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBzZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm46IGF1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZuKTogdm9pZCB7XG4gICAgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+iHquWumuS5ieeZu+W9leWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huiHquWumuS5ieeZu+W9lScsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgLy8gICAgICcgIDMgLSB0aWNrZXQg5piv5ZCm5b2S5bGe5LqO5b2T5YmN546v5aKDJyxcbiAgLy8gICAgICcgIDQgLSDliJvlu7ogdGlja2V0IOeahOiHquWumuS5ieeZu+W9leengemSpeaYr+WQpui/h+acnycsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgLy8gICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KClcbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnbkluUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IGF1dGhNb2RlbHMuU2lnbkluUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZShwYXJhbXMpXG4gIH1cblxuICAvLyAvKipcbiAgLy8gICpcbiAgLy8gICogQHBhcmFtIHthdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3R9IHBhcmFtc1xuICAvLyAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgLy8gICogQG1lbWJlcm9mIEF1dGhcbiAgLy8gICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfms6jlhozlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobmjIflrprnmbvlvZXmlrnlvI8nLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnblVwKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduVXAocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xuICAvLyAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcChwYXJhbXMpXG4gIC8vICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICog6K6+572u5a+G56CBXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TZXRQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQYXNzd29yZChwYXJhbXM6IGF1dGhNb2RlbHMuU2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmo4DmtYvnlKjmiLflkI3mmK/lkKblt7Lnu4/ljaDnlKhcbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35piv5ZCm6KKr5Y2g55So5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5pc1VzZXJuYW1lUmVnaXN0ZXJlZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgaXNVc2VybmFtZVJlZ2lzdGVyZWQodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgZXhpc3QgfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmNoZWNrSWZVc2VyRXhpc3QoeyB1c2VybmFtZSB9KVxuICAgIHJldHVybiBleGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIOeZu+WHulxuICAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+eUqOaIt+eZu+WHuuWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuc2lnbk91dCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICAnICAyIC0g5b2T5YmN55So5oi35piv5ZCm5Li65Yy/5ZCN55m75b2V77yI5Yy/5ZCN55m75b2V5LiN5pSv5oyBc2lnbk91dO+8iScsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnbk91dChwYXJhbXM/OiBhdXRoTW9kZWxzLlNpZ25vdXRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkIHwgYXV0aE1vZGVscy5TaWdub3V0UmVwb25zZT4ge1xuICAvLyAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAvLyAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25PdXQocGFyYW1zKVxuICAvLyAgIGF3YWl0IHRoaXMuY2FjaGUucmVtb3ZlU3RvcmVBc3luYyh1c2VySW5mb0tleSlcblxuICAvLyAgIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTl9PVVQgfSlcblxuICAvLyAgIGV2ZW50QnVzLmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX09VVCB9KVxuICAvLyAgIHJldHVybiByZXNcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnmbvlvZXmgIEt5ZCM5q2lXG4gICAqL1xuICBwdWJsaWMgaGFzTG9naW5TdGF0ZSgpOiBMb2dpblN0YXRlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuY2FjaGUubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgLy8gYXN5bmMgc3RvcmFnZeeahOW5s+WPsOiwg+eUqOatpEFQSeaPkOekulxuICAgICAgcHJpbnRXYXJuKFxuICAgICAgICBFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sXG4gICAgICAgICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBnZXRMb2dpblN0YXRlIGluc3RlZWQnLFxuICAgICAgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICBpZiAob2F1dGhMb2dpblN0YXRlKSB7XG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBsb2dpblN0YXRlXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeW8guatpVxuICAgKiDmraRBUEnkuLrlhbzlrrnlvILmraVzdG9yYWdl55qE5bmz5Y+wXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W5pys5Zyw55m75b2V5oCB5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRMb2dpblN0YXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRMb2dpblN0YXRlKCkge1xuICAgIGxldCBvYXV0aExvZ2luU3RhdGUgPSBudWxsXG5cbiAgICB0cnkge1xuICAgICAgb2F1dGhMb2dpblN0YXRlID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0TG9naW5TdGF0ZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgaWYgKG9hdXRoTG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZVxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5piv5ZCm5bey55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLmdldFVzZXJJbmZvKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VySW5mbygpOiBQcm9taXNlPChhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXIoKVxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluW+ruaQreaPkuS7tueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRXZWRhVXNlckluZm8oKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFdlZGFVc2VySW5mbygpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRXZWRhVXNlckluZm8oKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KSB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpXG4gICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgIGF3YWl0IChsb2dpblN0YXRlLnVzZXIgYXMgVXNlcikudXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgLyoqXG4gICAqIGdldEF1dGhIZWFkZXIg5YW85a655aSE55CGXG4gICAqIOi/lOWbnuepuuWvueixoVxuICAgKi9cbiAgcHVibGljIGdldEF1dGhIZWFkZXIoKToge30ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0F1dGguZ2V0QXV0aEhlYWRlciBBUEkg5bey5bqf5byDJylcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIC8qKlxuICAgKiDkuLrlt7LmnInotKbmiLfnu5HnrKzkuInmlrnotKbmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn57uR5a6a56ys5LiJ5pa555m75b2V5pa55byP5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5iaW5kV2l0aFByb3ZpZGVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDmraTotKbmiLfmmK/lkKblt7Lnu4/nu5HlrprmraTnrKzkuInmlrknLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGJpbmRXaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRXaXRoUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOafpeivoueUqOaIt1xuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3R9IGFwcGVuZGVkX3BhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJQcm9maWxlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBxdWVyeVVzZXIocXVlcnlPYmo6IGF1dGhNb2RlbHMuUXVlcnlVc2VyUHJvZmlsZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuUXVlcnlVc2VyUHJvZmlsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnF1ZXJ5VXNlclByb2ZpbGUocXVlcnlPYmopXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKSB7XG4gICAgY29uc3Qgb2F1dGhBY2Nlc3NUb2tlblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuZ2V0QWNjZXNzVG9rZW4oKVxuICAgIHJldHVybiB7XG4gICAgICBhY2Nlc3NUb2tlbjogb2F1dGhBY2Nlc3NUb2tlblJlcyxcbiAgICAgIGVudjogdGhpcy5jb25maWcuZW52LFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGF0Y2hQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5QYXRjaFByb3ZpZGVyVG9rZW5SZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5QYXRjaFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5wYXRjaFByb3ZpZGVyVG9rZW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhQcm92aWRlcihwYXJhbXM6IGF1dGhNb2RlbHMuU2lnbkluV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFdlY2hhdChwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFdlY2hhdChwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuR3JhbnRUb2tlblJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFRva2VuKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtczogYXV0aE1vZGVscy5HZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdlblByb3ZpZGVyUmVkaXJlY3RVcmkocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlc2V0UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLlJlc2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlc2V0UGFzc3dvcmQocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRldmljZUF1dGhvcml6ZShwYXJhbXM6IGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5EZXZpY2VBdXRob3JpemVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZXZpY2VBdXRob3JpemUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHN1ZG8ocGFyYW1zOiBhdXRoTW9kZWxzLlN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlN1ZG9SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zdWRvKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVNZShwYXJhbXM6IGF1dGhNb2RlbHMuV2l0aFN1ZG9SZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJQcm9maWxlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmRlbGV0ZU1lKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlcnMoKTogUHJvbWlzZTxhdXRoTW9kZWxzLlByb3ZpZGVyc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFByb3ZpZGVycygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5TY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpblNjb3BlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2dpbkdyb3VwcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmxvZ2luR3JvdXBzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkxvZ2luU3RhdGVDaGFuZ2VkKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgIGV2ZW50QnVzLm9uKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICAvLyBnZXRMb2dpblN0YXRl5Lya6YeN5aSN6Kem5Y+RZ2V0Q3JlZGVudGlhbHPvvIzlr7zoh7Tmrbvlvqrnjq/vvIzmiYDku6VnZXRDcmVkZW50aWFsc+WHuumUmeS4jeWGjeWHuuWPkWdldExvZ2luU3RhdGVcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSAgICAgICAgcGFyYW1zPy5kYXRhPy5ldmVudFR5cGUgIT09IExPR0lOX1NUQVRFX0NIQU5HRURfVFlQRS5DUkVERU5USUFMU19FUlJPUiA/IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpIDoge31cbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgeyAuLi5wYXJhbXMsIC4uLmxvZ2luU3RhdGUgfSlcbiAgICB9KVxuICAgIC8vIOeri+WIu+aJp+ihjOS4gOasoeWbnuiwg1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgbG9naW5TdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiDlvLrliLbliLfmlrB0b2tlblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuRm9yY2UocGFyYW1zOiB7IHZlcnNpb24/OiBzdHJpbmcgfSk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucmVmcmVzaFRva2VuRm9yY2UocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPlui6q+S7veS/oeaBr1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0Q3JlZGVudGlhbHMoKVxuICB9XG4gIC8qKlxuICAgKiDlhpnlhaXouqvku73kv6Hmga9cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpIHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzKVxuICB9XG5cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlui6q+S7vea6kOexu+WeiycsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0UHJvdmlkZXJTdWJUeXBlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRQcm92aWRlclN1YlR5cGUoKTogUHJvbWlzZTxQcm92aWRlclN1YlR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJTdWJUeXBlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YShwYXJhbXM6IHsgc3RhdGU6IHN0cmluZzsgcmVkaXJlY3RfdXJpPzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtczogeyB0b2tlbjogc3RyaW5nOyBrZXk6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbVFyQ29kZShwYXJhbXM6IGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldE1pbmlQcm9ncmFtQ29kZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1cyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zOiBhdXRoTW9kZWxzLkdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRVc2VyQmVoYXZpb3JMb2dSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBzbXMvZW1haWwg6aqM6K+B56CB55m75b2VL+azqOWGjO+8jOmAu+i+keS4gOiHtOaUtuaVm1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgdXNlcm5hbWU6IHJhd1VzZXJuYW1lID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gICAgbG9naW5UeXBlID0gJycsXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgLy8gMS4g6aqM6K+B6aqM6K+B56CBXG4gICAgICBjb25zdCB2ZXJpZnlSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkoe1xuICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICgodmVyaWZ5UmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgdmVyaWZ5UmVzXG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uX3Rva2VuIH0gPSB2ZXJpZnlSZXNcblxuICAgICAgLy8g5omL5py655m75b2V5Y+C5pWwXG4gICAgICBsZXQgdXNlcm5hbWUgPSAvXlxcK1xcZHsxLDN9XFxzKy8udGVzdChyYXdVc2VybmFtZSkgPyByYXdVc2VybmFtZSA6IGArODYgJHtyYXdVc2VybmFtZX1gXG4gICAgICBsZXQgc2lnblVwUGFyYW06IGFueSA9IHsgcGhvbmVfbnVtYmVyOiB1c2VybmFtZSB9XG5cbiAgICAgIC8vIOmCrueuseeZu+W9leWPguaVsFxuICAgICAgaWYgKGxvZ2luVHlwZSA9PT0gJ2VtYWlsJykge1xuICAgICAgICB1c2VybmFtZSA9IHJhd1VzZXJuYW1lXG4gICAgICAgIHNpZ25VcFBhcmFtID0geyBlbWFpbDogdXNlcm5hbWUgfVxuICAgICAgfVxuXG4gICAgICAvLyAyLiDmoLnmja7mmK/lkKblt7Lnu4/mmK/nlKjmiLfvvIzliIbliKvotbDnmbvlvZXmiJbms6jlhozpgLvovpFcbiAgICAgIGlmICh2ZXJpZmljYXRpb25JbmZvLmlzX3VzZXIpIHtcbiAgICAgICAgLy8g56eB5pyJ5YyW546v5aKD5oiW6ICF6Ieq5a6a5LmJ5bqU55So6LWwdjHniYjmnKznmoTogIHpgLvovpFcbiAgICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHtcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IHNpZ25JblJlc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJpbmRJbmZvKSB7XG4gICAgICAgICAgY29uc3QgYmluZFJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIoe1xuICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW46IChiaW5kSW5mbyBhcyBhbnkpPy5wcm92aWRlclRva2VuLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoKGJpbmRSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgdGhyb3cgYmluZFJlc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g6Ieq5a6a5LmJ5bqU55So6LWwc2lnblVw6YC76L6RXG4gICAgICAgIGNvbnN0IHNpZ25VcFJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcCh7XG4gICAgICAgICAgLi4uc2lnblVwUGFyYW0sXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiAoYmluZEluZm8gYXMgYW55KT8ucHJvdmlkZXJJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHNpZ25VcFJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgc2lnblVwUmVzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlTG9naW5TdGF0ZShcbiAgICBwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmc7IHF1ZXJ5PzogYW55IH0sXG4gICAgb3B0aW9ucz86IHsgYXN5bmNSZWZyZXNoVXNlcj86IGJvb2xlYW47IHVzZXJJbmZvPzogYW55IH0sXG4gICk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgfSlcblxuICAgIGF3YWl0IGxvZ2luU3RhdGUuY2hlY2tMb2NhbFN0YXRlQXN5bmMoKVxuXG4gICAgaWYgKG9wdGlvbnM/LnVzZXJJbmZvKSB7XG4gICAgICBsb2dpblN0YXRlLnVzZXIuc2V0TG9jYWxVc2VySW5mbyhvcHRpb25zLnVzZXJJbmZvKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucz8uYXN5bmNSZWZyZXNoVXNlcikge1xuICAgICAgICBsb2dpblN0YXRlLnVzZXIucmVmcmVzaChwYXJhbXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIucmVmcmVzaChwYXJhbXMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZXZlbnRCdXMuZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyBldmVudFR5cGU6IExPR0lOX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdOX0lOIH0pXG5cbiAgICBldmVudEJ1cy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTiB9KVxuICAgIHJldHVybiBsb2dpblN0YXRlXG4gIH1cblxuICBhc3luYyBzZXRBY2Nlc3NLZXkoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmFjY2Vzc0tleSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRBY2Nlc3NLZXlDcmVkZW50aWFscyh7XG4gICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmNvbmZpZy5hY2Nlc3NLZXksXG4gICAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgICAgc2NvcGU6ICdhY2Nlc3NLZXknLFxuICAgICAgICAgIGV4cGlyZXNfYXQ6IG5ldyBEYXRlKCtuZXcgRGF0ZSgpICsgK25ldyBEYXRlKCkpLFxuICAgICAgICAgIGV4cGlyZXNfaW46ICtuZXcgRGF0ZSgpICsgK25ldyBEYXRlKCksXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2FjY2Vzc0tleSBlcnJvcjogJywgZXJyb3IpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnR5cGUgVEluaXRBdXRoT3B0aW9ucyA9IFBpY2s8SUNsb3VkYmFzZUF1dGhDb25maWcsICdyZWdpb24nIHwgJ3BlcnNpc3RlbmNlJyB8ICdpMThuJyB8ICdhY2Nlc3NLZXknIHwgJ3VzZVd4Q2xvdWQnPiAmXG5QYXJ0aWFsPEF1dGhPcHRpb25zPiAmIHtcbiAgZGV0ZWN0U2Vzc2lvbkluVXJsPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBdXRoSW5zdGFuY2UoXG4gIGNvbmZpZzogVEluaXRBdXRoT3B0aW9ucyxcbiAgb3B0aW9ucz86IHtcbiAgICBjbGllbnRJZDogSUNsb3VkYmFzZUNvbmZpZ1snY2xpZW50SWQnXVxuICAgIGVudjogSUNsb3VkYmFzZUNvbmZpZ1snZW52J11cbiAgICBhcGlPcmlnaW46IHN0cmluZ1xuICAgIGNhY2hlPzogSUNsb3VkYmFzZUNhY2hlXG4gICAgcGxhdGZvcm0/OiBJQ2xvdWRiYXNlWydwbGF0Zm9ybSddXG4gICAgYXBwPzogSUNsb3VkYmFzZVxuICAgIGRlYnVnPzogSUNsb3VkYmFzZUF1dGhDb25maWdbJ2RlYnVnJ11cbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw/OiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1snZGV0ZWN0U2Vzc2lvbkluVXJsJ11cbiAgfSxcbikge1xuICBjb25zdCB7IHJlZ2lvbiA9ICdhcC1zaGFuZ2hhaScsIGkxOG4sIGFjY2Vzc0tleSwgdXNlV3hDbG91ZCB9ID0gY29uZmlnXG4gIGNvbnN0IHBsYXRmb3JtID0gb3B0aW9ucz8ucGxhdGZvcm0gfHwgKHVzZURlZmF1bHRBZGFwdGVyLmJpbmQob3B0aW9ucykoKSBhcyBJQ2xvdWRiYXNlUGxhdGZvcm1JbmZvKVxuICBjb25zdCB7IHJ1bnRpbWUsIGFkYXB0ZXIgfSA9IHBsYXRmb3JtXG5cbiAgY29uc3QgeyBlbnYsIGNsaWVudElkLCBkZWJ1ZywgY2FjaGUsIGFwcDogY2xvdWRiYXNlIH0gPSBvcHRpb25zIHx8IHt9XG4gIGxldCB7IGFwaU9yaWdpbiB9ID0gb3B0aW9ucyB8fCB7fVxuICBpZiAoIWFwaU9yaWdpbikge1xuICAgIGFwaU9yaWdpbiA9IGBodHRwczovLyR7ZW52fS4ke3JlZ2lvbn0udGNiLWFwaS50ZW5jZW50Y2xvdWRhcGkuY29tYFxuICB9XG5cbiAgY29uc3QgY29tbW9uT3B0cyA9IHtcbiAgICBlbnYsXG4gICAgY2xpZW50SWQsXG4gICAgaTE4bixcbiAgICBhY2Nlc3NLZXksXG4gICAgdXNlV3hDbG91ZCxcbiAgICBldmVudEJ1cyxcbiAgfVxuXG4gIGNvbnN0IG9hdXRoSW5zdGFuY2UgPSBuZXcgQ2xvdWRiYXNlT0F1dGgodXNlQXV0aEFkYXB0ZXIoe1xuICAgIC4uLmNvbW1vbk9wdHMsXG4gICAgYXBpT3JpZ2luLFxuICAgIGFwaVBhdGg6IGNvbmZpZz8uYXBpUGF0aCB8fCBBVVRIX0FQSV9QUkVGSVgsXG4gICAgLy8gQHRvZG8g5Lul5LiL5pyA5aW96LWwYWRhcHRvcuWkhOeQhu+8jOebruWJjW9hdXRo5qih5Z2X5rKh5oyJYWRhcHRvcuaOpeWPo+iuvuiuoVxuICAgIHN0b3JhZ2U6IGNvbmZpZz8uc3RvcmFnZSxcbiAgICBiYXNlUmVxdWVzdDogY29uZmlnPy5iYXNlUmVxdWVzdCxcbiAgICByZXF1ZXN0OiBjb25maWc/LnJlcXVlc3QsXG4gICAgYW5vbnltb3VzU2lnbkluRnVuYzogY29uZmlnPy5hbm9ueW1vdXNTaWduSW5GdW5jLFxuICAgIGNhcHRjaGFPcHRpb25zOiBjb25maWc/LmNhcHRjaGFPcHRpb25zLFxuICAgIHd4Q2xvdWQ6IGNvbmZpZz8ud3hDbG91ZCxcbiAgICBhZGFwdGVyLFxuICAgIG9uQ3JlZGVudGlhbHNFcnJvcixcbiAgICBoZWFkZXJzOiB7ICdYLVNESy1WZXJzaW9uJzogYEBjbG91ZGJhc2UvanMtc2RrLyR7Y29uZmlnLnNka1ZlcnNpb259YCwgLi4uKGNvbmZpZy5oZWFkZXJzIHx8IHt9KSB9LFxuICAgIGRldGVjdFNlc3Npb25JblVybDogY29uZmlnLmRldGVjdFNlc3Npb25JblVybCxcbiAgICBkZWJ1ZyxcbiAgfSksKVxuXG4gIGNvbnN0IGF1dGhJbnN0YW5jZSA9IG5ldyBBdXRoKHtcbiAgICAuLi5jb21tb25PcHRzLFxuICAgIHJlZ2lvbixcbiAgICBwZXJzaXN0ZW5jZTogY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgIGRlYnVnLFxuICAgIGNhY2hlOlxuICAgICAgY2FjaGVcbiAgICAgIHx8IG5ldyBDbG91ZGJhc2VDYWNoZSh7XG4gICAgICAgIHBlcnNpc3RlbmNlOiBjb25maWcucGVyc2lzdGVuY2UsXG4gICAgICAgIGtleXM6IHsgdXNlckluZm9LZXk6IGB1c2VyX2luZm9fJHtlbnZ9YCB9LFxuICAgICAgICBwbGF0Zm9ybUluZm86IHBsYXRmb3JtLFxuICAgICAgfSksXG4gICAgcnVudGltZTogcnVudGltZSB8fCAnd2ViJyxcbiAgICBfZnJvbUFwcDogY2xvdWRiYXNlLFxuICAgIG9hdXRoSW5zdGFuY2UsXG4gIH0pXG5cbiAgLy8gSW5pdGlhbGl6ZSBzZXNzaW9uIHdpdGggdXNlciBpbmZvIGNhbGxiYWNrXG4gIC8vIFRoaXMgaGFuZGxlcyBPQXV0aCBjYWxsYmFjayBVUkwgZGV0ZWN0aW9uIGFuZCBjcmVhdGVzIGxvZ2luIHN0YXRlIGF0b21pY2FsbHlcbiAgb2F1dGhJbnN0YW5jZS5pbml0aWFsaXplU2Vzc2lvbihhc3luYyAoZGF0YSwgZXJyb3IpID0+IHtcbiAgICBpZiAoIWRhdGEpIHJldHVyblxuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5TSUdOX0lOKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTixcbiAgICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudXNlcikge1xuICAgICAgICAvLyDkvb/nlKjlt7Lojrflj5bnmoQgdXNlciDkv6Hmga/liJvlu7ogTG9naW5TdGF0Ze+8jOWkjeeUqCBjcmVhdGVMb2dpblN0YXRlIOmAu+i+kVxuICAgICAgICAvLyDkvYbot7Pov4cgcmVmcmVzaCgpIOmBv+WFjeWGjeasoeivt+axgiBBUEkg5a+86Ie05q276ZSBXG4gICAgICAgIGF1dGhJbnN0YW5jZS5jcmVhdGVMb2dpblN0YXRlKHt9LCB7IHVzZXJJbmZvOiBkYXRhLnVzZXIgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZKSB7XG4gICAgICBldmVudEJ1cy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHtcbiAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLkJJTkRfSURFTlRJVFksXG4gICAgICAgIGluZm86IHsgLi4uZGF0YSwgZXJyb3IgfSxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7IGF1dGhJbnN0YW5jZSwgb2F1dGhJbnN0YW5jZSB9XG59XG5cbmNvbnN0IGNvbXBvbmVudDogSUNsb3VkYmFzZUNvbXBvbmVudCA9IHtcbiAgbmFtZTogQ09NUE9ORU5UX05BTUUsXG4gIG5hbWVzcGFjZTogJ2F1dGgnLFxuICBlbnRpdHkoY29uZmlnPzogVEluaXRBdXRoT3B0aW9ucykge1xuICAgIGlmICh0aGlzLmF1dGhJbnN0YW5jZSAmJiAhY29uZmlnKSB7XG4gICAgICAvLyBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgYXV0aCBvYmplY3QnKVxuICAgICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gICAgfVxuXG4gICAgY29uZmlnID0gY29uZmlnIHx8IHtcbiAgICAgIHJlZ2lvbjogJycsXG4gICAgICBwZXJzaXN0ZW5jZTogJ2xvY2FsJyxcbiAgICAgIGFwaVBhdGg6IEFVVEhfQVBJX1BSRUZJWCxcbiAgICB9XG4gICAgY29uc3QgeyBhZGFwdGVyIH0gPSB0aGlzLnBsYXRmb3JtXG4gICAgLy8g5aaC5LiN5piO56Gu5oyH5a6acGVyc2lzdGVuY2XliJnkvJjlhYjlj5blkITlubPlj7BhZGFwdGVy6aaW6YCJ77yM5YW25qyhbG9jYWxTdG9yYWdlXG4gICAgY29uc3QgbmV3UGVyc2lzdGVuY2UgPSBjb25maWcucGVyc2lzdGVuY2UgfHwgYWRhcHRlci5wcmltYXJ5U3RvcmFnZVxuICAgIGlmIChuZXdQZXJzaXN0ZW5jZSAmJiBuZXdQZXJzaXN0ZW5jZSAhPT0gdGhpcy5jb25maWcucGVyc2lzdGVuY2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHsgcGVyc2lzdGVuY2U6IG5ld1BlcnNpc3RlbmNlIH0pXG4gICAgfVxuXG4gICAgY29uc3QgeyBhdXRoSW5zdGFuY2UsIG9hdXRoSW5zdGFuY2UgfSA9IGdlbmVyYXRlQXV0aEluc3RhbmNlKFxuICAgICAge1xuICAgICAgICB3eENsb3VkOiB0aGlzLmNvbmZpZy53eENsb3VkLFxuICAgICAgICBzdG9yYWdlOiB0aGlzLmNvbmZpZy5zdG9yYWdlLFxuICAgICAgICAuLi5jb25maWcsXG4gICAgICAgIHBlcnNpc3RlbmNlOiB0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICAgICAgaTE4bjogdGhpcy5jb25maWcuaTE4bixcbiAgICAgICAgYWNjZXNzS2V5OiB0aGlzLmNvbmZpZy5hY2Nlc3NLZXksXG4gICAgICAgIHVzZVd4Q2xvdWQ6IHRoaXMuY29uZmlnLnVzZVd4Q2xvdWQsXG4gICAgICAgIHNka1ZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiB0aGlzLmNvbmZpZy5hdXRoPy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2xpZW50SWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxuICAgICAgICBhcGlPcmlnaW46IHRoaXMucmVxdWVzdC5nZXRCYXNlRW5kUG9pbnQodGhpcy5jb25maWcuZW5kUG9pbnRNb2RlIHx8ICdDTE9VRF9BUEknKSxcbiAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBhcHA6IHRoaXMsXG4gICAgICAgIGRlYnVnOiB0aGlzLmNvbmZpZy5kZWJ1ZyxcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy5hdXRoSW5zdGFuY2UgPSBhdXRoSW5zdGFuY2VcblxuICAgIHJldHVybiB0aGlzLmF1dGhJbnN0YW5jZVxuICB9LFxufVxuXG50cnkge1xuICAvLyDlsJ3or5Xoh6rliqjms6jlhozoh7PlhajlsYDlj5jph49jbG91ZGJhc2VcbiAgLy8g5q2k6KGM5Li65Y+q5Zyo5rWP6KeI5Zmo546v5aKD5LiL5pyJ5pWIXG4gIGNsb3VkYmFzZS5yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQpXG59IGNhdGNoIChlKSB7fVxuXG5leHBvcnQgeyBVc2VySW5mbywgQXV0aCB9XG4vKipcbiAqIEBhcGkg5omL5Yqo5rOo5YaM6IezY2xvdWRiYXNlIGFwcFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBdXRoKGFwcDogUGljazxJQ2xvdWRiYXNlLCAncmVnaXN0ZXJDb21wb25lbnQnPikge1xuICB0cnkge1xuICAgIGFwcC5yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oZSlcbiAgfVxufVxuIl19
|