@fundamental-ngx/platform 0.47.4-rc.8 → 0.47.4-rc.9

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.
@@ -1042,6 +1042,14 @@ export class TableComponent extends Table {
1042
1042
  }
1043
1043
  /** @hidden */
1044
1044
  _listenToTableRowsPipe() {
1045
+ this._subscriptions.add(
1046
+ /*
1047
+ * Reset table when the data source is changed,
1048
+ * because new data source can have different set of data
1049
+ */
1050
+ this._dataSourceDirective.dataSourceChanged.subscribe(() => {
1051
+ this._setTableRows([]);
1052
+ }));
1045
1053
  this._subscriptions.add(this._dataSourceDirective.items$
1046
1054
  .pipe(
1047
1055
  // map source items to table rows
@@ -1213,6 +1221,7 @@ export class TableComponent extends Table {
1213
1221
  /** @hidden */
1214
1222
  _calculateVisibleTableRows() {
1215
1223
  this._tableRowsVisible = this._tableRows.filter((row) => !row.hidden);
1224
+ console.log({ visible: this._tableRowsVisible, total: this._tableRows });
1216
1225
  if (this._virtualScrollDirective?.virtualScroll) {
1217
1226
  this._virtualScrollDirective.calculateVirtualScrollRows();
1218
1227
  }
@@ -1689,4 +1698,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
1689
1698
  }], loading: [{
1690
1699
  type: Input
1691
1700
  }] } });
