@senior-gestao-pessoas/hcm-contract-employee-history 5.6.4 → 5.7.0-bugfix-hcmfnd-6150-12f6530d

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.
@@ -120,6 +120,9 @@ let AnnotationHistoryListComponent = class AnnotationHistoryListComponent extend
120
120
  this.setStorageFiltersIntoForm(this.filterFormGroup);
121
121
  this.gridColumns = this.getGridColumns();
122
122
  this.filterFields = this.getFilterFields();
123
+ this.filterFormGroup.get('employer').valueChanges.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {
124
+ this.filterFormGroup.get('companyBranch').setValue(null);
125
+ });
123
126
  this.setHotkeys();
124
127
  /*{CA:ON_INIT_END:START}*/
125
128
  if (this.permissions.incluir) {
@@ -792,7 +795,7 @@ let AnnotationHistoryListComponent = class AnnotationHistoryListComponent extend
792
795
  /*{CA:ON_EMPLOYER_LOOKUP_REQUEST_START:START}*/
793
796
  /*{CA:ON_EMPLOYER_LOOKUP_REQUEST_START:END}*/
794
797
  const sort = this.companyBranchLookupDisplayFields.map((field) => ({ field, order: 1 }));
795
- const filterQuery = this.getCompanyBranchSearchFields()
798
+ let filterQuery = this.getCompanyBranchSearchFields()
796
799
  .filter(({ type }) => isValidFilter(type, value))
797
800
  .map(({ name, type }) => {
798
801
  if (typeof value == "number")
@@ -810,6 +813,11 @@ let AnnotationHistoryListComponent = class AnnotationHistoryListComponent extend
810
813
  })
811
814
  .filter(value => !!value)
812
815
  .join(" or ");
816
+ const employer = this.filterFormGroup.get('employer').value;
817
+ if (employer) {
818
+ const companyFilter = `e070emp.codEmp eq ${employer.codEmp}`;
819
+ filterQuery = filterQuery ? `${filterQuery} and ${companyFilter}` : companyFilter;
820
+ }
813
821
  const displayFields = mergeUnique(this.companyBranchLookupDisplayFields, this.companyBranchAdvancedDisplayFields);
814
822
  this.companyBranchService
815
823
  .list({ filterQuery, displayFields, sort })
@@ -825,7 +833,7 @@ let AnnotationHistoryListComponent = class AnnotationHistoryListComponent extend
825
833
  const { first, rows, multiSortMeta, filterData } = event;
826
834
  const page = first / rows;
827
835
  const sort = multiSortMeta;
828
- const filterQuery = this.getCompanyBranchSearchFields()
836
+ let filterQuery = this.getCompanyBranchSearchFields()
829
837
  .filter(({ name }) => filterData[name] != undefined && filterData[name] != "")
830
838
  .map(({ name, type }) => {
831
839
  const value = filterData[name];
@@ -846,6 +854,11 @@ let AnnotationHistoryListComponent = class AnnotationHistoryListComponent extend
846
854
  })
847
855
  .filter(value => !!value)
848
856
  .join(" and ");
857
+ const employer = this.filterFormGroup.get('employer').value;
858
+ if (employer) {
859
+ const companyFilter = `e070emp.codEmp eq ${employer.codEmp}`;
860
+ filterQuery = filterQuery ? `${filterQuery} and ${companyFilter}` : companyFilter;
861
+ }
849
862
  const displayFields = mergeUnique(this.companyBranchLookupDisplayFields, this.companyBranchAdvancedDisplayFields);
850
863
  this.companyBranchService
851
864
  .list({ page, sort, filterQuery, displayFields })
@@ -1118,4 +1131,4 @@ AnnotationHistoryListComponent = __decorate([
1118
1131
  export { AnnotationHistoryListComponent };
1119
1132
  /*{CA:FILE_CONTENTS:START}*/
1120
1133
  /*{CA:FILE_CONTENTS:END}*/
1121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9oY20tY29udHJhY3QtZW1wbG95ZWUtaGlzdG9yeS8iLCJzb3VyY2VzIjpbImxpYi9hbm5vdGF0aW9uLWhpc3Rvcnkvdmlld3MvbGlzdC9hbm5vdGF0aW9uLWhpc3RvcnktbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFHdkYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDbkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNwSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU5RSwrQkFBK0I7QUFDL0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMseUVBQXlFO0FBQ2pHLDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsNEJBQTRCO0FBaUI1QixJQUFhLDhCQUE4QixHQUEzQyxNQUFhLDhCQUErQixTQUFRLDhCQUE4QjtJQTBGOUU7SUFDSSx5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ2YsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLHdCQUFrRCxFQUNsRCxtQkFBd0MsRUFDekMsU0FBMkIsRUFDM0IsY0FBOEIsRUFDN0IsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIscUJBQTRDLEVBQzVDLHVCQUFnRCxFQUNoRCxlQUFnQyxFQUNoQyxxQkFBNEMsRUFDNUMsY0FBOEIsRUFDOUIsb0JBQW9DLEVBQ3BDLHFCQUE0QyxFQUNuQyxhQUF3QztRQUV6RCw4QkFBOEI7UUFDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBbEJULFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDekMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBZ0I7UUFDcEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUNuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUEzR3RELG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBRXZCLHNCQUFpQixHQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBU2hGLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3QixpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUM1QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUt0QixzQ0FBaUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCx3Q0FBbUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2RCxnQ0FBMkIsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUNsSCxrQ0FBNkIsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUVwSCxtQ0FBOEIsR0FBRyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzRCxxQ0FBZ0MsR0FBRyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUU3RCwrQkFBMEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxpQ0FBNEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVwRCxxQ0FBZ0MsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCx1Q0FBa0MsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQWlCakUsK0JBQStCO1FBQ3hCLHdCQUFtQixHQUF1QztZQUM3RDtnQkFDSSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0VBQWdFLENBQUM7Z0JBQy9GLEtBQUssRUFBRSxZQUFZLENBQUMsUUFBUTthQUMvQjtZQUNEO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnRUFBZ0UsQ0FBQztnQkFDL0YsS0FBSyxFQUFFLFlBQVksQ0FBQyxRQUFRO2FBQy9CO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtEQUErRCxDQUFDO2dCQUM5RixLQUFLLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDOUI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUM7Z0JBQ2hHLEtBQUssRUFBRSxZQUFZLENBQUMsU0FBUzthQUNoQztZQUNEO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtRUFBbUUsQ0FBQztnQkFDbEcsS0FBSyxFQUFFLFlBQVksQ0FBQyxXQUFXO2FBQ2xDO1NBQ0osQ0FBQztRQUNGLDZCQUE2QjtRQUVyQiw4Q0FBeUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzFELHlDQUFvQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsMkNBQXNDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2RCxzQ0FBaUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWxELHVDQUFrQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkQsa0NBQTZCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5Qyw2Q0FBd0MsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pELHdDQUFtQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsc0JBQWlCLEdBQWUsRUFBRSxDQUFDO1FBd0J0Qyw0QkFBNEI7SUFDaEMsQ0FBQztJQUVNLFFBQVE7UUFDWCw0QkFBNEI7UUFDNUIsMEJBQTBCO1FBRTFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUzRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLGFBQWEsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELFlBQVksRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsMEJBQTBCO1FBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDdkI7Z0JBQ0ksS0FBSyxFQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFFLElBQUksQ0FBQyxlQUFlLEVBQUU7YUFDcEgsQ0FDSixDQUFBO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3ZCO2dCQUNJLEtBQUssRUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvREFBb0QsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7YUFDckgsQ0FDUixDQUFBO1NBQ0o7UUFDRCx3QkFBd0I7SUFDNUIsQ0FBQztJQUVNLFdBQVc7UUFDZCwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBRTdCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUU5Qiw2QkFBNkI7UUFDN0IsMkJBQTJCO0lBQy9CLENBQUM7SUFFTSxVQUFVO1FBQ2IsZ0NBQWdDO1FBQ2hDLDhCQUE4QjtRQUU5QixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxNQUFNLENBQ04sYUFBYSxFQUNiLEdBQUcsRUFBRTtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqQjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ2xDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2IsR0FBRyxFQUFFO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUNyRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLEVBQ0QsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUNsQyxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxNQUFNLENBQ04sYUFBYSxFQUNiLEdBQUcsRUFBRTtZQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNoQjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ2xDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2IsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ2xDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2IsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxFQUNELENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDbEMsQ0FDSixDQUFDO1FBRUYsOEJBQThCO1FBQzlCLDRCQUE0QjtJQUNoQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsSUFBUztRQUM5Qix5Q0FBeUM7UUFDekMsdUNBQXVDO1FBRXZDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXRDLHVDQUF1QztRQUN2QyxxQ0FBcUM7SUFDekMsQ0FBQztJQUVELDZHQUE2RztJQUNyRyxRQUFRLENBQUMsTUFBVztRQUN4QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEUsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNMLENBQUM7SUFFTSxRQUFRO1FBQ1gsOEJBQThCO1FBQzlCLDRCQUE0QjtRQUU1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXRELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUMzRDthQUFNO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLGdDQUFnQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ3pGO1FBRUQsNEJBQTRCO1FBQzVCLDBCQUEwQjtJQUM5QixDQUFDO0lBRU0sT0FBTztRQUNWLDZCQUE2QjtRQUM3QiwyQkFBMkI7UUFFM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUUxRSwyQkFBMkI7UUFDM0IseUJBQXlCO0lBQzdCLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBYTtRQUM5QixvQ0FBb0M7UUFDcEMsa0NBQWtDO1FBRWxDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsZ0NBQWdDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFMUYsa0NBQWtDO1FBQ2xDLGdDQUFnQztJQUNwQyxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQW9CO1FBQ3BDLG1DQUFtQztRQUNuQyxpQ0FBaUM7UUFFakMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN4QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBRWpDLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyx5Q0FBeUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoSDtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3QyxpQ0FBaUM7UUFDakMsK0JBQStCO0lBQ25DLENBQUM7SUFFTSxLQUFLO1FBQ1IsMkJBQTJCO1FBQzNCLHlCQUF5QjtRQUV6QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTFELHlCQUF5QjtRQUN6Qix1QkFBdUI7SUFDM0IsQ0FBQztJQUVNLE1BQU07UUFDVCw0QkFBNEI7UUFDNUIsMEJBQTBCO1FBRTFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUV6RSwwQkFBMEI7UUFDMUIsd0JBQXdCO0lBQzVCLENBQUM7SUFFTSxRQUFRO1FBQ1gsOEJBQThCO1FBQzlCLDRCQUE0QjtRQUU1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDO1lBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxRUFBcUUsQ0FBQztZQUN0RyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsbUVBQW1FLENBQUM7WUFDbkcsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDVCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3hHLElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixRQUFRLENBQUMsR0FBRyxFQUFFO29CQUNWLHFDQUFxQztvQkFDckMsbUNBQW1DO29CQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNqQix3Q0FBd0M7b0JBQ3hDLHNDQUFzQztnQkFDMUMsQ0FBQyxDQUFDLENBQ0w7cUJBQ0EsU0FBUyxDQUNOLEdBQUcsRUFBRTtvQkFDRCxrQ0FBa0M7b0JBQ2xDLGdDQUFnQztvQkFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7d0JBQ3BCLFFBQVEsRUFBRSxTQUFTO3dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0RBQStELENBQUM7d0JBQ2hHLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztxQkFDcEcsQ0FBQyxDQUFDO29CQUNILHFDQUFxQztvQkFDckMsbUNBQW1DO2dCQUN2QyxDQUFDLEVBQ0QsS0FBSyxDQUFDLEVBQUU7b0JBQ0osa0NBQWtDO29CQUNsQyxnQ0FBZ0M7Z0JBQ3BDLENBQUMsQ0FDSixDQUFDO1lBQ1YsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUVILDRCQUE0QjtRQUM1QiwwQkFBMEI7SUFDOUIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxTQUFpQjtRQUMvQixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLE9BQU8sRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFFTSxhQUFhLENBQUMsUUFBZSxFQUFFLGFBQW9CO1FBQ3RELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsaUNBQzVCLElBQUksS0FDUCxLQUFLLEVBQUUsYUFBYTtpQkFDZixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUMzQztnQkFDRCxJQUFJLEtBQUssS0FBSyxxQ0FBcUMsRUFBRTtvQkFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDckQ7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsSUFDbEIsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVNLDZCQUE2QixDQUFDLEtBQWE7UUFDOUMsMkNBQTJDO1FBQzNDLHlDQUF5QztRQUV6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7YUFDbkQsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDL0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMscUJBQXFCO2FBQ3JCLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQzthQUNuRyxTQUFTLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUzRix5Q0FBeUM7UUFDekMsdUNBQXVDO0lBQzNDLENBQUM7SUFFTSw2QkFBNkIsQ0FBQyxLQUFVO1FBQzNDLDJDQUEyQztRQUMzQyx5Q0FBeUM7UUFFekMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7YUFDbkQsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ25FLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMzQixPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDO2FBQ2hDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2FBQy9EO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2FBQzdEO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDbkQ7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQzthQUNsQztpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUNsQyxPQUFPLG9CQUFvQixJQUFJLGFBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUMvRTtpQkFBTTtnQkFDSCxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLHFCQUFxQjthQUNyQixJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxDQUFDO1lBQ25GLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNuQyxDQUFDLENBQUMsQ0FDTjthQUNBLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXBGLHlDQUF5QztRQUN6Qyx1Q0FBdUM7SUFDM0MsQ0FBQztJQUVNLDBCQUEwQixDQUFDLEtBQWE7UUFDM0Msa0RBQWtEO1FBQ2xELGdEQUFnRDtRQUVoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7YUFDaEQsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDL0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsZUFBZTthQUNmLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQzthQUNoRyxTQUFTLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV4RixnREFBZ0Q7UUFDaEQsOENBQThDO0lBQ2xELENBQUM7SUFFTSwwQkFBMEIsQ0FBQyxLQUFVO1FBQ3hDLGtEQUFrRDtRQUNsRCxnREFBZ0Q7UUFFaEQsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7YUFDaEQsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ25FLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMzQixPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDO2FBQ2hDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2FBQy9EO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2FBQzdEO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDbkQ7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQzthQUNsQztpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUNsQyxPQUFPLG9CQUFvQixJQUFJLGFBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUMvRTtpQkFBTTtnQkFDSCxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLGVBQWU7YUFDZixJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDO1lBQ2hGLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNuQyxDQUFDLENBQUMsQ0FDTjthQUNBLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpGLGdEQUFnRDtRQUNoRCw4Q0FBOEM7SUFDbEQsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFRLEVBQUUsSUFBUztRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JILENBQUM7SUFFTyxjQUFjO1FBQ2xCLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdUVBQXVFLENBQUMsRUFBRTtZQUMvSCxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUZBQWlGLENBQUMsRUFBRTtZQUNuSixFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUZBQWlGLENBQUMsRUFBRTtZQUNuSjtnQkFDSSxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVFQUF1RSxDQUFDO2FBQzFHO1NBQ0osQ0FBQztRQUVGLCtCQUErQjtRQUMvQiw2QkFBNkI7UUFFN0IsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVPLGVBQWU7UUFDbkIsTUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRTtZQUN6QyxJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGtEQUFrRCxDQUFDO2dCQUNqRixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0MsWUFBWSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxRQUFRLEVBQUUsS0FBSztnQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0RBQStELENBQUM7Z0JBQ3BHLGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxDQUFDO2dCQUNqRyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpREFBaUQsQ0FBQztnQkFDdEYsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDO2dCQUNuRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsT0FBTyxFQUFFLElBQUk7Z0JBQ2IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGtDQUFrQztnQkFDOUQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QjtnQkFDcEQsZUFBZSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO2dCQUN0RSxlQUFlLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ25FLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzNDLGdCQUFnQixFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRTthQUN0RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixRQUFRLEVBQUUsS0FBSztnQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsOEVBQThFLENBQUM7Z0JBQ25ILGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxDQUFDO2dCQUNqRyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpREFBaUQsQ0FBQztnQkFDdEYsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDO2dCQUNuRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0MsWUFBWSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLE9BQU8sRUFBRSxJQUFJO2dCQUNiLHFCQUFxQixFQUFFLElBQUksQ0FBQyx3Q0FBd0M7Z0JBQ3BFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxtQ0FBbUM7Z0JBQzFELGVBQWUsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQztnQkFDNUUsZUFBZSxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDO2dCQUN6RSxrQkFBa0IsRUFBRSxPQUFPO2dCQUMzQixZQUFZLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2dCQUNqRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7YUFDNUQsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxjQUFjO2dCQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0ZBQXdGLENBQUM7Z0JBQ3ZILElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG9HQUFvRyxDQUFDO2dCQUN6SSxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtnQkFDakMsUUFBUSxFQUFFLEtBQUs7YUFDbEIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0RUFBNEUsQ0FBQztnQkFDM0csSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixRQUFRLEVBQUUsS0FBSztnQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseUZBQXlGLENBQUM7Z0JBQzlILGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxDQUFDO2dCQUNqRyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpREFBaUQsQ0FBQztnQkFDdEYsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQyxZQUFZLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQztnQkFDbkYsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDO2dCQUNyRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLE9BQU8sRUFBRSxJQUFJO2dCQUNiLHFCQUFxQixFQUFFLElBQUksQ0FBQyx5Q0FBeUM7Z0JBQ3JFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxvQ0FBb0M7Z0JBQzNELGVBQWUsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQztnQkFDN0UsZUFBZSxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDO2dCQUMxRSxrQkFBa0IsRUFBRSxPQUFPO2dCQUMzQixZQUFZLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixFQUFFO2dCQUNsRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUNBQWlDLEVBQUU7YUFDN0QsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0REFBNEQsQ0FBQztnQkFDM0YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQy9CLDREQUE0RCxDQUMvRDtnQkFDRCxPQUFPLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtnQkFDbkMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDN0QsUUFBUSxFQUFFLEtBQUs7YUFDbEIsQ0FBQztTQUNMLENBQUM7UUFFRixnQ0FBZ0M7UUFDaEMsOEJBQThCO1FBRTlCLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFYSx5QkFBeUIsQ0FBQyxJQUFlOztZQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUU5RixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7WUFDMUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUUvQixvQ0FBb0M7WUFDcEMsa0NBQWtDO1FBQ3RDLENBQUM7S0FBQTtJQUVhLG1CQUFtQjs7WUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFFN0csSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGlCQUFpQixtQ0FBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUssU0FBUyxDQUFFLENBQUM7YUFDeEU7WUFFRCxvQ0FBb0M7WUFDcEMsa0NBQWtDO1FBQ3RDLENBQUM7S0FBQTtJQUVPLFlBQVksQ0FBQyxJQUFZLEVBQUUsS0FBVSxFQUFFLFFBQWlCO1FBQzVELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO0lBQzdILENBQUM7SUFFTyw2QkFBNkI7UUFDakMsTUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDO2dCQUM3RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw4REFBOEQsQ0FBQztnQkFDN0YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYscUNBQXFDO1FBQ3JDLG1DQUFtQztRQUVuQyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8saUNBQWlDO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUc7WUFDckIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDO2dCQUM3RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw4REFBOEQsQ0FBQztnQkFDN0YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYsMENBQTBDO1FBQzFDLHdDQUF3QztRQUV4QyxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsTUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDBFQUEwRSxDQUFDO2dCQUN6RyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsQ0FBQztnQkFDdEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsZUFBZTtnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlFQUFpRSxDQUFDO2dCQUNoRyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDekIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3RkFBd0YsQ0FBQztnQkFDdkgsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjthQUNwQyxDQUFDO1NBQ0wsQ0FBQztRQUVGLHlDQUF5QztRQUN6Qyx1Q0FBdUM7UUFFdkMsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixNQUFNLGdCQUFnQixHQUFHO1lBQ3JCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywwRUFBMEUsQ0FBQztnQkFDekcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ3RGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0ZBQXdGLENBQUM7Z0JBQ3ZILElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztTQUNMLENBQUM7UUFFRiw4Q0FBOEM7UUFDOUMsNENBQTRDO1FBRTVDLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLDBCQUEwQjtRQUM5QixNQUFNLFlBQVksR0FBRztZQUNqQixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEVBQTBFLENBQUM7Z0JBQ3pHLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxDQUFDO2dCQUN0RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxlQUFlO2dCQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUM7Z0JBQ2hHLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdGQUF3RixDQUFDO2dCQUN2SCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CO2FBQ3BDLENBQUM7U0FDTCxDQUFDO1FBRUYsNENBQTRDO1FBQzVDLDBDQUEwQztRQUUxQyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sOEJBQThCO1FBQ2xDLE1BQU0sZ0JBQWdCLEdBQUc7WUFDckIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDBFQUEwRSxDQUFDO2dCQUN6RyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsQ0FBQztnQkFDdEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsZUFBZTtnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlFQUFpRSxDQUFDO2dCQUNoRyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDekIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3RkFBd0YsQ0FBQztnQkFDdkgsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjthQUNwQyxDQUFDO1NBQ0wsQ0FBQztRQUVGLGlEQUFpRDtRQUNqRCwrQ0FBK0M7UUFFL0MsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU0sc0JBQXNCLENBQUMsS0FBYTtRQUN2QywrQ0FBK0M7UUFDL0MsNkNBQTZDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV4RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDNUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3BCLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDO2lCQUN0RCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDeEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7aUJBQ3RGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7aUJBQ2hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sb0JBQW9CLElBQUksYUFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDOztnQkFDMUcsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQztRQUN4QyxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxjQUFjO2FBQ2QsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQzthQUM1RixTQUFTLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVwRiw2Q0FBNkM7UUFDN0MsMkNBQTJDO0lBQy9DLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFVO1FBQ3BDLCtDQUErQztRQUMvQyw2Q0FBNkM7UUFDN0MsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDNUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzdFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDO2lCQUN0RCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDeEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7aUJBQ3RGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7aUJBQ2hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7aUJBQzNELElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sb0JBQW9CLElBQUksYUFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDOztnQkFDMUcsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQztRQUN4QyxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxjQUFjO2FBQ2QsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoQixRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQztZQUM1RSxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDaEMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFJLENBQUMsQ0FBQyxDQUNOO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFN0UsNkNBQTZDO1FBQzdDLDJDQUEyQztJQUMvQyxDQUFDO0lBRU0sNEJBQTRCLENBQUMsS0FBYTtRQUM3QywrQ0FBK0M7UUFDL0MsNkNBQTZDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU5RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7YUFDbEQsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3BCLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDO2lCQUN0RCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDeEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7aUJBQ3RGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7aUJBQ2hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sb0JBQW9CLElBQUksYUFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDOztnQkFDMUcsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQztRQUN4QyxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyxvQkFBb0I7YUFDcEIsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQzthQUNsRyxTQUFTLENBQUMsQ0FBQyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUxRiw2Q0FBNkM7UUFDN0MsMkNBQTJDO0lBQy9DLENBQUM7SUFFTSw0QkFBNEIsQ0FBQyxLQUFVO1FBQzFDLCtDQUErQztRQUMvQyw2Q0FBNkM7UUFDN0MsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7YUFDbEQsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzdFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDO2lCQUN0RCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDeEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7aUJBQ3RGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7aUJBQ2hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7aUJBQzNELElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sb0JBQW9CLElBQUksYUFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDOztnQkFDMUcsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQztRQUN4QyxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyxvQkFBb0I7YUFDcEIsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoQixRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztZQUNsRixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDaEMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFJLENBQUMsQ0FBQyxDQUNOO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFbkYsNkNBQTZDO1FBQzdDLDJDQUEyQztJQUMvQyxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLE1BQU0sWUFBWSxHQUFHO1lBQ2pCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5REFBeUQsQ0FBQztnQkFDeEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseURBQXlELENBQUM7Z0JBQ3hGLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1NBQ0wsQ0FBQztRQUVGLHlDQUF5QztRQUN6Qyx1Q0FBdUM7UUFFdkMsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLDBCQUEwQjtRQUM5QixNQUFNLGdCQUFnQixHQUFHO1lBQ3JCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5REFBeUQsQ0FBQztnQkFDeEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseURBQXlELENBQUM7Z0JBQ3hGLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1NBQ0wsQ0FBQztRQUVGLDhDQUE4QztRQUM5Qyw0Q0FBNEM7UUFFNUMsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sNEJBQTRCO1FBQ2hDLE1BQU0sWUFBWSxHQUFHO1lBQ2pCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2REFBNkQsQ0FBQztnQkFDNUYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkRBQTZELENBQUM7Z0JBQzVGLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1NBQ0wsQ0FBQztRQUVGLHlDQUF5QztRQUN6Qyx1Q0FBdUM7UUFFdkMsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLGdDQUFnQztRQUNwQyxNQUFNLGdCQUFnQixHQUFHO1lBQ3JCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2REFBNkQsQ0FBQztnQkFDNUYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkRBQTZELENBQUM7Z0JBQzVGLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1NBQ0wsQ0FBQztRQUVGLDhDQUE4QztRQUM5Qyw0Q0FBNEM7UUFFNUMsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sVUFBVSxDQUFDLGFBQXlCLEVBQUU7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixtQ0FBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUssVUFBVSxDQUFFLENBQUM7UUFDdEUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQzFELElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFFdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWTthQUNoQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDbkUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFPLEVBQUUsRUFBRTtZQUN2RCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0IsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBRXZCLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzFDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFDaEcsVUFBVSxHQUFHLG1CQUFtQjtxQkFDM0IsR0FBRyxDQUFDLENBQUMsS0FBZ0IsRUFBRSxFQUFFO29CQUN0QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDN0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3ZEO29CQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxxQ0FBcUMsRUFBRTt3QkFDdEQsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUNqRTtvQkFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEI7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ3pGO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ25DLFVBQVUsR0FBRyxLQUFLO29CQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnRUFBZ0UsQ0FBQztvQkFDMUYsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7YUFDbkc7WUFFRCxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLEtBQUssVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZO2FBQzlCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7WUFDOUIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMzQixPQUFPLEdBQUcsSUFBSSxPQUFPLEtBQUssRUFBRSxDQUFDO2FBQ2hDO2lCQUFNLElBQUksSUFBSSxJQUFJLG1CQUFtQixFQUFFO2dCQUNwQyxPQUFPLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9DO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2FBQy9EO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO2FBQzdEO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDbkQ7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDbEMsT0FBTyxvQkFBb0IsSUFBSSxhQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDL0U7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDbkQ7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDbEMsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUM7YUFDckM7aUJBQU07Z0JBQ0gsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQzthQUNsQztRQUNMLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQixXQUFXLEdBQUcsV0FBVzthQUNwQixPQUFPLENBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDO2FBQzlDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSw0Q0FBNEMsQ0FBQzthQUN6RSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsaURBQWlELENBQUMsQ0FBQTtRQUVsRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksQ0FBQyx3QkFBd0I7YUFDeEIsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQ3RELElBQUksQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixVQUFVLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUMzQjtZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxTQUFTLENBQUMsVUFBdUI7UUFDcEMsSUFBSSxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsaUJBQWlCLG1DQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBSyxVQUFVLENBQUUsQ0FBQztTQUN6RTtRQUNELElBQUksQ0FBQyxpQkFBaUIsbUNBQVEsSUFBSSxDQUFDLGlCQUFpQixLQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRSxDQUFDO1FBQzFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFNBQW9CO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM1QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtnQkFDaEMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzNDO2lCQUFNLElBQUksT0FBTyxZQUFZLFNBQVMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sWUFBWTtRQUNmLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVztRQUNkLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQ3JFLENBQUM7SUFFRCw0QkFBNEI7SUFDcEIsaUJBQWlCLENBQUMsS0FBYTtRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztRQUMxRSxPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7SUFDckosQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEgsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsSCxDQUFDO0NBRUosQ0FBQTs7WUE5bUN1QixNQUFNO1lBQ1AsY0FBYztZQUNLLHdCQUF3QjtZQUM3QixtQkFBbUI7WUFDOUIsZ0JBQWdCO1lBQ1gsY0FBYztZQUNiLGNBQWM7WUFDakIsV0FBVztZQUNELHFCQUFxQjtZQUNuQix1QkFBdUI7WUFDL0IsZUFBZTtZQUNULHFCQUFxQjtZQUM1QixjQUFjO1lBQ1IsY0FBYztZQUNiLHFCQUFxQjtZQUNwQix5QkFBeUI7O0FBeEY3RDtJQURDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzs2REFDbkM7QUFrQnBCO0lBREMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO3NFQUNQO0FBR3hDO0lBREMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDOzBFQUNQO0FBRzVDO0lBREMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDOzBFQUNQO0FBRzVDO0lBREMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO3dFQUNQO0FBRzFDO0lBREMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO3NFQUNQO0FBbEQvQiw4QkFBOEI7SUFmMUMsU0FBUyxDQUFDO1FBQ1AscTJaQUF1RDtRQUt2RCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLFNBQVMsRUFBRTtZQUNQLG1CQUFtQjtTQUd0QjtLQUdKLENBQUM7R0FDVyw4QkFBOEIsQ0Eyc0MxQztTQTNzQ1ksOEJBQThCO0FBb3RDM0MsNEJBQTRCO0FBQzVCLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUsIEZvcm1GaWVsZCwgSVRva2VuLCBPcHRpb24gfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzJztcbmltcG9ydCB7IEhvdGtleSwgSG90a2V5c1NlcnZpY2UgfSBmcm9tICdhbmd1bGFyMi1ob3RrZXlzJztcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIExhenlMb2FkRXZlbnQsIE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSwgU29ydE1ldGEgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEUwNzBFbXBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9lLTA3MC1lbXAvZS0wNzAtZW1wLnNlcnZpY2UnO1xuaW1wb3J0IHsgRTA3MEZpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2UtMDcwLWZpbC9lLTA3MC1maWwuc2VydmljZSc7XG5cbmltcG9ydCB7IEFubm90YXRpb25IaXN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9hbm5vdGF0aW9uLWhpc3RvcnkvYW5ub3RhdGlvbi1oaXN0b3J5JztcbmltcG9ydCB7IEFubm90YXRpb25IaXN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW50aXRpZXMvYW5ub3RhdGlvbi1oaXN0b3J5L2Fubm90YXRpb24taGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IEFubm90YXRpb25UeXBlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW50aXRpZXMvYW5ub3RhdGlvbi10eXBlL2Fubm90YXRpb24tdHlwZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVtcGxveWVlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW50aXRpZXMvZW1wbG95ZWUvZW1wbG95ZWUuc2VydmljZSc7XG5pbXBvcnQgeyBDb2xsZWN0aXZlUHJvY2Vzc1R5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29yZS9lbnVtcy9jb2xsZWN0aXZlLXByb2Nlc3MtdHlwZVwiO1xuaW1wb3J0IHsgQ29udHJhY3RUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtcy9jb250cmFjdC10eXBlJztcbmltcG9ydCB7IEZpbHRlcnNTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zdG9yYWdlL2ZpbHRlcnMtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3N0b3JhZ2UvcGFnaW5hdG9yLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBnZXREZWZhdWx0SGlzdG9yeUdyaWRDb2x1bW5zLCBnZXRSZWNvcmRMYWJlbCwgZ2V0U2l0dWF0aW9uRmlsdGVySW5IaXN0b3JpY3MsIGlzVmFsaWRGaWx0ZXIsIG1lcmdlVW5pcXVlLCBzaXR1YXRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUZpbHRlclN0cmluZyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZUNvbGxlY3RpdmVIaXN0b3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vYmFzZS1jb2xsZWN0aXZlLWhpc3RvcnkvYmFzZS1jb2xsZWN0aXZlLWhpc3RvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcGxveWVlTG9va3VwU2VydmljZSwgRW50aXR5TG9va3VwQ29uZmlnU2VydmljZSB9IGZyb20gJ0BzZW5pb3ItZ2VzdGFvLXBlc3NvYXMvaGNtLWVudGl0eS1sb29rdXBzJztcbmltcG9ydCB7IFNpdHVhdGlvbkVtcGxveWVlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnVtcy9zaXR1YXRpb24tZW1wbG95ZWUnO1xuXG4vKntDQTpFWFRFUk5BTF9JTVBPUlRTOlNUQVJUfSovXG5jb25zdCBtb21lbnQgPSBtb21lbnRfOyAvLyBASEFDSyBOZWNlc3NhcnkgYmVjYXVzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vcm9sbHVwL3JvbGx1cC9pc3N1ZXMvNjcwXG4vKntDQTpFWFRFUk5BTF9JTVBPUlRTOkVORH0qL1xuXG4vKntDQTpQUk9KRUNUX0lNUE9SVFM6U1RBUlR9Ki9cbi8qe0NBOlBST0pFQ1RfSU1QT1JUUzpFTkR9Ki9cblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6IFwiLi9hbm5vdGF0aW9uLWhpc3RvcnktbGlzdC5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsczogW1xuICAgICAgICAvKntDQTpDT01QT05FTlRfU1RZTEVfVVJMUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpDT01QT05FTlRfU1RZTEVfVVJMUzpFTkR9Ki9cbiAgICBdLFxuICAgIHNlbGVjdG9yOiBcImZuZC1hbm5vdGF0aW9uLWhpc3RvcnlcIixcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgLyp7Q0E6Q09NUE9ORU5UX1BST1ZJREVSUzpTVEFSVH1cbiAgICAgICAgLyp7Q0E6Q09NUE9ORU5UX1BST1ZJREVSUzpFTkR9Ki9cbiAgICBdLFxuICAgIC8qe0NBOkNPTVBPTkVOVF9DT05GSUc6U1RBUlR9Ki9cbiAgICAvKntDQTpDT01QT05FTlRfQ09ORklHOkVORH0qL1xufSlcbmV4cG9ydCBjbGFzcyBBbm5vdGF0aW9uSGlzdG9yeUxpc3RDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29sbGVjdGl2ZUhpc3RvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSAvKntDQTpDTEFTU19JTlRFUkZBQ0VTOlNUQVJUfSovIC8qe0NBOkNMQVNTX0lOVEVSRkFDRVM6RU5EfSovIHtcbiAgICBwdWJsaWMgYWxsUGVybWlzc2lvbnM6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBwZXJtaXNzaW9uczogYW55ID0ge307XG4gICAgcHVibGljIGxvY2FsZUNvbmZpZzogYW55ID0ge307XG5cbiAgICBwdWJsaWMgY3VycmVudExpc3RQYXJhbXM6IExpc3RQYXJhbXMgPSB7IHBhZ2U6IDAsIHNpemU6IDEwLCBzb3J0OiBbXSwgZmlsdGVyRGF0YToge30gfTtcbiAgICBwdWJsaWMgZ3JpZERhdGE6IEFubm90YXRpb25IaXN0b3J5W107XG4gICAgcHVibGljIGdyaWRDb2x1bW5zOiBhbnlbXTtcbiAgICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgdG90YWxSZWNvcmRzOiBudW1iZXI7XG4gICAgcHVibGljIHNlbGVjdGlvbjogQW5ub3RhdGlvbkhpc3RvcnlbXTtcblxuICAgIHB1YmxpYyBmaWx0ZXJGaWVsZHM6IEZvcm1GaWVsZFtdO1xuICAgIHB1YmxpYyBmaWx0ZXJGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgICBwdWJsaWMgZmlsdGVyc1BhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICBwdWJsaWMgc2VhcmNoVG9rZW5zOiBJVG9rZW5bXSA9IFtdO1xuICAgIHB1YmxpYyBzZXJ2ZXJFcnJvciA9IGZhbHNlO1xuICAgIHB1YmxpYyBmaWx0ZXJzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKFwiYW5ub3RhdGlvbkhpc3RvcnlUYWJsZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgdGFibGU6IFRhYmxlO1xuXG4gICAgcHVibGljIGFubm90YXRpb25UeXBlTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGVcIiwgXCJuYW1lXCJdO1xuICAgIHB1YmxpYyBhbm5vdGF0aW9uVHlwZUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImNvZGVcIiwgXCJuYW1lXCJdO1xuXG4gICAgcHVibGljIGVtcGxveWVlTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImVtcGxveWVyLmNvZEVtcFwiLCBcImNvZGVcIiwgXCJwZXJzb24ubm9tUGVzXCIsIFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIl07XG4gICAgcHVibGljIGVtcGxveWVlQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiZW1wbG95ZXIuY29kRW1wXCIsIFwiY29kZVwiLCBcInBlcnNvbi5ub21QZXNcIiwgXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiXTtcblxuICAgIHB1YmxpYyByZXNwb25zaWJsZUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RlXCIsIFwicGVyc29uLm5vbVBlc1wiXTtcbiAgICBwdWJsaWMgcmVzcG9uc2libGVBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJjb2RlXCIsIFwicGVyc29uLm5vbVBlc1wiXTtcblxuICAgIHB1YmxpYyBjb21wYW55TG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZEVtcFwiLCBcIm5vbUVtcFwiXTtcbiAgICBwdWJsaWMgY29tcGFueUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImNvZEVtcFwiLCBcIm5vbUVtcFwiXTtcblxuICAgIHB1YmxpYyBjb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZEZpbFwiLCBcIm5vbUZpbFwiXTtcbiAgICBwdWJsaWMgY29tcGFueUJyYW5jaEFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImNvZEZpbFwiLCBcIm5vbUZpbFwiXTtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21UZW1wbGF0ZVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tRmlsdGVyRmllbGRzXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21GaWx0ZXJGaWVsZHM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tR3JpZENvbGdyb3VwXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21HcmlkQ29sZ3JvdXA6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tR3JpZEhlYWRlclwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgY3VzdG9tR3JpZEhlYWRlcjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21HcmlkQm9keVwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgY3VzdG9tR3JpZEJvZHk6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKntDQTpDTEFTU19BVFRSSUJVVEVTOlNUQVJUfSovXG4gICAgcHVibGljIGNvbnRyYWN0VHlwZU9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbnRyYWN0X3R5cGVfZW1wbG95ZWVcIiksXG4gICAgICAgICAgICB2YWx1ZTogQ29udHJhY3RUeXBlLkVNUExPWUVFXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbnRyYWN0X3R5cGVfZGlyZWN0b3JcIiksXG4gICAgICAgICAgICB2YWx1ZTogQ29udHJhY3RUeXBlLkRJUkVDVE9SXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbnRyYWN0X3R5cGVfdHJhaW5lZVwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuVFJBSU5FRVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb250cmFjdF90eXBlX2FwcmVudGljZVwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuQVBSRU5USUNFXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbnRyYWN0X3R5cGVfdGhpcmRfcGFydHlcIiksXG4gICAgICAgICAgICB2YWx1ZTogQ29udHJhY3RUeXBlLlRISVJEX1BBUlRZXG4gICAgICAgIH0sXG4gICAgXTtcbiAgICAvKntDQTpDTEFTU19BVFRSSUJVVEVTOkVORH0qL1xuXG4gICAgcHJpdmF0ZSBhbm5vdGF0aW9uVHlwZUxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBhbm5vdGF0aW9uVHlwZUxvb2t1cFNlYXJjaE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSByZXNwb25zaWJsZUxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSByZXNwb25zaWJsZUxvb2t1cFNlYXJjaE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBjb21wYW55TG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGNvbXBhbnlMb29rdXBTZWFyY2hPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGNvbXBhbnlCcmFuY2hMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgY29tcGFueUJyYW5jaExvb2t1cFNlYXJjaE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHVibGljIGNvbGxlY3RpdmVBY3Rpb25zOiBNZW51SXRlbVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgLyp7Q0E6SU5KRUNUSU9OUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpJTkpFQ1RJT05TOkVORH0qL1xuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBhbm5vdGF0aW9uSGlzdG9yeVNlcnZpY2U6IEFubm90YXRpb25IaXN0b3J5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGhvdGtleXNTZXJ2aWNlOiBIb3RrZXlzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgZmlsdGVyc1N0b3JhZ2VTZXJ2aWNlOiBGaWx0ZXJzU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGFnaW5hdG9yU3RvcmFnZVNlcnZpY2U6IFBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVtcGxveWVlU2VydmljZTogRW1wbG95ZWVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFubm90YXRpb25UeXBlU2VydmljZTogQW5ub3RhdGlvblR5cGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbXBhbnlTZXJ2aWNlOiBFMDcwRW1wU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21wYW55QnJhbmNoU2VydmljZTogRTA3MEZpbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZW1wbG95ZWVMb29rdXBTZXJ2aWNlOiBFbXBsb3llZUxvb2t1cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogRW50aXR5TG9va3VwQ29uZmlnU2VydmljZVxuICAgICkge1xuICAgICAgICAvKntDQTpDT05TVFJVQ1RPUl9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgc3VwZXIodHJhbnNsYXRlKTtcbiAgICAgICAgLyp7Q0E6Q09OU1RSVUNUT1JfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgLyp7Q0E6T05fSU5JVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9JTklUX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5vblJvdXRlRGF0YUNoYW5nZShkYXRhKSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgICAgIGVtcGxveWVyOiBbdW5kZWZpbmVkLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGNvbXBhbnlCcmFuY2g6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgY29udHJhY3RUeXBlOiBbdW5kZWZpbmVkLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGVtcGxveWVlOiBbdW5kZWZpbmVkLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGFubm90YXRpb25UeXBlOiBbdW5kZWZpbmVkLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGVtcGxveWVlU2l0dWF0aW9uOiBbdW5kZWZpbmVkLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZXRTdG9yYWdlUGFnaW5hdG9yKCk7XG5cbiAgICAgICAgdGhpcy5zZXRTdG9yYWdlRmlsdGVyc0ludG9Gb3JtKHRoaXMuZmlsdGVyRm9ybUdyb3VwKTtcbiAgICAgICAgdGhpcy5ncmlkQ29sdW1ucyA9IHRoaXMuZ2V0R3JpZENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcygpO1xuXG4gICAgICAgIHRoaXMuc2V0SG90a2V5cygpO1xuXG4gICAgICAgIC8qe0NBOk9OX0lOSVRfRU5EOlNUQVJUfSovXG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmluY2x1aXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGl2ZUFjdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdoY21fY29udHJhY3QuZW1wbG95bWVudF9jb250cmFjdC5hZGRfY29sbGVjdGl2ZScpLCBjb21tYW5kOiAoKSA9PiAgdGhpcy5vbkFkZENvbGxlY3RpdmUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5leGNsdWlyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3RpdmVBY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfY29udHJhY3QucmVtb3ZlX2NvbGxlY3RpdmUnKSwgY29tbWFuZDogKCkgPT4gdGhpcy5vblJlbW92ZUNvbGxlY3RpdmUoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgLyp7Q0E6T05fSU5JVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvKntDQTpPTl9ERVNUUk9ZX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0RFU1RST1lfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgLyp7Q0E6T05fREVTVFJPWV9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fREVTVFJPWV9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtlXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRWRpdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgICAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgICAgICAgICAgXCJhbHQrc2hpZnQreFwiLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLnBlcm1pc3Npb25zLmV4Y2x1aXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K25cIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmluY2x1aXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25BZGQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K2ZcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtsXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpTRVRfSE9US0VZU19FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgICAgICAvKntDQTpPTl9ST1VURV9EQVRBX0NIQU5HRV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ST1VURV9EQVRBX0NIQU5HRV9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLmFsbFBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMuYW5ub3RhdGlvbkhpc3Rvcnk7XG4gICAgICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG5cbiAgICAgICAgLyp7Q0E6T05fUk9VVEVfREFUQV9DSEFOR0VfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JPVVRFX0RBVEFfQ0hBTkdFX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYSBzZSBvIG9iamV0byBwb3NzdWkgdW0gdmFsb3IgcXVlIGZvaSBhbHRlcmFkbyBwYXJhIFwiXCIgKFN0cmluZyB2YXppYSkgYW8gaW52ZXMgZGUgbnVsbCBvdSB1bmRlZmluZWRcbiAgICBwcml2YXRlIGhhc0VtcHR5KHRhcmdldDogYW55KSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0YXJnZXQpLmZpbHRlcihrZXkgPT4gdGFyZ2V0W2tleV0gPT09IFwiXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VhcmNoKCkge1xuICAgICAgICAvKntDQTpPTl9TRUFSQ0hfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fU0VBUkNIX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0VtcHR5KGZpbHRlckRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnNQYW5lbENvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5maWx0ZXJGb3JtR3JvdXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1BhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1N0b3JhZ2VTZXJ2aWNlLnN0b3JlRmlsdGVycyhcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiLCBmaWx0ZXJEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qe0NBOk9OX1NFQVJDSF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fU0VBUkNIX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGVhcigpIHtcbiAgICAgICAgLyp7Q0E6T05fQ0xFQVJfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fQ0xFQVJfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAucmVzZXQoKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzU3RvcmFnZVNlcnZpY2UucmVtb3ZlRmlsdGVyKFwiQW5ub3RhdGlvbkhpc3RvcnlMaXN0Q29tcG9uZW50XCIpO1xuXG4gICAgICAgIC8qe0NBOk9OX0NMRUFSX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9DTEVBUl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlVG9rZW4odG9rZW46IElUb2tlbikge1xuICAgICAgICAvKntDQTpPTl9SRU1PVkVfVE9LRU5fU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVNT1ZFX1RPS0VOX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCh0b2tlbi5pZCkuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzU3RvcmFnZVNlcnZpY2UuY2xlYXJGaWx0ZXJWYWx1ZShcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiLCBmaWx0ZXJEYXRhKTtcblxuICAgICAgICAvKntDQTpPTl9SRU1PVkVfVE9LRU5fRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JFTU9WRV9UT0tFTl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uR3JpZENoYW5nZShldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9TVEFSVDpFTkR9Ki9cblxuICAgICAgICBjb25zdCBzaXplID0gZXZlbnQucm93cztcbiAgICAgICAgY29uc3QgcGFnZSA9IGV2ZW50LmZpcnN0IC8gc2l6ZTtcbiAgICAgICAgY29uc3Qgc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGE7XG5cbiAgICAgICAgaWYgKHNpemUgIT09IDEwIHx8IHBhZ2UgIT09IDAgfHwgc29ydD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JTdG9yYWdlU2VydmljZS5zdG9yZVBhZ2luYXRvcihcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFBhZ2luYXRvclwiLCB7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVHcmlkKHsgcGFnZSwgc2l6ZSwgc29ydCB9KTtcblxuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fR1JJRF9DSEFOR0VfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFkZCgpIHtcbiAgICAgICAgLyp7Q0E6T05fQUREX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0FERF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJuZXdcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcblxuICAgICAgICAvKntDQTpPTl9BRERfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0FERF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uRWRpdCgpIHtcbiAgICAgICAgLyp7Q0E6T05fRURJVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FRElUX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnNlbGVjdGlvblswXS5pZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcblxuICAgICAgICAvKntDQTpPTl9FRElUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FRElUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZWxldGUoKSB7XG4gICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ERUxFVEVfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5kZWxldGVfY29uZmlybWF0aW9uX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlX2NvbmZpcm1hdGlvbl90aXRsZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ya0pvaW4odGhpcy5zZWxlY3Rpb24ubWFwKGFubm90YXRpb25IaXN0b3J5ID0+IHRoaXMuYW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlLmRlbGV0ZShhbm5vdGF0aW9uSGlzdG9yeS5pZCkpKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9GSU5BTElaRV9UT1A6U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRklOQUxJWkVfVE9QOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRHcmlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX0ZJTkFMSVpFX0JPVFRPTTpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9GSU5BTElaRV9CT1RUT006RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX1NUQVJUX1RPUDpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9UT1A6RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlZF9tZXNzYWdlX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlZF9tZXNzYWdlX2NvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX1NUQVJUX0JPVFRPTTpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9CT1RUT006RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9FUlJPUl9UT1A6U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRVJST1JfVE9QOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyp7Q0E6T05fREVMRVRFX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ERUxFVEVfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c0lucHV0KGVsZW1lbnRJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtlbGVtZW50SWR9YCk7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFiZWxWYWx1ZShjb250ZW50czogYW55W10sIGRpc3BsYXlGaWVsZHM6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogZGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkXSA9IHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkID09PSBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bZmllbGRdID0gdGhpcy5sb2FkTGFiZWxGcm9tRW51bShpdGVtW2ZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIgLSBcIiksXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Bbm5vdGF0aW9uVHlwZUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICAvKntDQTpPTl9UWVBFX0xPT0tVUF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoZm9ybUZpZWxkID0+IGNyZWF0ZUZpbHRlclN0cmluZyhmb3JtRmllbGQsIHZhbHVlLCB7IHRleHRTZWFjaEVudW06IHRydWUgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gISFzKVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmFubm90YXRpb25UeXBlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5hbm5vdGF0aW9uVHlwZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvblR5cGVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGlzdDogYW55KSA9PiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmFubm90YXRpb25UeXBlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFubm90YXRpb25UeXBlU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX1RZUEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gISFmaWx0ZXJEYXRhW25hbWVdICYmIGZpbHRlckRhdGFbbmFtZV0gIT09IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5FbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmFubm90YXRpb25UeXBlQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uVHlwZVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGdyaWREYXRhOiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cFNlYXJjaE9ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVzcG9uc2libGVMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFJlc3BvbnNpYmxlU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoZm9ybUZpZWxkID0+IGNyZWF0ZUZpbHRlclN0cmluZyhmb3JtRmllbGQsIHZhbHVlLCB7IHRleHRTZWFjaEVudW06IHRydWUgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gISFzKVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5yZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZW1wbG95ZWVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGlzdDogYW55KSA9PiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5yZXNwb25zaWJsZUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLnJlc3BvbnNpYmxlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX0xPT0tVUF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9MT09LVVBfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVzcG9uc2libGVTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0UmVzcG9uc2libGVTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+ICEhZmlsdGVyRGF0YVtuYW1lXSAmJiBmaWx0ZXJEYXRhW25hbWVdICE9PSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRW51bSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5yZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZW1wbG95ZWVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMucmVzcG9uc2libGVMb29rdXBEaXNwbGF5RmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMucmVzcG9uc2libGVMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IGFueSkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyBcIlwiIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBncmlkQ29sdW1ucyA9IFtcbiAgICAgICAgICAgIHsgZmllbGQ6IFwic3RhcnREYXRlXCIsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3Rvcnlfc3RhcnRfZGF0ZVwiKSB9LFxuICAgICAgICAgICAgeyBmaWVsZDogXCJhbm5vdGF0aW9uVHlwZS5jb2RlXCIsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfYW5ub3RhdGlvbl90eXBlX2NvZGVcIikgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6IFwiYW5ub3RhdGlvblR5cGUubmFtZVwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25fdHlwZV9uYW1lXCIpIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmllbGQ6IFwiYW5ub3RhdGlvblwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfYW5ub3RhdGlvblwiKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0dSSURfQ09MVU1OUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfR1JJRF9DT0xVTU5TOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0SGlzdG9yeUdyaWRDb2x1bW5zKHRoaXMudHJhbnNsYXRlLCB0aGlzLmNvbmZpZ1NlcnZpY2UpLmNvbmNhdChncmlkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJGaWVsZHMoKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IFtcbiAgICAgICAgICAgIHRoaXMuZW1wbG95ZWVMb29rdXBTZXJ2aWNlLmdldEZvcm1GaWVsZCgpLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llclwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVyXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Mb29rdXAsXG4gICAgICAgICAgICAgICAgcmVjb3JkTGFiZWw6IGdldFJlY29yZExhYmVsKHRoaXMudHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICByZWNvcmRzTGFiZWw6IGdldFJlY29yZExhYmVsKHRoaXMudHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZXJfc2VhcmNoX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEVtcHR5VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubm90aGluZ19mb3VuZFwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJcIiksXG4gICAgICAgICAgICAgICAgZmlsdGVyVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZmlsdGVyc1wiKSxcbiAgICAgICAgICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNsZWFyXCIpLFxuICAgICAgICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNhbmNlbFwiKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5zZWxlY3RcIiksXG4gICAgICAgICAgICAgICAgZGF0YUtleTogXCJpZFwiLFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogdGhpcy5jb21wYW55TG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIHNlYXJjaE9ic2VydmFibGU6IHRoaXMuY29tcGFueUxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgb25Mb29rdXBSZXF1ZXN0OiAodmFsdWU6IHN0cmluZykgPT4gdGhpcy5vbkNvbXBhbnlMb29rdXBSZXF1ZXN0KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBvblNlYXJjaFJlcXVlc3Q6IChldmVudDogYW55KSA9PiB0aGlzLm9uQ29tcGFueVNlYXJjaFJlcXVlc3QoZXZlbnQpLFxuICAgICAgICAgICAgICAgIGxvb2t1cERpc3BsYXlGaWVsZDogXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkczogdGhpcy5nZXRDb21wYW55U2VhcmNoRmllbGRzKCksXG4gICAgICAgICAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogdGhpcy5nZXRDb21wYW55U2VhcmNoR3JpZEZpZWxkcygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvbXBhbnlCcmFuY2hcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb21wYW55X2JyYW5jaFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWFyY2hUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb21wYW55X2JyYW5jaF9zZWFyY2hfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIGZpbHRlckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmZpbHRlclwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJzXCIpLFxuICAgICAgICAgICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2xlYXJcIiksXG4gICAgICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2FuY2VsXCIpLFxuICAgICAgICAgICAgICAgIHJlY29yZExhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0xhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uc2VsZWN0XCIpLFxuICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTZWFyY2hPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIG9uTG9va3VwUmVxdWVzdDogKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMub25Db21wYW55QnJhbmNoTG9va3VwUmVxdWVzdCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbkNvbXBhbnlCcmFuY2hTZWFyY2hSZXF1ZXN0KGV2ZW50KSxcbiAgICAgICAgICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVfcGxhY2Vob2xkZXJcIiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJhbm5vdGF0aW9uVHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9hbm5vdGF0aW9uX3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkxvb2t1cCxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25fdHlwZV9zZWFyY2hfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIGZpbHRlckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmZpbHRlclwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJzXCIpLFxuICAgICAgICAgICAgICAgIHJlY29yZExhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0xhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgY2xlYXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jbGVhclwiKSxcbiAgICAgICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jYW5jZWxcIiksXG4gICAgICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uc2VsZWN0XCIpLFxuICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgc2VhcmNoT2JzZXJ2YWJsZTogdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgb25Mb29rdXBSZXF1ZXN0OiAodmFsdWU6IHN0cmluZykgPT4gdGhpcy5vbkFubm90YXRpb25UeXBlTG9va3VwUmVxdWVzdCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbkFubm90YXRpb25UeXBlU2VhcmNoUmVxdWVzdChldmVudCksXG4gICAgICAgICAgICAgICAgbG9va3VwRGlzcGxheUZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgc2VhcmNoRmllbGRzOiB0aGlzLmdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKCksXG4gICAgICAgICAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llZVNpdHVhdGlvblwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3NpdHVhdGlvblwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfc2l0dWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBTaXR1YXRpb25FbXBsb3llZS5FVkVSWU9ORSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBzaXR1YXRpb25PcHRpb25zKHRoaXMudHJhbnNsYXRlLCB0aGlzLmNvbmZpZ1NlcnZpY2UpLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNldFN0b3JhZ2VGaWx0ZXJzSW50b0Zvcm0oZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBhd2FpdCB0aGlzLmZpbHRlcnNTdG9yYWdlU2VydmljZS5nZXRGaWx0ZXJzKFwiQW5ub3RhdGlvbkhpc3RvcnlMaXN0Q29tcG9uZW50XCIpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNEYXRlID0gbW9tZW50KGZpbHRlcnNbZmllbGRdLCBtb21lbnQuSFRNTDVfRk1ULkRBVEVUSU1FX0xPQ0FMX01TICsgJ1onLCB0cnVlKS5pc1ZhbGlkKCk7XG4gICAgICAgICAgICBmb3JtLmdldChmaWVsZCkuc2V0VmFsdWUoaXNEYXRlID8gbmV3IERhdGUoZmlsdGVyc1tmaWVsZF0pIDogZmlsdGVyc1tmaWVsZF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlcnNMb2FkZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgdGhpcy5yZXNldEdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xuXG4gICAgICAgIC8qe0NBOkdFVF9GSUxURVJfRk9STV9HUk9VUDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6RU5EfSovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRTdG9yYWdlUGFnaW5hdG9yKCkge1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBhd2FpdCB0aGlzLnBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLmdldFBhZ2luYXRvcihcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFBhZ2luYXRvclwiKTtcblxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkocGFnaW5hdG9yKSAhPT0gXCJ7fVwiKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5wYWdpbmF0b3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qe0NBOkdFVF9GSUxURVJfRk9STV9HUk9VUDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6RU5EfSovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbnVtUXVlcnkobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBtdWx0aXBsZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbXVsdGlwbGUgPyBgKCR7dmFsdWUubWFwKChzZWxlY3RlZDogYW55KSA9PiBgJHtuYW1lfSBlcSAnJHtzZWxlY3RlZH0nYCkuam9pbihcIiBvciBcIil9KWAgOiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX3R5cGVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl90eXBlX25hbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9UWVBFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1RZUEVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QW5ub3RhdGlvblR5cGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl90eXBlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25fdHlwZV9uYW1lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfVFlQRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1RZUEVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW1wbG95ZWVTZWFyY2hGaWVsZHMoKSB7IC8vIE5PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llci5jb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfZW1wbG95ZXJfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXJzb24ubm9tUGVzXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfcGVyc29uX25vbV9wZXNcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVtcGxveWVlU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95ZXIuY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2VtcGxveWVyX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVyc29uLm5vbVBlc1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3BlcnNvbl9ub21fcGVzXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udHJhY3RUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc3BvbnNpYmxlU2VhcmNoRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveWVyLmNvZEVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9lbXBsb3llcl9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlcnNvbi5ub21QZXNcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9wZXJzb25fbm9tX3Blc1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfZW1wbG95bWVudF9yZWxhdGlvbnNoaXBfY29udHJhY3RfdHlwZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNvbnRyYWN0VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzcG9uc2libGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llci5jb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfZW1wbG95ZXJfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXJzb24ubm9tUGVzXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfcGVyc29uX25vbV9wZXNcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1JFU1BPTlNJQkxFX1NFQVJDSF9HUklEX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbXBhbnlMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55TG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55U2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcywgc29ydCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmNvbXBhbnlMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wYW55U2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRDb21wYW55U2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmNvbXBhbnlBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmNvbXBhbnlTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVG90YWxSZWNvcmRzTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8udG90YWxfcmVjb3Jkc1wiLCB7IHZhbHVlOiBsaXN0LnRvdGFsRWxlbWVudHMgfSksXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLmNvbXBhbnlMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29tcGFueUJyYW5jaExvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cbiAgICAgICAgY29uc3Qgc29ydCA9IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoeyBmaWVsZCwgb3JkZXI6IDEgfSkpO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRDb21wYW55QnJhbmNoU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7IC8vTk9TT05BUlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmNvbXBhbnlCcmFuY2hBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmNvbXBhbnlCcmFuY2hTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzLCBzb3J0IH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGlzdDogYW55KSA9PiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5jb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcykpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55W10pID0+IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZS5uZXh0KGRhdGEpKTtcblxuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbXBhbnlCcmFuY2hTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRUVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRUVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldENvbXBhbnlCcmFuY2hTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+IGZpbHRlckRhdGFbbmFtZV0gIT0gdW5kZWZpbmVkICYmIGZpbHRlckRhdGFbbmFtZV0gIT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7IC8vTk9TT05BUlxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJudW1iZXJcIikgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGVUaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5FbnVtKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuY29tcGFueUJyYW5jaEFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuY29tcGFueUJyYW5jaFNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGdyaWREYXRhOiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5jb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsUmVjb3JkczogbGlzdC50b3RhbEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hUb3RhbFJlY29yZHNMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby50b3RhbF9yZWNvcmRzXCIsIHsgdmFsdWU6IGxpc3QudG90YWxFbGVtZW50cyB9KSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cFNlYXJjaE9ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRUVfU0VBUkNIX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbXBhbnlTZWFyY2hGaWVsZHMoKSB7IC8vTk9TT05BUlxuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZEVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfY29kX2VtcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21FbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X25vbV9lbXBcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb21wYW55U2VhcmNoR3JpZEZpZWxkcygpIHsgLy9OT1NPTkFSXG4gICAgICAgIGNvbnN0IHNlYXJjaEdyaWRGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZEVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfY29kX2VtcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21FbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X25vbV9lbXBcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9HUklEX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpIHsgLy9OT1NPTkFSXG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kRmlsXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9icmFuY2hfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21GaWxcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X2JyYW5jaF9uYW1lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEdyaWRGaWVsZHMoKSB7IC8vTk9TT05BUlxuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RGaWxcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X2JyYW5jaF9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbUZpbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfYnJhbmNoX25hbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9HUklEX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlR3JpZChsaXN0UGFyYW1zOiBMaXN0UGFyYW1zID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcnNMb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMgPSB7IC4uLnRoaXMuY3VycmVudExpc3RQYXJhbXMsIC4uLmxpc3RQYXJhbXMgfTtcbiAgICAgICAgY29uc3QgeyBwYWdlLCBzaXplLCBmaWx0ZXJEYXRhIH0gPSB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zO1xuICAgICAgICBsZXQgeyBzb3J0IH0gPSB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoVG9rZW5zID0gdGhpcy5maWx0ZXJGaWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiAhIWZpbHRlckRhdGFbbmFtZV0gJiYgZmlsdGVyRGF0YVtuYW1lXSAhPT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgbGFiZWwsIHR5cGUsIHNlYXJjaEZpZWxkcywgb3B0aW9ucyB9OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJMXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KFwiTFRTXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIkwgTFRTXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkxvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkU2VhcmNoRmllbGRzID0gbmFtZSA9PT0gXCJlbXBsb3llZVwiID8gdGhpcy5nZXRFbXBsb3llZVNlYXJjaEZpZWxkcygpIDogc2VhcmNoRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gdXBkYXRlZFNlYXJjaEZpZWxkc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoZmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5uYW1lLmluZGV4T2YoXCIuXCIpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtmaWVsZC5uYW1lXSA9IHRoaXMuZ2V0UHJvcCh2YWx1ZSwgZmllbGQubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5uYW1lID09PSBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbZmllbGQubmFtZV0gPSB0aGlzLmxvYWRMYWJlbEZyb21FbnVtKHZhbHVlW2ZpZWxkLm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW2ZpZWxkLm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiIC0gXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IG9wdGlvbnMuZmlsdGVyKChvcHRpb246IE9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBsYWJlbFZhbHVlKVswXS5sYWJlbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmxpc3RfZ3JpZF9ib29sZWFuX3RydWVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5saXN0X2dyaWRfYm9vbGVhbl9mYWxzZVwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geyBpZDogbmFtZSwgbGFiZWw6IGAke2xhYmVsfTogJHtsYWJlbFZhbHVlfWAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZmlsdGVyRmllbGRzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gISFmaWx0ZXJEYXRhW25hbWVdKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlLCBtdWx0aXBsZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBcImVtcGxveWVlU2l0dWF0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFNpdHVhdGlvbkZpbHRlckluSGlzdG9yaWNzKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5FbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVudW1RdWVyeShuYW1lLCB2YWx1ZSwgbXVsdGlwbGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkxvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWUuaWR9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGZpbHRlclF1ZXJ5ID0gZmlsdGVyUXVlcnlcbiAgICAgICAgICAgIC5yZXBsYWNlKCdlbXBsb3llciBlcScsICdlbXBsb3llZS5lbXBsb3llciBlcScpXG4gICAgICAgICAgICAucmVwbGFjZSgnY29tcGFueUJyYW5jaCBlcScsICdlbXBsb3llZS5lbXBsb3llZVNuYXBzaG90LmNvbXBhbnlCcmFuY2ggZXEnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ2NvbnRyYWN0VHlwZSBlcScsICdlbXBsb3llZS5lbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZSBlcScpXG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IHRoaXMuZ3JpZENvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGQpO1xuXG4gICAgICAgIGlmICghc29ydCkge1xuICAgICAgICAgICAgc29ydCA9IFt7IGZpZWxkOiBcImxhc3RNb2RpZmllZERhdGVcIiwgb3JkZXI6IC0xIH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uSGlzdG9yeVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc2l6ZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID49IDUwMCAmJiBlcnIuc3RhdHVzIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlckVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgobGlzdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWREYXRhID0gbGlzdC5jb250ZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IGxpc3QudG90YWxFbGVtZW50cztcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZlckVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRHcmlkKGxpc3RQYXJhbXM/OiBMaXN0UGFyYW1zKSB7XG4gICAgICAgIGlmIChsaXN0UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5saXN0UGFyYW1zIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgcGFnZTogMCwgc29ydDogW10gfTtcbiAgICAgICAgdGhpcy50YWJsZS5yZXNldCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVBbGxGb3JtRmllbGRzKGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHMoY29udHJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTb3J0RmllbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNvcnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhZ2VTaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb3dJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMucGFnZSAqIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc2l6ZTtcbiAgICB9XG5cbiAgICAvKntDQTpDTEFTU19NRVRIT0RTOlNUQVJUfSovXG4gICAgcHJpdmF0ZSBsb2FkTGFiZWxGcm9tRW51bSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kRW51bSA9IHRoaXMuY29udHJhY3RUeXBlT3B0aW9ucy5maWx0ZXIociA9PiByLnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICAgIHJldHVybiAoZm91bmRFbnVtICYmIGZvdW5kRW51bS5sZW5ndGggJiYgZm91bmRFbnVtWzBdLmxhYmVsKSB8fCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfY29udHJhY3QubGlzdF9ncmlkX2VtcHR5X2ZpZWxkXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFkZENvbGxlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgbmV3LWNvbGxlY3RpdmVgXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBmcmFnbWVudDogQ29sbGVjdGl2ZVByb2Nlc3NUeXBlLklOQ0xVREUgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlQ29sbGVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2BuZXctY29sbGVjdGl2ZWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIGZyYWdtZW50OiBDb2xsZWN0aXZlUHJvY2Vzc1R5cGUuRVhDTFVERSB9KTtcbiAgICB9XG4gICAgLyp7Q0E6Q0xBU1NfTUVUSE9EUzpFTkR9Ki9cbn1cblxuaW50ZXJmYWNlIExpc3RQYXJhbXMge1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgc2l6ZT86IG51bWJlcjtcbiAgICBzb3J0PzogU29ydE1ldGFbXTtcbiAgICBmaWx0ZXJEYXRhPzogYW55O1xufVxuXG4vKntDQTpGSUxFX0NPTlRFTlRTOlNUQVJUfSovXG4vKntDQTpGSUxFX0NPTlRFTlRTOkVORH0qL1xuIl19
1134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9oY20tY29udHJhY3QtZW1wbG95ZWUtaGlzdG9yeS8iLCJzb3VyY2VzIjpbImxpYi9hbm5vdGF0aW9uLWhpc3Rvcnkvdmlld3MvbGlzdC9hbm5vdGF0aW9uLWhpc3RvcnktbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFHdkYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDbkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNwSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU5RSwrQkFBK0I7QUFDL0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMseUVBQXlFO0FBQ2pHLDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsNEJBQTRCO0FBaUI1QixJQUFhLDhCQUE4QixHQUEzQyxNQUFhLDhCQUErQixTQUFRLDhCQUE4QjtJQTBGOUU7SUFDSSx5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ2YsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLHdCQUFrRCxFQUNsRCxtQkFBd0MsRUFDekMsU0FBMkIsRUFDM0IsY0FBOEIsRUFDN0IsY0FBOEIsRUFDOUIsV0FBd0IsRUFDeEIscUJBQTRDLEVBQzVDLHVCQUFnRCxFQUNoRCxlQUFnQyxFQUNoQyxxQkFBNEMsRUFDNUMsY0FBOEIsRUFDOUIsb0JBQW9DLEVBQ3BDLHFCQUE0QyxFQUNuQyxhQUF3QztRQUV6RCw4QkFBOEI7UUFDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBbEJULFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDekMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBZ0I7UUFDcEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUNuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUEzR3RELG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBQ3pCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBRXZCLHNCQUFpQixHQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBU2hGLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM3QixpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUM1QixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUt0QixzQ0FBaUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCx3Q0FBbUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2RCxnQ0FBMkIsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUNsSCxrQ0FBNkIsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUVwSCxtQ0FBOEIsR0FBRyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzRCxxQ0FBZ0MsR0FBRyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUU3RCwrQkFBMEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRCxpQ0FBNEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVwRCxxQ0FBZ0MsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCx1Q0FBa0MsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQWlCakUsK0JBQStCO1FBQ3hCLHdCQUFtQixHQUF1QztZQUM3RDtnQkFDSSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0VBQWdFLENBQUM7Z0JBQy9GLEtBQUssRUFBRSxZQUFZLENBQUMsUUFBUTthQUMvQjtZQUNEO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnRUFBZ0UsQ0FBQztnQkFDL0YsS0FBSyxFQUFFLFlBQVksQ0FBQyxRQUFRO2FBQy9CO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtEQUErRCxDQUFDO2dCQUM5RixLQUFLLEVBQUUsWUFBWSxDQUFDLE9BQU87YUFDOUI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUM7Z0JBQ2hHLEtBQUssRUFBRSxZQUFZLENBQUMsU0FBUzthQUNoQztZQUNEO2dCQUNJLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtRUFBbUUsQ0FBQztnQkFDbEcsS0FBSyxFQUFFLFlBQVksQ0FBQyxXQUFXO2FBQ2xDO1NBQ0osQ0FBQztRQUNGLDZCQUE2QjtRQUVyQiw4Q0FBeUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzFELHlDQUFvQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsMkNBQXNDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN2RCxzQ0FBaUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWxELHVDQUFrQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkQsa0NBQTZCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5Qyw2Q0FBd0MsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pELHdDQUFtQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsc0JBQWlCLEdBQWUsRUFBRSxDQUFDO1FBd0J0Qyw0QkFBNEI7SUFDaEMsQ0FBQztJQUVNLFFBQVE7UUFDWCw0QkFBNEI7UUFDNUIsMEJBQTBCO1FBRTFCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUzRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLGFBQWEsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELFlBQVksRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFFM0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQiwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUN2QjtnQkFDSSxLQUFLLEVBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaURBQWlELENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTthQUNwSCxDQUNKLENBQUE7U0FDSjtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDdkI7Z0JBQ0ksS0FBSyxFQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG9EQUFvRCxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTthQUNySCxDQUNSLENBQUE7U0FDSjtRQUNELHdCQUF3QjtJQUM1QixDQUFDO0lBRU0sV0FBVztRQUNkLCtCQUErQjtRQUMvQiw2QkFBNkI7UUFFN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTlCLDZCQUE2QjtRQUM3QiwyQkFBMkI7SUFDL0IsQ0FBQztJQUVNLFVBQVU7UUFDYixnQ0FBZ0M7UUFDaEMsOEJBQThCO1FBRTlCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2IsR0FBRyxFQUFFO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ2pCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxFQUNELENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDbEMsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksTUFBTSxDQUNOLGFBQWEsRUFDYixHQUFHLEVBQUU7WUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNuQjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ2xDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2IsR0FBRyxFQUFFO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxFQUNELENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDbEMsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksTUFBTSxDQUNOLGFBQWEsRUFDYixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxFQUNELENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDbEMsQ0FDSixDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksTUFBTSxDQUNOLGFBQWEsRUFDYixHQUFHLEVBQUU7WUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLEVBQ0QsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUNsQyxDQUNKLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsNEJBQTRCO0lBQ2hDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFTO1FBQzlCLHlDQUF5QztRQUN6Qyx1Q0FBdUM7UUFFdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFdEMsdUNBQXVDO1FBQ3ZDLHFDQUFxQztJQUN6QyxDQUFDO0lBRUQsNkdBQTZHO0lBQ3JHLFFBQVEsQ0FBQyxNQUFXO1FBQ3hCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVNLFFBQVE7UUFDWCw4QkFBOEI7UUFDOUIsNEJBQTRCO1FBRTVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzNEO2FBQU07WUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDekY7UUFFRCw0QkFBNEI7UUFDNUIsMEJBQTBCO0lBQzlCLENBQUM7SUFFTSxPQUFPO1FBQ1YsNkJBQTZCO1FBQzdCLDJCQUEyQjtRQUUzQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTFFLDJCQUEyQjtRQUMzQix5QkFBeUI7SUFDN0IsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFhO1FBQzlCLG9DQUFvQztRQUNwQyxrQ0FBa0M7UUFFbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUUxRixrQ0FBa0M7UUFDbEMsZ0NBQWdDO0lBQ3BDLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBb0I7UUFDcEMsbUNBQW1DO1FBQ25DLGlDQUFpQztRQUVqQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFFakMsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLHlDQUF5QyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2hIO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLGlDQUFpQztRQUNqQywrQkFBK0I7SUFDbkMsQ0FBQztJQUVNLEtBQUs7UUFDUiwyQkFBMkI7UUFDM0IseUJBQXlCO1FBRXpCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFMUQseUJBQXlCO1FBQ3pCLHVCQUF1QjtJQUMzQixDQUFDO0lBRU0sTUFBTTtRQUNULDRCQUE0QjtRQUM1QiwwQkFBMEI7UUFFMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLDBCQUEwQjtRQUMxQix3QkFBd0I7SUFDNUIsQ0FBQztJQUVNLFFBQVE7UUFDWCw4QkFBOEI7UUFDOUIsNEJBQTRCO1FBRTVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHFFQUFxRSxDQUFDO1lBQ3RHLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtRUFBbUUsQ0FBQztZQUNuRyxNQUFNLEVBQUUsR0FBRyxFQUFFO2dCQUNULElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDeEcsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFFBQVEsQ0FBQyxHQUFHLEVBQUU7b0JBQ1YscUNBQXFDO29CQUNyQyxtQ0FBbUM7b0JBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2pCLHdDQUF3QztvQkFDeEMsc0NBQXNDO2dCQUMxQyxDQUFDLENBQUMsQ0FDTDtxQkFDQSxTQUFTLENBQ04sR0FBRyxFQUFFO29CQUNELGtDQUFrQztvQkFDbEMsZ0NBQWdDO29CQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQzt3QkFDcEIsUUFBUSxFQUFFLFNBQVM7d0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrREFBK0QsQ0FBQzt3QkFDaEcsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlFQUFpRSxDQUFDO3FCQUNwRyxDQUFDLENBQUM7b0JBQ0gscUNBQXFDO29CQUNyQyxtQ0FBbUM7Z0JBQ3ZDLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtvQkFDSixrQ0FBa0M7b0JBQ2xDLGdDQUFnQztnQkFDcEMsQ0FBQyxDQUNKLENBQUM7WUFDVixDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBRUgsNEJBQTRCO1FBQzVCLDBCQUEwQjtJQUM5QixDQUFDO0lBRU0sVUFBVSxDQUFDLFNBQWlCO1FBQy9CLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxRQUFlLEVBQUUsYUFBb0I7UUFDdEQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxpQ0FDNUIsSUFBSSxLQUNQLEtBQUssRUFBRSxhQUFhO2lCQUNmLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDVCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzNDO2dCQUNELElBQUksS0FBSyxLQUFLLHFDQUFxQyxFQUFFO29CQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUNsQixDQUFDLENBQUM7SUFDUixDQUFDO0lBRU0sNkJBQTZCLENBQUMsS0FBYTtRQUM5QywyQ0FBMkM7UUFDM0MseUNBQXlDO1FBRXpDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRTthQUNuRCxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2hELEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUMvRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxxQkFBcUI7YUFDckIsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO2FBQ25HLFNBQVMsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTNGLHlDQUF5QztRQUN6Qyx1Q0FBdUM7SUFDM0MsQ0FBQztJQUVNLDZCQUE2QixDQUFDLEtBQVU7UUFDM0MsMkNBQTJDO1FBQzNDLHlDQUF5QztRQUV6QyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBRTthQUNuRCxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDbkUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE9BQU8sR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7YUFDL0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7YUFDN0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDcEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzthQUNuRDtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sb0JBQW9CLElBQUksYUFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQy9FO2lCQUFNO2dCQUNILE9BQU8sR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7YUFDbEM7UUFDTCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMscUJBQXFCO2FBQ3JCLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsaUNBQWlDLENBQUM7WUFDbkYsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ25DLENBQUMsQ0FBQyxDQUNOO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFcEYseUNBQXlDO1FBQ3pDLHVDQUF1QztJQUMzQyxDQUFDO0lBRU0sMEJBQTBCLENBQUMsS0FBYTtRQUMzQyxrREFBa0Q7UUFDbEQsZ0RBQWdEO1FBRWhELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRTthQUNoRCxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2hELEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUMvRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxlQUFlO2FBQ2YsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO2FBQ2hHLFNBQVMsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXhGLGdEQUFnRDtRQUNoRCw4Q0FBOEM7SUFDbEQsQ0FBQztJQUVNLDBCQUEwQixDQUFDLEtBQVU7UUFDeEMsa0RBQWtEO1FBQ2xELGdEQUFnRDtRQUVoRCxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRTthQUNoRCxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDbkUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE9BQU8sR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7YUFDL0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7YUFDN0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDcEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzthQUNuRDtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sb0JBQW9CLElBQUksYUFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQy9FO2lCQUFNO2dCQUNILE9BQU8sR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7YUFDbEM7UUFDTCxDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsZUFBZTthQUNmLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUM7WUFDaEYsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ25DLENBQUMsQ0FBQyxDQUNOO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakYsZ0RBQWdEO1FBQ2hELDhDQUE4QztJQUNsRCxDQUFDO0lBRU0sT0FBTyxDQUFDLEdBQVEsRUFBRSxJQUFTO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFXLEVBQUUsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVPLGNBQWM7UUFDbEIsTUFBTSxXQUFXLEdBQUc7WUFDaEIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1RUFBdUUsQ0FBQyxFQUFFO1lBQy9ILEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRkFBaUYsQ0FBQyxFQUFFO1lBQ25KLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRkFBaUYsQ0FBQyxFQUFFO1lBQ25KO2dCQUNJLEtBQUssRUFBRSxZQUFZO2dCQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdUVBQXVFLENBQUM7YUFDMUc7U0FDSixDQUFDO1FBRUYsK0JBQStCO1FBQy9CLDZCQUE2QjtRQUU3QixPQUFPLDRCQUE0QixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRU8sZUFBZTtRQUNuQixNQUFNLFlBQVksR0FBRztZQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFO1lBQ3pDLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxVQUFVO2dCQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsa0RBQWtELENBQUM7Z0JBQ2pGLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTtnQkFDdEIsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQyxZQUFZLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrREFBK0QsQ0FBQztnQkFDcEcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ2pHLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO2dCQUN0RixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0NBQStDLENBQUM7Z0JBQ25GLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDO2dCQUNyRixPQUFPLEVBQUUsSUFBSTtnQkFDYixxQkFBcUIsRUFBRSxJQUFJLENBQUMsa0NBQWtDO2dCQUM5RCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsNkJBQTZCO2dCQUNwRCxlQUFlLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7Z0JBQ3RFLGVBQWUsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQztnQkFDbkUsa0JBQWtCLEVBQUUsT0FBTztnQkFDM0IsWUFBWSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtnQkFDM0MsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFO2FBQ3RELENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsZUFBZTtnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlFQUFpRSxDQUFDO2dCQUNoRyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw4RUFBOEUsQ0FBQztnQkFDbkgsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ2pHLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO2dCQUN0RixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0NBQStDLENBQUM7Z0JBQ25GLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsV0FBVyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUMzQyxZQUFZLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsT0FBTyxFQUFFLElBQUk7Z0JBQ2IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHdDQUF3QztnQkFDcEUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLG1DQUFtQztnQkFDMUQsZUFBZSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDO2dCQUM1RSxlQUFlLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pFLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2pELGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTthQUM1RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3RkFBd0YsQ0FBQztnQkFDdkgsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0dBQW9HLENBQUM7Z0JBQ3pJLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUNqQyxRQUFRLEVBQUUsS0FBSzthQUNsQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDRFQUE0RSxDQUFDO2dCQUMzRyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5RkFBeUYsQ0FBQztnQkFDOUgsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ2pHLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO2dCQUN0RixXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLFlBQVksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDNUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDO2dCQUNuRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsT0FBTyxFQUFFLElBQUk7Z0JBQ2IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHlDQUF5QztnQkFDckUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLG9DQUFvQztnQkFDM0QsZUFBZSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDO2dCQUM3RSxlQUFlLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUM7Z0JBQzFFLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsNkJBQTZCLEVBQUU7Z0JBQ2xELGdCQUFnQixFQUFFLElBQUksQ0FBQyxpQ0FBaUMsRUFBRTthQUM3RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDREQUE0RCxDQUFDO2dCQUMzRixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3BCLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDL0IsNERBQTRELENBQy9EO2dCQUNELE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxRQUFRO2dCQUNuQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUM3RCxRQUFRLEVBQUUsS0FBSzthQUNsQixDQUFDO1NBQ0wsQ0FBQztRQUVGLGdDQUFnQztRQUNoQyw4QkFBOEI7UUFFOUIsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVhLHlCQUF5QixDQUFDLElBQWU7O1lBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBRTlGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakYsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUMxQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBRS9CLG9DQUFvQztZQUNwQyxrQ0FBa0M7UUFDdEMsQ0FBQztLQUFBO0lBRWEsbUJBQW1COztZQUM3QixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUU3RyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNwQyxJQUFJLENBQUMsaUJBQWlCLG1DQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBSyxTQUFTLENBQUUsQ0FBQzthQUN4RTtZQUVELG9DQUFvQztZQUNwQyxrQ0FBa0M7UUFDdEMsQ0FBQztLQUFBO0lBRU8sWUFBWSxDQUFDLElBQVksRUFBRSxLQUFVLEVBQUUsUUFBaUI7UUFDNUQsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLFFBQVEsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLENBQUM7SUFDN0gsQ0FBQztJQUVPLDZCQUE2QjtRQUNqQyxNQUFNLFlBQVksR0FBRztZQUNqQixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsOERBQThELENBQUM7Z0JBQzdGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDO2dCQUM3RixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDekIsQ0FBQztTQUNMLENBQUM7UUFFRixxQ0FBcUM7UUFDckMsbUNBQW1DO1FBRW5DLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxpQ0FBaUM7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRztZQUNyQixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsOERBQThELENBQUM7Z0JBQzdGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDO2dCQUM3RixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDekIsQ0FBQztTQUNMLENBQUM7UUFFRiwwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBRXhDLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixNQUFNLFlBQVksR0FBRztZQUNqQixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEVBQTBFLENBQUM7Z0JBQ3pHLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxDQUFDO2dCQUN0RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxlQUFlO2dCQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUM7Z0JBQ2hHLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdGQUF3RixDQUFDO2dCQUN2SCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CO2FBQ3BDLENBQUM7U0FDTCxDQUFDO1FBRUYseUNBQXlDO1FBQ3pDLHVDQUF1QztRQUV2QyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sMkJBQTJCO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUc7WUFDckIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDBFQUEwRSxDQUFDO2dCQUN6RyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsQ0FBQztnQkFDdEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsZUFBZTtnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlFQUFpRSxDQUFDO2dCQUNoRyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDekIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3RkFBd0YsQ0FBQztnQkFDdkgsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjthQUNwQyxDQUFDO1NBQ0wsQ0FBQztRQUVGLDhDQUE4QztRQUM5Qyw0Q0FBNEM7UUFFNUMsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sMEJBQTBCO1FBQzlCLE1BQU0sWUFBWSxHQUFHO1lBQ2pCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywwRUFBMEUsQ0FBQztnQkFDekcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ3RGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0ZBQXdGLENBQUM7Z0JBQ3ZILElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztTQUNMLENBQUM7UUFFRiw0Q0FBNEM7UUFDNUMsMENBQTBDO1FBRTFDLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTyw4QkFBOEI7UUFDbEMsTUFBTSxnQkFBZ0IsR0FBRztZQUNyQixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsMEVBQTBFLENBQUM7Z0JBQ3pHLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxDQUFDO2dCQUN0RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxlQUFlO2dCQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUM7Z0JBQ2hHLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdGQUF3RixDQUFDO2dCQUN2SCxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CO2FBQ3BDLENBQUM7U0FDTCxDQUFDO1FBRUYsaURBQWlEO1FBQ2pELCtDQUErQztRQUUvQyxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFhO1FBQ3ZDLCtDQUErQztRQUMvQyw2Q0FBNkM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXhGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRTthQUM1QyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2hELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7aUJBQ3RELElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2lCQUN4RixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztpQkFDdEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztpQkFDaEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxvQkFBb0IsSUFBSSxhQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7O2dCQUMxRyxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO1FBQ3hDLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGNBQWM7YUFDZCxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO2FBQzVGLFNBQVMsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXBGLDZDQUE2QztRQUM3QywyQ0FBMkM7SUFDL0MsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEtBQVU7UUFDcEMsK0NBQStDO1FBQy9DLDZDQUE2QztRQUM3QyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzNCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRTthQUM1QyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDN0UsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7aUJBQ3RELElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2lCQUN4RixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztpQkFDdEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztpQkFDaEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQztpQkFDM0QsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxvQkFBb0IsSUFBSSxhQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7O2dCQUMxRyxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO1FBQ3hDLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLGNBQWM7YUFDZCxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDO1lBQzVFLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUksQ0FBQyxDQUFDLENBQ047YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUU3RSw2Q0FBNkM7UUFDN0MsMkNBQTJDO0lBQy9DLENBQUM7SUFFTSw0QkFBNEIsQ0FBQyxLQUFhO1FBQzdDLCtDQUErQztRQUMvQyw2Q0FBNkM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlGLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRTthQUNoRCxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ2hELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7aUJBQ3RELElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2lCQUN4RixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztpQkFDdEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztpQkFDaEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxvQkFBb0IsSUFBSSxhQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7O2dCQUMxRyxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO1FBQ3hDLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1RCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0QsV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLFFBQVEsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztTQUNyRjtRQUVELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLG9CQUFvQjthQUNwQixJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDO2FBQ2xHLFNBQVMsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTFGLDZDQUE2QztRQUM3QywyQ0FBMkM7SUFDL0MsQ0FBQztJQUVNLDRCQUE0QixDQUFDLEtBQVU7UUFDMUMsK0NBQStDO1FBQy9DLDZDQUE2QztRQUM3QyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRTthQUNoRCxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDN0UsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO2dCQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7aUJBQ3RELElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQU8sR0FBRyxJQUFJLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO2lCQUN4RixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFPLEdBQUcsSUFBSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztpQkFDdEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztpQkFDaEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsQ0FBQztpQkFDM0QsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxvQkFBb0IsSUFBSSxhQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7O2dCQUMxRyxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO1FBQ3hDLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1RCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0QsV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLFFBQVEsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztTQUNyRjtRQUVELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLG9CQUFvQjthQUNwQixJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdDQUFnQyxDQUFDO1lBQ2xGLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUksQ0FBQyxDQUFDLENBQ047YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuRiw2Q0FBNkM7UUFDN0MsMkNBQTJDO0lBQy9DLENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsTUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHlEQUF5RCxDQUFDO2dCQUN4RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5REFBeUQsQ0FBQztnQkFDeEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYseUNBQXlDO1FBQ3pDLHVDQUF1QztRQUV2QyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sMEJBQTBCO1FBQzlCLE1BQU0sZ0JBQWdCLEdBQUc7WUFDckIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHlEQUF5RCxDQUFDO2dCQUN4RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5REFBeUQsQ0FBQztnQkFDeEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYsOENBQThDO1FBQzlDLDRDQUE0QztRQUU1QyxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTyw0QkFBNEI7UUFDaEMsTUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDZEQUE2RCxDQUFDO2dCQUM1RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2REFBNkQsQ0FBQztnQkFDNUYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYseUNBQXlDO1FBQ3pDLHVDQUF1QztRQUV2QyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sZ0NBQWdDO1FBQ3BDLE1BQU0sZ0JBQWdCLEdBQUc7WUFDckIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDZEQUE2RCxDQUFDO2dCQUM1RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2REFBNkQsQ0FBQztnQkFDNUYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYsOENBQThDO1FBQzlDLDRDQUE0QztRQUU1QyxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTyxVQUFVLENBQUMsYUFBeUIsRUFBRTtRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLG1DQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBSyxVQUFVLENBQUUsQ0FBQztRQUN0RSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDMUQsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUV0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZO2FBQ2hDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNuRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQU8sRUFBRSxFQUFFO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFdkIsSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDekIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDcEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDbEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUNoRyxVQUFVLEdBQUcsbUJBQW1CO3FCQUMzQixHQUFHLENBQUMsQ0FBQyxLQUFnQixFQUFFLEVBQUU7b0JBQ3RCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUM3QixLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDdkQ7b0JBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHFDQUFxQyxFQUFFO3dCQUN0RCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7cUJBQ2pFO29CQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwQjtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDekY7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDbkMsVUFBVSxHQUFHLEtBQUs7b0JBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdFQUFnRSxDQUFDO29CQUMxRixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUMsQ0FBQzthQUNuRztZQUVELE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssS0FBSyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVk7YUFDOUIsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUM5QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE9BQU8sR0FBRyxJQUFJLE9BQU8sS0FBSyxFQUFFLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxJQUFJLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3BDLE9BQU8sNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0M7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7YUFDL0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7YUFDN0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDcEMsT0FBTyxHQUFHLElBQUksUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQzthQUNuRDtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUNsQyxPQUFPLG9CQUFvQixJQUFJLGFBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUMvRTtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUNuRDtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUNsQyxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQzthQUNyQztpQkFBTTtnQkFDSCxPQUFPLEdBQUcsSUFBSSxRQUFRLEtBQUssR0FBRyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLFdBQVcsR0FBRyxXQUFXO2FBQ3BCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsc0JBQXNCLENBQUM7YUFDOUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLDRDQUE0QyxDQUFDO2FBQ3pFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFBO1FBRWxGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxDQUFDLHdCQUF3QjthQUN4QixJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDdEQsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzdCLFVBQVUsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQzNCO1lBQ0QsTUFBTSxHQUFHLENBQUM7UUFDZCxDQUFDLENBQUMsRUFDRixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxVQUF1QjtRQUNwQyxJQUFJLFVBQVUsRUFBRTtZQUNaLElBQUksQ0FBQyxpQkFBaUIsbUNBQVEsSUFBSSxDQUFDLGlCQUFpQixHQUFLLFVBQVUsQ0FBRSxDQUFDO1NBQ3pFO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixtQ0FBUSxJQUFJLENBQUMsaUJBQWlCLEtBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFFLENBQUM7UUFDMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8scUJBQXFCLENBQUMsU0FBb0I7UUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFO2dCQUNoQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7YUFDM0M7aUJBQU0sSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFO2dCQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDckUsQ0FBQztJQUVELDRCQUE0QjtJQUNwQixpQkFBaUIsQ0FBQyxLQUFhO1FBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUNySixDQUFDO0lBRU0sZUFBZTtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILENBQUM7Q0FFSixDQUFBOztZQTluQ3VCLE1BQU07WUFDUCxjQUFjO1lBQ0ssd0JBQXdCO1lBQzdCLG1CQUFtQjtZQUM5QixnQkFBZ0I7WUFDWCxjQUFjO1lBQ2IsY0FBYztZQUNqQixXQUFXO1lBQ0QscUJBQXFCO1lBQ25CLHVCQUF1QjtZQUMvQixlQUFlO1lBQ1QscUJBQXFCO1lBQzVCLGNBQWM7WUFDUixjQUFjO1lBQ2IscUJBQXFCO1lBQ3BCLHlCQUF5Qjs7QUF4RjdEO0lBREMsU0FBUyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDOzZEQUNuQztBQWtCcEI7SUFEQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7c0VBQ1A7QUFHeEM7SUFEQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7MEVBQ1A7QUFHNUM7SUFEQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7MEVBQ1A7QUFHNUM7SUFEQyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7d0VBQ1A7QUFHMUM7SUFEQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7c0VBQ1A7QUFsRC9CLDhCQUE4QjtJQWYxQyxTQUFTLENBQUM7UUFDUCxxMlpBQXVEO1FBS3ZELFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsU0FBUyxFQUFFO1lBQ1AsbUJBQW1CO1NBR3RCO0tBR0osQ0FBQztHQUNXLDhCQUE4QixDQTJ0QzFDO1NBM3RDWSw4QkFBOEI7QUFvdUMzQyw0QkFBNEI7QUFDNUIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBJVG9rZW4sIE9wdGlvbiB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgSG90a2V5LCBIb3RrZXlzU2VydmljZSB9IGZyb20gJ2FuZ3VsYXIyLWhvdGtleXMnO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTGF6eUxvYWRFdmVudCwgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlLCBTb3J0TWV0YSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRTA3MEVtcFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2UtMDcwLWVtcC9lLTA3MC1lbXAuc2VydmljZSc7XG5pbXBvcnQgeyBFMDcwRmlsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW50aXRpZXMvZS0wNzAtZmlsL2UtMDcwLWZpbC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgQW5ub3RhdGlvbkhpc3RvcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2Fubm90YXRpb24taGlzdG9yeS9hbm5vdGF0aW9uLWhpc3RvcnknO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9hbm5vdGF0aW9uLWhpc3RvcnkvYW5ub3RhdGlvbi1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblR5cGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9hbm5vdGF0aW9uLXR5cGUvYW5ub3RhdGlvbi10eXBlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1wbG95ZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9lbXBsb3llZS9lbXBsb3llZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbGxlY3RpdmVQcm9jZXNzVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL2VudW1zL2NvbGxlY3RpdmUtcHJvY2Vzcy10eXBlXCI7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW1zL2NvbnRyYWN0LXR5cGUnO1xuaW1wb3J0IHsgRmlsdGVyc1N0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3N0b3JhZ2UvZmlsdGVycy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc3RvcmFnZS9wYWdpbmF0b3Itc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdldERlZmF1bHRIaXN0b3J5R3JpZENvbHVtbnMsIGdldFJlY29yZExhYmVsLCBnZXRTaXR1YXRpb25GaWx0ZXJJbkhpc3RvcmljcywgaXNWYWxpZEZpbHRlciwgbWVyZ2VVbmlxdWUsIHNpdHVhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVyU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBCYXNlQ29sbGVjdGl2ZUhpc3RvcnlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYXNlLWNvbGxlY3RpdmUtaGlzdG9yeS9iYXNlLWNvbGxlY3RpdmUtaGlzdG9yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wbG95ZWVMb29rdXBTZXJ2aWNlLCBFbnRpdHlMb29rdXBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHNlbmlvci1nZXN0YW8tcGVzc29hcy9oY20tZW50aXR5LWxvb2t1cHMnO1xuaW1wb3J0IHsgU2l0dWF0aW9uRW1wbG95ZWUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW1zL3NpdHVhdGlvbi1lbXBsb3llZSc7XG5cbi8qe0NBOkVYVEVSTkFMX0lNUE9SVFM6U1RBUlR9Ki9cbmNvbnN0IG1vbWVudCA9IG1vbWVudF87IC8vIEBIQUNLIE5lY2Vzc2FyeSBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy82NzBcbi8qe0NBOkVYVEVSTkFMX0lNUE9SVFM6RU5EfSovXG5cbi8qe0NBOlBST0pFQ1RfSU1QT1JUUzpTVEFSVH0qL1xuLyp7Q0E6UFJPSkVDVF9JTVBPUlRTOkVORH0qL1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2Fubm90YXRpb24taGlzdG9yeS1saXN0LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXG4gICAgICAgIC8qe0NBOkNPTVBPTkVOVF9TVFlMRV9VUkxTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkNPTVBPTkVOVF9TVFlMRV9VUkxTOkVORH0qL1xuICAgIF0sXG4gICAgc2VsZWN0b3I6IFwiZm5kLWFubm90YXRpb24taGlzdG9yeVwiLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICAvKntDQTpDT01QT05FTlRfUFJPVklERVJTOlNUQVJUfVxuICAgICAgICAvKntDQTpDT01QT05FTlRfUFJPVklERVJTOkVORH0qL1xuICAgIF0sXG4gICAgLyp7Q0E6Q09NUE9ORU5UX0NPTkZJRzpTVEFSVH0qL1xuICAgIC8qe0NBOkNPTVBPTkVOVF9DT05GSUc6RU5EfSovXG59KVxuZXhwb3J0IGNsYXNzIEFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudCBleHRlbmRzIEJhc2VDb2xsZWN0aXZlSGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IC8qe0NBOkNMQVNTX0lOVEVSRkFDRVM6U1RBUlR9Ki8gLyp7Q0E6Q0xBU1NfSU5URVJGQUNFUzpFTkR9Ki8ge1xuICAgIHB1YmxpYyBhbGxQZXJtaXNzaW9uczogYW55ID0ge307XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgbG9jYWxlQ29uZmlnOiBhbnkgPSB7fTtcblxuICAgIHB1YmxpYyBjdXJyZW50TGlzdFBhcmFtczogTGlzdFBhcmFtcyA9IHsgcGFnZTogMCwgc2l6ZTogMTAsIHNvcnQ6IFtdLCBmaWx0ZXJEYXRhOiB7fSB9O1xuICAgIHB1YmxpYyBncmlkRGF0YTogQW5ub3RhdGlvbkhpc3RvcnlbXTtcbiAgICBwdWJsaWMgZ3JpZENvbHVtbnM6IGFueVtdO1xuICAgIHB1YmxpYyBzaG93TG9hZGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyB0b3RhbFJlY29yZHM6IG51bWJlcjtcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBBbm5vdGF0aW9uSGlzdG9yeVtdO1xuXG4gICAgcHVibGljIGZpbHRlckZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZpbHRlckZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBmaWx0ZXJzUGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xuICAgIHB1YmxpYyBzZWFyY2hUb2tlbnM6IElUb2tlbltdID0gW107XG4gICAgcHVibGljIHNlcnZlckVycm9yID0gZmFsc2U7XG4gICAgcHVibGljIGZpbHRlcnNMb2FkZWQgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGQoXCJhbm5vdGF0aW9uSGlzdG9yeVRhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyB0YWJsZTogVGFibGU7XG5cbiAgICBwdWJsaWMgYW5ub3RhdGlvblR5cGVMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kZVwiLCBcIm5hbWVcIl07XG4gICAgcHVibGljIGFubm90YXRpb25UeXBlQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiY29kZVwiLCBcIm5hbWVcIl07XG5cbiAgICBwdWJsaWMgZW1wbG95ZWVMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiZW1wbG95ZXIuY29kRW1wXCIsIFwiY29kZVwiLCBcInBlcnNvbi5ub21QZXNcIiwgXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiXTtcbiAgICBwdWJsaWMgZW1wbG95ZWVBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJlbXBsb3llci5jb2RFbXBcIiwgXCJjb2RlXCIsIFwicGVyc29uLm5vbVBlc1wiLCBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCJdO1xuXG4gICAgcHVibGljIHJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGVcIiwgXCJwZXJzb24ubm9tUGVzXCJdO1xuICAgIHB1YmxpYyByZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImNvZGVcIiwgXCJwZXJzb24ubm9tUGVzXCJdO1xuXG4gICAgcHVibGljIGNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kRW1wXCIsIFwibm9tRW1wXCJdO1xuICAgIHB1YmxpYyBjb21wYW55QWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiY29kRW1wXCIsIFwibm9tRW1wXCJdO1xuXG4gICAgcHVibGljIGNvbXBhbnlCcmFuY2hMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kRmlsXCIsIFwibm9tRmlsXCJdO1xuICAgIHB1YmxpYyBjb21wYW55QnJhbmNoQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiY29kRmlsXCIsIFwibm9tRmlsXCJdO1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbVRlbXBsYXRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21GaWx0ZXJGaWVsZHNcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGN1c3RvbUZpbHRlckZpZWxkczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21HcmlkQ29sZ3JvdXBcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGN1c3RvbUdyaWRDb2xncm91cDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21HcmlkSGVhZGVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21HcmlkSGVhZGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbUdyaWRCb2R5XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21HcmlkQm9keTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qe0NBOkNMQVNTX0FUVFJJQlVURVM6U1RBUlR9Ki9cbiAgICBwdWJsaWMgY29udHJhY3RUeXBlT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV9lbXBsb3llZVwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuRU1QTE9ZRUVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV9kaXJlY3RvclwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuRElSRUNUT1JcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV90cmFpbmVlXCIpLFxuICAgICAgICAgICAgdmFsdWU6IENvbnRyYWN0VHlwZS5UUkFJTkVFXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbnRyYWN0X3R5cGVfYXByZW50aWNlXCIpLFxuICAgICAgICAgICAgdmFsdWU6IENvbnRyYWN0VHlwZS5BUFJFTlRJQ0VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV90aGlyZF9wYXJ0eVwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuVEhJUkRfUEFSVFlcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIC8qe0NBOkNMQVNTX0FUVFJJQlVURVM6RU5EfSovXG5cbiAgICBwcml2YXRlIGFubm90YXRpb25UeXBlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGFubm90YXRpb25UeXBlTG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIHJlc3BvbnNpYmxlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIHJlc3BvbnNpYmxlTG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIGNvbXBhbnlMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgY29tcGFueUxvb2t1cFNlYXJjaE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgY29tcGFueUJyYW5jaExvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBjb21wYW55QnJhbmNoTG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwdWJsaWMgY29sbGVjdGl2ZUFjdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAvKntDQTpJTkpFQ1RJT05TOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOklOSkVDVElPTlM6RU5EfSovXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIGFubm90YXRpb25IaXN0b3J5U2VydmljZTogQW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaG90a2V5c1NlcnZpY2U6IEhvdGtleXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBmaWx0ZXJzU3RvcmFnZVNlcnZpY2U6IEZpbHRlcnNTdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwYWdpbmF0b3JTdG9yYWdlU2VydmljZTogUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZW1wbG95ZWVTZXJ2aWNlOiBFbXBsb3llZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYW5ub3RhdGlvblR5cGVTZXJ2aWNlOiBBbm5vdGF0aW9uVHlwZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tcGFueVNlcnZpY2U6IEUwNzBFbXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbXBhbnlCcmFuY2hTZXJ2aWNlOiBFMDcwRmlsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbXBsb3llZUxvb2t1cFNlcnZpY2U6IEVtcGxveWVlTG9va3VwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBFbnRpdHlMb29rdXBDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIC8qe0NBOkNPTlNUUlVDVE9SX0VORDpTVEFSVH0qL1xuICAgICAgICBzdXBlcih0cmFuc2xhdGUpO1xuICAgICAgICAvKntDQTpDT05TVFJVQ1RPUl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvKntDQTpPTl9JTklUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0lOSVRfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLm9uUm91dGVEYXRhQ2hhbmdlKGRhdGEpKTtcblxuICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZW1wbG95ZXI6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgY29tcGFueUJyYW5jaDogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBjb250cmFjdFR5cGU6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgZW1wbG95ZWU6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgYW5ub3RhdGlvblR5cGU6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgZW1wbG95ZWVTaXR1YXRpb246IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNldFN0b3JhZ2VQYWdpbmF0b3IoKTtcblxuICAgICAgICB0aGlzLnNldFN0b3JhZ2VGaWx0ZXJzSW50b0Zvcm0odGhpcy5maWx0ZXJGb3JtR3JvdXApO1xuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5nZXRHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdlbXBsb3llcicpLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdjb21wYW55QnJhbmNoJykuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0SG90a2V5cygpO1xuXG4gICAgICAgIC8qe0NBOk9OX0lOSVRfRU5EOlNUQVJUfSovXG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmluY2x1aXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGl2ZUFjdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdoY21fY29udHJhY3QuZW1wbG95bWVudF9jb250cmFjdC5hZGRfY29sbGVjdGl2ZScpLCBjb21tYW5kOiAoKSA9PiAgdGhpcy5vbkFkZENvbGxlY3RpdmUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5leGNsdWlyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3RpdmVBY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfY29udHJhY3QucmVtb3ZlX2NvbGxlY3RpdmUnKSwgY29tbWFuZDogKCkgPT4gdGhpcy5vblJlbW92ZUNvbGxlY3RpdmUoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgLyp7Q0E6T05fSU5JVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvKntDQTpPTl9ERVNUUk9ZX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0RFU1RST1lfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgLyp7Q0E6T05fREVTVFJPWV9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fREVTVFJPWV9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtlXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRWRpdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgICAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgICAgICAgICAgXCJhbHQrc2hpZnQreFwiLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLnBlcm1pc3Npb25zLmV4Y2x1aXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K25cIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmluY2x1aXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25BZGQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K2ZcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtsXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpTRVRfSE9US0VZU19FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgICAgICAvKntDQTpPTl9ST1VURV9EQVRBX0NIQU5HRV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ST1VURV9EQVRBX0NIQU5HRV9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLmFsbFBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMuYW5ub3RhdGlvbkhpc3Rvcnk7XG4gICAgICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG5cbiAgICAgICAgLyp7Q0E6T05fUk9VVEVfREFUQV9DSEFOR0VfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JPVVRFX0RBVEFfQ0hBTkdFX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYSBzZSBvIG9iamV0byBwb3NzdWkgdW0gdmFsb3IgcXVlIGZvaSBhbHRlcmFkbyBwYXJhIFwiXCIgKFN0cmluZyB2YXppYSkgYW8gaW52ZXMgZGUgbnVsbCBvdSB1bmRlZmluZWRcbiAgICBwcml2YXRlIGhhc0VtcHR5KHRhcmdldDogYW55KSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0YXJnZXQpLmZpbHRlcihrZXkgPT4gdGFyZ2V0W2tleV0gPT09IFwiXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VhcmNoKCkge1xuICAgICAgICAvKntDQTpPTl9TRUFSQ0hfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fU0VBUkNIX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0VtcHR5KGZpbHRlckRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnNQYW5lbENvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5maWx0ZXJGb3JtR3JvdXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1BhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1N0b3JhZ2VTZXJ2aWNlLnN0b3JlRmlsdGVycyhcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiLCBmaWx0ZXJEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qe0NBOk9OX1NFQVJDSF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fU0VBUkNIX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGVhcigpIHtcbiAgICAgICAgLyp7Q0E6T05fQ0xFQVJfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fQ0xFQVJfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAucmVzZXQoKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzU3RvcmFnZVNlcnZpY2UucmVtb3ZlRmlsdGVyKFwiQW5ub3RhdGlvbkhpc3RvcnlMaXN0Q29tcG9uZW50XCIpO1xuXG4gICAgICAgIC8qe0NBOk9OX0NMRUFSX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9DTEVBUl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlVG9rZW4odG9rZW46IElUb2tlbikge1xuICAgICAgICAvKntDQTpPTl9SRU1PVkVfVE9LRU5fU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVNT1ZFX1RPS0VOX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCh0b2tlbi5pZCkuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzU3RvcmFnZVNlcnZpY2UuY2xlYXJGaWx0ZXJWYWx1ZShcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiLCBmaWx0ZXJEYXRhKTtcblxuICAgICAgICAvKntDQTpPTl9SRU1PVkVfVE9LRU5fRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JFTU9WRV9UT0tFTl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uR3JpZENoYW5nZShldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9TVEFSVDpFTkR9Ki9cblxuICAgICAgICBjb25zdCBzaXplID0gZXZlbnQucm93cztcbiAgICAgICAgY29uc3QgcGFnZSA9IGV2ZW50LmZpcnN0IC8gc2l6ZTtcbiAgICAgICAgY29uc3Qgc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGE7XG5cbiAgICAgICAgaWYgKHNpemUgIT09IDEwIHx8IHBhZ2UgIT09IDAgfHwgc29ydD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JTdG9yYWdlU2VydmljZS5zdG9yZVBhZ2luYXRvcihcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFBhZ2luYXRvclwiLCB7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVHcmlkKHsgcGFnZSwgc2l6ZSwgc29ydCB9KTtcblxuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fR1JJRF9DSEFOR0VfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFkZCgpIHtcbiAgICAgICAgLyp7Q0E6T05fQUREX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0FERF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJuZXdcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcblxuICAgICAgICAvKntDQTpPTl9BRERfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0FERF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uRWRpdCgpIHtcbiAgICAgICAgLyp7Q0E6T05fRURJVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FRElUX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnNlbGVjdGlvblswXS5pZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcblxuICAgICAgICAvKntDQTpPTl9FRElUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FRElUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZWxldGUoKSB7XG4gICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ERUxFVEVfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5kZWxldGVfY29uZmlybWF0aW9uX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlX2NvbmZpcm1hdGlvbl90aXRsZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ya0pvaW4odGhpcy5zZWxlY3Rpb24ubWFwKGFubm90YXRpb25IaXN0b3J5ID0+IHRoaXMuYW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlLmRlbGV0ZShhbm5vdGF0aW9uSGlzdG9yeS5pZCkpKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9GSU5BTElaRV9UT1A6U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRklOQUxJWkVfVE9QOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRHcmlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX0ZJTkFMSVpFX0JPVFRPTTpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9GSU5BTElaRV9CT1RUT006RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX1NUQVJUX1RPUDpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9UT1A6RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlZF9tZXNzYWdlX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlZF9tZXNzYWdlX2NvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX1NUQVJUX0JPVFRPTTpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9CT1RUT006RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9FUlJPUl9UT1A6U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRVJST1JfVE9QOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyp7Q0E6T05fREVMRVRFX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ERUxFVEVfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c0lucHV0KGVsZW1lbnRJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtlbGVtZW50SWR9YCk7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFiZWxWYWx1ZShjb250ZW50czogYW55W10sIGRpc3BsYXlGaWVsZHM6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogZGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkXSA9IHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkID09PSBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bZmllbGRdID0gdGhpcy5sb2FkTGFiZWxGcm9tRW51bShpdGVtW2ZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIgLSBcIiksXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Bbm5vdGF0aW9uVHlwZUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICAvKntDQTpPTl9UWVBFX0xPT0tVUF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoZm9ybUZpZWxkID0+IGNyZWF0ZUZpbHRlclN0cmluZyhmb3JtRmllbGQsIHZhbHVlLCB7IHRleHRTZWFjaEVudW06IHRydWUgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gISFzKVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmFubm90YXRpb25UeXBlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5hbm5vdGF0aW9uVHlwZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvblR5cGVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGlzdDogYW55KSA9PiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmFubm90YXRpb25UeXBlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFubm90YXRpb25UeXBlU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX1RZUEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gISFmaWx0ZXJEYXRhW25hbWVdICYmIGZpbHRlckRhdGFbbmFtZV0gIT09IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5FbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmFubm90YXRpb25UeXBlQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uVHlwZVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGdyaWREYXRhOiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cFNlYXJjaE9ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVzcG9uc2libGVMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFJlc3BvbnNpYmxlU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoZm9ybUZpZWxkID0+IGNyZWF0ZUZpbHRlclN0cmluZyhmb3JtRmllbGQsIHZhbHVlLCB7IHRleHRTZWFjaEVudW06IHRydWUgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gISFzKVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5yZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZW1wbG95ZWVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGlzdDogYW55KSA9PiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5yZXNwb25zaWJsZUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLnJlc3BvbnNpYmxlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX0xPT0tVUF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9MT09LVVBfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVzcG9uc2libGVTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0UmVzcG9uc2libGVTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+ICEhZmlsdGVyRGF0YVtuYW1lXSAmJiBmaWx0ZXJEYXRhW25hbWVdICE9PSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRW51bSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5yZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZW1wbG95ZWVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMucmVzcG9uc2libGVMb29rdXBEaXNwbGF5RmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMucmVzcG9uc2libGVMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IGFueSkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyBcIlwiIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBncmlkQ29sdW1ucyA9IFtcbiAgICAgICAgICAgIHsgZmllbGQ6IFwic3RhcnREYXRlXCIsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3Rvcnlfc3RhcnRfZGF0ZVwiKSB9LFxuICAgICAgICAgICAgeyBmaWVsZDogXCJhbm5vdGF0aW9uVHlwZS5jb2RlXCIsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfYW5ub3RhdGlvbl90eXBlX2NvZGVcIikgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6IFwiYW5ub3RhdGlvblR5cGUubmFtZVwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25fdHlwZV9uYW1lXCIpIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmllbGQ6IFwiYW5ub3RhdGlvblwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfYW5ub3RhdGlvblwiKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0dSSURfQ09MVU1OUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfR1JJRF9DT0xVTU5TOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0SGlzdG9yeUdyaWRDb2x1bW5zKHRoaXMudHJhbnNsYXRlLCB0aGlzLmNvbmZpZ1NlcnZpY2UpLmNvbmNhdChncmlkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJGaWVsZHMoKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IFtcbiAgICAgICAgICAgIHRoaXMuZW1wbG95ZWVMb29rdXBTZXJ2aWNlLmdldEZvcm1GaWVsZCgpLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llclwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVyXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Mb29rdXAsXG4gICAgICAgICAgICAgICAgcmVjb3JkTGFiZWw6IGdldFJlY29yZExhYmVsKHRoaXMudHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICByZWNvcmRzTGFiZWw6IGdldFJlY29yZExhYmVsKHRoaXMudHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZXJfc2VhcmNoX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEVtcHR5VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubm90aGluZ19mb3VuZFwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJcIiksXG4gICAgICAgICAgICAgICAgZmlsdGVyVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZmlsdGVyc1wiKSxcbiAgICAgICAgICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNsZWFyXCIpLFxuICAgICAgICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNhbmNlbFwiKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5zZWxlY3RcIiksXG4gICAgICAgICAgICAgICAgZGF0YUtleTogXCJpZFwiLFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogdGhpcy5jb21wYW55TG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIHNlYXJjaE9ic2VydmFibGU6IHRoaXMuY29tcGFueUxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgb25Mb29rdXBSZXF1ZXN0OiAodmFsdWU6IHN0cmluZykgPT4gdGhpcy5vbkNvbXBhbnlMb29rdXBSZXF1ZXN0KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBvblNlYXJjaFJlcXVlc3Q6IChldmVudDogYW55KSA9PiB0aGlzLm9uQ29tcGFueVNlYXJjaFJlcXVlc3QoZXZlbnQpLFxuICAgICAgICAgICAgICAgIGxvb2t1cERpc3BsYXlGaWVsZDogXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkczogdGhpcy5nZXRDb21wYW55U2VhcmNoRmllbGRzKCksXG4gICAgICAgICAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogdGhpcy5nZXRDb21wYW55U2VhcmNoR3JpZEZpZWxkcygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvbXBhbnlCcmFuY2hcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb21wYW55X2JyYW5jaFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWFyY2hUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb21wYW55X2JyYW5jaF9zZWFyY2hfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIGZpbHRlckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmZpbHRlclwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJzXCIpLFxuICAgICAgICAgICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2xlYXJcIiksXG4gICAgICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2FuY2VsXCIpLFxuICAgICAgICAgICAgICAgIHJlY29yZExhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0xhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uc2VsZWN0XCIpLFxuICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTZWFyY2hPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIG9uTG9va3VwUmVxdWVzdDogKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMub25Db21wYW55QnJhbmNoTG9va3VwUmVxdWVzdCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbkNvbXBhbnlCcmFuY2hTZWFyY2hSZXF1ZXN0KGV2ZW50KSxcbiAgICAgICAgICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVfcGxhY2Vob2xkZXJcIiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJhbm5vdGF0aW9uVHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9hbm5vdGF0aW9uX3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkxvb2t1cCxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25fdHlwZV9zZWFyY2hfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIGZpbHRlckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmZpbHRlclwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJzXCIpLFxuICAgICAgICAgICAgICAgIHJlY29yZExhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0xhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgY2xlYXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jbGVhclwiKSxcbiAgICAgICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jYW5jZWxcIiksXG4gICAgICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uc2VsZWN0XCIpLFxuICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgc2VhcmNoT2JzZXJ2YWJsZTogdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgb25Mb29rdXBSZXF1ZXN0OiAodmFsdWU6IHN0cmluZykgPT4gdGhpcy5vbkFubm90YXRpb25UeXBlTG9va3VwUmVxdWVzdCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbkFubm90YXRpb25UeXBlU2VhcmNoUmVxdWVzdChldmVudCksXG4gICAgICAgICAgICAgICAgbG9va3VwRGlzcGxheUZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgc2VhcmNoRmllbGRzOiB0aGlzLmdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKCksXG4gICAgICAgICAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llZVNpdHVhdGlvblwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3NpdHVhdGlvblwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfc2l0dWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBTaXR1YXRpb25FbXBsb3llZS5FVkVSWU9ORSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBzaXR1YXRpb25PcHRpb25zKHRoaXMudHJhbnNsYXRlLCB0aGlzLmNvbmZpZ1NlcnZpY2UpLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNldFN0b3JhZ2VGaWx0ZXJzSW50b0Zvcm0oZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBhd2FpdCB0aGlzLmZpbHRlcnNTdG9yYWdlU2VydmljZS5nZXRGaWx0ZXJzKFwiQW5ub3RhdGlvbkhpc3RvcnlMaXN0Q29tcG9uZW50XCIpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNEYXRlID0gbW9tZW50KGZpbHRlcnNbZmllbGRdLCBtb21lbnQuSFRNTDVfRk1ULkRBVEVUSU1FX0xPQ0FMX01TICsgJ1onLCB0cnVlKS5pc1ZhbGlkKCk7XG4gICAgICAgICAgICBmb3JtLmdldChmaWVsZCkuc2V0VmFsdWUoaXNEYXRlID8gbmV3IERhdGUoZmlsdGVyc1tmaWVsZF0pIDogZmlsdGVyc1tmaWVsZF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlcnNMb2FkZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgdGhpcy5yZXNldEdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xuXG4gICAgICAgIC8qe0NBOkdFVF9GSUxURVJfRk9STV9HUk9VUDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6RU5EfSovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRTdG9yYWdlUGFnaW5hdG9yKCkge1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBhd2FpdCB0aGlzLnBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLmdldFBhZ2luYXRvcihcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFBhZ2luYXRvclwiKTtcblxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkocGFnaW5hdG9yKSAhPT0gXCJ7fVwiKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5wYWdpbmF0b3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qe0NBOkdFVF9GSUxURVJfRk9STV9HUk9VUDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6RU5EfSovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbnVtUXVlcnkobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBtdWx0aXBsZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbXVsdGlwbGUgPyBgKCR7dmFsdWUubWFwKChzZWxlY3RlZDogYW55KSA9PiBgJHtuYW1lfSBlcSAnJHtzZWxlY3RlZH0nYCkuam9pbihcIiBvciBcIil9KWAgOiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX3R5cGVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl90eXBlX25hbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9UWVBFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1RZUEVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QW5ub3RhdGlvblR5cGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl90eXBlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25fdHlwZV9uYW1lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfVFlQRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1RZUEVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW1wbG95ZWVTZWFyY2hGaWVsZHMoKSB7IC8vIE5PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llci5jb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfZW1wbG95ZXJfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXJzb24ubm9tUGVzXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfcGVyc29uX25vbV9wZXNcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVtcGxveWVlU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95ZXIuY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2VtcGxveWVyX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVyc29uLm5vbVBlc1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3BlcnNvbl9ub21fcGVzXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udHJhY3RUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc3BvbnNpYmxlU2VhcmNoRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveWVyLmNvZEVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9lbXBsb3llcl9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlcnNvbi5ub21QZXNcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9wZXJzb25fbm9tX3Blc1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfZW1wbG95bWVudF9yZWxhdGlvbnNoaXBfY29udHJhY3RfdHlwZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNvbnRyYWN0VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzcG9uc2libGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llci5jb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfZW1wbG95ZXJfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXJzb24ubm9tUGVzXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfcGVyc29uX25vbV9wZXNcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1JFU1BPTlNJQkxFX1NFQVJDSF9HUklEX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbXBhbnlMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55TG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55U2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcywgc29ydCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmNvbXBhbnlMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wYW55U2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRDb21wYW55U2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmNvbXBhbnlBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmNvbXBhbnlTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVG90YWxSZWNvcmRzTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8udG90YWxfcmVjb3Jkc1wiLCB7IHZhbHVlOiBsaXN0LnRvdGFsRWxlbWVudHMgfSksXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLmNvbXBhbnlMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29tcGFueUJyYW5jaExvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cbiAgICAgICAgY29uc3Qgc29ydCA9IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoeyBmaWVsZCwgb3JkZXI6IDEgfSkpO1xuXG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBlbXBsb3llciA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZW1wbG95ZXInKS52YWx1ZTtcbiAgICAgICAgaWYgKGVtcGxveWVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYW55RmlsdGVyID0gYGUwNzBlbXAuY29kRW1wIGVxICR7ZW1wbG95ZXIuY29kRW1wfWA7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ID8gYCR7ZmlsdGVyUXVlcnl9IGFuZCAke2NvbXBhbnlGaWx0ZXJ9YCA6IGNvbXBhbnlGaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QnJhbmNoQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55QnJhbmNoU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcywgc29ydCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wYW55QnJhbmNoU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHsgLy9OT1NPTkFSXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCBlbXBsb3llciA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZW1wbG95ZXInKS52YWx1ZTtcbiAgICAgICAgaWYgKGVtcGxveWVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYW55RmlsdGVyID0gYGUwNzBlbXAuY29kRW1wIGVxICR7ZW1wbG95ZXIuY29kRW1wfWA7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ID8gYCR7ZmlsdGVyUXVlcnl9IGFuZCAke2NvbXBhbnlGaWx0ZXJ9YCA6IGNvbXBhbnlGaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QnJhbmNoQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55QnJhbmNoU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ2V0TGFiZWxWYWx1ZShsaXN0LmNvbnRlbnRzLCB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBEaXNwbGF5RmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFRvdGFsUmVjb3Jkc0xhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLnRvdGFsX3JlY29yZHNcIiwgeyB2YWx1ZTogbGlzdC50b3RhbEVsZW1lbnRzIH0pLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5jb21wYW55QnJhbmNoTG9va3VwU2VhcmNoT2JzZXJ2YWJsZS5uZXh0KGRhdGEpKTtcblxuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRUVfU0VBUkNIX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcGFueVNlYXJjaEZpZWxkcygpIHsgLy9OT1NPTkFSXG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9jb2RfZW1wXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbUVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfbm9tX2VtcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbXBhbnlTZWFyY2hHcmlkRmllbGRzKCkgeyAvL05PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9jb2RfZW1wXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbUVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfbm9tX2VtcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEdyaWRGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb21wYW55QnJhbmNoU2VhcmNoRmllbGRzKCkgeyAvL05PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RGaWxcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X2JyYW5jaF9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbUZpbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfYnJhbmNoX25hbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb21wYW55QnJhbmNoU2VhcmNoR3JpZEZpZWxkcygpIHsgLy9OT1NPTkFSXG4gICAgICAgIGNvbnN0IHNlYXJjaEdyaWRGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZEZpbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfYnJhbmNoX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tRmlsXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9icmFuY2hfbmFtZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEdyaWRGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVHcmlkKGxpc3RQYXJhbXM6IExpc3RQYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyc0xvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ubGlzdFBhcmFtcyB9O1xuICAgICAgICBjb25zdCB7IHBhZ2UsIHNpemUsIGZpbHRlckRhdGEgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XG4gICAgICAgIGxldCB7IHNvcnQgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUb2tlbnMgPSB0aGlzLmZpbHRlckZpZWxkc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+ICEhZmlsdGVyRGF0YVtuYW1lXSAmJiBmaWx0ZXJEYXRhW25hbWVdICE9PSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCBsYWJlbCwgdHlwZSwgc2VhcmNoRmllbGRzLCBvcHRpb25zIH06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBsZXQgbGFiZWxWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIkxcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJMVFNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KFwiTCBMVFNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuTG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRTZWFyY2hGaWVsZHMgPSBuYW1lID09PSBcImVtcGxveWVlXCIgPyB0aGlzLmdldEVtcGxveWVlU2VhcmNoRmllbGRzKCkgOiBzZWFyY2hGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSB1cGRhdGVkU2VhcmNoRmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChmaWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLm5hbWUuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2ZpZWxkLm5hbWVdID0gdGhpcy5nZXRQcm9wKHZhbHVlLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLm5hbWUgPT09IFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtmaWVsZC5uYW1lXSA9IHRoaXMubG9hZExhYmVsRnJvbUVudW0odmFsdWVbZmllbGQubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbZmllbGQubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIgLSBcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRW51bSkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogT3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IGxhYmVsVmFsdWUpWzBdLmxhYmVsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubGlzdF9ncmlkX2Jvb2xlYW5fdHJ1ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmxpc3RfZ3JpZF9ib29sZWFuX2ZhbHNlXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkOiBuYW1lLCBsYWJlbDogYCR7bGFiZWx9OiAke2xhYmVsVmFsdWV9YCB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5maWx0ZXJGaWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiAhIWZpbHRlckRhdGFbbmFtZV0pXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUsIG11bHRpcGxlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09IFwiZW1wbG95ZWVTaXR1YXRpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U2l0dWF0aW9uRmlsdGVySW5IaXN0b3JpY3ModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW51bVF1ZXJ5KG5hbWUsIHZhbHVlLCBtdWx0aXBsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuTG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZS5pZH0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeVxuICAgICAgICAgICAgLnJlcGxhY2UoJ2VtcGxveWVyIGVxJywgJ2VtcGxveWVlLmVtcGxveWVyIGVxJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCdjb21wYW55QnJhbmNoIGVxJywgJ2VtcGxveWVlLmVtcGxveWVlU25hcHNob3QuY29tcGFueUJyYW5jaCBlcScpXG4gICAgICAgICAgICAucmVwbGFjZSgnY29udHJhY3RUeXBlIGVxJywgJ2VtcGxveWVlLmVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlIGVxJylcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gdGhpcy5ncmlkQ29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZCk7XG5cbiAgICAgICAgaWYgKCFzb3J0KSB7XG4gICAgICAgICAgICBzb3J0ID0gW3sgZmllbGQ6IFwibGFzdE1vZGlmaWVkRGF0ZVwiLCBvcmRlcjogLTEgfV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFubm90YXRpb25IaXN0b3J5U2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzaXplLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPj0gNTAwICYmIGVyci5zdGF0dXMgPCA2MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEdyaWQobGlzdFBhcmFtcz86IExpc3RQYXJhbXMpIHtcbiAgICAgICAgaWYgKGxpc3RQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMgPSB7IC4uLnRoaXMuY3VycmVudExpc3RQYXJhbXMsIC4uLmxpc3RQYXJhbXMgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCBwYWdlOiAwLCBzb3J0OiBbXSB9O1xuICAgICAgICB0aGlzLnRhYmxlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNvcnRGaWVsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFnZVNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0luZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlICogdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zaXplO1xuICAgIH1cblxuICAgIC8qe0NBOkNMQVNTX01FVEhPRFM6U1RBUlR9Ki9cbiAgICBwcml2YXRlIGxvYWRMYWJlbEZyb21FbnVtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm91bmRFbnVtID0gdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLmZpbHRlcihyID0+IHIudmFsdWUgPT09IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIChmb3VuZEVudW0gJiYgZm91bmRFbnVtLmxlbmd0aCAmJiBmb3VuZEVudW1bMF0ubGFiZWwpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9jb250cmFjdC5saXN0X2dyaWRfZW1wdHlfZmllbGRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQWRkQ29sbGVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2BuZXctY29sbGVjdGl2ZWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIGZyYWdtZW50OiBDb2xsZWN0aXZlUHJvY2Vzc1R5cGUuSU5DTFVERSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25SZW1vdmVDb2xsZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYG5ldy1jb2xsZWN0aXZlYF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQ6IENvbGxlY3RpdmVQcm9jZXNzVHlwZS5FWENMVURFIH0pO1xuICAgIH1cbiAgICAvKntDQTpDTEFTU19NRVRIT0RTOkVORH0qL1xufVxuXG5pbnRlcmZhY2UgTGlzdFBhcmFtcyB7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIHNvcnQ/OiBTb3J0TWV0YVtdO1xuICAgIGZpbHRlckRhdGE/OiBhbnk7XG59XG5cbi8qe0NBOkZJTEVfQ09OVEVOVFM6U1RBUlR9Ki9cbi8qe0NBOkZJTEVfQ09OVEVOVFM6RU5EfSovXG4iXX0=