ems-web-app-cognito 1.0.20 → 1.0.24

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.
@@ -20,13 +20,16 @@ export class CognitoService {
20
20
  this.formSource = new BehaviorSubject(null);
21
21
  this.form$ = this.formSource.asObservable();
22
22
  this.user = null;
23
+ this.storage = new EphemeralStorage();
24
+ this.useLocalStorage = true;
23
25
  }
24
- initialize(UserPoolId, ClientId, useLocalStorage, idToken, accessToken, refreshToken) {
26
+ initialize(UserPoolId, ClientId, useLocalStorage = true, idToken, accessToken, refreshToken) {
25
27
  //for federated users
26
28
  const access = params("access_token") ?? accessToken ?? localStorage.getItem("ems_access_token") ?? null;
27
29
  const id = params("id_token") ?? idToken ?? localStorage.getItem("ems_id_token") ?? null;
28
30
  const sessionId = params("sessionId") ?? null;
29
31
  const otp = params("otp") ?? null;
32
+ this.useLocalStorage = useLocalStorage;
30
33
  if (useLocalStorage && access && id) {
31
34
  localStorage.setItem("ems_access_token", access);
32
35
  localStorage.setItem("ems_id_token", id);
@@ -47,15 +50,13 @@ export class CognitoService {
47
50
  }
48
51
  setCognitoUserFromToken(UserPoolId, ClientId, idToken, accessToken, refreshToken) {
49
52
  console.log("using ephemeral storage");
50
- const Storage = new EphemeralStorage();
51
- this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage });
53
+ this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage: this.storage });
52
54
  if (idToken) {
53
55
  const decoded = jwtDecode(idToken);
54
- console.log(decoded);
55
56
  this.user = new CognitoUser({
56
57
  Username: decoded['cognito:username'],
57
58
  Pool: this.pool,
58
- Storage
59
+ Storage: this.storage
59
60
  });
60
61
  const idTokenObj = new CognitoIdToken({ IdToken: idToken });
61
62
  const accessTokenObj = new CognitoAccessToken({ AccessToken: accessToken });
@@ -76,6 +77,8 @@ export class CognitoService {
76
77
  const request = ChallengeResponse ? CognitoRequestType.MagicLink : CognitoRequestType.Authentication;
77
78
  const details = new AuthenticationDetails({ Username });
78
79
  const data = { Username, Pool: this.pool };
80
+ if (!this.useLocalStorage)
81
+ data.Storage = this.storage;
79
82
  const user = this.user = this.user ?? new CognitoUser(data);
80
83
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
81
84
  //@ts-ignore
@@ -103,6 +106,8 @@ export class CognitoService {
103
106
  const request = ChallengeResponse ? CognitoRequestType.Passkey : CognitoRequestType.Authentication;
104
107
  const details = new AuthenticationDetails({ Username });
105
108
  const data = { Username, Pool: this.pool };
109
+ if (!this.useLocalStorage)
110
+ data.Storage = this.storage;
106
111
  const user = this.user = this.user ?? new CognitoUser(data);
107
112
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
108
113
  return new Promise(async (resolve, reject) => {
@@ -125,6 +130,8 @@ export class CognitoService {
125
130
  const request = ChallengeResponse ? CognitoRequestType.OtpChallenge : CognitoRequestType.Authentication;
126
131
  const details = new AuthenticationDetails({ Username });
127
132
  const data = { Username, Pool: this.pool };
133
+ if (!this.useLocalStorage)
134
+ data.Storage = this.storage;
128
135
  const user = this.user = this.user ?? new CognitoUser(data);
129
136
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
130
137
  return new Promise(async (resolve, reject) => {
@@ -192,6 +199,8 @@ export class CognitoService {
192
199
  authenticate(Username, Password) {
193
200
  const details = new AuthenticationDetails({ Username, Password });
194
201
  const data = { Username, Pool: this.pool };
202
+ if (!this.useLocalStorage)
203
+ data.Storage = this.storage;
195
204
  const user = new CognitoUser(data);
196
205
  return new Promise((resolve, reject) => {
197
206
  if (!this.user)
@@ -207,6 +216,8 @@ export class CognitoService {
207
216
  });
208
217
  const Username = session.getIdToken().payload["cognito:username"];
209
218
  const data = { Username, Pool: this.pool };
219
+ if (!this.useLocalStorage)
220
+ data.Storage = this.storage;
210
221
  this.user = new CognitoUser(data);
211
222
  this.userSource.next(this.user);
212
223
  this.sessionSource.next(session);
@@ -227,6 +238,8 @@ export class CognitoService {
227
238
  }
228
239
  requestVerificationCode(Username) {
229
240
  const data = { Username, Pool: this.pool };
241
+ if (!this.useLocalStorage)
242
+ data.Storage = this.storage;
230
243
  const user = new CognitoUser(data);
231
244
  return this.forgotPassword(user);
232
245
  }
@@ -304,4 +317,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
304
317
  providedIn: 'root'
305
318
  }]
306
319
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb2duaXRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsV0FBVyxFQUE0RCxNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBdUIsZUFBZSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQWMsR0FBRyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTyw0QkFBNEIsQ0FBQztBQUUvSyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQUt2QyxNQUFNLE9BQU8sY0FBYztJQWtCekIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWhCNUIsa0JBQWEsR0FBK0MsSUFBSSxlQUFlLENBQTRCLElBQUksQ0FBQyxDQUFDO1FBQ2xILGFBQVEsR0FBMEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVuRixlQUFVLEdBQXdDLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUNqRyxVQUFLLEdBQW1DLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7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QU8sR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFZLEVBQUUsT0FBYSxFQUFFLEVBQUU7WUFDcEQsSUFBRyxLQUFLO2dCQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUNwRztnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUMxRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQXdCO1FBQ2pELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFTyxPQUFPLENBQUMsU0FBYyxFQUFFO1FBQzlCLE1BQU0sT0FBTyxHQUFHO1lBQ1YsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDdkUsQ0FBQztRQUNMLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7MkdBbFVVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlLCBIdHRwUmVxdWVzdCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIHRocm93RXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCwgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0ICdjcm9zcy1mZXRjaC9wb2x5ZmlsbCc7XG5pbXBvcnQgeyBDb2duaXRvVXNlciwgQ29nbml0b1VzZXJQb29sLCBDb2duaXRvVXNlclNlc3Npb24sIENvZ25pdG9JZFRva2VuLCBDb2duaXRvQWNjZXNzVG9rZW4sIENvZ25pdG9SZWZyZXNoVG9rZW4sIEF1dGhlbnRpY2F0aW9uRGV0YWlscyB9ICBmcm9tICdhbWF6b24tY29nbml0by1pZGVudGl0eS1qcyc7XG5pbXBvcnQgeyBJQ29nbml0b1Jlc3BvbnNlLCBJQ29nbml0b1VzZXJEYXRhIH0gZnJvbSBcIi4vY29nbml0by5pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBDb2duaXRvUmVzcG9uc2VUeXBlLCBDb2duaXRvUmVxdWVzdFR5cGUsIENvZ25pdG9Gb3JtVHlwZSB9IGZyb20gXCIuL2NvZ25pdG8udHlwZXNcIjtcbmltcG9ydCB7IEVwaGVtZXJhbFN0b3JhZ2UgfSBmcm9tIFwiLi9jb2duaXRvLmNsYXNzZXNcIjtcbmltcG9ydCB7IHBhcmFtcyB9IGZyb20gXCIuL2NvZ25pdG8udXRpbHNcIjtcbmltcG9ydCB7IGp3dERlY29kZSB9IGZyb20gXCJqd3QtZGVjb2RlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvZ25pdG9TZXJ2aWNlIHtcblxuICBwcml2YXRlIHNlc3Npb25Tb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvVXNlclNlc3Npb24gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29nbml0b1VzZXJTZXNzaW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBzZXNzaW9uJDogT2JzZXJ2YWJsZTxDb2duaXRvVXNlclNlc3Npb24gfCBudWxsPiA9IHRoaXMuc2Vzc2lvblNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHVzZXJTb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvVXNlciB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvVXNlciB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgdXNlciQ6IE9ic2VydmFibGU8Q29nbml0b1VzZXIgfCBudWxsPiA9IHRoaXMudXNlclNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGZvcm1Tb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvRm9ybVR5cGUgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29nbml0b0Zvcm1UeXBlIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBmb3JtJDogT2JzZXJ2YWJsZTxDb2duaXRvRm9ybVR5cGUgfCBudWxsPiA9IHRoaXMuZm9ybVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuXG4gIHByaXZhdGUgdXNlcjogQ29nbml0b1VzZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwb29sITogQ29nbml0b1VzZXJQb29sO1xuXG4gIHByaXZhdGUgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIHByaXZhdGUgaWRUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcblxuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoVXNlclBvb2xJZDogc3RyaW5nLCBDbGllbnRJZDogc3RyaW5nLCB1c2VMb2NhbFN0b3JhZ2U/OiBib29sZWFuLCBpZFRva2VuPzogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZywgcmVmcmVzaFRva2VuPzogc3RyaW5nICkge1xuXG4gICAgLy9mb3IgZmVkZXJhdGVkIHVzZXJzXG4gICAgY29uc3QgYWNjZXNzID0gcGFyYW1zKFwiYWNjZXNzX3Rva2VuXCIpID8/IGFjY2Vzc1Rva2VuID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2FjY2Vzc190b2tlblwiKSA/PyBudWxsO1xuICAgIGNvbnN0IGlkID0gcGFyYW1zKFwiaWRfdG9rZW5cIikgPz8gaWRUb2tlbiA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImVtc19pZF90b2tlblwiKSA/PyBudWxsO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHBhcmFtcyhcInNlc3Npb25JZFwiKSA/PyBudWxsO1xuICAgIGNvbnN0IG90cCA9IHBhcmFtcyhcIm90cFwiKSA/PyBudWxsO1xuXG4gICAgaWYodXNlTG9jYWxTdG9yYWdlICYmIGFjY2VzcyAmJiBpZCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlbXNfYWNjZXNzX3Rva2VuXCIsIGFjY2Vzcyk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19pZF90b2tlblwiLCBpZCk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IFwiXCI7XG4gICAgfSBcblxuICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBhY2Nlc3M7XG4gICAgdGhpcy5pZFRva2VuID0gaWQ7XG5cbiAgICAvL2ZvciBzcnAgdXNlcnNcbiAgICBpZih1c2VMb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHRoaXMucG9vbCA9IG5ldyBDb2duaXRvVXNlclBvb2woeyBVc2VyUG9vbElkLCBDbGllbnRJZCB9KTtcbiAgICAgIHRoaXMudXNlciA9IHRoaXMucG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgIHRoaXMudXNlcj8uZ2V0U2Vzc2lvbigoZTogRXJyb3IsIHNlc3Npb246IG51bGwpID0+IHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb2duaXRvVXNlckZyb21Ub2tlbihVc2VyUG9vbElkLCBDbGllbnRJZCwgaWRUb2tlbiwgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgfVxuICAgIFxuICB9XG5cbiAgcHVibGljIHNldENvZ25pdG9Vc2VyRnJvbVRva2VuIChVc2VyUG9vbElkOiBzdHJpbmcsIENsaWVudElkOiBzdHJpbmcsIGlkVG9rZW4/OiBzdHJpbmcsIGFjY2Vzc1Rva2VuPzogc3RyaW5nLCByZWZyZXNoVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwidXNpbmcgZXBoZW1lcmFsIHN0b3JhZ2VcIik7XG5cbiAgICAgIGNvbnN0IFN0b3JhZ2UgPSBuZXcgRXBoZW1lcmFsU3RvcmFnZSgpO1xuICAgICAgdGhpcy5wb29sID0gbmV3IENvZ25pdG9Vc2VyUG9vbCh7IFVzZXJQb29sSWQsIENsaWVudElkLCBTdG9yYWdlIH0pO1xuICAgICAgXG4gICAgICBpZihpZFRva2VuKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWQ6IGFueSA9IGp3dERlY29kZShpZFRva2VuKTtcbiAgICAgICAgY29uc29sZS5sb2coZGVjb2RlZCk7XG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBDb2duaXRvVXNlcih7XG4gICAgICAgICAgICBVc2VybmFtZTogZGVjb2RlZFsnY29nbml0bzp1c2VybmFtZSddLFxuICAgICAgICAgICAgUG9vbDogdGhpcy5wb29sLCBcbiAgICAgICAgICAgIFN0b3JhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaWRUb2tlbk9iaiA9IG5ldyBDb2duaXRvSWRUb2tlbih7IElkVG9rZW46IGlkVG9rZW4gfSk7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuT2JqID0gbmV3IENvZ25pdG9BY2Nlc3NUb2tlbih7IEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbiEgfSk7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbk9iaiA9IG5ldyBDb2duaXRvUmVmcmVzaFRva2VuKHsgUmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW4hIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IENvZ25pdG9Vc2VyU2Vzc2lvbih7IElkVG9rZW46IGlkVG9rZW5PYmosIEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbk9iaiwgUmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW5PYmogfSk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBzZXNzaW9uIHRvIHRoZSBDb2duaXRvIHVzZXJcbiAgICAgICAgdGhpcy51c2VyLnNldFNpZ25JblVzZXJTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXNlciA9IHRoaXMucG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgdGhpcy51c2VyPy5nZXRTZXNzaW9uKChlOiBFcnJvciwgc2Vzc2lvbjogbnVsbCkgPT4gdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbikpO1xuICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgfTtcblxuICBwdWJsaWMgbWFnaWNMaW5rQXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nLCBTZXNzaW9uSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ2hhbGxlbmdlUmVzcG9uc2UgPyBDb2duaXRvUmVxdWVzdFR5cGUuTWFnaWNMaW5rIDogQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIGNvbnN0IGRldGFpbHMgPSBuZXcgQXV0aGVudGljYXRpb25EZXRhaWxzKHsgVXNlcm5hbWUgfSk7XG4gICAgY29uc3QgZGF0YSA9IHsgVXNlcm5hbWUsIFBvb2w6IHRoaXMucG9vbCB9O1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIgPSB0aGlzLnVzZXIgPz8gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHRoaXMudXNlci5zZXRBdXRoZW50aWNhdGlvbkZsb3dUeXBlKCdDVVNUT01fQVVUSCcpO1xuXG4gICAgLy9AdHMtaWdub3JlXG4gICAgaWYoU2Vzc2lvbklkKSB0aGlzLnVzZXIuU2Vzc2lvbiA9IFNlc3Npb25JZDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyggcmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PnZvaWQsIHJlamVjdDogKHJlc3VsdDogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0ge1xuICAgICAgICBvblN1Y2Nlc3M6IChzZXNzaW9uOiBDb2duaXRvVXNlclNlc3Npb24pID0+IHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgICAgIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkF1dGhlbnRpY2F0ZWQsIHNlc3Npb24sIHVzZXIsIHJlcXVlc3QgfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSk9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk5vdEF1dGhvcml6ZWQsIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pLFxuICAgICAgICBjdXN0b21DaGFsbGVuZ2U6IChjaGFsbGVuZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5NYWdpY0xpbmssIHVzZXIsIHJlcXVlc3QsIGNoYWxsZW5nZVBhcmFtZXRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBcbiAgICAgIGlmKENoYWxsZW5nZVJlc3BvbnNlKSB1c2VyLnNlbmRDdXN0b21DaGFsbGVuZ2VBbnN3ZXIoQ2hhbGxlbmdlUmVzcG9uc2UsIGhhbmRsZXIpO1xuICAgICAgZWxzZSB1c2VyLmluaXRpYXRlQXV0aChkZXRhaWxzLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXNza2V5QXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENoYWxsZW5nZVJlc3BvbnNlID8gQ29nbml0b1JlcXVlc3RUeXBlLlBhc3NrZXkgOiBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb247XG4gICAgY29uc3QgZGV0YWlscyA9IG5ldyBBdXRoZW50aWNhdGlvbkRldGFpbHMoeyBVc2VybmFtZSB9KTtcbiAgICBjb25zdCBkYXRhID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlciA9IHRoaXMudXNlciA/PyBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyLnNldEF1dGhlbnRpY2F0aW9uRmxvd1R5cGUoJ0NVU1RPTV9BVVRIJyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoIHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT52b2lkLCByZWplY3Q6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gICAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0IH0pXG4gICAgICAgIH0sXG4gICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5Ob3RBdXRob3JpemVkLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgY3VzdG9tQ2hhbGxlbmdlOiAoY2hhbGxlbmdlUGFyYW1ldGVyczogYW55KSA9PiByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5QYXNza2V5LCB1c2VyLCByZXF1ZXN0LCBjaGFsbGVuZ2VQYXJhbWV0ZXJzIH0pXG4gICAgICB9O1xuICAgICAgXG4gICAgICBpZihDaGFsbGVuZ2VSZXNwb25zZSkgdXNlci5zZW5kQ3VzdG9tQ2hhbGxlbmdlQW5zd2VyKENoYWxsZW5nZVJlc3BvbnNlLCBoYW5kbGVyKTtcbiAgICAgIGVsc2UgdXNlci5pbml0aWF0ZUF1dGgoZGV0YWlscywgaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3RwQXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENoYWxsZW5nZVJlc3BvbnNlID8gQ29nbml0b1JlcXVlc3RUeXBlLk90cENoYWxsZW5nZSA6IENvZ25pdG9SZXF1ZXN0VHlwZS5BdXRoZW50aWNhdGlvbjtcbiAgICBjb25zdCBkZXRhaWxzID0gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lIH0pO1xuICAgIGNvbnN0IGRhdGEgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyID0gdGhpcy51c2VyID8/IG5ldyBDb2duaXRvVXNlcihkYXRhKTtcbiAgICB0aGlzLnVzZXIuc2V0QXV0aGVudGljYXRpb25GbG93VHlwZSgnQ1VTVE9NX0FVVEgnKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyggcmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PnZvaWQsIHJlamVjdDogKHJlc3VsdDogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0ge1xuICAgICAgICBvblN1Y2Nlc3M6IChzZXNzaW9uOiBDb2duaXRvVXNlclNlc3Npb24pID0+IHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgICAgIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkF1dGhlbnRpY2F0ZWQsIHNlc3Npb24sIHVzZXIsIHJlcXVlc3QgfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSk9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk5vdEF1dGhvcml6ZWQsIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pLFxuICAgICAgICBjdXN0b21DaGFsbGVuZ2U6IChjaGFsbGVuZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk90cENoYWxsZW5nZSwgdXNlciwgcmVxdWVzdCwgY2hhbGxlbmdlUGFyYW1ldGVycyB9KVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgaWYoQ2hhbGxlbmdlUmVzcG9uc2UpIHVzZXIuc2VuZEN1c3RvbUNoYWxsZW5nZUFuc3dlcihDaGFsbGVuZ2VSZXNwb25zZSwgaGFuZGxlcik7XG4gICAgICBlbHNlIHVzZXIuaW5pdGlhdGVBdXRoKGRldGFpbHMsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJJbmZvKHVybDogc3RyaW5nKTogUHJvbWlzZTxJQ29nbml0b1VzZXJEYXRhIHwgSHR0cEVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gYCR7dXJsfS9vYXV0aDIvdXNlckluZm9gXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycygpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQocmVxdWVzdCwgeyBoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSApLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0OiBhbnkpID0+IFxuICAgICAgICAgIHsgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtYWlsOiByZXN1bHQuZW1haWwsXG4gICAgICAgICAgICB1c2VybmFtZTogcmVzdWx0LnVzZXJuYW1lLFxuICAgICAgICAgICAgc3ViOiByZXN1bHQuc3ViLFxuICAgICAgICAgICAgZmlyc3ROYW1lOiByZXN1bHQuZ2l2ZW5fbmFtZSxcbiAgICAgICAgICAgIGxhc3ROYW1lOiByZXN1bHQuZmFtaWx5X25hbWUsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdGhpcy5hY2Nlc3NUb2tlbiEsXG4gICAgICAgICAgICBpZFRva2VuOiB0aGlzLmlkVG9rZW4hXG4gICAgICAgICAgfX1cbiAgICAgICAgKVxuICAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8sIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvclF1aWV0bHkpXG4gIH1cblxuICBwdWJsaWMgc2V0VXNlclNlc3Npb24oc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Zvcm0oZm9ybTogQ29nbml0b0Zvcm1UeXBlIHwgbnVsbCkge1xuICAgIHRoaXMuZm9ybVNvdXJjZS5uZXh0KGZvcm0pO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgIGlmKHRoaXMudXNlcikge1xuICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQobnVsbCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiZW1zX2lkX3Rva2VuXCIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImVtc19hY2Nlc3NfdG9rZW5cIik7XG4gICAgICAgIHRoaXMudXNlci5nbG9iYWxTaWduT3V0KHtcbiAgICAgICAgICBvblN1Y2Nlc3M6IHJlc29sdmUsXG4gICAgICAgICAgb25GYWlsdXJlOiAoKSA9PiB7XG4gICAgICAgICAgICAvL2lmIHVzZXIgaXMgZGlzYWJsZWQsIG11c3QgbWFudWFsbHkgY2xlYXIgbG9jYWwgc3RvcmFnZSAoYXBwYXJlbnRseSlcbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBpbiBsb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgaWYocHJvcC5tYXRjaCgvY29nbml0by9pKSkgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICB9XG5cbiAgcHVibGljIGF1dGhlbnRpY2F0ZShVc2VybmFtZTogc3RyaW5nLCBQYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxJQ29nbml0b1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZGV0YWlscyA9IG5ldyBBdXRoZW50aWNhdGlvbkRldGFpbHMoeyBVc2VybmFtZSwgUGFzc3dvcmR9KTtcbiAgICBjb25zdCBkYXRhID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgY29uc3QgdXNlciA9IG5ldyBDb2duaXRvVXNlcihkYXRhKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgICAgaWYoIXRoaXMudXNlcikgdGhpcy5hdXRoZW50aWNhdGVVc2VyKHVzZXIsIGRldGFpbHMsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGVsc2UgdGhpcy5nZXRVc2VyU2Vzc2lvbihyZXNvbHZlLCByZWplY3QpXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRmVkZXJhdGVkU2Vzc2lvbihJZFRva2VuOiBzdHJpbmcsIEFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQ29nbml0b1VzZXJTZXNzaW9uKHtcbiAgICAgICAgICBJZFRva2VuOiBuZXcgQ29nbml0b0lkVG9rZW4oeyBJZFRva2VuIH0pLFxuICAgICAgICAgIEFjY2Vzc1Rva2VuOiBuZXcgQ29nbml0b0FjY2Vzc1Rva2VuKHsgQWNjZXNzVG9rZW4gfSksXG4gICAgfSk7XG5cbiAgICBjb25zdCBVc2VybmFtZSA9IHNlc3Npb24uZ2V0SWRUb2tlbigpLnBheWxvYWRbXCJjb2duaXRvOnVzZXJuYW1lXCJdO1xuICAgIGNvbnN0IGRhdGEgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICB0aGlzLnVzZXIgPSBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBjb21wbGV0ZVBhc3N3b3JkVXBkYXRlKHBhc3N3b3JkOiBzdHJpbmcsIHVzZXI6IENvZ25pdG9Vc2VyLCBhdHRyaWJ1dGVzOiBhbnkpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLk5ld1VzZXJQYXNzd29yZFJlc2V0O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkKSA9PiB7XG4gICAgICB1c2VyLmNvbXBsZXRlTmV3UGFzc3dvcmRDaGFsbGVuZ2UocGFzc3dvcmQsIGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh1c2VyKTtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0OiBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb24gfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpID0+IHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTm90QXV0aG9yaXplZCwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdFZlcmlmaWNhdGlvbkNvZGUoVXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICBjb25zdCB1c2VyID0gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmZvcmdvdFBhc3N3b3JkKHVzZXIpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0UGFzc3dvcmQodXNlcjogQ29nbml0b1VzZXIsIG9sZFBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLlBhc3N3b3JkUmVzZXQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpID0+IHtcbiAgICAgICB1c2VyLmNoYW5nZVBhc3N3b3JkKG9sZFBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVycm9yLCByZXN1bHQpID0+IHtcbiAgICAgICAgIGlmKGVycm9yKSByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkxpbWl0RXhjZWVkZWRFeGNlcHRpb24sIHVzZXIsIHJlcXVlc3QsIGVycm9yLCBzZXNzaW9uOiBudWxsfSk7XG4gICAgICAgICBlbHNlIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlN1Y2Nlc3MsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSk7XG4gICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3Jnb3RQYXNzd29yZCh1c2VyOiBDb2duaXRvVXNlcik6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuRm9yZ290UGFzc3dvcmQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpID0+IHtcbiAgICAgICB1c2VyLmZvcmdvdFBhc3N3b3JkKHtcbiAgICAgICAgIG9uU3VjY2VzczogKHJlc3BvbnNlOiBhbnkpID0+IHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlN1Y2Nlc3MsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSksXG4gICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KSA9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkxpbWl0RXhjZWVkZWRFeGNlcHRpb24sIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pXG4gICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maXJtUGFzc3dvcmQodXNlcjogQ29nbml0b1VzZXIsIGNvZGU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuQ29uZmlybVBhc3N3b3JkO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgdXNlci5jb25maXJtUGFzc3dvcmQoY29kZSwgcGFzc3dvcmQsIHtcbiAgICAgICAgIG9uU3VjY2VzczogKHJlc3BvbnNlOiBhbnkpID0+IHsgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuU3VjY2VzcywgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSB9LFxuICAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5JbnZhbGlkQ29kZSwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRoZW50aWNhdGVVc2VyKHVzZXI6IENvZ25pdG9Vc2VyLCBkZXRhaWxzOiBBdXRoZW50aWNhdGlvbkRldGFpbHMsIHJlc29sdmU6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCApIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIHVzZXIuYXV0aGVudGljYXRlVXNlcihkZXRhaWxzLCB7XG4gICAgICAgIG9uU3VjY2VzczogKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICAgICAgICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KHVzZXIpO1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlciwgcmVxdWVzdCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5Ob3RBdXRob3JpemVkLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgbmV3UGFzc3dvcmRSZXF1aXJlZDogKHVzZXJBdHRyaWJ1dGVzLCByZXF1aXJlZEF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHt0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlBhc3N3b3JkUmVzZXQsIHVzZXJBdHRyaWJ1dGVzLCByZXF1aXJlZEF0dHJpYnV0ZXMsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyU2Vzc2lvbihyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIHRoaXMudXNlciEuZ2V0U2Vzc2lvbigoZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBudWxsKSA9PiB7XG4gICAgICBpZihlcnJvcikgcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyOiB0aGlzLnVzZXIhLCByZXF1ZXN0LCBlcnJvciB9KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlcjogdGhpcy51c2VyISwgcmVxdWVzdCB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvclF1aWV0bHkoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG9mKGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgaGVhZGVycyhjdXN0b206IGFueSA9IHt9KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHRoaXMuYWNjZXNzVG9rZW4gPyBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlbn1gIDogXCJcIlxuICAgICAgIH07XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzKTtcbiAgfVxufVxuIl19
320
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb2duaXRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsV0FBVyxFQUE0RCxNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBdUIsZUFBZSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQWMsR0FBRyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTyw0QkFBNEIsQ0FBQztBQUUvSyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQUt2QyxNQUFNLE9BQU8sY0FBYztJQW9CekIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWxCNUIsa0JBQWEsR0FBK0MsSUFBSSxlQUFlLENBQTRCLElBQUksQ0FBQyxDQUFDO1FBQ2xILGFBQVEsR0FBMEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVuRixlQUFVLEdBQXdDLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUNqRyxVQUFLLEdBQW1DLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7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QUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQzFGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBd0I7UUFDakQsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVPLE9BQU8sQ0FBQyxTQUFjLEVBQUU7UUFDOUIsTUFBTSxPQUFPLEdBQUc7WUFDVixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUN2RSxDQUFDO1FBQ0wsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDOzsyR0ExVVUsY0FBYzsrR0FBZCxjQUFjLGNBRmIsTUFBTTsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2UsIEh0dHBSZXF1ZXN0LCBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwLCB0YWtlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgJ2Nyb3NzLWZldGNoL3BvbHlmaWxsJztcbmltcG9ydCB7IENvZ25pdG9Vc2VyLCBDb2duaXRvVXNlclBvb2wsIENvZ25pdG9Vc2VyU2Vzc2lvbiwgQ29nbml0b0lkVG9rZW4sIENvZ25pdG9BY2Nlc3NUb2tlbiwgQ29nbml0b1JlZnJlc2hUb2tlbiwgQXV0aGVudGljYXRpb25EZXRhaWxzIH0gIGZyb20gJ2FtYXpvbi1jb2duaXRvLWlkZW50aXR5LWpzJztcbmltcG9ydCB7IElDb2duaXRvUmVzcG9uc2UsIElDb2duaXRvVXNlckRhdGEgfSBmcm9tIFwiLi9jb2duaXRvLmludGVyZmFjZXNcIjtcbmltcG9ydCB7IENvZ25pdG9SZXNwb25zZVR5cGUsIENvZ25pdG9SZXF1ZXN0VHlwZSwgQ29nbml0b0Zvcm1UeXBlIH0gZnJvbSBcIi4vY29nbml0by50eXBlc1wiO1xuaW1wb3J0IHsgRXBoZW1lcmFsU3RvcmFnZSB9IGZyb20gXCIuL2NvZ25pdG8uY2xhc3Nlc1wiO1xuaW1wb3J0IHsgcGFyYW1zIH0gZnJvbSBcIi4vY29nbml0by51dGlsc1wiO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSBcImp3dC1kZWNvZGVcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29nbml0b1NlcnZpY2Uge1xuXG4gIHByaXZhdGUgc2Vzc2lvblNvdXJjZTogQmVoYXZpb3JTdWJqZWN0PENvZ25pdG9Vc2VyU2Vzc2lvbiB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvVXNlclNlc3Npb24gfCBudWxsPihudWxsKTtcbiAgcHVibGljIHNlc3Npb24kOiBPYnNlcnZhYmxlPENvZ25pdG9Vc2VyU2Vzc2lvbiB8IG51bGw+ID0gdGhpcy5zZXNzaW9uU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgdXNlclNvdXJjZTogQmVoYXZpb3JTdWJqZWN0PENvZ25pdG9Vc2VyIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvZ25pdG9Vc2VyIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyB1c2VyJDogT2JzZXJ2YWJsZTxDb2duaXRvVXNlciB8IG51bGw+ID0gdGhpcy51c2VyU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgZm9ybVNvdXJjZTogQmVoYXZpb3JTdWJqZWN0PENvZ25pdG9Gb3JtVHlwZSB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvRm9ybVR5cGUgfCBudWxsPihudWxsKTtcbiAgcHVibGljIGZvcm0kOiBPYnNlcnZhYmxlPENvZ25pdG9Gb3JtVHlwZSB8IG51bGw+ID0gdGhpcy5mb3JtU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG5cbiAgcHJpdmF0ZSB1c2VyOiBDb2duaXRvVXNlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBvb2whOiBDb2duaXRvVXNlclBvb2w7XG5cbiAgcHJpdmF0ZSBhY2Nlc3NUb2tlbj86IHN0cmluZztcbiAgcHJpdmF0ZSBpZFRva2VuPzogc3RyaW5nO1xuICBwcml2YXRlIHN0b3JhZ2U6IEVwaGVtZXJhbFN0b3JhZ2UgPSBuZXcgRXBoZW1lcmFsU3RvcmFnZSgpO1xuICBwcml2YXRlIHVzZUxvY2FsU3RvcmFnZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XG5cbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplKFVzZXJQb29sSWQ6IHN0cmluZywgQ2xpZW50SWQ6IHN0cmluZywgdXNlTG9jYWxTdG9yYWdlOiBib29sZWFuID0gdHJ1ZSwgaWRUb2tlbj86IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcsIHJlZnJlc2hUb2tlbj86IHN0cmluZyApIHtcblxuICAgIC8vZm9yIGZlZGVyYXRlZCB1c2Vyc1xuICAgIGNvbnN0IGFjY2VzcyA9IHBhcmFtcyhcImFjY2Vzc190b2tlblwiKSA/PyBhY2Nlc3NUb2tlbiA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImVtc19hY2Nlc3NfdG9rZW5cIikgPz8gbnVsbDtcbiAgICBjb25zdCBpZCA9IHBhcmFtcyhcImlkX3Rva2VuXCIpID8/IGlkVG9rZW4gPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJlbXNfaWRfdG9rZW5cIikgPz8gbnVsbDtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBwYXJhbXMoXCJzZXNzaW9uSWRcIikgPz8gbnVsbDtcbiAgICBjb25zdCBvdHAgPSBwYXJhbXMoXCJvdHBcIikgPz8gbnVsbDtcblxuICAgIHRoaXMudXNlTG9jYWxTdG9yYWdlID0gdXNlTG9jYWxTdG9yYWdlO1xuXG4gICAgaWYodXNlTG9jYWxTdG9yYWdlICYmIGFjY2VzcyAmJiBpZCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlbXNfYWNjZXNzX3Rva2VuXCIsIGFjY2Vzcyk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19pZF90b2tlblwiLCBpZCk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IFwiXCI7XG4gICAgfSBcblxuICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBhY2Nlc3M7XG4gICAgdGhpcy5pZFRva2VuID0gaWQ7XG5cbiAgICAvL2ZvciBzcnAgdXNlcnNcbiAgICBpZih1c2VMb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHRoaXMucG9vbCA9IG5ldyBDb2duaXRvVXNlclBvb2woeyBVc2VyUG9vbElkLCBDbGllbnRJZCB9KTtcbiAgICAgIHRoaXMudXNlciA9IHRoaXMucG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgIHRoaXMudXNlcj8uZ2V0U2Vzc2lvbigoZTogRXJyb3IsIHNlc3Npb246IG51bGwpID0+IHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb2duaXRvVXNlckZyb21Ub2tlbihVc2VyUG9vbElkLCBDbGllbnRJZCwgaWRUb2tlbiwgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgfVxuICAgIFxuICB9XG5cbiAgcHVibGljIHNldENvZ25pdG9Vc2VyRnJvbVRva2VuIChVc2VyUG9vbElkOiBzdHJpbmcsIENsaWVudElkOiBzdHJpbmcsIGlkVG9rZW4/OiBzdHJpbmcsIGFjY2Vzc1Rva2VuPzogc3RyaW5nLCByZWZyZXNoVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwidXNpbmcgZXBoZW1lcmFsIHN0b3JhZ2VcIik7XG5cbiAgICAgIHRoaXMucG9vbCA9IG5ldyBDb2duaXRvVXNlclBvb2woeyBVc2VyUG9vbElkLCBDbGllbnRJZCwgU3RvcmFnZTogdGhpcy5zdG9yYWdlIH0pO1xuICAgICAgXG4gICAgICBpZihpZFRva2VuKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWQ6IGFueSA9IGp3dERlY29kZShpZFRva2VuKTtcbiAgICAgICAgdGhpcy51c2VyID0gbmV3IENvZ25pdG9Vc2VyKHtcbiAgICAgICAgICAgIFVzZXJuYW1lOiBkZWNvZGVkWydjb2duaXRvOnVzZXJuYW1lJ10sXG4gICAgICAgICAgICBQb29sOiB0aGlzLnBvb2wsIFxuICAgICAgICAgICAgU3RvcmFnZTogdGhpcy5zdG9yYWdlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlkVG9rZW5PYmogPSBuZXcgQ29nbml0b0lkVG9rZW4oeyBJZFRva2VuOiBpZFRva2VuIH0pO1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbk9iaiA9IG5ldyBDb2duaXRvQWNjZXNzVG9rZW4oeyBBY2Nlc3NUb2tlbjogYWNjZXNzVG9rZW4hIH0pO1xuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW5PYmogPSBuZXcgQ29nbml0b1JlZnJlc2hUb2tlbih7IFJlZnJlc2hUb2tlbjogcmVmcmVzaFRva2VuISB9KTtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBDb2duaXRvVXNlclNlc3Npb24oeyBJZFRva2VuOiBpZFRva2VuT2JqLCBBY2Nlc3NUb2tlbjogYWNjZXNzVG9rZW5PYmosIFJlZnJlc2hUb2tlbjogcmVmcmVzaFRva2VuT2JqIH0pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgc2Vzc2lvbiB0byB0aGUgQ29nbml0byB1c2VyXG4gICAgICAgIHRoaXMudXNlci5zZXRTaWduSW5Vc2VyU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnBvb2wuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgIHRoaXMudXNlcj8uZ2V0U2Vzc2lvbigoZTogRXJyb3IsIHNlc3Npb246IG51bGwpID0+IHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pKTtcbiAgICAgIHJldHVybiB0aGlzLnVzZXI7XG4gIH07XG5cbiAgcHVibGljIG1hZ2ljTGlua0F1dGhlbnRpY2F0ZShVc2VybmFtZTogc3RyaW5nLCBDaGFsbGVuZ2VSZXNwb25zZT86IHN0cmluZywgU2Vzc2lvbklkPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENoYWxsZW5nZVJlc3BvbnNlID8gQ29nbml0b1JlcXVlc3RUeXBlLk1hZ2ljTGluayA6IENvZ25pdG9SZXF1ZXN0VHlwZS5BdXRoZW50aWNhdGlvbjtcbiAgICBjb25zdCBkZXRhaWxzID0gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lIH0pO1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHsgVXNlcm5hbWUsIFBvb2w6IHRoaXMucG9vbCB9O1xuICAgIGlmKCF0aGlzLnVzZUxvY2FsU3RvcmFnZSkgZGF0YS5TdG9yYWdlID0gdGhpcy5zdG9yYWdlO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIgPSB0aGlzLnVzZXIgPz8gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHRoaXMudXNlci5zZXRBdXRoZW50aWNhdGlvbkZsb3dUeXBlKCdDVVNUT01fQVVUSCcpO1xuXG4gICAgLy9AdHMtaWdub3JlXG4gICAgaWYoU2Vzc2lvbklkKSB0aGlzLnVzZXIuU2Vzc2lvbiA9IFNlc3Npb25JZDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyggcmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PnZvaWQsIHJlamVjdDogKHJlc3VsdDogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0ge1xuICAgICAgICBvblN1Y2Nlc3M6IChzZXNzaW9uOiBDb2duaXRvVXNlclNlc3Npb24pID0+IHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgICAgIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkF1dGhlbnRpY2F0ZWQsIHNlc3Npb24sIHVzZXIsIHJlcXVlc3QgfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSk9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk5vdEF1dGhvcml6ZWQsIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pLFxuICAgICAgICBjdXN0b21DaGFsbGVuZ2U6IChjaGFsbGVuZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5NYWdpY0xpbmssIHVzZXIsIHJlcXVlc3QsIGNoYWxsZW5nZVBhcmFtZXRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBcbiAgICAgIGlmKENoYWxsZW5nZVJlc3BvbnNlKSB1c2VyLnNlbmRDdXN0b21DaGFsbGVuZ2VBbnN3ZXIoQ2hhbGxlbmdlUmVzcG9uc2UsIGhhbmRsZXIpO1xuICAgICAgZWxzZSB1c2VyLmluaXRpYXRlQXV0aChkZXRhaWxzLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXNza2V5QXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENoYWxsZW5nZVJlc3BvbnNlID8gQ29nbml0b1JlcXVlc3RUeXBlLlBhc3NrZXkgOiBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb247XG4gICAgY29uc3QgZGV0YWlscyA9IG5ldyBBdXRoZW50aWNhdGlvbkRldGFpbHMoeyBVc2VybmFtZSB9KTtcbiAgICBjb25zdCBkYXRhOmFueSA9IHsgVXNlcm5hbWUsIFBvb2w6IHRoaXMucG9vbCB9O1xuICAgIGlmKCF0aGlzLnVzZUxvY2FsU3RvcmFnZSkgZGF0YS5TdG9yYWdlID0gdGhpcy5zdG9yYWdlO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIgPSB0aGlzLnVzZXIgPz8gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHRoaXMudXNlci5zZXRBdXRoZW50aWNhdGlvbkZsb3dUeXBlKCdDVVNUT01fQVVUSCcpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKCByZXNvbHZlOiAocmVzdWx0OiBhbnkpID0+dm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB7XG4gICAgICAgIG9uU3VjY2VzczogKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICAgICAgICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KHRoaXMudXNlcik7XG4gICAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlciwgcmVxdWVzdCB9KVxuICAgICAgICB9LFxuICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KT0+IHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTm90QXV0aG9yaXplZCwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSksXG4gICAgICAgIGN1c3RvbUNoYWxsZW5nZTogKGNoYWxsZW5nZVBhcmFtZXRlcnM6IGFueSkgPT4gcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuUGFzc2tleSwgdXNlciwgcmVxdWVzdCwgY2hhbGxlbmdlUGFyYW1ldGVycyB9KVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgaWYoQ2hhbGxlbmdlUmVzcG9uc2UpIHVzZXIuc2VuZEN1c3RvbUNoYWxsZW5nZUFuc3dlcihDaGFsbGVuZ2VSZXNwb25zZSwgaGFuZGxlcik7XG4gICAgICBlbHNlIHVzZXIuaW5pdGlhdGVBdXRoKGRldGFpbHMsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG90cEF1dGhlbnRpY2F0ZShVc2VybmFtZTogc3RyaW5nLCBDaGFsbGVuZ2VSZXNwb25zZT86IHN0cmluZykge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDaGFsbGVuZ2VSZXNwb25zZSA/IENvZ25pdG9SZXF1ZXN0VHlwZS5PdHBDaGFsbGVuZ2UgOiBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb247XG4gICAgY29uc3QgZGV0YWlscyA9IG5ldyBBdXRoZW50aWNhdGlvbkRldGFpbHMoeyBVc2VybmFtZSB9KTtcbiAgICBjb25zdCBkYXRhOmFueSA9IHsgVXNlcm5hbWUsIFBvb2w6IHRoaXMucG9vbCB9O1xuICAgIGlmKCF0aGlzLnVzZUxvY2FsU3RvcmFnZSkgZGF0YS5TdG9yYWdlID0gdGhpcy5zdG9yYWdlO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIgPSB0aGlzLnVzZXIgPz8gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHRoaXMudXNlci5zZXRBdXRoZW50aWNhdGlvbkZsb3dUeXBlKCdDVVNUT01fQVVUSCcpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKCByZXNvbHZlOiAocmVzdWx0OiBhbnkpID0+dm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB7XG4gICAgICAgIG9uU3VjY2VzczogKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICAgICAgICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KHRoaXMudXNlcik7XG4gICAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlciwgcmVxdWVzdCB9KVxuICAgICAgICB9LFxuICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KT0+IHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTm90QXV0aG9yaXplZCwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSksXG4gICAgICAgIGN1c3RvbUNoYWxsZW5nZTogKGNoYWxsZW5nZVBhcmFtZXRlcnM6IGFueSkgPT4gcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuT3RwQ2hhbGxlbmdlLCB1c2VyLCByZXF1ZXN0LCBjaGFsbGVuZ2VQYXJhbWV0ZXJzIH0pXG4gICAgICB9O1xuICAgICAgXG4gICAgICBpZihDaGFsbGVuZ2VSZXNwb25zZSkgdXNlci5zZW5kQ3VzdG9tQ2hhbGxlbmdlQW5zd2VyKENoYWxsZW5nZVJlc3BvbnNlLCBoYW5kbGVyKTtcbiAgICAgIGVsc2UgdXNlci5pbml0aWF0ZUF1dGgoZGV0YWlscywgaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlckluZm8odXJsOiBzdHJpbmcpOiBQcm9taXNlPElDb2duaXRvVXNlckRhdGEgfCBIdHRwRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBgJHt1cmx9L29hdXRoMi91c2VySW5mb2BcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzKCk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChyZXF1ZXN0LCB7IGhlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogdHJ1ZSB9ICkucGlwZShcbiAgICAgICAgbWFwKChyZXN1bHQ6IGFueSkgPT4gXG4gICAgICAgICAgeyByZXR1cm4ge1xuICAgICAgICAgICAgZW1haWw6IHJlc3VsdC5lbWFpbCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiByZXN1bHQudXNlcm5hbWUsXG4gICAgICAgICAgICBzdWI6IHJlc3VsdC5zdWIsXG4gICAgICAgICAgICBmaXJzdE5hbWU6IHJlc3VsdC5naXZlbl9uYW1lLFxuICAgICAgICAgICAgbGFzdE5hbWU6IHJlc3VsdC5mYW1pbHlfbmFtZSxcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0aGlzLmFjY2Vzc1Rva2VuISxcbiAgICAgICAgICAgIGlkVG9rZW46IHRoaXMuaWRUb2tlbiFcbiAgICAgICAgICB9fVxuICAgICAgICApXG4gICAgICkudG9Qcm9taXNlKCk7XG5cbiAgICAvLywgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yUXVpZXRseSlcbiAgfVxuXG4gIHB1YmxpYyBzZXRVc2VyU2Vzc2lvbihzZXNzaW9uOiBDb2duaXRvVXNlclNlc3Npb24pIHtcbiAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Rm9ybShmb3JtOiBDb2duaXRvRm9ybVR5cGUgfCBudWxsKSB7XG4gICAgdGhpcy5mb3JtU291cmNlLm5leHQoZm9ybSk7XG4gIH1cblxuICBwdWJsaWMgbG9nb3V0KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgaWYodGhpcy51c2VyKSB7XG4gICAgICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChudWxsKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJlbXNfaWRfdG9rZW5cIik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiZW1zX2FjY2Vzc190b2tlblwiKTtcbiAgICAgICAgdGhpcy51c2VyLmdsb2JhbFNpZ25PdXQoe1xuICAgICAgICAgIG9uU3VjY2VzczogcmVzb2x2ZSxcbiAgICAgICAgICBvbkZhaWx1cmU6ICgpID0+IHtcbiAgICAgICAgICAgIC8vaWYgdXNlciBpcyBkaXNhYmxlZCwgbXVzdCBtYW51YWxseSBjbGVhciBsb2NhbCBzdG9yYWdlIChhcHBhcmVudGx5KVxuICAgICAgICAgICAgZm9yKGxldCBwcm9wIGluIGxvY2FsU3RvcmFnZSkge1xuICAgICAgICAgICAgICBpZihwcm9wLm1hdGNoKC9jb2duaXRvL2kpKSBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gIH1cblxuICBwdWJsaWMgYXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIFBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCBkZXRhaWxzID0gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lLCBQYXNzd29yZH0pO1xuICAgIGNvbnN0IGRhdGE6YW55ID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgaWYoIXRoaXMudXNlTG9jYWxTdG9yYWdlKSBkYXRhLlN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2U7XG4gICAgY29uc3QgdXNlciA9IG5ldyBDb2duaXRvVXNlcihkYXRhKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgICAgaWYoIXRoaXMudXNlcikgdGhpcy5hdXRoZW50aWNhdGVVc2VyKHVzZXIsIGRldGFpbHMsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGVsc2UgdGhpcy5nZXRVc2VyU2Vzc2lvbihyZXNvbHZlLCByZWplY3QpXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRmVkZXJhdGVkU2Vzc2lvbihJZFRva2VuOiBzdHJpbmcsIEFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQ29nbml0b1VzZXJTZXNzaW9uKHtcbiAgICAgICAgICBJZFRva2VuOiBuZXcgQ29nbml0b0lkVG9rZW4oeyBJZFRva2VuIH0pLFxuICAgICAgICAgIEFjY2Vzc1Rva2VuOiBuZXcgQ29nbml0b0FjY2Vzc1Rva2VuKHsgQWNjZXNzVG9rZW4gfSksXG4gICAgfSk7XG5cbiAgICBjb25zdCBVc2VybmFtZSA9IHNlc3Npb24uZ2V0SWRUb2tlbigpLnBheWxvYWRbXCJjb2duaXRvOnVzZXJuYW1lXCJdO1xuICAgIGNvbnN0IGRhdGE6YW55ID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgaWYoIXRoaXMudXNlTG9jYWxTdG9yYWdlKSBkYXRhLlN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2U7XG4gICAgdGhpcy51c2VyID0gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KHRoaXMudXNlcik7XG4gICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgY29tcGxldGVQYXNzd29yZFVwZGF0ZShwYXNzd29yZDogc3RyaW5nLCB1c2VyOiBDb2duaXRvVXNlciwgYXR0cmlidXRlczogYW55KTogUHJvbWlzZTxJQ29nbml0b1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENvZ25pdG9SZXF1ZXN0VHlwZS5OZXdVc2VyUGFzc3dvcmRSZXNldDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCkgPT4ge1xuICAgICAgdXNlci5jb21wbGV0ZU5ld1Bhc3N3b3JkQ2hhbGxlbmdlKHBhc3N3b3JkLCBhdHRyaWJ1dGVzLCB7XG4gICAgICAgIG9uU3VjY2VzczogKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodXNlcik7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gICAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlciwgcmVxdWVzdDogQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KSA9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk5vdEF1dGhvcml6ZWQsIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pXG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3RWZXJpZmljYXRpb25Db2RlKFVzZXJuYW1lOiBzdHJpbmcpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICBpZighdGhpcy51c2VMb2NhbFN0b3JhZ2UpIGRhdGEuU3RvcmFnZSA9IHRoaXMuc3RvcmFnZTtcbiAgICBjb25zdCB1c2VyID0gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmZvcmdvdFBhc3N3b3JkKHVzZXIpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0UGFzc3dvcmQodXNlcjogQ29nbml0b1VzZXIsIG9sZFBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLlBhc3N3b3JkUmVzZXQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpID0+IHtcbiAgICAgICB1c2VyLmNoYW5nZVBhc3N3b3JkKG9sZFBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVycm9yLCByZXN1bHQpID0+IHtcbiAgICAgICAgIGlmKGVycm9yKSByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkxpbWl0RXhjZWVkZWRFeGNlcHRpb24sIHVzZXIsIHJlcXVlc3QsIGVycm9yLCBzZXNzaW9uOiBudWxsfSk7XG4gICAgICAgICBlbHNlIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlN1Y2Nlc3MsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSk7XG4gICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3Jnb3RQYXNzd29yZCh1c2VyOiBDb2duaXRvVXNlcik6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuRm9yZ290UGFzc3dvcmQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpID0+IHtcbiAgICAgICB1c2VyLmZvcmdvdFBhc3N3b3JkKHtcbiAgICAgICAgIG9uU3VjY2VzczogKHJlc3BvbnNlOiBhbnkpID0+IHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlN1Y2Nlc3MsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSksXG4gICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KSA9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkxpbWl0RXhjZWVkZWRFeGNlcHRpb24sIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pXG4gICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maXJtUGFzc3dvcmQodXNlcjogQ29nbml0b1VzZXIsIGNvZGU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuQ29uZmlybVBhc3N3b3JkO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgdXNlci5jb25maXJtUGFzc3dvcmQoY29kZSwgcGFzc3dvcmQsIHtcbiAgICAgICAgIG9uU3VjY2VzczogKHJlc3BvbnNlOiBhbnkpID0+IHsgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuU3VjY2VzcywgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSB9LFxuICAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5JbnZhbGlkQ29kZSwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRoZW50aWNhdGVVc2VyKHVzZXI6IENvZ25pdG9Vc2VyLCBkZXRhaWxzOiBBdXRoZW50aWNhdGlvbkRldGFpbHMsIHJlc29sdmU6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCApIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIHVzZXIuYXV0aGVudGljYXRlVXNlcihkZXRhaWxzLCB7XG4gICAgICAgIG9uU3VjY2VzczogKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICAgICAgICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KHVzZXIpO1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlciwgcmVxdWVzdCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5Ob3RBdXRob3JpemVkLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgbmV3UGFzc3dvcmRSZXF1aXJlZDogKHVzZXJBdHRyaWJ1dGVzLCByZXF1aXJlZEF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHt0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlBhc3N3b3JkUmVzZXQsIHVzZXJBdHRyaWJ1dGVzLCByZXF1aXJlZEF0dHJpYnV0ZXMsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyU2Vzc2lvbihyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIHRoaXMudXNlciEuZ2V0U2Vzc2lvbigoZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBudWxsKSA9PiB7XG4gICAgICBpZihlcnJvcikgcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyOiB0aGlzLnVzZXIhLCByZXF1ZXN0LCBlcnJvciB9KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlcjogdGhpcy51c2VyISwgcmVxdWVzdCB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvclF1aWV0bHkoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG9mKGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgaGVhZGVycyhjdXN0b206IGFueSA9IHt9KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHRoaXMuYWNjZXNzVG9rZW4gPyBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlbn1gIDogXCJcIlxuICAgICAgIH07XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzKTtcbiAgfVxufVxuIl19
@@ -142,14 +142,17 @@ class CognitoService {
142
142
  this.formSource = new BehaviorSubject(null);
143
143
  this.form$ = this.formSource.asObservable();
144
144
  this.user = null;
145
+ this.storage = new EphemeralStorage();
146
+ this.useLocalStorage = true;
145
147
  }
146
- initialize(UserPoolId, ClientId, useLocalStorage, idToken, accessToken, refreshToken) {
148
+ initialize(UserPoolId, ClientId, useLocalStorage = true, idToken, accessToken, refreshToken) {
147
149
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
148
150
  //for federated users
149
151
  const access = (_c = (_b = (_a = params("access_token")) !== null && _a !== void 0 ? _a : accessToken) !== null && _b !== void 0 ? _b : localStorage.getItem("ems_access_token")) !== null && _c !== void 0 ? _c : null;
150
152
  const id = (_f = (_e = (_d = params("id_token")) !== null && _d !== void 0 ? _d : idToken) !== null && _e !== void 0 ? _e : localStorage.getItem("ems_id_token")) !== null && _f !== void 0 ? _f : null;
151
153
  const sessionId = (_g = params("sessionId")) !== null && _g !== void 0 ? _g : null;
152
154
  const otp = (_h = params("otp")) !== null && _h !== void 0 ? _h : null;
155
+ this.useLocalStorage = useLocalStorage;
153
156
  if (useLocalStorage && access && id) {
154
157
  localStorage.setItem("ems_access_token", access);
155
158
  localStorage.setItem("ems_id_token", id);
@@ -171,15 +174,13 @@ class CognitoService {
171
174
  setCognitoUserFromToken(UserPoolId, ClientId, idToken, accessToken, refreshToken) {
172
175
  var _a;
173
176
  console.log("using ephemeral storage");
174
- const Storage = new EphemeralStorage();
175
- this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage });
177
+ this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage: this.storage });
176
178
  if (idToken) {
177
179
  const decoded = jwtDecode(idToken);
178
- console.log(decoded);
179
180
  this.user = new CognitoUser({
180
181
  Username: decoded['cognito:username'],
181
182
  Pool: this.pool,
182
- Storage
183
+ Storage: this.storage
183
184
  });
184
185
  const idTokenObj = new CognitoIdToken({ IdToken: idToken });
185
186
  const accessTokenObj = new CognitoAccessToken({ AccessToken: accessToken });
@@ -201,6 +202,8 @@ class CognitoService {
201
202
  const request = ChallengeResponse ? CognitoRequestType.MagicLink : CognitoRequestType.Authentication;
202
203
  const details = new AuthenticationDetails({ Username });
203
204
  const data = { Username, Pool: this.pool };
205
+ if (!this.useLocalStorage)
206
+ data.Storage = this.storage;
204
207
  const user = this.user = (_a = this.user) !== null && _a !== void 0 ? _a : new CognitoUser(data);
205
208
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
206
209
  //@ts-ignore
@@ -229,6 +232,8 @@ class CognitoService {
229
232
  const request = ChallengeResponse ? CognitoRequestType.Passkey : CognitoRequestType.Authentication;
230
233
  const details = new AuthenticationDetails({ Username });
231
234
  const data = { Username, Pool: this.pool };
235
+ if (!this.useLocalStorage)
236
+ data.Storage = this.storage;
232
237
  const user = this.user = (_a = this.user) !== null && _a !== void 0 ? _a : new CognitoUser(data);
233
238
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
234
239
  return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
@@ -252,6 +257,8 @@ class CognitoService {
252
257
  const request = ChallengeResponse ? CognitoRequestType.OtpChallenge : CognitoRequestType.Authentication;
253
258
  const details = new AuthenticationDetails({ Username });
254
259
  const data = { Username, Pool: this.pool };
260
+ if (!this.useLocalStorage)
261
+ data.Storage = this.storage;
255
262
  const user = this.user = (_a = this.user) !== null && _a !== void 0 ? _a : new CognitoUser(data);
256
263
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
257
264
  return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
@@ -319,6 +326,8 @@ class CognitoService {
319
326
  authenticate(Username, Password) {
320
327
  const details = new AuthenticationDetails({ Username, Password });
321
328
  const data = { Username, Pool: this.pool };
329
+ if (!this.useLocalStorage)
330
+ data.Storage = this.storage;
322
331
  const user = new CognitoUser(data);
323
332
  return new Promise((resolve, reject) => {
324
333
  if (!this.user)
@@ -334,6 +343,8 @@ class CognitoService {
334
343
  });
335
344
  const Username = session.getIdToken().payload["cognito:username"];
336
345
  const data = { Username, Pool: this.pool };
346
+ if (!this.useLocalStorage)
347
+ data.Storage = this.storage;
337
348
  this.user = new CognitoUser(data);
338
349
  this.userSource.next(this.user);
339
350
  this.sessionSource.next(session);
@@ -354,6 +365,8 @@ class CognitoService {
354
365
  }
355
366
  requestVerificationCode(Username) {
356
367
  const data = { Username, Pool: this.pool };
368
+ if (!this.useLocalStorage)
369
+ data.Storage = this.storage;
357
370
  const user = new CognitoUser(data);
358
371
  return this.forgotPassword(user);
359
372
  }