qms-angular 1.1.39 → 1.1.40

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.
@@ -450,6 +450,8 @@ export class SelectDepartmentTreeComponent {
450
450
  ], isLoading: false }));
451
451
  });
452
452
  this.textSearchSubject$.next(this.formSearchControl.value);
453
+ if (this.config.clearCheckListSelectionSearchWhenHandle)
454
+ this.checkListSelectionSearch.clear();
453
455
  this._mapToResultSearch();
454
456
  this.setIndexView(1);
455
457
  }
@@ -765,6 +767,9 @@ export class SelectDepartmentTreeComponent {
765
767
  this.getActiveNodeEvent$.next(nodeId);
766
768
  }
767
769
  onSearch() {
770
+ var _a;
771
+ if (!this.formSearchControl.value || ((_a = this.formSearchControl.value) === null || _a === void 0 ? void 0 : _a.trim()) === '')
772
+ return;
768
773
  this.getLoading$.next(true);
769
774
  this.setIndexView(1);
770
775
  this.onSearchEvent.emit(this.formSearchControl.value);
@@ -860,10 +865,10 @@ export class SelectDepartmentTreeComponent {
860
865
  return;
861
866
  if (this.checkListSelectionSearch.isSelected(item))
862
867
  this.checkListSelection.select(currentNode);
863
- return;
864
868
  }
865
- this.checkListSelection.deselect(currentNode);
866
- // isSelect ? this.checkListSelection.select(currentNode) :
869
+ else {
870
+ this.checkListSelection.deselect(currentNode);
871
+ }
867
872
  this.config.isSelectOne ? this._handleSelectOne(currentNode.id) : this.handleCheckNode(currentNode);
868
873
  this.cdRef.detectChanges();
869
874
  return;
@@ -1130,4 +1135,4 @@ SelectDepartmentTreeComponent.propDecorators = {
1130
1135
  cdkVirtualScrollViewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport,] }],
1131
1136
  paginatorSearch: [{ type: ViewChild, args: ['paginatorSearch',] }]
1132
1137
  };