1692
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBSU4sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwSCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQiw0QkFBNEIsRUFFNUIsc0JBQXNCLEVBQ3RCLHNCQUFzQixJQUFJLHdCQUF3QixFQUNsRCx3QkFBd0IsRUFDeEIsT0FBTyxFQUVQLGFBQWEsRUFDYixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixzQkFBc0IsRUFDekIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FB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QUFnQjtnQkFJbEIsS0FBSztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJeEMsY0FBYztzQkFEdEIsU0FBUzt1QkFBQyw0QkFBNEI7Z0JBSXRCLFVBQVU7c0JBRDFCLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJM0IsYUFBYTtzQkFEN0IsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSWxCLE9BQU87c0JBRGYsZUFBZTt1QkFBQyxXQUFXO2dCQUluQixtQkFBbUI7c0JBRDNCLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUloRCxZQUFZO3NCQURwQixZQUFZO3VCQUFDLGFBQWE7Z0JBaUkzQixhQUFhO3NCQURaLFdBQVc7dUJBQUMsdUJBQXVCO2dCQTJDNUIsT0FBTztzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUcmFja0J5RnVuY3Rpb24sXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmLCBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBOZ1N3aXRjaERlZmF1bHQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEbmRMaXN0RGlyZWN0aXZlLFxuICAgIERyYWdBbmREcm9wTW9kdWxlLFxuICAgIEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUsXG4gICAgRm9jdXNhYmxlQ2VsbFBvc2l0aW9uLFxuICAgIEZvY3VzYWJsZUdyaWREaXJlY3RpdmUsXG4gICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZSBhcyBGb2N1c2FibGVHcmlkRGlyZWN0aXZlXzEsXG4gICAgSW50ZXJzZWN0aW9uU3B5RGlyZWN0aXZlLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUmFuZ2VTZWxlY3RvcixcbiAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgcmVzaXplT2JzZXJ2YWJsZSxcbiAgICBSdGxTZXJ2aWNlLFxuICAgIFRhYmJhYmxlRWxlbWVudFNlcnZpY2Vcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnVzeUluZGljYXRvckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9idXN5LWluZGljYXRvcic7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kZSxcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnNcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBTa2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9za2VsZXRvbic7XG5pbXBvcnQge1xuICAgIFRhYmxlQ29tcG9uZW50IGFzIENvcmVUYWJsZUNvbXBvbmVudCxcbiAgICBUYWJsZVNlcnZpY2UgYXMgQ29yZVRhYmxlU2VydmljZSxcbiAgICBUYWJsZUNvbXBvbmVudCBhcyBGZFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlQm9keURpcmVjdGl2ZSxcbiAgICBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gICAgVGFibGVSb3dEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RhYmxlJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IEZEUF9QUkVTRVRfTUFOQUdFRF9DT01QT05FTlQsIGlzSnNPYmplY3QgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQge1xuICAgIGFwcGx5U2VsZWN0aW9uVG9DaGlsZHJlbixcbiAgICBidWlsZE5ld1Jvd1NrZWxldG9uLFxuICAgIENvbGxlY3Rpb25GaWx0ZXIsXG4gICAgQ29sbGVjdGlvbkdyb3VwLFxuICAgIENvbGxlY3Rpb25Tb3J0LFxuICAgIGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVPYmplY3RzVG9UYWJsZVJvd3MsXG4gICAgY29udmVydFRyZWVUYWJsZVJvd1RvRmxhdExpc3QsXG4gICAgREVGQVVMVF9ISUdITElHSFRJTkdfS0VZLFxuICAgIEVESVRBQkxFX1JPV19TRU1BTlRJQ19TVEFURSxcbiAgICBFZGl0YWJsZVRhYmxlQ2VsbCxcbiAgICBGRFBfVEFCTEVfRFJBR0dBQkxFX0RJUkVDVElWRSxcbiAgICBGRFBfVEFCTEVfU1RBVEVfRElSRUNUSVZFLFxuICAgIEZEUF9UQUJMRV9WSVJUVUFMX1NDUk9MTF9ESVJFQ1RJVkUsXG4gICAgZmluZFJvd0NoaWxkcmVuLFxuICAgIGdldEZyZWV6YWJsZUNvbHVtbnMsXG4gICAgZ2V0RnJlZXphYmxlRW5kQ29sdW1ucyxcbiAgICBnZXRSb3dQYXJlbnRzLFxuICAgIGdldFNlbGVjdGFibGVSb3dzLFxuICAgIGlzUm93TmF2aWdhdGFibGUsXG4gICAgaXNUYWJsZVJvdyxcbiAgICBpc1RyZWVSb3dGaXJzdENlbGwsXG4gICAgUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQsXG4gICAgUk9XX0hFSUdIVCxcbiAgICBSb3dDbGFzc2VzUGlwZSxcbiAgICBSb3dDb21wYXJhdG9yLFxuICAgIFNhdmVSb3dzRXZlbnQsXG4gICAgU0VMRUNUSU9OX0NPTFVNTl9XSURUSCxcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRILFxuICAgIFRhYmxlLFxuICAgIFRhYmxlQ29sdW1uLFxuICAgIFRhYmxlQ29sdW1uRnJlZXplRXZlbnQsXG4gICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgIFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50LFxuICAgIFRhYmxlRGF0YVNvdXJjZSxcbiAgICBUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUsXG4gICAgVGFibGVEcmFnZ2FibGUsXG4gICAgVGFibGVGaWx0ZXJDaGFuZ2VFdmVudCxcbiAgICBUYWJsZUdyb3VwQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgIFRhYmxlSW5pdGlhbFN0YXRlLFxuICAgIFRhYmxlUGFnZUNoYW5nZUV2ZW50LFxuICAgIFRhYmxlUmVzcG9uc2l2ZVNlcnZpY2UsXG4gICAgVGFibGVSb3csXG4gICAgVGFibGVSb3dBY3RpdmF0ZUV2ZW50LFxuICAgIFRhYmxlUm93Q2xhc3MsXG4gICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudCxcbiAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgVGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudCxcbiAgICBUYWJsZVJvd1R5cGUsXG4gICAgVGFibGVTY3JvbGxhYmxlLFxuICAgIFRhYmxlU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgIFRhYmxlU2VydmljZSxcbiAgICBUYWJsZVNvcnRDaGFuZ2VFdmVudCxcbiAgICBUYWJsZVN0YXRlLFxuICAgIFRhYmxlVmlydHVhbFNjcm9sbFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUQUJMRV9UT09MQkFSLCBUYWJsZVRvb2xiYXJJbnRlcmZhY2UgfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1UYWJsZUNvbHVtblJlc2l6ZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtY29sdW1uLXJlc2l6ZXIvdGFibGUtY29sdW1uLXJlc2l6ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlR3JvdXBSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZ3JvdXAtcm93L3RhYmxlLWdyb3VwLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVIZWFkZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtaGVhZGVyLXJvdy90YWJsZS1oZWFkZXItcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVBvcHBpbmdSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtcG9wcGluZy1yb3cvdGFibGUtcG9wcGluZy1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50JztcblxuaW50ZXJmYWNlIFRvb2xiYXJDb250ZXh0IHtcbiAgICBjb3VudGVyOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgc29ydGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgZmlsdGVyYWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBncm91cGFibGU6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgY29sdW1uczogT2JzZXJ2YWJsZTxib29sZWFuPjtcbn1cblxubGV0IHRhYmxlVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCByZXByZXNlbnRzIGEgdGFibGUuXG4gKiBBIHRhYmxlIGlzIGEgc2V0IG9mIHRhYnVsYXIgZGF0YS4gTGluZSBpdGVtcyBjYW4gc3VwcG9ydCBkYXRhLCBpbWFnZXMgYW5kIGFjdGlvbnMuXG4gKiBgYGBodG1sXG4gKiA8ZmRwLXRhYmxlXG4gKiAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAqICBmZENvbXBhY3RcbiAqICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICogIGVtcHR5VGFibGVNZXNzYWdlPVwiTm8gZGF0YSBmb3VuZFwiPlxuICpcbiAqICA8ZmRwLXRhYmxlLXRvb2xiYXJcbiAqICAgdGl0bGU9XCJPcmRlciBMaW5lIEl0ZW1zXCJcbiAqICAgW2hpZGVJdGVtQ291bnRdPVwiZmFsc2VcIj5cbiAqICA8L2ZkcC10YWJsZS10b29sYmFyPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwibmFtZVwiXG4gKiAgIGtleT1cIm5hbWVcIlxuICogICBsYWJlbD1cIk5hbWVcIlxuICogICBhbGlnbj1cInN0YXJ0XCI+XG4gKiAgPC9mZHAtY29sdW1uPlxuICpcbiAqICA8ZmRwLWNvbHVtblxuICogICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICogICBrZXk9XCJkZXNjcmlwdGlvblwiXG4gKiAgIGxhYmVsPVwiRGVzY3JpcHRpb25cIj5cbiAqICA8L2ZkcC1jb2x1bW4+XG4gKiA8L2ZkcC10YWJsZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogVGFibGUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRhYmxlQ29tcG9uZW50KSB9LFxuICAgICAgICBUYWJsZVJvd1NlcnZpY2UsXG4gICAgICAgIFRhYmxlU2VydmljZSxcbiAgICAgICAgQ29yZVRhYmxlU2VydmljZSxcbiAgICAgICAgVGFibGVTY3JvbGxEaXNwYXRjaGVyU2VydmljZSxcbiAgICAgICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBUYWJsZVJlc3BvbnNpdmVTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIHN1cHBvcnRlZENvbnRlbnREZW5zaXR5OiBbQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QsIENvbnRlbnREZW5zaXR5TW9kZS5DT1pZLCBDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEXVxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUYWJsZUNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmU6IFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydkYXRhU291cmNlJywgJ2NoaWxkRGF0YVNvdXJjZSddLFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXRzLW1ldGFkYXRhLXByb3BlcnR5XG4gICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2NoaWxkRGF0YVNvdXJjZUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZXF1ZXN0ZWQnLFxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgICAgICAgICAgICAgICdvbkRhdGFSZWNlaXZlZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGFTb3VyY2VDaGFuZ2VkJyxcbiAgICAgICAgICAgICAgICAnZGF0YUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgICdpc0xvYWRpbmcnXG4gICAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkcC10YWJsZScsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLW5vLWhvcml6b250YWwtYm9yZGVyc10nOiAnbm9Ib3Jpem9udGFsQm9yZGVycyB8fCBub0JvcmRlcnMnLFxuICAgICAgICAnW2NsYXNzLmZkLXRhYmxlLS1uby12ZXJ0aWNhbC1ib3JkZXJzXSc6ICdub1ZlcnRpY2FsQm9yZGVycyB8fCBub0JvcmRlcnMnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgUGxhdGZvcm1UYWJsZUNvbHVtblJlc2l6ZXJDb21wb25lbnQsXG4gICAgICAgIFRhYmxlU2Nyb2xsYWJsZURpcmVjdGl2ZSxcbiAgICAgICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZV8xLFxuICAgICAgICBDb3JlVGFibGVDb21wb25lbnQsXG4gICAgICAgIFRhYmxlSGVhZGVyRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUhlYWRlclJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVCb2R5RGlyZWN0aXZlLFxuICAgICAgICBEcmFnQW5kRHJvcE1vZHVsZSxcbiAgICAgICAgTmdGb3IsXG4gICAgICAgIE5nU3dpdGNoLFxuICAgICAgICBOZ1N3aXRjaENhc2UsXG4gICAgICAgIFRhYmxlR3JvdXBSb3dDb21wb25lbnQsXG4gICAgICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICAgICAgVGFibGVSb3dDb21wb25lbnQsXG4gICAgICAgIFRhYmxlUG9wcGluZ1Jvd0NvbXBvbmVudCxcbiAgICAgICAgUmVwZWF0RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZVJvd0RpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVDZWxsRGlyZWN0aXZlLFxuICAgICAgICBTa2VsZXRvbkNvbXBvbmVudCxcbiAgICAgICAgSW50ZXJzZWN0aW9uU3B5RGlyZWN0aXZlLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgUm93Q2xhc3Nlc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgPSBhbnk+XG4gICAgZXh0ZW5kcyBUYWJsZTxUPlxuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZFxue1xuICAgIC8qKiBDb21wb25lbnQgbmFtZSB1c2VkIGluIGEgUHJlc2V0LW1hbmFnZWQgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZSA9ICdwbGF0Zm9ybVRhYmxlJztcblxuICAgIC8qKiBJRCBmb3IgdGhlIFRhYmxlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBpZCA9IGBmZHAtdGFibGUtJHt0YWJsZVVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IHJlc2l6aW5nIGNvbHVtbnMgYnkgZHJhZ2dpbmcgdGhlIGNvbHVtbiBlZGdlIHdpdGggbW91c2UuICovXG4gICAgQElucHV0KClcbiAgICBlbmFibGVEcmFnUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZml4IHRoZSB0YWJsZSBoZWFkZXIgYW5kIGZvb3Rlci4gRGVmYXVsdCBpcyB0cnVlLlxuICAgICAqIE5vdGUgdGhhdCBpZiB0aGUgdGFibGUgY29udGFpbnMgZnJlZXphYmxlIGNvbHVtbnMsIHRoZSBoZWFkZXIgYW5kXG4gICAgICogZm9vdGVyIHdpbGwgYmUgZml4ZWQgYXV0b21hdGljYWxseSwgcmVnYXJkbGVzcyBvZiB0aGlzIGlucHV0IHZhbHVlLlxuICAgICAqICovXG4gICAgQElucHV0KClcbiAgICBmaXhlZCA9IHRydWU7XG5cbiAgICAvKiogVGhlIGNvbHVtbiBgbmFtZWAgdG8gZnJlZXplIGNvbHVtbnMgdXAgdG8gYW5kIGluY2x1ZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZyZWV6ZUNvbHVtbnNUbzogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIGFmdGVyIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVFbmRDb2x1bW5zVG86IHN0cmluZztcbiAgICAvKiogVG9nZ2xlIGZvciBwYWdlIHNjcm9sbGluZyBmZWF0dXJlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNjcm9sbGluZyA9IGZhbHNlO1xuICAgIC8qKiBOdW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2l6ZTogTnVsbGFibGU8bnVtYmVyPjtcbiAgICAvKiogUGFnZSBzY3JvbGxpbmcgdGhyZXNob2xkIGluIHB4LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNjcm9sbGluZ1RocmVzaG9sZCA9IDgwO1xuICAgIC8qKiBUYWJsZSBib2R5IGhlaWdodC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGJvZHlIZWlnaHQ6IHN0cmluZztcbiAgICAvKiogVGV4dCBkaXNwbGF5ZWQgd2hlbiB0YWJsZSBoYXMgbm8gaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBlbXB0eVRhYmxlTWVzc2FnZTogc3RyaW5nO1xuICAgIC8qKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyB2aXNpYmxlIGNvbHVtbnMuICovXG4gICAgQElucHV0KClcbiAgICBub1Zpc2libGVDb2x1bW5zTWVzc2FnZTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vSG9yaXpvbnRhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCB2ZXJ0aWNhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9WZXJ0aWNhbEJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCBhbnkgYm9yZGVycywgYnV0IGhlYWRlciB3aXRoIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvZHlCb3JkZXJzID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgb3V0ZXIgYm9yZGVycyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmRwLXRhYmxlLS1uby1vdXRlci1ib3JkZXInKVxuICAgIEBJbnB1dCgpXG4gICAgbm9PdXRlckJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IGhvcml6b250YWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWCA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgdmVydGljYWwgYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9yZGVyWSA9IGZhbHNlO1xuICAgIC8qKiBBY2Nlc3NvciB0byBhIGNoaWxkcmVuIG5vZGVzIG9mIHRyZWUuICovXG4gICAgQElucHV0KClcbiAgICByZWxhdGlvbktleTogc3RyaW5nO1xuICAgIC8qKiBUYWJsZSByb3cgZXhwYW5kZWQgc3RhdGUga2V5LiBVc2VkIHRvIHNldCB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0cmVlIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGV4cGFuZGVkU3RhdGVLZXk6IHN0cmluZztcbiAgICAvKiogUHJvcGVydHkga2V5IGluZGljYXRpbmcgdGhhdCB0aGUgcm93IGhhcyBjaGlsZHJlbiBhY2Nlc3NpYmxlIHZpYSBbY2hpbGREYXRhU291cmNlXS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhhc0NoaWxkcmVuS2V5OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciByb3cgaXMgbmF2aWdhdGFibGUuXG4gICAgICogUGFzcyBib29sZWFuIHZhbHVlIHRvIHNldCBzdGF0ZSBmb3IgdGhlIGFsbCByb3dzLlxuICAgICAqIFBhc3Mgc3RyaW5nIHZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBjb21wdXRlIHN0YXRlIGZvciBldmVyeSBzaW5nbGUgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGhpZ2hsaWdodCBuYXZpZ2F0ZWQgcm93LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlnaGxpZ2h0TmF2aWdhdGVkUm93ID0gZmFsc2U7XG4gICAgLyoqIFdoZXRoZXIgdGFibGUgcm93IGNhbiBiZSBjbGlja2VkICovXG4gICAgQElucHV0KClcbiAgICByb3dzQWN0aXZhYmxlID0gZmFsc2U7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkS2V5OiBzdHJpbmc7XG4gICAgLyoqIFZhbHVlIHdpdGggdGhlIGtleSBvZiB0aGUgcm93IGl0ZW0ncyBmaWVsZCB0byBlbmFibGUgc2VsZWN0aW5nLiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGFibGVLZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUcmFja2luZyBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBjaGVjayB0aGUgZGlmZmVyZW5jZXMgaW4gZGF0YSBjaGFuZ2VzLlxuICAgICAqIFVzZWQgc2ltaWxhcmx5IHRvIGBuZ0ZvcmAgYHRyYWNrQnlgIGZ1bmN0aW9uLlxuICAgICAqIEFjY2VwdHMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBwYXJhbWV0ZXJzLCBpbmRleCBhbmQgaXRlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxUPjtcbiAgICAvKipcbiAgICAgKiBBbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IGlkZW50aWZpZXMgdW5pcXVlbmVzcyBvZiBhIHBhcnRpY3VsYXIgcm93LlxuICAgICAqIFRhYmxlIGNvbXBvbmVudCB1c2VzIGl0IHRvIGJlIGFibGUgdG8gcHJlc2VydmUgc2VsZWN0aW9uIHdoZW4gYSBkYXRhIGxpc3QgaXMgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0NvbXBhcmF0b3I6IFJvd0NvbXBhcmF0b3I8VD47XG4gICAgLyoqIFN0cmluZyBvciBmdW5jdGlvbiB0byBjYWxjdWxhdGUgYWRkaXRpb25hbCByb3dzJyBDU1MgY2xhc3Nlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3NDbGFzczogVGFibGVSb3dDbGFzczxUPjtcbiAgICAvKiogVXNlZCB0byBjb25zdHJ1Y3QgZW1wdHkgcm93IG9iamVjdCBmb3IgZWRpdGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRhYmxlUm93U2tlbGV0b246IFQ7XG4gICAgLyoqIFdoZXRoZXIgYWxsIHJvd3Mgc2hvdWxkIGJlIGNvbGxhcHNlZCBieSBkZWZhdWx0IGFmdGVyIHRoZSB0YWJsZSBpcyBsb2FkZWQuICovXG4gICAgQElucHV0KClcbiAgICBleHBhbmRPbkluaXQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHJvdywgcmVxdWlyZWQgZm9yIHRoZSB2aXJ0dWFsU2Nyb2xsLFxuICAgICAqIGRlZmF1bHQgaXMgNDRweCBpbiBjb3p5LCAzMnB4IGluIGNvbXBhY3QgYW5kIDI0cHggaW4gY29uZGVuc2VkIChzZXQgYXV0b21hdGljYWxseSlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0hlaWdodCA9IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gbG9hZCBwcmV2aW91cyBwYWdlcy5cbiAgICAgKiBUaGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdoZW4gYHBhZ2VTY3JvbGxpbmdgIGlzIHRydWUsIGFuZCB0aGUgaW5pdGlhbCBwYWdlID4gMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFBhZ2VzQmVmb3JlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlVmFsdWUgPSBTZWxlY3Rpb25Nb2RlLk5PTkU7XG5cbiAgICAvKiogU2V0cyBzZWxlY3Rpb24gbW9kZSBmb3IgdGhlIHRhYmxlLiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgfCAnbm9uZScgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlOiBTZWxlY3Rpb25Nb2RlVmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duID0gdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSBTZWxlY3Rpb25Nb2RlLk5PTkU7XG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGlvbkNvbHVtbldpZHRoKCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGlvbk1vZGUoKTogU2VsZWN0aW9uTW9kZVZhbHVlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbmFibGVUcmlzdGF0ZU1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBXaGVuIFRydWUsIHRoZSBjaGVja2VkIHN0YXRlIG9mIGVhY2ggdHJlZSBpdGVtIGRlcGVuZHMgb24gdGhlIGNoZWNrZWRcbiAgICAgKiAgc3RhdGUgb2YgaXRzIHBhcmVudCBvciBkaXJlY3QgY2hpbGQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZW5hYmxlVHJpc3RhdGVNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZVRyaXN0YXRlTW9kZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBlbmFibGVUcmlzdGF0ZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVHJlZVRhYmxlICYmIHRoaXMuX2VuYWJsZVRyaXN0YXRlTW9kZTtcbiAgICB9XG5cbiAgICAvKiogVmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGNvbXB1dGUgc2VtYW50aWMgc3RhdGUgb2YgdGhlIHJvdy4gICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VtYW50aWNIaWdobGlnaHRpbmcodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpO1xuICAgIH1cbiAgICBnZXQgc2VtYW50aWNIaWdobGlnaHRpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleSAmJiB0aGlzLl9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gREVGQVVMVF9ISUdITElHSFRJTkdfS0VZO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZm9yY2Ugcm93cyB0byBmb2xsb3cgJ2NoZWNrZWQgYWxsJyBzdGF0ZSBvZiB0aGUgdGFibGUuXG4gICAgICogSWYgdHJ1ZSwgYWxsIG5ldyByb3dzIHRoYXQgYXJlIGNvbWluZyBmcm9tIHRoZSBkYXRhU291cmNlIHdpbGwgZm9sbG93ICdjaGVja2VkIGFsbCcgc3RhdGUuXG4gICAgICogSWYgZmFsc2UsIHJvdyB3aWxsIHJlc3BlY3QgYGNoZWNrZWRLZXlgIHByb3BlcnR5IHRvIGRlZmluZSBjaGVja2VkIHN0YXRlIG9mIGl0c2VsZi5cbiAgICAgKiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9yY2VDaGVja2VkQWxsU3RhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIGFyaWEtbGFiZWxsZWRieSBhdHRyaWJ1dGUgdmFsdWUgZm9yIHRoZSB0YWJsZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZENoZWNrTmV3Um93cyA9IGZhbHNlO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcHJlc2V0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd1NlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8VD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICAgICAgVGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudDxUPlxuICAgID4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0YWJsZSBzb3J0IG9yZGVyIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNvcnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVNvcnRDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU29ydENoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRoZSB0YWJsZSBmaWx0ZXIgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZmlsdGVyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVGaWx0ZXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGFibGUgZ3JvdXBpbmcgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZ3JvdXBDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZUdyb3VwQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUdyb3VwQ2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdmlzaWJsZSBjb2x1bW5zIGxpc3QgaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjb2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5zQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHBhZ2luYXRpb24gc3RhdGUgaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBwYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgZnJvemVuIGNvbHVtbi4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjb2x1bW5GcmVlemU6IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5GcmVlemVFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBncm91cC90cmVlIHJvdyBjb2xsYXBzZWQvZXhwYW5kZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93VG9nZ2xlT3BlblN0YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1RvZ2dsZU9wZW5TdGF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHJvdyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd0FjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gcm93IG5hdmlnYXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dOYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dBY3RpdmF0ZUV2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGVtcHR5IHJvdyBhZGRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBlbXB0eVJvd0FkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHNhdmUgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2F2ZVJvd3NFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiBjYW5jZWwgYnV0dG9uIHByZXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGFibGUgYm9keSBiZWluZyBzY3JvbGxlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBuZXcgcm93cyBoYXMgYmVlbiBzZXQgYW5kIHJlbmRlcmVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRhYmxlUm93c1NldCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGV4cGFuZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFsbFJvd3NFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGFsbCByb3dzIGJlaW5nIGNvbGxhcHNlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBhbGxSb3dzQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBjZWxsIGlzIGZvY3VzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgY2VsbEZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlU2Nyb2xsYWJsZScpXG4gICAgcmVhZG9ubHkgdGFibGVTY3JvbGxhYmxlOiBUYWJsZVNjcm9sbGFibGU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpXG4gICAgcmVhZG9ubHkgdGFibGVDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChGZFRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICByZWFkb25seSB0YWJsZTogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZES19GT0NVU0FCTEVfR1JJRF9ESVJFQ1RJVkUpXG4gICAgcmVhZG9ubHkgX2ZvY3VzYWJsZUdyaWQ6IEZvY3VzYWJsZUdyaWREaXJlY3RpdmU7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZUJvZHknLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUJvZHk6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChEbmRMaXN0RGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RuZERpcmVjdGl2ZTogTnVsbGFibGU8RG5kTGlzdERpcmVjdGl2ZTxUYWJsZVJvdz4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNvbHVtbilcbiAgICByZWFkb25seSBjb2x1bW5zOiBRdWVyeUxpc3Q8VGFibGVDb2x1bW4+O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihFZGl0YWJsZVRhYmxlQ2VsbCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIHJlYWRvbmx5IGN1c3RvbUVkaXRhYmxlQ2VsbHM6IFF1ZXJ5TGlzdDxFZGl0YWJsZVRhYmxlQ2VsbD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFRBQkxFX1RPT0xCQVIpXG4gICAgcmVhZG9ubHkgdGFibGVUb29sYmFyOiBUYWJsZVRvb2xiYXJJbnRlcmZhY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaW5pdGlhbFNvcnRCeSgpOiBDb2xsZWN0aW9uU29ydFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5pdGlhbFN0YXRlPy5pbml0aWFsU29ydEJ5ID8/IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb2x1bW5zIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIGdldCBfdmlzaWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnMkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDb2x1bW5zIHRvIGJlIHJlbmRlcmVkIGFzIGEgcG9wLWluIGNvbHVtbnMuXG4gICAgICovXG4gICAgZ2V0IF9wb3BwaW5nQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlU2VydmljZS5wb3BwaW5nQ29sdW1ucyQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNUcmVlVGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5pc1RyZWVUYWJsZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBlbmFibGVSb3dSZW9yZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZW5hYmxlUm93UmVvcmRlcmluZztcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgdGFibGUgcm93cyBhcmUgZHJhZ2dhYmxlLiAqL1xuICAgIGdldCBpc0RyYWdnYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmlzVHJlZVRhYmxlICYmICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmVuYWJsZVJvd1Jlb3JkZXJpbmc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VtYW50aWNIaWdobGlnaHRpbmcgPyBTRU1BTlRJQ19ISUdITElHSFRJTkdfQ09MVU1OX1dJRFRIIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTdW0gb2Ygd2lkdGhzIG9mIGZpeGVkIGNvbHVtbnMgKHNlbWFudGljIGhpZ2hsaWdodGluZywgc2VsZWN0aW9uKSAqL1xuICAgIGdldCBfZml4ZWRDb2x1bW5zUGFkZGluZygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCArIHRoaXMuX3NlbGVjdGlvbkNvbHVtbldpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF90YWJsZVdpZHRoUHgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBsb2FkaW5nU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPz9cbiAgICAgICAgICAgICh0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl9pbnRlcm5hbExvYWRpbmdTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ludGVybmFsQ2hpbGRyZW5Mb2FkaW5nU3RhdGUgfHxcbiAgICAgICAgICAgICAgICB0aGlzLl9kbmRMb2FkaW5nU3RhdGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFdoZXRoZXIgdGhlIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIGJlIHNob3duLFxuICAgICAqICBJZiB0aGVyZSBhcmUgbm8gdmlzaWJsZSByb3dzIG9yIHZpc2libGUgY29sdW1uc1xuICAgICAqICBvciBzZWxlY3Rpb24gbW9kZSBpcyBub25lLCB0aGVuIHNlbGVjdGlvbiBjb2x1bW4gc2hvdWxkIG5vdCBiZSBzaG93bi5cbiAgICAgKiovXG4gICAgZ2V0IGlzU2VsZWN0aW9uQ29sdW1uU2hvd24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pc1NlbGVjdGlvbkNvbHVtblNob3duICYmXG4gICAgICAgICAgICAhIXRoaXMuX3RhYmxlUm93c1Zpc2libGUubGVuZ3RoICYmXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPiAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2FyaWFMYWJlbGxlZEJ5KCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5hcmlhTGFiZWxsZWRCeSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkQnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVUb29sYmFyPy50YWJsZVRvb2xiYXJUaXRsZUlkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlcHJlc2VudGF0aW9uIG9mIGNvbWJpbmVkIHRhYmxlIHJvd3MuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX3RhYmxlUm93czogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiB0YWJsZSByb3dzIHRoYXQgY2FtZSBmcm9tIGRhdGFTb3VyY2UuXG4gICAgICogQ29udGFpbnMgYWxsIHJvd3MgaW5jbHVkaW5nIGdyb3VwIHJvd3MuXG4gICAgICovXG4gICAgX2RhdGFTb3VyY2VUYWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgYWRkZWQgdGFibGUgcm93cy5cbiAgICAgKi9cbiAgICBfbmV3VGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFZpc2libGUgdGFibGUgcm93cy5cbiAgICAgKiBSb3dzIGxpc3QgdGhhdCBpcyB1c2VkIHRvIGJlIHJlbmRlcmVkIGluIHRoZSB1aS5cbiAgICAgKiBCYXNlZCBvbiBfdGFibGVSb3dzIGFuZCBleGNsdWRlcyBoaWRkZW4gcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzVmlzaWJsZTogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUYWJsZSBDb2x1bW4gTWFwLiBXaGVyZSBrZXkgaXMgY29sdW1uIGtleSBhbmQgdmFsdWUgaXMgY29sdW1uXG4gICAgICovXG4gICAgX2tleVRvQ29sdW1uTWFwOiBNYXA8c3RyaW5nLCBUYWJsZUNvbHVtbj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlc1xuICAgICAqL1xuICAgIF9mcmVlemFibGVDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBGcmVlemFibGUgY29sdW1uIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGluZGV4ZXMgZm9yIGNvbHVtbnMgdGhhdCB3aWxsIGJlIGZyb3plbiB0byB0aGUgZW5kIG9mIHRoZSB0YWJsZVxuICAgICAqL1xuICAgIF9mcmVlemFibGVFbmRDb2x1bW5zOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RhYmxlQ29sdW1uc0xlbmd0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tlZFN0YXRlOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC10YWJsZS0tZ3JvdXAnKVxuICAgIF9pc0dyb3VwVGFibGUgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCB0byBjcmVhdGUgYSByb3cgY29tcG9uZW50IHBsYWNlaG9sZGVyIGFuZCBzZXQgZGF0YSBpbiBpdCByYXRoZXIgdGhhbiByZS1jcmVhdGUgdGhlIHJvdyBjb21wb25lbnQgd2hlbiBkYXRhIGNoYW5nZXMuXG4gICAgICogT3B0aW1pemVzIHBlcmZvcm1hbmNlIGR1ZSB0byBza2lwcGluZyBpbml0aWFsIHNldHVwIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgX3RhYmxlUm93c0luVmlld1BvcnRQbGFjZWhvbGRlcjogbnVtYmVyW10gPSBbXTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlcjogVGFibGVSb3dbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90b29sYmFyQ29udGV4dDogVG9vbGJhckNvbnRleHQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbmF2aWdhdGVkUm93SW5kZXg6IG51bWJlcjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3Rpb25Db2x1bW5XaWR0aCA9IDA7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSB0YWJsZUNvbHVtbnNTdHJlYW06IE9ic2VydmFibGU8VGFibGVDb2x1bW5bXT47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbG9hZFByZXZpb3VzUGFnZXMgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9ydGwgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kYXRhU291cmNlRGlyZWN0aXZlID0gaW5qZWN0PFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZTxUPj4oVGFibGVEYXRhU291cmNlRGlyZWN0aXZlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGluaXRpYWxTdGF0ZSA9IGluamVjdDxUYWJsZUluaXRpYWxTdGF0ZT4oRkRQX1RBQkxFX1NUQVRFX0RJUkVDVElWRSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVWaXJ0dWFsU2Nyb2xsPihGRFBfVEFCTEVfVklSVFVBTF9TQ1JPTExfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZG5kVGFibGVEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVEcmFnZ2FibGU+KEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLy8ga2VlcGluZyBcImxvYWRpbmdcIiBmaWVsZCBwcml2YXRlIHRvIG1ha2Ugc3VyZSBcImxvYWRpbmdTdGF0ZVwiIGlzIHVzZWQgaW5zdGVhZFxuICAgIC8qKiBMb2FkaW5nIHN0YXRlICovXG4gICAgQElucHV0KClcbiAgICBwcml2YXRlIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZW1hbnRpY0hpZ2hsaWdodGluZ0tleTogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25GaWx0ZXJTZXR0aW5nc0luVG9vbGJhciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBJbmRpY2F0ZXMgd2hlbiBhbGwgaXRlbXMgYXJlIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGF0IGxlYXN0IDEgaXRlbSBpcyBjaGVja2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hlY2tlZEFueSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0aWF0ZWQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZGVkSXRlbXM6IFRbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc1dpZHRoU2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kbmRMb2FkaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFByZXNldDogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQgPSB7fTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxTdGF0ZVNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcm93SGVpZ2h0TWFudWFsbHlTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZEVtaXRSb3dzQ2hhbmdlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZUhlYWRlclJlc2l6ZXIgPSBpbmplY3QoVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNYXBwaW5nIGZ1bmN0aW9uIGZvciB0aGUgdHJhY2tCeSwgcHJvdmlkZWQgYnkgdGhlIHVzZXIuXG4gICAgICogSXMgbmVlZGVkLCBiZWNhdXNlIHdlIGFyZSB3cmFwcGluZyB1c2VyIHN1cHBsaWVkIGRhdGEgaW50byBhIGBUYWJsZVJvd2AgY2xhc3MuXG4gICAgICovXG4gICAgX3Jvd1RyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxUYWJsZVJvdzxUPj4gfCBUcmFja0J5RnVuY3Rpb248bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdFRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxudW1iZXI+ID0gKGluZGV4OiBudW1iZXIpID0+IGluZGV4O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlYWRvbmx5IF90YWJsZVNlcnZpY2U6IFRhYmxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTY3JvbGxEaXNwYXRjaGVyOiBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZTogVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9lbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgcmVhZG9ubHkgY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJiYWJsZVNlcnZpY2U6IFRhYmJhYmxlRWxlbWVudFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsU3RhdGU/LnNldFRhYmxlKHRoaXMpO1xuICAgICAgICB0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnNldFRhYmxlKHRoaXMpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLnNldFRhYmxlKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX3Jvd1RyYWNrQnkgPSB0aGlzLl9kZWZhdWx0VHJhY2tCeTtcbiAgICAgICAgdGhpcy5fdG9vbGJhckNvbnRleHQgPSB7XG4gICAgICAgICAgICBjb3VudGVyOiB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLnRvdGFsSXRlbXMkLFxuICAgICAgICAgICAgc29ydGFibGU6IHRoaXMuX2lzU2hvd25Tb3J0U2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgZmlsdGVyYWJsZTogdGhpcy5faXNTaG93bkZpbHRlclNldHRpbmdzSW5Ub29sYmFyJCxcbiAgICAgICAgICAgIGdyb3VwYWJsZTogdGhpcy5faXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5faXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudGFibGVDb2x1bW5zU3RyZWFtID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3J0bFNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIHRoaXMuX3J0bFNlcnZpY2UucnRsLnN1YnNjcmliZSgoaXNSdGwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcnRsID0gaXNSdGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLmNlbGxGb2N1c2VkJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZWxsRm9jdXNlZC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2Ygcm93cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gdmlld3BvcnQuICovXG4gICAgZ2V0Um93c0luVmlld3BvcnQoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgYW4gYXJyYXkgb2Ygcm93cyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHN0YXJ0SW5kZXggU3RhcnQgaW5kZXggb2YgYWxsIHJvd3MuXG4gICAgICogQHBhcmFtIGxlbmd0aCBMZW5ndGggb2Ygdmlld3BvcnQgcm93cy5cbiAgICAgKi9cbiAgICBzZXRSb3dzSW5WaWV3cG9ydChzdGFydEluZGV4ID0gMCwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyID0gbmV3IEFycmF5KGxlbmd0aCkuZmlsbChudWxsKS5tYXAoKF8sIGkpID0+IGkgKyBzdGFydEluZGV4KTtcbiAgICAgICAgdGhpcy5fZG5kVGFibGVSb3dzUGxhY2Vob2xkZXIgPSB0aGlzLl90YWJsZVJvd3Muc2xpY2Uoc3RhcnRJbmRleCwgbGVuZ3RoKTtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCdsb2FkaW5nJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVMb2FkaW5nKHRoaXMubG9hZGluZ1N0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgndHJhY2tCeScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fcm93VHJhY2tCeSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudHJhY2tCeSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICA/IChpbmRleCkgPT4gdGhpcy50cmFja0J5KGluZGV4LCB0aGlzLl90YWJsZVJvd3NWaXNpYmxlW2luZGV4XS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWZhdWx0VHJhY2tCeTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoYW5nZXMgYmVsb3cgc2hvdWxkIGJlIGNoZWNrZWQgb25seSBhZnRlciB2aWV3IGlzIGluaXRpYWxpemVkXG4gICAgICAgIGlmICghdGhpcy5fdmlld0luaXRpYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdzZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAnc2VsZWN0aW9uTW9kZScgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ2ZyZWV6ZUNvbHVtbnNUbycgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ2ZyZWV6ZUVuZENvbHVtbnNUbycgaW4gY2hhbmdlcyB8fFxuICAgICAgICAgICAgJ3NlbWFudGljSGlnaGxpZ2h0aW5nJyBpbiBjaGFuZ2VzXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncm93TmF2aWdhdGFibGUnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93cy5mb3JFYWNoKChyb3cpID0+IChyb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKHJvdy52YWx1ZSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSkpKTtcblxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlSXNTaG93bk5hdmlnYXRpb25Db2x1bW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncm93SGVpZ2h0JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dIZWlnaHRNYW51YWxseVNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2Uuc2V0VGFibGVSZWYodGhpcyk7XG5cbiAgICAgICAgdGhpcy5faXNHcm91cFRhYmxlID0gKHRoaXMuaW5pdGlhbFN0YXRlPy5pbml0aWFsR3JvdXBCeT8ubGVuZ3RoID8/IDApID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlld0luaXRpYXRlZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsU3RhdGU/LnNldEluaXRpYWxTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuaW5pdGlhbGl6ZURhdGFTb3VyY2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlU3RhdGVDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Db2x1bW5zKCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuY29uc3RydWN0VGFibGVNZXRhZGF0YSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVSb3dzUGlwZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvUGFnZVNjcm9sbGluZygpO1xuXG4gICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/Lmxpc3Rlbk9uVmlydHVhbFNjcm9sbCgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvUm93SGVpZ2h0Q2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Db2x1bW5Qcm9wZXJ0aWVzQ2hhbmdlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVdpZHRoQ2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVDb250YWluZXJNb3VzZUxlYXZlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Mb2FkaW5nQW5kUmVmb2N1c0NlbGwoKTtcblxuICAgICAgICB0aGlzLl9pbml0U2Nyb2xsUG9zaXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5leHBhbmRPbkluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kQWxsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGxUcmFuc2Zvcm0kXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+ICEhdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCAmJiAhIXRoaXMuX3RhYmxlQm9keSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgodHJhbnNmb3JtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7dHJhbnNmb3JtfXB4KWA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5fZm9jdXNhYmxlR3JpZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlR3JpZC5zaG9ydFJvd0ZvY3VzID0gJ2ZpcnN0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyBXaGVuIHRhYmxlIHJvd3MgYXJlIHNldCwgZW1pdCBhbiBldmVudCB0byBtYW5pcHVsYXRlIHRoZSB2aWV3IChlLmcuLCBzY3JvbGwgdG8gc29tZSByb3cpLlxuICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZEVtaXRSb3dzQ2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZW1pdHRlciA9IHRoaXMudGFibGVSb3dzU2V0O1xuICAgICAgICB0aGlzLl9vblpvbmVGcmVlKCgpID0+IHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCBjdXJyZW50IHN0YXRlL3NldHRpbmdzIG9mIHRoZSBUYWJsZS4gKi9cbiAgICBnZXRUYWJsZVN0YXRlKCk6IFRhYmxlU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVTZXJ2aWNlLmdldFRhYmxlU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIHNldFRhYmxlU3RhdGUoc3RhdGU6IFRhYmxlU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFRhYmxlU3RhdGUoc3RhdGUpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0YWJsZSBjb2x1bW5zIGRlZmluaXRpb24gbGlzdC4gKi9cbiAgICBnZXRUYWJsZUNvbHVtbnMoKTogVGFibGVDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnM/LnRvQXJyYXkoKSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGEgbGlzdCBvZiB2aXNpYmxlIHRhYmxlIGNvbHVtbnMuICovXG4gICAgZ2V0VmlzaWJsZVRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVDb2x1bW5zIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBTZXQgU29ydGluZyBydWxlcyAqL1xuICAgIHNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIFNvcnRpbmcgcnVsZXMgdG8gdGhlIGV4aXN0aW5nIG9uZXMgKi9cbiAgICBhZGRTb3J0KHNvcnRSdWxlczogQ29sbGVjdGlvblNvcnRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkU29ydChzb3J0UnVsZXMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCBGaWx0ZXIgcnVsZXMgKi9cbiAgICBmaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0RmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEZpbHRlciBydWxlICovXG4gICAgYWRkRmlsdGVyKGZpbHRlclJ1bGVzOiBDb2xsZWN0aW9uRmlsdGVyW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEZpbHRlcnMoZmlsdGVyUnVsZXMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgZmlsdGVycyBmb3IgdGhlIHByb3ZpZGVkIGZpZWxkcyAqL1xuICAgIHJlbW92ZUZpbHRlcihmaWVsZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5yZW1vdmVGaWx0ZXJzKGZpZWxkcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEdyb3VwcyAqL1xuICAgIGdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEFkZCBHcm91cHMgKi9cbiAgICBhZGRHcm91cChncm91cHM6IENvbGxlY3Rpb25Hcm91cFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRHcm91cHMoZ3JvdXBzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB2aXNpYmxlIHRhYmxlIGNvbHVtbnNcbiAgICAgKiBUaGUgb3JkZXIgaXMgbWF0dGVyXG4gICAgICogQHBhcmFtIGNvbHVtbnMgdGFibGUgY29sdW1ucyBuYW1lc1xuICAgICAqL1xuICAgIHNldENvbHVtbnMoY29sdW1uczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3QgY29sdW1uc09iamVjdDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgICAgICAgICAgY29sdW1uczogW10sXG4gICAgICAgICAgICBrZXlzOiBbXVxuICAgICAgICB9O1xuICAgICAgICB0YWJsZUNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1ucy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGhhdmUgc2FtZSBvcmRlciBvZiBjb2x1bW5zIGFzIHVzZXIgZGVmaW5lZC5cbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBjb2x1bW5zLmluZGV4T2YoYS5uYW1lKSAtIGNvbHVtbnMuaW5kZXhPZihiLm5hbWUpKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBhY2MuY29sdW1ucy5wdXNoKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICBhY2Mua2V5cy5wdXNoKGNvbHVtbi5rZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBjb2x1bW5zT2JqZWN0KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldENvbHVtbnMoY29sdW1uc09iamVjdC5jb2x1bW5zLCBjb2x1bW5zT2JqZWN0LmtleXMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEZyZWV6ZSB0YWJsZSB0byBjb2x1bW4gKi9cbiAgICBmcmVlemVUb0NvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgZW5kID8gKHRoaXMuZnJlZXplRW5kQ29sdW1uc1RvID0gY29sdW1uTmFtZSkgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKTtcblxuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZnJlZXplVG8oY29sdW1uTmFtZSwgZW5kKTtcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICB9XG5cbiAgICAvKiogVW5mcmVlemUgY29sdW1uICovXG4gICAgdW5mcmVlemUoY29sdW1uTmFtZTogc3RyaW5nLCBlbmQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBlbmQgPyB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zIDogdGhpcy5fZnJlZXphYmxlQ29sdW1ucztcbiAgICAgICAgY29uc3QgZnJlZXplVG9Db2x1bW5JbmRleCA9IGNvbHVtbnMuZ2V0KGNvbHVtbk5hbWUpID8/IC0xO1xuICAgICAgICBjb25zdCBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSA9IGNvbHVtbnNbZnJlZXplVG9Db2x1bW5JbmRleCAtIDFdO1xuXG4gICAgICAgIGVuZFxuICAgICAgICAgICAgPyAodGhpcy5mcmVlemVFbmRDb2x1bW5zVG8gPSBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSlcbiAgICAgICAgICAgIDogKHRoaXMuZnJlZXplQ29sdW1uc1RvID0gZnJlZXplVG9QcmV2aW91c0NvbHVtbk5hbWUpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSwgZW5kKTtcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcbiAgICB9XG5cbiAgICAvKiogZXhwYW5kIGFsbCByb3dzICovXG4gICAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBleHBhbmRhYmxlUm93cyA9IHRoaXMuX3RhYmxlUm93cy5maWx0ZXIoKHJvdykgPT4gcm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5UUkVFKTtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UubG9hZENoaWxkUm93cyhleHBhbmRhYmxlUm93cyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWFya0FzRXhwYW5kZWQoZXhwYW5kYWJsZVJvd3MpO1xuICAgICAgICB0aGlzLmFsbFJvd3NFeHBhbmRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXJrQXNFeHBhbmRlZChyb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgICAgIHJvd3MuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICBlLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiogY29sbGFwc2UgYWxsIHJvd3MgKi9cbiAgICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVSb3dzLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuYWxsUm93c0NvbGxhcHNlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIFNlYXJjaCBpbiB0YWJsZSAqL1xuICAgIHNlYXJjaChzZWFyY2hJbnB1dDogU2VhcmNoSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNlYXJjaChzZWFyY2hJbnB1dCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGluIHRhYmxlICovXG4gICAgc2V0Q3VycmVudFBhZ2UoY3VycmVudFBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q3VycmVudFBhZ2UoY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgU29ydCBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dTb3J0U2V0dGluZ3NJblRvb2xiYXIoc2hvd1NvcnRTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duU29ydFNldHRpbmdzSW5Ub29sYmFyJC5uZXh0KHNob3dTb3J0U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKiBUb29sYmFyIEZpbHRlciBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dGaWx0ZXJTZXR0aW5nc0luVG9vbGJhcihzaG93RmlsdGVyU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93bkZpbHRlclNldHRpbmdzSW5Ub29sYmFyJC5uZXh0KHNob3dGaWx0ZXJTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgR3JvdXAgU2V0dGluZ3MgYnV0dG9uIHZpc2liaWxpdHkgKi9cbiAgICBzaG93R3JvdXBTZXR0aW5nc0luVG9vbGJhcihzaG93R3JvdXBTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQubmV4dChzaG93R3JvdXBTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgQ29sdW1ucyBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dDb2x1bW5TZXR0aW5nc0luVG9vbGJhcihzaG93Q29sdW1uU2V0dGluZ3M6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXNTaG93bkNvbHVtblNldHRpbmdzSW5Ub29sYmFyJC5uZXh0KHNob3dDb2x1bW5TZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIERpc2FibGUgZmlsdGVyIGZyb20gY29sdW1uIGhlZGVyIG1lbnUgKi9cbiAgICBzZXRIZWFkZXJDb2x1bW5GaWx0ZXJpbmdEaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX2lzRmlsdGVyaW5nRnJvbUhlYWRlckRpc2FibGVkJC5uZXh0KGRpc2FibGVkKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IHRoZSByb3cgbmF2aWdhdGlvbiAqL1xuICAgIHNldFJvd05hdmlnYXRpb24ocm93SW5kZXg6IG51bWJlciwgcm93TmF2aWdhdGFibGU6IHN0cmluZyB8IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcm93Lm5hdmlnYXRhYmxlID0gaXNSb3dOYXZpZ2F0YWJsZShyb3cudmFsdWUsIHJvd05hdmlnYXRhYmxlKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpO1xuXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgcm93IGNoZWNrZWQgc3RhdGUuXG4gICAgICogQHBhcmFtIHJvd0luZGV4IEluZGV4IG9mIHRoZSByb3cuXG4gICAgICovXG4gICAgdG9nZ2xlU2VsZWN0YWJsZVJvdyhyb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cgfHwgcm93LnZhbHVlW3RoaXMuc2VsZWN0YWJsZUtleV0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLlNJTkdMRSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyhyb3cpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlTXVsdGlTZWxlY3RSb3cocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNoZWNrZWQgc3RhdGUgb2YgdGhlIHJvdy5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXggSW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgb2YgdGhlIGNoZWNrZWQgc3RhdGUuXG4gICAgICovXG4gICAgc2V0Um93Q2hlY2tlZFN0YXRlKHJvd0luZGV4OiBudW1iZXIsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cuY2hlY2tlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0YWJsZVJvdyhyb3dJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlIHRoZSByb3cgbmF2aWdhdGlvbiAqL1xuICAgIHJlbW92ZVJvd05hdmlnYXRpb24ocm93SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByb3cubmF2aWdhdGFibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpO1xuXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogTWFudWFsbHkgdHJpZ2dlcnMgY29sdW1uJ3Mgd2lkdGggcmVjYWxjdWxhdGlvbiAqL1xuICAgIHJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnNldENvbHVtbk5hbWVzKHRoaXMuX3Zpc2libGVDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubmFtZSkpO1xuICAgICAgICB0aGlzLl9zZXRGcmVlemFibGVJbmZvKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldHMgdGhlIG1heCBhbGxvd2VkIHdpZHRoIGZvciBhbGwgZnJlZXphYmxlIGNvbHVtbnMgKi9cbiAgICBnZXRNYXhBbGxvd2VkRnJlZXphYmxlQ29sdW1uc1dpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBUaGVtZWFibGUgc2Nyb2xsYmFyIGhhcyAwLjc1cmVtIGluIGRpbWVuc2lvbiAqL1xuICAgICAgICBjb25zdCBzY3JvbGxiYXJTaXplSW5QeCA9IDEyO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVdpZHRoUHggLSB0aGlzLl9maXhlZENvbHVtbnNQYWRkaW5nIC0gc2Nyb2xsYmFyU2l6ZUluUHggLSAxO1xuICAgIH1cblxuICAgIC8qKiBHZXQgdGFibGUgZGF0YSBzb3VyY2UgKi9cbiAgICBnZXREYXRhU291cmNlKCk6IFRhYmxlRGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBlbXB0eSByb3cgZm9yIGVkaXRpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBhZGRSb3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpO1xuXG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IGJ1aWxkTmV3Um93U2tlbGV0b24odGhpcy5lZGl0YWJsZVJvd1NrZWxldG9uLCB0aGlzLmNvbHVtbnMudG9BcnJheSgpKTtcbiAgICAgICAgbmV3Um93W3RoaXMuc2VtYW50aWNIaWdobGlnaHRpbmddID0gRURJVEFCTEVfUk9XX1NFTUFOVElDX1NUQVRFO1xuXG4gICAgICAgIHRoaXMuX2FkZGVkSXRlbXMudW5zaGlmdChuZXdSb3cpO1xuXG4gICAgICAgIGNvbnN0IG5ld1Jvd3MgPSB0aGlzLl9jcmVhdGVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhbbmV3Um93XSk7XG4gICAgICAgIHRoaXMuX25ld1RhYmxlUm93cyA9IFsuLi5uZXdSb3dzLCAuLi50aGlzLl9uZXdUYWJsZVJvd3NdO1xuXG4gICAgICAgIHRoaXMuX3NldFRhYmxlUm93cygpO1xuICAgICAgICB0aGlzLmVtcHR5Um93QWRkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBDYW5jZWxzIGVkaXRpbmcgYW5kIGRpc2NhcmRzIG5ld2x5IGFkZGVkIHJvd3MgKi9cbiAgICBjYW5jZWxFZGl0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXNldEVkaXRTdGF0ZSgpO1xuICAgICAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1pdHMgc2F2ZSBldmVudCBhbmQgcmVzZXRzIGVkaXRhYmxlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgc2F2ZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNhdmVSb3dzRXZlbnQ8VD4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlLmZldGNoKHRoaXMuZ2V0VGFibGVTdGF0ZSgpKTtcbiAgICAgICAgfSwgWy4uLnRoaXMuX2FkZGVkSXRlbXNdKTtcbiAgICAgICAgY29uc3QgZWRpdGFibGVDZWxsczogRWRpdGFibGVUYWJsZUNlbGxbXSA9IChbXSBhcyBFZGl0YWJsZVRhYmxlQ2VsbFtdKS5jb25jYXQuYXBwbHkoXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgIEFycmF5LmZyb20odGhpcy5fdGFibGVSb3dTZXJ2aWNlLmVkaXRhYmxlQ2VsbHMudmFsdWVzKCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZm9ybXMgPSBbLi4udGhpcy5jdXN0b21FZGl0YWJsZUNlbGxzLnRvQXJyYXkoKSwgLi4uZWRpdGFibGVDZWxsc10ubWFwKCh0KSA9PiB0LmZvcm0pO1xuXG4gICAgICAgIC8vIFRyaWdnZXIgZm9ybSByZXZhbGlkYXRpb25cbiAgICAgICAgZm9ybXMuZm9yRWFjaCgoZm9ybSkgPT4gZm9ybS5vblN1Ym1pdChudWxsIGFzIGFueSkpO1xuICAgICAgICBpZiAoZm9ybXMuc29tZSgoZm9ybSkgPT4gZm9ybS5pbnZhbGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVzZXRFZGl0U3RhdGUoKTtcbiAgICAgICAgdGhpcy5zYXZlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGN1cnJlbnQgcHJlc2V0IGZvciB0aGUgVGFibGUuICovXG4gICAgc2V0UHJlc2V0KGRhdGE6IFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQcmVzZXQgPSBkYXRhO1xuICAgICAgICBjb25zdCBuZXdTdGF0ZTogVGFibGVTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3RhYmxlU2VydmljZS5nZXREZWZhdWx0U3RhdGUoKSwgZGF0YSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRTb3J0KG5ld1N0YXRlLnNvcnRCeSk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRGaWx0ZXJzKG5ld1N0YXRlLmZpbHRlckJ5KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEdyb3VwcyhuZXdTdGF0ZS5ncm91cEJ5KTtcbiAgICAgICAgdGhpcy5zZXRDb2x1bW5zKG5ld1N0YXRlLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2VhcmNoKG5ld1N0YXRlLnNlYXJjaElucHV0KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmZyZWV6ZVRvKG5ld1N0YXRlLmZyZWV6ZVRvQ29sdW1uKTtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IG5ld1N0YXRlLnBhZ2UucGFnZVNpemU7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZShuZXdTdGF0ZS5wYWdlLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFRhYmxlU3RhdGUobmV3U3RhdGUpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGN1cnJlbnQgcHJlc2V0IGNvbmZpZ3VyYXRpb24uICovXG4gICAgZ2V0Q3VycmVudFByZXNldCgpOiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCB7XG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudFByZXNldCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gcmV0dXJuIG9iamVjdCBhcyBzaW1pbGFyIGFzIHRoZSBvcmlnaW5hbCBwcmVzZXQuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQcmVzZXQgPSB7IC4uLnRoaXMuX2N1cnJlbnRQcmVzZXQgfTtcbiAgICAgICAgY29uc3QgcHJlc2V0S2V5cyA9IE9iamVjdC5rZXlzKGN1cnJlbnRQcmVzZXQpO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdldFRhYmxlU3RhdGUoKTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50U3RhdGUpLmZvckVhY2goKHN0YXRlS2V5KSA9PiB7XG4gICAgICAgICAgICAvLyBTa2lwIHN0YXRlIGVudHJ5IGlmIGl0J3Mgbm90IHByZXNlbnQgaW4gcHJlc2V0IGFuZCBkb2Vzbid0IGhhdmUgYW55IHZhbHVlLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0YXRlS2V5ID09PSAnY29sdW1uS2V5cycgfHxcbiAgICAgICAgICAgICAgICAoKCFjdXJyZW50U3RhdGVbc3RhdGVLZXldIHx8XG4gICAgICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGN1cnJlbnRTdGF0ZVtzdGF0ZUtleV0pICYmIGN1cnJlbnRTdGF0ZVtzdGF0ZUtleV0/Lmxlbmd0aCA9PT0gMCkpICYmXG4gICAgICAgICAgICAgICAgICAgICFwcmVzZXRLZXlzLmluY2x1ZGVzKHN0YXRlS2V5KSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFByZXNldFtzdGF0ZUtleV0gPSBjdXJyZW50U3RhdGVbc3RhdGVLZXldO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY3VycmVudFByZXNldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW51YWxseSB0cmlnZ2VycyBsaXN0IGl0ZW0gZXZlbnQgbGlzdGVuZXJzIGZvciBkcmFnJmRyb3AgbGlzdCBkaXJlY3RpdmUuXG4gICAgICovXG4gICAgcmVmcmVzaERuZExpc3QoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZG5kRGlyZWN0aXZlPy5yZWZyZXNoUXVlcnlMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljYWxseSB0b2dnbGVzIGBleHBhbmRgIHN0YXRlIG9mIHRoZSByb3cgd2l0aCBkZWZpbmVkIGluZGV4LlxuICAgICAqIEBwYXJhbSByb3dJbmRleGVzIHJvdyBpbmRleGVzIGluY2x1ZGluZyBuZXN0ZWQgcm93cy5cbiAgICAgKlxuICAgICAqIFVzYWdlIGV4YW1wbGU6XG4gICAgICogKiBUbyB0b2dnbGUgZmlyc3QgbGV2ZWwgcm93LCBwYXNzIG9uZSBhcmd1bWVudDpcbiAgICAgKiBgYGBcbiAgICAgKiB0YWJsZS50b2dnbGVHcm91cFJvd3MoMCkgLy8gV2lsbCByZXN1bHQgaW4gdG9nZ2xpbmcgZmlyc3Qgcm93IGlmIGl0J3MgdHlwZSBpcyBgVGFibGVSb3dUeXBlLlRSRUVgIG9yIGBUYWJsZVJvd1R5cGUuR1JPVVBgLlxuICAgICAqIGBgYFxuICAgICAqICogVG8gdG9nZ2xlIG5lc3RlZCByb3dzLCBwYXNzIGFkZGl0aW9uYWwgYXJndW1lbnRzIG9mIGluZGV4ZXM6XG4gICAgICogYGBgXG4gICAgICogdGFibGUudG9nZ2xlR3JvdXBSb3dzKDAsIDEpIC8vIFdpbGwgcmVzdWx0IGluIHRvZ2dsaW5nIGZpcnN0IHJvb3Qgcm93LCB0aGVuIGl0J3Mgc2Vjb25kIGNoaWxkLlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRvZ2dsZUdyb3VwUm93cyguLi5yb3dJbmRleGVzOiBudW1iZXJbXSk6IHZvaWQge1xuICAgICAgICBsZXQgdGFibGVSb3c6IFRhYmxlUm93IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qgcm93SW5kZXggb2Ygcm93SW5kZXhlcykge1xuICAgICAgICAgICAgdGFibGVSb3cgPSB0YWJsZVJvdyA/IHRhYmxlUm93LmNoaWxkcmVuW3Jvd0luZGV4XSA6IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgICAgIGlmICh0YWJsZVJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuSVRFTSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVHcm91cFJvdyh0YWJsZVJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB1c2VkIHRvIGZvY3VzIGEgY2VsbCBpbiB0aGUgdGFibGUgdXRpbGl6aW5nIGEgRm9jdXNhYmxlQ2VsbFBvc2l0aW9uIGludGVyZmFjZS5cbiAgICAgKi9cbiAgICBmb2N1c0NlbGwocG9zaXRpb246IEZvY3VzYWJsZUNlbGxQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZUVsID0gdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgICAgIHRhYmxlRWwucm93c1twb3NpdGlvbi5yb3dJbmRleF0uY2VsbHNbcG9zaXRpb24uY29sSW5kZXhdLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZSBBUElcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Njcm9sbFRvT3ZlcmxhcHBlZENlbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVTY3JvbGxhYmxlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwoXG4gICAgICAgICAgICB0aGlzLl9ydGwsXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUsXG4gICAgICAgICAgICB0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYWxjdWxhdGluZ0xvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kbmRMb2FkaW5nU3RhdGUgPT09IGlzTG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG5kTG9hZGluZ1N0YXRlID0gaXNMb2FkaW5nO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVMb2FkaW5nKHRoaXMubG9hZGluZ1N0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuTVVMVElQTEVcbiAgICAgKi9cbiAgICBfdG9nZ2xlTXVsdGlTZWxlY3RSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuTVVMVElQTEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZWxlY3Rpb24gbW9kZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuX3RhYmxlUm93cztcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5maW5kSW5kZXgoKHJvdykgPT4gcm93ID09PSByb3dUb1RvZ2dsZSk7XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLm9uUmFuZ2VFbGVtZW50VG9nZ2xlZChzZWxlY3RlZEluZGV4LCBldmVudCBhcyBQb2ludGVyRXZlbnQgfCBLZXlib2FyZEV2ZW50KTtcblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLmFwcGx5VmFsdWVUb0VhY2hJblJhbmdlKChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd3NbaWR4XTtcbiAgICAgICAgICAgIGlmIChyb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLklURU0gfHwgcm93LmlzVHJlZSkge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgICAgICAgICAgICBjaGVja2VkID8gYWRkZWQucHVzaChyb3cpIDogcmVtb3ZlZC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseVRyaXN0YXRlU2VsZWN0aW9uKHJvdywgYWRkZWQsIHJlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIHNlbGVjdGFibGUgcm93IGluIFNlbGVjdGlvbk1vZGUuU0lOR0xFXG4gICAgICovXG4gICAgX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cocm93VG9Ub2dnbGU6IFRhYmxlUm93KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2VsZWN0aW9uIG1vZGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSAocm93VG9Ub2dnbGUuY2hlY2tlZCA9ICFyb3dUb1RvZ2dsZS5jaGVja2VkKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIC8vIHVuY2hlY2sgcHJldmlvdXNseSBjaGVja2VkXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cgPT09IHJvd1RvVG9nZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocm93LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlbW92ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY2hlY2tlZCA/IGFkZGVkLnB1c2gocm93VG9Ub2dnbGUpIDogcmVtb3ZlZC5wdXNoKHJvd1RvVG9nZ2xlKTtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2VsZWN0IC8gVW5zZWxlY3QgYWxsIHNlbGVjdGFibGUgcm93c1xuICAgICAqL1xuICAgIF90b2dnbGVBbGxTZWxlY3RhYmxlUm93cyhzZWxlY3RBbGw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZDogVGFibGVSb3c8VD5bXSA9IFtdO1xuXG4gICAgICAgIGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cuY2hlY2tlZCA9PT0gc2VsZWN0QWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBzZWxlY3RBbGw7XG4gICAgICAgICAgICBzZWxlY3RBbGwgPyBhZGRlZC5wdXNoKHJvdykgOiByZW1vdmVkLnB1c2gocm93KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcmFuZ2VTZWxlY3Rvci5yZXNldCgpO1xuXG4gICAgICAgIHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyA9IHNlbGVjdEFsbDtcblxuICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQsIHJlbW92ZWQsIHRydWUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlIHRhYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgKi9cbiAgICBfZW1pdFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50KGFkZGVkOiBUYWJsZVJvd1tdLCByZW1vdmVkOiBUYWJsZVJvd1tdLCBhbGw6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGdldFNlbGVjdGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cywgdGhpcy5zZWxlY3RhYmxlS2V5KVxuICAgICAgICAgICAgLmZpbHRlcigoeyBjaGVja2VkIH0pID0+IGNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0ZWQsXG4gICAgICAgICAgICBhZGRlZDogYWRkZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSxcbiAgICAgICAgICAgIGluZGV4OiBhZGRlZC5jb25jYXQocmVtb3ZlZCkubWFwKCh7IGluZGV4IH0pID0+IGluZGV4KSxcbiAgICAgICAgICAgIGFsbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNlbGxDbGljayhjb2xJZHg6IG51bWJlciwgcm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAocm93LnN0YXRlID09PSAncmVhZG9ubHknICYmIGlzVHJlZVJvd0ZpcnN0Q2VsbChjb2xJZHgsIHJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblJvd0NsaWNrKHJvdzogVGFibGVSb3c8VD4gfCBudWxsLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuc3RhdGUgIT09ICdyZWFkb25seScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCAmJiBldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YWJiYWJsZUVsZW1lbnQgPSB0aGlzLl90YWJiYWJsZVNlcnZpY2UuZ2V0VGFiYmFibGVFbGVtZW50KGV2ZW50VGFyZ2V0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAodGFiYmFibGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93TmF2aWdhdGUocm93KTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dBY3RpdmF0ZShyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1pdFJvd0FjdGl2YXRlKHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd3NBY3RpdmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2Yocm93KTtcbiAgICAgICAgdGhpcy5yb3dBY3RpdmF0ZS5lbWl0KG5ldyBUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4ocm93SW5kZXgsIHJvdy52YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBFeHBhbmQvQ29sbGFwc2UgZ3JvdXAgcm93XG4gICAgICovXG4gICAgX3RvZ2dsZUdyb3VwUm93KGdyb3VwUm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdEcm9wSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRhYmxlVGFibGVSb3coZ3JvdXBSb3cpO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwUm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihncm91cFJvdyk7XG4gICAgICAgIHRoaXMucm93VG9nZ2xlT3BlblN0YXRlLmVtaXQoXG4gICAgICAgICAgICBuZXcgVGFibGVSb3dUb2dnbGVPcGVuU3RhdGVFdmVudChncm91cFJvd0luZGV4LCBncm91cFJvdy52YWx1ZSwgZ3JvdXBSb3cuZXhwYW5kZWQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZW1pdFJvd05hdmlnYXRlKHJvdzogVGFibGVSb3c8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFyb3cubmF2aWdhdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKHJvdyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0TmF2aWdhdGVkUm93KSB7XG4gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0ZWRSb3dJbmRleCA9IHJvd0luZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3dOYXZpZ2F0ZS5lbWl0KG5ldyBUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4ocm93SW5kZXgsIHJvdy52YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKiBGZXRjaCBkYXRhIHNvdXJjZSBkYXRhLiAqL1xuICAgIGZldGNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2godGhpcy5nZXRUYWJsZVN0YXRlKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25UYWJsZVJvd3NDaGFuZ2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlVGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUNoZWNrZWRBbGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZUV4cGFuZGFibGVUYWJsZVJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3csIGZvcmNlRmV0Y2ggPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICByb3dUb1RvZ2dsZS5mb3JjZUZldGNoID0gZm9yY2VGZXRjaDtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAocm93VG9Ub2dnbGUuZXhwYW5kZWQgPSAhcm93VG9Ub2dnbGUuZXhwYW5kZWQpO1xuXG4gICAgICAgIGZpbmRSb3dDaGlsZHJlbihyb3dUb1RvZ2dsZSwgdGhpcy5fdGFibGVSb3dzKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIC8vIGlmIHBhcmVudCBpcyBjb2xsYXBzZWQgd2Ugd2FudCB0byBoaWRlIGFsbCBuZXN0ZWQgaXRlbXNcbiAgICAgICAgICAgIGlmICghZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGlzIGV4cGFuZGVkLCB3ZSB3YW50IHRvIHNob3cgb25seSBpdGVtcyB3aGljaCBkaXJlY3QgcGFyZW50cyBhcmUgZXhwYW5kZWQgYXMgd2VsbFxuICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgcm93LmhpZGRlbiA9ICFnZXRSb3dQYXJlbnRzKHJvdywgcm93VG9Ub2dnbGUpLmV2ZXJ5KChwYXJlbnQpID0+IHBhcmVudC5leHBhbmRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25TcHlJbnRlcnNlY3QoaW50ZXJzZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnRlcnNlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhZ2U6IHsgY3VycmVudFBhZ2UsIHBhZ2VTaXplIH1cbiAgICAgICAgfSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS50b3RhbEl0ZW1zJC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGFzdFBhZ2UgPSBNYXRoLmNlaWwodG90YWxJdGVtcyAvIChwYWdlU2l6ZSB8fCB0b3RhbEl0ZW1zKSk7XG4gICAgICAgIGlmIChjdXJyZW50UGFnZSA+PSBsYXN0UGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSArIDEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogTWFudWFsbHkgdXBkYXRlIGluZGV4IGFmdGVyIHdlIGFkZCBuZXcgaXRlbXMgdG8gdGhlIG1haW4gYXJyYXkgKi9cbiAgICBwcml2YXRlIF9yZUluZGV4VGFibGVSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MubWFwKChyb3csIGluZGV4KSA9PiAocm93LmluZGV4ID0gaW5kZXgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVSb3dzUGlwZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLml0ZW1zJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBtYXAgc291cmNlIGl0ZW1zIHRvIHRhYmxlIHJvd3NcbiAgICAgICAgICAgICAgICAgICAgbWFwKChzb3VyY2U6IFRbXSkgPT4gdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlKSksXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBpdGVtcyB0byBzaG93IGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJvd3M6IFRhYmxlUm93W10pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVHJlZVRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvZihyb3dzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fdGFibGVTZXJ2aWNlLmdyb3VwUnVsZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChncm91cFJ1bGVzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuZ3JvdXBUYWJsZVJvd3Mocm93cywgZ3JvdXBSdWxlcy52YWx1ZXMoKSwgZ3JvdXBSdWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocm93cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByb3dzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNjcm9sbGluZyAmJiB0aGlzLmdldFRhYmxlU3RhdGUoKS5wYWdlLmN1cnJlbnRQYWdlID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWy4uLnRoaXMuX3RhYmxlUm93cywgLi4ucm93c11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhyb3dzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGRJdGVtcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TWFwID0gbmV3IE1hcDxUYWJsZVJvdzxUPiwgVGFibGVSb3c8VD5bXT4oKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgocm93SXRlbXMsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93TWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMocm93SXRlbXMpLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnRSb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZXZlbCA9IHBhcmVudFJvdy5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhcGFyZW50Um93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93TWFwO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd3MsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3Muc3BsaWNlKHBhcmVudFJvdy5pbmRleCArIHBhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggKyAxLCAwLCAuLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cuY2hpbGRyZW4ucHVzaCguLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cubGFzdENoaWxkID0gcGFyZW50Um93LmNoaWxkcmVuW3BhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlU3RhdGVDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2V0Q2hhbmdlZC5lbWl0KHRoaXMuZ2V0Q3VycmVudFByZXNldCgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm5lZWRGZXRjaCRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX3RhYmxlU2VydmljZS5nZXRUYWJsZVN0YXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiAhIXN0YXRlICYmICEhdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2goc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlcyQuc3Vic2NyaWJlKChydWxlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzR3JvdXBUYWJsZSA9IHJ1bGVzLnNpemUgPiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zdGF0ZUNoYW5nZSQuc3Vic2NyaWJlKCh7IHR5cGUsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ2hhbmdlLmVtaXQobmV3IFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQobmV3IFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmcmVlemUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GcmVlemUuZW1pdChuZXcgVGFibGVDb2x1bW5GcmVlemVFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlLmVtaXQobmV3IFRhYmxlR3JvdXBDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQobmV3IFRhYmxlUGFnZUNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXcgVGFibGVTb3J0Q2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd1N0YXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93U3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzJC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlPy5kYXRhUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yb3dDaGlsZHJlbkNvdW50KHJvdywgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGNvdW50KSA9PiByb3cuZm9yY2VGZXRjaCB8fCBjb3VudCA+IHJvdy5jaGlsZHJlbi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocm93LmZvcmNlRmV0Y2ggPSBmYWxzZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHJvdy5jaGlsZHJlbi5sZW5ndGggLyBzdGF0ZS5wYWdlLnBhZ2VTaXplKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2UucGFnZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2U/LmZldGNoKHJvd1N0YXRlLCBbcm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DZWxsQ2xpY2soZXZ0LmluZGV4LCBldnQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MoZXZ0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93JC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlUm93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZU11bHRpU2VsZWN0Um93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KGV2dC5yb3csIGV2dC5ldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZTogVFtdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgICAgIGxldCByb3dzOiBUYWJsZVJvdzxUPltdO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkge1xuICAgICAgICAgICAgcm93cyA9IHRoaXMuX2NyZWF0ZVRyZWVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93cyA9IGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd05hdmlnYXRhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb21wYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyAmJiB0aGlzLmZvcmNlQ2hlY2tlZEFsbFN0YXRlKSB7XG4gICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gcm93LmNoZWNrZWQgfHwgdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVUcmVlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlOiBUW10pOiBUYWJsZVJvdzxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGlzVGFibGVSb3coaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdChzb3VyY2UgYXMgVGFibGVSb3dbXSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHRoaXMucm93Q29tcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkU3RhdGVLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dOYXZpZ2F0YWJsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRUYWJsZVJvd3Mocm93cyA9IHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFsuLi50aGlzLl9uZXdUYWJsZVJvd3MsIC4uLnRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3NdO1xuICAgICAgICB0aGlzLl9yZUluZGV4VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcblxuICAgICAgICB0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoICYmICF0aGlzLl9jb2x1bW5zV2lkdGhTZXQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zV2lkdGhTZXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZpc2libGVUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93c1Zpc2libGUgPSB0aGlzLl90YWJsZVJvd3MuZmlsdGVyKChyb3cpID0+ICFyb3cuaGlkZGVuKTtcblxuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dzSW5WaWV3cG9ydCgwLCB0aGlzLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvUm93SGVpZ2h0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuY29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiBBcnJheS5mcm9tKFJPV19IRUlHSFQudmFsdWVzKCkpLmluY2x1ZGVzKHRoaXMucm93SGVpZ2h0KSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5fcm93SGVpZ2h0TWFudWFsbHlTZXQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnREZW5zaXR5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gUk9XX0hFSUdIVC5nZXQoY29udGVudERlbnNpdHkpID8/IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlLnJvd0hlaWdodCA9IHRoaXMucm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgJiYgIXByZXZDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgICAgICAubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDb2x1bW5zID0gdGhpcy5nZXRUYWJsZVN0YXRlKCkuY29sdW1ucztcblxuICAgICAgICAgICAgdGhpcy5fYnVpbGRDb2x1bW5zTWFwKGNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQubmV4dChjb2x1bW5zKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxTdGF0ZVNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29sdW1ucyhbLi4uc3RhdGVDb2x1bW5zLCAuLi5uZXdDb2x1bW5zXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTdGF0ZVNldCA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgICAgICAgICAgaWYgKCFlcXVhbCh1cGRhdGVkQ29sdW1ucywgY3VycmVudENvbHVtbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnN0YXRlQ2hhbmdlJC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogeyBwcmV2aW91czogY3VycmVudENvbHVtbnMsIGN1cnJlbnQ6IHVwZGF0ZWRDb2x1bW5zIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuY29sdW1uc0NoYW5nZSQubmV4dCh7IHByZXZpb3VzOiBjdXJyZW50Q29sdW1ucywgY3VycmVudDogdXBkYXRlZENvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgdmlzaWJsZSBjb2x1bW5zIGZvciByZW5kZXJpbmcgcHVycG9zZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uc0RlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMsIGdyb3VwQnkgfSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBncm91cGVkQ29sdW1uc1RvSGlkZSA9IGdyb3VwQnkuZmlsdGVyKCh7IHNob3dBc0NvbHVtbiB9KSA9PiAhc2hvd0FzQ29sdW1uKS5tYXAoKHsgZmllbGQgfSkgPT4gZmllbGQpO1xuXG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSBjb2x1bW5zIC8vIG5lZWQgdG8gc3RhcnQgbWFwcGluZyBmcm9tIHN0YXRlLmNvbHVtbnMgbGlzdCB0byBrZWVwIHJpZ2h0IG9yZGVyXG4gICAgICAgICAgICAubWFwKChuYW1lKSA9PiBjb2x1bW5zRGVmaW5pdGlvbi5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbik6IGNvbHVtbiBpcyBUYWJsZUNvbHVtbiA9PiAhIWNvbHVtbilcbiAgICAgICAgICAgIC5maWx0ZXIoKHsga2V5IH0pID0+ICFncm91cGVkQ29sdW1uc1RvSGlkZS5pbmNsdWRlcyhrZXkpKTtcblxuICAgICAgICBjb25zdCBbdmlzaWJsZUNvbHVtbnMsIHBvcHBpbmdDb2x1bW5zXSA9IGFsbENvbHVtbnMucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5yZXNwb25zaXZlU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjY1tjb2x1bW4ucmVzcG9uc2l2ZVN0YXRlID09PSAndmlzaWJsZScgPyAwIDogMV0ucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1tdLCBbXV0gYXMgVGFibGVDb2x1bW5bXVtdXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFZpc2libGVDb2x1bW5zKHZpc2libGVDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFBvcHBpbmdDb2x1bW5zKHBvcHBpbmdDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRhYmxlQ29sdW1uc0xlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVGFibGVDb2x1bW5zTGVuZ3RoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtbnNMZW5ndGggPSB0aGlzLl92aXNpYmxlQ29sdW1ucy5sZW5ndGggKyAodGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biA/IDEgOiAwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX2lzU2hvd25OYXZpZ2F0aW9uQ29sdW1uJC5uZXh0KHRoaXMuX3RhYmxlUm93cy5zb21lKCh0YWJsZVJvdykgPT4gdGFibGVSb3cubmF2aWdhdGFibGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZyZWV6YWJsZUluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMgPSBnZXRGcmVlemFibGVDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUNvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgPSBnZXRGcmVlemFibGVFbmRDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuZml4ZWQgPSAhIXRoaXMuZml4ZWQgfHwgISF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgISF0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemU7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5fZnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgIGNvbHVtbi5fZW5kRnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9idWlsZENvbHVtbnNNYXAoY29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleVRvQ29sdW1uTWFwID0gbmV3IE1hcChjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBbY29sdW1uLmtleSwgY29sdW1uXSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2hlY2tlZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZVJvd3MgPSBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSk7XG4gICAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBzZWxlY3RhYmxlUm93cy5maWx0ZXIoKHIpID0+IHIuY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrZWRBbGwgPSB0b3RhbFNlbGVjdGVkLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVJvd3MubGVuZ3RoICYmIHNlbGVjdGFibGVSb3dzLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZEFueSA9IHRvdGFsU2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZFN0YXRlID0gdGhpcy5fY2hlY2tlZEFsbCA/IHRydWUgOiB0aGlzLl9jaGVja2VkQW55ID8gbnVsbCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BhZ2F0ZXMgdHJpc3RhdGUgc2VsZWN0aW9uIG1vZGUgdG8gdGhlIHRyZWUuIEl0IHN0YXJ0cyB3aXRoIHVwZGF0aW5nIGEgc3RhdGUgZm9yIGFsbCB0aGUgcGFyZW50cyBhbmQgdGhlblxuICAgICAqIHRvIGNoaWxkcmVuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYXBwbHlUcmlzdGF0ZVNlbGVjdGlvbihyb3c6IFRhYmxlUm93LCBhZGRlZFJvd3M6IFRhYmxlUm93PFQ+W10sIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVUcmlzdGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvUGFyZW50cyhyb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4ocm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FwcGx5U2VsZWN0aW9uVG9QYXJlbnRzKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSByb3cucGFyZW50O1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50Um93KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihjdXJyZW50Um93LCB0aGlzLl90YWJsZVJvd3MpLmZpbHRlcigocikgPT4gci5wYXJlbnQgPT09IGN1cnJlbnRSb3cpO1xuICAgICAgICAgICAgY29uc3QgdG90YWxDaGVja2VkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgICAgICBjb25zdCB0b3RhbEluZGV0ZXJtaW5hdGU6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoci5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hlY2tlZC5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoci5jaGVja2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSW5kZXRlcm1pbmF0ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEFsbCA9IHRvdGFsQ2hlY2tlZC5sZW5ndGggPT09IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRBbnkgPSB0b3RhbENoZWNrZWQubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkID0gY2hlY2tlZEFsbCA/IHRydWUgOiBjaGVja2VkQW55IHx8IHRvdGFsSW5kZXRlcm1pbmF0ZS5sZW5ndGggPiAwID8gbnVsbCA6IGZhbHNlO1xuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkIHx8IGN1cnJlbnRSb3cuY2hlY2tlZCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gYWRkZWRSb3dzLnB1c2goY3VycmVudFJvdylcbiAgICAgICAgICAgICAgICA6IHJlbW92ZWRSb3dzLnB1c2goY3VycmVudFJvdyk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRSb3cgPSBjdXJyZW50Um93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHRoaXMuX3RhYmxlUm93cywgcm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvUGFnZVNjcm9sbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNjcm9sbERpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuc2Nyb2xsZWQoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLnBhZ2VTY3JvbGxpbmcpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5nZXRTY3JvbGxUb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsZWQuZW1pdChzY3JvbGxUb3ApO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgaGF2aW5nIHR3byBwbGFjZXMgdG8gcmVjb3JkIHRoaXMgcG9zc2l0aW9uLCB3ZSBjb3VsZCBqdXN0IHN1YnNjcmliZSBvbmNlLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlU3RhdGUoKS5zY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Db2x1bW5Qcm9wZXJ0aWVzQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5tYXJrRm9yQ2hlY2skLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5kZXRlY3RDaGFuZ2VzJC5waXBlKGRlYm91bmNlVGltZSg1KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fdGFibGVDb250YWluZXJTY3JvbGxXaWR0aCA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnVwZGF0ZUZyb3plbkNvbHVtbnNXaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl90YWJsZVNjcm9sbFdpZHRoID0gdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlQ29udGFpbmVyTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5oaWRlUmVzaXplcigpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2Nyb2xsUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbiB8fCB0aGlzLl90YWJsZVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuaW5pdGlhbGl6ZVNjcm9sbFRvcChzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlc2V0cyBlZGl0YWJsZSByb3dzIGRpc2NhcmRpbmcgdGhlIGVkaXRhYmxlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVzZXRFZGl0U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25ld1RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJC5waXBlKGZpbHRlcigobG9hZGluZ1N0YXRlKSA9PiAhbG9hZGluZ1N0YXRlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uICYmIHRoaXMuX2ZvY3VzYWJsZUdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzYWJsZUdyaWQuZm9jdXNDZWxsKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29uWm9uZUZyZWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZyQubmV4dCh0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoJC5uZXh0KHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbHVtbldpZHRoID0gdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93blxuICAgICAgICAgICAgPyBTRUxFQ1RJT05fQ09MVU1OX1dJRFRILmdldCh0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIudmFsdWUpID8/IDBcbiAgICAgICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrQ2VsbE1vY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5jZWxsTW9ja1Zpc2libGUkLm5leHQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuZml4ZWRXaWR0aCAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKSA+ICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjwhLS0gVG9vbGJhciAtLT5cbjxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInRhYmxlVG9vbGJhclwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVUb29sYmFyLmNvbnRlbnRUZW1wbGF0ZVJlZlwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIl90b29sYmFyQ29udGV4dFwiXG4+PC9uZy1jb250YWluZXI+XG5cbjxmZC1idXN5LWluZGljYXRvclxuICAgIFtsb2FkaW5nXT1cIihfdGFibGVTZXJ2aWNlLnRhYmxlTG9hZGluZyQgfCBhc3luYykgPT09IHRydWUgJiYgX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgIFtibG9ja109XCJ0cnVlXCJcbj5cbiAgICA8IS0tIFRhYmxlIENvbnRhaW5lciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19jb250YWluZXJcIiAjdGFibGVDb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGFibGUgY29sdW1uIHJlc2l6ZXIgZm9yIHZpc3VhbGx5IHJlcHJlc2VudGluZyB0aGUgcmVzaXppbmcgcHJvY2VzcyAtLT5cbiAgICAgICAgPGZkcC10YWJsZS1jb2x1bW4tcmVzaXplciAqbmdJZj1cImVuYWJsZURyYWdSZXNpemVcIiBjbGFzcz1cImZkcC10YWJsZV9fY29sdW1uLXJlc2l6ZXJcIj48L2ZkcC10YWJsZS1jb2x1bW4tcmVzaXplcj5cbiAgICA8L2Rpdj5cbjwvZmQtYnVzeS1pbmRpY2F0b3I+XG5cbjwhLS0gVGFibGUgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3RhYmxlVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fYm9keSBmZC1zY3JvbGxiYXJcIlxuICAgICAgICBbY2xhc3MuZmRwLXRhYmxlX19ib2R5LS12aXJ0dWFsLXNjcm9sbF09XCIhIV92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsXCJcbiAgICAgICAgZmRwVGFibGVTY3JvbGxhYmxlXG4gICAgICAgICN0YWJsZVNjcm9sbGFibGU9XCJ0YWJsZVNjcm9sbGFibGVcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImJvZHlIZWlnaHRcIlxuICAgICAgICBbY2xhc3MuZml4ZWQtaGVpZ2h0XT1cIiEhYm9keUhlaWdodFwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwicGFnZVNjcm9sbGluZyA/ICdmZWVkJyA6IG51bGxcIlxuICAgICAgICBbY2xhc3MuZmQtdGFibGUtLWZpeGVkXT1cIl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgZml4ZWRcIlxuICAgID5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICBmZC10YWJsZVxuICAgICAgICAgICAgW2F0dHIucm9sZV09XCJpc1RyZWVUYWJsZSA/ICd0cmVlZ3JpZCcgOiAnZ3JpZCdcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtdGFibGVfX2JvZHktdGFibGVcIlxuICAgICAgICAgICAgW2FsbENlbGxzRm9jdXNhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcEluXT1cIl9wb3BwaW5nQ29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZS0tbm8tb3V0ZXItYm9yZGVyXT1cIm5vT3V0ZXJCb3JkZXJzXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dGhlYWQgZmQtdGFibGUtaGVhZGVyIGNsYXNzPVwiZmRwLXRhYmxlX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLWhlYWRlci1yb3dcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpeGVkXT1cImZpeGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2hvd25TZWxlY3Rpb25Db2x1bW5dPVwiaXNTZWxlY3Rpb25Db2x1bW5TaG93blwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkU3RhdGVdPVwiX2NoZWNrZWRTdGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIl9zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtmcmVlemVDb2x1bW5zVG9dPVwiZnJlZXplQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUVuZENvbHVtbnNUb109XCJmcmVlemVFbmRDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiX29uUm93Q2xpY2sobnVsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVTZWxlY3Rpb25DaGVja2JveF09XCJfZGF0YVNvdXJjZVRhYmxlUm93cy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cblxuICAgICAgICAgICAgPHRib2R5XG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhIV90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAmJiBfdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoID4gMDsgZWxzZSBlbXB0eVRhYmxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIGZkLXRhYmxlLWJvZHlcbiAgICAgICAgICAgICAgICBmZGtEbmRMaXN0XG4gICAgICAgICAgICAgICAgI3RhYmxlQm9keVxuICAgICAgICAgICAgICAgIFtkcmFnb3ZlclByZWRpY2F0ZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdvdmVyUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICBbZHJvcFByZWRpY2F0ZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BQcmVkaWNhdGVcIlxuICAgICAgICAgICAgICAgIFtub0JvcmRlclhdPVwibm9Cb3JkZXJYIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgW25vQm9yZGVyWV09XCJub0JvcmRlclkgfHwgbm9Cb3JkZXJzXCJcbiAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwicGFnZVNjcm9sbGluZyA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cIl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgW2Ryb3BNb2RlXT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcE1vZGUgPz8gJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgKGl0ZW1Ecm9wcGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BJdGVtRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nKT1cIl9jYWxjdWxhdGluZ0xvYWRpbmcoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyb3BDYW5jZWxsZWQpPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wQ2FuY2VsbGVkKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0luZGV4IG9mIF90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI7IHRyYWNrQnk6IF9yb3dUcmFja0J5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfdGFibGVSb3dzVmlzaWJsZVtyb3dJbmRleF0gYXMgcm93XCIgW25nU3dpdGNoXT1cInJvdy50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLWdyb3VwLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXlUb0NvbHVtbk1hcF09XCJfa2V5VG9Db2x1bW5NYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUNvbHVtbnNMZW5ndGhdPVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2VtaXRSb3dBY3RpdmF0ZShyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0RuZEl0ZW1dPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwbHlEcmFnSXRlbUNsYXNzXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3NlcyA6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInJvd3NBY3RpdmFibGUgfHwgISFyb3cubmF2aWdhdGFibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb2N1c2FibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvdmVyYWJsZV09XCJyb3dzQWN0aXZhYmxlIHx8IGlzU2VsZWN0aW9uQ29sdW1uU2hvd24gfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJyb3dJbmRleCA9PT0gX25hdmlnYXRlZFJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0QWN0aXZlXT1cImhpZ2hsaWdodE5hdmlnYXRlZFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiaXNUcmVlVGFibGUgPyByb3cubGV2ZWwgKyAxIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX29uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BTdGFydCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWFpbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtdGFibGVfX3Jvdy0tZHJhZ2dhYmxlXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVLZXldPVwic2VsZWN0YWJsZUtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZVRyaXN0YXRlTW9kZV09XCJlbmFibGVUcmlzdGF0ZU1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUNvbHVtbnNUb109XCJmcmVlemVDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy50eXBlID09PSAnaXRlbScgJiYgX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1wb3BwaW5nLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3NlcyA6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrZWQpPVwiX29uQ2VsbENsaWNrKCRldmVudC5pbmRleCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAocm93LmNoaWxkSXRlbXNMb2FkaW5nJCB8IGFzeW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5dPVwiJ2F1dG8gMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZXM9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjYwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExhc3QgcmVuZGVyZWQgY2hpbGQgcm93LiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cucGFyZW50Py5sYXN0Q2hpbGQ/LmluZGV4ID09PSByb3cuaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHJvdy5wYXJlbnQhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZCAqIC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX29uU3B5SW50ZXJzZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuXG4gICAgICAgICAgICA8dGJvZHkgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCIgY2xhc3M9XCJmZC10YWJsZV9fYm9keV9fZm9jdXMtbW9ja1wiPjwvdGJvZHk+XG5cbiAgICAgICAgICAgIDwhLS0gdGhlIHRib2R5IGVsZW1lbnQgYmVsb3cgaXMgc28gdGhlIHNjcm9sbGJhciByZW5kZXJzIGNvcnJlY3RseSAtLT5cbiAgICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsXCI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEwMCVcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHRcIj48L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBFbXB0eSBUYWJsZSBNZXNzYWdlIC0tPlxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVGVtcGxhdGU+XG4gICAgPHRib2R5ICpuZ0lmPVwiIV9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keT5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiIHR5cGU9XCJ0ZXh0XCIgdGV4dExpbmVzPVwiMVwiIHdpZHRoPVwiNjAlXCI+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cblxuICAgIDx0Ym9keSAqbmdJZj1cIl9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keSBjbGFzcz1cImZkcC10YWJsZV9fZW1wdHlcIj5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdz5cbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwiZmQtdGFibGVfX2NlbGwtLW5vLWRhdGFcIiBbYXR0ci5jb2xzcGFuXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19lbXB0eS10YWJsZS1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNub0RhdGFXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkcC10YWJsZS1uby1kYXRhLXdyYXBwZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhbm9EYXRhV3JhcHBlci5oYXNDaGlsZE5vZGVzKCkgJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbXB0eVRhYmxlTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUuZGVmYXVsdEVtcHR5TWVzc2FnZScgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub1Zpc2libGVDb2x1bW5zTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUubm9WaXNpYmxlQ29sdW1uc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuIl19
1701
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBSU4sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwSCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQiw0QkFBNEIsRUFFNUIsc0JBQXNCLEVBQ3RCLHNCQUFzQixJQUFJLHdCQUF3QixFQUNsRCx3QkFBd0IsRUFDeEIsT0FBTyxFQUVQLGFBQWEsRUFDYixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFDVixzQkFBc0IsRUFDekIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FB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QkFJRSxXQUFXO3NCQURuQixNQUFNO2dCQUlFLGFBQWE7c0JBRHJCLE1BQU07Z0JBSUUsSUFBSTtzQkFEWixNQUFNO2dCQUlFLE1BQU07c0JBRGQsTUFBTTtnQkFJRSxhQUFhO3NCQURyQixNQUFNO2dCQUlFLFlBQVk7c0JBRHBCLE1BQU07Z0JBSVAsZUFBZTtzQkFEZCxNQUFNO2dCQUlQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlFLFdBQVc7c0JBRG5CLE1BQU07Z0JBSUUsZUFBZTtzQkFEdkIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSW5CLGNBQWM7c0JBRHRCLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUlsQixLQUFLO3NCQURiLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUl4QyxjQUFjO3NCQUR0QixTQUFTO3VCQUFDLDRCQUE0QjtnQkFJdEIsVUFBVTtzQkFEMUIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUkzQixhQUFhO3NCQUQ3QixTQUFTO3VCQUFDLGdCQUFnQjtnQkFJbEIsT0FBTztzQkFEZixlQUFlO3VCQUFDLFdBQVc7Z0JBSW5CLG1CQUFtQjtzQkFEM0IsZUFBZTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBSWhELFlBQVk7c0JBRHBCLFlBQVk7dUJBQUMsYUFBYTtnQkFpSTNCLGFBQWE7c0JBRFosV0FBVzt1QkFBQyx1QkFBdUI7Z0JBMkM1QixPQUFPO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRyYWNrQnlGdW5jdGlvbixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nU3dpdGNoRGVmYXVsdCwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERuZExpc3REaXJlY3RpdmUsXG4gICAgRHJhZ0FuZERyb3BNb2R1bGUsXG4gICAgRkRLX0ZPQ1VTQUJMRV9HUklEX0RJUkVDVElWRSxcbiAgICBGb2N1c2FibGVDZWxsUG9zaXRpb24sXG4gICAgRm9jdXNhYmxlR3JpZERpcmVjdGl2ZSxcbiAgICBGb2N1c2FibGVHcmlkRGlyZWN0aXZlIGFzIEZvY3VzYWJsZUdyaWREaXJlY3RpdmVfMSxcbiAgICBJbnRlcnNlY3Rpb25TcHlEaXJlY3RpdmUsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBSYW5nZVNlbGVjdG9yLFxuICAgIFJlcGVhdERpcmVjdGl2ZSxcbiAgICByZXNpemVPYnNlcnZhYmxlLFxuICAgIFJ0bFNlcnZpY2UsXG4gICAgVGFiYmFibGVFbGVtZW50U2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCdXN5SW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1c3ktaW5kaWNhdG9yJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHlNb2RlLFxuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVyc1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IFNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NrZWxldG9uJztcbmltcG9ydCB7XG4gICAgVGFibGVDb21wb25lbnQgYXMgQ29yZVRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlU2VydmljZSBhcyBDb3JlVGFibGVTZXJ2aWNlLFxuICAgIFRhYmxlQ29tcG9uZW50IGFzIEZkVGFibGVDb21wb25lbnQsXG4gICAgVGFibGVCb2R5RGlyZWN0aXZlLFxuICAgIFRhYmxlQ2VsbERpcmVjdGl2ZSxcbiAgICBUYWJsZUhlYWRlckRpcmVjdGl2ZSxcbiAgICBUYWJsZVJvd0RpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGFibGUnO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCwgaXNKc09iamVjdCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7XG4gICAgYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuLFxuICAgIGJ1aWxkTmV3Um93U2tlbGV0b24sXG4gICAgQ29sbGVjdGlvbkZpbHRlcixcbiAgICBDb2xsZWN0aW9uR3JvdXAsXG4gICAgQ29sbGVjdGlvblNvcnQsXG4gICAgY29udmVydE9iamVjdHNUb1RhYmxlUm93cyxcbiAgICBjb252ZXJ0VHJlZU9iamVjdHNUb1RhYmxlUm93cyxcbiAgICBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdCxcbiAgICBERUZBVUxUX0hJR0hMSUdIVElOR19LRVksXG4gICAgRURJVEFCTEVfUk9XX1NFTUFOVElDX1NUQVRFLFxuICAgIEVkaXRhYmxlVGFibGVDZWxsLFxuICAgIEZEUF9UQUJMRV9EUkFHR0FCTEVfRElSRUNUSVZFLFxuICAgIEZEUF9UQUJMRV9TVEFURV9ESVJFQ1RJVkUsXG4gICAgRkRQX1RBQkxFX1ZJUlRVQUxfU0NST0xMX0RJUkVDVElWRSxcbiAgICBmaW5kUm93Q2hpbGRyZW4sXG4gICAgZ2V0RnJlZXphYmxlQ29sdW1ucyxcbiAgICBnZXRGcmVlemFibGVFbmRDb2x1bW5zLFxuICAgIGdldFJvd1BhcmVudHMsXG4gICAgZ2V0U2VsZWN0YWJsZVJvd3MsXG4gICAgaXNSb3dOYXZpZ2F0YWJsZSxcbiAgICBpc1RhYmxlUm93LFxuICAgIGlzVHJlZVJvd0ZpcnN0Q2VsbCxcbiAgICBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCxcbiAgICBST1dfSEVJR0hULFxuICAgIFJvd0NsYXNzZXNQaXBlLFxuICAgIFJvd0NvbXBhcmF0b3IsXG4gICAgU2F2ZVJvd3NFdmVudCxcbiAgICBTRUxFQ1RJT05fQ09MVU1OX1dJRFRILFxuICAgIFNlbGVjdGlvbk1vZGUsXG4gICAgU2VsZWN0aW9uTW9kZVZhbHVlLFxuICAgIFNFTUFOVElDX0hJR0hMSUdIVElOR19DT0xVTU5fV0lEVEgsXG4gICAgVGFibGUsXG4gICAgVGFibGVDb2x1bW4sXG4gICAgVGFibGVDb2x1bW5GcmVlemVFdmVudCxcbiAgICBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UsXG4gICAgVGFibGVDb2x1bW5zQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVEYXRhU291cmNlLFxuICAgIFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICBUYWJsZURyYWdnYWJsZSxcbiAgICBUYWJsZUZpbHRlckNoYW5nZUV2ZW50LFxuICAgIFRhYmxlR3JvdXBDaGFuZ2VFdmVudCxcbiAgICBUYWJsZUhlYWRlclJlc2l6ZXJEaXJlY3RpdmUsXG4gICAgVGFibGVJbml0aWFsU3RhdGUsXG4gICAgVGFibGVQYWdlQ2hhbmdlRXZlbnQsXG4gICAgVGFibGVSZXNwb25zaXZlU2VydmljZSxcbiAgICBUYWJsZVJvdyxcbiAgICBUYWJsZVJvd0FjdGl2YXRlRXZlbnQsXG4gICAgVGFibGVSb3dDbGFzcyxcbiAgICBUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50LFxuICAgIFRhYmxlUm93U2VydmljZSxcbiAgICBUYWJsZVJvd1RvZ2dsZU9wZW5TdGF0ZUV2ZW50LFxuICAgIFRhYmxlUm93VHlwZSxcbiAgICBUYWJsZVNjcm9sbGFibGUsXG4gICAgVGFibGVTY3JvbGxhYmxlRGlyZWN0aXZlLFxuICAgIFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgVGFibGVTZXJ2aWNlLFxuICAgIFRhYmxlU29ydENoYW5nZUV2ZW50LFxuICAgIFRhYmxlU3RhdGUsXG4gICAgVGFibGVWaXJ0dWFsU2Nyb2xsXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vdGFibGUtaGVscGVycyc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRBQkxFX1RPT0xCQVIsIFRhYmxlVG9vbGJhckludGVyZmFjZSB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQbGF0Zm9ybVRhYmxlQ29sdW1uUmVzaXplckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1jb2x1bW4tcmVzaXplci90YWJsZS1jb2x1bW4tcmVzaXplci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVHcm91cFJvd0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1ncm91cC1yb3cvdGFibGUtZ3JvdXAtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUhlYWRlclJvd0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1oZWFkZXItcm93L3RhYmxlLWhlYWRlci1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlUG9wcGluZ1Jvd0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1wb3BwaW5nLXJvdy90YWJsZS1wb3BwaW5nLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVSb3dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtcm93L3RhYmxlLXJvdy5jb21wb25lbnQnO1xuXG5pbnRlcmZhY2UgVG9vbGJhckNvbnRleHQge1xuICAgIGNvdW50ZXI6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgICBzb3J0YWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBmaWx0ZXJhYmxlOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIGdyb3VwYWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBjb2x1bW5zOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xufVxuXG5sZXQgdGFibGVVbmlxdWVJZCA9IDA7XG5cbi8qKlxuICogVGhlIGNvbXBvbmVudCB0aGF0IHJlcHJlc2VudHMgYSB0YWJsZS5cbiAqIEEgdGFibGUgaXMgYSBzZXQgb2YgdGFidWxhciBkYXRhLiBMaW5lIGl0ZW1zIGNhbiBzdXBwb3J0IGRhdGEsIGltYWdlcyBhbmQgYWN0aW9ucy5cbiAqIGBgYGh0bWxcbiAqIDxmZHAtdGFibGVcbiAqICBbZGF0YVNvdXJjZV09XCJzb3VyY2VcIlxuICogIGZkQ29tcGFjdFxuICogIHNlbGVjdGlvbk1vZGU9XCJtdWx0aXBsZVwiXG4gKiAgZW1wdHlUYWJsZU1lc3NhZ2U9XCJObyBkYXRhIGZvdW5kXCI+XG4gKlxuICogIDxmZHAtdGFibGUtdG9vbGJhclxuICogICB0aXRsZT1cIk9yZGVyIExpbmUgSXRlbXNcIlxuICogICBbaGlkZUl0ZW1Db3VudF09XCJmYWxzZVwiPlxuICogIDwvZmRwLXRhYmxlLXRvb2xiYXI+XG4gKlxuICogIDxmZHAtY29sdW1uXG4gKiAgIG5hbWU9XCJuYW1lXCJcbiAqICAga2V5PVwibmFtZVwiXG4gKiAgIGxhYmVsPVwiTmFtZVwiXG4gKiAgIGFsaWduPVwic3RhcnRcIj5cbiAqICA8L2ZkcC1jb2x1bW4+XG4gKlxuICogIDxmZHAtY29sdW1uXG4gKiAgIG5hbWU9XCJkZXNjcmlwdGlvblwiXG4gKiAgIGtleT1cImRlc2NyaXB0aW9uXCJcbiAqICAgbGFiZWw9XCJEZXNjcmlwdGlvblwiPlxuICogIDwvZmRwLWNvbHVtbj5cbiAqIDwvZmRwLXRhYmxlPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBUYWJsZSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGFibGVDb21wb25lbnQpIH0sXG4gICAgICAgIFRhYmxlUm93U2VydmljZSxcbiAgICAgICAgVGFibGVTZXJ2aWNlLFxuICAgICAgICBDb3JlVGFibGVTZXJ2aWNlLFxuICAgICAgICBUYWJsZVNjcm9sbERpc3BhdGNoZXJTZXJ2aWNlLFxuICAgICAgICBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UsXG4gICAgICAgIFRhYmxlUmVzcG9uc2l2ZVNlcnZpY2UsXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoe1xuICAgICAgICAgICAgc3VwcG9ydGVkQ29udGVudERlbnNpdHk6IFtDb250ZW50RGVuc2l0eU1vZGUuQ09NUEFDVCwgQ29udGVudERlbnNpdHlNb2RlLkNPWlksIENvbnRlbnREZW5zaXR5TW9kZS5DT05ERU5TRURdXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRFBfUFJFU0VUX01BTkFHRURfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRhYmxlQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogVGFibGVEYXRhU291cmNlRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbJ2RhdGFTb3VyY2UnLCAnY2hpbGREYXRhU291cmNlJ10sXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dHMtbWV0YWRhdGEtcHJvcGVydHlcbiAgICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgICAgICAnY2hpbGREYXRhU291cmNlQ2hhbmdlZCcsXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgICAgICAgICAgICAgJ29uRGF0YVJlcXVlc3RlZCcsXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgICAgICAgICAgICAgJ29uRGF0YVJlY2VpdmVkJyxcbiAgICAgICAgICAgICAgICAnZGF0YVNvdXJjZUNoYW5nZWQnLFxuICAgICAgICAgICAgICAgICdkYXRhQ2hhbmdlZCcsXG4gICAgICAgICAgICAgICAgJ2lzTG9hZGluZydcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmRwLXRhYmxlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC10YWJsZS0tbm8taG9yaXpvbnRhbC1ib3JkZXJzXSc6ICdub0hvcml6b250YWxCb3JkZXJzIHx8IG5vQm9yZGVycycsXG4gICAgICAgICdbY2xhc3MuZmQtdGFibGUtLW5vLXZlcnRpY2FsLWJvcmRlcnNdJzogJ25vVmVydGljYWxCb3JkZXJzIHx8IG5vQm9yZGVycydcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBCdXN5SW5kaWNhdG9yQ29tcG9uZW50LFxuICAgICAgICBQbGF0Zm9ybVRhYmxlQ29sdW1uUmVzaXplckNvbXBvbmVudCxcbiAgICAgICAgVGFibGVTY3JvbGxhYmxlRGlyZWN0aXZlLFxuICAgICAgICBGb2N1c2FibGVHcmlkRGlyZWN0aXZlXzEsXG4gICAgICAgIENvcmVUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlSGVhZGVyUm93Q29tcG9uZW50LFxuICAgICAgICBUYWJsZUJvZHlEaXJlY3RpdmUsXG4gICAgICAgIERyYWdBbmREcm9wTW9kdWxlLFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgTmdTd2l0Y2gsXG4gICAgICAgIE5nU3dpdGNoQ2FzZSxcbiAgICAgICAgVGFibGVHcm91cFJvd0NvbXBvbmVudCxcbiAgICAgICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgICAgICBUYWJsZVJvd0NvbXBvbmVudCxcbiAgICAgICAgVGFibGVQb3BwaW5nUm93Q29tcG9uZW50LFxuICAgICAgICBSZXBlYXREaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlUm93RGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUNlbGxEaXJlY3RpdmUsXG4gICAgICAgIFNrZWxldG9uQ29tcG9uZW50LFxuICAgICAgICBJbnRlcnNlY3Rpb25TcHlEaXJlY3RpdmUsXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlLFxuICAgICAgICBSb3dDbGFzc2VzUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCA9IGFueT5cbiAgICBleHRlbmRzIFRhYmxlPFQ+XG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkXG57XG4gICAgLyoqIENvbXBvbmVudCBuYW1lIHVzZWQgaW4gYSBQcmVzZXQtbWFuYWdlZCBjb21wb25lbnQuICovXG4gICAgQElucHV0KClcbiAgICBuYW1lID0gJ3BsYXRmb3JtVGFibGUnO1xuXG4gICAgLyoqIElEIGZvciB0aGUgVGFibGUuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGlkID0gYGZkcC10YWJsZS0ke3RhYmxlVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgcmVzaXppbmcgY29sdW1ucyBieSBkcmFnZ2luZyB0aGUgY29sdW1uIGVkZ2Ugd2l0aCBtb3VzZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZURyYWdSZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmaXggdGhlIHRhYmxlIGhlYWRlciBhbmQgZm9vdGVyLiBEZWZhdWx0IGlzIHRydWUuXG4gICAgICogTm90ZSB0aGF0IGlmIHRoZSB0YWJsZSBjb250YWlucyBmcmVlemFibGUgY29sdW1ucywgdGhlIGhlYWRlciBhbmRcbiAgICAgKiBmb290ZXIgd2lsbCBiZSBmaXhlZCBhdXRvbWF0aWNhbGx5LCByZWdhcmRsZXNzIG9mIHRoaXMgaW5wdXQgdmFsdWUuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGZpeGVkID0gdHJ1ZTtcblxuICAgIC8qKiBUaGUgY29sdW1uIGBuYW1lYCB0byBmcmVlemUgY29sdW1ucyB1cCB0byBhbmQgaW5jbHVkaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZnJlZXplQ29sdW1uc1RvOiBzdHJpbmc7XG5cbiAgICAvKiogVGhlIGNvbHVtbiBgbmFtZWAgdG8gZnJlZXplIGNvbHVtbnMgYWZ0ZXIgYW5kIGluY2x1ZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZyZWV6ZUVuZENvbHVtbnNUbzogc3RyaW5nO1xuICAgIC8qKiBUb2dnbGUgZm9yIHBhZ2Ugc2Nyb2xsaW5nIGZlYXR1cmUuICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyBwZXIgcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VTaXplOiBOdWxsYWJsZTxudW1iZXI+O1xuICAgIC8qKiBQYWdlIHNjcm9sbGluZyB0aHJlc2hvbGQgaW4gcHguICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2Nyb2xsaW5nVGhyZXNob2xkID0gODA7XG4gICAgLyoqIFRhYmxlIGJvZHkgaGVpZ2h0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYm9keUhlaWdodDogc3RyaW5nO1xuICAgIC8qKiBUZXh0IGRpc3BsYXllZCB3aGVuIHRhYmxlIGhhcyBubyBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVtcHR5VGFibGVNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRleHQgZGlzcGxheWVkIHdoZW4gdGFibGUgaGFzIG5vIHZpc2libGUgY29sdW1ucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vVmlzaWJsZUNvbHVtbnNNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFRhYmxlIHdpdGhvdXQgaG9yaXpvbnRhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Ib3Jpem9udGFsQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IHZlcnRpY2FsIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub1ZlcnRpY2FsQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSB3aXRob3V0IGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgYm9keSB3aXRob3V0IGFueSBib3JkZXJzLCBidXQgaGVhZGVyIHdpdGggYm9yZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vQm9keUJvcmRlcnMgPSBmYWxzZTtcbiAgICAvKiogVGFibGUgd2l0aG91dCBvdXRlciBib3JkZXJzICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHAtdGFibGUtLW5vLW91dGVyLWJvcmRlcicpXG4gICAgQElucHV0KClcbiAgICBub091dGVyQm9yZGVycyA9IGZhbHNlO1xuICAgIC8qKiBUYWJsZSBib2R5IHdpdGhvdXQgaG9yaXpvbnRhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJYID0gZmFsc2U7XG4gICAgLyoqIFRhYmxlIGJvZHkgd2l0aG91dCB2ZXJ0aWNhbCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXJZID0gZmFsc2U7XG4gICAgLyoqIEFjY2Vzc29yIHRvIGEgY2hpbGRyZW4gbm9kZXMgb2YgdHJlZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJlbGF0aW9uS2V5OiBzdHJpbmc7XG4gICAgLyoqIFRhYmxlIHJvdyBleHBhbmRlZCBzdGF0ZSBrZXkuIFVzZWQgdG8gc2V0IHRoZSBpbml0aWFsIHN0YXRlIG9mIHRyZWUgcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZXhwYW5kZWRTdGF0ZUtleTogc3RyaW5nO1xuICAgIC8qKiBQcm9wZXJ0eSBrZXkgaW5kaWNhdGluZyB0aGF0IHRoZSByb3cgaGFzIGNoaWxkcmVuIGFjY2Vzc2libGUgdmlhIFtjaGlsZERhdGFTb3VyY2VdLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzQ2hpbGRyZW5LZXk6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHJvdyBpcyBuYXZpZ2F0YWJsZS5cbiAgICAgKiBQYXNzIGJvb2xlYW4gdmFsdWUgdG8gc2V0IHN0YXRlIGZvciB0aGUgYWxsIHJvd3MuXG4gICAgICogUGFzcyBzdHJpbmcgdmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGNvbXB1dGUgc3RhdGUgZm9yIGV2ZXJ5IHNpbmdsZSByb3cuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dOYXZpZ2F0YWJsZTogc3RyaW5nIHwgYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlnaGxpZ2h0IG5hdmlnYXRlZCByb3cuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBoaWdobGlnaHROYXZpZ2F0ZWRSb3cgPSBmYWxzZTtcbiAgICAvKiogV2hldGhlciB0YWJsZSByb3cgY2FuIGJlIGNsaWNrZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3NBY3RpdmFibGUgPSBmYWxzZTtcbiAgICAvKiogVmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGVuYWJsZSBzZWxlY3RpbmcuICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0ZWRLZXk6IHN0cmluZztcbiAgICAvKiogVmFsdWUgd2l0aCB0aGUga2V5IG9mIHRoZSByb3cgaXRlbSdzIGZpZWxkIHRvIGVuYWJsZSBzZWxlY3RpbmcuICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0YWJsZUtleTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRyYWNraW5nIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNoZWNrIHRoZSBkaWZmZXJlbmNlcyBpbiBkYXRhIGNoYW5nZXMuXG4gICAgICogVXNlZCBzaW1pbGFybHkgdG8gYG5nRm9yYCBgdHJhY2tCeWAgZnVuY3Rpb24uXG4gICAgICogQWNjZXB0cyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdHdvIHBhcmFtZXRlcnMsIGluZGV4IGFuZCBpdGVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPFQ+O1xuICAgIC8qKlxuICAgICAqIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgaWRlbnRpZmllcyB1bmlxdWVuZXNzIG9mIGEgcGFydGljdWxhciByb3cuXG4gICAgICogVGFibGUgY29tcG9uZW50IHVzZXMgaXQgdG8gYmUgYWJsZSB0byBwcmVzZXJ2ZSBzZWxlY3Rpb24gd2hlbiBhIGRhdGEgbGlzdCBpcyBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93Q29tcGFyYXRvcjogUm93Q29tcGFyYXRvcjxUPjtcbiAgICAvKiogU3RyaW5nIG9yIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhZGRpdGlvbmFsIHJvd3MnIENTUyBjbGFzc2VzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93c0NsYXNzOiBUYWJsZVJvd0NsYXNzPFQ+O1xuICAgIC8qKiBVc2VkIHRvIGNvbnN0cnVjdCBlbXB0eSByb3cgb2JqZWN0IGZvciBlZGl0aW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZWRpdGFibGVSb3dTa2VsZXRvbjogVDtcbiAgICAvKiogV2hldGhlciBhbGwgcm93cyBzaG91bGQgYmUgY29sbGFwc2VkIGJ5IGRlZmF1bHQgYWZ0ZXIgdGhlIHRhYmxlIGlzIGxvYWRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGV4cGFuZE9uSW5pdCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEhlaWdodCBvZiB0aGUgcm93LCByZXF1aXJlZCBmb3IgdGhlIHZpcnR1YWxTY3JvbGwsXG4gICAgICogZGVmYXVsdCBpcyA0NHB4IGluIGNvenksIDMycHggaW4gY29tcGFjdCBhbmQgMjRweCBpbiBjb25kZW5zZWQgKHNldCBhdXRvbWF0aWNhbGx5KVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93SGVpZ2h0ID0gUk9XX0hFSUdIVC5nZXQoQ29udGVudERlbnNpdHlNb2RlLkNPWlkpITtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBjdXJyZW50IHByZXNldCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGNoYW5nZWQuICovXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBsb2FkIHByZXZpb3VzIHBhZ2VzLlxuICAgICAqIFRoaXMgb3B0aW9uIHdvcmtzIG9ubHkgd2hlbiBgcGFnZVNjcm9sbGluZ2AgaXMgdHJ1ZSwgYW5kIHRoZSBpbml0aWFsIHBhZ2UgPiAxXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkUGFnZXNCZWZvcmUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGVWYWx1ZSA9IFNlbGVjdGlvbk1vZGUuTk9ORTtcblxuICAgIC8qKiBTZXRzIHNlbGVjdGlvbiBtb2RlIGZvciB0aGUgdGFibGUuICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8ICdub25lJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGlvbk1vZGUodmFsdWU6IFNlbGVjdGlvbk1vZGVWYWx1ZSkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gPSB0aGlzLnNlbGVjdGlvbk1vZGUgIT09IFNlbGVjdGlvbk1vZGUuTk9ORTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpOiBTZWxlY3Rpb25Nb2RlVmFsdWUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VuYWJsZVRyaXN0YXRlTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogIFdoZW4gVHJ1ZSwgdGhlIGNoZWNrZWQgc3RhdGUgb2YgZWFjaCB0cmVlIGl0ZW0gZGVwZW5kcyBvbiB0aGUgY2hlY2tlZFxuICAgICAqICBzdGF0ZSBvZiBpdHMgcGFyZW50IG9yIGRpcmVjdCBjaGlsZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBlbmFibGVUcmlzdGF0ZU1vZGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlVHJpc3RhdGVNb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGVuYWJsZVRyaXN0YXRlTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUcmVlVGFibGUgJiYgdGhpcy5fZW5hYmxlVHJpc3RhdGVNb2RlO1xuICAgIH1cblxuICAgIC8qKiBWYWx1ZSB3aXRoIHRoZSBrZXkgb2YgdGhlIHJvdyBpdGVtJ3MgZmllbGQgdG8gY29tcHV0ZSBzZW1hbnRpYyBzdGF0ZSBvZiB0aGUgcm93LiAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZW1hbnRpY0hpZ2hsaWdodGluZyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk7XG4gICAgfVxuICAgIGdldCBzZW1hbnRpY0hpZ2hsaWdodGluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5ICYmIHRoaXMuX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBERUZBVUxUX0hJR0hMSUdIVElOR19LRVk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc2VtYW50aWNIaWdobGlnaHRpbmdLZXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmb3JjZSByb3dzIHRvIGZvbGxvdyAnY2hlY2tlZCBhbGwnIHN0YXRlIG9mIHRoZSB0YWJsZS5cbiAgICAgKiBJZiB0cnVlLCBhbGwgbmV3IHJvd3MgdGhhdCBhcmUgY29taW5nIGZyb20gdGhlIGRhdGFTb3VyY2Ugd2lsbCBmb2xsb3cgJ2NoZWNrZWQgYWxsJyBzdGF0ZS5cbiAgICAgKiBJZiBmYWxzZSwgcm93IHdpbGwgcmVzcGVjdCBgY2hlY2tlZEtleWAgcHJvcGVydHkgdG8gZGVmaW5lIGNoZWNrZWQgc3RhdGUgb2YgaXRzZWxmLlxuICAgICAqIERlZmF1bHQgaXMgZmFsc2UuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZUNoZWNrZWRBbGxTdGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSB2YWx1ZSBmb3IgdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2hvdWxkQ2hlY2tOZXdSb3dzID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGN1cnJlbnQgcHJlc2V0IGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwcmVzZXRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0YWJsZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93U2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudDxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgICAgICBUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PFQ+XG4gICAgPigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRhYmxlIHNvcnQgb3JkZXIgaGFzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU29ydENoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0Q2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gdGhlIHRhYmxlIGZpbHRlciBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBmaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZUZpbHRlckNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVGaWx0ZXJDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0YWJsZSBncm91cGluZyBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBncm91cENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlR3JvdXBDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlR3JvdXBDaGFuZ2VFdmVudD4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB2aXNpYmxlIGNvbHVtbnMgbGlzdCBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNvbHVtbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbnNDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gcGFnaW5hdGlvbiBzdGF0ZSBoYXMgYmVlbiBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUGFnZUNoYW5nZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIGluIHRoZSBmcm96ZW4gY29sdW1uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGNvbHVtbkZyZWV6ZTogRXZlbnRFbWl0dGVyPFRhYmxlQ29sdW1uRnJlZXplRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtbkZyZWV6ZUV2ZW50PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGdyb3VwL3RyZWUgcm93IGNvbGxhcHNlZC9leHBhbmRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSByb3dUb2dnbGVPcGVuU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93VG9nZ2xlT3BlblN0YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gcm93IGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgcm93QWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93QWN0aXZhdGVFdmVudDxUPj4oKTtcbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiByb3cgbmF2aWdhdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHJvd05hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0FjdGl2YXRlRXZlbnQ8VD4+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gZW1wdHkgcm93IGFkZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGVtcHR5Um93QWRkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGZpcmVkIHdoZW4gc2F2ZSBidXR0b24gcHJlc3NlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxTYXZlUm93c0V2ZW50PFQ+PigpO1xuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIGNhbmNlbCBidXR0b24gcHJlc3NlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0YWJsZSBib2R5IGJlaW5nIHNjcm9sbGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHRhYmxlU2Nyb2xsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIG5ldyByb3dzIGhhcyBiZWVuIHNldCBhbmQgcmVuZGVyZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgdGFibGVSb3dzU2V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYWxsIHJvd3MgYmVpbmcgZXhwYW5kZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgYWxsUm93c0V4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYWxsIHJvd3MgYmVpbmcgY29sbGFwc2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGFsbFJvd3NDb2xsYXBzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGNlbGwgaXMgZm9jdXNlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBjZWxsRm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGFibGVTY3JvbGxhYmxlJylcbiAgICByZWFkb25seSB0YWJsZVNjcm9sbGFibGU6IFRhYmxlU2Nyb2xsYWJsZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJylcbiAgICByZWFkb25seSB0YWJsZUNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKEZkVGFibGVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHJlYWRvbmx5IHRhYmxlOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoRkRLX0ZPQ1VTQUJMRV9HUklEX0RJUkVDVElWRSlcbiAgICByZWFkb25seSBfZm9jdXNhYmxlR3JpZDogRm9jdXNhYmxlR3JpZERpcmVjdGl2ZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlQm9keTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKERuZExpc3REaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZG5kRGlyZWN0aXZlOiBOdWxsYWJsZTxEbmRMaXN0RGlyZWN0aXZlPFRhYmxlUm93Pj47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFRhYmxlQ29sdW1uKVxuICAgIHJlYWRvbmx5IGNvbHVtbnM6IFF1ZXJ5TGlzdDxUYWJsZUNvbHVtbj47XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEVkaXRhYmxlVGFibGVDZWxsLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgcmVhZG9ubHkgY3VzdG9tRWRpdGFibGVDZWxsczogUXVlcnlMaXN0PEVkaXRhYmxlVGFibGVDZWxsPjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVEFCTEVfVE9PTEJBUilcbiAgICByZWFkb25seSB0YWJsZVRvb2xiYXI6IFRhYmxlVG9vbGJhckludGVyZmFjZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpbml0aWFsU29ydEJ5KCk6IENvbGxlY3Rpb25Tb3J0W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxTb3J0QnkgPz8gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbHVtbnMgdG8gYmUgcmVuZGVyZWQgaW4gdGhlIHRlbXBsYXRlXG4gICAgICovXG4gICAgZ2V0IF92aXNpYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1ucyQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENvbHVtbnMgdG8gYmUgcmVuZGVyZWQgYXMgYSBwb3AtaW4gY29sdW1ucy5cbiAgICAgKi9cbiAgICBnZXQgX3BvcHBpbmdDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFibGVTZXJ2aWNlLnBvcHBpbmdDb2x1bW5zJC52YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc1RyZWVUYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZG5kVGFibGVEaXJlY3RpdmU/LmlzVHJlZVRhYmxlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGVuYWJsZVJvd1Jlb3JkZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5lbmFibGVSb3dSZW9yZGVyaW5nO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0YWJsZSByb3dzIGFyZSBkcmFnZ2FibGUuICovXG4gICAgZ2V0IGlzRHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uaXNUcmVlVGFibGUgJiYgISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZW5hYmxlUm93UmVvcmRlcmluZztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZyA/IFNFTUFOVElDX0hJR0hMSUdIVElOR19DT0xVTU5fV0lEVEggOiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFN1bSBvZiB3aWR0aHMgb2YgZml4ZWQgY29sdW1ucyAoc2VtYW50aWMgaGlnaGxpZ2h0aW5nLCBzZWxlY3Rpb24pICovXG4gICAgZ2V0IF9maXhlZENvbHVtbnNQYWRkaW5nKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoICsgdGhpcy5fc2VsZWN0aW9uQ29sdW1uV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3RhYmxlV2lkdGhQeCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGxvYWRpbmdTdGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA/P1xuICAgICAgICAgICAgKHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ludGVybmFsTG9hZGluZ1N0YXRlIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5faW50ZXJuYWxDaGlsZHJlbkxvYWRpbmdTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuX2RuZExvYWRpbmdTdGF0ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgV2hldGhlciB0aGUgc2VsZWN0aW9uIGNvbHVtbiBzaG91bGQgYmUgc2hvd24sXG4gICAgICogIElmIHRoZXJlIGFyZSBubyB2aXNpYmxlIHJvd3Mgb3IgdmlzaWJsZSBjb2x1bW5zXG4gICAgICogIG9yIHNlbGVjdGlvbiBtb2RlIGlzIG5vbmUsIHRoZW4gc2VsZWN0aW9uIGNvbHVtbiBzaG91bGQgbm90IGJlIHNob3duLlxuICAgICAqKi9cbiAgICBnZXQgaXNTZWxlY3Rpb25Db2x1bW5TaG93bigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX2lzU2VsZWN0aW9uQ29sdW1uU2hvd24gJiZcbiAgICAgICAgICAgICEhdGhpcy5fdGFibGVSb3dzVmlzaWJsZS5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfYXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLmFyaWFMYWJlbGxlZEJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRCeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50YWJsZVRvb2xiYXI/LnRhYmxlVG9vbGJhclRpdGxlSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVwcmVzZW50YXRpb24gb2YgY29tYmluZWQgdGFibGUgcm93cy5cbiAgICAgKiBDb250YWlucyBhbGwgcm93cyBpbmNsdWRpbmcgZ3JvdXAgcm93cy5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlcHJlc2VudGF0aW9uIG9mIHRhYmxlIHJvd3MgdGhhdCBjYW1lIGZyb20gZGF0YVNvdXJjZS5cbiAgICAgKiBDb250YWlucyBhbGwgcm93cyBpbmNsdWRpbmcgZ3JvdXAgcm93cy5cbiAgICAgKi9cbiAgICBfZGF0YVNvdXJjZVRhYmxlUm93czogVGFibGVSb3c8VD5bXSA9IFtdO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXByZXNlbnRhdGlvbiBvZiBhZGRlZCB0YWJsZSByb3dzLlxuICAgICAqL1xuICAgIF9uZXdUYWJsZVJvd3M6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVmlzaWJsZSB0YWJsZSByb3dzLlxuICAgICAqIFJvd3MgbGlzdCB0aGF0IGlzIHVzZWQgdG8gYmUgcmVuZGVyZWQgaW4gdGhlIHVpLlxuICAgICAqIEJhc2VkIG9uIF90YWJsZVJvd3MgYW5kIGV4Y2x1ZGVzIGhpZGRlbiByb3dzLlxuICAgICAqL1xuICAgIF90YWJsZVJvd3NWaXNpYmxlOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRhYmxlIENvbHVtbiBNYXAuIFdoZXJlIGtleSBpcyBjb2x1bW4ga2V5IGFuZCB2YWx1ZSBpcyBjb2x1bW5cbiAgICAgKi9cbiAgICBfa2V5VG9Db2x1bW5NYXA6IE1hcDxzdHJpbmcsIFRhYmxlQ29sdW1uPiA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRnJlZXphYmxlIGNvbHVtbiBuYW1lcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBpbmRleGVzXG4gICAgICovXG4gICAgX2ZyZWV6YWJsZUNvbHVtbnM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZyZWV6YWJsZSBjb2x1bW4gbmFtZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgaW5kZXhlcyBmb3IgY29sdW1ucyB0aGF0IHdpbGwgYmUgZnJvemVuIHRvIHRoZSBlbmQgb2YgdGhlIHRhYmxlXG4gICAgICovXG4gICAgX2ZyZWV6YWJsZUVuZENvbHVtbnM6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdGFibGVDb2x1bW5zTGVuZ3RoID0gMDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGVja2VkU3RhdGU6IGJvb2xlYW4gfCBudWxsID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXRhYmxlLS1ncm91cCcpXG4gICAgX2lzR3JvdXBUYWJsZSA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIHRvIGNyZWF0ZSBhIHJvdyBjb21wb25lbnQgcGxhY2Vob2xkZXIgYW5kIHNldCBkYXRhIGluIGl0IHJhdGhlciB0aGFuIHJlLWNyZWF0ZSB0aGUgcm93IGNvbXBvbmVudCB3aGVuIGRhdGEgY2hhbmdlcy5cbiAgICAgKiBPcHRpbWl6ZXMgcGVyZm9ybWFuY2UgZHVlIHRvIHNraXBwaW5nIGluaXRpYWwgc2V0dXAgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBfdGFibGVSb3dzSW5WaWV3UG9ydFBsYWNlaG9sZGVyOiBudW1iZXJbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2RuZFRhYmxlUm93c1BsYWNlaG9sZGVyOiBUYWJsZVJvd1tdID0gW107XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNTZWxlY3Rpb25Db2x1bW5TaG93biA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3Rvb2xiYXJDb250ZXh0OiBUb29sYmFyQ29udGV4dDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9uYXZpZ2F0ZWRSb3dJbmRleDogbnVtYmVyO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGlvbkNvbHVtbldpZHRoID0gMDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlQ29sdW1uc1N0cmVhbTogT2JzZXJ2YWJsZTxUYWJsZUNvbHVtbltdPjtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9sb2FkUHJldmlvdXNQYWdlcyA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3J0bCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2RhdGFTb3VyY2VEaXJlY3RpdmUgPSBpbmplY3Q8VGFibGVEYXRhU291cmNlRGlyZWN0aXZlPFQ+PihUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3RhYmxlUm93U2VydmljZSA9IGluamVjdChUYWJsZVJvd1NlcnZpY2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlID0gaW5qZWN0PFRhYmxlSW5pdGlhbFN0YXRlPihGRFBfVEFCTEVfU1RBVEVfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfdmlydHVhbFNjcm9sbERpcmVjdGl2ZSA9IGluamVjdDxUYWJsZVZpcnR1YWxTY3JvbGw+KEZEUF9UQUJMRV9WSVJUVUFMX1NDUk9MTF9ESVJFQ1RJVkUsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kbmRUYWJsZURpcmVjdGl2ZSA9IGluamVjdDxUYWJsZURyYWdnYWJsZT4oRkRQX1RBQkxFX0RSQUdHQUJMRV9ESVJFQ1RJVkUsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcbiAgICAvLyBrZWVwaW5nIFwibG9hZGluZ1wiIGZpZWxkIHByaXZhdGUgdG8gbWFrZSBzdXJlIFwibG9hZGluZ1N0YXRlXCIgaXMgdXNlZCBpbnN0ZWFkXG4gICAgLyoqIExvYWRpbmcgc3RhdGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHByaXZhdGUgbG9hZGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbWFudGljSGlnaGxpZ2h0aW5nS2V5OiBzdHJpbmc7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb3JjZVNlbWFudGljSGlnaGxpZ2h0aW5nID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1Nob3duU29ydFNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkZpbHRlclNldHRpbmdzSW5Ub29sYmFyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaXNTaG93bkdyb3VwU2V0dGluZ3NJblRvb2xiYXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluZGljYXRlcyB3aGVuIGFsbCBpdGVtcyBhcmUgY2hlY2tlZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2NoZWNrZWRBbGwgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgYXQgbGVhc3QgMSBpdGVtIGlzIGNoZWNrZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jaGVja2VkQW55ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlld0luaXRpYXRlZCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkZWRJdGVtczogVFtdID0gW107XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2x1bW5zV2lkdGhTZXQgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RuZExvYWRpbmdTdGF0ZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmFuZ2VTZWxlY3RvciA9IG5ldyBSYW5nZVNlbGVjdG9yKCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jdXJyZW50UHJlc2V0OiBQbGF0Zm9ybVRhYmxlTWFuYWdlZFByZXNldCA9IHt9O1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFN0YXRlU2V0ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yb3dIZWlnaHRNYW51YWxseVNldCA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2hvdWxkRW1pdFJvd3NDaGFuZ2UgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlSGVhZGVyUmVzaXplciA9IGluamVjdChUYWJsZUhlYWRlclJlc2l6ZXJEaXJlY3RpdmUpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1hcHBpbmcgZnVuY3Rpb24gZm9yIHRoZSB0cmFja0J5LCBwcm92aWRlZCBieSB0aGUgdXNlci5cbiAgICAgKiBJcyBuZWVkZWQsIGJlY2F1c2Ugd2UgYXJlIHdyYXBwaW5nIHVzZXIgc3VwcGxpZWQgZGF0YSBpbnRvIGEgYFRhYmxlUm93YCBjbGFzcy5cbiAgICAgKi9cbiAgICBfcm93VHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPFRhYmxlUm93PFQ+PiB8IFRyYWNrQnlGdW5jdGlvbjxudW1iZXI+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0VHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPG51bWJlcj4gPSAoaW5kZXg6IG51bWJlcikgPT4gaW5kZXg7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcmVhZG9ubHkgX3RhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJsZVNjcm9sbERpc3BhdGNoZXI6IFRhYmxlU2Nyb2xsRGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBfdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlOiBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBjb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgICAgICByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmJhYmxlU2VydmljZTogVGFiYmFibGVFbGVtZW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5zZXRUYWJsZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8uc2V0VGFibGUodGhpcyk7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuc2V0VGFibGUodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fcm93VHJhY2tCeSA9IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB0aGlzLl90b29sYmFyQ29udGV4dCA9IHtcbiAgICAgICAgICAgIGNvdW50ZXI6IHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUudG90YWxJdGVtcyQsXG4gICAgICAgICAgICBzb3J0YWJsZTogdGhpcy5faXNTaG93blNvcnRTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLFxuICAgICAgICAgICAgZ3JvdXBhYmxlOiB0aGlzLl9pc1Nob3duR3JvdXBTZXR0aW5nc0luVG9vbGJhciQsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy50YWJsZUNvbHVtbnNTdHJlYW0gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fcnRsU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICAgICAgdGhpcy5fcnRsU2VydmljZS5ydGwuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ydGwgPSBpc1J0bDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbEZvY3VzZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxGb2N1c2VkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC4gKi9cbiAgICBnZXRSb3dzSW5WaWV3cG9ydCgpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhbiBhcnJheSBvZiByb3dzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB2aWV3cG9ydC5cbiAgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydCBpbmRleCBvZiBhbGwgcm93cy5cbiAgICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCBvZiB2aWV3cG9ydCByb3dzLlxuICAgICAqL1xuICAgIHNldFJvd3NJblZpZXdwb3J0KHN0YXJ0SW5kZXggPSAwLCBsZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXIgPSBuZXcgQXJyYXkobGVuZ3RoKS5maWxsKG51bGwpLm1hcCgoXywgaSkgPT4gaSArIHN0YXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlciA9IHRoaXMuX3RhYmxlUm93cy5zbGljZShzdGFydEluZGV4LCBsZW5ndGgpO1xuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoJ2xvYWRpbmcnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZUxvYWRpbmcodGhpcy5sb2FkaW5nU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd0cmFja0J5JyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9yb3dUcmFja0J5ID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy50cmFja0J5ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgID8gKGluZGV4KSA9PiB0aGlzLnRyYWNrQnkoaW5kZXgsIHRoaXMuX3RhYmxlUm93c1Zpc2libGVbaW5kZXhdLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZmF1bHRUcmFja0J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hhbmdlcyBiZWxvdyBzaG91bGQgYmUgY2hlY2tlZCBvbmx5IGFmdGVyIHZpZXcgaXMgaW5pdGlhbGl6ZWRcbiAgICAgICAgaWYgKCF0aGlzLl92aWV3SW5pdGlhdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3NlbGVjdGlvbk1vZGUnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICdzZWxlY3Rpb25Nb2RlJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnZnJlZXplRW5kQ29sdW1uc1RvJyBpbiBjaGFuZ2VzIHx8XG4gICAgICAgICAgICAnc2VtYW50aWNIaWdobGlnaHRpbmcnIGluIGNoYW5nZXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dOYXZpZ2F0YWJsZScgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLmZvckVhY2goKHJvdykgPT4gKHJvdy5uYXZpZ2F0YWJsZSA9IGlzUm93TmF2aWdhdGFibGUocm93LnZhbHVlLCB0aGlzLnJvd05hdmlnYXRhYmxlKSkpO1xuXG4gICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVJc1Nob3duTmF2aWdhdGlvbkNvbHVtbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdyb3dIZWlnaHQnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0hlaWdodE1hbnVhbGx5U2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5zZXRUYWJsZVJlZih0aGlzKTtcblxuICAgICAgICB0aGlzLl9pc0dyb3VwVGFibGUgPSAodGhpcy5pbml0aWFsU3RhdGU/LmluaXRpYWxHcm91cEJ5Py5sZW5ndGggPz8gMCkgPiAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3SW5pdGlhdGVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmluaXRpYWxTdGF0ZT8uc2V0SW5pdGlhbFN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5pbml0aWFsaXplRGF0YVNvdXJjZSgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtbnMoKTtcblxuICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5jb25zdHJ1Y3RUYWJsZU1ldGFkYXRhKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9QYWdlU2Nyb2xsaW5nKCk7XG5cbiAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8ubGlzdGVuT25WaXJ0dWFsU2Nyb2xsKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9Sb3dIZWlnaHRDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NvbHVtblByb3BlcnRpZXNDaGFuZ2UoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUNvbnRhaW5lck1vdXNlTGVhdmUoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZE9uSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRBbGwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbFRyYW5zZm9ybSRcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gISF0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsICYmICEhdGhpcy5fdGFibGVCb2R5KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh0cmFuc2Zvcm0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHt0cmFuc2Zvcm19cHgpYDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLl9mb2N1c2FibGVHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c2FibGVHcmlkLnNob3J0Um93Rm9jdXMgPSAnZmlyc3QnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIC8vIFdoZW4gdGFibGUgcm93cyBhcmUgc2V0LCBlbWl0IGFuIGV2ZW50IHRvIG1hbmlwdWxhdGUgdGhlIHZpZXcgKGUuZy4sIHNjcm9sbCB0byBzb21lIHJvdykuXG4gICAgICAgIGlmICghdGhpcy5fc2hvdWxkRW1pdFJvd3NDaGFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBlbWl0dGVyID0gdGhpcy50YWJsZVJvd3NTZXQ7XG4gICAgICAgIHRoaXMuX29uWm9uZUZyZWUoKCkgPT4ge1xuICAgICAgICAgICAgZW1pdHRlci5lbWl0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IGN1cnJlbnQgc3RhdGUvc2V0dGluZ3Mgb2YgdGhlIFRhYmxlLiAqL1xuICAgIGdldFRhYmxlU3RhdGUoKTogVGFibGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZVNlcnZpY2UuZ2V0VGFibGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgY3VycmVudCBzdGF0ZS9zZXR0aW5ncyBvZiB0aGUgVGFibGUuICovXG4gICAgc2V0VGFibGVTdGF0ZShzdGF0ZTogVGFibGVTdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShzdGF0ZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogR2V0IHRhYmxlIGNvbHVtbnMgZGVmaW5pdGlvbiBsaXN0LiAqL1xuICAgIGdldFRhYmxlQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucz8udG9BcnJheSgpIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBHZXQgYSBsaXN0IG9mIHZpc2libGUgdGFibGUgY29sdW1ucy4gKi9cbiAgICBnZXRWaXNpYmxlVGFibGVDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbHVtbnMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIFNldCBTb3J0aW5nIHJ1bGVzICovXG4gICAgc29ydChzb3J0UnVsZXM6IENvbGxlY3Rpb25Tb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQoc29ydFJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgU29ydGluZyBydWxlcyB0byB0aGUgZXhpc3Rpbmcgb25lcyAqL1xuICAgIGFkZFNvcnQoc29ydFJ1bGVzOiBDb2xsZWN0aW9uU29ydFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5hZGRTb3J0KHNvcnRSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogU2V0IEZpbHRlciBydWxlcyAqL1xuICAgIGZpbHRlcihmaWx0ZXJSdWxlczogQ29sbGVjdGlvbkZpbHRlcltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRGaWx0ZXJzKGZpbHRlclJ1bGVzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBBZGQgRmlsdGVyIHJ1bGUgKi9cbiAgICBhZGRGaWx0ZXIoZmlsdGVyUnVsZXM6IENvbGxlY3Rpb25GaWx0ZXJbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuYWRkRmlsdGVycyhmaWx0ZXJSdWxlcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogUmVtb3ZlcyBmaWx0ZXJzIGZvciB0aGUgcHJvdmlkZWQgZmllbGRzICovXG4gICAgcmVtb3ZlRmlsdGVyKGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnJlbW92ZUZpbHRlcnMoZmllbGRzKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgR3JvdXBzICovXG4gICAgZ3JvdXAoZ3JvdXBzOiBDb2xsZWN0aW9uR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKGdyb3Vwcyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQWRkIEdyb3VwcyAqL1xuICAgIGFkZEdyb3VwKGdyb3VwczogQ29sbGVjdGlvbkdyb3VwW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmFkZEdyb3Vwcyhncm91cHMpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHZpc2libGUgdGFibGUgY29sdW1uc1xuICAgICAqIFRoZSBvcmRlciBpcyBtYXR0ZXJcbiAgICAgKiBAcGFyYW0gY29sdW1ucyB0YWJsZSBjb2x1bW5zIG5hbWVzXG4gICAgICovXG4gICAgc2V0Q29sdW1ucyhjb2x1bW5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnMgPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCBjb2x1bW5zT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7XG4gICAgICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgICAgIGtleXM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRhYmxlQ29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaGF2ZSBzYW1lIG9yZGVyIG9mIGNvbHVtbnMgYXMgdXNlciBkZWZpbmVkLlxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGNvbHVtbnMuaW5kZXhPZihhLm5hbWUpIC0gY29sdW1ucy5pbmRleE9mKGIubmFtZSkpXG4gICAgICAgICAgICAucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGFjYy5jb2x1bW5zLnB1c2goY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgICAgIGFjYy5rZXlzLnB1c2goY29sdW1uLmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIGNvbHVtbnNPYmplY3QpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0Q29sdW1ucyhjb2x1bW5zT2JqZWN0LmNvbHVtbnMsIGNvbHVtbnNPYmplY3Qua2V5cyk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogRnJlZXplIHRhYmxlIHRvIGNvbHVtbiAqL1xuICAgIGZyZWV6ZVRvQ29sdW1uKGNvbHVtbk5hbWU6IHN0cmluZywgZW5kPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBlbmQgPyAodGhpcy5mcmVlemVFbmRDb2x1bW5zVG8gPSBjb2x1bW5OYW1lKSA6ICh0aGlzLmZyZWV6ZUNvbHVtbnNUbyA9IGNvbHVtbk5hbWUpO1xuXG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5mcmVlemVUbyhjb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBVbmZyZWV6ZSBjb2x1bW4gKi9cbiAgICB1bmZyZWV6ZShjb2x1bW5OYW1lOiBzdHJpbmcsIGVuZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVuZCA/IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgOiB0aGlzLl9mcmVlemFibGVDb2x1bW5zO1xuICAgICAgICBjb25zdCBmcmVlemVUb0NvbHVtbkluZGV4ID0gY29sdW1ucy5nZXQoY29sdW1uTmFtZSkgPz8gLTE7XG4gICAgICAgIGNvbnN0IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lID0gY29sdW1uc1tmcmVlemVUb0NvbHVtbkluZGV4IC0gMV07XG5cbiAgICAgICAgZW5kXG4gICAgICAgICAgICA/ICh0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyA9IGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lKVxuICAgICAgICAgICAgOiAodGhpcy5mcmVlemVDb2x1bW5zVG8gPSBmcmVlemVUb1ByZXZpb3VzQ29sdW1uTmFtZSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLmZyZWV6ZVRvKGZyZWV6ZVRvUHJldmlvdXNDb2x1bW5OYW1lLCBlbmQpO1xuICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBleHBhbmQgYWxsIHJvd3MgKi9cbiAgICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGFibGVSb3dzID0gdGhpcy5fdGFibGVSb3dzLmZpbHRlcigocm93KSA9PiByb3cudHlwZSA9PT0gVGFibGVSb3dUeXBlLlRSRUUpO1xuICAgICAgICBpZiAodGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKGV4cGFuZGFibGVSb3dzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXJrQXNFeHBhbmRlZChleHBhbmRhYmxlUm93cyk7XG4gICAgICAgIHRoaXMuYWxsUm93c0V4cGFuZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21hcmtBc0V4cGFuZGVkKHJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgcm93cy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVSb3dzQ2hhbmdlZCgpO1xuICAgIH1cblxuICAgIC8qKiBjb2xsYXBzZSBhbGwgcm93cyAqL1xuICAgIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd3MuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGUucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICAgICAgdGhpcy5hbGxSb3dzQ29sbGFwc2VkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogU2VhcmNoIGluIHRhYmxlICovXG4gICAgc2VhcmNoKHNlYXJjaElucHV0OiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2VhcmNoKHNlYXJjaElucHV0KTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBTZWFyY2ggaW4gdGFibGUgKi9cbiAgICBzZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRDdXJyZW50UGFnZShjdXJyZW50UGFnZSk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBTb3J0IFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd1NvcnRTZXR0aW5nc0luVG9vbGJhcihzaG93U29ydFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Tb3J0U2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd1NvcnRTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLyoqIFRvb2xiYXIgRmlsdGVyIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0ZpbHRlclNldHRpbmdzSW5Ub29sYmFyKHNob3dGaWx0ZXJTZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duRmlsdGVyU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0ZpbHRlclNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBHcm91cCBTZXR0aW5ncyBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHNob3dHcm91cFNldHRpbmdzSW5Ub29sYmFyKHNob3dHcm91cFNldHRpbmdzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzU2hvd25Hcm91cFNldHRpbmdzSW5Ub29sYmFyJC5uZXh0KHNob3dHcm91cFNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogVG9vbGJhciBDb2x1bW5zIFNldHRpbmdzIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgc2hvd0NvbHVtblNldHRpbmdzSW5Ub29sYmFyKHNob3dDb2x1bW5TZXR0aW5nczogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pc1Nob3duQ29sdW1uU2V0dGluZ3NJblRvb2xiYXIkLm5leHQoc2hvd0NvbHVtblNldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvKiogRGlzYWJsZSBmaWx0ZXIgZnJvbSBjb2x1bW4gaGVkZXIgbWVudSAqL1xuICAgIHNldEhlYWRlckNvbHVtbkZpbHRlcmluZ0Rpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5faXNGaWx0ZXJpbmdGcm9tSGVhZGVyRGlzYWJsZWQkLm5leHQoZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKiBTZXQgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgc2V0Um93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyLCByb3dOYXZpZ2F0YWJsZTogc3RyaW5nIHwgYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLl90YWJsZVJvd3Nbcm93SW5kZXhdO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByb3cubmF2aWdhdGFibGUgPSBpc1Jvd05hdmlnYXRhYmxlKHJvdy52YWx1ZSwgcm93TmF2aWdhdGFibGUpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSByb3cgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKiBAcGFyYW0gcm93SW5kZXggSW5kZXggb2YgdGhlIHJvdy5cbiAgICAgKi9cbiAgICB0b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdyB8fCByb3cudmFsdWVbdGhpcy5zZWxlY3RhYmxlS2V5XSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09IFNlbGVjdGlvbk1vZGUuU0lOR0xFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KHJvdyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSBTZWxlY3Rpb25Nb2RlLk1VTFRJUExFKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVNdWx0aVNlbGVjdFJvdyhyb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2hlY2tlZCBzdGF0ZSBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSByb3dJbmRleCBJbmRleCBvZiB0aGUgcm93LlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0aGUgY2hlY2tlZCBzdGF0ZS5cbiAgICAgKi9cbiAgICBzZXRSb3dDaGVja2VkU3RhdGUocm93SW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdy5jaGVja2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RhYmxlUm93KHJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmUgdGhlIHJvdyBuYXZpZ2F0aW9uICovXG4gICAgcmVtb3ZlUm93TmF2aWdhdGlvbihyb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuX3RhYmxlUm93c1tyb3dJbmRleF07XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJvdy5uYXZpZ2F0YWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG5cbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB0cmlnZ2VycyBjb2x1bW4ncyB3aWR0aCByZWNhbGN1bGF0aW9uICovXG4gICAgcmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2Uuc2V0Q29sdW1uTmFtZXModGhpcy5fdmlzaWJsZUNvbHVtbnMubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKSk7XG4gICAgICAgIHRoaXMuX3NldEZyZWV6YWJsZUluZm8oKTtcbiAgICB9XG5cbiAgICAvKiogR2V0cyB0aGUgbWF4IGFsbG93ZWQgd2lkdGggZm9yIGFsbCBmcmVlemFibGUgY29sdW1ucyAqL1xuICAgIGdldE1heEFsbG93ZWRGcmVlemFibGVDb2x1bW5zV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFRoZW1lYWJsZSBzY3JvbGxiYXIgaGFzIDAuNzVyZW0gaW4gZGltZW5zaW9uICovXG4gICAgICAgIGNvbnN0IHNjcm9sbGJhclNpemVJblB4ID0gMTI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxlV2lkdGhQeCAtIHRoaXMuX2ZpeGVkQ29sdW1uc1BhZGRpbmcgLSBzY3JvbGxiYXJTaXplSW5QeCAtIDE7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0YWJsZSBkYXRhIHNvdXJjZSAqL1xuICAgIGdldERhdGFTb3VyY2UoKTogVGFibGVEYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGVtcHR5IHJvdyBmb3IgZWRpdGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByb3dzIGFycmF5LlxuICAgICAqL1xuICAgIGFkZFJvdygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZm9yY2VTZW1hbnRpY0hpZ2hsaWdodGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3NldFNlbWFudGljSGlnaGxpZ2h0aW5nKCk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93ID0gYnVpbGROZXdSb3dTa2VsZXRvbih0aGlzLmVkaXRhYmxlUm93U2tlbGV0b24sIHRoaXMuY29sdW1ucy50b0FycmF5KCkpO1xuICAgICAgICBuZXdSb3dbdGhpcy5zZW1hbnRpY0hpZ2hsaWdodGluZ10gPSBFRElUQUJMRV9ST1dfU0VNQU5USUNfU1RBVEU7XG5cbiAgICAgICAgdGhpcy5fYWRkZWRJdGVtcy51bnNoaWZ0KG5ld1Jvdyk7XG5cbiAgICAgICAgY29uc3QgbmV3Um93cyA9IHRoaXMuX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKFtuZXdSb3ddKTtcbiAgICAgICAgdGhpcy5fbmV3VGFibGVSb3dzID0gWy4uLm5ld1Jvd3MsIC4uLnRoaXMuX25ld1RhYmxlUm93c107XG5cbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMuZW1wdHlSb3dBZGRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIENhbmNlbHMgZWRpdGluZyBhbmQgZGlzY2FyZHMgbmV3bHkgYWRkZWQgcm93cyAqL1xuICAgIGNhbmNlbEVkaXRpbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0RWRpdFN0YXRlKCk7XG4gICAgICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzYXZlIGV2ZW50IGFuZCByZXNldHMgZWRpdGFibGUgcm93cyBhcnJheS5cbiAgICAgKi9cbiAgICBzYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2F2ZVJvd3NFdmVudDxUPigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2godGhpcy5nZXRUYWJsZVN0YXRlKCkpO1xuICAgICAgICB9LCBbLi4udGhpcy5fYWRkZWRJdGVtc10pO1xuICAgICAgICBjb25zdCBlZGl0YWJsZUNlbGxzOiBFZGl0YWJsZVRhYmxlQ2VsbFtdID0gKFtdIGFzIEVkaXRhYmxlVGFibGVDZWxsW10pLmNvbmNhdC5hcHBseShcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl90YWJsZVJvd1NlcnZpY2UuZWRpdGFibGVDZWxscy52YWx1ZXMoKSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmb3JtcyA9IFsuLi50aGlzLmN1c3RvbUVkaXRhYmxlQ2VsbHMudG9BcnJheSgpLCAuLi5lZGl0YWJsZUNlbGxzXS5tYXAoKHQpID0+IHQuZm9ybSk7XG5cbiAgICAgICAgLy8gVHJpZ2dlciBmb3JtIHJldmFsaWRhdGlvblxuICAgICAgICBmb3Jtcy5mb3JFYWNoKChmb3JtKSA9PiBmb3JtLm9uU3VibWl0KG51bGwgYXMgYW55KSk7XG4gICAgICAgIGlmIChmb3Jtcy5zb21lKChmb3JtKSA9PiBmb3JtLmludmFsaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZXNldEVkaXRTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNhdmUuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY3VycmVudCBwcmVzZXQgZm9yIHRoZSBUYWJsZS4gKi9cbiAgICBzZXRQcmVzZXQoZGF0YTogUGxhdGZvcm1UYWJsZU1hbmFnZWRQcmVzZXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFByZXNldCA9IGRhdGE7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlOiBUYWJsZVN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fdGFibGVTZXJ2aWNlLmdldERlZmF1bHRTdGF0ZSgpLCBkYXRhKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFNvcnQobmV3U3RhdGUuc29ydEJ5KTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEZpbHRlcnMobmV3U3RhdGUuZmlsdGVyQnkpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0R3JvdXBzKG5ld1N0YXRlLmdyb3VwQnkpO1xuICAgICAgICB0aGlzLnNldENvbHVtbnMobmV3U3RhdGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZWFyY2gobmV3U3RhdGUuc2VhcmNoSW5wdXQpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZnJlZXplVG8obmV3U3RhdGUuZnJlZXplVG9Db2x1bW4pO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gbmV3U3RhdGUucGFnZS5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldEN1cnJlbnRQYWdlKG5ld1N0YXRlLnBhZ2UuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2Uuc2V0VGFibGVTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbi4gKi9cbiAgICBnZXRDdXJyZW50UHJlc2V0KCk6IFBsYXRmb3JtVGFibGVNYW5hZ2VkUHJlc2V0IHtcbiAgICAgICAgaWYgKCF0aGlzLl9jdXJyZW50UHJlc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbmVlZCB0byByZXR1cm4gb2JqZWN0IGFzIHNpbWlsYXIgYXMgdGhlIG9yaWdpbmFsIHByZXNldC5cbiAgICAgICAgY29uc3QgY3VycmVudFByZXNldCA9IHsgLi4udGhpcy5fY3VycmVudFByZXNldCB9O1xuICAgICAgICBjb25zdCBwcmVzZXRLZXlzID0gT2JqZWN0LmtleXMoY3VycmVudFByZXNldCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRTdGF0ZSkuZm9yRWFjaCgoc3RhdGVLZXkpID0+IHtcbiAgICAgICAgICAgIC8vIFNraXAgc3RhdGUgZW50cnkgaWYgaXQncyBub3QgcHJlc2VudCBpbiBwcmVzZXQgYW5kIGRvZXNuJ3QgaGF2ZSBhbnkgdmFsdWUuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RhdGVLZXkgPT09ICdjb2x1bW5LZXlzJyB8fFxuICAgICAgICAgICAgICAgICgoIWN1cnJlbnRTdGF0ZVtzdGF0ZUtleV0gfHxcbiAgICAgICAgICAgICAgICAgICAgKEFycmF5LmlzQXJyYXkoY3VycmVudFN0YXRlW3N0YXRlS2V5XSkgJiYgY3VycmVudFN0YXRlW3N0YXRlS2V5XT8ubGVuZ3RoID09PSAwKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXByZXNldEtleXMuaW5jbHVkZXMoc3RhdGVLZXkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50UHJlc2V0W3N0YXRlS2V5XSA9IGN1cnJlbnRTdGF0ZVtzdGF0ZUtleV07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50UHJlc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbnVhbGx5IHRyaWdnZXJzIGxpc3QgaXRlbSBldmVudCBsaXN0ZW5lcnMgZm9yIGRyYWcmZHJvcCBsaXN0IGRpcmVjdGl2ZS5cbiAgICAgKi9cbiAgICByZWZyZXNoRG5kTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZpcnR1YWxTY3JvbGxEaXJlY3RpdmU/LnZpcnR1YWxTY3JvbGwgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kbmREaXJlY3RpdmU/LnJlZnJlc2hRdWVyeUxpc3QoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHRvZ2dsZXMgYGV4cGFuZGAgc3RhdGUgb2YgdGhlIHJvdyB3aXRoIGRlZmluZWQgaW5kZXguXG4gICAgICogQHBhcmFtIHJvd0luZGV4ZXMgcm93IGluZGV4ZXMgaW5jbHVkaW5nIG5lc3RlZCByb3dzLlxuICAgICAqXG4gICAgICogVXNhZ2UgZXhhbXBsZTpcbiAgICAgKiAqIFRvIHRvZ2dsZSBmaXJzdCBsZXZlbCByb3csIHBhc3Mgb25lIGFyZ3VtZW50OlxuICAgICAqIGBgYFxuICAgICAqIHRhYmxlLnRvZ2dsZUdyb3VwUm93cygwKSAvLyBXaWxsIHJlc3VsdCBpbiB0b2dnbGluZyBmaXJzdCByb3cgaWYgaXQncyB0eXBlIGlzIGBUYWJsZVJvd1R5cGUuVFJFRWAgb3IgYFRhYmxlUm93VHlwZS5HUk9VUGAuXG4gICAgICogYGBgXG4gICAgICogKiBUbyB0b2dnbGUgbmVzdGVkIHJvd3MsIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgb2YgaW5kZXhlczpcbiAgICAgKiBgYGBcbiAgICAgKiB0YWJsZS50b2dnbGVHcm91cFJvd3MoMCwgMSkgLy8gV2lsbCByZXN1bHQgaW4gdG9nZ2xpbmcgZmlyc3Qgcm9vdCByb3csIHRoZW4gaXQncyBzZWNvbmQgY2hpbGQuXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdG9nZ2xlR3JvdXBSb3dzKC4uLnJvd0luZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGxldCB0YWJsZVJvdzogVGFibGVSb3cgfCBudWxsID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCByb3dJbmRleCBvZiByb3dJbmRleGVzKSB7XG4gICAgICAgICAgICB0YWJsZVJvdyA9IHRhYmxlUm93ID8gdGFibGVSb3cuY2hpbGRyZW5bcm93SW5kZXhdIDogdGhpcy5fdGFibGVSb3dzW3Jvd0luZGV4XTtcblxuICAgICAgICAgICAgaWYgKHRhYmxlUm93LnR5cGUgPT09IFRhYmxlUm93VHlwZS5JVEVNKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KHRhYmxlUm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZm9jdXMgYSBjZWxsIGluIHRoZSB0YWJsZSB1dGlsaXppbmcgYSBGb2N1c2FibGVDZWxsUG9zaXRpb24gaW50ZXJmYWNlLlxuICAgICAqL1xuICAgIGZvY3VzQ2VsbChwb3NpdGlvbjogRm9jdXNhYmxlQ2VsbFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhYmxlRWwgPSB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgICAgdGFibGVFbC5yb3dzW3Bvc2l0aW9uLnJvd0luZGV4XS5jZWxsc1twb3NpdGlvbi5jb2xJbmRleF0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlIEFQSVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbChcbiAgICAgICAgICAgIHRoaXMuX3J0bCxcbiAgICAgICAgICAgIHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSxcbiAgICAgICAgICAgIHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NhbGN1bGF0aW5nTG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RuZExvYWRpbmdTdGF0ZSA9PT0gaXNMb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kbmRMb2FkaW5nU3RhdGUgPSBpc0xvYWRpbmc7XG4gICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zZXRUYWJsZUxvYWRpbmcodGhpcy5sb2FkaW5nU3RhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2dnbGUgc2VsZWN0YWJsZSByb3cgaW4gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRVxuICAgICAqL1xuICAgIF90b2dnbGVNdWx0aVNlbGVjdFJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3csIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gU2VsZWN0aW9uTW9kZS5NVUxUSVBMRSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHNlbGVjdGlvbiBtb2RlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IChyb3dUb1RvZ2dsZS5jaGVja2VkID0gIXJvd1RvVG9nZ2xlLmNoZWNrZWQpO1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5fdGFibGVSb3dzO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fdGFibGVSb3dzLmZpbmRJbmRleCgocm93KSA9PiByb3cgPT09IHJvd1RvVG9nZ2xlKTtcblxuICAgICAgICBjb25zdCByZW1vdmVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3Iub25SYW5nZUVsZW1lbnRUb2dnbGVkKHNlbGVjdGVkSW5kZXgsIGV2ZW50IGFzIFBvaW50ZXJFdmVudCB8IEtleWJvYXJkRXZlbnQpO1xuXG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IuYXBwbHlWYWx1ZVRvRWFjaEluUmFuZ2UoKGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tpZHhdO1xuICAgICAgICAgICAgaWYgKHJvdy50eXBlID09PSBUYWJsZVJvd1R5cGUuSVRFTSB8fCByb3cuaXNUcmVlKSB7XG4gICAgICAgICAgICAgICAgcm93LmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgICAgIGNoZWNrZWQgPyBhZGRlZC5wdXNoKHJvdykgOiByZW1vdmVkLnB1c2gocm93KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5VHJpc3RhdGVTZWxlY3Rpb24ocm93LCBhZGRlZCwgcmVtb3ZlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZCwgcmVtb3ZlZCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUb2dnbGUgc2VsZWN0YWJsZSByb3cgaW4gU2VsZWN0aW9uTW9kZS5TSU5HTEVcbiAgICAgKi9cbiAgICBfdG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyhyb3dUb1RvZ2dsZTogVGFibGVSb3cpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gU2VsZWN0aW9uTW9kZS5TSU5HTEUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzZWxlY3Rpb24gbW9kZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IChyb3dUb1RvZ2dsZS5jaGVja2VkID0gIXJvd1RvVG9nZ2xlLmNoZWNrZWQpO1xuICAgICAgICBjb25zdCByZW1vdmVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkOiBUYWJsZVJvdzxUPltdID0gW107XG5cbiAgICAgICAgLy8gdW5jaGVjayBwcmV2aW91c2x5IGNoZWNrZWRcbiAgICAgICAgZ2V0U2VsZWN0YWJsZVJvd3ModGhpcy5fdGFibGVSb3dzLCB0aGlzLnNlbGVjdGFibGVLZXkpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKHJvdyA9PT0gcm93VG9Ub2dnbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyb3cuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjaGVja2VkID8gYWRkZWQucHVzaChyb3dUb1RvZ2dsZSkgOiByZW1vdmVkLnB1c2gocm93VG9Ub2dnbGUpO1xuXG4gICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZCwgcmVtb3ZlZCk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBTZWxlY3QgLyBVbnNlbGVjdCBhbGwgc2VsZWN0YWJsZSByb3dzXG4gICAgICovXG4gICAgX3RvZ2dsZUFsbFNlbGVjdGFibGVSb3dzKHNlbGVjdEFsbDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmVkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkOiBUYWJsZVJvdzxUPltdID0gW107XG5cbiAgICAgICAgZ2V0U2VsZWN0YWJsZVJvd3ModGhpcy5fdGFibGVSb3dzLCB0aGlzLnNlbGVjdGFibGVLZXkpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgaWYgKHJvdy5jaGVja2VkID09PSBzZWxlY3RBbGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cuY2hlY2tlZCA9IHNlbGVjdEFsbDtcbiAgICAgICAgICAgIHNlbGVjdEFsbCA/IGFkZGVkLnB1c2gocm93KSA6IHJlbW92ZWQucHVzaChyb3cpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG5cbiAgICAgICAgdGhpcy5fc2hvdWxkQ2hlY2tOZXdSb3dzID0gc2VsZWN0QWxsO1xuXG4gICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudChhZGRlZCwgcmVtb3ZlZCwgdHJ1ZSk7XG5cbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDcmVhdGUgdGFibGUgcm93IHNlbGVjdGlvbiBldmVudFxuICAgICAqL1xuICAgIF9lbWl0Um93U2VsZWN0aW9uQ2hhbmdlRXZlbnQoYWRkZWQ6IFRhYmxlUm93W10sIHJlbW92ZWQ6IFRhYmxlUm93W10sIGFsbDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZ2V0U2VsZWN0YWJsZVJvd3ModGhpcy5fdGFibGVSb3dzLCB0aGlzLnNlbGVjdGFibGVLZXkpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGNoZWNrZWQgfSkgPT4gY2hlY2tlZClcbiAgICAgICAgICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuXG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBzZWxlY3RlZCxcbiAgICAgICAgICAgIGFkZGVkOiBhZGRlZC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgcmVtb3ZlZDogcmVtb3ZlZC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgaW5kZXg6IGFkZGVkLmNvbmNhdChyZW1vdmVkKS5tYXAoKHsgaW5kZXggfSkgPT4gaW5kZXgpLFxuICAgICAgICAgICAgYWxsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uQ2VsbENsaWNrKGNvbElkeDogbnVtYmVyLCByb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmIChyb3cuc3RhdGUgPT09ICdyZWFkb25seScgJiYgaXNUcmVlUm93Rmlyc3RDZWxsKGNvbElkeCwgcm93KSkge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlR3JvdXBSb3cocm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uUm93Q2xpY2socm93OiBUYWJsZVJvdzxUPiB8IG51bGwsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5zdGF0ZSAhPT0gJ3JlYWRvbmx5Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHRhYmJhYmxlRWxlbWVudCA9IHRoaXMuX3RhYmJhYmxlU2VydmljZS5nZXRUYWJiYWJsZUVsZW1lbnQoZXZlbnRUYXJnZXQsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICh0YWJiYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHRhYmJhYmxlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dOYXZpZ2F0ZShyb3cpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdFJvd0FjdGl2YXRlKHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lbWl0Um93QWN0aXZhdGUocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm93c0FjdGl2YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLl90YWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICAgICAgICB0aGlzLnJvd0FjdGl2YXRlLmVtaXQobmV3IFRhYmxlUm93QWN0aXZhdGVFdmVudDxUPihyb3dJbmRleCwgcm93LnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEV4cGFuZC9Db2xsYXBzZSBncm91cCByb3dcbiAgICAgKi9cbiAgICBfdG9nZ2xlR3JvdXBSb3coZ3JvdXBSb3c6IFRhYmxlUm93PFQ+KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BJblByb2dyZXNzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGFibGVUYWJsZVJvdyhncm91cFJvdyk7XG5cbiAgICAgICAgY29uc3QgZ3JvdXBSb3dJbmRleCA9IHRoaXMuX3RhYmxlUm93cy5pbmRleE9mKGdyb3VwUm93KTtcbiAgICAgICAgdGhpcy5yb3dUb2dnbGVPcGVuU3RhdGUuZW1pdChcbiAgICAgICAgICAgIG5ldyBUYWJsZVJvd1RvZ2dsZU9wZW5TdGF0ZUV2ZW50KGdyb3VwUm93SW5kZXgsIGdyb3VwUm93LnZhbHVlLCBncm91cFJvdy5leHBhbmRlZClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9lbWl0Um93TmF2aWdhdGUocm93OiBUYWJsZVJvdzxUPik6IHZvaWQge1xuICAgICAgICBpZiAoIXJvdy5uYXZpZ2F0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5fdGFibGVSb3dzLmluZGV4T2Yocm93KTtcblxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHROYXZpZ2F0ZWRSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuX25hdmlnYXRlZFJvd0luZGV4ID0gcm93SW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvd05hdmlnYXRlLmVtaXQobmV3IFRhYmxlUm93QWN0aXZhdGVFdmVudDxUPihyb3dJbmRleCwgcm93LnZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqIEZldGNoIGRhdGEgc291cmNlIGRhdGEuICovXG4gICAgZmV0Y2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuX3RhYmxlRGF0YVNvdXJjZS5mZXRjaCh0aGlzLmdldFRhYmxlU3RhdGUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRhYmxlUm93c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVUYWJsZVJvd3MoKTtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdG9nZ2xlRXhwYW5kYWJsZVRhYmxlUm93KHJvd1RvVG9nZ2xlOiBUYWJsZVJvdywgZm9yY2VGZXRjaCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIHJvd1RvVG9nZ2xlLmZvcmNlRmV0Y2ggPSBmb3JjZUZldGNoO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IChyb3dUb1RvZ2dsZS5leHBhbmRlZCA9ICFyb3dUb1RvZ2dsZS5leHBhbmRlZCk7XG5cbiAgICAgICAgZmluZFJvd0NoaWxkcmVuKHJvd1RvVG9nZ2xlLCB0aGlzLl90YWJsZVJvd3MpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgLy8gaWYgcGFyZW50IGlzIGNvbGxhcHNlZCB3ZSB3YW50IHRvIGhpZGUgYWxsIG5lc3RlZCBpdGVtc1xuICAgICAgICAgICAgaWYgKCFleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJvdy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBwYXJlbnQgaXMgZXhwYW5kZWQsIHdlIHdhbnQgdG8gc2hvdyBvbmx5IGl0ZW1zIHdoaWNoIGRpcmVjdCBwYXJlbnRzIGFyZSBleHBhbmRlZCBhcyB3ZWxsXG4gICAgICAgICAgICBpZiAoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuaGlkZGVuID0gIWdldFJvd1BhcmVudHMocm93LCByb3dUb1RvZ2dsZSkuZXZlcnkoKHBhcmVudCkgPT4gcGFyZW50LmV4cGFuZGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vblRhYmxlUm93c0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblNweUludGVyc2VjdChpbnRlcnNlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIWludGVyc2VjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFnZTogeyBjdXJyZW50UGFnZSwgcGFnZVNpemUgfVxuICAgICAgICB9ID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG4gICAgICAgIGNvbnN0IHRvdGFsSXRlbXMgPSB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLnRvdGFsSXRlbXMkLnZhbHVlO1xuICAgICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguY2VpbCh0b3RhbEl0ZW1zIC8gKHBhZ2VTaXplIHx8IHRvdGFsSXRlbXMpKTtcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlID49IGxhc3RQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEN1cnJlbnRQYWdlKGN1cnJlbnRQYWdlICsgMSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBNYW51YWxseSB1cGRhdGUgaW5kZXggYWZ0ZXIgd2UgYWRkIG5ldyBpdGVtcyB0byB0aGUgbWFpbiBhcnJheSAqL1xuICAgIHByaXZhdGUgX3JlSW5kZXhUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cy5tYXAoKHJvdywgaW5kZXgpID0+IChyb3cuaW5kZXggPSBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9UYWJsZVJvd3NQaXBlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBSZXNldCB0YWJsZSB3aGVuIHRoZSBkYXRhIHNvdXJjZSBpcyBjaGFuZ2VkLFxuICAgICAgICAgICAgICogYmVjYXVzZSBuZXcgZGF0YSBzb3VyY2UgY2FuIGhhdmUgZGlmZmVyZW50IHNldCBvZiBkYXRhXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuZGF0YVNvdXJjZUNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUYWJsZVJvd3MoW10pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLml0ZW1zJFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBtYXAgc291cmNlIGl0ZW1zIHRvIHRhYmxlIHJvd3NcbiAgICAgICAgICAgICAgICAgICAgbWFwKChzb3VyY2U6IFRbXSkgPT4gdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlKSksXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBpdGVtcyB0byBzaG93IGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHJvd3M6IFRhYmxlUm93W10pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVHJlZVRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvZihyb3dzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5fdGFibGVTZXJ2aWNlLmdyb3VwUnVsZXMkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChncm91cFJ1bGVzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuZ3JvdXBUYWJsZVJvd3Mocm93cywgZ3JvdXBSdWxlcy52YWx1ZXMoKSwgZ3JvdXBSdWxlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocm93cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByb3dzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNjcm9sbGluZyAmJiB0aGlzLmdldFRhYmxlU3RhdGUoKS5wYWdlLmN1cnJlbnRQYWdlID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gWy4uLnRoaXMuX3RhYmxlUm93cywgLi4ucm93c11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFRhYmxlUm93cyhyb3dzKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGRJdGVtcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TWFwID0gbmV3IE1hcDxUYWJsZVJvdzxUPiwgVGFibGVSb3c8VD5bXT4oKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgocm93SXRlbXMsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93TWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMocm93SXRlbXMpLm1hcCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5wYXJlbnQgPSBwYXJlbnRSb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5sZXZlbCA9IHBhcmVudFJvdy5sZXZlbCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5oaWRkZW4gPSAhcGFyZW50Um93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93TWFwO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKHJvd3MsIHBhcmVudFJvdykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3Muc3BsaWNlKHBhcmVudFJvdy5pbmRleCArIHBhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggKyAxLCAwLCAuLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cuY2hpbGRyZW4ucHVzaCguLi5yb3dzKTtcblxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSb3cubGFzdENoaWxkID0gcGFyZW50Um93LmNoaWxkcmVuW3BhcmVudFJvdy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKHRoaXMuX3RhYmxlUm93cyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvVGFibGVTdGF0ZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlU3RhdGVDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2V0Q2hhbmdlZC5lbWl0KHRoaXMuZ2V0Q3VycmVudFByZXNldCgpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLm5lZWRGZXRjaCRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHRoaXMuX3RhYmxlU2VydmljZS5nZXRUYWJsZVN0YXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXRlKSA9PiAhIXN0YXRlICYmICEhdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5fdGFibGVEYXRhU291cmNlKSxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlRGlyZWN0aXZlLl90YWJsZURhdGFTb3VyY2UuZmV0Y2goc3RhdGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZ3JvdXBSdWxlcyQuc3Vic2NyaWJlKChydWxlcykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzR3JvdXBUYWJsZSA9IHJ1bGVzLnNpemUgPiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5zdGF0ZUNoYW5nZSQuc3Vic2NyaWJlKCh7IHR5cGUsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29sdW1ucyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZVRhYmxlQ29sdW1uV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ2hhbmdlLmVtaXQobmV3IFRhYmxlQ29sdW1uc0NoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlsdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQobmV3IFRhYmxlRmlsdGVyQ2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdmcmVlemUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GcmVlemUuZW1pdChuZXcgVGFibGVDb2x1bW5GcmVlemVFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXhlZCA9ICEhdGhpcy5maXhlZCB8fCAhIXRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuc2l6ZSB8fCAhIXRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZWFyY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZVZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlLmVtaXQobmV3IFRhYmxlR3JvdXBDaGFuZ2VFdmVudCh0aGlzLCBzdGF0ZS5jdXJyZW50LCBzdGF0ZS5wcmV2aW91cykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQobmV3IFRhYmxlUGFnZUNoYW5nZUV2ZW50KHRoaXMsIHN0YXRlLmN1cnJlbnQsIHN0YXRlLnByZXZpb3VzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnc29ydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChuZXcgVGFibGVTb3J0Q2hhbmdlRXZlbnQodGhpcywgc3RhdGUuY3VycmVudCwgc3RhdGUucHJldmlvdXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZVJvd1N0YXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlUm93U3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzJC5zdWJzY3JpYmUoKHJvd3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2VEaXJlY3RpdmUuY2hpbGREYXRhU291cmNlPy5kYXRhUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yb3dDaGlsZHJlbkNvdW50KHJvdywgc3RhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGNvdW50KSA9PiByb3cuZm9yY2VGZXRjaCB8fCBjb3VudCA+IHJvdy5jaGlsZHJlbi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocm93LmZvcmNlRmV0Y2ggPSBmYWxzZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1N0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHJvdy5jaGlsZHJlbi5sZW5ndGggLyBzdGF0ZS5wYWdlLnBhZ2VTaXplKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHN0YXRlLnBhZ2UucGFnZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZURpcmVjdGl2ZS5jaGlsZERhdGFTb3VyY2U/LmZldGNoKHJvd1N0YXRlLCBbcm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DZWxsQ2xpY2soZXZ0LmluZGV4LCBldnQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MkLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQWxsU2VsZWN0YWJsZVJvd3MoZXZ0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93JC5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlUm93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUdyb3VwUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvZ2dsZU11bHRpU2VsZWN0Um93JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU11bHRpU2VsZWN0Um93KGV2dC5yb3csIGV2dC5ldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyc6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KGV2dC5yb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZVRhYmxlUm93c0J5RGF0YVNvdXJjZUl0ZW1zKHNvdXJjZTogVFtdKTogVGFibGVSb3c8VD5bXSB7XG4gICAgICAgIGxldCByb3dzOiBUYWJsZVJvdzxUPltdO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkge1xuICAgICAgICAgICAgcm93cyA9IHRoaXMuX2NyZWF0ZVRyZWVUYWJsZVJvd3NCeURhdGFTb3VyY2VJdGVtcyhzb3VyY2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm93cyA9IGNvbnZlcnRPYmplY3RzVG9UYWJsZVJvd3MoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZGVkSXRlbXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLnJvd05hdmlnYXRhYmxlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd3MsXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dDb21wYXJhdG9yXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrTmV3Um93cyAmJiB0aGlzLmZvcmNlQ2hlY2tlZEFsbFN0YXRlKSB7XG4gICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJvdy5jaGVja2VkID0gcm93LmNoZWNrZWQgfHwgdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVUcmVlVGFibGVSb3dzQnlEYXRhU291cmNlSXRlbXMoc291cmNlOiBUW10pOiBUYWJsZVJvdzxUPltdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNvdXJjZVswXSBhcyBhbnk7XG5cbiAgICAgICAgaWYgKGlzVGFibGVSb3coaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VHJlZVRhYmxlUm93VG9GbGF0TGlzdChzb3VyY2UgYXMgVGFibGVSb3dbXSwgdGhpcy5yb3dOYXZpZ2F0YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc09iamVjdChpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUcmVlT2JqZWN0c1RvVGFibGVSb3dzKFxuICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUsXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVSb3dzLFxuICAgICAgICAgICAgICAgIHRoaXMucm93Q29tcGFyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW5LZXksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEtleSxcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkU3RhdGVLZXksXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dOYXZpZ2F0YWJsZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRUYWJsZVJvd3Mocm93cyA9IHRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3MpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZVRhYmxlUm93cyA9IHJvd3M7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93cyA9IFsuLi50aGlzLl9uZXdUYWJsZVJvd3MsIC4uLnRoaXMuX2RhdGFTb3VyY2VUYWJsZVJvd3NdO1xuICAgICAgICB0aGlzLl9yZUluZGV4VGFibGVSb3dzKCk7XG4gICAgICAgIHRoaXMub25UYWJsZVJvd3NDaGFuZ2VkKCk7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk7XG4gICAgICAgIHRoaXMuX3JhbmdlU2VsZWN0b3IucmVzZXQoKTtcblxuICAgICAgICB0aGlzLl9zaG91bGRFbWl0Um93c0NoYW5nZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHJvd3MubGVuZ3RoICYmICF0aGlzLl9jb2x1bW5zV2lkdGhTZXQpIHtcbiAgICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZUNvbHVtbldpZHRoKCk7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zV2lkdGhTZXQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZVZpc2libGVUYWJsZVJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93c1Zpc2libGUgPSB0aGlzLl90YWJsZVJvd3MuZmlsdGVyKChyb3cpID0+ICFyb3cuaGlkZGVuKTtcbiAgICAgICAgY29uc29sZS5sb2coeyB2aXNpYmxlOiB0aGlzLl90YWJsZVJvd3NWaXNpYmxlLCB0b3RhbDogdGhpcy5fdGFibGVSb3dzIH0pO1xuICAgICAgICBpZiAodGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZT8udmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dzSW5WaWV3cG9ydCgwLCB0aGlzLl90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvUm93SGVpZ2h0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuY29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiBBcnJheS5mcm9tKFJPV19IRUlHSFQudmFsdWVzKCkpLmluY2x1ZGVzKHRoaXMucm93SGVpZ2h0KSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5fcm93SGVpZ2h0TWFudWFsbHlTZXQpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnREZW5zaXR5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gUk9XX0hFSUdIVC5nZXQoY29udGVudERlbnNpdHkpID8/IFJPV19IRUlHSFQuZ2V0KENvbnRlbnREZW5zaXR5TW9kZS5DT1pZKSE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlLnJvd0hlaWdodCA9IHRoaXMucm93SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlydHVhbFNjcm9sbERpcmVjdGl2ZS5jYWxjdWxhdGVWaXJ0dWFsU2Nyb2xsUm93cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZDb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5zID0gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLm5hbWUpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdDb2x1bW5zID0gY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgJiYgIXByZXZDb2x1bW5zLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSlcbiAgICAgICAgICAgICAgICAubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGVDb2x1bW5zID0gdGhpcy5nZXRUYWJsZVN0YXRlKCkuY29sdW1ucztcblxuICAgICAgICAgICAgdGhpcy5fYnVpbGRDb2x1bW5zTWFwKGNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQubmV4dChjb2x1bW5zKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxTdGF0ZVNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29sdW1ucyhbLi4uc3RhdGVDb2x1bW5zLCAuLi5uZXdDb2x1bW5zXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxTdGF0ZVNldCA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5zID0gdGhpcy5fdGFibGVTZXJ2aWNlLnRhYmxlQ29sdW1ucyQudmFsdWUubWFwKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lKTtcblxuICAgICAgICAgICAgaWYgKCFlcXVhbCh1cGRhdGVkQ29sdW1ucywgY3VycmVudENvbHVtbnMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnN0YXRlQ2hhbmdlJC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZTogeyBwcmV2aW91czogY3VycmVudENvbHVtbnMsIGN1cnJlbnQ6IHVwZGF0ZWRDb2x1bW5zIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuY29sdW1uc0NoYW5nZSQubmV4dCh7IHByZXZpb3VzOiBjdXJyZW50Q29sdW1ucywgY3VycmVudDogdXBkYXRlZENvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3QgdmlzaWJsZSBjb2x1bW5zIGZvciByZW5kZXJpbmcgcHVycG9zZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jYWxjdWxhdGVWaXNpYmxlQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29sdW1uc0RlZmluaXRpb24gPSB0aGlzLmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMsIGdyb3VwQnkgfSA9IHRoaXMuZ2V0VGFibGVTdGF0ZSgpO1xuICAgICAgICBjb25zdCBncm91cGVkQ29sdW1uc1RvSGlkZSA9IGdyb3VwQnkuZmlsdGVyKCh7IHNob3dBc0NvbHVtbiB9KSA9PiAhc2hvd0FzQ29sdW1uKS5tYXAoKHsgZmllbGQgfSkgPT4gZmllbGQpO1xuXG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSBjb2x1bW5zIC8vIG5lZWQgdG8gc3RhcnQgbWFwcGluZyBmcm9tIHN0YXRlLmNvbHVtbnMgbGlzdCB0byBrZWVwIHJpZ2h0IG9yZGVyXG4gICAgICAgICAgICAubWFwKChuYW1lKSA9PiBjb2x1bW5zRGVmaW5pdGlvbi5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5uYW1lID09PSBuYW1lKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbik6IGNvbHVtbiBpcyBUYWJsZUNvbHVtbiA9PiAhIWNvbHVtbilcbiAgICAgICAgICAgIC5maWx0ZXIoKHsga2V5IH0pID0+ICFncm91cGVkQ29sdW1uc1RvSGlkZS5pbmNsdWRlcyhrZXkpKTtcblxuICAgICAgICBjb25zdCBbdmlzaWJsZUNvbHVtbnMsIHBvcHBpbmdDb2x1bW5zXSA9IGFsbENvbHVtbnMucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5yZXNwb25zaXZlU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFjY1tjb2x1bW4ucmVzcG9uc2l2ZVN0YXRlID09PSAndmlzaWJsZScgPyAwIDogMV0ucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1tdLCBbXV0gYXMgVGFibGVDb2x1bW5bXVtdXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFZpc2libGVDb2x1bW5zKHZpc2libGVDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLnNldFBvcHBpbmdDb2x1bW5zKHBvcHBpbmdDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRhYmxlQ29sdW1uc0xlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlVGFibGVDb2x1bW5zTGVuZ3RoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZUNvbHVtbnNMZW5ndGggPSB0aGlzLl92aXNpYmxlQ29sdW1ucy5sZW5ndGggKyAodGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93biA/IDEgOiAwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhbGN1bGF0ZUlzU2hvd25OYXZpZ2F0aW9uQ29sdW1uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UuX2lzU2hvd25OYXZpZ2F0aW9uQ29sdW1uJC5uZXh0KHRoaXMuX3RhYmxlUm93cy5zb21lKCh0YWJsZVJvdykgPT4gdGFibGVSb3cubmF2aWdhdGFibGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZyZWV6YWJsZUluZm8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMgPSBnZXRGcmVlemFibGVDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUNvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMgPSBnZXRGcmVlemFibGVFbmRDb2x1bW5zKHRoaXMuX3Zpc2libGVDb2x1bW5zLCB0aGlzLmZyZWV6ZUVuZENvbHVtbnNUbyk7XG4gICAgICAgIHRoaXMuZml4ZWQgPSAhIXRoaXMuZml4ZWQgfHwgISF0aGlzLl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgISF0aGlzLl9mcmVlemFibGVFbmRDb2x1bW5zLnNpemU7XG4gICAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5fZnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUNvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgIGNvbHVtbi5fZW5kRnJlZXplZCA9IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuaGFzKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9idWlsZENvbHVtbnNNYXAoY29sdW1ucyA9IHRoaXMuX3RhYmxlU2VydmljZS50YWJsZUNvbHVtbnMkLnZhbHVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleVRvQ29sdW1uTWFwID0gbmV3IE1hcChjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBbY29sdW1uLmtleSwgY29sdW1uXSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlQ2hlY2tlZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZVJvd3MgPSBnZXRTZWxlY3RhYmxlUm93cyh0aGlzLl90YWJsZVJvd3MsIHRoaXMuc2VsZWN0YWJsZUtleSk7XG4gICAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBzZWxlY3RhYmxlUm93cy5maWx0ZXIoKHIpID0+IHIuY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuX2NoZWNrZWRBbGwgPSB0b3RhbFNlbGVjdGVkLmxlbmd0aCA9PT0gc2VsZWN0YWJsZVJvd3MubGVuZ3RoICYmIHNlbGVjdGFibGVSb3dzLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZEFueSA9IHRvdGFsU2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5fY2hlY2tlZFN0YXRlID0gdGhpcy5fY2hlY2tlZEFsbCA/IHRydWUgOiB0aGlzLl9jaGVja2VkQW55ID8gbnVsbCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3BhZ2F0ZXMgdHJpc3RhdGUgc2VsZWN0aW9uIG1vZGUgdG8gdGhlIHRyZWUuIEl0IHN0YXJ0cyB3aXRoIHVwZGF0aW5nIGEgc3RhdGUgZm9yIGFsbCB0aGUgcGFyZW50cyBhbmQgdGhlblxuICAgICAqIHRvIGNoaWxkcmVuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYXBwbHlUcmlzdGF0ZVNlbGVjdGlvbihyb3c6IFRhYmxlUm93LCBhZGRlZFJvd3M6IFRhYmxlUm93PFQ+W10sIHJlbW92ZWRSb3dzOiBUYWJsZVJvdzxUPltdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVUcmlzdGF0ZU1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvUGFyZW50cyhyb3csIGFkZGVkUm93cywgcmVtb3ZlZFJvd3MpO1xuICAgICAgICB0aGlzLl9hcHBseVNlbGVjdGlvblRvQ2hpbGRyZW4ocm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FwcGx5U2VsZWN0aW9uVG9QYXJlbnRzKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgbGV0IGN1cnJlbnRSb3cgPSByb3cucGFyZW50O1xuXG4gICAgICAgIHdoaWxlIChjdXJyZW50Um93KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGZpbmRSb3dDaGlsZHJlbihjdXJyZW50Um93LCB0aGlzLl90YWJsZVJvd3MpLmZpbHRlcigocikgPT4gci5wYXJlbnQgPT09IGN1cnJlbnRSb3cpO1xuICAgICAgICAgICAgY29uc3QgdG90YWxDaGVja2VkOiBUYWJsZVJvdzxUPltdID0gW107XG4gICAgICAgICAgICBjb25zdCB0b3RhbEluZGV0ZXJtaW5hdGU6IFRhYmxlUm93PFQ+W10gPSBbXTtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoci5jaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsQ2hlY2tlZC5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoci5jaGVja2VkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvdGFsSW5kZXRlcm1pbmF0ZS5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZEFsbCA9IHRvdGFsQ2hlY2tlZC5sZW5ndGggPT09IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRBbnkgPSB0b3RhbENoZWNrZWQubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkID0gY2hlY2tlZEFsbCA/IHRydWUgOiBjaGVja2VkQW55IHx8IHRvdGFsSW5kZXRlcm1pbmF0ZS5sZW5ndGggPiAwID8gbnVsbCA6IGZhbHNlO1xuICAgICAgICAgICAgY3VycmVudFJvdy5jaGVja2VkIHx8IGN1cnJlbnRSb3cuY2hlY2tlZCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgID8gYWRkZWRSb3dzLnB1c2goY3VycmVudFJvdylcbiAgICAgICAgICAgICAgICA6IHJlbW92ZWRSb3dzLnB1c2goY3VycmVudFJvdyk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRSb3cgPSBjdXJyZW50Um93LnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHJvdzogVGFibGVSb3csIGFkZGVkUm93czogVGFibGVSb3c8VD5bXSwgcmVtb3ZlZFJvd3M6IFRhYmxlUm93PFQ+W10pOiB2b2lkIHtcbiAgICAgICAgYXBwbHlTZWxlY3Rpb25Ub0NoaWxkcmVuKHRoaXMuX3RhYmxlUm93cywgcm93LCBhZGRlZFJvd3MsIHJlbW92ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvUGFnZVNjcm9sbGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNjcm9sbERpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuc2Nyb2xsZWQoKVxuICAgICAgICAgICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLnBhZ2VTY3JvbGxpbmcpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5nZXRTY3JvbGxUb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2Nyb2xsZWQuZW1pdChzY3JvbGxUb3ApO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgaGF2aW5nIHR3byBwbGFjZXMgdG8gcmVjb3JkIHRoaXMgcG9zc2l0aW9uLCB3ZSBjb3VsZCBqdXN0IHN1YnNjcmliZSBvbmNlLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRhYmxlU3RhdGUoKS5zY3JvbGxUb3BQb3NpdGlvbiA9IHNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9Db2x1bW5Qcm9wZXJ0aWVzQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5tYXJrRm9yQ2hlY2skLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlU2VydmljZS5kZXRlY3RDaGFuZ2VzJC5waXBlKGRlYm91bmNlVGltZSg1KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlV2lkdGhDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fdGFibGVDb250YWluZXJTY3JvbGxXaWR0aCA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGVDb2x1bW5XaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnJlZXphYmxlQ29sdW1ucy5zaXplIHx8IHRoaXMuX2ZyZWV6YWJsZUVuZENvbHVtbnMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLnVwZGF0ZUZyb3plbkNvbHVtbnNXaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl90YWJsZVNjcm9sbFdpZHRoID0gdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2VsbE1vY2soKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlQ29udGFpbmVyTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5oaWRlUmVzaXplcigpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0U2Nyb2xsUG9zaXRpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRUYWJsZVN0YXRlKCk7XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbiB8fCB0aGlzLl90YWJsZVJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZVNjcm9sbGFibGUuaW5pdGlhbGl6ZVNjcm9sbFRvcChzdGF0ZS5zY3JvbGxUb3BQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFJlc2V0cyBlZGl0YWJsZSByb3dzIGRpc2NhcmRpbmcgdGhlIGVkaXRhYmxlIHJvd3MgYXJyYXkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcmVzZXRFZGl0U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25ld1RhYmxlUm93cyA9IFtdO1xuICAgICAgICB0aGlzLl9hZGRlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2ZvcmNlU2VtYW50aWNIaWdobGlnaHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc2V0U2VtYW50aWNIaWdobGlnaHRpbmcoKTtcbiAgICAgICAgdGhpcy5fc2V0VGFibGVSb3dzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub0xvYWRpbmdBbmRSZWZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJC5waXBlKGZpbHRlcigobG9hZGluZ1N0YXRlKSA9PiAhbG9hZGluZ1N0YXRlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uICYmIHRoaXMuX2ZvY3VzYWJsZUdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzYWJsZUdyaWQuZm9jdXNDZWxsKHRoaXMuX3RhYmxlSGVhZGVyUmVzaXplci5mb2N1c2VkQ2VsbFBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29uWm9uZUZyZWUoY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZW1hbnRpY0hpZ2hsaWdodGluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZyQubmV4dCh0aGlzLnNlbWFudGljSGlnaGxpZ2h0aW5nKTtcbiAgICAgICAgdGhpcy5fdGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoJC5uZXh0KHRoaXMuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0aW9uQ29sdW1uV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkNvbHVtbldpZHRoID0gdGhpcy5faXNTZWxlY3Rpb25Db2x1bW5TaG93blxuICAgICAgICAgICAgPyBTRUxFQ1RJT05fQ09MVU1OX1dJRFRILmdldCh0aGlzLmNvbnRlbnREZW5zaXR5T2JzZXJ2ZXIudmFsdWUpID8/IDBcbiAgICAgICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoZWNrQ2VsbE1vY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5jZWxsTW9ja1Zpc2libGUkLm5leHQoXG4gICAgICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuZml4ZWRXaWR0aCAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKSA+ICh0aGlzLnRhYmxlPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxXaWR0aCA/PyAwKVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjwhLS0gVG9vbGJhciAtLT5cbjxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInRhYmxlVG9vbGJhclwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVUb29sYmFyLmNvbnRlbnRUZW1wbGF0ZVJlZlwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIl90b29sYmFyQ29udGV4dFwiXG4+PC9uZy1jb250YWluZXI+XG5cbjxmZC1idXN5LWluZGljYXRvclxuICAgIFtsb2FkaW5nXT1cIihfdGFibGVTZXJ2aWNlLnRhYmxlTG9hZGluZyQgfCBhc3luYykgPT09IHRydWUgJiYgX2RhdGFTb3VyY2VEaXJlY3RpdmUuX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgIFtibG9ja109XCJ0cnVlXCJcbj5cbiAgICA8IS0tIFRhYmxlIENvbnRhaW5lciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19jb250YWluZXJcIiAjdGFibGVDb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFibGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGFibGUgY29sdW1uIHJlc2l6ZXIgZm9yIHZpc3VhbGx5IHJlcHJlc2VudGluZyB0aGUgcmVzaXppbmcgcHJvY2VzcyAtLT5cbiAgICAgICAgPGZkcC10YWJsZS1jb2x1bW4tcmVzaXplciAqbmdJZj1cImVuYWJsZURyYWdSZXNpemVcIiBjbGFzcz1cImZkcC10YWJsZV9fY29sdW1uLXJlc2l6ZXJcIj48L2ZkcC10YWJsZS1jb2x1bW4tcmVzaXplcj5cbiAgICA8L2Rpdj5cbjwvZmQtYnVzeS1pbmRpY2F0b3I+XG5cbjwhLS0gVGFibGUgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3RhYmxlVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fYm9keSBmZC1zY3JvbGxiYXJcIlxuICAgICAgICBbY2xhc3MuZmRwLXRhYmxlX19ib2R5LS12aXJ0dWFsLXNjcm9sbF09XCIhIV92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsXCJcbiAgICAgICAgZmRwVGFibGVTY3JvbGxhYmxlXG4gICAgICAgICN0YWJsZVNjcm9sbGFibGU9XCJ0YWJsZVNjcm9sbGFibGVcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImJvZHlIZWlnaHRcIlxuICAgICAgICBbY2xhc3MuZml4ZWQtaGVpZ2h0XT1cIiEhYm9keUhlaWdodFwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwicGFnZVNjcm9sbGluZyA/ICdmZWVkJyA6IG51bGxcIlxuICAgICAgICBbY2xhc3MuZmQtdGFibGUtLWZpeGVkXT1cIl9mcmVlemFibGVDb2x1bW5zLnNpemUgfHwgZml4ZWRcIlxuICAgID5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICBmZC10YWJsZVxuICAgICAgICAgICAgW2F0dHIucm9sZV09XCJpc1RyZWVUYWJsZSA/ICd0cmVlZ3JpZCcgOiAnZ3JpZCdcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtdGFibGVfX2JvZHktdGFibGVcIlxuICAgICAgICAgICAgW2FsbENlbGxzRm9jdXNhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW3BvcEluXT1cIl9wb3BwaW5nQ29sdW1ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZS0tbm8tb3V0ZXItYm9yZGVyXT1cIm5vT3V0ZXJCb3JkZXJzXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dGhlYWQgZmQtdGFibGUtaGVhZGVyIGNsYXNzPVwiZmRwLXRhYmxlX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLWhlYWRlci1yb3dcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpeGVkXT1cImZpeGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2hvd25TZWxlY3Rpb25Db2x1bW5dPVwiaXNTZWxlY3Rpb25Db2x1bW5TaG93blwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkU3RhdGVdPVwiX2NoZWNrZWRTdGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIl9zZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtmcmVlemVDb2x1bW5zVG9dPVwiZnJlZXplQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUVuZENvbHVtbnNUb109XCJmcmVlemVFbmRDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiX29uUm93Q2xpY2sobnVsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25Sb3dDbGljayhudWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVTZWxlY3Rpb25DaGVja2JveF09XCJfZGF0YVNvdXJjZVRhYmxlUm93cy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cblxuICAgICAgICAgICAgPHRib2R5XG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhIV90YWJsZVJvd3NWaXNpYmxlLmxlbmd0aCAmJiBfdGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zTGVuZ3RoID4gMDsgZWxzZSBlbXB0eVRhYmxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIGZkLXRhYmxlLWJvZHlcbiAgICAgICAgICAgICAgICBmZGtEbmRMaXN0XG4gICAgICAgICAgICAgICAgI3RhYmxlQm9keVxuICAgICAgICAgICAgICAgIFtkcmFnb3ZlclByZWRpY2F0ZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyYWdvdmVyUHJlZGljYXRlXCJcbiAgICAgICAgICAgICAgICBbZHJvcFByZWRpY2F0ZV09XCJfZG5kVGFibGVEaXJlY3RpdmU/LmRyb3BQcmVkaWNhdGVcIlxuICAgICAgICAgICAgICAgIFtub0JvcmRlclhdPVwibm9Cb3JkZXJYIHx8IG5vQm9yZGVyc1wiXG4gICAgICAgICAgICAgICAgW25vQm9yZGVyWV09XCJub0JvcmRlclkgfHwgbm9Cb3JkZXJzXCJcbiAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwicGFnZVNjcm9sbGluZyA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cIl9kbmRUYWJsZVJvd3NQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW2RyYWdnYWJsZV09XCJpc0RyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgW2Ryb3BNb2RlXT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJvcE1vZGUgPz8gJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgKGl0ZW1Ecm9wcGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BJdGVtRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nKT1cIl9jYWxjdWxhdGluZ0xvYWRpbmcoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGRyb3BDYW5jZWxsZWQpPVwiX2RuZFRhYmxlRGlyZWN0aXZlPy5kcm9wQ2FuY2VsbGVkKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0luZGV4IG9mIF90YWJsZVJvd3NJblZpZXdQb3J0UGxhY2Vob2xkZXI7IHRyYWNrQnk6IF9yb3dUcmFja0J5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfdGFibGVSb3dzVmlzaWJsZVtyb3dJbmRleF0gYXMgcm93XCIgW25nU3dpdGNoXT1cInJvdy50eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRwLXRhYmxlLWdyb3VwLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCJyb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXlUb0NvbHVtbk1hcF09XCJfa2V5VG9Db2x1bW5NYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUNvbHVtbnNMZW5ndGhdPVwiX3RhYmxlQ29sdW1uc0xlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2VtaXRSb3dBY3RpdmF0ZShyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zka0RuZEl0ZW1dPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwbHlEcmFnSXRlbUNsYXNzXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3NlcyA6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInJvd3NBY3RpdmFibGUgfHwgISFyb3cubmF2aWdhdGFibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb2N1c2FibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hvdmVyYWJsZV09XCJyb3dzQWN0aXZhYmxlIHx8IGlzU2VsZWN0aW9uQ29sdW1uU2hvd24gfHwgISFyb3cubmF2aWdhdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmFibGVdPVwicm93c0FjdGl2YWJsZSB8fCAhIXJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJyb3dJbmRleCA9PT0gX25hdmlnYXRlZFJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0QWN0aXZlXT1cImhpZ2hsaWdodE5hdmlnYXRlZFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiaXNUcmVlVGFibGUgPyByb3cubGV2ZWwgKyAxIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX29uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydGVkKT1cIl9kbmRUYWJsZURpcmVjdGl2ZT8uZHJhZ0Ryb3BTdGFydCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWFpbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtdGFibGVfX3Jvdy0tZHJhZ2dhYmxlXT1cImlzRHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHAtdGFibGUtcm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd0lkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwicm93SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJfc2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVLZXldPVwic2VsZWN0YWJsZUtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZVRyaXN0YXRlTW9kZV09XCJlbmFibGVUcmlzdGF0ZU1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbHVtbldpZHRoXT1cIl9zZWxlY3Rpb25Db2x1bW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyZWV6ZUNvbHVtbnNUb109XCJmcmVlemVDb2x1bW5zVG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmVlemVFbmRDb2x1bW5zVG9dPVwiZnJlZXplRW5kQ29sdW1uc1RvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy50eXBlID09PSAnaXRlbScgJiYgX3BvcHBpbmdDb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkcC10YWJsZS1wb3BwaW5nLXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWNvbmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93IHwgcm93Q2xhc3NlcyA6IHJvd3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZUdyb3VwUm93KT1cIl90b2dnbGVHcm91cFJvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbENsaWNrZWQpPVwiX29uQ2VsbENsaWNrKCRldmVudC5pbmRleCwgJGV2ZW50LnJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJiAocm93LmNoaWxkSXRlbXNMb2FkaW5nJCB8IGFzeW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBmZC10YWJsZS1yb3cgKmZka1JlcGVhdD1cIjNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW5dPVwiJ2F1dG8gMCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZXM9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjYwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExhc3QgcmVuZGVyZWQgY2hpbGQgcm93LiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cucGFyZW50Py5sYXN0Q2hpbGQ/LmluZGV4ID09PSByb3cuaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHJvdy5wYXJlbnQhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZCAqIC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9faW50ZXJzZWN0aW9uLXNweVwiXG4gICAgICAgICAgICAgICAgICAgIFtmZGtJbnRlcnNlY3Rpb25TcHldPVwicGFnZVNjcm9sbGluZ1RocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgIChpbnRlcnNlY3RlZCk9XCIkZXZlbnQgJiYgX29uU3B5SW50ZXJzZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cInBhZ2VTY3JvbGxpbmdUaHJlc2hvbGQgKiAtMVwiXG4gICAgICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuXG4gICAgICAgICAgICA8dGJvZHkgKm5nSWY9XCJwYWdlU2Nyb2xsaW5nXCIgY2xhc3M9XCJmZC10YWJsZV9fYm9keV9fZm9jdXMtbW9ja1wiPjwvdGJvZHk+XG5cbiAgICAgICAgICAgIDwhLS0gdGhlIHRib2R5IGVsZW1lbnQgYmVsb3cgaXMgc28gdGhlIHNjcm9sbGJhciByZW5kZXJzIGNvcnJlY3RseSAtLT5cbiAgICAgICAgICAgIDx0Ym9keSAqbmdJZj1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsXCI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjEwMCVcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIl92aXJ0dWFsU2Nyb2xsRGlyZWN0aXZlPy52aXJ0dWFsU2Nyb2xsVG90YWxIZWlnaHRcIj48L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBFbXB0eSBUYWJsZSBNZXNzYWdlIC0tPlxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlVGVtcGxhdGU+XG4gICAgPHRib2R5ICpuZ0lmPVwiIV9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keT5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdyAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgPHRkIGZkLXRhYmxlLWNlbGwgKmZka1JlcGVhdD1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZmQtc2tlbGV0b24gW3N0eWxlLm1hcmdpbl09XCInYXV0byAwJ1wiIHR5cGU9XCJ0ZXh0XCIgdGV4dExpbmVzPVwiMVwiIHdpZHRoPVwiNjAlXCI+PC9mZC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgPC90Ym9keT5cblxuICAgIDx0Ym9keSAqbmdJZj1cIl9kYXRhU291cmNlRGlyZWN0aXZlLl9maXJzdExvYWRpbmdEb25lXCIgZmQtdGFibGUtYm9keSBjbGFzcz1cImZkcC10YWJsZV9fZW1wdHlcIj5cbiAgICAgICAgPHRyIGZkLXRhYmxlLXJvdz5cbiAgICAgICAgICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwiZmQtdGFibGVfX2NlbGwtLW5vLWRhdGFcIiBbYXR0ci5jb2xzcGFuXT1cIl90YWJsZUNvbHVtbnNMZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXRhYmxlX19lbXB0eS10YWJsZS1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNub0RhdGFXcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImZkcC10YWJsZS1uby1kYXRhLXdyYXBwZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhbm9EYXRhV3JhcHBlci5oYXNDaGlsZE5vZGVzKCkgJiYgX3RhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbXB0eVRhYmxlTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUuZGVmYXVsdEVtcHR5TWVzc2FnZScgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIl90YWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub1Zpc2libGVDb2x1bW5zTWVzc2FnZSB8fCAoJ3BsYXRmb3JtVGFibGUubm9WaXNpYmxlQ29sdW1uc01lc3NhZ2UnIHwgZmRUcmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG48L25nLXRlbXBsYXRlPlxuIl19