@eqproject/eqp-dynamic-module 2.10.102 → 2.10.103

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.
@@ -32,6 +32,7 @@ export class ActionButtonCreatorComponent {
32
32
  this.formulaFieldsStructure = new Array();
33
33
  this.actionsFlag = ActionFlagEnum;
34
34
  this.triggerPropertyType = TriggerPropertyTypeEnum;
35
+ this.modulesLoaded = false;
35
36
  }
36
37
  ngOnInit() {
37
38
  ///
@@ -74,23 +75,15 @@ export class ActionButtonCreatorComponent {
74
75
  if (this.actionButton == null) {
75
76
  this.actionButton = new ActionButton();
76
77
  }
77
- var executeGetModules = false;
78
78
  // aggiungo un elemento monoformula da eseguire solo all'azione per il modulo
79
79
  this.formulas.execute_formula = {};
80
80
  this.formulas.execute_formula.formula = new TriggerProperty(TriggerPropertyTypeEnum.STRING);
81
81
  if (this.formulas) {
82
82
  Object.keys(this.formulas).forEach((res) => {
83
83
  this.formulaKeys.push({ "key": res });
84
- Object.keys(this.formulas[res]).forEach((property) => {
85
- if (this.formulas[res][property].type == TriggerPropertyTypeEnum.DMMODULE) {
86
- executeGetModules = true;
87
- }
88
- });
89
84
  });
90
85
  }
91
- if (executeGetModules) {
92
- this.getAllModules();
93
- }
86
+ this.ensureModulesLoaded();
94
87
  }
95
88
  openFormulaDialog(formulaField) {
96
89
  this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {
@@ -169,6 +162,22 @@ export class ActionButtonCreatorComponent {
169
162
  });
170
163
  this.onChangeSomething.emit(this.actionButton);
171
164
  }
165
+ /**
166
+ * Chiama l'endpoint "tutti i form" solo se il tipo di action button attualmente selezionato
167
+ * ha almeno un campo DMMODULE, e solo la prima volta per apertura di modale: le chiamate
168
+ * successive (anche cambiando Tipo Action Button più volte) riusano "this.forms" già scaricato.
169
+ */
170
+ ensureModulesLoaded() {
171
+ const needsModules = this.formulaFieldsStructure.some((f) => f.type == TriggerPropertyTypeEnum.DMMODULE);
172
+ if (!needsModules) {
173
+ return;
174
+ }
175
+ if (this.modulesLoaded) {
176
+ this.applyModulesToStructure();
177
+ return;
178
+ }
179
+ this.getAllModules();
180
+ }
172
181
  getAllModules() {
173
182
  const dynamicModuleParams = new Array();
174
183
  dynamicModuleParams.push({
@@ -179,13 +188,17 @@ export class ActionButtonCreatorComponent {
179
188
  this.utilityHelperService.RunEndPointCall(this.endPointConfiguration.Forms.GetAllFormEndPoint, dynamicModuleParams, (res) => {
180
189
  this.forms = res;
181
190
  this.forms = this.forms.sort((uno, due) => uno.Name.localeCompare(due.Name));
182
- this.formulaFieldsStructure.forEach((res) => {
183
- if (res.type == TriggerPropertyTypeEnum.DMMODULE) {
184
- res.object = this.forms.find(x => x.ID == res.value);
185
- }
186
- });
191
+ this.modulesLoaded = true;
192
+ this.applyModulesToStructure();
187
193
  }, (err) => { });
188
194
  }
195
+ applyModulesToStructure() {
196
+ this.formulaFieldsStructure.forEach((res) => {
197
+ if (res.type == TriggerPropertyTypeEnum.DMMODULE) {
198
+ res.object = this.forms.find(x => x.ID == res.value);
199
+ }
200
+ });
201
+ }
189
202
  onChangeFormula(formula) {
190
203
  if (formula == null) {
191
204
  this.changeSomething();
@@ -215,6 +228,7 @@ export class ActionButtonCreatorComponent {
215
228
  });
216
229
  *** */
217
230
  GlobalService.debugLog('@@trigger-creator:onChangeFormula formulaFieldsStructure', this.formulaFieldsStructure);
231
+ this.ensureModulesLoaded();
218
232
  this.changeSomething();
219
233
  }
220
234
  isAnActionKey(key, field, formulas) {
@@ -256,4 +270,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
256
270
  type: ViewChild,
257
271
  args: ["dialogFormula", { static: true }]
258
272
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZILE9BQU8sRUFBNkMsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVNqRSxNQUFNLE9BQU8sNEJBQTRCO0lBMEJyQyxZQUFvQixNQUFpQixFQUFVLG9CQUEwQztRQUFyRSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXZCcEUsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBQzdCLHNCQUFpQixHQUFzQixJQUFJLENBQUM7UUFDckQsYUFBUSxHQUFRLElBQUksQ0FBQztRQUV0QixZQUFPLEdBQVksS0FBSyxDQUFDO1FB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QUFZO3NCQUFyQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFXeUMsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uLCBBY3Rpb25GbGFnRW51bSwgVHJpZ2dlclByb3BlcnR5LCBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgRW5kUG9pbnRDb25maWd1cmF0aW9uLCBFbmRQb2ludERhdGFQYXJhbXMsIFBhcmFtVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBBY3Rpb25CdXR0b25GaWVsZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWVsZHMvYWN0aW9uQnV0dG9uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWN0aW9uLWJ1dHRvbi1jcmVhdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hY3Rpb24tYnV0dG9uLWNyZWF0b3IuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uQ3JlYXRvckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dChcImZvcm1cIikgZm9ybTogRm9ybTtcclxuICBASW5wdXQoXCJhY3Rpb25CdXR0b25cIikgYWN0aW9uQnV0dG9uOiBBY3Rpb25CdXR0b24gPSBudWxsO1xyXG4gIEBJbnB1dChcImFjdGlvbkJ1dHRvbkZpZWxkXCIpIGFjdGlvbkJ1dHRvbkZpZWxkOiBBY3Rpb25CdXR0b25GaWVsZCA9IG51bGw7XHJcbiAgQElucHV0KFwiZm9ybXVsYXNcIikgZm9ybXVsYXM6IGFueSA9IG51bGw7XHJcbiAgQElucHV0KFwiZW5kUG9pbnRDb25maWd1cmF0aW9uXCIpIGVuZFBvaW50Q29uZmlndXJhdGlvbjogRW5kUG9pbnRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dChcIkluRmllbGRcIikgSW5GaWVsZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZvcm11bGFPYmplY3Q6IGFueSA9IHt9O1xyXG5cclxuICBAT3V0cHV0KCkgb25TYXZlUmVjb3JkOiBFdmVudEVtaXR0ZXI8QWN0aW9uQnV0dG9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uQnV0dG9uPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZVNvbWV0aGluZzogRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4oKTtcclxuXHJcbiAgICBGaWVsZFR5cGVFbnVtID0gRmllbGRUeXBlRW51bTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZEZvcm11bGE6IGFueTtcclxuICAgIGZvcm11bGFLZXlzOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgIGZvcm11bGFGaWVsZHNTdHJ1Y3R1cmU6IEFycmF5PGFueT4gPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgYWN0aW9uc0ZsYWcgPSBBY3Rpb25GbGFnRW51bTtcclxuICAgIHRyaWdnZXJQcm9wZXJ0eVR5cGUgPSBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bTtcclxuICBcclxuICAgIGRpYWxvZ0Zvcm11bGFSZWY6IE1hdERpYWxvZ1JlZjxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAgIEBWaWV3Q2hpbGQoXCJkaWFsb2dGb3JtdWxhXCIsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0Zvcm11bGE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgXHJcbiAgICBmb3JtczogQXJyYXk8Rm9ybT47XHJcbiAgXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBwcml2YXRlIHV0aWxpdHlIZWxwZXJTZXJ2aWNlOiBVdGlsaXR5SGVscGVyU2VydmljZSl7fVxyXG4gICAgXHJcbiAgICBuZ09uSW5pdCgpe1xyXG5cclxuICAgICAgLy8vXHJcbiAgICAgIC8vLyBRdWVzdG8gY29tcG9uZW50ZSBmdW56aW9uYSBzaWEgcGVyIGkgYm90dG9uaSBkZWkgZmllbGRzIHNpYSBwZXIgaSBib3R0b25pIHN1Z2xpIGhlYWRlciAoYWRkcmVjb3JkLCBsaXN0dmlldyBlY2NldGVyYSlcclxuICAgICAgLy8vIFNlIHNpIHN0YSBsYXZvcmFuZG8gc3VpIGZpZWxkcyDDqCBwb3BvbGF0byAndGhpcy5hY3Rpb25CdXR0b25GaWVsZCcgYWx0cmltZW50aSDDqCBudWxsLlxyXG4gICAgICAvLy9cclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkICE9IG51bGwpe1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gPEFjdGlvbkJ1dHRvbj50aGlzLmFjdGlvbkJ1dHRvbkZpZWxkO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5hY3Rpb25CdXR0b24gIT0gbnVsbCAmJiB0aGlzLmFjdGlvbkJ1dHRvbi5leGVjdXRpb24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtdWxhID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5ID0gdGhpcy5hY3Rpb25CdXR0b24uZXhlY3V0aW9uO1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkID09IG51bGwpe1xyXG4gICAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYXMuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHtcImtleVwiOiByZXMua2V5LCBcInR5cGVcIjogdGhpcy5mb3JtdWxhc1t0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXldW3Jlc10udHlwZSwgXCJ0b29sdGlwXCI6IHRoaXMuZm9ybXVsYXNbdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5XVtyZXNdLnRvb2x0aXB9KTtcclxuICAgICAgICAgIH0pOyAgIFxyXG5cclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcCkuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5maW5kKHggPT4geC5rZXkgPT0gcmVzKS52YWx1ZSA9IHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcFtyZXNdLnZhbHVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICovXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkID09IG51bGwpe1xyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQW5BY3Rpb25LZXkoa2V5LCB0aGlzLmFjdGlvbkJ1dHRvbiwgdGhpcy5mb3JtdWxhcykpeyByZXR1cm47IH1cclxuICAgICAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLnB1c2godGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wW2tleV0pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUgPSB0aGlzLmFjdGlvbkJ1dHRvbkZpZWxkLmZvcm11bGFzO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uID09IG51bGwpe1xyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gbmV3IEFjdGlvbkJ1dHRvbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZXhlY3V0ZUdldE1vZHVsZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIGFnZ2l1bmdvIHVuIGVsZW1lbnRvIG1vbm9mb3JtdWxhIGRhIGVzZWd1aXJlIHNvbG8gYWxsJ2F6aW9uZSBwZXIgaWwgbW9kdWxvXHJcbiAgICAgIHRoaXMuZm9ybXVsYXMuZXhlY3V0ZV9mb3JtdWxhID0ge307XHJcbiAgICAgIHRoaXMuZm9ybXVsYXMuZXhlY3V0ZV9mb3JtdWxhLmZvcm11bGEgPSBuZXcgVHJpZ2dlclByb3BlcnR5KFRyaWdnZXJQcm9wZXJ0eVR5cGVFbnVtLlNUUklORyk7XHJcblxyXG4gICAgICBpZih0aGlzLmZvcm11bGFzKXtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm11bGFzKS5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYUtleXMucHVzaCh7XCJrZXlcIjogcmVzfSk7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm11bGFzW3Jlc10pLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm11bGFzW3Jlc11bcHJvcGVydHldLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRE1NT0RVTEUpe1xyXG4gICAgICAgICAgICAgIGV4ZWN1dGVHZXRNb2R1bGVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChleGVjdXRlR2V0TW9kdWxlcyl7XHJcbiAgICAgICAgdGhpcy5nZXRBbGxNb2R1bGVzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZvcm11bGFEaWFsb2coZm9ybXVsYUZpZWxkOiBhbnkpIHtcclxuICAgICAgdGhpcy5kaWFsb2dGb3JtdWxhUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ0Zvcm11bGEsIHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgICAgd2lkdGg6IFwiNzUlXCIsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZm9ybXVsYTogdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLmZpbmQoeCA9PiB4LmtleSA9PSBmb3JtdWxhRmllbGQua2V5KS52YWx1ZSxcclxuICAgICAgICAgIGZpZWxkczogdGhpcy5mb3JtLkZpZWxkcyxcclxuICAgICAgICAgIGZvcm11bGFPYmplY3Q6IHRoaXMuZm9ybXVsYU9iamVjdFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRpYWxvZ0Zvcm11bGFSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHZhciBmb3JtdWxhVG9DaGFuZ2UgPSB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZmluZCh4ID0+IHgua2V5ID09IGZvcm11bGFGaWVsZC5rZXkpO1xyXG4gICAgICAgIGZvcm11bGFUb0NoYW5nZS52YWx1ZSA9IHJlc3VsdC5mb3JtdWxhLnRvU3RyaW5nKCkgPT0gXCJcIiA/IG51bGwgOiByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpO1xyXG4gICAgICAgIHRoaXMub25Gb3JtdWxhRmllbGRDaGFuZ2UoZm9ybXVsYVRvQ2hhbmdlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqYWdnaW9ybmEgIHNlbGVjdGVkRm9ybXVsYSBjb24gaWwgdmFsb3JlIHJlc3RpdHVpdG8gZGFsbGEgc2VsZWN0XHJcbiAgICAgKiBxdWkgbm9uIMOoIGNoaWFybyBzZSBlIHF1YW5kbyByaWNoaWFtYXJlIGlsIGNoYW5nZVNvbWV0aGluZyBcclxuICAgICAqICovXHJcbiAgICBvbkRyb3BEb3duU2VsZWN0aW9uKHNlbGVjdGVkQWxsb3dlZFZhbHVlKXtcclxuICAgICAgXHJcbiAgICAgIHRoaXMuY2hhbmdlU29tZXRoaW5nKCk7IC8vIG5vbiBzaSBjYXBpc2NlIGEgY2hlIHNlcnZlLCBhc3NlZ25hIGNvc2VcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvcm11bGEuc2VsZWN0ZWRBbGxvd2VkVmFsdWUgPSBzZWxlY3RlZEFsbG93ZWRWYWx1ZS52YWx1ZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25Gb3JtdWxhRmllbGRDaGFuZ2UoZm9ybXVsYUZpZWxkOiBhbnkpe1xyXG4gICAgICAgdGhpcy5jaGFuZ2VTb21ldGhpbmcoKTtcclxuICAgIH0gICAgXHJcblxyXG4gICAgb25FcXBTZWxlY3RNb2R1bGUoZXYsIGZvcm11bGFGaWVsZCl7XHJcbiAgICAgIGlmIChldiAhPSBudWxsKXtcclxuICAgICAgICBmb3JtdWxhRmllbGQudmFsdWUgPSBldi5JRDsgICAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9ybXVsYUZpZWxkLnZhbHVlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZVNvbWV0aGluZygpO1xyXG4gICAgfSAgICBcclxuXHJcbiAgc2F2ZU9yRXhpdEZvcm0oZXhpdDogYm9vbGVhbikge1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnYWRkLWZvcm0tcmVjb3JkIHNhdmVSZWNvcmRFdmVudCcpXHJcbiAgICBpZiAoZXhpdCkge1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZC5lbWl0KG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbi5CdXR0b25VbmlxdWVJZCA9PSBudWxsKXsgdGhpcy5hY3Rpb25CdXR0b24uQnV0dG9uVW5pcXVlSWQgPSB0aGlzLmdlbmVyYXRlR1VJRCgpOyB9XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uLkJ1dHRvbkNvZGUgPSB0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXk7XHJcblxyXG4gICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZm9yRWFjaCgoZm9ybXVsYUZpZWxkKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhcyA9PSBcInVuZGVmaW5lZFwiKXsgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXMgPSB7fTsgfVxyXG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcFtmb3JtdWxhRmllbGQua2V5XSA9IGZvcm11bGFGaWVsZDtcclxuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbi5leGVjdXRpb24gPSB0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJBY3Rpb25CdXR0b25DcmVhdG9yQ29tcG9uZW50IHNhdmVPckV4aXRGb3JtKClcIiwgdGhpcy5hY3Rpb25CdXR0b24pO1xyXG4gICAgICB0aGlzLm9uU2F2ZVJlY29yZC5lbWl0KHRoaXMuYWN0aW9uQnV0dG9uKTtcclxuICAgIH1cclxuICB9ICAgIFxyXG5cclxuICBnZW5lcmF0ZUdVSUQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgcmFuZG9tTnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XHJcbiAgICByZXR1cm4gYCR7dGltZXN0YW1wfS0ke3JhbmRvbU51bX1gO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU29tZXRoaW5nKCl7XHJcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlID0gdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5O1xyXG5cclxuICAgIGlmICghdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wKXsgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wID0ge307IH1cclxuXHJcbiAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZm9yRWFjaCgoZm9ybXVsYUZpZWxkKSA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXMgPT0gXCJ1bmRlZmluZWRcIil7IHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzID0ge307IH1cclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXNUZW1wW2Zvcm11bGFGaWVsZC5rZXldID0gZm9ybXVsYUZpZWxkO1xyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbi5leGVjdXRpb24gPSB0aGlzLnNlbGVjdGVkRm9ybXVsYS5rZXk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlU29tZXRoaW5nLmVtaXQodGhpcy5hY3Rpb25CdXR0b24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTW9kdWxlcygpe1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcIm9yZ2FpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEFsbEZvcm1FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogQXJyYXk8Rm9ybT4pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1zID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSB0aGlzLmZvcm1zLnNvcnQoKHVubywgZHVlKSA9PiB1bm8uTmFtZS5sb2NhbGVDb21wYXJlKGR1ZS5OYW1lKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5mb3JFYWNoKChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMudHlwZSA9PSBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bS5ETU1PRFVMRSl7XHJcbiAgICAgICAgICAgIHJlcy5vYmplY3QgPSB0aGlzLmZvcm1zLmZpbmQoeCA9PiB4LklEID09IHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7IH1cclxuICAgICk7ICAgIFxyXG4gIH0gIFxyXG5cclxuICBvbkNoYW5nZUZvcm11bGEoZm9ybXVsYTogYW55KXtcclxuXHJcbiAgICBpZiAoZm9ybXVsYSA9PSBudWxsKXsgIFxyXG4gICAgICB0aGlzLmNoYW5nZVNvbWV0aGluZygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQEB0cmlnZ2VyLWNyZWF0b3I6b25DaGFuZ2VGb3JtdWxhIHNlbGVjdGVkIGZvcm11bGEnLGZvcm11bGEpXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdAQHRyaWdnZXItY3JlYXRvcjpvbkNoYW5nZUZvcm11bGEgZm9ybXVsYXMnLHRoaXMuZm9ybXVsYXMpXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25DaGFuZ2VGb3JtdWxhIGZvcm11bGEua2V5XCIsIGZvcm11bGEua2V5KTtcclxuXHJcbiAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUgPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLVxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV0pLmZvckVhY2goKHJlcykgPT4ge1xyXG5cclxuICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLnB1c2goe1xyXG4gICAgICAgIFwia2V5XCI6IHJlcywgXHJcbiAgICAgICAgXCJ0eXBlXCI6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10udHlwZSwgXHJcbiAgICAgICAgXCJ0b29sdGlwXCI6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10udG9vbHRpcCxcclxuICAgICAgICBcInZhbHVlXCIgOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLnZhbHVlLFxyXG4gICAgICAgIC8qKiBwZXIgdmFsb3JpIHZpbmNvbGF0aSBhIGxpc3RlICovXHJcbiAgICAgICAgXCJhbGxvd2VkVmFsdWVzXCIgOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLmFsbG93ZWRWYWx1ZXMsXHJcbiAgICAgICAgXCJzZWxlY3RlZEFsbG93ZWRWYWx1ZVwiIDogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS5zZWxlY3RlZEFsbG93ZWRWYWx1ZVxyXG5cclxuICAgICAgfSk7IFxyXG4gICAgfSk7ICBcclxuICAgIC8vLS0tLS0tLS0tLS0tXHJcbiAgICAvKiAqKiogb3JpZ2luYWxlICoqKlxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV0pLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUucHVzaCh7XCJrZXlcIjogcmVzLCBcInR5cGVcIjogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS50eXBlXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAqKiogKi9cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0BAdHJpZ2dlci1jcmVhdG9yOm9uQ2hhbmdlRm9ybXVsYSBmb3JtdWxhRmllbGRzU3RydWN0dXJlJyx0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUpXHJcblxyXG5cclxuICAgIHRoaXMuY2hhbmdlU29tZXRoaW5nKCk7XHJcbiAgfSAgXHJcbiAgXHJcbiAgaXNBbkFjdGlvbktleShrZXksIGZpZWxkOiBBY3Rpb25CdXR0b24sIGZvcm11bGFzOiBBcnJheTxhbnk+KXtcclxuICAgIHZhciBjb2RlID0gZmllbGQuQnV0dG9uQ29kZTtcclxuICAgIHZhciBlbHMgPSBmb3JtdWxhc1tjb2RlXTtcclxuICAgIHJldHVybiAoT2JqZWN0LmtleXMoZWxzKS5maW5kKHggPT4geCA9PSBrZXkpICE9IG51bGwpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcbjxtYXQtY2FyZCBjbGFzcz1cImFkZC1mb3JtLWZpZWxkXCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwiIUluRmllbGRcIj5cclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIHt7YWN0aW9uQnV0dG9uICE9IG51bGwgPyBcIk1vZGlmaWNhXCIgOiBcIkFnZ2l1bmdpXCJ9fSBib3R0b25lIGF6aW9uZVxyXG4gICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbnRhaW5lckNvbnRlbnQgcGFkZGVyXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+VGlwbyBBY3Rpb24gQnV0dG9uPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPHRtdy1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtdWxhS2V5c1wiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZEZvcm11bGFcIlxyXG4gICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidrZXknXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VGb3JtdWxhKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvdG13LXNlbGVjdD4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPkV0aWNoZXR0YTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4gRXRpY2hldHRhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImFjdGlvbkJ1dHRvbi5CdXR0b25MYWJlbFwiIFtyZWFkb25seV09XCJmYWxzZVwiIChrZXl1cCk9XCJjaGFuZ2VTb21ldGhpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+SWNvbmEgKDxhIGhyZWY9J2h0dHBzOi8vdGFibGVyLmlvL2ljb25zJyB0YXJnZXQ9XCJfYmxhbmtcIj5saXN0YTwvYT4pPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgIGNsYXNzPVwicHQtMVwiPiBJY29uYSAoPGEgaHJlZj0naHR0cHM6Ly90YWJsZXIuaW8vaWNvbnMnIHRhcmdldD1cIl9ibGFua1wiPmxpc3RhPC9hPikgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiYWN0aW9uQnV0dG9uLkljb25cIiBbcmVhZG9ubHldPVwiZmFsc2VcIiAoa2V5dXApPVwiY2hhbmdlU29tZXRoaW5nKClcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+ICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFJbkZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlNlemlvbmk8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4gU2V6aW9uaSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDx0bXctc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtlbnVtRGF0YV09XCJhY3Rpb25zRmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpc1NlYXJjaGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpc011bHRpU2VsZWN0XSA9IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJhY3Rpb25CdXR0b24uU2hvd0luXCIgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cImNoYW5nZVNvbWV0aGluZygpXCIgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3Rtdy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+ICAgXHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdGb3I9XCJsZXQgZm9ybXVsYUZpZWxkIG9mIGZvcm11bGFGaWVsZHNTdHJ1Y3R1cmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+e3tmb3JtdWxhRmllbGQua2V5fX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCIgKm5nSWY9XCJmb3JtdWxhRmllbGQudHlwZSA9PSB0cmlnZ2VyUHJvcGVydHlUeXBlLlNUUklOR1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgIGNsYXNzPVwicHQtMVwiPiB7e2Zvcm11bGFGaWVsZC5rZXl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcmVhZG9ubHldPVwiZmFsc2VcIiBbcmVxdWlyZWRdPVwiZmFsc2VcIiBbbWF0VG9vbHRpcF09XCJmb3JtdWxhRmllbGQudG9vbHRpcFwiIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZyhmb3JtdWxhRmllbGQpXCIgWyhuZ01vZGVsKV09XCJmb3JtdWxhRmllbGQudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm11bGFGaWVsZENoYW5nZShmb3JtdWxhRmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBpIGNhbXBpIGNvbiB2YWxvcmkobm9uIGNhbGNvbGF0aSkgdmluY29sYXRpIGxpIG1vc3RybyBpbiB1bmEgc2VsZWN0LS0+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIiAqbmdJZj1cImZvcm11bGFGaWVsZC50eXBlID09IHRyaWdnZXJQcm9wZXJ0eVR5cGUuRFJPUERPV05fTElTVFwiPlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8dG13LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uYSB2YWxvcmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5RGF0YV09XCJmb3JtdWxhRmllbGQuYWxsb3dlZFZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Ecm9wRG93blNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm11bGFGaWVsZC5zZWxlY3RlZEFsbG93ZWRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVxcC1mb3JtLWZpZWxkIGVxcC1jb2xvdXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdG13LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwhLS0gZmluZSBnZXN0aW9uZSBsaXN0ZS0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIiAqbmdJZj1cImZvcm11bGFGaWVsZC50eXBlID09IHRyaWdnZXJQcm9wZXJ0eVR5cGUuRE1NT0RVTEVcIj5cclxuICAgICAgICAgICAgICAgIDx0bXctc2VsZWN0IFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25hIG1vZHVsbydcIiBbYXJyYXlEYXRhXT1cImZvcm1zXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm11bGFGaWVsZC5vYmplY3RcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ0lEJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkVxcFNlbGVjdE1vZHVsZSgkZXZlbnQsIGZvcm11bGFGaWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvdG13LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciAqbmdJZj1cIiFJbkZpZWxkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMSBtZS0zXCI+IFxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgW2Rpc2FibGVkXT1cImlzU2F2aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1NhdmluZ1wiPlNhbHZhPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiPlNhbHZhdGFnZ2lvIGluIENvcnNvLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS1ESUFMT0cgUEVSIFNFTVBMSUZJQ0FSRSBMQSBTQ1JJVFRVUkEgREVMIENBTVBPIEZPUk1VTEEtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dGb3JtdWxhPlxyXG4gICAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbiAgICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbjwvbmctdGVtcGxhdGU+Il19
273
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hY3Rpb24tYnV0dG9uLWNyZWF0b3IvYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXZILE9BQU8sRUFBNkMsYUFBYSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdkgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVNqRSxNQUFNLE9BQU8sNEJBQTRCO0lBMkJyQyxZQUFvQixNQUFpQixFQUFVLG9CQUEwQztRQUFyRSxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXhCcEUsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBQzdCLHNCQUFpQixHQUFzQixJQUFJLENBQUM7UUFDckQsYUFBUSxHQUFRLElBQUksQ0FBQztRQUV0QixZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBRXZCLGlCQUFZLEdBQStCLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQzVFLHNCQUFpQixHQUErQixJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUV6RixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLGdCQUFXLEdBQWUsSUFBSSxLQUFLLEVBQU8sQ0FBQztRQUMzQywyQkFBc0IsR0FBZSxJQUFJLEtBQUssRUFBTyxDQUFDO1FBQ3RELGdCQUFXLEdBQUcsY0FBYyxDQUFDO1FBQzdCLHdCQUFtQixHQUFHLHVCQUF1QixDQUFDO1FBTXRDLGtCQUFhLEdBQVksS0FBSyxDQUFDO0lBRW9ELENBQUM7SUFFNUYsUUFBUTtRQUVOLEdBQUc7UUFDSCx5SEFBeUg7UUFDekgseUZBQXlGO1FBQ3pGLEdBQUc7UUFFSCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBaUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1NBQzFEO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDcEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFFdkQ7Ozs7Ozs7Ozs7Ozs7O2NBY0U7WUFFRixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEVBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDO3dCQUFFLE9BQU87cUJBQUU7b0JBQzFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsQ0FBQyxDQUFDLENBQUM7YUFFSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQzthQUMvRDtTQUVGO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksRUFBQztZQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7U0FDeEM7UUFFRCw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU1RixJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFFN0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQWlCO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNELFlBQVksRUFBRSxJQUFJO1lBQ2xCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztnQkFDL0UsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQ2xDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3ZELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RixlQUFlLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztTQUVLO0lBQ0wsbUJBQW1CLENBQUMsb0JBQW9CO1FBRXRDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztRQUNuRSxJQUFJLENBQUMsZUFBZSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQztJQUV6RSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsWUFBaUI7UUFDbkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsWUFBWTtRQUNoQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUM7WUFDYixZQUFZLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNMLFlBQVksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFSCxjQUFjLENBQUMsSUFBYTtRQUMxQixhQUFhLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFDekQsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjthQUFNO1lBRUwsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsSUFBSSxJQUFJLEVBQUM7Z0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQUU7WUFDeEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFFeEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUNuRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksV0FBVyxFQUFDO29CQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztpQkFBRTtnQkFDekYsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDekQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUVyQixhQUFhLENBQUMsUUFBUSxDQUFDLCtDQUErQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdEQsT0FBTyxHQUFHLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO1FBRXhELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBQztZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztTQUFFO1FBRTVFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNuRCxJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLElBQUksV0FBVyxFQUFDO2dCQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzthQUFFO1lBQ3pGLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7WUFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQjtRQUN6QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFFOUIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQy9CLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sYUFBYTtRQUVuQixNQUFNLG1CQUFtQixHQUN2QixJQUFJLEtBQUssRUFBc0IsQ0FBQztRQUNsQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDdkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUM1QixTQUFTLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQztTQUN4QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUNuRCxtQkFBbUIsRUFDbkIsQ0FBQyxHQUFnQixFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBRTFCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMxQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksdUJBQXVCLENBQUMsUUFBUSxFQUFDO2dCQUMvQyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBWTtRQUUxQixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87U0FDUjtRQUVELGFBQWEsQ0FBQyxRQUFRLENBQUMsb0RBQW9ELEVBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEYsYUFBYSxDQUFDLFFBQVEsQ0FBQyw0Q0FBNEMsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDbEYsYUFBYSxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7UUFHL0MsY0FBYztRQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUV0RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO2dCQUMvQixLQUFLLEVBQUUsR0FBRztnQkFDVixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSTtnQkFDNUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU87Z0JBQ2xELE9BQU8sRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLO2dCQUMvQyxtQ0FBbUM7Z0JBQ25DLGVBQWUsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhO2dCQUMvRCxzQkFBc0IsRUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0I7YUFFOUUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxjQUFjO1FBQ2Q7Ozs7O2NBS007UUFDTixhQUFhLENBQUMsUUFBUSxDQUFDLDBEQUEwRCxFQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBRTlHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFtQixFQUFFLFFBQW9CO1FBQzFELElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDNUIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDOzswSEExUVUsNEJBQTRCOzhHQUE1Qiw0QkFBNEIsd2VDaEJ6Qyw0NEtBK0djOzRGRC9GRCw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsdUJBQXVCO21JQU1sQixJQUFJO3NCQUFsQixLQUFLO3VCQUFDLE1BQU07Z0JBQ1UsWUFBWTtzQkFBbEMsS0FBSzt1QkFBQyxjQUFjO2dCQUNPLGlCQUFpQjtzQkFBNUMsS0FBSzt1QkFBQyxtQkFBbUI7Z0JBQ1AsUUFBUTtzQkFBMUIsS0FBSzt1QkFBQyxVQUFVO2dCQUNlLHFCQUFxQjtzQkFBcEQsS0FBSzt1QkFBQyx1QkFBdUI7Z0JBQ1osT0FBTztzQkFBeEIsS0FBSzt1QkFBQyxTQUFTO2dCQUNQLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBV3lDLGFBQWE7c0JBQTFELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbiwgQWN0aW9uRmxhZ0VudW0sIFRyaWdnZXJQcm9wZXJ0eSwgVHJpZ2dlclByb3BlcnR5VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJpZ2dlci5tb2RlbCc7XHJcbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZm9ybS5tb2RlbCc7XHJcbmltcG9ydCB7IEVuZFBvaW50Q29uZmlndXJhdGlvbiwgRW5kUG9pbnREYXRhUGFyYW1zLCBQYXJhbVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VuZFBvaW50Q29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgQWN0aW9uQnV0dG9uRmllbGQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmllbGRzL2FjdGlvbkJ1dHRvbi5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FjdGlvbi1idXR0b24tY3JlYXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1idXR0b24tY3JlYXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9uLWJ1dHRvbi1jcmVhdG9yLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGlvbkJ1dHRvbkNyZWF0b3JDb21wb25lbnQge1xyXG5cclxuICBASW5wdXQoXCJmb3JtXCIpIGZvcm06IEZvcm07XHJcbiAgQElucHV0KFwiYWN0aW9uQnV0dG9uXCIpIGFjdGlvbkJ1dHRvbjogQWN0aW9uQnV0dG9uID0gbnVsbDtcclxuICBASW5wdXQoXCJhY3Rpb25CdXR0b25GaWVsZFwiKSBhY3Rpb25CdXR0b25GaWVsZDogQWN0aW9uQnV0dG9uRmllbGQgPSBudWxsO1xyXG4gIEBJbnB1dChcImZvcm11bGFzXCIpIGZvcm11bGFzOiBhbnkgPSBudWxsO1xyXG4gIEBJbnB1dChcImVuZFBvaW50Q29uZmlndXJhdGlvblwiKSBlbmRQb2ludENvbmZpZ3VyYXRpb246IEVuZFBvaW50Q29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoXCJJbkZpZWxkXCIpIEluRmllbGQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZVJlY29yZDogRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkJ1dHRvbj4oKTtcclxuICBAT3V0cHV0KCkgb25DaGFuZ2VTb21ldGhpbmc6IEV2ZW50RW1pdHRlcjxBY3Rpb25CdXR0b24+ID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25CdXR0b24+KCk7XHJcblxyXG4gICAgRmllbGRUeXBlRW51bSA9IEZpZWxkVHlwZUVudW07XHJcbiAgICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc2VsZWN0ZWRGb3JtdWxhOiBhbnk7XHJcbiAgICBmb3JtdWxhS2V5czogQXJyYXk8YW55PiA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICBmb3JtdWxhRmllbGRzU3RydWN0dXJlOiBBcnJheTxhbnk+ID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgIGFjdGlvbnNGbGFnID0gQWN0aW9uRmxhZ0VudW07XHJcbiAgICB0cmlnZ2VyUHJvcGVydHlUeXBlID0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW07XHJcbiAgXHJcbiAgICBkaWFsb2dGb3JtdWxhUmVmOiBNYXREaWFsb2dSZWY8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgICBAVmlld0NoaWxkKFwiZGlhbG9nRm9ybXVsYVwiLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dGb3JtdWxhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIFxyXG4gICAgZm9ybXM6IEFycmF5PEZvcm0+O1xyXG4gICAgcHJpdmF0ZSBtb2R1bGVzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB1dGlsaXR5SGVscGVyU2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2Upe31cclxuICAgIFxyXG4gICAgbmdPbkluaXQoKXtcclxuXHJcbiAgICAgIC8vL1xyXG4gICAgICAvLy8gUXVlc3RvIGNvbXBvbmVudGUgZnVuemlvbmEgc2lhIHBlciBpIGJvdHRvbmkgZGVpIGZpZWxkcyBzaWEgcGVyIGkgYm90dG9uaSBzdWdsaSBoZWFkZXIgKGFkZHJlY29yZCwgbGlzdHZpZXcgZWNjZXRlcmEpXHJcbiAgICAgIC8vLyBTZSBzaSBzdGEgbGF2b3JhbmRvIHN1aSBmaWVsZHMgw6ggcG9wb2xhdG8gJ3RoaXMuYWN0aW9uQnV0dG9uRmllbGQnIGFsdHJpbWVudGkgw6ggbnVsbC5cclxuICAgICAgLy8vXHJcblxyXG4gICAgICBpZiAodGhpcy5hY3Rpb25CdXR0b25GaWVsZCAhPSBudWxsKXtcclxuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbiA9IDxBY3Rpb25CdXR0b24+dGhpcy5hY3Rpb25CdXR0b25GaWVsZDtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMuYWN0aW9uQnV0dG9uICE9IG51bGwgJiYgdGhpcy5hY3Rpb25CdXR0b24uZXhlY3V0aW9uICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybXVsYSA9IHt9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtdWxhLmtleSA9IHRoaXMuYWN0aW9uQnV0dG9uLmV4ZWN1dGlvbjtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAodGhpcy5hY3Rpb25CdXR0b25GaWVsZCA9PSBudWxsKXtcclxuICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZSA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICAgICAgICB0aGlzLmZvcm11bGFzLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUucHVzaCh7XCJrZXlcIjogcmVzLmtleSwgXCJ0eXBlXCI6IHRoaXMuZm9ybXVsYXNbdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5XVtyZXNdLnR5cGUsIFwidG9vbHRpcFwiOiB0aGlzLmZvcm11bGFzW3RoaXMuc2VsZWN0ZWRGb3JtdWxhLmtleV1bcmVzXS50b29sdGlwfSk7XHJcbiAgICAgICAgICB9KTsgICBcclxuXHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhc1RlbXApLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZmluZCh4ID0+IHgua2V5ID09IHJlcykudmFsdWUgPSB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhc1RlbXBbcmVzXS52YWx1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUucHVzaCh0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAqL1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hY3Rpb25CdXR0b25GaWVsZCA9PSBudWxsKXtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0FuQWN0aW9uS2V5KGtleSwgdGhpcy5hY3Rpb25CdXR0b24sIHRoaXMuZm9ybXVsYXMpKXsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5wdXNoKHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcFtrZXldKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlID0gdGhpcy5hY3Rpb25CdXR0b25GaWVsZC5mb3JtdWxhcztcclxuICAgICAgICB9ICAgICAgICBcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbiA9PSBudWxsKXtcclxuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbiA9IG5ldyBBY3Rpb25CdXR0b24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gYWdnaXVuZ28gdW4gZWxlbWVudG8gbW9ub2Zvcm11bGEgZGEgZXNlZ3VpcmUgc29sbyBhbGwnYXppb25lIHBlciBpbCBtb2R1bG9cclxuICAgICAgdGhpcy5mb3JtdWxhcy5leGVjdXRlX2Zvcm11bGEgPSB7fTtcclxuICAgICAgdGhpcy5mb3JtdWxhcy5leGVjdXRlX2Zvcm11bGEuZm9ybXVsYSA9IG5ldyBUcmlnZ2VyUHJvcGVydHkoVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uU1RSSU5HKTtcclxuXHJcbiAgICAgIGlmKHRoaXMuZm9ybXVsYXMpe1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybXVsYXMpLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtdWxhS2V5cy5wdXNoKHtcImtleVwiOiByZXN9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lbnN1cmVNb2R1bGVzTG9hZGVkKCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9wZW5Gb3JtdWxhRGlhbG9nKGZvcm11bGFGaWVsZDogYW55KSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nRm9ybXVsYVJlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5kaWFsb2dGb3JtdWxhLCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiBcIjc1JVwiLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIGZvcm11bGE6IHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5maW5kKHggPT4geC5rZXkgPT0gZm9ybXVsYUZpZWxkLmtleSkudmFsdWUsXHJcbiAgICAgICAgICBmaWVsZHM6IHRoaXMuZm9ybS5GaWVsZHMsXHJcbiAgICAgICAgICBmb3JtdWxhT2JqZWN0OiB0aGlzLmZvcm11bGFPYmplY3RcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kaWFsb2dGb3JtdWxhUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICB2YXIgZm9ybXVsYVRvQ2hhbmdlID0gdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLmZpbmQoeCA9PiB4LmtleSA9PSBmb3JtdWxhRmllbGQua2V5KTtcclxuICAgICAgICBmb3JtdWxhVG9DaGFuZ2UudmFsdWUgPSByZXN1bHQuZm9ybXVsYS50b1N0cmluZygpID09IFwiXCIgPyBudWxsIDogcmVzdWx0LmZvcm11bGEudG9TdHJpbmcoKTtcclxuICAgICAgICB0aGlzLm9uRm9ybXVsYUZpZWxkQ2hhbmdlKGZvcm11bGFUb0NoYW5nZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKmFnZ2lvcm5hICBzZWxlY3RlZEZvcm11bGEgY29uIGlsIHZhbG9yZSByZXN0aXR1aXRvIGRhbGxhIHNlbGVjdFxyXG4gICAgICogcXVpIG5vbiDDqCBjaGlhcm8gc2UgZSBxdWFuZG8gcmljaGlhbWFyZSBpbCBjaGFuZ2VTb21ldGhpbmcgXHJcbiAgICAgKiAqL1xyXG4gICAgb25Ecm9wRG93blNlbGVjdGlvbihzZWxlY3RlZEFsbG93ZWRWYWx1ZSl7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmNoYW5nZVNvbWV0aGluZygpOyAvLyBub24gc2kgY2FwaXNjZSBhIGNoZSBzZXJ2ZSwgYXNzZWduYSBjb3NlXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGb3JtdWxhLnNlbGVjdGVkQWxsb3dlZFZhbHVlID0gc2VsZWN0ZWRBbGxvd2VkVmFsdWUudmFsdWU7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uRm9ybXVsYUZpZWxkQ2hhbmdlKGZvcm11bGFGaWVsZDogYW55KXtcclxuICAgICAgIHRoaXMuY2hhbmdlU29tZXRoaW5nKCk7XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIG9uRXFwU2VsZWN0TW9kdWxlKGV2LCBmb3JtdWxhRmllbGQpe1xyXG4gICAgICBpZiAoZXYgIT0gbnVsbCl7XHJcbiAgICAgICAgZm9ybXVsYUZpZWxkLnZhbHVlID0gZXYuSUQ7ICAgIFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvcm11bGFGaWVsZC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VTb21ldGhpbmcoKTtcclxuICAgIH0gICAgXHJcblxyXG4gIHNhdmVPckV4aXRGb3JtKGV4aXQ6IGJvb2xlYW4pIHtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ2FkZC1mb3JtLXJlY29yZCBzYXZlUmVjb3JkRXZlbnQnKVxyXG4gICAgaWYgKGV4aXQpIHtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQuZW1pdChudWxsKTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICBpZiAodGhpcy5hY3Rpb25CdXR0b24uQnV0dG9uVW5pcXVlSWQgPT0gbnVsbCl7IHRoaXMuYWN0aW9uQnV0dG9uLkJ1dHRvblVuaXF1ZUlkID0gdGhpcy5nZW5lcmF0ZUdVSUQoKTsgfVxyXG4gICAgICB0aGlzLmFjdGlvbkJ1dHRvbi5CdXR0b25Db2RlID0gdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5O1xyXG5cclxuICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLmZvckVhY2goKGZvcm11bGFGaWVsZCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb25CdXR0b24uZm9ybXVsYXMgPT0gXCJ1bmRlZmluZWRcIil7IHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzID0ge307IH1cclxuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhc1RlbXBbZm9ybXVsYUZpZWxkLmtleV0gPSBmb3JtdWxhRmllbGQ7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b24uZXhlY3V0aW9uID0gdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5O1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG4gICAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiQWN0aW9uQnV0dG9uQ3JlYXRvckNvbXBvbmVudCBzYXZlT3JFeGl0Rm9ybSgpXCIsIHRoaXMuYWN0aW9uQnV0dG9uKTtcclxuICAgICAgdGhpcy5vblNhdmVSZWNvcmQuZW1pdCh0aGlzLmFjdGlvbkJ1dHRvbik7XHJcbiAgICB9XHJcbiAgfSAgICBcclxuXHJcbiAgZ2VuZXJhdGVHVUlEKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IHJhbmRvbU51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApO1xyXG4gICAgcmV0dXJuIGAke3RpbWVzdGFtcH0tJHtyYW5kb21OdW19YDtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvbWV0aGluZygpe1xyXG4gICAgdGhpcy5hY3Rpb25CdXR0b24uQnV0dG9uQ29kZSA9IHRoaXMuc2VsZWN0ZWRGb3JtdWxhLmtleTtcclxuXHJcbiAgICBpZiAoIXRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcCl7IHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcCA9IHt9OyB9XHJcblxyXG4gICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLmZvckVhY2goKGZvcm11bGFGaWVsZCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzID09IFwidW5kZWZpbmVkXCIpeyB0aGlzLmFjdGlvbkJ1dHRvbi5mb3JtdWxhcyA9IHt9OyB9XHJcbiAgICAgIHRoaXMuYWN0aW9uQnV0dG9uLmZvcm11bGFzVGVtcFtmb3JtdWxhRmllbGQua2V5XSA9IGZvcm11bGFGaWVsZDtcclxuICAgICAgdGhpcy5hY3Rpb25CdXR0b24uZXhlY3V0aW9uID0gdGhpcy5zZWxlY3RlZEZvcm11bGEua2V5O1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZVNvbWV0aGluZy5lbWl0KHRoaXMuYWN0aW9uQnV0dG9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoaWFtYSBsJ2VuZHBvaW50IFwidHV0dGkgaSBmb3JtXCIgc29sbyBzZSBpbCB0aXBvIGRpIGFjdGlvbiBidXR0b24gYXR0dWFsbWVudGUgc2VsZXppb25hdG9cclxuICAgKiBoYSBhbG1lbm8gdW4gY2FtcG8gRE1NT0RVTEUsIGUgc29sbyBsYSBwcmltYSB2b2x0YSBwZXIgYXBlcnR1cmEgZGkgbW9kYWxlOiBsZSBjaGlhbWF0ZVxyXG4gICAqIHN1Y2Nlc3NpdmUgKGFuY2hlIGNhbWJpYW5kbyBUaXBvIEFjdGlvbiBCdXR0b24gcGnDuSB2b2x0ZSkgcml1c2FubyBcInRoaXMuZm9ybXNcIiBnacOgIHNjYXJpY2F0by5cclxuICAgKi9cclxuICBwcml2YXRlIGVuc3VyZU1vZHVsZXNMb2FkZWQoKXtcclxuICAgIGNvbnN0IG5lZWRzTW9kdWxlcyA9IHRoaXMuZm9ybXVsYUZpZWxkc1N0cnVjdHVyZS5zb21lKChmKSA9PiBmLnR5cGUgPT0gVHJpZ2dlclByb3BlcnR5VHlwZUVudW0uRE1NT0RVTEUpO1xyXG4gICAgaWYgKCFuZWVkc01vZHVsZXMpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgaWYgKHRoaXMubW9kdWxlc0xvYWRlZCkge1xyXG4gICAgICB0aGlzLmFwcGx5TW9kdWxlc1RvU3RydWN0dXJlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldEFsbE1vZHVsZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWxsTW9kdWxlcygpe1xyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNNb2R1bGVQYXJhbXM6IEFycmF5PEVuZFBvaW50RGF0YVBhcmFtcz4gPVxyXG4gICAgICBuZXcgQXJyYXk8RW5kUG9pbnREYXRhUGFyYW1zPigpO1xyXG4gICAgZHluYW1pY01vZHVsZVBhcmFtcy5wdXNoKHtcclxuICAgICAgUGFyYW1OYW1lOiBcIm9yZ2FpZFwiLFxyXG4gICAgICBQYXJhbVZhbHVlOiB0aGlzLmZvcm0uT3JnYUlELFxyXG4gICAgICBQYXJhbVR5cGU6IFBhcmFtVHlwZUVudW1bXCJRdWVyeSBwYXJhbVwiXSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy51dGlsaXR5SGVscGVyU2VydmljZS5SdW5FbmRQb2ludENhbGwoXHJcbiAgICAgIHRoaXMuZW5kUG9pbnRDb25maWd1cmF0aW9uLkZvcm1zLkdldEFsbEZvcm1FbmRQb2ludCxcclxuICAgICAgZHluYW1pY01vZHVsZVBhcmFtcyxcclxuICAgICAgKHJlczogQXJyYXk8Rm9ybT4pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1zID0gcmVzO1xyXG4gICAgICAgIHRoaXMuZm9ybXMgPSB0aGlzLmZvcm1zLnNvcnQoKHVubywgZHVlKSA9PiB1bm8uTmFtZS5sb2NhbGVDb21wYXJlKGR1ZS5OYW1lKSk7XHJcbiAgICAgICAgdGhpcy5tb2R1bGVzTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5hcHBseU1vZHVsZXNUb1N0cnVjdHVyZSgpO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7IH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5TW9kdWxlc1RvU3RydWN0dXJlKCl7XHJcbiAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMudHlwZSA9PSBUcmlnZ2VyUHJvcGVydHlUeXBlRW51bS5ETU1PRFVMRSl7XHJcbiAgICAgICAgcmVzLm9iamVjdCA9IHRoaXMuZm9ybXMuZmluZCh4ID0+IHguSUQgPT0gcmVzLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUZvcm11bGEoZm9ybXVsYTogYW55KXtcclxuXHJcbiAgICBpZiAoZm9ybXVsYSA9PSBudWxsKXsgIFxyXG4gICAgICB0aGlzLmNoYW5nZVNvbWV0aGluZygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnQEB0cmlnZ2VyLWNyZWF0b3I6b25DaGFuZ2VGb3JtdWxhIHNlbGVjdGVkIGZvcm11bGEnLGZvcm11bGEpXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdAQHRyaWdnZXItY3JlYXRvcjpvbkNoYW5nZUZvcm11bGEgZm9ybXVsYXMnLHRoaXMuZm9ybXVsYXMpXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwib25DaGFuZ2VGb3JtdWxhIGZvcm11bGEua2V5XCIsIGZvcm11bGEua2V5KTtcclxuXHJcbiAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUgPSBuZXcgQXJyYXk8YW55PigpO1xyXG5cclxuXHJcbiAgICAvLy0tLS0tLS0tLS0tLVxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV0pLmZvckVhY2goKHJlcykgPT4ge1xyXG5cclxuICAgICAgdGhpcy5mb3JtdWxhRmllbGRzU3RydWN0dXJlLnB1c2goe1xyXG4gICAgICAgIFwia2V5XCI6IHJlcywgXHJcbiAgICAgICAgXCJ0eXBlXCI6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10udHlwZSwgXHJcbiAgICAgICAgXCJ0b29sdGlwXCI6IHRoaXMuZm9ybXVsYXNbZm9ybXVsYS5rZXldW3Jlc10udG9vbHRpcCxcclxuICAgICAgICBcInZhbHVlXCIgOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLnZhbHVlLFxyXG4gICAgICAgIC8qKiBwZXIgdmFsb3JpIHZpbmNvbGF0aSBhIGxpc3RlICovXHJcbiAgICAgICAgXCJhbGxvd2VkVmFsdWVzXCIgOiB0aGlzLmZvcm11bGFzW2Zvcm11bGEua2V5XVtyZXNdLmFsbG93ZWRWYWx1ZXMsXHJcbiAgICAgICAgXCJzZWxlY3RlZEFsbG93ZWRWYWx1ZVwiIDogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS5zZWxlY3RlZEFsbG93ZWRWYWx1ZVxyXG5cclxuICAgICAgfSk7IFxyXG4gICAgfSk7ICBcclxuICAgIC8vLS0tLS0tLS0tLS0tXHJcbiAgICAvKiAqKiogb3JpZ2luYWxlICoqKlxyXG4gICAgT2JqZWN0LmtleXModGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV0pLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICB0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUucHVzaCh7XCJrZXlcIjogcmVzLCBcInR5cGVcIjogdGhpcy5mb3JtdWxhc1tmb3JtdWxhLmtleV1bcmVzXS50eXBlXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAqKiogKi9cclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coJ0BAdHJpZ2dlci1jcmVhdG9yOm9uQ2hhbmdlRm9ybXVsYSBmb3JtdWxhRmllbGRzU3RydWN0dXJlJyx0aGlzLmZvcm11bGFGaWVsZHNTdHJ1Y3R1cmUpXHJcblxyXG4gICAgdGhpcy5lbnN1cmVNb2R1bGVzTG9hZGVkKCk7XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VTb21ldGhpbmcoKTtcclxuICB9XHJcbiAgXHJcbiAgaXNBbkFjdGlvbktleShrZXksIGZpZWxkOiBBY3Rpb25CdXR0b24sIGZvcm11bGFzOiBBcnJheTxhbnk+KXtcclxuICAgIHZhciBjb2RlID0gZmllbGQuQnV0dG9uQ29kZTtcclxuICAgIHZhciBlbHMgPSBmb3JtdWxhc1tjb2RlXTtcclxuICAgIHJldHVybiAoT2JqZWN0LmtleXMoZWxzKS5maW5kKHggPT4geCA9PSBrZXkpICE9IG51bGwpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcbjxtYXQtY2FyZCBjbGFzcz1cImFkZC1mb3JtLWZpZWxkXCI+XHJcbiAgICA8bWF0LWNhcmQtaGVhZGVyICpuZ0lmPVwiIUluRmllbGRcIj5cclxuICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIHt7YWN0aW9uQnV0dG9uICE9IG51bGwgPyBcIk1vZGlmaWNhXCIgOiBcIkFnZ2l1bmdpXCJ9fSBib3R0b25lIGF6aW9uZVxyXG4gICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XHJcbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cclxuXHJcbiAgICA8bWF0LWNhcmQtY29udGVudD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNvbnRhaW5lckNvbnRlbnQgcGFkZGVyXCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+VGlwbyBBY3Rpb24gQnV0dG9uPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPHRtdy1zZWxlY3QgW2FycmF5RGF0YV09XCJmb3JtdWxhS2V5c1wiIFsobmdNb2RlbElucHV0KV09XCJzZWxlY3RlZEZvcm11bGFcIlxyXG4gICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ2tleSdcIiBbYXJyYXlWYWx1ZVByb3BlcnR5XT1cIidrZXknXCIgW3Nob3dDYW5jZWxCdXR0b25dPVwidHJ1ZVwiIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25DaGFuZ2VGb3JtdWxhKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvdG13LXNlbGVjdD4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPkV0aWNoZXR0YTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4gRXRpY2hldHRhIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cImFjdGlvbkJ1dHRvbi5CdXR0b25MYWJlbFwiIFtyZWFkb25seV09XCJmYWxzZVwiIChrZXl1cCk9XCJjaGFuZ2VTb21ldGhpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+SWNvbmEgKDxhIGhyZWY9J2h0dHBzOi8vdGFibGVyLmlvL2ljb25zJyB0YXJnZXQ9XCJfYmxhbmtcIj5saXN0YTwvYT4pPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgIGNsYXNzPVwicHQtMVwiPiBJY29uYSAoPGEgaHJlZj0naHR0cHM6Ly90YWJsZXIuaW8vaWNvbnMnIHRhcmdldD1cIl9ibGFua1wiPmxpc3RhPC9hPikgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwiYWN0aW9uQnV0dG9uLkljb25cIiBbcmVhZG9ubHldPVwiZmFsc2VcIiAoa2V5dXApPVwiY2hhbmdlU29tZXRoaW5nKClcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+ICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cIiFJbkZpZWxkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlNlemlvbmk8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsICBjbGFzcz1cInB0LTFcIj4gU2V6aW9uaSA8L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgIDx0bXctc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtlbnVtRGF0YV09XCJhY3Rpb25zRmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpc1NlYXJjaGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpc011bHRpU2VsZWN0XSA9IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbElucHV0KV09XCJhY3Rpb25CdXR0b24uU2hvd0luXCIgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbElucHV0Q2hhbmdlKT1cImNoYW5nZVNvbWV0aGluZygpXCIgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L3Rtdy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+ICAgXHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdGb3I9XCJsZXQgZm9ybXVsYUZpZWxkIG9mIGZvcm11bGFGaWVsZHNTdHJ1Y3R1cmVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+e3tmb3JtdWxhRmllbGQua2V5fX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCIgKm5nSWY9XCJmb3JtdWxhRmllbGQudHlwZSA9PSB0cmlnZ2VyUHJvcGVydHlUeXBlLlNUUklOR1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgIGNsYXNzPVwicHQtMVwiPiB7e2Zvcm11bGFGaWVsZC5rZXl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcmVhZG9ubHldPVwiZmFsc2VcIiBbcmVxdWlyZWRdPVwiZmFsc2VcIiBbbWF0VG9vbHRpcF09XCJmb3JtdWxhRmllbGQudG9vbHRpcFwiIChjbGljayk9XCJvcGVuRm9ybXVsYURpYWxvZyhmb3JtdWxhRmllbGQpXCIgWyhuZ01vZGVsKV09XCJmb3JtdWxhRmllbGQudmFsdWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZvcm11bGFGaWVsZENoYW5nZShmb3JtdWxhRmllbGQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBpIGNhbXBpIGNvbiB2YWxvcmkobm9uIGNhbGNvbGF0aSkgdmluY29sYXRpIGxpIG1vc3RybyBpbiB1bmEgc2VsZWN0LS0+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIiAqbmdJZj1cImZvcm11bGFGaWVsZC50eXBlID09IHRyaWdnZXJQcm9wZXJ0eVR5cGUuRFJPUERPV05fTElTVFwiPlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8dG13LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGV6aW9uYSB2YWxvcmUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5RGF0YV09XCJmb3JtdWxhRmllbGQuYWxsb3dlZFZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsSW5wdXRDaGFuZ2UpPVwib25Ecm9wRG93blNlbGVjdGlvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm11bGFGaWVsZC5zZWxlY3RlZEFsbG93ZWRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcnJheUtleVByb3BlcnR5XT1cIidrZXknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FycmF5VmFsdWVQcm9wZXJ0eV09XCIndmFsdWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVxcC1mb3JtLWZpZWxkIGVxcC1jb2xvdXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdG13LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwhLS0gZmluZSBnZXN0aW9uZSBsaXN0ZS0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIiAqbmdJZj1cImZvcm11bGFGaWVsZC50eXBlID09IHRyaWdnZXJQcm9wZXJ0eVR5cGUuRE1NT0RVTEVcIj5cclxuICAgICAgICAgICAgICAgIDx0bXctc2VsZWN0IFtwbGFjZWhvbGRlcl09XCInU2VsZXppb25hIG1vZHVsbydcIiBbYXJyYXlEYXRhXT1cImZvcm1zXCIgWyhuZ01vZGVsSW5wdXQpXT1cImZvcm11bGFGaWVsZC5vYmplY3RcIiBbaXNTZWFyY2hhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2FycmF5S2V5UHJvcGVydHldPVwiJ0lEJ1wiIFthcnJheVZhbHVlUHJvcGVydHldPVwiJ05hbWUnXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgKG5nTW9kZWxJbnB1dENoYW5nZSk9XCJvbkVxcFNlbGVjdE1vZHVsZSgkZXZlbnQsIGZvcm11bGFGaWVsZClcIj5cclxuICAgICAgICAgICAgICAgIDwvdG13LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPG1hdC1jYXJkLWZvb3RlciAqbmdJZj1cIiFJbkZpZWxkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG10LTIgbWItMSBtZS0zXCI+IFxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMlwiIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0odHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIEFubnVsbGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJtci0yXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZU9yRXhpdEZvcm0oZmFsc2UpXCIgW2Rpc2FibGVkXT1cImlzU2F2aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1NhdmluZ1wiPlNhbHZhPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1NhdmluZ1wiPlNhbHZhdGFnZ2lvIGluIENvcnNvLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxyXG5cclxuPC9tYXQtY2FyZD5cclxuXHJcbjwhLS1ESUFMT0cgUEVSIFNFTVBMSUZJQ0FSRSBMQSBTQ1JJVFRVUkEgREVMIENBTVBPIEZPUk1VTEEtLT5cclxuPG5nLXRlbXBsYXRlICNkaWFsb2dGb3JtdWxhPlxyXG4gICAgPGVxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbiAgICA8L2VxcC1keW5hbWljLW1vZHVsZS1hZGQtZm9ybXVsYS1jb21wb25lbnQ+XHJcbjwvbmctdGVtcGxhdGU+Il19