ngx-histaff-alpha 1.6.1 → 1.6.3

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.
@@ -159,6 +159,24 @@ export class CorePermissionComponent extends BaseComponent {
159
159
  this.orgPermissionValue = orgIds;
160
160
  this.initialOrgPermissionValueJsonString = JSON.stringify({ objectId: this.objectId, orgIds: orgIds });
161
161
  }
162
+ resolveQueryFunctionActionPermissionList(httpResponse) {
163
+ if (httpResponse?.ok && httpResponse?.status === 200) {
164
+ const body = httpResponse.body;
165
+ if (body.statusCode === 200) {
166
+ // check functionId to be in elements of permission array
167
+ if (!!body?.innerBody?.length) {
168
+ const checkItem = body.innerBody[0];
169
+ if (!checkItem?.functionId) {
170
+ if (isDevMode() || this.appConfigService.DEBUG_ENABLED) {
171
+ this.alertService.error(`Each row of the list returned by ${this.queryFunctionActionPermissionListApiEndpoint} must have a field named functionId. Please check the Backend!`, noneAutoClosedAlertOptions);
172
+ }
173
+ }
174
+ }
175
+ this.corePermissionService.selectedObjectActionPermissions$.next(body.innerBody);
176
+ this.updateInitialActionPermissionValueJsonString(body.innerBody);
177
+ }
178
+ }
179
+ }
162
180
  ngAfterViewInit() {
163
181
  setTimeout(() => {
164
182
  this.loading = false;
@@ -217,22 +235,27 @@ export class CorePermissionComponent extends BaseComponent {
217
235
  })).subscribe(x => {
218
236
  this.loading = false;
219
237
  this.blockingLeftListInteraction$.next(false);
238
+ this.resolveQueryFunctionActionPermissionList(x[0]);
239
+ /*
220
240
  if (x[0].ok && x[0].status === 200) {
221
- const body = x[0].body;
222
- if (body.statusCode === 200) {
223
- // check functionId to be in elements of permission array
224
- if (!!body?.innerBody?.length) {
225
- const checkItem = body.innerBody[0];
226
- if (!checkItem?.functionId) {
227
- if (isDevMode() || this.appConfigService.DEBUG_ENABLED) {
228
- this.alertService.error(`Each row of the list returned by ${this.queryFunctionActionPermissionListApiEndpoint} must have a field named functionId. Please check the Backend!`, noneAutoClosedAlertOptions);
229
- }
230
- }
241
+ const body: IFormatedResponse = x[0].body;
242
+ if (body.statusCode === 200) {
243
+
244
+ // check functionId to be in elements of permission array
245
+ if (!!body?.innerBody?.length) {
246
+ const checkItem = body!.innerBody![0]
247
+ if (!checkItem?.functionId) {
248
+ if (isDevMode() || this.appConfigService.DEBUG_ENABLED) {
249
+ this.alertService.error(`Each row of the list returned by ${this.queryFunctionActionPermissionListApiEndpoint} must have a field named functionId. Please check the Backend!`, noneAutoClosedAlertOptions)
231
250
  }
232
- this.corePermissionService.selectedObjectActionPermissions$.next(body.innerBody);
233
- this.updateInitialActionPermissionValueJsonString(body.innerBody);
251
+ }
234
252
  }
253
+
254
+ this.corePermissionService.selectedObjectActionPermissions$.next(body.innerBody);
255
+ this.updateInitialActionPermissionValueJsonString(body.innerBody);
256
+ }
235
257
  }
258
+ */
236
259
  if (x[1].ok && x[1].status === 200) {
237
260
  const body1 = x[1].body;
238
261
  //this.responseService.resolve(body1);
@@ -301,16 +324,26 @@ export class CorePermissionComponent extends BaseComponent {
301
324
  const actionPayload = { userId: this.objectId, range: actionRange };
302
325
  const orgPayload = { userId: this.objectId, range: orgRange };
303
326
  this.loading = true;
327
+ this.blockingLeftListInteraction$.next(true);
304
328
  this.subscriptions.push(zip([
305
329
  this.appService.post(api.SYS_USER_FUNCTION_ACTION_PERMISSION_UPDATE_RANGE, actionPayload),
306
330
  this.appService.post(api.SYS_USER_ORG_PERMISSION_UPDATE_RANGE, orgPayload)
307
331
  ]).subscribe(x => {
308
332
  this.allowEdit = false;
309
333
  this.loading = false;
334
+ this.blockingLeftListInteraction$.next(false);
335
+ this.resolveQueryFunctionActionPermissionList(x[0]);
310
336
  if (x[0].ok && x[0].status === 200) {
311
337
  const body = x[0].body;
312
- //this.responseService.resolve(body);
313
338
  if (body.statusCode === 200) {
339
+ // reload action permissions for current objectId
340
+ this.loading = true;
341
+ this.blockingLeftListInteraction$.next(true);
342
+ this.subscriptions.push(this.appService.get(this.queryFunctionActionPermissionListApiEndpoint + '?objectId=' + this.objectId + "&useGroupIfEmpty=false").subscribe(x => {
343
+ this.loading = false;
344
+ this.blockingLeftListInteraction$.next(false);
345
+ this.resolveQueryFunctionActionPermissionList(x);
346
+ }));
314
347
  }
315
348
  }
316
349
  else {
@@ -352,16 +385,25 @@ export class CorePermissionComponent extends BaseComponent {
352
385
  const actionPayload = { groupId: this.objectId, range: actionRange };
353
386
  const orgPayload = { groupId: this.objectId, range: orgRange };
354
387
  this.loading = true;
388
+ this.blockingLeftListInteraction$.next(true);
355
389
  this.subscriptions.push(zip([
356
390
  this.appService.post(api.SYS_GROUP_FUNCTION_ACTION_PERMISSION_UPDATE_RANGE, actionPayload),
357
391
  this.appService.post(api.SYS_GROUP_ORG_PERMISSION_UPDATE_RANGE, orgPayload)
358
392
  ]).subscribe(x => {
359
- this.allowEdit = false;
360
393
  this.loading = false;
394
+ this.blockingLeftListInteraction$.next(false);
395
+ this.allowEdit = false;
361
396
  if (x[0].ok && x[0].status === 200) {
362
397
  const body = x[0].body;
363
- //this.responseService.resolve(body);
364
398
  if (body.statusCode === 200) {
399
+ // reload action permissions for current objectId
400
+ this.loading = true;
401
+ this.blockingLeftListInteraction$.next(true);
402
+ this.subscriptions.push(this.appService.get(this.queryFunctionActionPermissionListApiEndpoint + '?objectId=' + this.objectId + "&useGroupIfEmpty=false").subscribe(x => {
403
+ this.loading = false;
404
+ this.blockingLeftListInteraction$.next(false);
405
+ this.resolveQueryFunctionActionPermissionList(x);
406
+ }));
365
407
  }
366
408
  }
367
409
  else {
@@ -464,4 +506,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
464
506
  type: ViewChild,
465
507
  args: ['container']
466
508
  }] } });
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wZXJtaXNzaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBlcm1pc3Npb24vY29yZS1wZXJtaXNzaW9uL2NvcmUtcGVybWlzc2lvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1wZXJtaXNzaW9uL2NvcmUtcGVybWlzc2lvbi9jb3JlLXBlcm1pc3Npb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBYyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSx1Q0FBdUMsQ0FBQztBQUU1RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFjNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDNUksT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFB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O3dCQUNqQiw4QkFBOEI7d0JBQzlCLDBCQUEwQjt3QkFDMUIsd0JBQXdCO3FCQUN6QjtpWkFNUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ2UsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQUNHLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDSSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBpc0Rldk1vZGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB6aXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvYmFzZS1jb21wb25lbnQvYmFzZS9iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBFbnVtVHJhbnNsYXRlS2V5IH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRW51bUZpbHRlck9wZXJhdG9yLCBJRmlsdGVyT3BlcmF0b3IgfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVxdWVzdFwiO1xyXG5pbXBvcnQgeyBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbiwgSUNvcmVQYWdlTGlzdEVkaXRSb3V0aW5nIH0gZnJvbSBcIi4uLy4uLy4uL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgYXBpIH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgSUNvcmVUYWJsZUNvbHVtbkl0ZW0gfSBmcm9tIFwiLi4vLi4vY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbVwiO1xyXG5pbXBvcnQgeyBFbnVtQ29yZVRhYmxlUGlwZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUtdGFibGUvRW51bUNvcmVUYWJsZVBpcGVUeXBlXCI7XHJcblxyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFJhbmRvbUF2YXRhclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvcmFuZG9tLWF2YXRhci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvcmVQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvY29yZS1wZXJtaXNzaW9uL2NvcmUtcGVybWlzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2xpYnJhcmllcy9hbGVydC9hbGVydC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEb21TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2VcIjtcclxuXHJcbmltcG9ydCB7IElDb3JlTGlzdE9wdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvY29yZS1saXN0L2NvcmUtbGlzdC9jb3JlLWxpc3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uLy4uL2ludGVyZmFjZXMvSUZvcm1hdGVkUmVzcG9uc2VcIjtcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tIFwiLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvSUNvcmVCdXR0b25WTlNcIjtcclxuaW1wb3J0IHsgQ29yZU9yZ1RyZWVDb21wb25lbnQsIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUgfSBmcm9tIFwiLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tIFwiLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlXCI7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb3JlUGVybWlzc2lvbkFjdGlvbnNDb21wb25lbnQsIElDb3JlRnVuY3Rpb25BY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUtcGVybWlzc2lvbi1hY3Rpb25zL2NvcmUtcGVybWlzc2lvbi1hY3Rpb25zL2NvcmUtcGVybWlzc2lvbi1hY3Rpb25zLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ29yZVBhZ2VMaXN0Q29udGVudENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3JlLXBhZ2UtbGlzdC1jb250ZW50L2NvcmUtcGFnZS1saXN0LWNvbnRlbnQvY29yZS1wYWdlLWxpc3QtY29udGVudC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29yZVRhYnNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS10YWJzL2NvcmUtdGFicy9jb3JlLXRhYnMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvcmVQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb3JlQ29tcG9zaXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvcmVMaXN0TGF6eUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3JlLWxpc3QtbGF6eS9jb3JlLWxpc3QtbGF6eS9jb3JlLWxpc3QtbGF6eS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gXCIuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGVcIjtcclxuaW1wb3J0IHsgQ29yZVRhZ3NDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS10YWdzL2NvcmUtdGFncy9jb3JlLXRhZ3MuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvcmVDb25maXJtRGlhbG9nQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUtY29uZmlybS1kaWFsb2cvY29yZS1jb25maXJtLWRpYWxvZy9jb3JlLWNvbmZpcm0tZGlhbG9nLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb3JlQXBpUHJvZ3Jlc3NDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyUGVybWlzc2lvbk1vZGVsIHtcclxuICB1c2VySWQ6IHN0cmluZztcclxuICBmdW5jdGlvbklkOiBudW1iZXI7XHJcbiAgYWN0aW9uSWQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVXNlck9yZ1Blcm1pc3Npb25Nb2RlbCB7XHJcbiAgdXNlcklkOiBzdHJpbmc7XHJcbiAgb3JnSWQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR3JvdXBQZXJtaXNzaW9uTW9kZWwge1xyXG4gIGdyb3VwSWQ6IG51bWJlcjtcclxuICBmdW5jdGlvbklkOiBudW1iZXI7XHJcbiAgYWN0aW9uSWQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJR3JvdXBPcmdQZXJtaXNzaW9uTW9kZWwge1xyXG4gIGdyb3VwSWQ6IG51bWJlcjtcclxuICBvcmdJZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBFbnVtUGVybWlzc2lvbk9iamVjdFR5cGUge1xyXG4gIFVTRVIgPSAnVVNFUicsXHJcbiAgVVNFUl9HUk9VUCA9ICdVU0VSX0dST1VQJ1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtcGVybWlzc2lvbicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVPcmdUcmVlQ29tcG9uZW50LFxyXG4gICAgQ29yZVBhZ2VMaXN0Q29udGVudENvbXBvbmVudCxcclxuICAgIENvcmVUYWJzQ29tcG9uZW50LFxyXG4gICAgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnQsXHJcbiAgICBDb3JlQ29tcG9zaXRpb25Db21wb25lbnQsXHJcbiAgICBDb3JlTGlzdExhenlDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgQ29yZVRhZ3NDb21wb25lbnQsXHJcbiAgICBDb3JlUGVybWlzc2lvbkFjdGlvbnNDb21wb25lbnQsXHJcbiAgICBDb3JlQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcclxuICAgIENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtcGVybWlzc2lvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1wZXJtaXNzaW9uLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQZXJtaXNzaW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSB0eXBlITogRW51bVBlcm1pc3Npb25PYmplY3RUeXBlO1xyXG4gIEBWaWV3Q2hpbGQoJ2F2YXRhcicpIGF2YXRhciE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnYWN0aW9ucycpIGFjdGlvbnMhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGhlaWdodCE6IG51bWJlcjtcclxuICB0aXRsZSE6IEVudW1UcmFuc2xhdGVLZXlcclxuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwaXBlITogRW51bUNvcmVUYWJsZVBpcGVUeXBlO1xyXG5cclxuICBpc1Jvb3RVc2VyITogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICBjb21wb3NpdGlvbkhlaWdodCE6IG51bWJlcjtcclxuICBzZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByYXM6IFJhbmRvbUF2YXRhclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVQZXJtaXNzaW9uU2VydmljZTogQ29yZVBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBTZXJ2aWNlLFxyXG4gICAgcHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRvbVNlcnZpY2U6IERvbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKG1scyk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0QXZhdGFyID0gcmFzLmdldCgpO1xyXG4gICAgdGhpcy5jb3JlUGVybWlzc2lvblNlcnZpY2UuaW5zdGFuY2VOdW1iZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCd1cGVybWlzc2lvbicpKSB0aGlzLnR5cGUgPSBFbnVtUGVybWlzc2lvbk9iamVjdFR5cGUuVVNFUlxyXG4gICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnZ3JvdXBwZXJtaXNzaW9uJykpIHRoaXMudHlwZSA9IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSX0dST1VQXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMucm91dGUucGFyYW1NYXAuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIGNvbnN0IGlkID0geC5nZXQoJ2lkJyk7XHJcbiAgICAgICAgaWYgKCEhaWQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2JqZWN0SWQkLm5leHQoaWQpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSX0dST1VQKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2JqZWN0SWQkLm5leHQoTnVtYmVyKGlkKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQuc3Vic2NyaWJlKHggPT4gdGhpcy5pc1Jvb3RVc2VyID0geD8uaXNSb290KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgdGFiSGVhZGVyczogc3RyaW5nW10gPSBbXHJcbiAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX1VTRVJfR1JPVVBfUEVSTUlTU0lPTl9GVU5DVElPTl9UQUIsIC8vIG1ha2UgdXNlIG9mIGFuIGV4aXN0aW5nIGtleVxyXG4gICAgRW51bVRyYW5zbGF0ZUtleS5VSV9VU0VSX0dST1VQX1BFUk1JU1NJT05fT1JHX1VOSVRfVEFCLCAvLyBtYWtlIHVzZSBvZiBhbiBleGlzdGluZyBrZXlcclxuICBdXHJcblxyXG4gIG9iamVjdElkITogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIG9iamVjdElkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcbiAgb3JnSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gIG9iamVjdFF1ZXJ5TGlzdEFwaSE6IGFwaTtcclxuICBvYmplY3RMaXN0VGV4dEZpZWxkITogc3RyaW5nO1xyXG4gIHBlbmRpbmdBY3Rpb24hOiBhbnk7XHJcbiAgcGVuZGluZ09iamVjdElkITogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDtcclxuXHJcbiAgc2hvd1N0YXRlVHJhY2tlciE6IGJvb2xlYW47XHJcblxyXG4gIHVzZXJMaXN0VGV4dFBpcGU6IEVudW1Db3JlVGFibGVQaXBlVHlwZSA9IEVudW1Db3JlVGFibGVQaXBlVHlwZS5VUFBFUkNBU0U7XHJcblxyXG4gIHRyZWVBY2Nlc3Nvck1vZGU6IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUgPSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQ7XHJcblxyXG4gIHVzZXJPcHRpb25zOiBJQ29yZUxpc3RPcHRpb25bXSA9IFtdXHJcblxyXG4gIG91dGVyRmlsdGVyT3BlcmF0b3JzOiBJRmlsdGVyT3BlcmF0b3JbXSA9IFtcclxuICAgIHtcclxuICAgICAgZmllbGQ6ICd1c2VySWQnLFxyXG4gICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkVRVUFMXHJcbiAgICB9XHJcbiAgXVxyXG5cclxuICBsZWZ0QXBpRGVmaW5pdGlvbjogSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb24gPSB7XHJcbiAgICBxdWVyeUxpc3RSZWxhdGl2ZVBhdGg6IGFwaS5TWVNfVVNFUl9RVUVSWV9MSVNULFxyXG4gIH1cclxuXHJcbiAgYXBpRGVmaW5pdGlvbjogSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb24gPSB7XHJcbiAgICBxdWVyeUxpc3RSZWxhdGl2ZVBhdGg6IGFwaS5TWVNfVVNFUl9QRVJNSVNTSU9OX1FVRVJZX0xJU1QsXHJcbiAgfVxyXG5cclxuICBhbGxvd0VkaXQhOiBib29sZWFuO1xyXG5cclxuICBjb2x1bW5zOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdID0gW1xyXG4gICAge1xyXG4gICAgICBjYXB0aW9uOiBFbnVtVHJhbnNsYXRlS2V5LlVJX0VOVElUWV9GSUVMRF9DQVBUSU9OX0NPTU1PTl9JRCxcclxuICAgICAgZmllbGQ6ICdpZCcsXHJcbiAgICAgIGhpZGRlbjogdHJ1ZSxcclxuICAgICAgdHlwZTogJ251bWJlcicsXHJcbiAgICAgIGFsaWduOiAncmlnaHQnLFxyXG4gICAgICB3aWR0aDogMCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNhcHRpb246IEVudW1UcmFuc2xhdGVLZXkuVUlfRU5USVRZX0ZJRUxEX0NBUFRJT05fU1lTX01PRFVMRV9OQU1FQ09ERSxcclxuICAgICAgZmllbGQ6ICdtb2R1bGVOYW1lQ29kZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICB3aWR0aDogMTUwLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9FTlRJVFlfRklFTERfQ0FQVElPTl9TWVNfRlVOQ1RJT05fUEFUSCxcclxuICAgICAgZmllbGQ6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIHdpZHRoOiAxNTAsXHJcbiAgICB9LFxyXG4gICAgLypcclxuICAgIHtcclxuICAgICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9FTlRJVFlfRklFTERfQ0FQVElPTl9TWVNfRlVOQ1RJT05fR1JPVVBfTkFNRUNPREUsXHJcbiAgICAgIGZpZWxkOiAnZ3JvdXBOYW1lQ29kZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICB3aWR0aDogMTUwLFxyXG4gICAgfSxcclxuICAgICovXHJcbiAgICB7XHJcbiAgICAgIGNhcHRpb246IEVudW1UcmFuc2xhdGVLZXkuVUlfRU5USVRZX0ZJRUxEX0NBUFRJT05fU1lTX0ZVTkNUSU9OX05BTUVDT0RFLFxyXG4gICAgICBmaWVsZDogJ2Z1bmN0aW9uTmFtZUNvZGUnLFxyXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgYWxpZ246ICdsZWZ0JyxcclxuICAgICAgd2lkdGg6IDE1MCxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGNhcHRpb246IEVudW1UcmFuc2xhdGVLZXkuVUlfRU5USVRZX0ZJRUxEX0NBUFRJT05fU1lTX0FDVElPTl9OQU1FQ09ERSxcclxuICAgICAgZmllbGQ6ICdhcHBBY3Rpb25zJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIGhpZGVTZWFyY2hCb3g6IHRydWUsXHJcbiAgICAgIHdpZHRoOiAxMDAwLFxyXG4gICAgICB0ZW1wbGF0ZVJlZjogdGhpcy5hY3Rpb25zLFxyXG4gICAgICB0ZW1wbGF0ZVJlZkFsbG93RWRpdE9uUm93QWN0aXZlZDogdHJ1ZVxyXG4gICAgfSxcclxuICBdXHJcblxyXG4gIGRlZmF1bHRBdmF0YXIhOiBzdHJpbmc7XHJcbiAgdHJlZUhlaWdodCE6IG51bWJlcjtcclxuICBjb3JlUGVybWlzc2lvbkFjdGlvbnNIZWlnaHQhOiBudW1iZXI7XHJcbiAgZGlhbG9nSW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcblxyXG4gIGVkaXRSb3V0ZTogSUNvcmVQYWdlTGlzdEVkaXRSb3V0aW5nID0ge1xyXG4gICAgYXV4aWxpYXJ5OiAncG9wdXBBdXgnXHJcbiAgfVxyXG5cclxuICBhY3Rpb25QZXJtaXNzaW9uVmFsdWU6IElDb3JlRnVuY3Rpb25BY3Rpb25bXSA9IFtdXHJcbiAgaW5pdGlhbEFjdGlvblBlcm1pc3Npb25WYWx1ZUpzb25TdHJpbmchOiBzdHJpbmdcclxuICBjdXJyZW50QWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyE6IHN0cmluZ1xyXG4gIG9yZ1Blcm1pc3Npb25WYWx1ZTogbnVtYmVyW10gPSBbXVxyXG4gIGluaXRpYWxPcmdQZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nITogc3RyaW5nXHJcbiAgY3VycmVudE9yZ1Blcm1pc3Npb25WYWx1ZUpzb25TdHJpbmchOiBzdHJpbmdcclxuXHJcblxyXG4gIHF1ZXJ5RnVuY3Rpb25BY3Rpb25QZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ITogc3RyaW5nO1xyXG4gIHF1ZXJ5T3JnUGVybWlzc2lvbkxpc3RBcGlFbmRwb2ludCE6IHN0cmluZztcclxuXHJcbiAgYmxvY2tpbmdMZWZ0TGlzdEludGVyYWN0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICB1cGRhdGVJbml0aWFsQWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyhmdW5jdGlvbkFjdGlvbnM6IElDb3JlRnVuY3Rpb25BY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWFsQWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHsgb2JqZWN0SWQ6IHRoaXMub2JqZWN0SWQsIGFjdGlvbnM6IGZ1bmN0aW9uQWN0aW9ucyB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUluaXRpYWxPcmdQZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nKG9yZ0lkczogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIHRoaXMub3JnUGVybWlzc2lvblZhbHVlID0gb3JnSWRzO1xyXG4gICAgdGhpcy5pbml0aWFsT3JnUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHsgb2JqZWN0SWQ6IHRoaXMub2JqZWN0SWQsIG9yZ0lkczogb3JnSWRzIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLmZpZWxkID09PSAnYXBwQWN0aW9ucycpWzBdLnRlbXBsYXRlUmVmID0gdGhpcy5hY3Rpb25zO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25IZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZ1xyXG4gICAgICAgICAgdGhpcy5jb3JlUGVybWlzc2lvbkFjdGlvbnNIZWlnaHQgPSB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVUYWJzSGVhZGVyTGluZUhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmdcclxuICAgICAgICAgIHRoaXMudHJlZUhlaWdodCA9IHggLSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2VIZWFkZXJIZWlnaHQgLSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICogMiAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlVGFic0hlYWRlckxpbmVIZWlnaHRcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICBpZiAodGhpcy50eXBlID09PSBFbnVtUGVybWlzc2lvbk9iamVjdFR5cGUuVVNFUikge1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPTVBPTkVOVF9USVRMRV9VU0VSX1BFUk1JU1NJT05cclxuICAgICAgICB0aGlzLnBpcGUgPSBFbnVtQ29yZVRhYmxlUGlwZVR5cGUuTE9XRVJDQVNFXHJcbiAgICAgICAgdGhpcy5vYmplY3RRdWVyeUxpc3RBcGkgPSBhcGkuU1lTX1VTRVJfUVVFUllfTElTVFxyXG4gICAgICAgIHRoaXMucXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0QXBpRW5kcG9pbnQgPSBhcGkuU1lTX1VTRVJfUVVFUllfRlVOQ1RJT05fQUNUSU9OX1BFUk1JU1NJT05fTElTVFxyXG4gICAgICAgIHRoaXMucXVlcnlPcmdQZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ID0gYXBpLlNZU19VU0VSX1FVRVJZX1VTRVJfT1JHX1BFUk1JU1NJT05fTElTVFxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdFRleHRGaWVsZCA9IFwidXNlcm5hbWVcIlxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gRW51bVBlcm1pc3Npb25PYmplY3RUeXBlLlVTRVJfR1JPVVApIHtcclxuICAgICAgICB0aGlzLnRpdGxlID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01QT05FTlRfVElUTEVfVVNFUl9HUk9VUF9QRVJNSVNTSU9OXHJcbiAgICAgICAgdGhpcy5waXBlID0gRW51bUNvcmVUYWJsZVBpcGVUeXBlLlVQUEVSQ0FTRVxyXG4gICAgICAgIHRoaXMub2JqZWN0UXVlcnlMaXN0QXBpID0gYXBpLlNZU19HUk9VUF9RVUVSWV9MSVNUXHJcbiAgICAgICAgdGhpcy5xdWVyeUZ1bmN0aW9uQWN0aW9uUGVybWlzc2lvbkxpc3RBcGlFbmRwb2ludCA9IGFwaS5TWVNfR1JPVVBfUVVFUllfRlVOQ1RJT05fQUNUSU9OX1BFUk1JU1NJT05fTElTVF9HUlBDXHJcbiAgICAgICAgdGhpcy5xdWVyeU9yZ1Blcm1pc3Npb25MaXN0QXBpRW5kcG9pbnQgPSBhcGkuU1lTX0dST1VQX1FVRVJZX0dST1VQX09SR19QRVJNSVNTSU9OX0xJU1RcclxuICAgICAgICB0aGlzLm9iamVjdExpc3RUZXh0RmllbGQgPSBcIm5hbWVcIlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5tbHMudHJhbnMoJ1VJX1BFUk1JU1NJT05fT0JKRUNUX0lTX1VOREVGSU5FRCcsIHRoaXMubGFuZyksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcih4ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuICEheCAmJiAhIXguY29uZmlybWVkICYmICEheD8uaW5zdGFuY2VOdW1iZXJcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb25maXJtZWQkXCIsIHgpXHJcbiAgICAgICAgICBpZiAoISEheD8uY29uZmlybWVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMub2JqZWN0SWQgPSB0aGlzLm9iamVjdElkJC52YWx1ZSE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVzZXRTZXJ2aWNlKClcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuY29yZVBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkT2JqZWN0QWN0aW9uUGVybWlzc2lvbnMkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uUGVybWlzc2lvblZhbHVlID0geDtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLm9iamVjdElkJC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKHggPT4gISF4ICYmIHggIT09IDAgJiYgeCAhPT0gJzAnKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICBtYXAoeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29yZVBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkT2JqZWN0QWN0aW9uUGVybWlzc2lvbnMkLm5leHQoW10pO1xyXG4gICAgICAgICAgICB0aGlzLm9yZ0lkcyA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKG9iamVjdElkID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja2luZ0xlZnRMaXN0SW50ZXJhY3Rpb24kLm5leHQodHJ1ZSlcclxuICAgICAgICAgICAgaWYgKCEhIXRoaXMub2JqZWN0SWQpIHRoaXMub2JqZWN0SWQgPSBvYmplY3RJZCE7XHJcbiAgICAgICAgICAgIHJldHVybiB6aXAoW1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5xdWVyeUZ1bmN0aW9uQWN0aW9uUGVybWlzc2lvbkxpc3RBcGlFbmRwb2ludCArICc/b2JqZWN0SWQ9JyArIG9iamVjdElkICsgXCImdXNlR3JvdXBJZkVtcHR5PWZhbHNlXCIpLFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5xdWVyeU9yZ1Blcm1pc3Npb25MaXN0QXBpRW5kcG9pbnQgKyAnP29iamVjdElkPScgKyBvYmplY3RJZCArIFwiJnVzZUdyb3VwSWZFbXB0eT1mYWxzZVwiKV0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmJsb2NraW5nTGVmdExpc3RJbnRlcmFjdGlvbiQubmV4dChmYWxzZSlcclxuICAgICAgICAgIGlmICh4WzBdLm9rICYmIHhbMF0uc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4WzBdLmJvZHk7XHJcbiAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBjaGVjayBmdW5jdGlvbklkIHRvIGJlIGluIGVsZW1lbnRzIG9mIHBlcm1pc3Npb24gYXJyYXlcclxuICAgICAgICAgICAgICBpZiAoISFib2R5Py5pbm5lckJvZHk/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tJdGVtID0gYm9keSEuaW5uZXJCb2R5IVswXVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja0l0ZW0/LmZ1bmN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpIHx8IHRoaXMuYXBwQ29uZmlnU2VydmljZS5ERUJVR19FTkFCTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYEVhY2ggcm93IG9mIHRoZSBsaXN0IHJldHVybmVkIGJ5ICR7dGhpcy5xdWVyeUZ1bmN0aW9uQWN0aW9uUGVybWlzc2lvbkxpc3RBcGlFbmRwb2ludH0gbXVzdCBoYXZlIGEgZmllbGQgbmFtZWQgZnVuY3Rpb25JZC4gUGxlYXNlIGNoZWNrIHRoZSBCYWNrZW5kIWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZE9iamVjdEFjdGlvblBlcm1pc3Npb25zJC5uZXh0KGJvZHkuaW5uZXJCb2R5KTtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUluaXRpYWxBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nKGJvZHkuaW5uZXJCb2R5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHhbMV0ub2sgJiYgeFsxXS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5MTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4WzFdLmJvZHk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5yZXNwb25zZVNlcnZpY2UucmVzb2x2ZShib2R5MSk7XHJcbiAgICAgICAgICAgIGlmIChib2R5MS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLm9yZ0lkcyA9IGJvZHkxLmlubmVyQm9keTtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUluaXRpYWxPcmdQZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nKGJvZHkxLmlubmVyQm9keSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS16LWluZGV4JywgdGhpcy5kb21TZXJ2aWNlLmdldE1heFpJbmRleCgpKVxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgLyogV2UgZG8gbm90IHVwZGF0ZSB0aGUgZ3JpZCB3aGVuIHVzZXJJZCBjaGFuZ2VzICovXHJcbiAgb25PYmplY3RJZENoYW5nZShvYmplY3RJZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5vYmplY3RJZCA9IG9iamVjdElkO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW29iamVjdElkLnRvU3RyaW5nKCldLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50IH0pXHJcbiAgfVxyXG5cclxuICBvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soZTogSUNvcmVCdXR0b25WTlMpIHtcclxuICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElUOlxyXG4gICAgICAgIGlmICghIXRoaXMub2JqZWN0SWQpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dFZGl0ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyh0aGlzLm1scy50cmFucygnVUlfVVNFUl9QRVJNSVNTSU9OX05PX1VTRVJfU0VMRUNURUQnLCB0aGlzLmxhbmcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VQRVJNSVNTSU9OX0RFTEVURTpcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm9iamVjdElkKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuVUlfVVNFUl9QRVJNSVNTSU9OX1RPX0VESVRfUExFQVNFX1NFTEVDVF9BX1VTRVIpLCBhbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0pXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMKVxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKTtcclxuICAgICAgICAgICAgbGV0IGxpc3REZWxldGVJZHM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgICAgbGlzdERlbGV0ZUlkcy5wdXNoKHhbdGhpcy5jb2x1bW5zWzFdLmZpZWxkXSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KGxpc3REZWxldGVJZHMpXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9TQVZFOlxyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb25SYW5nZTogSVVzZXJQZXJtaXNzaW9uTW9kZWxbXSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5hY3Rpb25QZXJtaXNzaW9uVmFsdWUubWFwKGYgPT4ge1xyXG4gICAgICAgICAgICBmLmFsbG93ZWRBY3Rpb25JZHM/Lm1hcChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgYWN0aW9uUmFuZ2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMub2JqZWN0SWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uSWQ6IGYuZnVuY3Rpb25JZCxcclxuICAgICAgICAgICAgICAgIGFjdGlvbklkOiBpZFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc3Qgb3JnUmFuZ2U6IElVc2VyT3JnUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMub3JnSWRzLm1hcChvID0+IHtcclxuICAgICAgICAgICAgb3JnUmFuZ2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLm9iamVjdElkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgb3JnSWQ6IG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCBhY3Rpb25QYXlsb2FkID0geyB1c2VySWQ6IHRoaXMub2JqZWN0SWQsIHJhbmdlOiBhY3Rpb25SYW5nZSB9XHJcbiAgICAgICAgICBjb25zdCBvcmdQYXlsb2FkID0geyB1c2VySWQ6IHRoaXMub2JqZWN0SWQsIHJhbmdlOiBvcmdSYW5nZSB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblxyXG4gICAgICAgICAgICB6aXAoW1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KGFwaS5TWVNfVVNFUl9GVU5DVElPTl9BQ1RJT05fUEVSTUlTU0lPTl9VUERBVEVfUkFOR0UsIGFjdGlvblBheWxvYWQpLFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KGFwaS5TWVNfVVNFUl9PUkdfUEVSTUlTU0lPTl9VUERBVEVfUkFOR0UsIG9yZ1BheWxvYWQpXHJcbiAgICAgICAgICAgIF0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmFsbG93RWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmICh4WzBdLm9rICYmIHhbMF0uc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geFswXS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKEpTT04uc3RyaW5naWZ5KHhbMF0sIG51bGwsIDIpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoeFsxXS5vayAmJiB4WzFdLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5MTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4WzFdLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keTEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvZHkxLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5lcnJvcihKU09OLnN0cmluZ2lmeSh4WzBdLCBudWxsLCAyKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSX0dST1VQKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb25SYW5nZTogSUdyb3VwUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uUGVybWlzc2lvblZhbHVlLm1hcChmID0+IHtcclxuICAgICAgICAgICAgZi5hbGxvd2VkQWN0aW9uSWRzPy5tYXAoaWQgPT4ge1xyXG4gICAgICAgICAgICAgIGFjdGlvblJhbmdlLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBJZDogTnVtYmVyKHRoaXMub2JqZWN0SWQpLFxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25JZDogZi5mdW5jdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uSWQ6IGlkXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCBvcmdSYW5nZTogSUdyb3VwT3JnUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMub3JnSWRzLm1hcChvID0+IHtcclxuICAgICAgICAgICAgb3JnUmFuZ2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgZ3JvdXBJZDogTnVtYmVyKHRoaXMub2JqZWN0SWQpLFxyXG4gICAgICAgICAgICAgIG9yZ0lkOiBvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc3QgYWN0aW9uUGF5bG9hZCA9IHsgZ3JvdXBJZDogdGhpcy5vYmplY3RJZCwgcmFuZ2U6IGFjdGlvblJhbmdlIH1cclxuICAgICAgICAgIGNvbnN0IG9yZ1BheWxvYWQgPSB7IGdyb3VwSWQ6IHRoaXMub2JqZWN0SWQsIHJhbmdlOiBvcmdSYW5nZSB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblxyXG4gICAgICAgICAgICB6aXAoW1xyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KGFwaS5TWVNfR1JPVVBfRlVOQ1RJT05fQUNUSU9OX1BFUk1JU1NJT05fVVBEQVRFX1JBTkdFLCBhY3Rpb25QYXlsb2FkKSxcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdChhcGkuU1lTX0dST1VQX09SR19QRVJNSVNTSU9OX1VQREFURV9SQU5HRSwgb3JnUGF5bG9hZClcclxuICAgICAgICAgICAgXSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYgKHhbMF0ub2sgJiYgeFswXS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4WzBdLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoSlNPTi5zdHJpbmdpZnkoeFswXSwgbnVsbCwgMiksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh4WzFdLm9rICYmIHhbMV0uc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkxOiBJRm9ybWF0ZWRSZXNwb25zZSA9IHhbMV0uYm9keTtcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5yZXNwb25zZVNlcnZpY2UucmVzb2x2ZShib2R5MSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYm9keTEuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKEpTT04uc3RyaW5naWZ5KHhbMF0sIG51bGwsIDIpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25BY3Rpb25QZXJtaXNzaW9uVmFsdWVDaGFuZ2UoZTogSUNvcmVGdW5jdGlvbkFjdGlvbltdKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQWN0aW9uUGVybWlzc2lvblZhbHVlQ2hhbmdlXCIsIGUpO1xyXG4gIH1cclxuXHJcbiAgb25PcmdUcmVlSXRlbUNoZWNrKGU6IGFueSkge1xyXG4gICAgaWYgKCEhIXRoaXMuYWxsb3dFZGl0KSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8odGhpcy5tbHMudHJhbnMoJ1VJX1VTRVJfUEVSTUlTU0lPTl9UT19FRElUX1BMRUFTRV9TRUxFQ1RfQV9VU0VSX0FORF9DTElDS19USEVfUEVOQ0lMJywgdGhpcy5sYW5nKSwgYWxlcnRPcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDbG9zZVN0YXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93U3RhdGVUcmFja2VyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjYW5EZWFjdGl2YXRlKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBib29sZWFuIHtcclxuICAgIHRoaXMuY3VycmVudEFjdGlvblBlcm1pc3Npb25WYWx1ZUpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmFjdGlvblBlcm1pc3Npb25WYWx1ZSk7XHJcbiAgICBjb25zdCBjb25kaXRpb24xID0gdGhpcy5jdXJyZW50QWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyA9PT0gdGhpcy5pbml0aWFsQWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZztcclxuICAgIHRoaXMuY3VycmVudE9yZ1Blcm1pc3Npb25WYWx1ZUpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLm9yZ1Blcm1pc3Npb25WYWx1ZSk7XHJcbiAgICBjb25zdCBjb25kaXRpb24yID0gdGhpcy5jdXJyZW50T3JnUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyA9PT0gdGhpcy5pbml0aWFsT3JnUGVybWlzc2lvblZhbHVlSnNvblN0cmluZztcclxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGNvbmRpdGlvbjEgJiYgY29uZGl0aW9uMjtcclxuXHJcbiAgICByZXR1cm4gdHJ1ZTsgLy8gVE8gRE9cclxuXHJcbiAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9ICdDSEFOR0VTX1dJTExfQkVfTE9TVCc7XHJcbiAgICAgIHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgdGhpcy5zaG93U3RhdGVUcmFja2VyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQubmV4dCh7XHJcbiAgICAgICAgY29uZmlybWVkOiBmYWxzZSxcclxuICAgICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5kaWFsb2dJbnN0YW5jZU51bWJlclxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbmZpcm1EaWFsb2ckLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50aXRsZSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfVElUTEUpO1xyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQk9EWV9DSEFOR0VTX1dJTExfQkVfTE9TVCk7XHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DT05GSVJNKTtcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9HT19CQUNLX1RPX0VESVRfRk9STSk7XHJcbiAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuRGVhY3RpdmF0ZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICAgIHRoaXMuY29yZVBlcm1pc3Npb25TZXJ2aWNlLmluc3RhbmNlTnVtYmVyID0gbnVsbDtcclxuICAgIHRoaXMuY29yZVBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkT2JqZWN0JC5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5jb3JlUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRPYmplY3RBY3Rpb25QZXJtaXNzaW9ucyQubmV4dChbXSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXBlcm1pc3Npb24tY29udGFpbmVyXCIgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCArICdweCd9XCI+XHJcbiAgPGNvcmUtcGFnZS1oZWFkZXIgW3RpdGxlXT1cInRpdGxlXCIgKGJ1dHRvbkNsaWNrKT1cIm9uQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaygkZXZlbnQpXCI+PC9jb3JlLXBhZ2UtaGVhZGVyPlxyXG5cclxuICA8Y29yZS1jb21wb3NpdGlvbiBbbGVmdF09XCJ1c2VyU2Vla2VyXCIgW2xlZnRXaWR0aF09XCIyMDBcIiBbbWFpbl09XCJ0YWJzXCIgW2hlaWdodF09XCJjb21wb3NpdGlvbkhlaWdodFwiPlxyXG4gIDwvY29yZS1jb21wb3NpdGlvbj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInN0YXRlLXRyYWNrZXIgY29udGFpbmVyIGNvbnRhaW5lci1mbHVpZFwiICpuZ0lmPVwic2hvd1N0YXRlVHJhY2tlciAmJiBpc1Jvb3RVc2VyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGQtZmxleC1iZXR3ZWVuXCI+XHJcbiAgICAgIDxzcGFuPkNvbXBhcmU8L3NwYW4+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci14XCIgKGNsaWNrKT1cIm9uQ2xpY2tDbG9zZVN0YXRlKClcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAge3sgaW5pdGlhbEFjdGlvblBlcm1pc3Npb25WYWx1ZUpzb25TdHJpbmcgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgIHt7IGN1cnJlbnRBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgIHt7IGluaXRpYWxPcmdQZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICB7eyBjdXJyZW50T3JnUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3RhYnM+XHJcbiAgPGNvcmUtdGFicyBbaGVhZGVyc109XCJ0YWJIZWFkZXJzXCIgW2NvbnRlbnRzXT1cIlt0YWIxLCB0YWIyXVwiIFtoZWlnaHRdPVwiY29tcG9zaXRpb25IZWlnaHRcIj48L2NvcmUtdGFicz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGFiMT5cclxuICA8ZGl2IFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZyArICdweCcgfVwiPjwvZGl2PlxyXG4gIDxjb3JlLXBlcm1pc3Npb24tYWN0aW9ucyBbbG9hZGluZ109XCJsb2FkaW5nXCIgWyhuZ01vZGVsKV09XCJhY3Rpb25QZXJtaXNzaW9uVmFsdWVcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25BY3Rpb25QZXJtaXNzaW9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCIhISFhbGxvd0VkaXRcIiBbaGVpZ2h0XT1cImNvcmVQZXJtaXNzaW9uQWN0aW9uc0hlaWdodFwiPjwvY29yZS1wZXJtaXNzaW9uLWFjdGlvbnM+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3VzZXJTZWVrZXI+XHJcblxyXG4gIDxjb3JlLWxpc3QtbGF6eSBbcXVlcnlMaXN0QXBpXT1cIm9iamVjdFF1ZXJ5TGlzdEFwaVwiIFt0ZXh0RmllbGRdPVwib2JqZWN0TGlzdFRleHRGaWVsZFwiIFsobmdNb2RlbCldPVwib2JqZWN0SWRcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25PYmplY3RJZENoYW5nZSgkZXZlbnQpXCIgW2hlaWdodF09XCJjb21wb3NpdGlvbkhlaWdodFwiIFtibG9ja2luZ0ludGVyYWN0aW9uJF09XCJibG9ja2luZ0xlZnRMaXN0SW50ZXJhY3Rpb24kXCI+PC9jb3JlLWxpc3QtbGF6eT5cclxuXHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0YWIyPlxyXG4gIDxkaXYgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICsgJ3B4JyB9XCI+PC9kaXY+XHJcbiAgPGNvcmUtb3JnLXRyZWUgW2Z1bGxXaWR0aE1vZGVdPVwidHJ1ZVwiIFthY2Nlc3Nvck1vZGVdPVwidHJlZUFjY2Vzc29yTW9kZVwiIFsobmdNb2RlbCldPVwib3JnSWRzXCIgW2Rpc2FibGVkXT1cIiEhIWFsbG93RWRpdFwiXHJcbiAgICAoaXRlbUNsaWNrKT1cIm9uT3JnVHJlZUl0ZW1DaGVjaygkZXZlbnQpXCIgbmFtZT1cIm9yZ0lkc1wiIG5nRGVmYXVsdENvbnRyb2wgW2hlaWdodF09XCJ0cmVlSGVpZ2h0XCI+PC9jb3JlLW9yZy10cmVlPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
509
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wZXJtaXNzaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBlcm1pc3Npb24vY29yZS1wZXJtaXNzaW9uL2NvcmUtcGVybWlzc2lvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1wZXJtaXNzaW9uL2NvcmUtcGVybWlzc2lvbi9jb3JlLXBlcm1pc3Npb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFlLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFFLGVBQWUsRUFBYyxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBbUIsTUFBTSx1Q0FBdUMsQ0FBQztBQUU1RixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFjNUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDNUksT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFDN0gsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFB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QUNaLFdBQVcsa25CQUNYLG9CQUFvQixzT0FFcEIsaUJBQWlCLG1MQUNqQix1QkFBdUIsNkpBQ3ZCLHdCQUF3QiwwS0FDeEIscUJBQXFCLHFKQUdyQiw4QkFBOEI7OzJGQU9yQix1QkFBdUI7a0JBckJuQyxTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLDhCQUE4Qjt3QkFDOUIsMEJBQTBCO3dCQUMxQix3QkFBd0I7cUJBQ3pCO2laQU1RLElBQUk7c0JBQVosS0FBSztnQkFDZSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0csT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUNJLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGlzRGV2TW9kZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHppcCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uLy4uL2xpYnJhcmllcy9iYXNlLWNvbXBvbmVudC9iYXNlL2Jhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtRmlsdGVyT3BlcmF0b3IsIElGaWx0ZXJPcGVyYXRvciB9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL0lRdWVyeUxpc3RSZXF1ZXN0XCI7XHJcbmltcG9ydCB7IElDb3JlUGFnZUxpc3RBcGlEZWZpbml0aW9uLCBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmcgfSBmcm9tIFwiLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBhcGkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBJQ29yZVRhYmxlQ29sdW1uSXRlbSB9IGZyb20gXCIuLi8uLi9jb3JlLXRhYmxlL0lDb3JlVGFibGVDb2x1bW5JdGVtXCI7XHJcbmltcG9ydCB7IEVudW1Db3JlVGFibGVQaXBlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvY29yZS10YWJsZS9FbnVtQ29yZVRhYmxlUGlwZVR5cGVcIjtcclxuXHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUmFuZG9tQXZhdGFyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9yYW5kb20tYXZhdGFyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29yZVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2xpYnJhcmllcy9jb3JlLXBlcm1pc3Npb24vY29yZS1wZXJtaXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vbGlicmFyaWVzL2FsZXJ0L2FsZXJ0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZG9tLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZVwiO1xyXG5cclxuaW1wb3J0IHsgSUNvcmVMaXN0T3B0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2xpYnJhcmllcy9jb3JlLWxpc3QvY29yZS1saXN0L2NvcmUtbGlzdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZVwiO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvblZOUyB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOU1wiO1xyXG5pbXBvcnQgeyBDb3JlT3JnVHJlZUNvbXBvbmVudCwgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZSB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9FbnVtQ29yZUJ1dHRvblZOU0NvZGVcIjtcclxuaW1wb3J0IHsgYWxlcnRPcHRpb25zLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zXCI7XHJcbmltcG9ydCB7IENvcmVQZXJtaXNzaW9uQWN0aW9uc0NvbXBvbmVudCwgSUNvcmVGdW5jdGlvbkFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9saWJyYXJpZXMvY29yZS1wZXJtaXNzaW9uLWFjdGlvbnMvY29yZS1wZXJtaXNzaW9uLWFjdGlvbnMvY29yZS1wZXJtaXNzaW9uLWFjdGlvbnMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RDb250ZW50Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUtcGFnZS1saXN0LWNvbnRlbnQvY29yZS1wYWdlLWxpc3QtY29udGVudC9jb3JlLXBhZ2UtbGlzdC1jb250ZW50LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb3JlVGFic0NvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3JlLXRhYnMvY29yZS10YWJzL2NvcmUtdGFicy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29yZUxpc3RMYXp5Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUtbGlzdC1sYXp5L2NvcmUtbGlzdC1sYXp5L2NvcmUtbGlzdC1sYXp5LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSBcIi4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZVwiO1xyXG5pbXBvcnQgeyBDb3JlVGFnc0NvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3JlLXRhZ3MvY29yZS10YWdzL2NvcmUtdGFncy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29yZUNvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS1jb25maXJtLWRpYWxvZy9jb3JlLWNvbmZpcm0tZGlhbG9nL2NvcmUtY29uZmlybS1kaWFsb2cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb3JlLWFwaS1wcm9ncmVzcy9jb3JlLWFwaS1wcm9ncmVzcy9jb3JlLWFwaS1wcm9ncmVzcy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVzZXJQZXJtaXNzaW9uTW9kZWwge1xyXG4gIHVzZXJJZDogc3RyaW5nO1xyXG4gIGZ1bmN0aW9uSWQ6IG51bWJlcjtcclxuICBhY3Rpb25JZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVc2VyT3JnUGVybWlzc2lvbk1vZGVsIHtcclxuICB1c2VySWQ6IHN0cmluZztcclxuICBvcmdJZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cFBlcm1pc3Npb25Nb2RlbCB7XHJcbiAgZ3JvdXBJZDogbnVtYmVyO1xyXG4gIGZ1bmN0aW9uSWQ6IG51bWJlcjtcclxuICBhY3Rpb25JZDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElHcm91cE9yZ1Blcm1pc3Npb25Nb2RlbCB7XHJcbiAgZ3JvdXBJZDogbnVtYmVyO1xyXG4gIG9yZ0lkOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZSB7XHJcbiAgVVNFUiA9ICdVU0VSJyxcclxuICBVU0VSX0dST1VQID0gJ1VTRVJfR1JPVVAnXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1wZXJtaXNzaW9uJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZU9yZ1RyZWVDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUxpc3RDb250ZW50Q29tcG9uZW50LFxyXG4gICAgQ29yZVRhYnNDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCxcclxuICAgIENvcmVMaXN0TGF6eUNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBDb3JlVGFnc0NvbXBvbmVudCxcclxuICAgIENvcmVQZXJtaXNzaW9uQWN0aW9uc0NvbXBvbmVudCxcclxuICAgIENvcmVDb25maXJtRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgQ29yZUFwaVByb2dyZXNzQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1wZXJtaXNzaW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXBlcm1pc3Npb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVBlcm1pc3Npb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIHR5cGUhOiBFbnVtUGVybWlzc2lvbk9iamVjdFR5cGU7XHJcbiAgQFZpZXdDaGlsZCgnYXZhdGFyJykgYXZhdGFyITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdhY3Rpb25zJykgYWN0aW9ucyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIHRpdGxlITogRW51bVRyYW5zbGF0ZUtleVxyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHBpcGUhOiBFbnVtQ29yZVRhYmxlUGlwZVR5cGU7XHJcblxyXG4gIGlzUm9vdFVzZXIhOiBib29sZWFuIHwgdW5kZWZpbmVkO1xyXG4gIGNvbXBvc2l0aW9uSGVpZ2h0ITogbnVtYmVyO1xyXG4gIHNlbGVjdGVkRGF0YTogYW55W10gPSBbXTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBvdmVycmlkZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJhczogUmFuZG9tQXZhdGFyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVBlcm1pc3Npb25TZXJ2aWNlOiBDb3JlUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZG9tU2VydmljZTogRG9tU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIobWxzKTtcclxuXHJcbiAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSByYXMuZ2V0KCk7XHJcbiAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5pbnN0YW5jZU51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ3VwZXJtaXNzaW9uJykpIHRoaXMudHlwZSA9IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSXHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdncm91cHBlcm1pc3Npb24nKSkgdGhpcy50eXBlID0gRW51bVBlcm1pc3Npb25PYmplY3RUeXBlLlVTRVJfR1JPVVBcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5yb3V0ZS5wYXJhbU1hcC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSB4LmdldCgnaWQnKTtcclxuICAgICAgICBpZiAoISFpZCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gRW51bVBlcm1pc3Npb25PYmplY3RUeXBlLlVTRVIpIHtcclxuICAgICAgICAgICAgdGhpcy5vYmplY3RJZCQubmV4dChpZClcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID0gRW51bVBlcm1pc3Npb25PYmplY3RUeXBlLlVTRVJfR1JPVVApIHtcclxuICAgICAgICAgICAgdGhpcy5vYmplY3RJZCQubmV4dChOdW1iZXIoaWQpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5kYXRhJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmlzUm9vdFVzZXIgPSB4Py5pc1Jvb3QpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICB0YWJIZWFkZXJzOiBzdHJpbmdbXSA9IFtcclxuICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfVVNFUl9HUk9VUF9QRVJNSVNTSU9OX0ZVTkNUSU9OX1RBQiwgLy8gbWFrZSB1c2Ugb2YgYW4gZXhpc3Rpbmcga2V5XHJcbiAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX1VTRVJfR1JPVVBfUEVSTUlTU0lPTl9PUkdfVU5JVF9UQUIsIC8vIG1ha2UgdXNlIG9mIGFuIGV4aXN0aW5nIGtleVxyXG4gIF1cclxuXHJcbiAgb2JqZWN0SWQhOiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgb2JqZWN0SWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudW1iZXIgfCBudWxsPihudWxsKTtcclxuICBvcmdJZHM6IG51bWJlcltdID0gW107XHJcbiAgb2JqZWN0UXVlcnlMaXN0QXBpITogYXBpO1xyXG4gIG9iamVjdExpc3RUZXh0RmllbGQhOiBzdHJpbmc7XHJcbiAgcGVuZGluZ0FjdGlvbiE6IGFueTtcclxuICBwZW5kaW5nT2JqZWN0SWQhOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsO1xyXG5cclxuICBzaG93U3RhdGVUcmFja2VyITogYm9vbGVhbjtcclxuXHJcbiAgdXNlckxpc3RUZXh0UGlwZTogRW51bUNvcmVUYWJsZVBpcGVUeXBlID0gRW51bUNvcmVUYWJsZVBpcGVUeXBlLlVQUEVSQ0FTRTtcclxuXHJcbiAgdHJlZUFjY2Vzc29yTW9kZTogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDtcclxuXHJcbiAgdXNlck9wdGlvbnM6IElDb3JlTGlzdE9wdGlvbltdID0gW11cclxuXHJcbiAgb3V0ZXJGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gW1xyXG4gICAge1xyXG4gICAgICBmaWVsZDogJ3VzZXJJZCcsXHJcbiAgICAgIG9wZXJhdG9yOiBFbnVtRmlsdGVyT3BlcmF0b3IuRVFVQUxcclxuICAgIH1cclxuICBdXHJcblxyXG4gIGxlZnRBcGlEZWZpbml0aW9uOiBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbiA9IHtcclxuICAgIHF1ZXJ5TGlzdFJlbGF0aXZlUGF0aDogYXBpLlNZU19VU0VSX1FVRVJZX0xJU1QsXHJcbiAgfVxyXG5cclxuICBhcGlEZWZpbml0aW9uOiBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbiA9IHtcclxuICAgIHF1ZXJ5TGlzdFJlbGF0aXZlUGF0aDogYXBpLlNZU19VU0VSX1BFUk1JU1NJT05fUVVFUllfTElTVCxcclxuICB9XHJcblxyXG4gIGFsbG93RWRpdCE6IGJvb2xlYW47XHJcblxyXG4gIGNvbHVtbnM6IElDb3JlVGFibGVDb2x1bW5JdGVtW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGNhcHRpb246IEVudW1UcmFuc2xhdGVLZXkuVUlfRU5USVRZX0ZJRUxEX0NBUFRJT05fQ09NTU9OX0lELFxyXG4gICAgICBmaWVsZDogJ2lkJyxcclxuICAgICAgaGlkZGVuOiB0cnVlLFxyXG4gICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgYWxpZ246ICdyaWdodCcsXHJcbiAgICAgIHdpZHRoOiAwLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9FTlRJVFlfRklFTERfQ0FQVElPTl9TWVNfTU9EVUxFX05BTUVDT0RFLFxyXG4gICAgICBmaWVsZDogJ21vZHVsZU5hbWVDb2RlJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIHdpZHRoOiAxNTAsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBjYXB0aW9uOiBFbnVtVHJhbnNsYXRlS2V5LlVJX0VOVElUWV9GSUVMRF9DQVBUSU9OX1NZU19GVU5DVElPTl9QQVRILFxyXG4gICAgICBmaWVsZDogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgYWxpZ246ICdsZWZ0JyxcclxuICAgICAgd2lkdGg6IDE1MCxcclxuICAgIH0sXHJcbiAgICAvKlxyXG4gICAge1xyXG4gICAgICBjYXB0aW9uOiBFbnVtVHJhbnNsYXRlS2V5LlVJX0VOVElUWV9GSUVMRF9DQVBUSU9OX1NZU19GVU5DVElPTl9HUk9VUF9OQU1FQ09ERSxcclxuICAgICAgZmllbGQ6ICdncm91cE5hbWVDb2RlJyxcclxuICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIHdpZHRoOiAxNTAsXHJcbiAgICB9LFxyXG4gICAgKi9cclxuICAgIHtcclxuICAgICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9FTlRJVFlfRklFTERfQ0FQVElPTl9TWVNfRlVOQ1RJT05fTkFNRUNPREUsXHJcbiAgICAgIGZpZWxkOiAnZnVuY3Rpb25OYW1lQ29kZScsXHJcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICBhbGlnbjogJ2xlZnQnLFxyXG4gICAgICB3aWR0aDogMTUwLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9FTlRJVFlfRklFTERfQ0FQVElPTl9TWVNfQUNUSU9OX05BTUVDT0RFLFxyXG4gICAgICBmaWVsZDogJ2FwcEFjdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgYWxpZ246ICdsZWZ0JyxcclxuICAgICAgaGlkZVNlYXJjaEJveDogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDEwMDAsXHJcbiAgICAgIHRlbXBsYXRlUmVmOiB0aGlzLmFjdGlvbnMsXHJcbiAgICAgIHRlbXBsYXRlUmVmQWxsb3dFZGl0T25Sb3dBY3RpdmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gIF1cclxuXHJcbiAgZGVmYXVsdEF2YXRhciE6IHN0cmluZztcclxuICB0cmVlSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGNvcmVQZXJtaXNzaW9uQWN0aW9uc0hlaWdodCE6IG51bWJlcjtcclxuICBkaWFsb2dJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuXHJcbiAgZWRpdFJvdXRlOiBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmcgPSB7XHJcbiAgICBhdXhpbGlhcnk6ICdwb3B1cEF1eCdcclxuICB9XHJcblxyXG4gIGFjdGlvblBlcm1pc3Npb25WYWx1ZTogSUNvcmVGdW5jdGlvbkFjdGlvbltdID0gW11cclxuICBpbml0aWFsQWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyE6IHN0cmluZ1xyXG4gIGN1cnJlbnRBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nITogc3RyaW5nXHJcbiAgb3JnUGVybWlzc2lvblZhbHVlOiBudW1iZXJbXSA9IFtdXHJcbiAgaW5pdGlhbE9yZ1Blcm1pc3Npb25WYWx1ZUpzb25TdHJpbmchOiBzdHJpbmdcclxuICBjdXJyZW50T3JnUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyE6IHN0cmluZ1xyXG5cclxuXHJcbiAgcXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0QXBpRW5kcG9pbnQhOiBzdHJpbmc7XHJcbiAgcXVlcnlPcmdQZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ITogc3RyaW5nO1xyXG5cclxuICBibG9ja2luZ0xlZnRMaXN0SW50ZXJhY3Rpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHVwZGF0ZUluaXRpYWxBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nKGZ1bmN0aW9uQWN0aW9uczogSUNvcmVGdW5jdGlvbkFjdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLmluaXRpYWxBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoeyBvYmplY3RJZDogdGhpcy5vYmplY3RJZCwgYWN0aW9uczogZnVuY3Rpb25BY3Rpb25zIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW5pdGlhbE9yZ1Blcm1pc3Npb25WYWx1ZUpzb25TdHJpbmcob3JnSWRzOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5vcmdQZXJtaXNzaW9uVmFsdWUgPSBvcmdJZHM7XHJcbiAgICB0aGlzLmluaXRpYWxPcmdQZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoeyBvYmplY3RJZDogdGhpcy5vYmplY3RJZCwgb3JnSWRzOiBvcmdJZHMgfSk7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlUXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0KGh0dHBSZXNwb25zZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoaHR0cFJlc3BvbnNlPy5vayAmJiBodHRwUmVzcG9uc2U/LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0gaHR0cFJlc3BvbnNlLmJvZHk7XHJcbiAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAvLyBjaGVjayBmdW5jdGlvbklkIHRvIGJlIGluIGVsZW1lbnRzIG9mIHBlcm1pc3Npb24gYXJyYXlcclxuICAgICAgICBpZiAoISFib2R5Py5pbm5lckJvZHk/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgY2hlY2tJdGVtID0gYm9keSEuaW5uZXJCb2R5IVswXVxyXG4gICAgICAgICAgaWYgKCFjaGVja0l0ZW0/LmZ1bmN0aW9uSWQpIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpIHx8IHRoaXMuYXBwQ29uZmlnU2VydmljZS5ERUJVR19FTkFCTEVEKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYEVhY2ggcm93IG9mIHRoZSBsaXN0IHJldHVybmVkIGJ5ICR7dGhpcy5xdWVyeUZ1bmN0aW9uQWN0aW9uUGVybWlzc2lvbkxpc3RBcGlFbmRwb2ludH0gbXVzdCBoYXZlIGEgZmllbGQgbmFtZWQgZnVuY3Rpb25JZC4gUGxlYXNlIGNoZWNrIHRoZSBCYWNrZW5kIWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZE9iamVjdEFjdGlvblBlcm1pc3Npb25zJC5uZXh0KGJvZHkuaW5uZXJCb2R5KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUluaXRpYWxBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nKGJvZHkuaW5uZXJCb2R5KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy5maWVsZCA9PT0gJ2FwcEFjdGlvbnMnKVswXS50ZW1wbGF0ZVJlZiA9IHRoaXMuYWN0aW9ucztcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0geCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmdcclxuICAgICAgICAgIHRoaXMuY29yZVBlcm1pc3Npb25BY3Rpb25zSGVpZ2h0ID0gdGhpcy5jb21wb3NpdGlvbkhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlVGFic0hlYWRlckxpbmVIZWlnaHQgLSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nXHJcbiAgICAgICAgICB0aGlzLnRyZWVIZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZyAqIDIgLSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVRhYnNIZWFkZXJMaW5lSGVpZ2h0XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gRW51bVBlcm1pc3Npb25PYmplY3RUeXBlLlVTRVIpIHtcclxuICAgICAgICB0aGlzLnRpdGxlID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01QT05FTlRfVElUTEVfVVNFUl9QRVJNSVNTSU9OXHJcbiAgICAgICAgdGhpcy5waXBlID0gRW51bUNvcmVUYWJsZVBpcGVUeXBlLkxPV0VSQ0FTRVxyXG4gICAgICAgIHRoaXMub2JqZWN0UXVlcnlMaXN0QXBpID0gYXBpLlNZU19VU0VSX1FVRVJZX0xJU1RcclxuICAgICAgICB0aGlzLnF1ZXJ5RnVuY3Rpb25BY3Rpb25QZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ID0gYXBpLlNZU19VU0VSX1FVRVJZX0ZVTkNUSU9OX0FDVElPTl9QRVJNSVNTSU9OX0xJU1RcclxuICAgICAgICB0aGlzLnF1ZXJ5T3JnUGVybWlzc2lvbkxpc3RBcGlFbmRwb2ludCA9IGFwaS5TWVNfVVNFUl9RVUVSWV9VU0VSX09SR19QRVJNSVNTSU9OX0xJU1RcclxuICAgICAgICB0aGlzLm9iamVjdExpc3RUZXh0RmllbGQgPSBcInVzZXJuYW1lXCJcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSX0dST1VQKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IEVudW1UcmFuc2xhdGVLZXkuVUlfQ09NUE9ORU5UX1RJVExFX1VTRVJfR1JPVVBfUEVSTUlTU0lPTlxyXG4gICAgICAgIHRoaXMucGlwZSA9IEVudW1Db3JlVGFibGVQaXBlVHlwZS5VUFBFUkNBU0VcclxuICAgICAgICB0aGlzLm9iamVjdFF1ZXJ5TGlzdEFwaSA9IGFwaS5TWVNfR1JPVVBfUVVFUllfTElTVFxyXG4gICAgICAgIHRoaXMucXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0QXBpRW5kcG9pbnQgPSBhcGkuU1lTX0dST1VQX1FVRVJZX0ZVTkNUSU9OX0FDVElPTl9QRVJNSVNTSU9OX0xJU1RfR1JQQ1xyXG4gICAgICAgIHRoaXMucXVlcnlPcmdQZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ID0gYXBpLlNZU19HUk9VUF9RVUVSWV9HUk9VUF9PUkdfUEVSTUlTU0lPTl9MSVNUXHJcbiAgICAgICAgdGhpcy5vYmplY3RMaXN0VGV4dEZpZWxkID0gXCJuYW1lXCJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdVSV9QRVJNSVNTSU9OX09CSkVDVF9JU19VTkRFRklORUQnLCB0aGlzLmxhbmcpLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb25maXJtZWQkLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoeCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXggJiYgISF4LmNvbmZpcm1lZCAmJiAhIXg/Lmluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29uZmlybWVkJFwiLCB4KVxyXG4gICAgICAgICAgaWYgKCEhIXg/LmNvbmZpcm1lZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9iamVjdElkID0gdGhpcy5vYmplY3RJZCQudmFsdWUhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlc2V0U2VydmljZSgpXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZE9iamVjdEFjdGlvblBlcm1pc3Npb25zJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFjdGlvblBlcm1pc3Npb25WYWx1ZSA9IHg7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5vYmplY3RJZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcih4ID0+ICEheCAmJiB4ICE9PSAwICYmIHggIT09ICcwJyksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZE9iamVjdEFjdGlvblBlcm1pc3Npb25zJC5uZXh0KFtdKTtcclxuICAgICAgICAgICAgdGhpcy5vcmdJZHMgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuIHg7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHN3aXRjaE1hcChvYmplY3RJZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tpbmdMZWZ0TGlzdEludGVyYWN0aW9uJC5uZXh0KHRydWUpXHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLm9iamVjdElkKSB0aGlzLm9iamVjdElkID0gb2JqZWN0SWQhO1xyXG4gICAgICAgICAgICByZXR1cm4gemlwKFtcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMucXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0QXBpRW5kcG9pbnQgKyAnP29iamVjdElkPScgKyBvYmplY3RJZCArIFwiJnVzZUdyb3VwSWZFbXB0eT1mYWxzZVwiKSxcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMucXVlcnlPcmdQZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ICsgJz9vYmplY3RJZD0nICsgb2JqZWN0SWQgKyBcIiZ1c2VHcm91cElmRW1wdHk9ZmFsc2VcIildKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ibG9ja2luZ0xlZnRMaXN0SW50ZXJhY3Rpb24kLm5leHQoZmFsc2UpXHJcblxyXG4gICAgICAgICAgdGhpcy5yZXNvbHZlUXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0KHhbMF0pO1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBpZiAoeFswXS5vayAmJiB4WzBdLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geFswXS5ib2R5O1xyXG4gICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gY2hlY2sgZnVuY3Rpb25JZCB0byBiZSBpbiBlbGVtZW50cyBvZiBwZXJtaXNzaW9uIGFycmF5XHJcbiAgICAgICAgICAgICAgaWYgKCEhYm9keT8uaW5uZXJCb2R5Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrSXRlbSA9IGJvZHkhLmlubmVyQm9keSFbMF1cclxuICAgICAgICAgICAgICAgIGlmICghY2hlY2tJdGVtPy5mdW5jdGlvbklkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSB8fCB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuREVCVUdfRU5BQkxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGBFYWNoIHJvdyBvZiB0aGUgbGlzdCByZXR1cm5lZCBieSAke3RoaXMucXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0QXBpRW5kcG9pbnR9IG11c3QgaGF2ZSBhIGZpZWxkIG5hbWVkIGZ1bmN0aW9uSWQuIFBsZWFzZSBjaGVjayB0aGUgQmFja2VuZCFgLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jb3JlUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRPYmplY3RBY3Rpb25QZXJtaXNzaW9ucyQubmV4dChib2R5LmlubmVyQm9keSk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbml0aWFsQWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyhib2R5LmlubmVyQm9keSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgaWYgKHhbMV0ub2sgJiYgeFsxXS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBib2R5MTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4WzFdLmJvZHk7XHJcbiAgICAgICAgICAgIC8vdGhpcy5yZXNwb25zZVNlcnZpY2UucmVzb2x2ZShib2R5MSk7XHJcbiAgICAgICAgICAgIGlmIChib2R5MS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLm9yZ0lkcyA9IGJvZHkxLmlubmVyQm9keTtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUluaXRpYWxPcmdQZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nKGJvZHkxLmlubmVyQm9keSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS16LWluZGV4JywgdGhpcy5kb21TZXJ2aWNlLmdldE1heFpJbmRleCgpKVxyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgLyogV2UgZG8gbm90IHVwZGF0ZSB0aGUgZ3JpZCB3aGVuIHVzZXJJZCBjaGFuZ2VzICovXHJcbiAgb25PYmplY3RJZENoYW5nZShvYmplY3RJZDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5vYmplY3RJZCA9IG9iamVjdElkO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW29iamVjdElkLnRvU3RyaW5nKCldLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50IH0pXHJcbiAgfVxyXG5cclxuICBvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soZTogSUNvcmVCdXR0b25WTlMpIHtcclxuICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElUOlxyXG4gICAgICAgIGlmICghIXRoaXMub2JqZWN0SWQpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dFZGl0ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyh0aGlzLm1scy50cmFucygnVUlfVVNFUl9QRVJNSVNTSU9OX05PX1VTRVJfU0VMRUNURUQnLCB0aGlzLmxhbmcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VQRVJNSVNTSU9OX0RFTEVURTpcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm9iamVjdElkKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuVUlfVVNFUl9QRVJNSVNTSU9OX1RPX0VESVRfUExFQVNFX1NFTEVDVF9BX1VTRVIpLCBhbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSlcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKTtcclxuICAgICAgICAgIGxldCBsaXN0RGVsZXRlSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgbGlzdERlbGV0ZUlkcy5wdXNoKHhbdGhpcy5jb2x1bW5zWzFdLmZpZWxkXSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm9ybWF0aW9uTGluZXMkLm5leHQobGlzdERlbGV0ZUlkcylcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9TQVZFOlxyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb25SYW5nZTogSVVzZXJQZXJtaXNzaW9uTW9kZWxbXSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5hY3Rpb25QZXJtaXNzaW9uVmFsdWUubWFwKGYgPT4ge1xyXG4gICAgICAgICAgICBmLmFsbG93ZWRBY3Rpb25JZHM/Lm1hcChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgYWN0aW9uUmFuZ2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMub2JqZWN0SWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uSWQ6IGYuZnVuY3Rpb25JZCxcclxuICAgICAgICAgICAgICAgIGFjdGlvbklkOiBpZFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc3Qgb3JnUmFuZ2U6IElVc2VyT3JnUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMub3JnSWRzLm1hcChvID0+IHtcclxuICAgICAgICAgICAgb3JnUmFuZ2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgdXNlcklkOiB0aGlzLm9iamVjdElkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgb3JnSWQ6IG9cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCBhY3Rpb25QYXlsb2FkID0geyB1c2VySWQ6IHRoaXMub2JqZWN0SWQsIHJhbmdlOiBhY3Rpb25SYW5nZSB9XHJcbiAgICAgICAgICBjb25zdCBvcmdQYXlsb2FkID0geyB1c2VySWQ6IHRoaXMub2JqZWN0SWQsIHJhbmdlOiBvcmdSYW5nZSB9XHJcblxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYmxvY2tpbmdMZWZ0TGlzdEludGVyYWN0aW9uJC5uZXh0KHRydWUpXHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHJcbiAgICAgICAgICAgIHppcChbXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoYXBpLlNZU19VU0VSX0ZVTkNUSU9OX0FDVElPTl9QRVJNSVNTSU9OX1VQREFURV9SQU5HRSwgYWN0aW9uUGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoYXBpLlNZU19VU0VSX09SR19QRVJNSVNTSU9OX1VQREFURV9SQU5HRSwgb3JnUGF5bG9hZClcclxuICAgICAgICAgICAgXSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsb3dFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5ibG9ja2luZ0xlZnRMaXN0SW50ZXJhY3Rpb24kLm5leHQoZmFsc2UpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlUXVlcnlGdW5jdGlvbkFjdGlvblBlcm1pc3Npb25MaXN0KHhbMF0pO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoeFswXS5vayAmJiB4WzBdLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHhbMF0uYm9keTtcclxuICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gcmVsb2FkIGFjdGlvbiBwZXJtaXNzaW9ucyBmb3IgY3VycmVudCBvYmplY3RJZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmJsb2NraW5nTGVmdExpc3RJbnRlcmFjdGlvbiQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLnF1ZXJ5RnVuY3Rpb25BY3Rpb25QZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ICsgJz9vYmplY3RJZD0nICsgdGhpcy5vYmplY3RJZCArIFwiJnVzZUdyb3VwSWZFbXB0eT1mYWxzZVwiKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tpbmdMZWZ0TGlzdEludGVyYWN0aW9uJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVF1ZXJ5RnVuY3Rpb25BY3Rpb25QZXJtaXNzaW9uTGlzdCh4KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKEpTT04uc3RyaW5naWZ5KHhbMF0sIG51bGwsIDIpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoeFsxXS5vayAmJiB4WzFdLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5MTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4WzFdLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keTEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvZHkxLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5lcnJvcihKU09OLnN0cmluZ2lmeSh4WzBdLCBudWxsLCAyKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IEVudW1QZXJtaXNzaW9uT2JqZWN0VHlwZS5VU0VSX0dST1VQKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb25SYW5nZTogSUdyb3VwUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uUGVybWlzc2lvblZhbHVlLm1hcChmID0+IHtcclxuICAgICAgICAgICAgZi5hbGxvd2VkQWN0aW9uSWRzPy5tYXAoaWQgPT4ge1xyXG4gICAgICAgICAgICAgIGFjdGlvblJhbmdlLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBJZDogTnVtYmVyKHRoaXMub2JqZWN0SWQpLFxyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb25JZDogZi5mdW5jdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uSWQ6IGlkXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCBvcmdSYW5nZTogSUdyb3VwT3JnUGVybWlzc2lvbk1vZGVsW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMub3JnSWRzLm1hcChvID0+IHtcclxuICAgICAgICAgICAgb3JnUmFuZ2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgZ3JvdXBJZDogTnVtYmVyKHRoaXMub2JqZWN0SWQpLFxyXG4gICAgICAgICAgICAgIG9yZ0lkOiBvXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc3QgYWN0aW9uUGF5bG9hZCA9IHsgZ3JvdXBJZDogdGhpcy5vYmplY3RJZCwgcmFuZ2U6IGFjdGlvblJhbmdlIH1cclxuICAgICAgICAgIGNvbnN0IG9yZ1BheWxvYWQgPSB7IGdyb3VwSWQ6IHRoaXMub2JqZWN0SWQsIHJhbmdlOiBvcmdSYW5nZSB9XHJcblxyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYmxvY2tpbmdMZWZ0TGlzdEludGVyYWN0aW9uJC5uZXh0KHRydWUpXHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgemlwKFtcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdChhcGkuU1lTX0dST1VQX0ZVTkNUSU9OX0FDVElPTl9QRVJNSVNTSU9OX1VQREFURV9SQU5HRSwgYWN0aW9uUGF5bG9hZCksXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoYXBpLlNZU19HUk9VUF9PUkdfUEVSTUlTU0lPTl9VUERBVEVfUkFOR0UsIG9yZ1BheWxvYWQpXHJcbiAgICAgICAgICAgIF0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmJsb2NraW5nTGVmdExpc3RJbnRlcmFjdGlvbiQubmV4dChmYWxzZSlcclxuICAgICAgICAgICAgICB0aGlzLmFsbG93RWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmICh4WzBdLm9rICYmIHhbMF0uc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geFswXS5ib2R5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gcmVsb2FkIGFjdGlvbiBwZXJtaXNzaW9ucyBmb3IgY3VycmVudCBvYmplY3RJZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmJsb2NraW5nTGVmdExpc3RJbnRlcmFjdGlvbiQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLnF1ZXJ5RnVuY3Rpb25BY3Rpb25QZXJtaXNzaW9uTGlzdEFwaUVuZHBvaW50ICsgJz9vYmplY3RJZD0nICsgdGhpcy5vYmplY3RJZCArIFwiJnVzZUdyb3VwSWZFbXB0eT1mYWxzZVwiKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tpbmdMZWZ0TGlzdEludGVyYWN0aW9uJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVF1ZXJ5RnVuY3Rpb25BY3Rpb25QZXJtaXNzaW9uTGlzdCh4KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKEpTT04uc3RyaW5naWZ5KHhbMF0sIG51bGwsIDIpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoeFsxXS5vayAmJiB4WzFdLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5MTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4WzFdLmJvZHk7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keTEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGJvZHkxLnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5lcnJvcihKU09OLnN0cmluZ2lmeSh4WzBdLCBudWxsLCAyKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQWN0aW9uUGVybWlzc2lvblZhbHVlQ2hhbmdlKGU6IElDb3JlRnVuY3Rpb25BY3Rpb25bXSk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJvbkFjdGlvblBlcm1pc3Npb25WYWx1ZUNoYW5nZVwiLCBlKTtcclxuICB9XHJcblxyXG4gIG9uT3JnVHJlZUl0ZW1DaGVjayhlOiBhbnkpIHtcclxuICAgIGlmICghISF0aGlzLmFsbG93RWRpdCkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKHRoaXMubWxzLnRyYW5zKCdVSV9VU0VSX1BFUk1JU1NJT05fVE9fRURJVF9QTEVBU0VfU0VMRUNUX0FfVVNFUl9BTkRfQ0xJQ0tfVEhFX1BFTkNJTCcsIHRoaXMubGFuZyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ2xvc2VTdGF0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2hvd1N0YXRlVHJhY2tlciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY2FuRGVhY3RpdmF0ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbiB7XHJcbiAgICB0aGlzLmN1cnJlbnRBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5hY3Rpb25QZXJtaXNzaW9uVmFsdWUpO1xyXG4gICAgY29uc3QgY29uZGl0aW9uMSA9IHRoaXMuY3VycmVudEFjdGlvblBlcm1pc3Npb25WYWx1ZUpzb25TdHJpbmcgPT09IHRoaXMuaW5pdGlhbEFjdGlvblBlcm1pc3Npb25WYWx1ZUpzb25TdHJpbmc7XHJcbiAgICB0aGlzLmN1cnJlbnRPcmdQZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5vcmdQZXJtaXNzaW9uVmFsdWUpO1xyXG4gICAgY29uc3QgY29uZGl0aW9uMiA9IHRoaXMuY3VycmVudE9yZ1Blcm1pc3Npb25WYWx1ZUpzb25TdHJpbmcgPT09IHRoaXMuaW5pdGlhbE9yZ1Blcm1pc3Npb25WYWx1ZUpzb25TdHJpbmc7XHJcbiAgICBjb25zdCBjb25kaXRpb24gPSBjb25kaXRpb24xICYmIGNvbmRpdGlvbjI7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7IC8vIFRPIERPXHJcblxyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSAnQ0hBTkdFU19XSUxMX0JFX0xPU1QnO1xyXG4gICAgICB0aGlzLmRpYWxvZ0luc3RhbmNlTnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgIHRoaXMuc2hvd1N0YXRlVHJhY2tlciA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb25maXJtZWQkLm5leHQoe1xyXG4gICAgICAgIGNvbmZpcm1lZDogZmFsc2UsXHJcbiAgICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXJcclxuICAgICAgfSlcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX1RJVExFKTtcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JPRFlfQ0hBTkdFU19XSUxMX0JFX0xPU1QpO1xyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fR09fQkFDS19UT19FRElUX0ZPUk0pO1xyXG4gICAgICBjb25zdCBvYnNlcnZhYmxlID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbkRlYWN0aXZhdGUkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpXHJcbiAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5pbnN0YW5jZU51bWJlciA9IG51bGw7XHJcbiAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZE9iamVjdCQubmV4dChudWxsKTtcclxuICAgIHRoaXMuY29yZVBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkT2JqZWN0QWN0aW9uUGVybWlzc2lvbnMkLm5leHQoW10pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS1wZXJtaXNzaW9uLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgKyAncHgnfVwiPlxyXG4gIDxjb3JlLXBhZ2UtaGVhZGVyIFt0aXRsZV09XCJ0aXRsZVwiIChidXR0b25DbGljayk9XCJvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuXHJcbiAgPGNvcmUtY29tcG9zaXRpb24gW2xlZnRdPVwidXNlclNlZWtlclwiIFtsZWZ0V2lkdGhdPVwiMjAwXCIgW21haW5dPVwidGFic1wiIFtoZWlnaHRdPVwiY29tcG9zaXRpb25IZWlnaHRcIj5cclxuICA8L2NvcmUtY29tcG9zaXRpb24+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJzdGF0ZS10cmFja2VyIGNvbnRhaW5lciBjb250YWluZXItZmx1aWRcIiAqbmdJZj1cInNob3dTdGF0ZVRyYWNrZXIgJiYgaXNSb290VXNlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInctMTAwIGQtZmxleCBkLWZsZXgtYmV0d2VlblwiPlxyXG4gICAgICA8c3Bhbj5Db21wYXJlPC9zcGFuPlxyXG4gICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiIChjbGljayk9XCJvbkNsaWNrQ2xvc2VTdGF0ZSgpXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgIHt7IGluaXRpYWxBY3Rpb25QZXJtaXNzaW9uVmFsdWVKc29uU3RyaW5nIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICB7eyBjdXJyZW50QWN0aW9uUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICB7eyBpbml0aWFsT3JnUGVybWlzc2lvblZhbHVlSnNvblN0cmluZyB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAge3sgY3VycmVudE9yZ1Blcm1pc3Npb25WYWx1ZUpzb25TdHJpbmcgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICN0YWJzPlxyXG4gIDxjb3JlLXRhYnMgW2hlYWRlcnNdPVwidGFiSGVhZGVyc1wiIFtjb250ZW50c109XCJbdGFiMSwgdGFiMl1cIiBbaGVpZ2h0XT1cImNvbXBvc2l0aW9uSGVpZ2h0XCI+PC9jb3JlLXRhYnM+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RhYjE+XHJcbiAgPGRpdiBbbmdTdHlsZV09XCJ7IGhlaWdodDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnIH1cIj48L2Rpdj5cclxuICA8Y29yZS1wZXJtaXNzaW9uLWFjdGlvbnMgW2xvYWRpbmddPVwibG9hZGluZ1wiIFsobmdNb2RlbCldPVwiYWN0aW9uUGVybWlzc2lvblZhbHVlXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQWN0aW9uUGVybWlzc2lvblZhbHVlQ2hhbmdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwiISEhYWxsb3dFZGl0XCIgW2hlaWdodF09XCJjb3JlUGVybWlzc2lvbkFjdGlvbnNIZWlnaHRcIj48L2NvcmUtcGVybWlzc2lvbi1hY3Rpb25zPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN1c2VyU2Vla2VyPlxyXG5cclxuICA8Y29yZS1saXN0LWxhenkgW3F1ZXJ5TGlzdEFwaV09XCJvYmplY3RRdWVyeUxpc3RBcGlcIiBbdGV4dEZpZWxkXT1cIm9iamVjdExpc3RUZXh0RmllbGRcIiBbKG5nTW9kZWwpXT1cIm9iamVjdElkXCJcclxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uT2JqZWN0SWRDaGFuZ2UoJGV2ZW50KVwiIFtoZWlnaHRdPVwiY29tcG9zaXRpb25IZWlnaHRcIiBbYmxvY2tpbmdJbnRlcmFjdGlvbiRdPVwiYmxvY2tpbmdMZWZ0TGlzdEludGVyYWN0aW9uJFwiPjwvY29yZS1saXN0LWxhenk+XHJcblxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdGFiMj5cclxuICA8ZGl2IFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZyArICdweCcgfVwiPjwvZGl2PlxyXG4gIDxjb3JlLW9yZy10cmVlIFtmdWxsV2lkdGhNb2RlXT1cInRydWVcIiBbYWNjZXNzb3JNb2RlXT1cInRyZWVBY2Nlc3Nvck1vZGVcIiBbKG5nTW9kZWwpXT1cIm9yZ0lkc1wiIFtkaXNhYmxlZF09XCIhISFhbGxvd0VkaXRcIlxyXG4gICAgKGl0ZW1DbGljayk9XCJvbk9yZ1RyZWVJdGVtQ2hlY2soJGV2ZW50KVwiIG5hbWU9XCJvcmdJZHNcIiBuZ0RlZmF1bHRDb250cm9sIFtoZWlnaHRdPVwidHJlZUhlaWdodFwiPjwvY29yZS1vcmctdHJlZT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -2,7 +2,6 @@ import { Component, EventEmitter, Input, Output, isDevMode } from '@angular/core
2
2
  import { CoreFormControlBaseComponent } from '../../core-form-control-base/core-form-control-base.component';
3
3
  import { EnumCoreButtonCode } from '../../core-button-group/core-button/EnumButtonCaptionCode';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { filter } from 'rxjs';
6
5
  import { EnumCoreButtonVNSCode } from '../../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';
7
6
  import { alertOptions, noneAutoClosedAlertOptions } from '../../../constants/alertOptions';
8
7
  import { CommonModule } from '@angular/common';
@@ -72,8 +71,7 @@ export class CoreTagsComponent extends CoreFormControlBaseComponent {
72
71
  }
73
72
  ngAfterViewInit() {
74
73
  setTimeout(() => {
75
- this.subscriptions.push(this.corePermissionService.selectedObjectActionPermissions$.pipe(filter(x => !!x.length))
76
- .subscribe(x => {
74
+ this.subscriptions.push(this.corePermissionService.selectedObjectActionPermissions$.subscribe(x => {
77
75
  this.tags.map(tag => {
78
76
  const filter = x.filter(m => m.functionId === this.functionId);
79
77
  if (filter.length === 1) {
@@ -166,4 +164,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
166
164
  }], onValueChange: [{
167
165
  type: Output
168
166
  }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRhZ3MvY29yZS10YWdzL2NvcmUtdGFncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS10YWdzL2NvcmUtdGFncy9jb3JlLXRhZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDL0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJbkQsT0FBTyxFQUFzQyxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7O0FBbUJ2RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsNEJBQTRCO0lBc0JqRSxZQUNVLHFCQUE0QyxFQUM1QyxZQUEwQixF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QztZQUN0QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsZ0JBQWdCLEVBQUUsUUFBUTtTQUMzQixDQUFDLENBQUM7SUFFTCxDQUFDOzhHQS9KVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiwyTEFSakI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsaUJBQWlCO2FBQy9CO1NBQ0Ysc0VDbENILCtpQ0F3Qk0sb3JDRERGLFlBQVksK0JBQ1osc0JBQXNCOzsyRkFZYixpQkFBaUI7a0JBakI3QixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixzQkFBc0I7cUJBQ3ZCLGFBR1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxtQkFBbUI7eUJBQy9CO3FCQUNGO3FMQUlRLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDWSxRQUFRO3NCQUF6QixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElUYWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgRW51bUNvcmVCdXR0b25Db2RlIH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAvY29yZS1idXR0b24vRW51bUJ1dHRvbkNhcHRpb25Db2RlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IENvcmVQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUtcGVybWlzc2lvbi9jb3JlLXBlcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSUNvcmVGdW5jdGlvbkFjdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUtcGVybWlzc2lvbi1hY3Rpb25zL2NvcmUtcGVybWlzc2lvbi1hY3Rpb25zL2NvcmUtcGVybWlzc2lvbi1hY3Rpb25zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcm91dGluZy5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgYWxlcnRPcHRpb25zLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlQnV0dG9uVm5zQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLXZucy9jb3JlLWJ1dHRvbi12bnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ09SRV9WTlNfQlVUVE9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9DT1JFX1ZOU19CVVRUT05TJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS10YWdzJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIENvcmVCdXR0b25WbnNDb21wb25lbnRcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRhZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtdGFncy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlVGFnc0NvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVUYWdzQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgZnVuY3Rpb25JZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhbGxPcHRpb25zITogSVRhZ1tdO1xyXG4gIEBJbnB1dCgpIG92ZXJyaWRlIGRpc2FibGVkITogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgb25WYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvcmVGdW5jdGlvbkFjdGlvbj4oKTsgIC8vIHRvIGJ5cGFzcyB1c2luZyBuZ01vZGVsIGJpbmRpbmcgaW5zaWRlIG5nVGVtcGxhdGVcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWU6IG51bWJlcltdID0gW107XHJcbiAgbGFuZyE6IHN0cmluZztcclxuXHJcbiAgdGFnczogSVRhZ1tdID0gW107XHJcbiAgc2VhcmNoOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGNoZWNrQWxsITogYm9vbGVhbjtcclxuXHJcbiAgYWN0aW9uQnV0dG9uczogSUNvcmVCdXR0b25WTlNbXSA9IFtdO1xyXG5cclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBzaG93bkJ1dHRvbnM6IEVudW1Db3JlQnV0dG9uQ29kZVtdID0gW0VudW1Db3JlQnV0dG9uQ29kZS5TQVZFXTtcclxuXHJcbiAgdmlld0Fic3RyYWN0QnV0dG9uOiBJQ29yZUJ1dHRvblZOUyA9IENPUkVfVk5TX0JVVFRPTlMuZmlsdGVyKHggPT4geC5jb2RlID09PSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1ZJRVdfQUJTVFJBQ1QpWzBdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29yZVBlcm1pc3Npb25TZXJ2aWNlOiBDb3JlUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0aW5nU2VydmljZTogUm91dGluZ1NlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqXHJcbiAgICB0aGlzLmFsbE9wdGlvbnMubWFwKHQgPT4ge1xyXG4gICAgICB0LmVuYWJsZWQgPSBvYmo/LmluY2x1ZGVzKHQuaWQpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbWFwQWN0aW9uQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy50YWdzLm1hcCh4ID0+IHtcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5hY3Rpb25CdXR0b25zLmZpbHRlcihhYiA9PiBhYi5jb2RlID09PSB4LnRleHQpO1xyXG4gICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgeC5hY3Rpb25CdXR0b24gPSBmaWx0ZXJbMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeC5hY3Rpb25CdXR0b24gPSB0aGlzLnZpZXdBYnN0cmFjdEJ1dHRvbjtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydhbGxPcHRpb25zJ10pIHtcclxuICAgICAgdGhpcy50YWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydhbGxPcHRpb25zJ10uY3VycmVudFZhbHVlKSlcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy50YWdzLmZpbHRlcih4ID0+IHgudGV4dCA9PT0gJ0hFQURFUl9WSUVXX0FCU1RSQUNUJyk7XHJcbiAgICAgIGlmICghIWZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICBmaWx0ZXJbMF0uYWN0aW9uQnV0dG9uID0gdGhpcy52aWV3QWJzdHJhY3RCdXR0b247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICApXHJcbiAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnJvdXRpbmdTZXJ2aWNlLmZ1bGxGdW5jdGlvbnMkLnZhbHVlPy5maWx0ZXIoeCA9PiB4LmlkID09PSB0aGlzLmZ1bmN0aW9uSWQpO1xyXG4gICAgaWYgKCEhZmlsdGVyPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgYWN0aW9uczogc3RyaW5nW10gPSBmaWx0ZXJbMF0uYWN0aW9uQ29kZXM7XHJcbiAgICAgIGNvbnN0IG5ld0FjdGlvbkJ1dHRvbnM6IElDb3JlQnV0dG9uVk5TW10gPSBbXTtcclxuICAgICAgYWN0aW9ucy5tYXAoYSA9PiB7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uQnV0dG9ucyA9IENPUkVfVk5TX0JVVFRPTlMuZmlsdGVyKGIgPT4gYi5jb2RlID09PSBhKTtcclxuICAgICAgICBpZiAoISFhY3Rpb25CdXR0b25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgbmV3QWN0aW9uQnV0dG9ucy5wdXNoKGFjdGlvbkJ1dHRvbnNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b25zID0gbmV3QWN0aW9uQnV0dG9ucztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmNvcmVQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZE9iamVjdEFjdGlvblBlcm1pc3Npb25zJC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKHggPT4gISF4Lmxlbmd0aClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIHRoaXMudGFncy5tYXAodGFnID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0geC5maWx0ZXIobSA9PiBtLmZ1bmN0aW9uSWQgPT09IHRoaXMuZnVuY3Rpb25JZCk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgdGFnLmVuYWJsZWQgPSBmaWx0ZXJbMF0uYWxsb3dlZEFjdGlvbklkcy5pbmNsdWRlcyh0YWcuaWQpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICB0YWcuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYHNlbGVjdGVkT2JqZWN0QWN0aW9uUGVybWlzc2lvbnMgaGFzIGR1cGxpY2F0ZSBmdW5jdGlvbklkPSR7dGhpcy5mdW5jdGlvbklkfWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICB0aGlzLm1hcEFjdGlvbkJ1dHRvbigpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uU3VnZ2VzdEl0ZW1DbGljayh0YWc6IElUYWcpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbklucHV0S2V5ZG93bihlOiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBvbkFjdGl2ZSh0YWc6IElUYWcpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuICBvblRvb2dsZUl0ZW0odGFnOiBJVGFnKTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8odGhpcy5tbHMudHJhbnMoJ1VJX1VTRVJfUEVSTUlTU0lPTl9UT19FRElUX1BMRUFTRV9TRUxFQ1RfQV9VU0VSX0FORF9DTElDS19USEVfUEVOQ0lMJywgdGhpcy5sYW5nKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRhZy5lbmFibGVkID0gIXRhZy5lbmFibGVkO1xyXG5cclxuICAgIC8vIHJlY2FsY3VsYXRlIHRoZSB2YWx1ZVxyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZV0uZmlsdGVyKHggPT4geCAhPSB0YWcuaWQpXHJcbiAgICBpZiAoISF0YWcuZW5hYmxlZCkgbmV3VmFsdWUucHVzaCh0YWcuaWQpO1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2UobmV3VmFsdWUpO1xyXG5cclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtcclxuICAgICAgZnVuY3Rpb25JZDogdGhpcy5mdW5jdGlvbklkLFxyXG4gICAgICBhbGxvd2VkQWN0aW9uSWRzOiBuZXdWYWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQ2hlY2tBbGwoKSB7XHJcbiAgICBpZiAoISF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8odGhpcy5tbHMudHJhbnMoJ1VJX1VTRVJfUEVSTUlTU0lPTl9UT19FRElUX1BMRUFTRV9TRUxFQ1RfQV9VU0VSX0FORF9DTElDS19USEVfUEVOQ0lMJywgdGhpcy5sYW5nKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tBbGwgPSAhdGhpcy5jaGVja0FsbDtcclxuICAgIHRoaXMudGFncy5tYXAodCA9PiB0LmVuYWJsZWQgPSB0aGlzLmNoZWNrQWxsKVxyXG5cclxuICAgIC8vIHJlY2FsY3VsYXRlIHRoZSB2YWx1ZVxyXG4gICAgY29uc3QgbmV3VmFsdWU6IG51bWJlcltdID0gW107XHJcbiAgICBpZiAoISF0aGlzLmNoZWNrQWxsKSB7XHJcbiAgICAgIHRoaXMuYWxsT3B0aW9ucy5tYXAoeCA9PiB7XHJcbiAgICAgICAgbmV3VmFsdWUucHVzaCh4LmlkKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlKTtcclxuXHJcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGZ1bmN0aW9uSWQ6IHRoaXMuZnVuY3Rpb25JZCxcclxuICAgICAgYWxsb3dlZEFjdGlvbklkczogbmV3VmFsdWVcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb3JlLXRhZ3MtY29udGFpbmVyXCI+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImV4aXN0aW5nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1hbGwtYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUNoZWNrQWxsKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi13cmFwcGVyIG1yMTVcIj5cclxuICAgICAgICAgICAgICAgIDxpIFtjbGFzcy5mZWF0aGVyLWxvY2tdPVwiISEhY2hlY2tBbGxcIiBbY2xhc3MuZmVhdGhlci11bmxvY2tdPVwiISFjaGVja0FsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBAZm9yICh0YWcgb2YgdGFnczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHNwYW4gW2NsYXNzLmFkbWluXT1cIiEhIWRpc2FibGVkICYmICEhIXJlYWRvbmx5XCIgW2NsYXNzLmRpc2FibGVkXT1cIiEhIXRhZy5lbmFibGVkXCIgKGNsaWNrKT1cIm9uVG9vZ2xlSXRlbSh0YWcpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi13cmFwcGVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIXRhZy5hY3Rpb25CdXR0b24pIHtcclxuICAgICAgICAgICAgICAgICAgICA8Y29yZS1idXR0b24tdm5zIFtkYXRhXT1cInRhZy5hY3Rpb25CdXR0b24hXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+PC9jb3JlLWJ1dHRvbi12bnM+XHJcbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3t0YWcudGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj4iXX0=
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10YWdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRhZ3MvY29yZS10YWdzL2NvcmUtdGFncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS10YWdzL2NvcmUtdGFncy9jb3JlLXRhZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDL0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFTbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDaEgsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7O0FBbUJ2RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsNEJBQTRCO0lBc0JqRSxZQUNVLHFCQUE0QyxFQUM1QyxZQUEwQixFQUMxQixHQUF5QixFQUN6QixjQUE4QjtRQUV0QyxLQUFLLEVBQUUsQ0FB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QUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2dCQUNYLFdBQVcsRUFBRSxpQkFBaUI7YUFDL0I7U0FDRixzRUNsQ0gsK2lDQXdCTSxvckNEREYsWUFBWSwrQkFDWixzQkFBc0I7OzJGQVliLGlCQUFpQjtrQkFqQjdCLFNBQVM7K0JBQ0UsV0FBVyxjQUNULElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHNCQUFzQjtxQkFDdkIsYUFHVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLG1CQUFtQjt5QkFDL0I7cUJBQ0Y7cUxBSVEsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNZLFFBQVE7c0JBQXpCLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSVRhZyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvbkNvZGUgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC9jb3JlLWJ1dHRvbi9FbnVtQnV0dG9uQ2FwdGlvbkNvZGUnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuaW1wb3J0IHsgQ29yZVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS1wZXJtaXNzaW9uL2NvcmUtcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElDb3JlRnVuY3Rpb25BY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlLXBlcm1pc3Npb24tYWN0aW9ucy9jb3JlLXBlcm1pc3Npb24tYWN0aW9ucy9jb3JlLXBlcm1pc3Npb24tYWN0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JvdXRpbmcuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvblZuc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi12bnMvY29yZS1idXR0b24tdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENPUkVfVk5TX0JVVFRPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvQ09SRV9WTlNfQlVUVE9OUyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtdGFncycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBDb3JlQnV0dG9uVm5zQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS10YWdzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXRhZ3MuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZVRhZ3NDb21wb25lbnRcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlVGFnc0NvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGZ1bmN0aW9uSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYWxsT3B0aW9ucyE6IElUYWdbXTtcclxuICBASW5wdXQoKSBvdmVycmlkZSBkaXNhYmxlZCE6IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIG9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElDb3JlRnVuY3Rpb25BY3Rpb24+KCk7ICAvLyB0byBieXBhc3MgdXNpbmcgbmdNb2RlbCBiaW5kaW5nIGluc2lkZSBuZ1RlbXBsYXRlXHJcblxyXG4gIG92ZXJyaWRlIHZhbHVlOiBudW1iZXJbXSA9IFtdO1xyXG4gIGxhbmchOiBzdHJpbmc7XHJcblxyXG4gIHRhZ3M6IElUYWdbXSA9IFtdO1xyXG4gIHNlYXJjaDogc3RyaW5nID0gXCJcIjtcclxuICBjaGVja0FsbCE6IGJvb2xlYW47XHJcblxyXG4gIGFjdGlvbkJ1dHRvbnM6IElDb3JlQnV0dG9uVk5TW10gPSBbXTtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgc2hvd25CdXR0b25zOiBFbnVtQ29yZUJ1dHRvbkNvZGVbXSA9IFtFbnVtQ29yZUJ1dHRvbkNvZGUuU0FWRV07XHJcblxyXG4gIHZpZXdBYnN0cmFjdEJ1dHRvbjogSUNvcmVCdXR0b25WTlMgPSBDT1JFX1ZOU19CVVRUT05TLmZpbHRlcih4ID0+IHguY29kZSA9PT0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9WSUVXX0FCU1RSQUNUKVswXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcmVQZXJtaXNzaW9uU2VydmljZTogQ29yZVBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IG9ialxyXG4gICAgdGhpcy5hbGxPcHRpb25zLm1hcCh0ID0+IHtcclxuICAgICAgdC5lbmFibGVkID0gb2JqPy5pbmNsdWRlcyh0LmlkKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG1hcEFjdGlvbkJ1dHRvbigpOiB2b2lkIHtcclxuICAgIHRoaXMudGFncy5tYXAoeCA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuYWN0aW9uQnV0dG9ucy5maWx0ZXIoYWIgPT4gYWIuY29kZSA9PT0geC50ZXh0KTtcclxuICAgICAgaWYgKCEhZmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgIHguYWN0aW9uQnV0dG9uID0gZmlsdGVyWzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHguYWN0aW9uQnV0dG9uID0gdGhpcy52aWV3QWJzdHJhY3RCdXR0b247XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snYWxsT3B0aW9ucyddKSB7XHJcbiAgICAgIHRoaXMudGFncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1snYWxsT3B0aW9ucyddLmN1cnJlbnRWYWx1ZSkpXHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMudGFncy5maWx0ZXIoeCA9PiB4LnRleHQgPT09ICdIRUFERVJfVklFV19BQlNUUkFDVCcpO1xyXG4gICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgZmlsdGVyWzBdLmFjdGlvbkJ1dHRvbiA9IHRoaXMudmlld0Fic3RyYWN0QnV0dG9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgKVxyXG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5yb3V0aW5nU2VydmljZS5mdWxsRnVuY3Rpb25zJC52YWx1ZT8uZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5mdW5jdGlvbklkKTtcclxuICAgIGlmICghIWZpbHRlcj8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGFjdGlvbnM6IHN0cmluZ1tdID0gZmlsdGVyWzBdLmFjdGlvbkNvZGVzO1xyXG4gICAgICBjb25zdCBuZXdBY3Rpb25CdXR0b25zOiBJQ29yZUJ1dHRvblZOU1tdID0gW107XHJcbiAgICAgIGFjdGlvbnMubWFwKGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbkJ1dHRvbnMgPSBDT1JFX1ZOU19CVVRUT05TLmZpbHRlcihiID0+IGIuY29kZSA9PT0gYSk7XHJcbiAgICAgICAgaWYgKCEhYWN0aW9uQnV0dG9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIG5ld0FjdGlvbkJ1dHRvbnMucHVzaChhY3Rpb25CdXR0b25zWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IG5ld0FjdGlvbkJ1dHRvbnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5jb3JlUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRPYmplY3RBY3Rpb25QZXJtaXNzaW9ucyQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWdzLm1hcCh0YWcgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB4LmZpbHRlcihtID0+IG0uZnVuY3Rpb25JZCA9PT0gdGhpcy5mdW5jdGlvbklkKTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICB0YWcuZW5hYmxlZCA9IGZpbHRlclswXS5hbGxvd2VkQWN0aW9uSWRzLmluY2x1ZGVzKHRhZy5pZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRhZy5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgc2VsZWN0ZWRPYmplY3RBY3Rpb25QZXJtaXNzaW9ucyBoYXMgZHVwbGljYXRlIGZ1bmN0aW9uSWQ9JHt0aGlzLmZ1bmN0aW9uSWR9YCwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIHRoaXMubWFwQWN0aW9uQnV0dG9uKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25TdWdnZXN0SXRlbUNsaWNrKHRhZzogSVRhZyk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIG9uSW5wdXRLZXlkb3duKGU6IGFueSk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIG9uQWN0aXZlKHRhZzogSVRhZyk6IHZvaWQge1xyXG5cclxuICB9XHJcblxyXG4gIG9uVG9vZ2xlSXRlbSh0YWc6IElUYWcpOiB2b2lkIHtcclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyh0aGlzLm1scy50cmFucygnVUlfVVNFUl9QRVJNSVNTSU9OX1RPX0VESVRfUExFQVNFX1NFTEVDVF9BX1VTRVJfQU5EX0NMSUNLX1RIRV9QRU5DSUwnLCB0aGlzLmxhbmcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGFnLmVuYWJsZWQgPSAhdGFnLmVuYWJsZWQ7XHJcblxyXG4gICAgLy8gcmVjYWxjdWxhdGUgdGhlIHZhbHVlXHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IFsuLi50aGlzLnZhbHVlXS5maWx0ZXIoeCA9PiB4ICE9IHRhZy5pZClcclxuICAgIGlmICghIXRhZy5lbmFibGVkKSBuZXdWYWx1ZS5wdXNoKHRhZy5pZCk7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUobmV3VmFsdWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZShuZXdWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBmdW5jdGlvbklkOiB0aGlzLmZ1bmN0aW9uSWQsXHJcbiAgICAgIGFsbG93ZWRBY3Rpb25JZHM6IG5ld1ZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICB0b2dnbGVDaGVja0FsbCgpIHtcclxuICAgIGlmICghIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyh0aGlzLm1scy50cmFucygnVUlfVVNFUl9QRVJNSVNTSU9OX1RPX0VESVRfUExFQVNFX1NFTEVDVF9BX1VTRVJfQU5EX0NMSUNLX1RIRV9QRU5DSUwnLCB0aGlzLmxhbmcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGVja0FsbCA9ICF0aGlzLmNoZWNrQWxsO1xyXG4gICAgdGhpcy50YWdzLm1hcCh0ID0+IHQuZW5hYmxlZCA9IHRoaXMuY2hlY2tBbGwpXHJcblxyXG4gICAgLy8gcmVjYWxjdWxhdGUgdGhlIHZhbHVlXHJcbiAgICBjb25zdCBuZXdWYWx1ZTogbnVtYmVyW10gPSBbXTtcclxuICAgIGlmICghIXRoaXMuY2hlY2tBbGwpIHtcclxuICAgICAgdGhpcy5hbGxPcHRpb25zLm1hcCh4ID0+IHtcclxuICAgICAgICBuZXdWYWx1ZS5wdXNoKHguaWQpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2UobmV3VmFsdWUpO1xyXG5cclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHtcclxuICAgICAgZnVuY3Rpb25JZDogdGhpcy5mdW5jdGlvbklkLFxyXG4gICAgICBhbGxvd2VkQWN0aW9uSWRzOiBuZXdWYWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvcmUtdGFncy1jb250YWluZXJcIj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZXhpc3RpbmdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWFsbC1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlQ2hlY2tBbGwoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXdyYXBwZXIgbXIxNVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgW2NsYXNzLmZlYXRoZXItbG9ja109XCIhISFjaGVja0FsbFwiIFtjbGFzcy5mZWF0aGVyLXVubG9ja109XCIhIWNoZWNrQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIEBmb3IgKHRhZyBvZiB0YWdzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICA8c3BhbiBbY2xhc3MuYWRtaW5dPVwiISEhZGlzYWJsZWQgJiYgISEhcmVhZG9ubHlcIiBbY2xhc3MuZGlzYWJsZWRdPVwiISEhdGFnLmVuYWJsZWRcIiAoY2xpY2spPVwib25Ub29nbGVJdGVtKHRhZylcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uLXdyYXBwZXJcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhdGFnLmFjdGlvbkJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi12bnMgW2RhdGFdPVwidGFnLmFjdGlvbkJ1dHRvbiFcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj48L2NvcmUtYnV0dG9uLXZucz5cclxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3RhZy50ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==