1133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUF5QixNQUFNLGtCQUFrQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RixPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWtCdkcsTUFBTSxPQUFPLDZCQUE2QjtJQTRIeEMsWUFDVSxLQUF3QixFQUN4QixZQUEwQixFQUMxQixjQUFzQyxFQUN0QyxZQUE2QixFQUM3QixNQUFrQixFQUNuQixLQUE4QixFQUM5QixPQUFnQixFQUNoQixnQkFBa0MsRUFDakMscUJBQTJEO1FBUjNELFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUF5QjtRQUM5QixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQztRQW5JNUQsZUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxnQkFBVyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUkxQixXQUFNLEdBQVcsTUFBTSxDQUFDO1FBQ3hCLFdBQU0sR0FBa0MsSUFBSSw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JGLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQWV6QixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUNwRCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUN2RCw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQUNqRixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN2RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0MsMkJBQXNCLEdBQUcsSUFBSSxZQUFZLEVBQXlELENBQUM7UUFDbkcsOEJBQXlCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUN4RCw0QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBS3ZELG1CQUFjLEdBQUcsMkJBQTJCLENBQUM7UUFDdEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNOLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUM3Qyx5QkFBb0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3pDLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUMxQixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUN0RCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBNEMsSUFBSSx3QkFBd0IsRUFBbUIsQ0FBQyxDQUFDO1FBQzdJLGlCQUFZLEdBQWtDLEVBQUUsQ0FBQztRQWN4QyxrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQy9DLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUNyRCxlQUFVLEdBQVcsRUFBRSxDQUFDO1FBRWYsb0JBQWUsR0FBRyxjQUFjLENBQUM7UUFDMUMscUJBQWdCLEdBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELHFCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUNyQixzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztRQUM1RCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO1FBQzFELHVCQUFrQixHQUFHLElBQUksY0FBYyxDQUFrQixJQUFJLENBQUMsQ0FBQztRQUMvRCw2QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FBOEIsSUFBSSxDQUFDLENBQUM7UUFNbEYsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO1FBQ3pCLHFDQUFnQyxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO1FBRXJGLHNCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUNyRCwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzVDLDhCQUF5QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFaEQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDOUQsaUJBQVksR0FBRyxZQUFZLENBQUM7UUFDWCxpQkFBWSxHQUFHLENBQUMsSUFBaUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUN2RSxRQUFRLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEIsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzVHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3RELFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzlCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDaEMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUMxQyxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDdEMsUUFBUSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN0RCxRQUFRLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDO1lBQzVFLFFBQVEsQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFFcEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsQ0FBQTtRQUVnQixhQUFRLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEVBQUUsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSyxDQUFDO1FBQ2xELGNBQVMsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDakQsaUJBQVksR0FBRyxDQUFDLElBQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDM0UsYUFBUSxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQXFCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFaEQsd0JBQW1CLEdBQXVCO1lBQ3pELGNBQWMsRUFBRSxLQUFLO1lBQ3JCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQTtRQWFDLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsWUFBWTthQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7Z0JBQ2xCLE9BQU87WUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUNMLGdCQUFnQjtRQUNoQixjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELGNBQWMsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkUsY0FBYyxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRSxjQUFjLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsY0FBYyxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxjQUFjLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuRixJQUFJLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUVuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFuS0QsSUFBYSxZQUFZLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBSUQsSUFBSSxlQUFlO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUNuQixPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsSUFBSSw4QkFBOEI7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQXlCRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9HLENBQUM7SUFFRCxJQUFJLHlCQUF5QjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSixDQUFDO0lBZ0hELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUNoRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3JELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDVixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLEtBQUssS0FBSyxDQUFDO2dCQUNiLElBQUksQ0FBQyx3QkFBd0I7b0JBQzNCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUI7eUJBQzlDLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNyRSxRQUFRLEVBQUUsRUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQ3pDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLOzRCQUM1QixPQUFPO3dCQUNULElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTs0QkFDckIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7NEJBQ3pCLE9BQU87eUJBQ1I7d0JBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt3QkFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxDQUFDO3lCQUNKLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FDakMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixPQUFPO1NBQ1I7UUFDRCx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWtCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sY0FBYyxHQUFzQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDM0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQ3hCLE9BQU87UUFDVCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQ2xDLE9BQU87UUFDVCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM1QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1Riw4REFBOEQ7UUFDOUQsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ2xGLElBQUksS0FBSyxHQUFHLENBQUM7Z0JBQ1gsU0FBUztZQUNYLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFM0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELDhDQUE4QztJQUN0QywrQkFBK0I7UUFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsZ0NBQWdDO2lCQUNsQyxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNULElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07b0JBQzVCLE9BQU87Z0JBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxJQUFJOzRCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztxQkFDakM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsS0FBSSxNQUFBLENBQUMsQ0FBQyxRQUFRLDBDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBLENBQUEsRUFBQSxDQUFDLENBQUM7b0JBQy9HLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLElBQUk7NEJBQ1AsU0FBUzt3QkFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ2xELFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQzt3QkFDbEMsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3JELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFOzRCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dDQUN2QixTQUFTOzRCQUNYLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzFGLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtnQ0FDcEIsU0FBUzs0QkFDWCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dDQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQ3BELFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0NBQy9DLFdBQVcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDOzRCQUM5QixDQUFDLENBQUMsQ0FBQzs0QkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7eUJBQy9DO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0osU0FBUyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLHdCQUF3QixDQUFDLFFBQXFDOztZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUNuQixPQUFPO1lBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLENBQUMsUUFBUTtnQkFDWixNQUFNLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QyxDQUFDO0tBQUE7SUFFRCwrQkFBK0I7SUFDdkIsMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPO2FBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQW1DLEVBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNoQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNuQixNQUFNLFVBQVUsR0FBZ0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDNUUsVUFBVSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUk7d0JBQ25CLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDbEUsTUFBTSxVQUFVLEdBQWdCLENBQUMsQ0FBQyxTQUFTLENBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7eUJBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDM0MsT0FBTyxFQUFFO3lCQUNULElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUU7d0JBQ2hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN2RCxVQUFVLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzFFLElBQUksV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTs0QkFDMUUsV0FBVyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDOzRCQUN6QyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDdkM7d0JBQ0QsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQzNELDRCQUE0Qjt3QkFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZJLE9BQU87cUJBQ1I7b0JBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7d0JBQzFCLE9BQU87b0JBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3JDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNsQixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO3dCQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM5RCxJQUFJLENBQUMsS0FBSzs0QkFBRSxPQUFPO3dCQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQzt3QkFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxPQUFPO3FCQUNSO29CQUNELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pFLElBQUksQ0FBQyxLQUFLLEVBQUU7d0JBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxDQUFDLEtBQUs7NEJBQUUsT0FBTzt3QkFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxPQUFPO3FCQUNSO29CQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUMxQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO3dCQUN2QyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUM5RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUN6RCxJQUFJLENBQUMsS0FBSztnQ0FBRSxPQUFPOzRCQUNuQixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7eUJBQ3REO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxLQUFzQyxFQUFFLElBQW1CO1FBQzdGLFFBQVEsS0FBSyxFQUFFO1lBQ2IsS0FBSyxTQUFTO2dCQUNaLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxJQUFJO29CQUNiLEtBQUssRUFBRSxFQUFFO29CQUNULE9BQU8sRUFBRSxFQUFFO29CQUNYLE1BQU0sRUFBRSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQztpQkFDdEQsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztvQkFDakMsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsS0FBSyxFQUFFLEVBQUU7b0JBQ1QsT0FBTyxFQUFFLElBQUk7b0JBQ2IsTUFBTSxFQUFFLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDO2lCQUN0RCxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDO29CQUNqQyxPQUFPLEVBQUUsRUFBRTtvQkFDWCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQ3RELENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1I7Z0JBQ0UsT0FBTztTQUNWO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsaUJBQWlCO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTs7b0JBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLFFBQVEsR0FBbUMsRUFBRSxDQUFDO29CQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO3dCQUNwQixRQUFRLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFtQyxDQUFBLENBQUMsS0FBSSxFQUFFLENBQUM7cUJBQ3JGO3lCQUNJO3dCQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ3hELFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzRCQUM5QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7NEJBQ1IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO3lCQUNvQixDQUFBLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3FCQUNwRDtvQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksaUNBQ2pCLElBQUksS0FDUCxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixJQUFJLENBQUMsSUFBSSxFQUMxRSxRQUFRLEVBQUU7NEJBQ1IsR0FBRyxRQUFROzRCQUNYO2dDQUNFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQ0FDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7NkJBQ2hCO3lCQUNGLEVBQ0QsU0FBUyxFQUFFLEtBQUssSUFDaEIsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQzthQUNBLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFDdEIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7YUFDQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBbUI7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELG1CQUFtQixDQUFDLFNBQWtCLEVBQUUsTUFBYztRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJO1lBQ1AsT0FBTztRQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQXFCO1FBQ2hDLElBQUksQ0FBQyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxVQUFVLENBQUE7WUFBRSxPQUFPO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDcEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBc0I7UUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CO1lBQzdELE9BQU87UUFDVCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRSxPQUFPO1NBQ1I7UUFBQSxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUM1RCxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixPQUFPO2FBQ1I7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDakUsT0FBTztZQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7aUJBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsT0FBTzthQUNSO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXFCLEVBQUUscUJBQThCLElBQUk7UUFDbkUsSUFBSSxDQUFDLElBQUk7WUFDUCxPQUFPO1FBQ1QsSUFBSSxrQkFBa0I7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksa0JBQWtCLEVBQUU7WUFDeEYsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDcEcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDNUQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFHLE1BQTZCLEVBQVEsRUFBRTtZQUNuRSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUN6QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7Z0JBQ2pFLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUk7Z0JBQ1AsT0FBTztZQUNULElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQztvQkFDckIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtvQkFDL0IsUUFBUSxFQUFFLEVBQUU7aUJBQ0UsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNsRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDakMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzFFLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFxQjtRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDM0QsSUFBRyxDQUFDLElBQUk7Z0JBQ04sT0FBTztZQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBRyxPQUFpQjtRQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUNmLE9BQU87UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFHLE9BQWlCO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ2YsT0FBTztRQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE1BQWM7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSTtZQUNQLE9BQU87UUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBcUI7UUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqRyxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFxQjtRQUM5QixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDRyxpQkFBaUIsQ0FBQyxJQUFxQixFQUFFLFFBQTBEOztZQUN2RyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMxQyxJQUFJLENBQUMsQ0FBQyxRQUFRO2dCQUNaLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDN0MsQ0FBQztLQUFBO0lBRUQsZUFBZSxDQUFDLElBQXFCO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLFVBQVUsRUFBRTtZQUNkLHNCQUFzQjtZQUN0QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsWUFBWSxhQUFaLFlBQVksdUJBQVosWUFBWSxDQUFFLEVBQUUsQ0FBQTtnQkFDckMsT0FBTzthQUNSO1lBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xELFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUNsQixPQUFPO1lBQ1QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxLQUFLLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsT0FBTztTQUNSO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRSxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUNuRCxVQUFVLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUN6QyxPQUFPO0lBQ1QsQ0FBQztJQUVPLFNBQVMsQ0FBQyxJQUFxQjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBcUI7UUFDbEMsT0FBTyxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBcUI7UUFDdkMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsSUFBcUI7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVE7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFlBQStCO1FBQzFELE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFxQjtRQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQWlCLENBQUM7SUFDN0QsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQWlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBcUI7UUFDcEMsTUFBTSxVQUFVLEdBQXNCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sTUFBTSxFQUFFO1lBQ2IsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QixNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBcUI7UUFDakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLFlBQVksR0FBRyxDQUFDO1lBQUUsT0FBTztRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksRUFBRTtnQkFDN0MsT0FBTyxXQUFXLENBQUM7YUFDcEI7U0FDRjtRQUNELE9BQU87SUFDVCxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQXFCO1FBQ25DLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUN0RCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDckQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ25ELE9BQU87SUFDVCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QjtZQUNoQyxPQUFPO1FBQ1QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtZQUN2QixPQUFPO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBK0M7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBaUM7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkMsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxJQUFrQztRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQWlDO1FBQ3ZELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUMzQixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hIO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDOUI7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDckQsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUM7UUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLE9BQU87YUFDUjtZQUNELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUssdUJBQXVCLENBQUMsSUFBaUMsRUFBRSxRQUFzRTs7WUFDckksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDaEQsK0VBQStFO1lBQy9FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLENBQUMsUUFBUTtnQkFDWixNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQUVLLHNCQUFzQixDQUFDLFFBQXlDOztZQUNwRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMvQyxJQUFJLENBQUMsQ0FBQyxRQUFRO2dCQUNaLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUMzQixPQUFPO1lBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDO0tBQUE7SUFFRCx5QkFBeUIsQ0FBQyxJQUFpQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQzFGLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOztnQkFDL0IsTUFBTSx1QkFBdUIsR0FBRyxNQUFBLElBQUksQ0FBQyxjQUFjLDBDQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFJLE1BQUEsQ0FBQyxDQUFDLFFBQVEsMENBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUEsQ0FBQSxFQUFBLENBQUMsQ0FBQztnQkFDMUgsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEgsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsSUFBaUMsRUFBRSxRQUFpQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNuSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDakIsSUFBRyxLQUFLLEVBQUM7Z0JBQ1AsSUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztvQkFDaEQsT0FBTztnQkFDVCxJQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUMvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzlDLDJEQUEyRDtZQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLE9BQU87U0FDUjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVU7UUFDM0IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQXVCLEVBQUUsSUFBaUIsRUFBRSxHQUFHLGFBQThCO1FBQ3ZHLElBQUcsQ0FBQyxJQUFJO1lBQ04sT0FBTztRQUNULGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDbkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdELFFBQVEsS0FBSyxFQUFFO2dCQUNiLEtBQUssS0FBSztvQkFDUixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7d0JBQ2hCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDNUQsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTs0QkFDMUIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDekI7d0JBQ0QsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN6RSxPQUFPO3FCQUNSO29CQUNELENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hDLE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLElBQUksQ0FBQyxXQUFXLEVBQUU7d0JBQ2hCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQy9FLElBQUksQ0FBQyxLQUFLOzRCQUNSLE9BQU87d0JBQ1QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxLQUFLLEdBQUcsQ0FBQzs0QkFDWCxPQUFPO3dCQUNULEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDaEMsT0FBTztxQkFDUjtvQkFDRCxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzFELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDdEcsbUJBQW1CLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUNuRixNQUFNO2dCQUNSO29CQUNFLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQU87UUFDN0IsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDM0IsT0FBTztRQUNULElBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBQztZQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksT0FBTyxFQUFFO29CQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM5RSxNQUFNLFNBQVMsR0FBRSxDQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbkQsSUFBRyxDQUFDLFNBQVM7d0JBQ1gsU0FBUztvQkFDWCxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDL0Y7cUJBQ0k7b0JBQ0gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDN0YsSUFBSSxlQUFlLENBQUMsTUFBTTt3QkFDeEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO2lCQUM5RDtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYztvQkFDL0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNoRDtTQUNGO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0seUJBQXlCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBYztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQ0FBcUMsRUFBRTtZQUNwRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQXFCO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFjO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsTUFBTSxFQUFFLENBQVksQ0FBQztRQUN4RyxPQUFPLEdBQUcsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxLQUFJLENBQUMsSUFBSSxDQUFDO0lBQzNDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQW9CLENBQUM7SUFDN0UsQ0FBQztJQUVPLHNCQUFzQixDQUFDLElBQXFCO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQWlCO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFhLEVBQUUsSUFBcUI7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O01BS0U7SUFDRixpQkFBaUIsQ0FBQyxJQUFxQixFQUFFLE9BQTBCLEVBQUUsRUFBRSxPQUE0QixRQUFRO1FBQ3pHLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxVQUFVO1lBQ2IsT0FBTztRQUNULFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxRQUFRO2dCQUNYLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsVUFBVSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQ2hDLE1BQU07U0FDVDtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtnQkFDckIsU0FBUztZQUNYLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7YUFDdEM7U0FDRjtRQUNELElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCx3Q0FBd0M7SUFDaEMsc0JBQXNCLENBQUMsTUFBYztRQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkQsT0FBTztRQUNULE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRixJQUFJLGdCQUFnQjtZQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBcUI7UUFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUNuQixPQUFPO1FBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN2RDtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsRUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQzlFLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBcUI7UUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixPQUFPLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQTBCLEVBQUU7UUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ2QsT0FBTztRQUNULE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxvQ0FBb0M7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUN4RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xELFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDcEMsVUFBVSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztnQkFDcEMsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLElBQUk7Z0JBQ1AsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFxQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQXFCO1FBQ3pDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBRUQsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3hDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM1QixVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDcEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFDLFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDeEQsVUFBVSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQztRQUM5RSxVQUFVLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQ3hFLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFxQjtRQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckUsSUFBSSxVQUFVLEVBQUU7WUFDZCxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDeEMsVUFBVSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFxQjtRQUN4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLDZCQUE2QjtJQUMvQixDQUFDOzs7WUE3cENGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsNEJBQTRCO2dCQUN0QywyMmRBQXNEO2dCQUV0RCxVQUFVLEVBQUU7b0JBQ1YsdUJBQXVCO2lCQUN4QjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQXRDa0UsaUJBQWlCO1lBSzNFLFlBQVk7WUFPWixzQkFBc0I7WUFWdEIsZUFBZTtZQUZ5RSxVQUFVO1lBV2xHLHVCQUF1QjtZQWR2QixPQUFPO1lBRzZJLGdCQUFnQjtZQXFCcEssb0NBQW9DOzs7MkJBc0IxQyxLQUFLO3FCQUdMLEtBQUs7cUJBQ0wsS0FBSzs0QkFnQkwsTUFBTTtrQ0FDTixNQUFNO2lDQUNOLE1BQU07dUNBQ04sTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07OEJBQ04sTUFBTTtxQ0FDTixNQUFNO3dDQUNOLE1BQU07c0NBQ04sTUFBTTt1Q0FFTixTQUFTLFNBQUMsd0JBQXdCOzhCQUNsQyxTQUFTLFNBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcclxuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgbWFwLCBwYWlyd2lzZSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBRTVNGbGF0Tm9kZVRyZWUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1mbGF0LW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNUcmVlTm9kZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLXRyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdpbmF0aW9uU2l6ZSwgUU1TUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcW1zLXBhZ2luYXRvcic7XHJcbmltcG9ydCB7IEl0ZW1JY29uVHlwZSB9IGZyb20gJy4uL3JlbGF0ZWQvY29tbW9uL2l0ZW0taWNvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBBbmltYXRpb25UcmVlRGVwYXJ0bWVudCB9IGZyb20gJy4vYW5pbWF0aW9uL2FuaW1hdGlvbic7XHJcbmltcG9ydCB7IE1vZGVEZXBhcnRtZW50VHJlZWVWaWV3RW51bSB9IGZyb20gJy4vZW51bS9tb2RlLWRlcGFydG1lbnQtdHJlZS12aWV3LmVudW0nO1xyXG5pbXBvcnQgeyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWwgfSBmcm9tICcuL21vZGVsL2RlcGFydG1lbnQtcGFnaW5nLm1vZGVsJztcclxuaW1wb3J0IHsgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYiwgRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXNlYXJjaC1yZXN1bHQubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb25maWcnO1xyXG5pbXBvcnQgeyBJU2VsZWN0aW9uTm9kZUNoYW5nZSB9IGZyb20gJy4vbW9kZWwvc2VsZWN0aW9uLWNoYW5nZS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdERlcGFydG1lbnRUcmVlR2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLWdsb2JhbC5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBJSGFuZGxpbmdFdmVudExhenkge1xyXG4gIGNoZWNrQWxsU2VhcmNoOiBib29sZWFuO1xyXG4gIGNoZWNrSXRlbVNlYXJjaDogYm9vbGVhbjtcclxuICBjaGVja05vZGU6IGJvb2xlYW47XHJcbiAgZXhwYW5kOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3Ftcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIEFuaW1hdGlvblRyZWVEZXBhcnRtZW50XHJcbiAgXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdERlcGFydG1lbnRUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuICBMQU5HOiBhbnk7XHJcbiAgcmVhZG9ubHkgc3Bpbm5lckFyciA9IG5ldyBBcnJheSgxMikuZmlsbCgwKTtcclxuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg2KS5maWxsKDApO1xyXG4gIEBJbnB1dCgpIHNldCByb3dzU2tlbGV0b24odmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5hcnJTa2VsZXRvbiA9IG5ldyBBcnJheSh2YWx1ZSkuZmlsbCgwKTtcclxuICB9XHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgPSAnNTB2aCc7XHJcbiAgQElucHV0KCkgY29uZmlnOiBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZyA9IG5ldyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUNvbmZpZygpO1xyXG4gIGlzSW5jbHVkZUNoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGRlcGFydG1lbnRSb290cygpIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgcmV0dXJuIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcihub2RlID0+IG5vZGUubGV2ZWwgPT09IDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy50cmVlQ29udHJvbCAmJiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5ldmVyeShub2RlID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzSW5kZXRlcm1pbmF0ZUNoZWNrYm94QWxsVHJlZSgpIHtcclxuICAgIHJldHVybiAhdGhpcy5pc0FsbERlcGFydG1lbnRTZWxlY3RlZCAmJiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIG9uU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25QYWdpbmdTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvblZhbHVlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU1RyZWVOb2RlW10+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNlbGVjdGlvbk5vZGVDaGFuZ2U8UU1TVHJlZU5vZGU+PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoZWNrTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XHJcbiAgQE91dHB1dCgpIG9uRXhwYW5kTm9kZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNGbGF0Tm9kZVRyZWU+KCk7XHJcbiAgQE91dHB1dCgpIG9uTG9hZE1vcmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb25DaGVja0l0ZW1TZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGF0ZTogYm9vbGVhbiwgaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsIH0+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHRvZ2dsZUluY2x1ZGVDaGlsZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5hdG9yU2VhcmNoJykgcGFnaW5hdG9yU2VhcmNoOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcblxyXG4gIHJlYWRvbmx5IE1PREVfVklFV19FTlVNID0gTW9kZURlcGFydG1lbnRUcmVlZVZpZXdFbnVtO1xyXG4gIElURU1fU0laRSA9IDUwO1xyXG4gIHJlYWRvbmx5IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlc3VsdFNlYXJjaFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgcmVzdWx0U2VsZWN0ZWQ6IFFNU1RyZWVOb2RlW10gPSBbXTtcclxuICByZWFkb25seSBnZXREYXRhVHJlZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU1RyZWVOb2RlW10+KFtdKTtcclxuICByZWFkb25seSBzZWFyY2hEZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4+KG5ldyBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKTtcclxuICByZXN1bHRTZWFyY2g6IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbFtdID0gW107XHJcblxyXG4gIGdldCBjdXJyZW50VHJlZURhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXREYXRhVHJlZSQuZ2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIGdldCBpc1NlbGVjdEFsbFJlc3VsdFNlYXJjaCgpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGggJiYgdGhpcy5yZXN1bHRTZWFyY2guZXZlcnkoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcclxuICB9XHJcblxyXG4gIGdldCBpbmRldGVybWluYXRlU2VhcmNoUmVzdWx0KCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0QWxsUmVzdWx0U2VhcmNoICYmICEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoICYmIHRoaXMucmVzdWx0U2VhcmNoLnNvbWUoeCA9PiB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKHgpKTtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGdldEluZGV4VmlldyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcbiAgcmVhZG9ubHkgc2Nyb2xsVG9Ob2RlRXZlbnQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHJlYWRvbmx5IGdldEFjdGl2ZU5vZGVFdmVudCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgYWN0aXZlTm9kZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIHJlYWRvbmx5IFBBR0lOQVRJT05fU0laRSA9IFBhZ2luYXRpb25TaXplO1xyXG4gIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xyXG4gIENVUlJFTlRfUEFHRVNJWkU6IG51bWJlciA9IDEwO1xyXG4gIHJlYWRvbmx5IG5lc3RlZFRyZWVOb2RlTWFwID0gbmV3IE1hcDxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPigpO1xyXG4gIHJlYWRvbmx5IGZsYXRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TRmxhdE5vZGVUcmVlLCBRTVNUcmVlTm9kZT4oKTtcclxuICByZWFkb25seSBjaGVja0xpc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8UU1TRmxhdE5vZGVUcmVlPih0cnVlKTtcclxuICByZWFkb25seSBjaGVja0xpc3RTZWxlY3Rpb25TZWFyY2ggPSBuZXcgU2VsZWN0aW9uTW9kZWw8RGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsPih0cnVlKTtcclxuICB0cmVlQ29udHJvbDogRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT47XHJcbiAgdHJlZUZsYXR0ZW5lcjogTWF0VHJlZUZsYXR0ZW5lcjxRTVNUcmVlTm9kZSwgUU1TRmxhdE5vZGVUcmVlPjtcclxuICBkYXRhU291cmNlOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XHJcblxyXG4gIGRhdGFTb3VyY2VUcmVlU2VhcmNoOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRMaXN0OiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFFNU0ZsYXROb2RlVHJlZVtdPigpO1xyXG5cclxuICBmb3JtU2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgcmVhZG9ubHkgZ2V0TG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSBnZXRMb2FkaW5nTW9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xyXG4gIHJlYWRvbmx5IHVudGlsRGVzdHJveUxvYWRNb3JlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgb25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHJlYWRvbmx5IHRleHRTZWFyY2hTdWJqZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zZm9ybWVyID0gKG5vZGU6IFFNU1RyZWVOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuY29udmVydFRvRmxhdE5vZGUobm9kZSkgfHwgbmV3IFFNU0ZsYXROb2RlVHJlZSgpO1xyXG4gICAgZmxhdE5vZGUuaWQgPSBub2RlLmlkO1xyXG4gICAgZmxhdE5vZGUubmFtZSA9IG5vZGUubmFtZTtcclxuICAgIGZsYXROb2RlLmV4cGFuZGFibGUgPSAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHx8ICghIW5vZGUuY2hpbGRDb3VudCkgfHwgbm9kZS5leHBhbmRhYmxlO1xyXG4gICAgZmxhdE5vZGUubGV2ZWwgPSBsZXZlbDtcclxuICAgIGZsYXROb2RlLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcclxuICAgIGZsYXROb2RlLm1hcmtlZEdldENoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwO1xyXG4gICAgZmxhdE5vZGUuaXRlbUljb24gPSBub2RlLml0ZW1JY29uO1xyXG4gICAgZmxhdE5vZGUuaXRlbUljb25TdmcgPSBub2RlLml0ZW1JY29uU3ZnO1xyXG4gICAgZmxhdE5vZGUuaXNGaWxlID0gbm9kZS5pc0ZpbGU7XHJcbiAgICBmbGF0Tm9kZS5kaXNhYmxlZCA9IG5vZGUuZGlzYWJsZWQ7XHJcbiAgICBmbGF0Tm9kZS5pc0dyb3VwID0gbm9kZS5pc0dyb3VwO1xyXG4gICAgZmxhdE5vZGUuZ3JvdXBJZCA9IG5vZGUuZ3JvdXBJZDtcclxuICAgIGZsYXROb2RlLmV4dGVybmFsTmFtZSA9IG5vZGUuZXh0ZXJuYWxOYW1lO1xyXG4gICAgZmxhdE5vZGUuY2hpbGRDb3VudCA9IG5vZGUuY2hpbGRDb3VudDtcclxuICAgIGZsYXROb2RlLnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xyXG4gICAgZmxhdE5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmUgPSBub2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlO1xyXG4gICAgZmxhdE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcclxuXHJcbiAgICB0aGlzLmZsYXRUcmVlTm9kZU1hcC5zZXQoZmxhdE5vZGUsIG5vZGUpO1xyXG4gICAgdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5zZXQobm9kZSwgZmxhdE5vZGUpO1xyXG4gICAgcmV0dXJuIGZsYXROb2RlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBnZXRMZXZlbCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGU/LmxldmVsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2dldENoaWxkID0gKG5vZGU6IFFNU1RyZWVOb2RlKSA9PiBub2RlLmNoaWxkcmVuO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNFeHBhbmRhYmxlID0gKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsaW5nTGF6eU9iamVjdDogSUhhbmRsaW5nRXZlbnRMYXp5ID0ge1xyXG4gICAgY2hlY2tBbGxTZWFyY2g6IGZhbHNlLFxyXG4gICAgY2hlY2tJdGVtU2VhcmNoOiBmYWxzZSxcclxuICAgIGNoZWNrTm9kZTogZmFsc2UsXHJcbiAgICBleHBhbmQ6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LFxyXG4gICAgcHJpdmF0ZSBlbGVSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwdWJsaWMgdHJhbnM6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcclxuICAgIHByaXZhdGUgdHJlZURlcGFydG1lbnRTZXJ2aWNlOiBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUdsb2JhbFNlcnZpY2VcclxuICApIHtcclxuICAgIC8vIEluaXQgdHJlZSBkYXRhXHJcbiAgICB0aGlzLmdldERhdGFUcmVlJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gUmVnaXN0ZXIgaWNvblxyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclJpc2tJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnMuZ2V0T2JqZWN0TGFuZyhyZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX2hhbmRsZVNlYXJjaEV2ZW50KCk7XHJcbiAgICB0aGlzLl9oYW5kbGVBY3RpdmVOb2RlRXZlbnQoKTtcclxuICAgIHRoaXMuX2hhbmRsZUl0ZW1TZWxlY3Rpb25DaGFuZ2VkKCk7XHJcblxyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHJlcyA9PiB7XHJcbiAgICAgICAgcmVzID8gdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5kaXNhYmxlKCkgOiB0aGlzLmZvcm1TZWFyY2hDb250cm9sLmVuYWJsZSgpO1xyXG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRJbmRleFZpZXckLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLm5nVW5zdWJzY3JpYmUsIHRoaXMudW50aWxEZXN0cm95TG9hZE1vcmUkKSksXHJcbiAgICAgIHRhcChfID0+IHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodGhpcy5jb25maWcubGF6eSkpLFxyXG4gICAgICBkZWxheSg3MDApLFxyXG4gICAgICB0YXAodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMClcclxuICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbGVkSW5kZXhDaGFuZ2VcclxuICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJCksXHJcbiAgICAgICAgICAgICAgICBtYXAoXyA9PiB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKSksXHJcbiAgICAgICAgICAgICAgICBwYWlyd2lzZSgpLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKChbeDEsIHgyXSkgPT4geDEgPiB4MiAmJiB4MiA8IDE0MCksXHJcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWUoMjAwKSxcclxuICAgICAgICAgICAgICAgIHRhcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TG9hZGluZ01vcmUkLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlc3Ryb3lMb2FkTW9yZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uTG9hZE1vcmVFdmVudC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLm9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHRhcChfID0+IHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVMaXN0U2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcclxuICAgICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSB0aGlzLmNvbmZpZy5pc0luY2x1ZGVDaGlsZHJlbjtcclxuICAgIHRoaXMuX2luaXRUcmVlRGF0YSgpO1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZUxpc3RTZWxlY3RlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvL2FjdGlvbiBmb3IgbGF6eSBjb25maWdcclxuICAgIHRoaXMuX2luaXRMaXN0U2VsZWN0ZWQoKTtcclxuICAgIHRoaXMuX2hhbmRsZUFmdGVyRGF0YU5vZGVDaGFuZ2VFdmVudCgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25EZXN0cm95TG9hZE1vcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5uZXh0KCk7XHJcbiAgICB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFRyZWVEYXRhKCkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8UU1TRmxhdE5vZGVUcmVlPih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcih0aGlzLl90cmFuc2Zvcm1lciwgdGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUsIHRoaXMuX2dldENoaWxkKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuICAgIGNvbnN0IF90cmVlRGF0YUlucHV0OiBRTVNGbGF0Tm9kZVRyZWVbXSA9IF8uY2xvbmVEZWVwKHRoaXMuY29uZmlnLnRyZWVEYXRhKVxyXG4gICAgaWYgKCFfdHJlZURhdGFJbnB1dC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGNvbnN0IHRyZWVEYXRhID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoX3RyZWVEYXRhSW5wdXQpO1xyXG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0cmVlRGF0YSk7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlTGlzdFNlbGVjdGVkKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBjb25zdCBzZWxlY3RlZExpc3QgPSB0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3Quc29ydCgoeCwgeSkgPT4geC5pc0dyb3VwID8gLTEgOiB5LmlzR3JvdXAgPyAxIDogMCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gc2VsZWN0ZWRMaXN0W2ldO1xyXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcclxuICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBpdGVtLmdyb3VwSWQ7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gICAgICAgIHRoaXMub25FeHBhbmRBbGxQYXJlbnQobm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdExpc3RTZWxlY3RlZCgpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKHRoaXMuY29uZmlnLnNlbGVjdGVkTGlzdCk7XHJcbiAgICAvL0NvbnZlcnQgYXJyYXkgc2VsZWN0ZWRMaXN0IGludG8gbmVzdGVkIGFycmF5IGFzIDEgbGV2ZWwgZm9ybVxyXG4gICAgY29uc3QgaW5kZXhSZW1vdmUgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fc2VsZWN0ZWRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3RbaV07XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pO1xyXG4gICAgICBpdGVtLmNoaWxkcmVuID0gcmVzdWx0O1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiByZXN1bHQuc29tZSh4MSA9PiB4MS5pZCA9PT0geC5pZCkpXHJcbiAgICAgIGlmIChpbmRleCA8IDApXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIGluZGV4UmVtb3ZlLnB1c2goaW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbHRlcigoXywgaW5kZXgpID0+ICFpbmRleFJlbW92ZS5pbmNsdWRlcyhpbmRleCkpO1xyXG5cclxuICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQucHVzaCguLi50aGlzLl9zZWxlY3RlZExpc3QpO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIC8vIGhhbmRsZSBzZWxlY3RlZCBsaXN0IHdoZW4gZGF0YSBub2RlcyBjaGFuZ2VcclxuICBwcml2YXRlIF9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcclxuICAgICAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3RlZExpc3QubGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFpdGVtLnBhcmVudElkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlKVxyXG4gICAgICAgICAgICAgICAgICBpdGVtLnBhcmVudElkID0gbm9kZS5wYXJlbnRJZDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZGF0YVtpXTtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmlkID09PSBlbGVtZW50LmlkIHx8IHguY2hpbGRyZW4/LnNvbWUoeDEgPT4geDEuaWQgPT09IGVsZW1lbnQuaWQpKTtcclxuICAgICAgICAgICAgICBpZiAoISFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gaXRlbS5pc0dyb3VwO1xyXG4gICAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbS5jaGlsZHJlbi5sZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TZWxlY3QgPSBkZXNjZW5kYW50cy5maWx0ZXIoeCA9PiBpdGVtLmNoaWxkcmVuLm1hcCh4MSA9PiB4MS5pZCkuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW1TZWxlY3QubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0LmZvckVhY2goX2l0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9uZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKF9pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5jaGlsZHJlblswXS5ncm91cElkO1xyXG4gICAgICAgICAgICAgICAgICAgIF9uZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5pdGVtU2VsZWN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHVzZSBmb3IgbGF6eSBtb2RlLCBkbyBzb21lIHRoaW5nIGJlZm9yZSBpbml0IGxpc3Qgbm9kZSBzZWxlY3RlZFxyXG4gICAqIEBwYXJhbSBjYWxsYmFja1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgb25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkKGNhbGxiYWNrPzogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcclxuICAgIGlmICghdGhpcy5jb25maWcubGF6eSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dCh0cnVlKTtcclxuICAgIGlmICghIWNhbGxiYWNrKVxyXG4gICAgICBhd2FpdCBjYWxsYmFjaygpO1xyXG4gICAgdGhpcy5vbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vSGFuZGxlIGl0ZW0gc2VsZWN0aW9uIGNoYW5nZWRcclxuICBwcml2YXRlIF9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmNoYW5nZWRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHsgYWRkZWQsIHJlbW92ZWQgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrRXhpc3RJblJlc3VsdCA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUgfCBRTVNUcmVlTm9kZSk6IGJvb2xlYW4gPT4gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKSA+IC0xO1xyXG4gICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIHtcclxuICAgICAgICAgIGFkZGVkLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGU6IFFNU1RyZWVOb2RlID0gXy5jbG9uZURlZXAodGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpKTtcclxuICAgICAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpXHJcbiAgICAgICAgICAgICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBleGlzdEdyb3VwOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKFxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKVxyXG4gICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShpdGVtKSlcclxuICAgICAgICAgICAgICAgIC5yZXZlcnNlKClcclxuICAgICAgICAgICAgICAgIC5maW5kKHggPT4geC5pc0dyb3VwKSk7XHJcbiAgICAgICAgICAgIGlmICghIWV4aXN0R3JvdXApIHtcclxuICAgICAgICAgICAgICBjb25zdCBmbGF0RXhpc3RHcm91cCA9IHRoaXMuZ2V0Tm9kZUJ5SWQoZXhpc3RHcm91cC5pZCk7XHJcbiAgICAgICAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gZXhpc3RHcm91cC5pZDtcclxuICAgICAgICAgICAgICBjb25zdCBncm91cFJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IGV4aXN0R3JvdXAuaWQpO1xyXG4gICAgICAgICAgICAgIGlmIChncm91cFJlc3VsdCAmJiAhZ3JvdXBSZXN1bHQuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IG5lc3RlZE5vZGUuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cFJlc3VsdC5pc0dyb3VwID0gZXhpc3RHcm91cC5pc0dyb3VwO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBSZXN1bHQuY2hpbGRyZW4ucHVzaChuZXN0ZWROb2RlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3VwZGF0ZWQnLCBbZ3JvdXBSZXN1bHRdKTtcclxuICAgICAgICAgICAgICAvLyByZS1maWx0ZXIgcmVzdWx0IHNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKGZsYXRFeGlzdEdyb3VwKS5tYXAoeCA9PiB4LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjaGVja0V4aXN0SW5SZXN1bHQobm9kZSkpXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2gobmVzdGVkTm9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdhZGRlZCcsIFtuZXN0ZWROb2RlXSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbW92ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZW1vdmVkLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXN0ZWROb2RlLmlzR3JvdXApIHtcclxuICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcclxuICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5ncm91cElkID0gbnVsbCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmdyb3VwSWQpO1xyXG4gICAgICAgICAgICBpZiAoIWdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcclxuICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5zcGxpY2UodGhpcy5yZXN1bHRTZWxlY3RlZC5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3JlbW92ZWQnLCBbX2l0ZW1dKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmNvbmNhdChub2RlKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICAgICAgY29uc3QgX25vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpXHJcbiAgICAgICAgICAgICAgaWYgKGdyb3VwLmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBfbm9kZS5pZCkgJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUoX25vZGUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBfaXRlbSA9IGdyb3VwLmNoaWxkcmVuLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmICghX2l0ZW0pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuLnNwbGljZShncm91cC5jaGlsZHJlbi5pbmRleE9mKF9pdGVtKSwgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgndXBkYXRlZCcsIFtncm91cF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XHJcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudChzdGF0ZTogJ3JlbW92ZWQnIHwgJ3VwZGF0ZWQnIHwgJ2FkZGVkJywgZGF0YTogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdyZW1vdmVkJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcclxuICAgICAgICAgIHJlbW92ZWQ6IGRhdGEsXHJcbiAgICAgICAgICBhZGRlZDogW10sXHJcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcclxuICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VwZGF0ZWQnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50LmVtaXQoe1xyXG4gICAgICAgICAgcmVtb3ZlZDogW10sXHJcbiAgICAgICAgICBhZGRlZDogW10sXHJcbiAgICAgICAgICB1cGRhdGVkOiBkYXRhLFxyXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYWRkZWQnOlxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50LmVtaXQoe1xyXG4gICAgICAgICAgcmVtb3ZlZDogW10sXHJcbiAgICAgICAgICBhZGRlZDogZGF0YSxcclxuICAgICAgICAgIHVwZGF0ZWQ6IFtdLFxyXG4gICAgICAgICAgc291cmNlOiBuZXcgU2VsZWN0aW9uTW9kZWwodHJ1ZSwgdGhpcy5yZXN1bHRTZWxlY3RlZClcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVTZWFyY2hFdmVudCgpIHtcclxuICAgIHRoaXMuc2VhcmNoRGVwYXJ0bWVudCRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaCA9IFtdO1xyXG4gICAgICAgIHRoaXMuQ1VSUkVOVF9QQUdFU0laRSA9IHJlc3VsdC5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVzdWx0LmRhdGEuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbjogRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYltdID0gW107XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5KSB7XHJcbiAgICAgICAgICAgICAgbG9jYXRpb24gPSBpdGVtLnBhdGg/Lm1hcCh4ID0+ICh7IG5hbWU6IHggfSBhcyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSkgfHwgW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IG5vZGUgPyB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSkgOiBbXTtcclxuICAgICAgICAgICAgICBsb2NhdGlvbiA9IHBhcmVudHMubGVuZ3RoID8gcGFyZW50cy5tYXAoKHgpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICB9IGFzIERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpKS5yZXZlcnNlKCkgOiBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdFNlYXJjaC5wdXNoKHtcclxuICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiAhdGhpcy5jb25maWcubGF6eSAmJiB0aGlzLmNvbmZpZy5jaGVja1NlYXJjaE1hcHBpbmdUcmVlICYmICFub2RlLFxyXG4gICAgICAgICAgICAgIGxvY2F0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICAuLi5sb2NhdGlvbixcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudGV4dFNlYXJjaFN1YmplY3QkLm5leHQodGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xyXG4gICAgICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUFjdGl2ZU5vZGVFdmVudCgpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIHN3aXRjaE1hcCgodmFsKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRlbGF5VGltaW5nID0gdGhpcy5nZXRJbmRleFZpZXckLnZhbHVlID09PSAxID8gNzAwIDogMDtcclxuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XHJcbiAgICAgIHJldHVybiBvZih2YWwpLnBpcGUoZGVsYXkoZGVsYXlUaW1pbmcpLCB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSk7XHJcbiAgICB9KSlcclxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldEFjdGl2ZU5vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKHZhbCA9PiB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IHZhbDtcclxuICAgICAgcmV0dXJuIHRpbWVyKDE1MDApO1xyXG4gICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gJyc7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGF0YVRyZWUoZGF0YTogUU1TVHJlZU5vZGVbXSkge1xyXG4gICAgdGhpcy5nZXREYXRhVHJlZSQubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIHNldExvYWRpbmdTdGF0ZU5vZGUoaXNMb2FkaW5nOiBib29sZWFuLCBub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcclxuICAgIGlmICghbm9kZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgbm9kZS5pc0xvYWRpbmcgPSBpc0xvYWRpbmc7XHJcbiAgICB0aGlzLmNoZWNrTG9hZGluZ09mUGFyZW50KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25FeHBhbmROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgaWYgKCFub2RlPy5leHBhbmRhYmxlKSByZXR1cm47XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLnRvZ2dsZShub2RlKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5sYXp5ICYmIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSAmJiAhbm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xyXG4gICAgICBub2RlLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRXhwYW5kTm9kZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBvbk9wdGlvblNlYXJjaFNlbGVjdGVkKHZhbHVlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZCh2YWx1ZS5pZCk7XHJcbiAgICBpZiAoIWZsYXROb2RlKSByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKGZsYXROb2RlLmlkKTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tBbGxSb290VHJlZU5vZGUoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUgfHwgIXRoaXMuY29uZmlnLmFjdGl2ZVNlbGVjdEFsbE5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzQWxsRGVwYXJ0bWVudFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLnRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudFJvb3RzLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5pc0luY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKVxyXG4gICAgICAgICAgLmZvckVhY2goeCA9PiB0aGlzLm9uQ2hlY2tOb2RlKHgpKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgaWYgKG5lc3RlZE5vZGUuaXNHcm91cCAmJiB0aGlzLmlzQ2hlY2tBbGwobm9kZSkgfHwgIW5vZGUuZXhwYW5kYWJsZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+ICF0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKVxyXG4gICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkgJiYgdGhpcy5vbkNoZWNrTm9kZShpdGVtKSk7XHJcbiAgICAgIGlmICghbmVzdGVkTm9kZS5pc0dyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBmaXJlRXZlbnRDaGVja05vZGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAoIW5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmIChmaXJlRXZlbnRDaGVja05vZGUpXHJcbiAgICAgIHRoaXMub25DaGVja05vZGVFdmVudC5lbWl0KG5vZGUpO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShub2RlLmlkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkgJiYgbm9kZS5leHBhbmRhYmxlICYmICFub2RlLm1hcmtlZEdldENoaWxkcmVuICYmIGZpcmVFdmVudENoZWNrTm9kZSkge1xyXG4gICAgICBpZiAoIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbm9kZS5pc0xvYWRpbmcgPSB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHguZXhwYW5kYWJsZSAmJiAheC5tYXJrZWRHZXRDaGlsZHJlbik7XHJcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goeCA9PiB4LmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZVNlbGVjdE9uZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9kZVRyZWUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gbm9kZUlkKTtcclxuICAgIGNvbnN0IHJlU2VsZWN0U2VsZWN0aW9uID0gKC4uLnBhcmFtczogU2VsZWN0aW9uTW9kZWw8YW55PltdKTogdm9pZCA9PiB7XHJcbiAgICAgIHBhcmFtcy5mb3JFYWNoKHNlbGVjdGlvbiA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZUlkKTtcclxuICAgICAgICBzZWxlY3Rpb24uZGVzZWxlY3QoLi4uc2VsZWN0ZWQpO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICBpZiAoIW5vZGVUcmVlKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKTtcclxuICAgICAgaWYgKCFpdGVtKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFt7XHJcbiAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgIGV4dGVybmFsTmFtZTogaXRlbS5leHRlcm5hbE5hbWUsXHJcbiAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgIH0gYXMgUU1TVHJlZU5vZGVdO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbLi4udGhpcy5yZXN1bHRTZWxlY3RlZF07XHJcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICAgIHJlU2VsZWN0U2VsZWN0aW9uKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaCk7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkTm9kZShub2RlVHJlZSkpIHtcclxuICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3RlZFswXSk7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnJlc3VsdFNlbGVjdGVkXTtcclxuICAgICAgcmVTZWxlY3RTZWxlY3Rpb24odGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN1bHRTZWxlY3RlZCA9IFtdO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gW107XHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZEFsbFBhcmVudChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IHBhcmVudHMgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBpZiAocGFyZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHBhcmVudHMuZm9yRWFjaChwYXJlbnQgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKHBhcmVudCkpXHJcbiAgICAgICAgICB0aGlzLm9uRXhwYW5kTm9kZShwYXJlbnQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlTm9kZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIWZsYXROb2RlKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IG5vZGVJZCk7XHJcbiAgICAgIGlmKCFpdGVtKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KCdyZW1vdmUnLCBpdGVtLCAgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGZsYXROb2RlKTtcclxuICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKGZsYXROb2RlKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0Tm9kZSguLi5ub2RlSWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiBub2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcclxuICAgIGlmICghbm9kZXMubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4ubm9kZXMpO1xyXG4gIH1cclxuXHJcbiAgb25EZXNlbGVjdE5vZGUoLi4ubm9kZUlkczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gbm9kZUlkcy5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICBpZiAoIW5vZGVzLmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4ubm9kZXMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUb2dnbGVzIGEgdmFsdWUgYmV0d2VlbiBzZWxlY3RlZCBhbmQgZGVzZWxlY3RlZC5cclxuICAgKiBAcGFyYW0gbm9kZUlkIDppZCBvZiBub2RlXHJcbiAgICovXHJcbiAgb25Ub2dnbGVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xyXG4gICAgaWYgKCFub2RlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgfVxyXG5cclxuICBpc0luZGV0ZXJtaW5hdGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XHJcbiAgICByZXR1cm4gKCEhY2hpbGRTZWxlY3RlZC5sZW5ndGggJiYgIXRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpO1xyXG4gIH1cclxuXHJcbiAgaXNDaGVja0FsbChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGxpc3RDaGVjayA9IFsuLi50aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKSwgbm9kZV07XHJcbiAgICByZXR1cm4gbGlzdENoZWNrLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZSBjaGVjayBub2RlIG9mIHRyZWVcclxuICAgKiBAcGFyYW0gbm9kZSBub2RlIG9mIHRyZWVcclxuICAgKiBAcGFyYW0gY2FsbGJhY2sgZG8gc29tZXRoaW5nIGJlZm9yZSBoYW5kbGUgY2hlY2sgbm9kZVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgb25CZWZvcmVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlLCBjYWxsYmFjaz86IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gdHJ1ZTtcclxuICAgIGlmICghIWNhbGxiYWNrKVxyXG4gICAgICBhd2FpdCBjYWxsYmFjayhub2RlKTtcclxuICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2hlY2tOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XHJcbiAgICBjb25zdCBjaGlsZFNlbGVjdGVkID0gdGhpcy5nZXRDaGlsZHJlblNlbGVjdGVkKG5vZGUpO1xyXG4gICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuXHJcbiAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAvLyBDaGVjayBleGlzdGVkIGdyb3VwXHJcbiAgICAgIGNvbnN0IGV4aXN0ZWRHcm91cCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKS5maW5kKHggPT4gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHgpLmlzR3JvdXApO1xyXG4gICAgICBpZiAoIXRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICBuZXN0ZWROb2RlLmdyb3VwSWQgPSBleGlzdGVkR3JvdXA/LmlkXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XHJcbiAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9ICFleGlzdGVkR3JvdXAgJiYgISFjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICBjb25zdCBfbm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZSh4KTtcclxuICAgICAgICBfbm9kZS5ncm91cElkID0gZXhpc3RlZEdyb3VwID8gZXhpc3RlZEdyb3VwLmlkIDogbm9kZS5pZDtcclxuICAgICAgICBfbm9kZS5pc0dyb3VwID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uY2hpbGRTZWxlY3RlZC5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xyXG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uY2hpbGRyZW4ubWFwKHggPT4gdGhpcy5yZXNldE5vZGUoeCkpKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgX3NlbGVjdGVkSW5kZXggPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICBfc2VsZWN0ZWRJbmRleCA+IC0xICYmIHRoaXMuX3NlbGVjdGVkTGlzdC5zcGxpY2UoX3NlbGVjdGVkSW5kZXgsIDEpO1xyXG4gICAgY29uc3QgZGVzZWxlY3ROb2RlcyA9ICh0aGlzLmlzSW5jbHVkZUNoaWxkcmVuIHx8IG5lc3RlZE5vZGUuaXNHcm91cCkgPyBjaGlsZFNlbGVjdGVkIDogW25vZGVdO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzZWxlY3ROb2Rlcyk7XHJcbiAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpXHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIG5vZGUuaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHJldHVybiBub2RlICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDaGlsZHJlblNlbGVjdGVkKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoeCA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKHgpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBhIGxpc3Qgb2YgdGhlIGRhdGEgbm9kZSdzIHN1YnRyZWUgb2YgZGVzY2VuZGVudCBkYXRhIG5vZGVzLlxyXG4gICAqIEBwYXJhbSBub2RlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZS5pZCk7XHJcbiAgICBpZiAoIWZsYXROb2RlKVxyXG4gICAgICByZXR1cm4gW107XHJcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhmbGF0Tm9kZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tYXBUb05lc3RlZExpc3ROb2RlKGZsYXROb2RlTGlzdDogUU1TRmxhdE5vZGVUcmVlW10pOiBRTVNUcmVlTm9kZVtdIHtcclxuICAgIHJldHVybiBmbGF0Tm9kZUxpc3QubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb05lc3RlZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TVHJlZU5vZGUge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxhdFRyZWVOb2RlTWFwLmdldChub2RlKSB8fCB7fSBhcyBRTVNUcmVlTm9kZTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0ZsYXROb2RlKG5vZGU6IFFNU1RyZWVOb2RlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZXN0ZWRUcmVlTm9kZU1hcC5nZXQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxQYXJlbnROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZVtdIHtcclxuICAgIGNvbnN0IGxpc3RQYXJlbnQ6IFFNU0ZsYXROb2RlVHJlZVtdID0gW107XHJcbiAgICBsZXQgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICBsaXN0UGFyZW50LnB1c2gocGFyZW50KTtcclxuICAgICAgcGFyZW50ID0gdGhpcy5nZXRQYXJlbnROb2RlKHBhcmVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGlzdFBhcmVudDtcclxuICB9XHJcblxyXG4gIGdldFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0TGV2ZWwobm9kZSk7XHJcbiAgICBpZiAoY3VycmVudExldmVsIDwgMSkgcmV0dXJuO1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlc1tpXTtcclxuICAgICAgaWYgKHRoaXMuZ2V0TGV2ZWwoY3VycmVudE5vZGUpIDwgY3VycmVudExldmVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtSWNvblR5cGUoaXRlbTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBpZiAoISFpdGVtLml0ZW1NYXRJY29uKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUubmFtZTtcclxuICAgIGlmICghIWl0ZW0uaXRlbUljb25TdmcpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5zdmc7XHJcbiAgICBpZiAoISFpdGVtLml0ZW1JY29uKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUucGF0aDtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TY3JvbGxJbnRvTm9kZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGVJZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5vbkV4cGFuZE5vZGUoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5vbkV4cGFuZEFsbFBhcmVudChmbGF0Tm9kZSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGZsYXROb2RlLmlkKTtcclxuICAgIGlmICghdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvSW5kZXgoaW5kZXgsICdzbW9vdGgnKTtcclxuICAgIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5uZXh0KG5vZGVJZCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCgpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuc2V0SW5kZXhWaWV3KDEpO1xyXG4gICAgdGhpcy5vblNlYXJjaEV2ZW50LmVtaXQodGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSk7XHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yU2VhcmNoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLnBhZ2luYXRvclNlYXJjaC5jaGFuZ2VQYWdlKDApO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JTZWFyY2gucmVuZGVyRGlzcGxheU51bWJlck9mcGFnZXMoKTtcclxuICB9XHJcblxyXG4gIHNldFJlc3VsdFNlYXJjaChkYXRhOiBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPikge1xyXG4gICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1Jlc3VsdEl0ZW0oaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgIGlmIChub2RlKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ob2RlKG5vZGUuaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CcmVhZENydW1iSXRlbUNsaWNrKGl0ZW06IERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XHJcbiAgICAgIG9mKG5vZGUuaWQpLnBpcGUoZGVsYXkoNzAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gudG9nZ2xlKGl0ZW0pO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KC4uLnRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT0gaXRlbS5pZCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoZWNrSXRlbVNlYXJjaEV2ZW50LmVtaXQoXHJcbiAgICAgIHtcclxuICAgICAgICBzdGF0ZTogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSxcclxuICAgICAgICBpdGVtOiBpdGVtXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcclxuICAgICAgaWYgKCF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tJdGVtU2VhcmNoKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCwgY2FsbGJhY2s/OiAoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xyXG4gICAgaXRlbS5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IHRydWU7XHJcbiAgICAvLyBob2xkIHN0YXRlIGJlZm9yZSBjYWxsIG1ldGhvZCBjYWxsYmFjayB0byBwcmV2ZW50IGxvc3QgaXQncyBzdGF0ZSB1bmV4cGVjdGVkXHJcbiAgICBjb25zdCBpc1NlbGVjdCA9IHRoaXMuaXNTZWxlY3RJdGVtU2VhcmNoKGl0ZW0uaWQpO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKGl0ZW0pO1xyXG4gICAgaXRlbS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGlzU2VsZWN0KTtcclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkJlZm9yZUNoZWNrQWxsU2VhcmNoKGNhbGxiYWNrPzogKGRhdGEpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2ggPSB0cnVlO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKHRoaXMucmVzdWx0U2VhcmNoKTtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VhcmNoW2ldO1xyXG4gICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbkhhbmRsZUl0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5zb21lKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCkgfHwgdGhpcy5jb25maWcubGF6eTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21hcFRvUmVzdWx0U2VhcmNoKCkge1xyXG4gICAgaWYgKCEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJlc3VsdFNlYXJjaC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID0gdGhpcy5yZXN1bHRTZWxlY3RlZD8uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQgfHwgeC5jaGlsZHJlbj8uc29tZSh5ID0+IHkuaWQgPT09IGl0ZW0uaWQpKTtcclxuICAgICAgICAgIGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID8gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pIDogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsLCBzdGF0ZTogYm9vbGVhbiA9IHRoaXMuaXNTZWxlY3RJdGVtU2VhcmNoKGl0ZW0uaWQpKSB7XHJcbiAgICBpdGVtLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQudG9TdHJpbmcoKSk7XHJcbiAgICBpZiAoISFjdXJyZW50Tm9kZSkge1xyXG4gICAgICBpZihzdGF0ZSl7XHJcbiAgICAgICAgaWYodGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjdXJyZW50Tm9kZSkpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYodGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSlcclxuICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChjdXJyZW50Tm9kZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGN1cnJlbnROb2RlKTtcclxuICAgICAgLy8gaXNTZWxlY3QgPyB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoY3VycmVudE5vZGUpIDpcclxuICAgICAgdGhpcy5jb25maWcuaXNTZWxlY3RPbmUgPyB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoY3VycmVudE5vZGUuaWQpIDogdGhpcy5oYW5kbGVDaGVja05vZGUoY3VycmVudE5vZGUpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShpdGVtLmlkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KCBzdGF0ZSA/ICdhZGQnIDogJ3JlbW92ZScsIGl0ZW0sIHRoaXMuX3NlbGVjdGVkTGlzdCwgdGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBpc1NlbGVjdEl0ZW1TZWFyY2goaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLnNvbWUoeCA9PiB4LmlkID09PSBpZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVTZWxlY3RlZExpc3Qoc3RhdGU6ICdhZGQnIHwgJ3JlbW92ZScsIGl0ZW06IFFNU1RyZWVOb2RlLCAuLi5zZWxlY3RlZExpc3RzOiBRTVNUcmVlTm9kZVtdW10pIHtcclxuICAgIGlmKCFpdGVtKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBzZWxlY3RlZExpc3RzLmZvckVhY2goc2VsZWN0ZWRMaXN0ID0+e1xyXG4gICAgICBjb25zdCBpdGVtRXhpc3RlZCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlICdhZGQnOlxyXG4gICAgICAgICAgaWYgKGl0ZW0uZ3JvdXBJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5ncm91cElkKTtcclxuICAgICAgICAgICAgaWYgKCFncm91cCAmJiAhaXRlbUV4aXN0ZWQpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAhZ3JvdXAuY2hpbGRyZW4uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQpICYmIGdyb3VwLmNoaWxkcmVuLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICFpdGVtRXhpc3RlZCAmJiBzZWxlY3RlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XHJcbiAgICAgICAgICBpZiAoIWl0ZW1FeGlzdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gc2VsZWN0ZWRMaXN0LmZpbmQoeCA9PiB4LmNoaWxkcmVuLnNvbWUoeDEgPT4geDEuaWQgPT09IGl0ZW0uaWQpKTtcclxuICAgICAgICAgICAgaWYgKCFncm91cClcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ3JvdXAuY2hpbGRyZW4uZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBncm91cC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZWxlY3RlZExpc3Quc3BsaWNlKHNlbGVjdGVkTGlzdC5pbmRleE9mKGl0ZW1FeGlzdGVkKSwgMSk7XHJcbiAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0aW9uU2VhcmNoID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT09IGl0ZW1FeGlzdGVkLmlkKTtcclxuICAgICAgICAgIGl0ZW1TZWxlY3Rpb25TZWFyY2ggJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guZGVzZWxlY3QoaXRlbVNlbGVjdGlvblNlYXJjaCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEFsbFNlYXJjaFJlc3VsdChjaGVja2VkKSB7XHJcbiAgICBjaGVja2VkID0gIWNoZWNrZWQ7XHJcbiAgICBpZiAoIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYodGhpcy5jb25maWcuaGFuZGxlQ2hlY2tBbGxJdGVtU2VhcmNoKXtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlYXJjaFtpXTtcclxuICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBjb25zdCBjYW5TZWxlY3QgPSggISF0cmVlTm9kZSB8fCB0aGlzLmNvbmZpZy5sYXp5KTtcclxuICAgICAgICAgIGlmKCFjYW5TZWxlY3QpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgIXRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmlzU2VsZWN0ZWQoaXRlbSkgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IF9pdGVtU2VsZWN0aW9ucyA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaWYgKF9pdGVtU2VsZWN0aW9ucy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KC4uLl9pdGVtU2VsZWN0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSB8fCAhdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrQWxsU2VhcmNoKVxyXG4gICAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSwgY2hlY2tlZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMub25DaGVja0FsbEl0ZW1TZWFyY2hFdmVudC5lbWl0KGNoZWNrZWQpO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0Rpc2FibGVDaGVjYm94QWxsU2VhcmNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U2VhcmNoICYmIHRoaXMucmVzdWx0U2VhcmNoLmV2ZXJ5KHggPT4geC5kaXNhYmxlZCk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2luZ1NlYXJjaFJlc3VsdCh2YWw6IFBhZ2VFdmVudCkge1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5vblBhZ2luZ1NlYXJjaEV2ZW50LmVtaXQodmFsKTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvTm9kZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQubmV4dChub2RlSWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5kZXhWaWV3KGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChpbmRleCA9PT0gMSAmJiB0aGlzLmNvbmZpZy5yZXNldFRvZ2dsZUluY2x1ZGVDaGlsZFdoZW5DaGFuZ2VWaWV3KSB7XHJcbiAgICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0SW5kZXhWaWV3JC5uZXh0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGNhbkFjdGl2ZU5vZGVFeHRlcm5hbChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIHJldHVybiAhYWxsUGFyZW50IHx8IGFsbFBhcmVudC5ldmVyeShpdGVtID0+IHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChpdGVtKSk7XHJcbiAgfVxyXG5cclxuICBnZXRIZWlnaHRTdHlsZVJlZk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vZGVFbGUgPSB0aGlzLmVsZVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5tYXQtdHJlZS1ub2RlI21hdC1ub2RlLSR7bm9kZUlkfWApIGFzIEVsZW1lbnQ7XHJcbiAgICByZXR1cm4gYCR7bm9kZUVsZT8uY2xpZW50SGVpZ2h0IHx8IDB9cHhgO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZE5vZGVTdG9yYWdlKCk6IFFNU0ZsYXROb2RlVHJlZSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWROb2RlJykpIGFzIFFNU0ZsYXROb2RlVHJlZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWROb2RlU3RvcmFnZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gJiYgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NlbGVjdGVkTm9kZScsIEpTT04uc3RyaW5naWZ5KG5vZGUpKTtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRQYWdpbmF0b3JTaXplKG9wdGlvbnM6IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLlBBR0VfU0laRV9PUFRJT04gPSBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUge1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICAgICogVGhpcyBmdW5jdGlvbiB1c2UgZm9yIGxhenkgbG9hZCBjaGlsZHJlbiBvZiBub2RlXHJcbiAgICAgICAqIEBwYXJhbSBub2RlIG5vZGUgdXBkYXRlLiBpZiBub2RlIGlzIG51bGwgZGF0YSBhdXRvIGluc2VydCBhcyByb290c1xyXG4gICAgICAgKiBAcGFyYW0gZGF0YSBsaXN0IGNoaWxkcmVuIHRvIHVwZGF0ZSBub2RlLlxyXG4gICAgICAgKiBAcGFyYW0gbW9kZSBkZWZhdWx0IGlzIHVwZGF0ZSB0aGF0IHJlcGxhY2UgY3VycmVudCBsaXN0IGNoaWxkcmVuIGJ5IG5ldyBsaXN0IGNoaWxkcmVuICwgaWYgbW9kZSA9ICdpbnNlcnQnIHdpbGwgaW5zZXJ0IG5ldyB2YWx1ZXMgdG8gbGlzdCBjaGlsZHJlbiBleGlzdGVkIGJlZm9yZS5cclxuICAqL1xyXG4gIHVwZGF0ZUNoaWxkT2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSwgZGF0YTogUU1TRmxhdE5vZGVUcmVlW10gPSBbXSwgbW9kZTogJ2luc2VydCcgfCAndXBkYXRlJyA9ICd1cGRhdGUnKSB7XHJcbiAgICBub2RlLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcclxuICAgIGNvbnN0IG5lc3RlZE5vZGUgPSB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUobm9kZSk7XHJcbiAgICBjb25zdCBkYXRhTm9kZXMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShkYXRhKS5maWx0ZXIoeCA9PiB4LnBhcmVudElkID09PSBub2RlLmlkKTtcclxuICAgIGlmICghbmVzdGVkTm9kZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgJ2luc2VydCc6XHJcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbi5wdXNoKC4uLmRhdGFOb2Rlcyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3VwZGF0ZSc6XHJcbiAgICAgICAgbmVzdGVkTm9kZS5jaGlsZHJlbiA9IGRhdGFOb2RlcztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xyXG4gICAgY29uc3QgX25vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGUuaWQpO1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKF9ub2RlKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWxlY3RlZC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5yZXN1bHRTZWxlY3RlZFtpXTtcclxuICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGl0ZW0uaWQpO1xyXG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmdldERlc2NlbmRhbnRzT2ZOb2RlKGl0ZW0pO1xyXG4gICAgICBpZiAoIWRlc2NlbmRhbnRzLmxlbmd0aClcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkZXNjZW5kYW50cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gZGVzY2VuZGFudHNbal07XHJcbiAgICAgICAgdGhpcy5fcmVVcGRhdGVTZWxlY3Rpb25Ob2RlKGNoaWxkLmlkKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkTGlzdEFmdGVyRGF0YU5vZGVDaGFuZ2UkLm5leHQoW19ub2RlLCAuLi5ub2Rlc10pO1xyXG4gIH1cclxuXHJcbiAgLy9yZS1zZWxlY3Qgd2hlbiB1cGRhdGUgY2hpbGRyZW4gb2Ygbm9kZVxyXG4gIHByaXZhdGUgX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShub2RlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcclxuICAgIGlmICghbm9kZSB8fCB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBjb25zdCBleGlzdEluU2VsZWN0aW9uID0gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQuZmluZCh4ID0+IHguaWQgPT0gbm9kZS5pZCk7XHJcbiAgICBpZiAoZXhpc3RJblNlbGVjdGlvbilcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZXhpc3RJblNlbGVjdGlvbik7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgfVxyXG5cclxuICBjaGVja0xvYWRpbmdPZlBhcmVudChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGlmICghYWxsUGFyZW50Lmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxQYXJlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gYWxsUGFyZW50W2ldO1xyXG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMocGFyZW50KTtcclxuICAgICAgcGFyZW50LmlzTG9hZGluZyA9IGRlc2NlbmRhbnRzLnNvbWUoeCA9PiB4LmlzTG9hZGluZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXROb2RlQnlJZChpZDogc3RyaW5nKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaWQpIHx8IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldFJvb3RPZk5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGFsbFBhcmVudCA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGlmICghYWxsUGFyZW50Lmxlbmd0aClcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHJldHVybiBhbGxQYXJlbnQucG9wKCk7XHJcbiAgfVxyXG5cclxuICBhZGRSb290VHJlZShkYXRhOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcclxuICAgIGlmICghZGF0YS5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGNvbnN0IHRyZWVOb2RlRGF0YSA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKGRhdGEpO1xyXG4gICAgLy8gcmUtY2hlY2sgcm9vdCB3YXMgZXhpc3RlZCBpbiB0cmVlXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWVOb2RlRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdHJlZU5vZGVEYXRhW2ldO1xyXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgICAgaWYgKCEhbm9kZSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4pIHtcclxuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuO1xyXG4gICAgICAgIG5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRyZW4gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIW5vZGUpXHJcbiAgICAgICAgdGhpcy5jdXJyZW50VHJlZURhdGEucHVzaChpdGVtKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xyXG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tlZFN0YXR1c05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU5vZGVJbmZvcm1hdGlvbihub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGxldCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgaWYgKCFuZXN0ZWROb2RlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBuZXN0ZWROb2RlLmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XHJcbiAgICBuZXN0ZWROb2RlLm5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICBuZXN0ZWROb2RlLml0ZW1JY29uID0gbm9kZS5pdGVtSWNvbjtcclxuICAgIG5lc3RlZE5vZGUuaXRlbUljb25TdmcgPSBub2RlLml0ZW1JY29uU3ZnO1xyXG4gICAgbmVzdGVkTm9kZS5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcclxuICAgIG5lc3RlZE5vZGUubWFya2VkR2V0Q2hpbGRDb3VudFJlY3VycnNpdmUgPSBub2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlO1xyXG4gICAgbmVzdGVkTm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkID0gbm9kZS5pc0luY2x1ZGVDaGlsZFdoZW5DaGVja2VkO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2VsZWN0ZWRSZXN1bHREYXRhKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3Qgbm9kZVJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZCgoeCkgPT4geC5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICBpZiAobm9kZVJlc3VsdCkge1xyXG4gICAgICBub2RlUmVzdWx0LmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XHJcbiAgICAgIG5vZGVSZXN1bHQuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxsQ2hlY2tOb2RlT3V0c2lkZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICAgIC8vdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS9zZWxlY3QtZGVwYXJ0bWVudC10cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFtQyx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyTSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxT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SUFBcUI7UUFDNUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3hDLFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBcUI7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyw2QkFBNkI7SUFDL0IsQ0FBQzs7O1lBanFDRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLDRCQUE0QjtnQkFDdEMsMjJkQUFzRDtnQkFFdEQsVUFBVSxFQUFFO29CQUNWLHVCQUF1QjtpQkFDeEI7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUF0Q2tFLGlCQUFpQjtZQUszRSxZQUFZO1lBT1osc0JBQXNCO1lBVnRCLGVBQWU7WUFGeUUsVUFBVTtZQVdsRyx1QkFBdUI7WUFkdkIsT0FBTztZQUc2SSxnQkFBZ0I7WUFxQnBLLG9DQUFvQzs7OzJCQXNCMUMsS0FBSztxQkFHTCxLQUFLO3FCQUNMLEtBQUs7NEJBZ0JMLE1BQU07a0NBQ04sTUFBTTtpQ0FDTixNQUFNO3VDQUNOLE1BQU07K0JBQ04sTUFBTTtnQ0FDTixNQUFNOzhCQUNOLE1BQU07cUNBQ04sTUFBTTt3Q0FDTixNQUFNO3NDQUNOLE1BQU07dUNBRU4sU0FBUyxTQUFDLHdCQUF3Qjs4QkFDbEMsU0FBUyxTQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgcGFpcndpc2UsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUU1TRmxhdE5vZGVUcmVlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNpemUsIFFNU1BhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3Ftcy1wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBJdGVtSWNvblR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9pdGVtLWljb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgQW5pbWF0aW9uVHJlZURlcGFydG1lbnQgfSBmcm9tICcuL2FuaW1hdGlvbi9hbmltYXRpb24nO1xyXG5pbXBvcnQgeyBNb2RlRGVwYXJ0bWVudFRyZWVlVmlld0VudW0gfSBmcm9tICcuL2VudW0vbW9kZS1kZXBhcnRtZW50LXRyZWUtdmlldy5lbnVtJztcclxuaW1wb3J0IHsgUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsIH0gZnJvbSAnLi9tb2RlbC9kZXBhcnRtZW50LXBhZ2luZy5tb2RlbCc7XHJcbmltcG9ydCB7IERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIsIERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCB9IGZyb20gJy4vbW9kZWwvZGVwYXJ0bWVudC1zZWFyY2gtcmVzdWx0Lm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29uZmlnJztcclxuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGVDaGFuZ2UgfSBmcm9tICcuL21vZGVsL3NlbGVjdGlvbi1jaGFuZ2UubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3REZXBhcnRtZW50VHJlZUdsb2JhbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2Uvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS1nbG9iYWwuc2VydmljZSc7XHJcblxyXG5pbnRlcmZhY2UgSUhhbmRsaW5nRXZlbnRMYXp5IHtcclxuICBjaGVja0FsbFNlYXJjaDogYm9vbGVhbjtcclxuICBjaGVja0l0ZW1TZWFyY2g6IGJvb2xlYW47XHJcbiAgY2hlY2tOb2RlOiBib29sZWFuO1xyXG4gIGV4cGFuZDogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWRlcGFydG1lbnQtdHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICBBbmltYXRpb25UcmVlRGVwYXJ0bWVudFxyXG4gIF0sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgTEFORzogYW55O1xyXG4gIHJlYWRvbmx5IHNwaW5uZXJBcnIgPSBuZXcgQXJyYXkoMTIpLmZpbGwoMCk7XHJcbiAgYXJyU2tlbGV0b24gPSBuZXcgQXJyYXkoNikuZmlsbCgwKTtcclxuICBASW5wdXQoKSBzZXQgcm93c1NrZWxldG9uKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuYXJyU2tlbGV0b24gPSBuZXcgQXJyYXkodmFsdWUpLmZpbGwoMCk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gJzUwdmgnO1xyXG4gIEBJbnB1dCgpIGNvbmZpZzogUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcgPSBuZXcgUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVDb25maWcoKTtcclxuICBpc0luY2x1ZGVDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdldCBkZXBhcnRtZW50Um9vdHMoKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIobm9kZSA9PiBub2RlLmxldmVsID09PSAwKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0FsbERlcGFydG1lbnRTZWxlY3RlZCgpIHtcclxuICAgIHJldHVybiAhIXRoaXMudHJlZUNvbnRyb2wgJiYgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZXZlcnkobm9kZSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGUpKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0luZGV0ZXJtaW5hdGVDaGVja2JveEFsbFRyZWUoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBvblNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIG9uUGFnaW5nU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgb25WYWx1ZUNoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxRTVNUcmVlTm9kZVtdPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElTZWxlY3Rpb25Ob2RlQ2hhbmdlPFFNU1RyZWVOb2RlPj4oKTtcclxuICBAT3V0cHV0KCkgb25DaGVja05vZGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TRmxhdE5vZGVUcmVlPigpO1xyXG4gIEBPdXRwdXQoKSBvbkV4cGFuZE5vZGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8UU1TRmxhdE5vZGVUcmVlPigpO1xyXG4gIEBPdXRwdXQoKSBvbkxvYWRNb3JlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2hlY2tJdGVtU2VhcmNoRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhdGU6IGJvb2xlYW4sIGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCB9PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoZWNrQWxsSXRlbVNlYXJjaEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVJbmNsdWRlQ2hpbGRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvclNlYXJjaCcpIHBhZ2luYXRvclNlYXJjaDogUU1TUGFnaW5hdG9yQ29tcG9uZW50O1xyXG5cclxuICByZWFkb25seSBNT0RFX1ZJRVdfRU5VTSA9IE1vZGVEZXBhcnRtZW50VHJlZWVWaWV3RW51bTtcclxuICBJVEVNX1NJWkUgPSA1MDtcclxuICByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICByZXN1bHRTZWFyY2hTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIHJlc3VsdFNlbGVjdGVkOiBRTVNUcmVlTm9kZVtdID0gW107XHJcbiAgcmVhZG9ubHkgZ2V0RGF0YVRyZWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNUcmVlTm9kZVtdPihbXSk7XHJcbiAgcmVhZG9ubHkgc2VhcmNoRGVwYXJ0bWVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+PihuZXcgUU1TRGVwYXJ0bWVudFBhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4oKSk7XHJcbiAgcmVzdWx0U2VhcmNoOiBEZXBhcnRtZW50U2VhcmNoUmVzdWx0TW9kZWxbXSA9IFtdO1xyXG5cclxuICBnZXQgY3VycmVudFRyZWVEYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVRyZWUkLmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNTZWxlY3RBbGxSZXN1bHRTZWFyY2goKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoICYmIHRoaXMucmVzdWx0U2VhcmNoLmV2ZXJ5KHggPT4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZCh4KSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaW5kZXRlcm1pbmF0ZVNlYXJjaFJlc3VsdCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5pc1NlbGVjdEFsbFJlc3VsdFNlYXJjaCAmJiAhIXRoaXMucmVzdWx0U2VhcmNoLmxlbmd0aCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5zb21lKHggPT4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZCh4KSk7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBnZXRJbmRleFZpZXckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHJlYWRvbmx5IHNjcm9sbFRvTm9kZUV2ZW50JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICByZWFkb25seSBnZXRBY3RpdmVOb2RlRXZlbnQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIGFjdGl2ZU5vZGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICByZWFkb25seSBQQUdJTkFUSU9OX1NJWkUgPSBQYWdpbmF0aW9uU2l6ZTtcclxuICBQQUdFX1NJWkVfT1BUSU9OOiBudW1iZXJbXSA9IFs1LCAxMCwgMTUsIDIwLCAyNSwgMTAwXTtcclxuICBDVVJSRU5UX1BBR0VTSVpFOiBudW1iZXIgPSAxMDtcclxuICByZWFkb25seSBuZXN0ZWRUcmVlTm9kZU1hcCA9IG5ldyBNYXA8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT4oKTtcclxuICByZWFkb25seSBmbGF0VHJlZU5vZGVNYXAgPSBuZXcgTWFwPFFNU0ZsYXROb2RlVHJlZSwgUU1TVHJlZU5vZGU+KCk7XHJcbiAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPFFNU0ZsYXROb2RlVHJlZT4odHJ1ZSk7XHJcbiAgcmVhZG9ubHkgY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoID0gbmV3IFNlbGVjdGlvbk1vZGVsPERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbD4odHJ1ZSk7XHJcbiAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gIHRyZWVGbGF0dGVuZXI6IE1hdFRyZWVGbGF0dGVuZXI8UU1TVHJlZU5vZGUsIFFNU0ZsYXROb2RlVHJlZT47XHJcbiAgZGF0YVNvdXJjZTogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xyXG5cclxuICBkYXRhU291cmNlVHJlZVNlYXJjaDogTWF0VHJlZUZsYXREYXRhU291cmNlPFFNU1RyZWVOb2RlLCBRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkTGlzdDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQgPSBuZXcgU3ViamVjdDxRTVNGbGF0Tm9kZVRyZWVbXT4oKTtcclxuXHJcbiAgZm9ybVNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIHJlYWRvbmx5IGdldExvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgZ2V0TG9hZGluZ01vcmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICByZWFkb25seSB1bnRpbERlc3Ryb3lMb2FkTW9yZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IG9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICByZWFkb25seSB0ZXh0U2VhcmNoU3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIGl0ZW1JY29uVHlwZSA9IEl0ZW1JY29uVHlwZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF90cmFuc2Zvcm1lciA9IChub2RlOiBRTVNUcmVlTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmNvbnZlcnRUb0ZsYXROb2RlKG5vZGUpIHx8IG5ldyBRTVNGbGF0Tm9kZVRyZWUoKTtcclxuICAgIGZsYXROb2RlLmlkID0gbm9kZS5pZDtcclxuICAgIGZsYXROb2RlLm5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICBmbGF0Tm9kZS5leHBhbmRhYmxlID0gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB8fCAoISFub2RlLmNoaWxkQ291bnQpIHx8IG5vZGUuZXhwYW5kYWJsZTtcclxuICAgIGZsYXROb2RlLmxldmVsID0gbGV2ZWw7XHJcbiAgICBmbGF0Tm9kZS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XHJcbiAgICBmbGF0Tm9kZS5tYXJrZWRHZXRDaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMDtcclxuICAgIGZsYXROb2RlLml0ZW1JY29uID0gbm9kZS5pdGVtSWNvbjtcclxuICAgIGZsYXROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcclxuICAgIGZsYXROb2RlLmlzRmlsZSA9IG5vZGUuaXNGaWxlO1xyXG4gICAgZmxhdE5vZGUuZGlzYWJsZWQgPSBub2RlLmRpc2FibGVkO1xyXG4gICAgZmxhdE5vZGUuaXNHcm91cCA9IG5vZGUuaXNHcm91cDtcclxuICAgIGZsYXROb2RlLmdyb3VwSWQgPSBub2RlLmdyb3VwSWQ7XHJcbiAgICBmbGF0Tm9kZS5leHRlcm5hbE5hbWUgPSBub2RlLmV4dGVybmFsTmFtZTtcclxuICAgIGZsYXROb2RlLmNoaWxkQ291bnQgPSBub2RlLmNoaWxkQ291bnQ7XHJcbiAgICBmbGF0Tm9kZS5zZWxlY3RlZENoaWxkQ291bnQgPSBub2RlLnNlbGVjdGVkQ2hpbGRDb3VudDtcclxuICAgIGZsYXROb2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlID0gbm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZTtcclxuICAgIGZsYXROb2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQgPSBub2RlLmlzSW5jbHVkZUNoaWxkV2hlbkNoZWNrZWQ7XHJcblxyXG4gICAgdGhpcy5mbGF0VHJlZU5vZGVNYXAuc2V0KGZsYXROb2RlLCBub2RlKTtcclxuICAgIHRoaXMubmVzdGVkVHJlZU5vZGVNYXAuc2V0KG5vZGUsIGZsYXROb2RlKTtcclxuICAgIHJldHVybiBmbGF0Tm9kZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZ2V0TGV2ZWwgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlKSA9PiBub2RlPy5sZXZlbDtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9nZXRDaGlsZCA9IChub2RlOiBRTVNUcmVlTm9kZSkgPT4gbm9kZS5jaGlsZHJlbjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzRXhwYW5kYWJsZSA9IChub2RlOiBRTVNGbGF0Tm9kZVRyZWUpID0+IG5vZGUuZXhwYW5kYWJsZTtcclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gbm9kZS5leHBhbmRhYmxlO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGluZ0xhenlPYmplY3Q6IElIYW5kbGluZ0V2ZW50TGF6eSA9IHtcclxuICAgIGNoZWNrQWxsU2VhcmNoOiBmYWxzZSxcclxuICAgIGNoZWNrSXRlbVNlYXJjaDogZmFsc2UsXHJcbiAgICBjaGVja05vZGU6IGZhbHNlLFxyXG4gICAgZXhwYW5kOiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgIHByaXZhdGUgZWxlUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHVibGljIHRyYW5zOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHB1YmxpYyBvdmVybGF5OiBPdmVybGF5LFxyXG4gICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICBwcml2YXRlIHRyZWVEZXBhcnRtZW50U2VydmljZTogUU1TU2VsZWN0RGVwYXJ0bWVudFRyZWVHbG9iYWxTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICAvLyBJbml0IHRyZWUgZGF0YVxyXG4gICAgdGhpcy5nZXREYXRhVHJlZSRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9KTtcclxuICAgIC8vIFJlZ2lzdGVyIGljb25cclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRGV2aWF0aW9uSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckNoZWNrbGlzdEljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcblxyXG4gICAgdGhpcy50cmFucy5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9oYW5kbGVTZWFyY2hFdmVudCgpO1xyXG4gICAgdGhpcy5faGFuZGxlQWN0aXZlTm9kZUV2ZW50KCk7XHJcbiAgICB0aGlzLl9oYW5kbGVJdGVtU2VsZWN0aW9uQ2hhbmdlZCgpO1xyXG5cclxuICAgIHRoaXMuZ2V0TG9hZGluZyQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXHJcbiAgICAgIHRhcChyZXMgPT4ge1xyXG4gICAgICAgIHJlcyA/IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wuZGlzYWJsZSgpIDogdGhpcy5mb3JtU2VhcmNoQ29udHJvbC5lbmFibGUoKTtcclxuICAgICAgfSkpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0SW5kZXhWaWV3JC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwobWVyZ2UodGhpcy5uZ1Vuc3Vic2NyaWJlLCB0aGlzLnVudGlsRGVzdHJveUxvYWRNb3JlJCkpLFxyXG4gICAgICB0YXAoXyA9PiB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRoaXMuY29uZmlnLmxhenkpKSxcclxuICAgICAgZGVsYXkoNzAwKSxcclxuICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IDApXHJcbiAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlXHJcbiAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQpLFxyXG4gICAgICAgICAgICAgICAgbWFwKF8gPT4gdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgnYm90dG9tJykpLFxyXG4gICAgICAgICAgICAgICAgcGFpcndpc2UoKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlcigoW3gxLCB4Ml0pID0+IHgxID4geDIgJiYgeDIgPCAxNDApLFxyXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKDIwMCksXHJcbiAgICAgICAgICAgICAgICB0YXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldExvYWRpbmdNb3JlJC52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25EZXN0cm95TG9hZE1vcmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRNb3JlRXZlbnQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldExvYWRpbmdNb3JlJC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5vbkJlZm9yZUluaXROb2RlU2VsZWN0ZWQkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCB0YXAoXyA9PiB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlTGlzdFNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XHJcbiAgICAgIH0pKS5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuID0gdGhpcy5jb25maWcuaXNJbmNsdWRlQ2hpbGRyZW47XHJcbiAgICB0aGlzLl9pbml0VHJlZURhdGEoKTtcclxuICAgIGlmICghdGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICB0aGlzLl9oYW5kbGVMaXN0U2VsZWN0ZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy9hY3Rpb24gZm9yIGxhenkgY29uZmlnXHJcbiAgICB0aGlzLl9pbml0TGlzdFNlbGVjdGVkKCk7XHJcbiAgICB0aGlzLl9oYW5kbGVBZnRlckRhdGFOb2RlQ2hhbmdlRXZlbnQoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dCh0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uRGVzdHJveUxvYWRNb3JlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQubmV4dCgpO1xyXG4gICAgdGhpcy51bnRpbERlc3Ryb3lMb2FkTW9yZSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRUcmVlRGF0YSgpIHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPFFNU0ZsYXROb2RlVHJlZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xyXG4gICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIodGhpcy5fdHJhbnNmb3JtZXIsIHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlLCB0aGlzLl9nZXRDaGlsZCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICBjb25zdCBfdHJlZURhdGFJbnB1dDogUU1TRmxhdE5vZGVUcmVlW10gPSBfLmNsb25lRGVlcCh0aGlzLmNvbmZpZy50cmVlRGF0YSlcclxuICAgIGlmICghX3RyZWVEYXRhSW5wdXQubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBjb25zdCB0cmVlRGF0YSA9IHRoaXMudHJlZURlcGFydG1lbnRTZXJ2aWNlLmNvbnZlcnRUb1RyZWVEYXRhKF90cmVlRGF0YUlucHV0KTtcclxuICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodHJlZURhdGEpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUxpc3RTZWxlY3RlZCgpIHtcclxuICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0Lmxlbmd0aClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRMaXN0ID0gdGhpcy5jb25maWcuc2VsZWN0ZWRMaXN0LnNvcnQoKHgsIHkpID0+IHguaXNHcm91cCA/IC0xIDogeS5pc0dyb3VwID8gMSA6IDApO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHNlbGVjdGVkTGlzdFtpXTtcclxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgICBuZXN0ZWROb2RlLmlzR3JvdXAgPSBpdGVtLmlzR3JvdXA7XHJcbiAgICAgICAgbmVzdGVkTm9kZS5ncm91cElkID0gaXRlbS5ncm91cElkO1xyXG4gICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShub2RlKTtcclxuICAgICAgICB0aGlzLm9uRXhwYW5kQWxsUGFyZW50KG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRMaXN0U2VsZWN0ZWQoKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YSh0aGlzLmNvbmZpZy5zZWxlY3RlZExpc3QpO1xyXG4gICAgLy9Db252ZXJ0IGFycmF5IHNlbGVjdGVkTGlzdCBpbnRvIG5lc3RlZCBhcnJheSBhcyAxIGxldmVsIGZvcm1cclxuICAgIGNvbnN0IGluZGV4UmVtb3ZlID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3NlbGVjdGVkTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fc2VsZWN0ZWRMaXN0W2ldO1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKTtcclxuICAgICAgaXRlbS5jaGlsZHJlbiA9IHJlc3VsdDtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZExpc3QuZmluZEluZGV4KHggPT4gcmVzdWx0LnNvbWUoeDEgPT4geDEuaWQgPT09IHguaWQpKVxyXG4gICAgICBpZiAoaW5kZXggPCAwKVxyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICBpbmRleFJlbW92ZS5wdXNoKGluZGV4KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maWx0ZXIoKF8sIGluZGV4KSA9PiAhaW5kZXhSZW1vdmUuaW5jbHVkZXMoaW5kZXgpKTtcclxuXHJcbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkLnB1c2goLi4udGhpcy5fc2VsZWN0ZWRMaXN0KTtcclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICAvLyBoYW5kbGUgc2VsZWN0ZWQgbGlzdCB3aGVuIGRhdGEgbm9kZXMgY2hhbmdlXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWZ0ZXJEYXRhTm9kZUNoYW5nZUV2ZW50KCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXHJcbiAgICAgICAgICB0YXAoZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWRMaXN0Lmxlbmd0aClcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghaXRlbS5wYXJlbnRJZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSlcclxuICAgICAgICAgICAgICAgICAgaXRlbS5wYXJlbnRJZCA9IG5vZGUucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRhdGFbaV07XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gZWxlbWVudC5pZCB8fCB4LmNoaWxkcmVuPy5zb21lKHgxID0+IHgxLmlkID09PSBlbGVtZW50LmlkKSk7XHJcbiAgICAgICAgICAgICAgaWYgKCEhaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUpXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGl0ZW0uaXNHcm91cDtcclxuICAgICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGl0ZW0uZ3JvdXBJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5tYXJrZWRHZXRDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uY2hpbGRyZW4ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ID0gZGVzY2VuZGFudHMuZmlsdGVyKHggPT4gaXRlbS5jaGlsZHJlbi5tYXAoeDEgPT4geDEuaWQpLmluY2x1ZGVzKHguaWQpKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtU2VsZWN0Lmxlbmd0aClcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdC5mb3JFYWNoKF9pdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShfaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX25lc3RlZE5vZGUuZ3JvdXBJZCA9IGl0ZW0uY2hpbGRyZW5bMF0uZ3JvdXBJZDtcclxuICAgICAgICAgICAgICAgICAgICBfbmVzdGVkTm9kZS5pc0dyb3VwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uaXRlbVNlbGVjdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCB1c2UgZm9yIGxhenkgbW9kZSwgZG8gc29tZSB0aGluZyBiZWZvcmUgaW5pdCBsaXN0IG5vZGUgc2VsZWN0ZWRcclxuICAgKiBAcGFyYW0gY2FsbGJhY2tcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFzeW5jIG9uQmVmb3JlSW5pdE5vZGVTZWxlY3RlZChjYWxsYmFjaz86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuZ2V0TG9hZGluZ01vcmUkLm5leHQodHJ1ZSk7XHJcbiAgICBpZiAoISFjYWxsYmFjaylcclxuICAgICAgYXdhaXQgY2FsbGJhY2soKTtcclxuICAgIHRoaXMub25CZWZvcmVJbml0Tm9kZVNlbGVjdGVkJC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvL0hhbmRsZSBpdGVtIHNlbGVjdGlvbiBjaGFuZ2VkXHJcbiAgcHJpdmF0ZSBfaGFuZGxlSXRlbVNlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5jaGFuZ2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh7IGFkZGVkLCByZW1vdmVkIH0pID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0V4aXN0SW5SZXN1bHQgPSAobm9kZTogUU1TRmxhdE5vZGVUcmVlIHwgUU1TVHJlZU5vZGUpOiBib29sZWFuID0+IHRoaXMucmVzdWx0U2VsZWN0ZWQuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCkgPiAtMTtcclxuICAgICAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICBhZGRlZC5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlOiBRTVNUcmVlTm9kZSA9IF8uY2xvbmVEZWVwKHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKSk7XHJcbiAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5sYXp5KVxyXG4gICAgICAgICAgICAgIG5lc3RlZE5vZGUuY2hpbGRDb3VudCA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RHcm91cDogUU1TVHJlZU5vZGUgPSBfLmNsb25lRGVlcChcclxuICAgICAgICAgICAgICB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSlcclxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSkpXHJcbiAgICAgICAgICAgICAgICAucmV2ZXJzZSgpXHJcbiAgICAgICAgICAgICAgICAuZmluZCh4ID0+IHguaXNHcm91cCkpO1xyXG4gICAgICAgICAgICBpZiAoISFleGlzdEdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmxhdEV4aXN0R3JvdXAgPSB0aGlzLmdldE5vZGVCeUlkKGV4aXN0R3JvdXAuaWQpO1xyXG4gICAgICAgICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0R3JvdXAuaWQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBleGlzdEdyb3VwLmlkKTtcclxuICAgICAgICAgICAgICBpZiAoZ3JvdXBSZXN1bHQgJiYgIWdyb3VwUmVzdWx0LmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBuZXN0ZWROb2RlLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBSZXN1bHQuaXNHcm91cCA9IGV4aXN0R3JvdXAuaXNHcm91cDtcclxuICAgICAgICAgICAgICAgIGdyb3VwUmVzdWx0LmNoaWxkcmVuLnB1c2gobmVzdGVkTm9kZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCd1cGRhdGVkJywgW2dyb3VwUmVzdWx0XSk7XHJcbiAgICAgICAgICAgICAgLy8gcmUtZmlsdGVyIHJlc3VsdCBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbHRlcihpdGVtID0+ICF0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShmbGF0RXhpc3RHcm91cCkubWFwKHggPT4geC5pZCkuaW5jbHVkZXMoaXRlbS5pZCkpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY2hlY2tFeGlzdEluUmVzdWx0KG5vZGUpKVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWxlY3RlZC5wdXNoKG5lc3RlZE5vZGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9vblNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCgnYWRkZWQnLCBbbmVzdGVkTm9kZV0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcclxuICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IGl0ZW0uZ3JvdXBJZCA9IG51bGwpO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKHRoaXMucmVzdWx0U2VsZWN0ZWQuaW5kZXhPZihfaXRlbSksIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdyZW1vdmVkJywgW19pdGVtXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbmVzdGVkTm9kZS5ncm91cElkKTtcclxuICAgICAgICAgICAgaWYgKCFncm91cCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IF9pdGVtID0gdGhpcy5yZXN1bHRTZWxlY3RlZC5maW5kKHggPT4geC5pZCA9PT0gbm9kZS5pZCk7XHJcbiAgICAgICAgICAgICAgaWYgKCFfaXRlbSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzdWx0U2VsZWN0ZWQuc3BsaWNlKHRoaXMucmVzdWx0U2VsZWN0ZWQuaW5kZXhPZihfaXRlbSksIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KCdyZW1vdmVkJywgW19pdGVtXSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5jb25jYXQobm9kZSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjaGlsZE5vZGVzW2ldO1xyXG4gICAgICAgICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKVxyXG4gICAgICAgICAgICAgIGlmIChncm91cC5jaGlsZHJlbi5zb21lKHggPT4geC5pZCA9PT0gX25vZGUuaWQpICYmICF0aGlzLmlzU2VsZWN0ZWROb2RlKF9ub2RlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgX2l0ZW0gPSBncm91cC5jaGlsZHJlbi5maW5kKHggPT4geC5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIV9pdGVtKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBncm91cC5jaGlsZHJlbi5zcGxpY2UoZ3JvdXAuY2hpbGRyZW4uaW5kZXhPZihfaXRlbSksIDEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoJ3VwZGF0ZWQnLCBbZ3JvdXBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9tYXBUb1Jlc3VsdFNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25TZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQoc3RhdGU6ICdyZW1vdmVkJyB8ICd1cGRhdGVkJyB8ICdhZGRlZCcsIGRhdGE6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgY2FzZSAncmVtb3ZlZCc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Ob2RlQ2hhbmdlRXZlbnQuZW1pdCh7XHJcbiAgICAgICAgICByZW1vdmVkOiBkYXRhLFxyXG4gICAgICAgICAgYWRkZWQ6IFtdLFxyXG4gICAgICAgICAgdXBkYXRlZDogW10sXHJcbiAgICAgICAgICBzb3VyY2U6IG5ldyBTZWxlY3Rpb25Nb2RlbCh0cnVlLCB0aGlzLnJlc3VsdFNlbGVjdGVkKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1cGRhdGVkJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcclxuICAgICAgICAgIHJlbW92ZWQ6IFtdLFxyXG4gICAgICAgICAgYWRkZWQ6IFtdLFxyXG4gICAgICAgICAgdXBkYXRlZDogZGF0YSxcclxuICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2FkZGVkJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudC5lbWl0KHtcclxuICAgICAgICAgIHJlbW92ZWQ6IFtdLFxyXG4gICAgICAgICAgYWRkZWQ6IGRhdGEsXHJcbiAgICAgICAgICB1cGRhdGVkOiBbXSxcclxuICAgICAgICAgIHNvdXJjZTogbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIHRoaXMucmVzdWx0U2VsZWN0ZWQpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VhcmNoRXZlbnQoKSB7XHJcbiAgICB0aGlzLnNlYXJjaERlcGFydG1lbnQkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRTZWFyY2ggPSBbXTtcclxuICAgICAgICB0aGlzLkNVUlJFTlRfUEFHRVNJWkUgPSByZXN1bHQucGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpIHtcclxuICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICBsZXQgbG9jYXRpb246IERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWJbXSA9IFtdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICAgICAgICAgIGxvY2F0aW9uID0gaXRlbS5wYXRoPy5tYXAoeCA9PiAoeyBuYW1lOiB4IH0gYXMgRGVwYXJ0bWVudExvY2F0aW9uQnJlYWRDcnVtYikpIHx8IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBub2RlID8gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpIDogW107XHJcbiAgICAgICAgICAgICAgbG9jYXRpb24gPSBwYXJlbnRzLmxlbmd0aCA/IHBhcmVudHMubWFwKCh4KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUsXHJcbiAgICAgICAgICAgICAgfSBhcyBEZXBhcnRtZW50TG9jYXRpb25CcmVhZENydW1iKSkucmV2ZXJzZSgpIDogW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRTZWFyY2gucHVzaCh7XHJcbiAgICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogIXRoaXMuY29uZmlnLmxhenkgJiYgdGhpcy5jb25maWcuY2hlY2tTZWFyY2hNYXBwaW5nVHJlZSAmJiAhbm9kZSxcclxuICAgICAgICAgICAgICBsb2NhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgLi4ubG9jYXRpb24sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRleHRTZWFyY2hTdWJqZWN0JC5uZXh0KHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWUpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyQ2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoV2hlbkhhbmRsZSlcclxuICAgICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guY2xlYXIoKTtcclxuICAgICAgICAgIHRoaXMuX21hcFRvUmVzdWx0U2VhcmNoKCk7XHJcbiAgICAgICAgICB0aGlzLnNldEluZGV4VmlldygxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlQWN0aXZlTm9kZUV2ZW50KCkge1xyXG4gICAgdGhpcy5zY3JvbGxUb05vZGVFdmVudCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSwgc3dpdGNoTWFwKCh2YWwpID0+IHtcclxuICAgICAgY29uc3QgZGVsYXlUaW1pbmcgPSB0aGlzLmdldEluZGV4VmlldyQudmFsdWUgPT09IDEgPyA3MDAgOiAwO1xyXG4gICAgICB0aGlzLnNldEluZGV4VmlldygwKTtcclxuICAgICAgcmV0dXJuIG9mKHZhbCkucGlwZShkZWxheShkZWxheVRpbWluZyksIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKTtcclxuICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbEludG9Ob2RlKHJlcyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2V0QWN0aXZlTm9kZUV2ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLCBzd2l0Y2hNYXAodmFsID0+IHtcclxuICAgICAgdGhpcy5hY3RpdmVOb2RlID0gdmFsO1xyXG4gICAgICByZXR1cm4gdGltZXIoMTUwMCk7XHJcbiAgICB9KSlcclxuICAgICAgLnN1YnNjcmliZShfID0+IHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSAnJztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXRhVHJlZShkYXRhOiBRTVNUcmVlTm9kZVtdKSB7XHJcbiAgICB0aGlzLmdldERhdGFUcmVlJC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9hZGluZ1N0YXRlTm9kZShpc0xvYWRpbmc6IGJvb2xlYW4sIG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlSWQpO1xyXG4gICAgaWYgKCFub2RlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBub2RlLmlzTG9hZGluZyA9IGlzTG9hZGluZztcclxuICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBpZiAoIW5vZGU/LmV4cGFuZGFibGUpIHJldHVybjtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wudG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkgJiYgdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpICYmICFub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XHJcbiAgICAgIG5vZGUuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGVja0xvYWRpbmdPZlBhcmVudChub2RlKTtcclxuICAgIH1cclxuICAgIHRoaXMub25FeHBhbmROb2RlRXZlbnQuZW1pdChub2RlKTtcclxuICB9XHJcblxyXG4gIG9uT3B0aW9uU2VhcmNoU2VsZWN0ZWQodmFsdWU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKHZhbHVlLmlkKTtcclxuICAgIGlmICghZmxhdE5vZGUpIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XHJcbiAgICB0aGlzLmhhbmRsZUNoZWNrTm9kZShmbGF0Tm9kZSk7XHJcbiAgICB0aGlzLm9uU2Nyb2xsSW50b05vZGUoZmxhdE5vZGUuaWQpO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja0FsbFJvb3RUcmVlTm9kZSgpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5pc1NlbGVjdE9uZSB8fCAhdGhpcy5jb25maWcuYWN0aXZlU2VsZWN0QWxsTm9kZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNBbGxEZXBhcnRtZW50U2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4udGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9O1xyXG4gICAgdGhpcy5kZXBhcnRtZW50Um9vdHMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmlzSW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmlsdGVyKHggPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoeCkpXHJcbiAgICAgICAgICAuZm9yRWFjaCh4ID0+IHRoaXMub25DaGVja05vZGUoeCkpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSkpIHtcclxuICAgICAgICB0aGlzLm9uQ2hlY2tOb2RlKG5vZGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgICBpZiAobmVzdGVkTm9kZS5pc0dyb3VwICYmIHRoaXMuaXNDaGVja0FsbChub2RlKSB8fCAhbm9kZS5leHBhbmRhYmxlKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSlcclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuaXNTZWxlY3RlZE5vZGUoaXRlbSkpXHJcbiAgICAgICAgLmZvckVhY2goaXRlbSA9PiAhdGhpcy5pc1NlbGVjdGVkTm9kZShpdGVtKSAmJiB0aGlzLm9uQ2hlY2tOb2RlKGl0ZW0pKTtcclxuICAgICAgaWYgKCFuZXN0ZWROb2RlLmlzR3JvdXApIHtcclxuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcclxuICAgICAgICB0aGlzLm9uQ2hlY2tOb2RlKG5vZGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGZpcmVFdmVudENoZWNrTm9kZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGlmICghbm9kZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKGZpcmVFdmVudENoZWNrTm9kZSlcclxuICAgICAgdGhpcy5vbkNoZWNrTm9kZUV2ZW50LmVtaXQobm9kZSk7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICBpZiAodGhpcy5jb25maWcuaXNTZWxlY3RPbmUpIHtcclxuICAgICAgdGhpcy5faGFuZGxlU2VsZWN0T25lKG5vZGUuaWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcubGF6eSAmJiBub2RlLmV4cGFuZGFibGUgJiYgIW5vZGUubWFya2VkR2V0Q2hpbGRyZW4gJiYgZmlyZUV2ZW50Q2hlY2tOb2RlKSB7XHJcbiAgICAgIGlmICghdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrTm9kZSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBub2RlLmlzTG9hZGluZyA9IHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW47XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRMaXN0Q2hpbGRyZW5PZk5vZGUobm9kZSkuZmlsdGVyKHggPT4geC5leHBhbmRhYmxlICYmICF4Lm1hcmtlZEdldENoaWxkcmVuKTtcclxuICAgICAgY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHguaXNMb2FkaW5nID0gdGhpcy5pc0luY2x1ZGVDaGlsZHJlbik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFuZGxlU2VsZWN0T25lKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub2RlVHJlZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBub2RlSWQpO1xyXG4gICAgY29uc3QgcmVTZWxlY3RTZWxlY3Rpb24gPSAoLi4ucGFyYW1zOiBTZWxlY3Rpb25Nb2RlbDxhbnk+W10pOiB2b2lkID0+IHtcclxuICAgICAgcGFyYW1zLmZvckVhY2goc2VsZWN0aW9uID0+IHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkICE9PSBub2RlSWQpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5kZXNlbGVjdCguLi5zZWxlY3RlZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIGlmICghbm9kZVRyZWUpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBub2RlSWQpO1xyXG4gICAgICBpZiAoIWl0ZW0pXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW3tcclxuICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgZXh0ZXJuYWxOYW1lOiBpdGVtLmV4dGVybmFsTmFtZSxcclxuICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgfSBhcyBRTVNUcmVlTm9kZV07XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkTGlzdCA9IFsuLi50aGlzLnJlc3VsdFNlbGVjdGVkXTtcclxuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICAgICAgcmVTZWxlY3RTZWxlY3Rpb24odGhpcy5jaGVja0xpc3RTZWxlY3Rpb24sIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoKTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWROb2RlKG5vZGVUcmVlKSkge1xyXG4gICAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkWzBdKTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRMaXN0ID0gWy4uLnRoaXMucmVzdWx0U2VsZWN0ZWRdO1xyXG4gICAgICByZVNlbGVjdFNlbGVjdGlvbih0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbiwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdFNlbGVjdGVkID0gW107XHJcbiAgICB0aGlzLl9zZWxlY3RlZExpc3QgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uRXhwYW5kQWxsUGFyZW50KG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgcGFyZW50cyA9IHRoaXMuZ2V0QWxsUGFyZW50Tm9kZShub2RlKTtcclxuICAgIGlmIChwYXJlbnRzPy5sZW5ndGgpIHtcclxuICAgICAgcGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQocGFyZW50KSlcclxuICAgICAgICAgIHRoaXMub25FeHBhbmROb2RlKHBhcmVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZW1vdmVOb2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcclxuICAgIGlmICghZmxhdE5vZGUpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kKHggPT4geC5pZCA9PT0gbm9kZUlkKTtcclxuICAgICAgaWYgKCFpdGVtKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KCdyZW1vdmUnLCBpdGVtLCB0aGlzLl9zZWxlY3RlZExpc3QsIHRoaXMucmVzdWx0U2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoZmxhdE5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUoZmxhdE5vZGUpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3ROb2RlKC4uLm5vZGVJZHM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbHRlcih4ID0+IG5vZGVJZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgaWYgKCFub2Rlcy5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5ub2Rlcyk7XHJcbiAgfVxyXG5cclxuICBvbkRlc2VsZWN0Tm9kZSguLi5ub2RlSWRzOiBzdHJpbmdbXSkge1xyXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiBub2RlSWRzLmluY2x1ZGVzKHguaWQpKTtcclxuICAgIGlmICghbm9kZXMubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5ub2Rlcyk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgYSB2YWx1ZSBiZXR3ZWVuIHNlbGVjdGVkIGFuZCBkZXNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSBub2RlSWQgOmlkIG9mIG5vZGVcclxuICAgKi9cclxuICBvblRvZ2dsZU5vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnRvZ2dsZShub2RlKTtcclxuICB9XHJcblxyXG4gIGlzSW5kZXRlcm1pbmF0ZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKS5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcclxuICAgIHJldHVybiAoISFjaGlsZFNlbGVjdGVkLmxlbmd0aCAmJiAhdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKSk7XHJcbiAgfVxyXG5cclxuICBpc0NoZWNrQWxsKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgY29uc3QgbGlzdENoZWNrID0gWy4uLnRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLCBub2RlXTtcclxuICAgIHJldHVybiBsaXN0Q2hlY2suZXZlcnkoaXRlbSA9PiB0aGlzLmlzU2VsZWN0ZWROb2RlKGl0ZW0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlIGNoZWNrIG5vZGUgb2YgdHJlZVxyXG4gICAqIEBwYXJhbSBub2RlIG5vZGUgb2YgdHJlZVxyXG4gICAqIEBwYXJhbSBjYWxsYmFjayBkbyBzb21ldGhpbmcgYmVmb3JlIGhhbmRsZSBjaGVjayBub2RlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBvbkJlZm9yZUNoZWNrTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGNhbGxiYWNrPzogKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja05vZGUgPSB0cnVlO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKG5vZGUpO1xyXG4gICAgdGhpcy5oYW5kbGVDaGVja05vZGUobm9kZSk7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tOb2RlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDaGVja05vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkTm9kZShub2RlKTtcclxuICAgIGNvbnN0IGNoaWxkU2VsZWN0ZWQgPSB0aGlzLmdldENoaWxkcmVuU2VsZWN0ZWQobm9kZSk7XHJcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG5cclxuICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgIC8vIENoZWNrIGV4aXN0ZWQgZ3JvdXBcclxuICAgICAgY29uc3QgZXhpc3RlZEdyb3VwID0gdGhpcy5nZXRBbGxQYXJlbnROb2RlKG5vZGUpLmZpbmQoeCA9PiB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoeCkuaXNHcm91cCk7XHJcbiAgICAgIGlmICghdGhpcy5pc0luY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgIG5lc3RlZE5vZGUuZ3JvdXBJZCA9IGV4aXN0ZWRHcm91cD8uaWRcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlKTtcclxuICAgICAgbmVzdGVkTm9kZS5pc0dyb3VwID0gIWV4aXN0ZWRHcm91cCAmJiAhIWNoaWxkcmVuLmxlbmd0aDtcclxuICAgICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgIGNvbnN0IF9ub2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKHgpO1xyXG4gICAgICAgIF9ub2RlLmdyb3VwSWQgPSBleGlzdGVkR3JvdXAgPyBleGlzdGVkR3JvdXAuaWQgOiBub2RlLmlkO1xyXG4gICAgICAgIF9ub2RlLmlzR3JvdXAgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudXBkYXRlRGF0YVRyZWUodGhpcy5jdXJyZW50VHJlZURhdGEpO1xyXG4gICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5jaGlsZFNlbGVjdGVkLm1hcCh4ID0+IHRoaXMucmVzZXROb2RlKHgpKSk7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdCguLi5jaGlsZHJlbi5tYXAoeCA9PiB0aGlzLnJlc2V0Tm9kZSh4KSkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBfc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3NlbGVjdGVkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkKTtcclxuICAgIF9zZWxlY3RlZEluZGV4ID4gLTEgJiYgdGhpcy5fc2VsZWN0ZWRMaXN0LnNwbGljZShfc2VsZWN0ZWRJbmRleCwgMSk7XHJcbiAgICBjb25zdCBkZXNlbGVjdE5vZGVzID0gKHRoaXMuaXNJbmNsdWRlQ2hpbGRyZW4gfHwgbmVzdGVkTm9kZS5pc0dyb3VwKSA/IGNoaWxkU2VsZWN0ZWQgOiBbbm9kZV07XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdCguLi5kZXNlbGVjdE5vZGVzKTtcclxuICAgIG5lc3RlZE5vZGUuaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVEYXRhVHJlZSh0aGlzLmN1cnJlbnRUcmVlRGF0YSlcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgbm9kZS5pc0dyb3VwID0gZmFsc2U7XHJcbiAgICByZXR1cm4gbm9kZTtcclxuICB9XHJcblxyXG4gIGlzU2VsZWN0ZWROb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgcmV0dXJuIG5vZGUgJiYgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcclxuICB9XHJcblxyXG4gIGdldENoaWxkcmVuU2VsZWN0ZWQobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmZpbHRlcih4ID0+IHRoaXMuaXNTZWxlY3RlZE5vZGUoeCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGEgbGlzdCBvZiB0aGUgZGF0YSBub2RlJ3Mgc3VidHJlZSBvZiBkZXNjZW5kZW50IGRhdGEgbm9kZXMuXHJcbiAgICogQHBhcmFtIG5vZGVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldExpc3RDaGlsZHJlbk9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcclxuICAgIGlmICghZmxhdE5vZGUpXHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKGZsYXROb2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21hcFRvTmVzdGVkTGlzdE5vZGUoZmxhdE5vZGVMaXN0OiBRTVNGbGF0Tm9kZVRyZWVbXSk6IFFNU1RyZWVOb2RlW10ge1xyXG4gICAgcmV0dXJuIGZsYXROb2RlTGlzdC5tYXAoaXRlbSA9PiB0aGlzLmNvbnZlcnRUb05lc3RlZE5vZGUoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvTmVzdGVkTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNUcmVlTm9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbGF0VHJlZU5vZGVNYXAuZ2V0KG5vZGUpIHx8IHt9IGFzIFFNU1RyZWVOb2RlO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvRmxhdE5vZGUobm9kZTogUU1TVHJlZU5vZGUpIHtcclxuICAgIHJldHVybiB0aGlzLm5lc3RlZFRyZWVOb2RlTWFwLmdldChub2RlKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFBhcmVudE5vZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlW10ge1xyXG4gICAgY29uc3QgbGlzdFBhcmVudDogUU1TRmxhdE5vZGVUcmVlW10gPSBbXTtcclxuICAgIGxldCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgIGxpc3RQYXJlbnQucHVzaChwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsaXN0UGFyZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50Tm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpOiBRTVNGbGF0Tm9kZVRyZWUgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChub2RlKTtcclxuICAgIGlmIChjdXJyZW50TGV2ZWwgPCAxKSByZXR1cm47XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmluZGV4T2Yobm9kZSkgLSAxO1xyXG4gICAgZm9yIChsZXQgaSA9IGluZGV4OyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzW2ldO1xyXG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1JY29uVHlwZShpdGVtOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGlmICghIWl0ZW0uaXRlbU1hdEljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xyXG4gICAgaWYgKCEhaXRlbS5pdGVtSWNvblN2ZykgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnN2ZztcclxuICAgIGlmICghIWl0ZW0uaXRlbUljb24pIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5wYXRoO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblNjcm9sbEludG9Ob2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQobm9kZUlkKTtcclxuICAgIGlmICghbm9kZUlkKSByZXR1cm47XHJcbiAgICB0aGlzLm9uRXhwYW5kTm9kZShmbGF0Tm9kZSk7XHJcbiAgICB0aGlzLm9uRXhwYW5kQWxsUGFyZW50KGZsYXROb2RlKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gZmxhdE5vZGUuaWQpO1xyXG4gICAgaWYgKCF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleChpbmRleCwgJ3Ntb290aCcpO1xyXG4gICAgdGhpcy5nZXRBY3RpdmVOb2RlRXZlbnQkLm5leHQobm9kZUlkKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgaWYgKCF0aGlzLmZvcm1TZWFyY2hDb250cm9sLnZhbHVlIHx8IHRoaXMuZm9ybVNlYXJjaENvbnRyb2wudmFsdWU/LnRyaW0oKSA9PT0gJycpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuc2V0SW5kZXhWaWV3KDEpO1xyXG4gICAgdGhpcy5vblNlYXJjaEV2ZW50LmVtaXQodGhpcy5mb3JtU2VhcmNoQ29udHJvbC52YWx1ZSk7XHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yU2VhcmNoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLnBhZ2luYXRvclNlYXJjaC5jaGFuZ2VQYWdlKDApO1xyXG4gICAgdGhpcy5wYWdpbmF0b3JTZWFyY2gucmVuZGVyRGlzcGxheU51bWJlck9mcGFnZXMoKTtcclxuICB9XHJcblxyXG4gIHNldFJlc3VsdFNlYXJjaChkYXRhOiBRTVNEZXBhcnRtZW50UGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPikge1xyXG4gICAgdGhpcy5zZWFyY2hEZXBhcnRtZW50JC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1Jlc3VsdEl0ZW0oaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XHJcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkKTtcclxuICAgIGlmIChub2RlKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9Ob2RlKG5vZGUuaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25CcmVhZENydW1iSXRlbUNsaWNrKGl0ZW06IERlcGFydG1lbnRMb2NhdGlvbkJyZWFkQ3J1bWIpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKGl0ZW0uaWQpO1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgdGhpcy5zZXRJbmRleFZpZXcoMCk7XHJcbiAgICAgIG9mKG5vZGUuaWQpLnBpcGUoZGVsYXkoNzAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMub25TY3JvbGxJbnRvTm9kZShyZXMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJdGVtU2VhcmNoUmVzdWx0KGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCkge1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2gudG9nZ2xlKGl0ZW0pO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KC4uLnRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbHRlcih4ID0+IHguaWQgIT0gaXRlbS5pZCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoZWNrSXRlbVNlYXJjaEV2ZW50LmVtaXQoXHJcbiAgICAgIHtcclxuICAgICAgICBzdGF0ZTogdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guaXNTZWxlY3RlZChpdGVtKSxcclxuICAgICAgICBpdGVtOiBpdGVtXHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcclxuICAgICAgaWYgKCF0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5faGFuZGxlQ2hlY2tSZXN1dGxTZWFyY2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0pO1xyXG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlRXZlbnQuZW1pdCh0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQmVmb3JlQ2hlY2tJdGVtU2VhcmNoKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCwgY2FsbGJhY2s/OiAoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xyXG4gICAgaXRlbS5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5faGFuZGxpbmdMYXp5T2JqZWN0LmNoZWNrSXRlbVNlYXJjaCA9IHRydWU7XHJcbiAgICAvLyBob2xkIHN0YXRlIGJlZm9yZSBjYWxsIG1ldGhvZCBjYWxsYmFjayB0byBwcmV2ZW50IGxvc3QgaXQncyBzdGF0ZSB1bmV4cGVjdGVkXHJcbiAgICBjb25zdCBpc1NlbGVjdCA9IHRoaXMuaXNTZWxlY3RJdGVtU2VhcmNoKGl0ZW0uaWQpO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKGl0ZW0pO1xyXG4gICAgaXRlbS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGlzU2VsZWN0KTtcclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tJdGVtU2VhcmNoID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkJlZm9yZUNoZWNrQWxsU2VhcmNoKGNhbGxiYWNrPzogKGRhdGEpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XHJcbiAgICB0aGlzLl9oYW5kbGluZ0xhenlPYmplY3QuY2hlY2tBbGxTZWFyY2ggPSB0cnVlO1xyXG4gICAgaWYgKCEhY2FsbGJhY2spXHJcbiAgICAgIGF3YWl0IGNhbGxiYWNrKHRoaXMucmVzdWx0U2VhcmNoKTtcclxuICAgIHRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaCA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VhcmNoW2ldO1xyXG4gICAgICB0aGlzLl9oYW5kbGVDaGVja1Jlc3V0bFNlYXJjaChpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbkhhbmRsZUl0ZW1TZWFyY2hSZXN1bHQoaXRlbTogRGVwYXJ0bWVudFNlYXJjaFJlc3VsdE1vZGVsKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5zb21lKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCkgfHwgdGhpcy5jb25maWcubGF6eTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21hcFRvUmVzdWx0U2VhcmNoKCkge1xyXG4gICAgaWYgKCEhdGhpcy5yZXN1bHRTZWFyY2gubGVuZ3RoKVxyXG4gICAgICB0aGlzLnJlc3VsdFNlYXJjaC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzRXhpc3RJblJlc3VsdFNlbGVjdGVkID0gdGhpcy5yZXN1bHRTZWxlY3RlZD8uc29tZSh4ID0+IHguaWQgPT09IGl0ZW0uaWQgfHwgeC5jaGlsZHJlbj8uc29tZSh5ID0+IHkuaWQgPT09IGl0ZW0uaWQpKTtcclxuICAgICAgICBpc0V4aXN0SW5SZXN1bHRTZWxlY3RlZCA/IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKSA6IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW06IERlcGFydG1lbnRTZWFyY2hSZXN1bHRNb2RlbCwgc3RhdGU6IGJvb2xlYW4gPSB0aGlzLmlzU2VsZWN0SXRlbVNlYXJjaChpdGVtLmlkKSkge1xyXG4gICAgaXRlbS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIGNvbnN0IGN1cnJlbnROb2RlID0gdGhpcy5nZXROb2RlQnlJZChpdGVtLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKCEhY3VycmVudE5vZGUpIHtcclxuICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY3VycmVudE5vZGUpKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pKVxyXG4gICAgICAgICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KGN1cnJlbnROb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi5kZXNlbGVjdChjdXJyZW50Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb25maWcuaXNTZWxlY3RPbmUgPyB0aGlzLl9oYW5kbGVTZWxlY3RPbmUoY3VycmVudE5vZGUuaWQpIDogdGhpcy5oYW5kbGVDaGVja05vZGUoY3VycmVudE5vZGUpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmlzU2VsZWN0T25lKSB7XHJcbiAgICAgIHRoaXMuX2hhbmRsZVNlbGVjdE9uZShpdGVtLmlkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRMaXN0KHN0YXRlID8gJ2FkZCcgOiAncmVtb3ZlJywgaXRlbSwgdGhpcy5fc2VsZWN0ZWRMaXN0LCB0aGlzLnJlc3VsdFNlbGVjdGVkKTtcclxuICB9XHJcblxyXG4gIGlzU2VsZWN0SXRlbVNlYXJjaChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGVja0xpc3RTZWxlY3Rpb25TZWFyY2guc2VsZWN0ZWQuc29tZSh4ID0+IHguaWQgPT09IGlkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVNlbGVjdGVkTGlzdChzdGF0ZTogJ2FkZCcgfCAncmVtb3ZlJywgaXRlbTogUU1TVHJlZU5vZGUsIC4uLnNlbGVjdGVkTGlzdHM6IFFNU1RyZWVOb2RlW11bXSkge1xyXG4gICAgaWYgKCFpdGVtKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBzZWxlY3RlZExpc3RzLmZvckVhY2goc2VsZWN0ZWRMaXN0ID0+IHtcclxuICAgICAgY29uc3QgaXRlbUV4aXN0ZWQgPSBzZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSAnYWRkJzpcclxuICAgICAgICAgIGlmIChpdGVtLmdyb3VwSWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBzZWxlY3RlZExpc3QuZmluZCh4ID0+IHguaWQgPT09IGl0ZW0uZ3JvdXBJZCk7XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXAgJiYgIWl0ZW1FeGlzdGVkKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgIWdyb3VwLmNoaWxkcmVuLnNvbWUoeCA9PiB4LmlkID09PSBpdGVtLmlkKSAmJiBncm91cC5jaGlsZHJlbi5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAhaXRlbUV4aXN0ZWQgJiYgc2VsZWN0ZWRMaXN0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdyZW1vdmUnOlxyXG4gICAgICAgICAgaWYgKCFpdGVtRXhpc3RlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IHNlbGVjdGVkTGlzdC5maW5kKHggPT4geC5jaGlsZHJlbi5zb21lKHgxID0+IHgxLmlkID09PSBpdGVtLmlkKSk7XHJcbiAgICAgICAgICAgIGlmICghZ3JvdXApXHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGdyb3VwLmNoaWxkcmVuLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKVxyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgZ3JvdXAuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2VsZWN0ZWRMaXN0LnNwbGljZShzZWxlY3RlZExpc3QuaW5kZXhPZihpdGVtRXhpc3RlZCksIDEpO1xyXG4gICAgICAgICAgY29uc3QgaXRlbVNlbGVjdGlvblNlYXJjaCA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09PSBpdGVtRXhpc3RlZC5pZCk7XHJcbiAgICAgICAgICBpdGVtU2VsZWN0aW9uU2VhcmNoICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLmRlc2VsZWN0KGl0ZW1TZWxlY3Rpb25TZWFyY2gpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RBbGxTZWFyY2hSZXN1bHQoY2hlY2tlZCkge1xyXG4gICAgY2hlY2tlZCA9ICFjaGVja2VkO1xyXG4gICAgaWYgKCF0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5oYW5kbGVDaGVja0FsbEl0ZW1TZWFyY2gpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJlc3VsdFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJlc3VsdFNlYXJjaFtpXTtcclxuICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICBjb25zdCBjYW5TZWxlY3QgPSAoISF0cmVlTm9kZSB8fCB0aGlzLmNvbmZpZy5sYXp5KTtcclxuICAgICAgICAgIGlmICghY2FuU2VsZWN0KVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICF0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5pc1NlbGVjdGVkKGl0ZW0pICYmIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uU2VhcmNoLnNlbGVjdChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBfaXRlbVNlbGVjdGlvbnMgPSB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5zZWxlY3RlZC5maWx0ZXIoeCA9PiB4LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgIGlmIChfaXRlbVNlbGVjdGlvbnMubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvblNlYXJjaC5kZXNlbGVjdCguLi5faXRlbVNlbGVjdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmxhenkgfHwgIXRoaXMuX2hhbmRsaW5nTGF6eU9iamVjdC5jaGVja0FsbFNlYXJjaClcclxuICAgICAgICAgIHRoaXMuX2hhbmRsZUNoZWNrUmVzdXRsU2VhcmNoKGl0ZW0sIGNoZWNrZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uQ2hlY2tBbGxJdGVtU2VhcmNoRXZlbnQuZW1pdChjaGVja2VkKTtcclxuICAgIHRoaXMub25WYWx1ZUNoYW5nZUV2ZW50LmVtaXQodGhpcy5yZXN1bHRTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNEaXNhYmxlQ2hlY2JveEFsbFNlYXJjaCgpIHtcclxuICAgIHJldHVybiB0aGlzLnJlc3VsdFNlYXJjaCAmJiB0aGlzLnJlc3VsdFNlYXJjaC5ldmVyeSh4ID0+IHguZGlzYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgb25QYWdpbmdTZWFyY2hSZXN1bHQodmFsOiBQYWdlRXZlbnQpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMub25QYWdpbmdTZWFyY2hFdmVudC5lbWl0KHZhbCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxUb05vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9Ob2RlRXZlbnQkLm5leHQobm9kZUlkKTtcclxuICB9XHJcblxyXG4gIHNldEluZGV4VmlldyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoaW5kZXggPT09IDEgJiYgdGhpcy5jb25maWcucmVzZXRUb2dnbGVJbmNsdWRlQ2hpbGRXaGVuQ2hhbmdlVmlldykge1xyXG4gICAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEluZGV4VmlldyQubmV4dChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBjYW5BY3RpdmVOb2RlRXh0ZXJuYWwobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICByZXR1cm4gIWFsbFBhcmVudCB8fCBhbGxQYXJlbnQuZXZlcnkoaXRlbSA9PiB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoaXRlbSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGVpZ2h0U3R5bGVSZWZOb2RlKG5vZGVJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBub2RlRWxlID0gdGhpcy5lbGVSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAubWF0LXRyZWUtbm9kZSNtYXQtbm9kZS0ke25vZGVJZH1gKSBhcyBFbGVtZW50O1xyXG4gICAgcmV0dXJuIGAke25vZGVFbGU/LmNsaWVudEhlaWdodCB8fCAwfXB4YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2RlU3RvcmFnZSgpOiBRTVNGbGF0Tm9kZVRyZWUge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NlbGVjdGVkTm9kZScpKSBhcyBRTVNGbGF0Tm9kZVRyZWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkTm9kZVN0b3JhZ2Uobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICB0aGlzLmlzSW5jbHVkZUNoaWxkcmVuICYmIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZE5vZGUnLCBKU09OLnN0cmluZ2lmeShub2RlKSk7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0UGFnaW5hdG9yU2l6ZShvcHRpb25zOiBudW1iZXJbXSkge1xyXG4gICAgdGhpcy5QQUdFX1NJWkVfT1BUSU9OID0gb3B0aW9ucztcclxuICB9XHJcblxyXG4gIHRyYWNrQnkoaW5kZXg6IG51bWJlciwgaXRlbTogUU1TRmxhdE5vZGVUcmVlKTogUU1TRmxhdE5vZGVUcmVlIHtcclxuICAgIHJldHVybiBpdGVtO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAgICAqIFRoaXMgZnVuY3Rpb24gdXNlIGZvciBsYXp5IGxvYWQgY2hpbGRyZW4gb2Ygbm9kZVxyXG4gICAgICAgKiBAcGFyYW0gbm9kZSBub2RlIHVwZGF0ZS4gaWYgbm9kZSBpcyBudWxsIGRhdGEgYXV0byBpbnNlcnQgYXMgcm9vdHNcclxuICAgICAgICogQHBhcmFtIGRhdGEgbGlzdCBjaGlsZHJlbiB0byB1cGRhdGUgbm9kZS5cclxuICAgICAgICogQHBhcmFtIG1vZGUgZGVmYXVsdCBpcyB1cGRhdGUgdGhhdCByZXBsYWNlIGN1cnJlbnQgbGlzdCBjaGlsZHJlbiBieSBuZXcgbGlzdCBjaGlsZHJlbiAsIGlmIG1vZGUgPSAnaW5zZXJ0JyB3aWxsIGluc2VydCBuZXcgdmFsdWVzIHRvIGxpc3QgY2hpbGRyZW4gZXhpc3RlZCBiZWZvcmUuXHJcbiAgKi9cclxuICB1cGRhdGVDaGlsZE9mTm9kZShub2RlOiBRTVNGbGF0Tm9kZVRyZWUsIGRhdGE6IFFNU0ZsYXROb2RlVHJlZVtdID0gW10sIG1vZGU6ICdpbnNlcnQnIHwgJ3VwZGF0ZScgPSAndXBkYXRlJykge1xyXG4gICAgbm9kZS5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZSk7XHJcbiAgICBjb25zdCBuZXN0ZWROb2RlID0gdGhpcy5jb252ZXJ0VG9OZXN0ZWROb2RlKG5vZGUpO1xyXG4gICAgY29uc3QgZGF0YU5vZGVzID0gdGhpcy50cmVlRGVwYXJ0bWVudFNlcnZpY2UuY29udmVydFRvVHJlZURhdGEoZGF0YSkuZmlsdGVyKHggPT4geC5wYXJlbnRJZCA9PT0gbm9kZS5pZCk7XHJcbiAgICBpZiAoIW5lc3RlZE5vZGUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlICdpbnNlcnQnOlxyXG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4ucHVzaCguLi5kYXRhTm9kZXMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd1cGRhdGUnOlxyXG4gICAgICAgIG5lc3RlZE5vZGUuY2hpbGRyZW4gPSBkYXRhTm9kZXM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcclxuICAgIGNvbnN0IF9ub2RlID0gdGhpcy5nZXROb2RlQnlJZChub2RlLmlkKTtcclxuICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhfbm9kZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucmVzdWx0U2VsZWN0ZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMucmVzdWx0U2VsZWN0ZWRbaV07XHJcbiAgICAgIHRoaXMuX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShpdGVtLmlkKTtcclxuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5nZXREZXNjZW5kYW50c09mTm9kZShpdGVtKTtcclxuICAgICAgaWYgKCFkZXNjZW5kYW50cy5sZW5ndGgpXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGVzY2VuZGFudHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IGRlc2NlbmRhbnRzW2pdO1xyXG4gICAgICAgIHRoaXMuX3JlVXBkYXRlU2VsZWN0aW9uTm9kZShjaGlsZC5pZClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZExpc3RBZnRlckRhdGFOb2RlQ2hhbmdlJC5uZXh0KFtfbm9kZSwgLi4ubm9kZXNdKTtcclxuICB9XHJcblxyXG4gIC8vcmUtc2VsZWN0IHdoZW4gdXBkYXRlIGNoaWxkcmVuIG9mIG5vZGVcclxuICBwcml2YXRlIF9yZVVwZGF0ZVNlbGVjdGlvbk5vZGUobm9kZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGVCeUlkKG5vZGVJZCk7XHJcbiAgICBpZiAoIW5vZGUgfHwgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgY29uc3QgZXhpc3RJblNlbGVjdGlvbiA9IHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoeCA9PiB4LmlkID09IG5vZGUuaWQpO1xyXG4gICAgaWYgKGV4aXN0SW5TZWxlY3Rpb24pXHJcbiAgICAgIHRoaXMuY2hlY2tMaXN0U2VsZWN0aW9uLmRlc2VsZWN0KGV4aXN0SW5TZWxlY3Rpb24pO1xyXG4gICAgdGhpcy5jaGVja0xpc3RTZWxlY3Rpb24uc2VsZWN0KG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tMb2FkaW5nT2ZQYXJlbnQobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUGFyZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IGFsbFBhcmVudFtpXTtcclxuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudC5pc0xvYWRpbmcgPSBkZXNjZW5kYW50cy5zb21lKHggPT4geC5pc0xvYWRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Tm9kZUJ5SWQoaWQ6IHN0cmluZyk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGlkKSB8fCB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRSb290T2ZOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSk6IFFNU0ZsYXROb2RlVHJlZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBhbGxQYXJlbnQgPSB0aGlzLmdldEFsbFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICBpZiAoIWFsbFBhcmVudC5sZW5ndGgpXHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gYWxsUGFyZW50LnBvcCgpO1xyXG4gIH1cclxuXHJcbiAgYWRkUm9vdFRyZWUoZGF0YTogUU1TRmxhdE5vZGVUcmVlW10gPSBbXSkge1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nTW9yZSQubmV4dChmYWxzZSk7XHJcbiAgICBpZiAoIWRhdGEubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBjb25zdCB0cmVlTm9kZURhdGEgPSB0aGlzLnRyZWVEZXBhcnRtZW50U2VydmljZS5jb252ZXJ0VG9UcmVlRGF0YShkYXRhKTtcclxuICAgIC8vIHJlLWNoZWNrIHJvb3Qgd2FzIGV4aXN0ZWQgaW4gdHJlZVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmVlTm9kZURhdGEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRyZWVOb2RlRGF0YVtpXTtcclxuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5SWQoaXRlbS5pZCk7XHJcbiAgICAgIGlmICghIW5vZGUgJiYgbm9kZS5leHBhbmRhYmxlICYmICFub2RlLm1hcmtlZEdldENoaWxkcmVuKSB7XHJcbiAgICAgICAgY29uc3QgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgICAgICBuZXN0ZWROb2RlLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbjtcclxuICAgICAgICBuZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkcmVuID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFub2RlKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRyZWVEYXRhLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZURhdGFUcmVlKHRoaXMuY3VycmVudFRyZWVEYXRhKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMaXN0QWZ0ZXJEYXRhTm9kZUNoYW5nZSQubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldENoZWNrZWRTdGF0dXNOb2RlKG5vZGU6IFFNU0ZsYXROb2RlVHJlZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZE5vZGUobm9kZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVOb2RlSW5mb3JtYXRpb24obm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICBsZXQgbmVzdGVkTm9kZSA9IHRoaXMuY29udmVydFRvTmVzdGVkTm9kZShub2RlKTtcclxuICAgIGlmICghbmVzdGVkTm9kZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbmVzdGVkTm9kZS5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xyXG4gICAgbmVzdGVkTm9kZS5uYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgbmVzdGVkTm9kZS5pdGVtSWNvbiA9IG5vZGUuaXRlbUljb247XHJcbiAgICBuZXN0ZWROb2RlLml0ZW1JY29uU3ZnID0gbm9kZS5pdGVtSWNvblN2ZztcclxuICAgIG5lc3RlZE5vZGUuc2VsZWN0ZWRDaGlsZENvdW50ID0gbm9kZS5zZWxlY3RlZENoaWxkQ291bnQ7XHJcbiAgICBuZXN0ZWROb2RlLm1hcmtlZEdldENoaWxkQ291bnRSZWN1cnJzaXZlID0gbm9kZS5tYXJrZWRHZXRDaGlsZENvdW50UmVjdXJyc2l2ZTtcclxuICAgIG5lc3RlZE5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZCA9IG5vZGUuaXNJbmNsdWRlQ2hpbGRXaGVuQ2hlY2tlZDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGVkUmVzdWx0RGF0YShub2RlOiBRTVNGbGF0Tm9kZVRyZWUpIHtcclxuICAgIGNvbnN0IG5vZGVSZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdGVkLmZpbmQoKHgpID0+IHguaWQgPT09IG5vZGUuaWQpO1xyXG4gICAgaWYgKG5vZGVSZXN1bHQpIHtcclxuICAgICAgbm9kZVJlc3VsdC5jaGlsZENvdW50ID0gbm9kZS5jaGlsZENvdW50O1xyXG4gICAgICBub2RlUmVzdWx0LnNlbGVjdGVkQ2hpbGRDb3VudCA9IG5vZGUuc2VsZWN0ZWRDaGlsZENvdW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsbENoZWNrTm9kZU91dHNpZGUobm9kZTogUU1TRmxhdE5vZGVUcmVlKSB7XHJcbiAgICB0aGlzLmNoZWNrTGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICAvL3RoaXMuaGFuZGxlQ2hlY2tOb2RlKG5vZGUpO1xyXG4gIH1cclxufVxyXG4iXX0=