ca-components 1.0.16 → 1.0.18

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.
Files changed (36) hide show
  1. package/esm2022/lib/components/ca-input/ca-input.component.mjs +20 -11
  2. package/esm2022/lib/components/ca-input/services/ca-input-state.service.mjs +3 -4
  3. package/esm2022/lib/components/ca-map/ca-map.component.mjs +45 -8
  4. package/esm2022/lib/components/ca-map/models/map.model.mjs +1 -1
  5. package/esm2022/lib/components/ca-map/utils/constants/map-options.constants.mjs +3 -3
  6. package/esm2022/lib/components/ca-map/utils/helpers/map.helper.mjs +19 -12
  7. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +3 -3
  8. package/esm2022/lib/components/ca-period-content/ca-period-content.component.mjs +3 -3
  9. package/esm2022/lib/components/ca-period-content/components/ca-period-content-payment/ca-period-content-payment.component.mjs +3 -3
  10. package/esm2022/lib/components/ca-period-content/models/payroll-report.type.mjs +1 -1
  11. package/esm2022/lib/components/ca-progress-bar/ca-progress-bar.component.mjs +1 -1
  12. package/esm2022/lib/components/ca-right-side-panel/ca-right-side-panel.component.mjs +13 -5
  13. package/esm2022/lib/components/ca-right-side-panel/components/ca-right-side-panel-menu/ca-right-side-panel-menu.component.mjs +38 -9
  14. package/esm2022/lib/components/ca-right-side-panel/config/ca-right-side-panel.config.mjs +56 -14
  15. package/esm2022/lib/components/ca-right-side-panel/models/company/company-navigation-data.model.mjs +2 -0
  16. package/esm2022/lib/components/ca-right-side-panel/models/index.mjs +2 -1
  17. package/esm2022/lib/components/ca-right-side-panel/models/navigation-item.model.mjs +1 -1
  18. package/esm2022/lib/components/ca-right-side-panel/utils/svg-routes/index.mjs +2 -1
  19. package/esm2022/lib/components/ca-right-side-panel/utils/svg-routes/side-panel-company-svg.routes.mjs +7 -0
  20. package/fesm2022/ca-components.mjs +201 -70
  21. package/fesm2022/ca-components.mjs.map +1 -1
  22. package/lib/components/ca-filters/ca-filter.component.d.ts +2 -2
  23. package/lib/components/ca-input/ca-input.component.d.ts +5 -2
  24. package/lib/components/ca-map/ca-map.component.d.ts +7 -1
  25. package/lib/components/ca-map/models/map.model.d.ts +4 -0
  26. package/lib/components/ca-map/utils/helpers/map.helper.d.ts +2 -1
  27. package/lib/components/ca-period-content/models/payroll-report.type.d.ts +1 -0
  28. package/lib/components/ca-right-side-panel/ca-right-side-panel.component.d.ts +5 -2
  29. package/lib/components/ca-right-side-panel/components/ca-right-side-panel-menu/ca-right-side-panel-menu.component.d.ts +6 -5
  30. package/lib/components/ca-right-side-panel/config/ca-right-side-panel.config.d.ts +1 -1
  31. package/lib/components/ca-right-side-panel/models/company/company-navigation-data.model.d.ts +5 -0
  32. package/lib/components/ca-right-side-panel/models/index.d.ts +1 -0
  33. package/lib/components/ca-right-side-panel/models/navigation-item.model.d.ts +1 -0
  34. package/lib/components/ca-right-side-panel/utils/svg-routes/index.d.ts +1 -0
  35. package/lib/components/ca-right-side-panel/utils/svg-routes/side-panel-company-svg.routes.d.ts +6 -0
  36. package/package.json +1 -1
@@ -538,7 +538,6 @@ export class InputStateService {
538
538
  InputStringEnum.QTY,
539
539
  InputStringEnum.PURCHASE_PRICE,
540
540
  InputStringEnum.FUEL_TANK_SIZE,
541
- InputStringEnum.DEVICE_NO,
542
541
  InputStringEnum.WEIGHT,
543
542
  InputStringEnum.FUEL_PER_MILES,
544
543
  InputStringEnum.FUEL_PRICE_MAP,
@@ -1207,9 +1206,9 @@ export class InputStateService {
1207
1206
  // Price Separator - remove dot on focus out
1208
1207
  if (this.inputConfig.priceSeparator &&
1209
1208
  this.superControl.control?.value &&
1210
- this.superControl.control?.value?.indexOf('.') >= 0) {
1209
+ this.superControl.control?.value?.toString().indexOf('.') >= 0) {
1211
1210
  // 4.1. Check for Dot position
1212
- this.hasDecimalIndex = this.superControl.control?.value.indexOf('.');
1211
+ this.hasDecimalIndex = this.superControl.control?.value.toString().indexOf('.');
1213
1212
  let integerPart = this.thousandSeparatorPipe.transform(this.superControl.control?.value
1214
1213
  .slice(0, this.hasDecimalIndex)
1215
1214
  .slice(0, this.inputConfig.priceSeparatorLimitation));
@@ -2125,4 +2124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2125
2124
  providedIn: 'root',
2126
2125
  }]
2127
2126
  }], ctorParameters: function () { return [{ type: i1.CalendarDateTimePickerService }, { type: i2.CaInputValidationService }, { type: i3.ThousandSeparatorPipe }]; } });
2128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0L3NlcnZpY2VzL2NhLWlucHV0LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBRWIsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVM1QixVQUFVO0FBQ1YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsUUFBUTtBQUNSLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBTWxCLGFBQWE7QUFDYixPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUs1RCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBK0g1QixZQUNVLGVBQThDLEVBQzlDLHdCQUFrRDtJQUUxRCxRQUFRO0lBQ0EscUJBQTRDO1FBSjVDLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQUM5Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBR2xELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFuSTlDLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzNELGtCQUFhLEdBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQywwQkFBcUIsR0FBRyxJQUFJ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RU0sU0FBUztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQTUwRlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZHNFdmVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8vIGJvb3RzdHJhcFxuaW1wb3J0IHsgTmdiUG9wb3ZlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuLy8gaGVscGVyc1xuaW1wb3J0IHsgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hlbHBlcnMvbWV0aG9kcy1jYWxjdWxhdGlvbnMuaGVscGVyJztcblxuLy8gZW51bXNcbmltcG9ydCB7XG4gIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0sXG4gIElucHV0Q29tbWFuZHNUeXBlLFxuICBJbnB1dENvbW1hbmRzQWN0aW9uLFxuICBJbnB1dFN0cmluZ0VudW0sXG59IGZyb20gJy4uL2VudW1zJztcblxuLy8gc2VydmljZXNcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvc2VydmljZXMvY2FsZW5kYXItZGF0ZXRpbWUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jYS1pbnB1dC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuXG4vLyBTdmcgcm91dGVzXG5pbXBvcnQgeyBJbnB1dENoYW5nZVZhbHVlLCBJbnB1dFN2Z1JvdXRlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gcGlwZXNcbmltcG9ydCB7IFRob3VzYW5kU2VwYXJhdG9yUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3Rob3VzYW5kLXNlcGFyYXRvci5waXBlJztcblxuLy8gY29uc3RhbnRzXG5pbXBvcnQgeyBJbnB1dENvbnN0YW50cyB9IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dFN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgaXNGb2N1c0lucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNGb2N1c0lucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0ZvY3VzSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNUb3VjaGVkSW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc1RvdWNoZWRJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNUb3VjaGVkSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNWaXNpYmxlQ29tbWFuZHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVDb21tYW5kcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNWaXNpYmxlQ29tbWFuZHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNFZGl0SW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0VkaXRJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0Ryb3Bkb3duVG9nZ2xlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihuZXcgRGF0ZSgpKTtcbiAgcHVibGljIGRhdGVUaW1lSW5wdXREYXRlJDogT2JzZXJ2YWJsZTxEYXRlPiA9XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzaG93RGF0ZUlucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc2hvd0RhdGVJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuc2hvd0RhdGVJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0NhcHNMb2NrT25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0NhcHNMb2NrT24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzQ2Fwc0xvY2tPblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxJbnB1dENoYW5nZVZhbHVlPigpO1xuICBwdWJsaWMgb25DaGFuZ2UkOiBPYnNlcnZhYmxlPElucHV0Q2hhbmdlVmFsdWU+ID1cbiAgICB0aGlzLm9uQ2hhbmdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPdXRwdXRzXG4gIHByaXZhdGUgY29tbWFuZEV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PENvbW1hbmRzRXZlbnQ+KCk7XG4gIHB1YmxpYyBjb21tYW5kRXZlbnQkOiBPYnNlcnZhYmxlPENvbW1hbmRzRXZlbnQ+ID1cbiAgICB0aGlzLmNvbW1hbmRFdmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBjbGVhcklucHV0RXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGNsZWFySW5wdXRFdmVudCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGluY29ycmVjdElucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBpbmNvcnJlY3RJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaW5jb3JyZWN0SW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc2hvd0hpZGVEcm9wZG93blN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgc2hvd0hpZGVEcm9wZG93biQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuc2hvd0hpZGVEcm9wZG93blN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkcm9wRG93bktleU5hdmlnYXRpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8e1xuICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICBkYXRhOiBJQ2FJbnB1dCB8IG51bGw7XG4gIH0+KCk7XG4gIHB1YmxpYyBkcm9wRG93bktleU5hdmlnYXRpb24kOiBPYnNlcnZhYmxlPHtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG4gICAgZGF0YTogSUNhSW5wdXQgfCBudWxsO1xuICB9PiA9IHRoaXMuZHJvcERvd25LZXlOYXZpZ2F0aW9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGJsdXJJbnB1dFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgYmx1cklucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYmx1cklucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGNoYW5nZUlucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PElucHV0Q2hhbmdlVmFsdWU+KCk7XG4gIHB1YmxpYyBjaGFuZ2VJbnB1dCQ6IE9ic2VydmFibGU8SW5wdXRDaGFuZ2VWYWx1ZT4gPVxuICAgIHRoaXMuY2hhbmdlSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBjb21iaW5lZFZhcmlhYmxlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlzRm9jdXNJbnB1dCQsXG4gICAgdGhpcy5pc1RvdWNoZWRJbnB1dCQsXG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kcyQsXG4gICAgdGhpcy5pc0VkaXRJbnB1dCQsXG4gICAgdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlciQsXG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSQsXG4gICAgdGhpcy5zaG93RGF0ZUlucHV0JCxcbiAgICB0aGlzLmlzQ2Fwc0xvY2tPbiQsXG4gIF0pO1xuXG4gIHByaXZhdGUgY2RSZWYhOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICBwcml2YXRlIGlucHV0Q29uZmlnITogSUNhSW5wdXQ7XG4gIHByaXZhdGUgaW5jb3JyZWN0VmFsdWUhOiBib29sZWFuO1xuXG4gIHByaXZhdGUgaW5wdXQhOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIHN1cGVyQ29udHJvbCE6IE5nQ29udHJvbDtcblxuICAvLyBEYXRlXG4gIHB1YmxpYyBuZXdJbnB1dENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdGlvbklucHV0OiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSBwcmV2ZW50Qmx1ciE6IGJvb2xlYW47XG5cbiAgLy8gSW5wdXQgU2VsZWN0aW9uXG4gIHB1YmxpYyBpbnB1dFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzcGFuT25lITogRWxlbWVudFJlZjtcbiAgcHVibGljIHNwYW5Ud28hOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgc3BhblRocmVlITogRWxlbWVudFJlZjtcbiAgcHVibGljIGhvbGRlcjEhOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgdDIhOiBOZ2JQb3BvdmVyO1xuICBwdWJsaWMgbmdiTWFpblBvcG92ZXIhOiBOZ2JQb3BvdmVyO1xuXG4gIHByaXZhdGUgaW5wdXRDb21tYW5kc1RpbWVvdXQhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBmb2N1c0JsdXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lb3V0Q2xlYW5lciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIGRhdGVUaW1lTWFpblRpbWVyITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG4gIHByaXZhdGUgcGFzc3dvcmRUaW1lb3V0ITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG5cbiAgLy8gUHJpY2UgU2VwYXJhdG9yXG4gIHB1YmxpYyBjdXJzb3JJbnB1dFBvc2l0aW9uITogbnVtYmVyO1xuICBwdWJsaWMgaGFzRGVjaW1hbEluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIG9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQhOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBpc0RvdERlbGV0ZWQhOiBib29sZWFuO1xuXG4gIC8vIE51bWJlciBvZiBzcGFjZXNcbiAgcHVibGljIG51bWJlck9mQ29uc2VjdXRpdmVseVNwYWNlczogbnVtYmVyID0gMDtcbiAgcHVibGljIG9uZVNwYWNlT25seUNvdW50ZXI6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBsYXN0Q3Vyc29yU3BhY2VQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gIHB1YmxpYyBudW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBudW1iZXJPZlBvaW50czogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYUlucHV0VmFsaWRhdGlvblNlcnZpY2U6IENhSW5wdXRWYWxpZGF0aW9uU2VydmljZSxcblxuICAgIC8vIFBpcGVzXG4gICAgcHJpdmF0ZSB0aG91c2FuZFNlcGFyYXRvclBpcGU6IFRob3VzYW5kU2VwYXJhdG9yUGlwZVxuICApIHt9XG5cbiAgcHVibGljIHNldElzRm9jdXNJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c0lucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc1RvdWNoZWRJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNUb3VjaGVkSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzVmlzaWJsZUNvbW1hbmRzKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kc1N1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNFZGl0SW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc0Ryb3Bkb3duVG9nZ2xlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldERhdGVUaW1lSW5wdXREYXRlKHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2hvd0RhdGVJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RhdGVJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNDYXBzTG9ja09uKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0NhcHNMb2NrT25TdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElucHV0RWxlbWVudFJlZihpbnB1dDogRWxlbWVudFJlZiwgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuY2RSZWYgPSBjZFJlZjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdXBlckNvbnRyb2woc3VwZXJDb250cm9sOiBOZ0NvbnRyb2wpOiB2b2lkIHtcbiAgICB0aGlzLnN1cGVyQ29udHJvbCA9IHN1cGVyQ29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnB1dENvbmZpZyhjb25maWc6IElDYUlucHV0KTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dENvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbmNvcnJlY3RWYWx1ZShpbmNvcnJlY3RWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW5jb3JyZWN0VmFsdWUgPSBpbmNvcnJlY3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kRXZlbnQodmFsdWU6IENvbW1hbmRzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRFdmVudFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xlYXJJbnB1dEV2ZW50KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcklucHV0RXZlbnRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldEluY29ycmVjdElucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmNvcnJlY3RJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2hvd0hpZGVEcm9wZG93bih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0hpZGVEcm9wZG93blN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHZhbHVlOiB7XG4gICAga2V5Q29kZTogbnVtYmVyO1xuICAgIGRhdGE6IElDYUlucHV0IHwgbnVsbDtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZHJvcERvd25LZXlOYXZpZ2F0aW9uU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCbHVySW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmJsdXJJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2hhbmdlSW5wdXQodmFsdWU6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUlucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRPbkNoYW5nZSh2YWx1ZTogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDaGFuZ2VJbnB1dChvYmopO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChvYmopO1xuICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb2JqO1xuICAgICAgICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IpIHtcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvYmo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gQ2xlYXIgd2hvbGUgaW5wdXRcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5yZW1vdmVJbnB1dCkge1xuICAgICAgdGhpcy5zZXRDbGVhcklucHV0RXZlbnQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEluY29ycmVjdCBJbnB1dFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmluY29ycmVjdElucHV0KSB7XG4gICAgICB0aGlzLmluY29ycmVjdFZhbHVlID0gIXRoaXMuaW5jb3JyZWN0VmFsdWU7XG4gICAgICB0aGlzLnNldEluY29ycmVjdElucHV0KHRoaXMuaW5jb3JyZWN0VmFsdWUpO1xuICAgIH1cbiAgICAvLyBOYXRpdmUgY2xlYXJcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzID0gMDtcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5UG9pbnRzID0gMDtcbiAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID0gMDtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZXRJc1RvdWNoZWRJbnB1dCh0cnVlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIGlmIChcbiAgICAgICAgKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIsXG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSLFxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQsXG4gICAgICAgICAgXSBhcyBzdHJpbmdbXVxuICAgICAgICApLmluY2x1ZGVzKHRoaXMuaW5wdXRDb25maWcubmFtZSlcbiAgICAgIClcbiAgICAgICAgdGhpcy5yZXNldERhdGVUaW1lSW5wdXRzKCk7XG5cbiAgICAgIHRoaXMuc2V0Q2xlYXJJbnB1dEV2ZW50KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm1UZXh0KGV2ZW50OiBFdmVudCwgaXNQYXN0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5jdXJzb3JJbnB1dFBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgLy8gSGFuZGxlIHBhc3RlIG9wZXJhdGlvblxuICAgIGlmIChpc1Bhc3RlKSB7XG4gICAgICB0aGlzLmhhbmRsZVBhc3RlKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5VGV4dFRyYW5zZm9ybWF0aW9uKCk7XG5cbiAgICAvLyBBcHBseSB0aG91c2FuZCBhbmQgcHJpY2Ugc2VwYXJhdG9ycyBpZiBjb25maWd1cmVkXG4gICAgdGhpcy5hcHBseVRob3VzYW5kU2VwYXJhdG9yKCk7XG4gICAgdGhpcy5hcHBseVByaWNlU2VwYXJhdG9yKCk7XG5cbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24odmFsdWUpO1xuXG4gICAgdGhpcy5zYW5pdGl6ZUNvbnNlY3V0aXZlU3BhY2VzKCk7XG5cbiAgICB0aGlzLnJlbW92ZUxlYWRpbmdaZXJvKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIHRoaXMubGltaXRJbnB1dExlbmd0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5wdXRTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBEZWxldGUgc3BhY2VzIG9uIGJlZ2luIGFuZCBlbmRcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUudHJpbSgpO1xuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbGltaXRJbnB1dExlbmd0aCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aCA+IHRoaXMuaW5wdXRDb25maWcubWF4TGVuZ3RoISkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnN1YnN0cmluZyhcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5tYXhMZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRleHRUcmFuc2Zvcm1hdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgc3dpdGNoICh0aGlzLmlucHV0Q29uZmlnLnRleHRUcmFuc2Zvcm0pIHtcbiAgICAgIGNhc2UgSW5wdXRTdHJpbmdFbnVtLkNBUElUQUxJWkU6XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICAgICAgdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0U3RyaW5nRW51bS5VUFBFUkNBU0U6XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlLnRvTG9jYWxlVXBwZXJDYXNlKCdlbi1VUycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRTdHJpbmdFbnVtLkNBUElUQUxJWkVEX0NBU0U6XG4gICAgICAgIGNvbnN0IGNhcGl0YWxpemVkQ2FzZVdvcmRzID0gdmFsdWUucmVwbGFjZShcbiAgICAgICAgICAvKF5cXHd7MX0pfChcXHMrXFx3ezF9KS9nLFxuICAgICAgICAgIChsZXR0ZXI6IHN0cmluZykgPT4gbGV0dGVyLnRvVXBwZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjYXBpdGFsaXplZENhc2VXb3JkcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRob3VzYW5kU2VwYXJhdG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnRob3VzYW5kU2VwYXJhdG9yICYmIGNvbnRyb2xWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuaXNBbGxaZXJvcyhjb250cm9sVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoJzAnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oY29udHJvbFZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQcmljZVNlcGFyYXRvcigpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvciAmJiBjb250cm9sVmFsdWUpIHtcbiAgICAgIC8vIDAuIERvbid0IGFsbG93IDAgYXMgZmlyc3QgY2hhcmFjdGVyXG4gICAgICBpZiAodGhpcy5pc0FsbFplcm9zKGNvbnRyb2xWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgnMCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIHVzZXIgc2V0IGRvdFxuICAgICAgaWYgKGNvbnRyb2xWYWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0V2l0aERlY2ltYWwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIElmIHVzZXIgZG9lc24ndCBzZXQgZG90XG4gICAgICAgIHRoaXMuZm9ybWF0V2l0aG91dERlY2ltYWwoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRJbnB1dEN1cnNvclBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRXaXRoRGVjaW1hbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICAvLyA0LjEuIENoZWNrIGZvciBEb3QgcG9zaXRpb25cbiAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IGNvbnRyb2xWYWx1ZS5pbmRleE9mKCcuJyk7XG5cbiAgICB0aGlzLm9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24hICsgMztcblxuICAgIC8vIDQuMi4gRGl2aWRlIG51bWJlciBpbnRvIGRlY2ltYWwgYW5kIGludGVnZXIgcGFydHNcbiAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgICBjb250cm9sVmFsdWVcbiAgICAgICAgLnNsaWNlKDAsIHRoaXMuaGFzRGVjaW1hbEluZGV4KVxuICAgICAgICAuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgKTtcbiAgICBsZXQgZGVjaW1hbFBhcnQgPSBjb250cm9sVmFsdWUuc2xpY2UodGhpcy5oYXNEZWNpbWFsSW5kZXggKyAxKTtcblxuICAgIGlmICghaW50ZWdlclBhcnQpIHtcbiAgICAgIGludGVnZXJQYXJ0ID0gJzAnO1xuICAgIH1cblxuICAgIC8vIDQuNC4gR2V0IG9ubHkgdHdvIG51bWJlcnMgb2YgdGhlIGRlY2ltYWwgcGFydFxuICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc2xpY2UoMCwgMik7XG5cbiAgICBpZiAoZGVjaW1hbFBhcnQpIHtcbiAgICAgIC8vIDQuNS4gU2V0IGZvcm1hdHRlZCBudW1iZXJcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoYCR7aW50ZWdlclBhcnR9LiR7ZGVjaW1hbFBhcnR9YCk7XG4gICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFdpdGhvdXREZWNpbWFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gLTE7XG5cbiAgICBpZiAoY29udHJvbFZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEpIHtcbiAgICAgIC8vIFRyYW5zZm9ybSB2YWx1ZSB3aXRoIHRob3VzYW5kIHNlcGFyYXRvclxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclBpcGUudHJhbnNmb3JtKGNvbnRyb2xWYWx1ZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIExpbWl0IHZhbGlkYXRpb25cbiAgICAgIHRoaXMub3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCA9XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uO1xuXG4gICAgICAvLyBDdXQgdmFsdWVcbiAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICBjb250cm9sVmFsdWUuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyYW5zZm9ybSB2YWx1ZSBhZ2FpbiBhZnRlciBjdXR0aW5nXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oY29udHJvbFZhbHVlKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldElucHV0Q3Vyc29yUG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICB0aGlzLmN1cnNvcklucHV0UG9zaXRpb24gK1xuICAgICAgICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEgPyAxIDogMCksXG4gICAgICAgICAgdGhpcy5jdXJzb3JJbnB1dFBvc2l0aW9uICtcbiAgICAgICAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5pbmRleE9mKCcuJykgPT09IC0xID8gMSA6IDApXG4gICAgICAgICk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgaGF2ZSAke259MDAwMDAgYW5kIHdlIGRlbGV0ZSBOIHRoZW4gd2UgZ290IHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGRvdFxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQWxsWmVyb3ModmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJykuZXZlcnkoKGNoYXIpID0+IGNoYXIgPT09ICcwJyk7XG4gIH1cblxuICBwcml2YXRlIGN1c3RvbVZhbGlkYXRpb24odmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZ05hbWUgPSB0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChcbiAgICAgIGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5ZRUFSICYmXG4gICAgICBwYXJzZUludCh2YWx1ZSkgPiBwYXJzZUludChtb21lbnQoKS5hZGQoMSwgJ3llYXInKS5mb3JtYXQoJ1lZWVknKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5NT05USFMpIHtcbiAgICAgIGlmIChwYXJzZUludCh2YWx1ZSkgPCAxIHx8IHBhcnNlSW50KHZhbHVlKSA+IDEyKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5BWExFUykge1xuICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IDEgfHwgcGFyc2VJbnQodmFsdWUpID4gMTcpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IDEpIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBtaW46IDEgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodmFsdWUpID4gMTcpIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBtYXg6IDE3IH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY29uZmlnTmFtZSA9PT0gSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRSAmJlxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuY2FwaXRhbGl6ZVdvcmRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYXBpdGFsaXplV29yZHMoKTogdm9pZCB7XG4gICAgY29uc3Qgd29yZHMgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IGNhcGl0YWxpemVkID0gd29yZHMubWFwKCh3b3JkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGNhcGl0YWxpemVkLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemVDb25zZWN1dGl2ZVNwYWNlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWdOYW1lcyA9IElucHV0Q29uc3RhbnRzLnRleHRUcmFuc2Zvcm1Db25maWdOYW1lcztcblxuICAgIGlmIChjb25maWdOYW1lcy5pbmNsdWRlcyh0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnJlcGxhY2UoXG4gICAgICAgIC9cXHN7Mix9L2csXG4gICAgICAgICcgJ1xuICAgICAgKTtcbiAgICAgIGlmIChzYW5pdGl6ZWRJbnB1dCAhPT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHNhbml0aXplZElucHV0O1xuICAgICAgICB0aGlzLnNldEN1cnNvckZvclNhbml0aXplZElucHV0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJzb3JGb3JTYW5pdGl6ZWRJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgIHRoaXMubGFzdEN1cnNvclNwYWNlUG9zaXRpb24gLSAxLFxuICAgICAgICB0aGlzLmxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uIC0gMVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGVhZGluZ1plcm8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucmVtb3ZlTGVhZGluZ1plcm8pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuXG4gICAgICBpZiAoIWN1cnJlbnRWYWx1ZSkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5lZ2F0aXZlTGVhZGluZ1plcm8pIHtcbiAgICAgICAgY29uc3QgaXNOZWdhdGl2ZSA9IGN1cnJlbnRWYWx1ZS5zdGFydHNXaXRoKCctJyk7XG5cbiAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAvLyBHZXQgdGhlIHBhcnQgYWZ0ZXIgdGhlIG5lZ2F0aXZlIHNpZ25cbiAgICAgICAgICBjb25zdCBudW1iZXJQYXJ0ID0gY3VycmVudFZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWROdW1iZXIgPSBudW1iZXJQYXJ0LnJlcGxhY2UoL14wKyg/PVxcZCkvLCAnJyk7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShgLSR7dHJhbnNmb3JtZWROdW1iZXJ9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5yZXBsYWNlKC9eMCsoPz1cXGQpLywgJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICBjdXJyZW50VmFsdWUucmVwbGFjZSgvXjArKD8hJCkvLCAnJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0b0ZvY3VzRmlyc3RJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgJiYgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgPSBmYWxzZTtcbiAgICAgIH0sIDMwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25LZXlwcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4gfCB2b2lkIHtcbiAgICAvLyBEaXNhYmxlIGZpcnN0IGNoYXJhY3RlciB0byBiZSBzcGFjZVxuICAgIGlmIChcbiAgICAgICF0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiZcbiAgICAgIC9eXFxzKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QUklDRV9TRVBBUkFUT1IpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8ubGVuZ3RoID09PVxuICAgICAgICAgICAgdGhpcy5vcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ICYmXG4gICAgICAgICAgZXZlbnQua2V5Q29kZSAhPT0gNDZcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gIERpc2FibGUgbXVsdGlwbGUgZG90c1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG5cbiAgICAgICAgLy8gRmluZCBpbmRleCBvZiBkb3RcbiAgICAgICAgY29uc3QgdmFsdWVUb1N0cmluZyA9IFN0cmluZyh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSB2YWx1ZVRvU3RyaW5nPy5pbmRleE9mKCcuJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzRGVjaW1hbEluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyAxLiBEaXZpZGUgbnVtYmVyIG9uIGRlY2ltYWwgYW5kIGludGVnZXIgcGFydFxuICAgICAgICAgIGxldCBpbnRlZ2VyUGFydCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghaW50ZWdlclBhcnQpIGludGVnZXJQYXJ0ID0gJzAnO1xuXG4gICAgICAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc2xpY2UoXG4gICAgICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCArIDFcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gMi4gRGlzYWJsZSBtb3JlIHRoYW4gdHdvIGRlY2ltYWxzXG4gICAgICAgICAgaWYgKGRlY2ltYWxQYXJ0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMy4gR2V0IG9ubHkgdHdvIG51bWJlcnMgb2YgZGVjaW1hbCBwYXJ0XG4gICAgICAgICAgZGVjaW1hbFBhcnQgPSBkZWNpbWFsUGFydC5zbGljZSgwLCAyKTtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIC8vIDQuIFNldCBmb3JtYXR0ZWQgbnVtYmVyXG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ICsgJy4nICsgZGVjaW1hbFBhcnRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDUxKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3Vyc29ySW5wdXRQb3NpdGlvbiA9XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBjdXJyZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5CVVNJTkVTU19OQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU0hPUF9OQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9TVE9QLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUFJPRFVDRVJfTkFNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlRFUk1JTkFMX05BTUUsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5CVVNJTkVTU19OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5FSU4sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NQ19GRixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBIT05FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEhPTkVfRVhURU5TSU9OLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQUNDT1VOVF9CQU5LLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUk9VVElOR19CQU5LLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU1NOLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9DQVJELFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRU1QVFlfV0VJR0hULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQ1JFRElUX0xJTUlULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUE9fQk9YLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUFJJQ0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5UUkFJTEVSX1ZPTFVNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlJFUEFJUl9PRE9NRVRFUixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlVTRE9ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uSVJQLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU1RBUlRJTkcsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DVVNUT01FUl9QQVlfVEVSTSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNVU1RPTUVSX0NSRURJVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkRFRkFVTFRfQkFTRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkVBQ0hfT0NDVVJSRU5DRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkRBTUFHRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBFUlNPTkFMX0FEVkVSX0lOSixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1FRElDQUxfRVhQRU5TRVMsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5CT0RJTFlfSU5KVVJZLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uR0VORVJBTF9BR0dSRUdBVEUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QUk9EVUNUU19DT01QX09QX0FHRyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNPTUJJTkVEX1NJTkdMRV9MSU1JVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNJTkdMRV9DT05WRVlBTkNFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uREVEVUNUQUJMRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNPTVBSRUhfQ09MTElTSU9OLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVFJBSUxFUl9WQUxVRV9JTlNVUkFOQ0VfUE9MSUNZLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUkVOVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNBTEFSWSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1JTEVBR0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NT05USFMsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5FTVBUWV9XRUlHSFRfU1BBQ0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5RVFksXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QVVJDSEFTRV9QUklDRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVRUxfVEFOS19TSVpFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uREVWSUNFX05PLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uV0VJR0hULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9QRVJfTUlMRVMsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GVUVMX1BSSUNFX01BUCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkFNT1VOVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkJPTF9OTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNFQUxfTk8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QSUNLVVBfTk8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DT0RFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRlJPTV9GSVJTVF9GUk9NLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRlJPTV9GSVJTVF9UTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZPUk1fU0VDT05EX0ZST00sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NVUxUSV9GT1JNX1NFQ09ORF9UTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZPUk1fVEhJUkRfRlJPTSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZPUk1fVEhJUkRfVE8sXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICAvLyBPbmx5IG51bWJlcnNcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlFUWSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRU1BSUxdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5FTUFJTClcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVBvaW50cyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLklOVk9JQ0VdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5JTlZPSUNFKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5BRERSRVNTXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKC9eW0EtWmEtejAtOVxccy4mLyxfLV0qJC8/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5BRERSRVNTX1VOSVQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5ERVBBUlRNRU5ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVkVISUNMRV9VTklULFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uQUREUkVTU19VTklUKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GSVJTVF9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRklSU1RfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkxBU1RfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkxBU1RfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5CQU5LX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5CQU5LX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVklOX05VTUJFUixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLklOU1VSQU5DRV9QT0xJQ1ksXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5JRlRBLFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uVklOX05VTUJFUilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiAhL15bSWlPUV0qJC8/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uVFJVQ0tfVFJBSUxFUl9NT0RFTF0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlRSVUNLX1RSQUlMRVJfTU9ERUwpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uWUVBUl0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgL14wKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpICYmXG4gICAgICAgICF0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWVcbiAgICAgICkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLllFQVIpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkxJQ0VOU0VfUExBVEVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5MSUNFTlNFX1BMQVRFKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkRFU0NSSVBUSU9OXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uREVTQ1JJUFRJT04pXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5BTExPV19BTExdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoLy4qLz8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkpIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uREJBX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5EQkFfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uUEVSX01JTEVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QRVJfTUlMRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBtYXggbGVuZ3RoXG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnLicpKVxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubWF4TGVuZ3RoID0gNDtcbiAgICAgICAgZWxzZSB0aGlzLmlucHV0Q29uZmlnLm1heExlbmd0aCA9IDI7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHJhbmdlXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSA+IHRoaXMuaW5wdXRDb25maWcubWF4ISB8fFxuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlIDwgdGhpcy5pbnB1dENvbmZpZy5taW4hXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEVSX1NUT1AsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GTEFUX1JBVEUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QRVJfTE9BRCxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlBFUl9TVE9QKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgcGVyU3RvcFZhbHVlID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgICAgLywvZyxcbiAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBlclN0b3BWYWx1ZSA+IHRoaXMuaW5wdXRDb25maWcubWF4ISB8fFxuICAgICAgICAgICAgICBwZXJTdG9wVmFsdWUgPCB0aGlzLmlucHV0Q29uZmlnLm1pbiFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uUkVMQVRJT05TSElQLCBJbnB1dFN0cmluZ0VudW0uU0NBQ10uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkVNRVJHRU5DWV9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5FTUVSR0VOQ1lfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkVNRVJHRU5DWV9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GVUxMX0NPTlRBQ1RfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZVTExfQ09OVEFDVF9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GVUVMX1NUT1JFXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRlVFTF9TVE9SRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uSE9TXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5pbnB1dFNlbGVjdGlvbiAmJlxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uSE9TKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlICogMTAgKyBldmVudC5jaGFyQ29kZSAtIDQ4IDw9XG4gICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5tYXghXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFNlbGVjdGlvbikge1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5pbnB1dFNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVTExfUEFSS0lOR19TTE9ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEFSS0lOR19TTE9ULFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRlVMTF9QQVJLSU5HX1NMT1QpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5DRExfTlVNQkVSXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uQ0RMX05VTUJFUilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxsIFNpbWJvbHNcbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5VU0VSTkFNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk5JQ0tOQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEFTU1dPUkQsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5VU0VSTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLlRPTExfVkFMSURBVElPTl0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlRPTExfVkFMSURBVElPTilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBKdXN0IGNoYXJhY3RlcnMgYW5kIG51bWJlcnNcbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QUkVGSVgsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TVUZGSVgsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QQVJLSU5HX05BTUUsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QUkVGSVgpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GVUxMX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5GVUxMX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLklOU1VSRVJfTkFNRSwgSW5wdXRTdHJpbmdFbnVtLk9GRklDRV9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uUFJPRFVDRVJfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLklOUFVUX0RST1BET1dOX0xBQkVMXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5UG9pbnRzKGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIC9eXFxzKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpIHx8XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8uaW5jbHVkZXMoJyAnKVxuICAgICkge1xuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyKys7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID4gMSAmJlxuICAgICAgL15cXHMqJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIC8vIEdldCBjdXJzb3IgcG9zaXRpb25cbiAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXI7XG5cbiAgICAvLyBJZiB0aGUgY3Vyc29yIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLCBhbGxvdyBzcGFjZXNcbiAgICBpZiAoXG4gICAgICBjdXJzb3JQb3NpdGlvbiA+IDAgJiZcbiAgICAgICEvXFxzLy50ZXN0KGlucHV0RWxlbWVudC52YWx1ZVtjdXJzb3JQb3NpdGlvbiAtIDFdKSAmJlxuICAgICAgIS9cXHMvLnRlc3QoaW5wdXRFbGVtZW50LnZhbHVlW2N1cnNvclBvc2l0aW9uXSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgdXNlciBpcyB0eXBpbmcgYSBzcGFjZSBhbmQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpcyBhIHNwYWNlLCBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5ID09PSAnICcgJiZcbiAgICAgIC9cXHMvLnRlc3QoaW5wdXRFbGVtZW50LnZhbHVlW2N1cnNvclBvc2l0aW9uIC0gMV0pXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIFNhdmUgdGhlIGN1cnNvciBwb3NpdGlvbiBmb3IgdGhlIG5leHQgaW5wdXQgZXZlbnRcbiAgICB0aGlzLmxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uID0gY3Vyc29yUG9zaXRpb247XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVDb25zZWN1dGl2ZWx5UG9pbnRzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB8IGJvb2xlYW4ge1xuICAgIGlmICgvXlsuXSokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSkge1xuICAgICAgdGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHMrKztcbiAgICAgIGlmICh0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA+IDEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHwgYm9vbGVhbiB7XG4gICAgaWYgKC9eWy5dKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpKSB7XG4gICAgICBpZiAoIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzKys7XG4gICAgICBpZiAodGhpcy5udW1iZXJPZlBvaW50cyA+IDEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcbiAgICB9XG4gIH1cbiAgLy8gLS0tLS0tLSBlbmRcblxuICBwdWJsaWMgb25Db21tYW5kcyhldmVudDogRXZlbnQsIHR5cGU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLlBNX0lOQ1JFTUVOVF9ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaGFuZGxlUG1JbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLklOQ1JFTUVOVF9ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaGFuZGxlSW5jcmVtZW50RGVjcmVtZW50KGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzVHlwZS5DT05GSVJNX0NBTkNFTDpcbiAgICAgICAgdGhpcy5oYW5kbGVDb25maXJtQ2FuY2VsKGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzVHlwZS5NT05USFM6XG4gICAgICAgIHRoaXMuaGFuZGxlTW9udGhzKGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBcbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbnB1dENvbW1hbmRzVGltZW91dCk7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICAgICAgOiAwKSAtIDFcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uSU5DUkVNRU5UOlxuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSlcbiAgICAgICAgICAgIDogMCkgKyAxXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBtSW5jcmVtZW50RGVjcmVtZW50KGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnRUaG91c2FuU2VwSW5OdW1iZXIoXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkRFQ1JFTUVOVDpcbiAgICAgICAgdGhpcy5kZWNyZW1lbnRQbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uSU5DUkVNRU5UOlxuICAgICAgICB0aGlzLmluY3JlbWVudFBtVmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5SRVNFVDpcbiAgICAgICAgdGhpcy5yZXNldFBtVmFsdWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID49IDEwMDAwICYmIHZhbHVlIDwgMjAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAxMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDIwMDAxICYmIHZhbHVlIDwgNTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAzMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDUwMDAxICYmIHZhbHVlIDwgMTAwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gNTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDEwMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSA1MDApXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID4gMTAwMDAgJiYgdmFsdWUgPCAyMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDEwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjAwMDEgJiYgdmFsdWUgPCA1MDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDMwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gNTAwMDEgJiYgdmFsdWUgPCAxMDAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyA1MDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgMTAwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgNTAwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UG1WYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZz8uZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXRDb25maWc/LmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDb25maXJtQ2FuY2VsKGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5DT05GSVJNOlxuICAgICAgICB0aGlzLmNvbmZpcm1Db21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkNBTkNFTDpcbiAgICAgICAgdGhpcy5jYW5jZWxDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0SXNFZGl0SW5wdXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybUNvbW1hbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICBhY3Rpb246IElucHV0Q29tbWFuZHNBY3Rpb24uQ09ORklSTSxcbiAgICAgIG1vZGU6XG4gICAgICAgICF0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgJiZcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSAnSW5wdXQgRHJvcGRvd24gQmFuayBOYW1lJ1xuICAgICAgICAgID8gJ2VkaXQnXG4gICAgICAgICAgOiAnbmV3JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQ29tbWFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7IGFjdGlvbjogSW5wdXRDb21tYW5kc0FjdGlvbi5DQU5DRUwgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1vbnRocyhhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmlucHV0Q29tbWFuZHNUaW1lb3V0KTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uTUlOVVM6XG4gICAgICAgIHRoaXMuZGVjcmVtZW50TW9udGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uUExVUzpcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA8IDEgfHxcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA+IDEyXG4gICAgKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRlY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA9PT0gMSB8fFxuICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApIC0gMVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPT09IDEyKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApICsgMVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAvLyBEcm9wRG93biBMYWJlbFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uID0gSW5wdXRTdmdSb3V0ZXMuZHluYW1pY0ZvY3VzTGFiZWxTdmc7XG4gICAgfVxuXG4gICAgLy8gRGF0ZXBpY2tlclxuICAgIGlmICh0aGlzLmlzRGF0ZVRpbWVQaWNrZXIoKSAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEgJiZcbiAgICAgICAgICAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB8fFxuICAgICAgICAoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgICBldmVudD8ucmVsYXRlZFRhcmdldCA9PT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHJldmVudEJsdXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudDIudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd25cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duKSB7XG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKHRydWUpO1xuICAgICAgdGhpcy5zZXRTaG93SGlkZURyb3Bkb3duKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBDb21tYW5kc1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzICYmICF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLnR5cGUgPT09IElucHV0Q29tbWFuZHNUeXBlLk1PTlRIUykge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PVxuICAgICAgICAgIElucHV0Q29tbWFuZHNUeXBlLlBNX0lOQ1JFTUVOVF9ERUNSRU1FTlQgfHxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PSBJbnB1dENvbW1hbmRzVHlwZS5JTkNSRU1FTlRfREVDUkVNRU5UXG4gICAgICApIHtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25CbHVyKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIC8vIERyb3BEb3duIExhYmVsXG5cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsICYmICF0aGlzLmlzRWRpdElucHV0U3ViamVjdC52YWx1ZSlcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uID0gSW5wdXRTdmdSb3V0ZXMuZHluYW1pY0xhYmVsU3ZnO1xuXG4gICAgLy8gRWRpdCBJbnB1dFxuICAgIGlmICh0aGlzLmlzRWRpdElucHV0U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEYXRlcGlja2VyO1xuICAgIGlmICh0aGlzLnByZXZlbnRCbHVyKSB7XG4gICAgICB0aGlzLnByZXZlbnRCbHVyID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQmFua1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uSU5QVVRfRFJPUERPV05fQkFOS19OQU1FXG4gICAgKVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG5cbiAgICAvLyBQcmljZSBTZXBhcmF0b3IgLSByZW1vdmUgZG90IG9uIGZvY3VzIG91dFxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IgJiZcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlICYmXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8uaW5kZXhPZignLicpID49IDBcbiAgICApIHtcbiAgICAgIC8vIDQuMS4gQ2hlY2sgZm9yIERvdCBwb3NpdGlvblxuICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5pbmRleE9mKCcuJyk7XG5cbiAgICAgIGxldCBpbnRlZ2VyUGFydCA9IHRoaXMudGhvdXNhbmRTZXBhcmF0b3JQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICAgICAgICAuc2xpY2UoMCwgdGhpcy5oYXNEZWNpbWFsSW5kZXgpXG4gICAgICAgICAgLnNsaWNlKDAsIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uKVxuICAgICAgKTtcblxuICAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc2xpY2UoXG4gICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ICsgMVxuICAgICAgKTtcblxuICAgICAgLy8gNC40LiBHZXQgb25seSB0d28gbnVtYmVycyBvZiBkZWNpbWFsIHBhcnRcbiAgICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc2xpY2UoMCwgMik7XG5cbiAgICAgIGlmICghZGVjaW1hbFBhcnQpIHtcbiAgICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShpbnRlZ2VyUGFydCk7XG4gICAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERyb3Bkb3duXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEcm9wZG93biB8fCB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEKSAmJlxuICAgICAgICAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkXG4gICAgICApIHtcbiAgICAgICAgaWYgKChldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF0ZXBpY2tlclxuICAgICAgICBpZiAodGhpcy5pc0RhdGVUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzQmx1ciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJsdXJPbkRyb3BEb3duQXJyb3coKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTm9ybWFsLCB3aXRob3V0IGRyb3Bkb3duXG4gICAgZWxzZSB7XG4gICAgICBsZXQgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcblxuICAgICAgLy8gSW5wdXQgQ29tbWFuZHNcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzKSB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG5cbiAgICAgIC8vIFBhc3N3b3JkXG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy50eXBlID09PSAncGFzc3dvcmQnKSB0aGlzLmJsdXJPblBhc3N3b3JkKCk7XG4gICAgICAvLyBOb3JtYWwgZm9jdXMgb3V0XG4gICAgICBlbHNlIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldEJsdXJJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnNldElzVG91Y2hlZElucHV0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25Db21tYW5kcygpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0Q29tbWFuZHNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25Ecm9wRG93bkFycm93KCk6IHZvaWQge1xuICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuXG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0U2hvd0hpZGVEcm9wZG93bih0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG4gICAgfSwgMTUwKTtcbiAgfVxuXG4gIHB1YmxpYyBibHVyT25QYXNzd29yZCgpIHtcbiAgICB0aGlzLnBhc3N3b3JkVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChpbnB1dDogYW55LCB0aW1lOiBudW1iZXIgPSAxMjApOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3Rpb25FbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQ7XG4gICAgaWYgKGlucHV0LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25FbmQsIHNlbGVjdGlvbkVuZCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9LCB0aW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVkaXRJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZXRJc0VkaXRJbnB1dCh0cnVlKTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyh0cnVlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIHRoaXMuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICBhY3Rpb246ICdFZGl0IElucHV0JyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3Q2hpbGRzKFxuICAgIHNwYW5PbmU6IEVsZW1lbnRSZWYsXG4gICAgc3BhblR3bzogRWxlbWVudFJlZixcbiAgICBzcGFuVGhyZWU6IEVsZW1lbnRSZWYsXG4gICAgaG9sZGVyMTogRWxlbWVudFJlZlxuICApOiB2b2lkIHtcbiAgICB0aGlzLnNwYW5PbmUgPSBzcGFuT25lO1xuICAgIHRoaXMuc3BhblR3byA9IHNwYW5Ud287XG4gICAgdGhpcy5zcGFuVGhyZWUgPSBzcGFuVGhyZWU7XG4gICAgdGhpcy5ob2xkZXIxID0gaG9sZGVyMTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaWV3Q2hpbGRzUG9wb3ZlcihcbiAgICB0MjogTmdiUG9wb3ZlcixcbiAgICBuZ2JNYWluUG9wb3ZlcjogTmdiUG9wb3ZlclxuICApOiB2b2lkIHtcbiAgICB0aGlzLnQyID0gdDI7XG4gICAgdGhpcy5uZ2JNYWluUG9wb3ZlciA9IG5nYk1haW5Qb3BvdmVyO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApXG4gICAgICBpZiAodGhpcy50Mikge1xuICAgICAgICBpZiAoIXRoaXMudDIuaXNPcGVuKCkpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMudDIub3BlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIHRoaXMuc2V0SXNEcm9wZG93blRvZ2dsZXIoIXRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcblxuICAgIHRoaXMuc2V0U2hvd0hpZGVEcm9wZG93bih0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUGxhY2Vob2xkZXJJY29uRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5pc0VkaXRJbnB1dFN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICAgIGFjdGlvbjogJ1RvZ2dsZSBEcm9wZG93bicsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgICBkYXRhOiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSxcbiAgICAgICAgYWN0aW9uOiAnUGxhY2Vob2xkZXIgSWNvbiBFdmVudCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENvbmZpZ0NoYW5nZSgpOiB2b2lkIHtcbiAgICAvLyBQcmljZSBTZXBhcmF0b3JcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvcikge1xuICAgICAgdGhpcy5vcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ID1cbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb247XG4gICAgfVxuXG4gICAgLy8gQ3VzdG9tIFJhbmdlXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNVc2luZ0N1c3RvbVBlcmlvZFJhbmdlKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Rpc3BsYXlpbmdDdXN0b21QZXJpb2RSYW5nZSlcbiAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgICBlbHNlIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBEYXRlUGlja2VyXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoZGF0ZSkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQoZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLnQyLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGFkZCBtb2RlIGluIGRyb3Bkb3duXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHM/LmFjdGl2ZSAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PSAnY29uZmlybS1jYW5jZWwnKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5ibHVlSW5wdXQpIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB0aGlzLnNldElzQ2Fwc0xvY2tPbihldmVudD8uZ2V0TW9kaWZpZXJTdGF0ZT8uKCdDYXBzTG9jaycpKTtcblxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZVRvU3RyaW5nID0gU3RyaW5nKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKTtcblxuICAgICAgdGhpcy5pc0RvdERlbGV0ZWQgPSB2YWx1ZVRvU3RyaW5nPy5pbmNsdWRlcygnLicpO1xuICAgIH1cblxuICAgIC8vIERpc2FibGUgZm9yIHBob25lIGZpZWxkIGZpcnN0IGNoYXJhY3RlciB0byBiZSAwXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpID09PSBJbnB1dFN0cmluZ0VudW0uUEhPTkUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5zZWxlY3Rpb25TdGFydCA9PT0gMCAmJlxuICAgICAgICBldmVudC5rZXkgPT09ICcwJ1xuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDkpIHtcbiAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbktleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnNldElzQ2Fwc0xvY2tPbihldmVudD8uZ2V0TW9kaWZpZXJTdGF0ZT8uKCdDYXBzTG9jaycpKTtcbiAgICB9XG4gICAgLy8gUmVzZXQgZnVuY3Rpb24gcHJvcGVydHkgZm9yIGRpc2FibGluZyBtdWx0aXBsZSBkb3RzXG4gICAgY29uc3QgdmFsdWVUb1N0cmluZyA9IFN0cmluZyh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSk7XG5cbiAgICBpZiAodGhpcy5pc0RvdERlbGV0ZWQgJiYgIXZhbHVlVG9TdHJpbmc/LmluY2x1ZGVzKCcuJykpXG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50LmtleUNvZGUgPT0gOCAmJlxuICAgICAgISh0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHwgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKVxuICAgICkge1xuICAgICAgLy8gUmVzZXQgTXVsdGlwbGUgQ29uc2VjdXRpdmVseSBTcGFjZXNcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzID0gMDtcblxuICAgICAgLy8gUmVzZXQgT25lIFNwYWNlIE9ubHlcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUgJiZcbiAgICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy5pbmNsdWRlcygnICcpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkFERFJFU1NcbiAgICApIHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA0MCB8fCBldmVudC5rZXlDb2RlID09PSAzOCkge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiB0aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkFERFJFU1MpIHtcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgdGhpcy5zZXRJc1Zpc2libGVDb21tYW5kcyhmYWxzZSk7XG4gICAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgICAgIHRoaXMuYmx1ck9uRHJvcERvd25BcnJvdygpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgICAga2V5Q29kZTogZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIHRoaXMub25Gb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEYXRlICYgVGltZSBQaWNrZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgc2V0VGltZVBpY2tlclRpbWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUilcbiAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgIG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICtcbiAgICAgICAgICAgICh0aGlzLmlucHV0Q29uZmlnPy5pc0Zyb21EYXRlID8gJyAxMjoxNScgOiAnIDEyOjAwJylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICBsZXQgdGV4dCwgZGF0ZUZvcm1hdCwgdGltZUZvcm1hdDtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ01NL0REL1lZJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGV4dC5zcGxpdCgnLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID1cbiAgICAgICAgZGF0ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICA/IGRhdGVcbiAgICAgICAgICA6IG5ldyBEYXRlKG1vbWVudCgpLmZvcm1hdCgnTU0vREQvWVlZWScpICsgJyAnICsgZGF0ZSk7XG4gICAgICB0ZXh0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ0hIOm1tJyk7XG5cbiAgICAgIHRpbWVGb3JtYXQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnaGgvbW0vQScpO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRpbWVGb3JtYXQuc3BsaXQoJy8nKTtcbiAgICB9XG5cbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0ZXh0O1xuICAgIHRoaXMuc2V0T25DaGFuZ2UodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5zcGFuT25lKSB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzBdO1xuXG4gICAgaWYgKHRoaXMuc3BhblR3bylcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMV07XG4gICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICB9XG5cbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKGRhdGUpKTtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXREYXRlVGltZUlucHV0cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zcGFuT25lKVxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUlxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdISCc7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ0FNJztcbiAgICAgIH1cblxuICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkgdGhpcy5pbnB1dFNlbGVjdGlvbiA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgb25EYXRlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHBhc3RlVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcGFzdGVkRGF0ZSA9IG5ldyBEYXRlKHBhc3RlVGV4dCk7XG4gICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGlvbihldmVudDoge1xuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICB0YXJnZXQ6IGFueTtcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG5cbiAgICBjb25zdCBzZWxlY3Rpb25JbnB1dCA9IHBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpKTtcblxuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoY3VycmVudFNlbGVjdGlvbiAmJiBjdXJyZW50U2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoID4gMTApIHtcbiAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21haW4nKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IHNlbGVjdGlvbklucHV0O1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTcGFuU2VsZWN0aW9uKGVsZW1lbnQ6IE5vZGUpOiB2b2lkIHtcbiAgICBsZXQgcmFuZ2U6IFJhbmdlO1xuICAgIGxldCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGw7XG5cbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpO1xuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzaG93RGF0ZVRpbWVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuXG4gICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVNlbGVjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCwgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0gdGhpcy5pc05hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgIGNvbnN0IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkgPVxuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMyAmJlxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSO1xuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSB8fCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkge1xuICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNOYXZpZ2F0aW9uS2V5KGU6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBuYXZpZ2F0aW9uS2V5cyA9IFszNywgMzgsIDM5LCA0MCwgOCwgOSwgNDZdOyAvLyBBcnJvdyBrZXlzLCBCYWNrc3BhY2UsIFRhYiwgRGVsZXRlXG4gICAgcmV0dXJuIG5hdmlnYXRpb25LZXlzLmluY2x1ZGVzKGUua2V5Q29kZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5hdmlnYXRpb25LZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgIGNhc2UgMzc6IC8vIExlZnQgYXJyb3dcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uTGVmdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0IGFycm93XG4gICAgICBjYXNlIDk6IC8vIFRhYlxuICAgICAgICB0aGlzLm1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OiAvLyBVcCBhcnJvd1xuICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ3VwJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA0MDogLy8gRG93biBhcnJvd1xuICAgICAgICB0aGlzLnNldERhdGVUaW1lTW9kZWwoJ2Rvd24nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDg6IC8vIEJhY2tzcGFjZVxuICAgICAgY2FzZSA0NjogLy8gRGVsZXRlXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZXZlbnQsIHRydWUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVTZWxlY3Rpb25MZWZ0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAtPSAxO1xuICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVTZWxlY3Rpb25SaWdodE9yVGFiKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc0RhdGVwaWNrZXJCYW5rQ2FyZCA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuICAgIGNvbnN0IG1heEluZGV4ID0gaXNEYXRlcGlja2VyQmFua0NhcmQgPyAxIDogMjtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0IDwgbWF4SW5kZXggJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgKz0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChlLmtleUNvZGUgPT09IDkgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0SW5wdXQoKTtcbiAgICB9IGVsc2UgaWYgKGUuc2hpZnRLZXkgJiYgZS5rZXlDb2RlID09PSA5KSB7XG4gICAgICB0aGlzLmZvY3VzUHJldmlvdXNJbnB1dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXSkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzSW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgIGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSBhbGxJbnB1dHNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVLZXlib2FyZElucHV0cyhlOiBLZXlib2FyZEV2ZW50LCBpc1Jlc3RhcnQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc3Bhbk9uZVZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgaXNOYU4odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgY29uc3Qgc3BhblR3b1ZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG5cbiAgICBsZXQgc3BhblRocmVlVmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHNwYW5UaHJlZVZhbHVlID1cbiAgICAgICAgaXNOYU4odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICAgIH1cblxuICAgIHRoaXMubmV3SW5wdXRDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BhblR3b1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuVHdvVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAzMSkge1xuICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXREYXRlKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RGF0ZShwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZShcbiAgICAgICAgICAgIC0yXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAzMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzcGFuVGhyZWVWYWx1ZSB8fCBzcGFuVGhyZWVWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICAgICAgKSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoZS5rZXkpIC0gMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsX3ZhbHVlID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhblR3b1ZhbHVlIHx8IHNwYW5Ud29WYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGluZHgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlVGFiKSB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldERhdGVUaW1lTW9kZWwoZGlyZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuXG4gICAgY29uc3QgaXNVcCA9IGRpcmVjdGlvbiA9PT0gJ3VwJztcbiAgICBjb25zdCBpc0RhdGVQaWNrZXIgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSO1xuICAgIGNvbnN0IGlzQmFua0NhcmRQaWNrZXIgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcblxuICAgIGlmIChpc0RhdGVQaWNrZXIgfHwgaXNCYW5rQ2FyZFBpY2tlcilcbiAgICAgIHRoaXMuaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgZWxzZSB0aGlzLmhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGF0ZVBpY2tlcklucHV0KGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZU1vbnRoKGlzVXApO1xuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlRGF0ZShpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIGVsc2UgdGhpcy51cGRhdGVZZWFyKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVRpbWVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlSG91cnMoaXNVcCk7XG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVNaW51dGVzKGlzVXApO1xuICAgIGVsc2UgdGhpcy50b2dnbGVBTVBNKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtb250aERlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldE1vbnRoKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1vbnRoKCkgKyBtb250aERlbHRhXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1vbnRoKCkgKyAxXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXREYXRlKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IHNwYW5FbGVtZW50ID0gaXNEYXRlUGlja2VyXG4gICAgICA/IHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXREYXRlKClcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVllYXIoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgPyB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5zbGljZSgtMik7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSG91cnMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGhvdXJzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIGxldCBzZWxlY3RlZEhvdXJzID1cbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEhvdXJzKCkgKyBob3Vyc0RlbHRhO1xuXG4gICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IDApIHNlbGVjdGVkSG91cnMgPSAyNDtcbiAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZSh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRIb3VycyhzZWxlY3RlZEhvdXJzKSlcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHNlbGVjdGVkSG91cnMgPiAxMiA/IHNlbGVjdGVkSG91cnMgLSAxMiA6IHNlbGVjdGVkSG91cnNcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG5cbiAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICBzZWxlY3RlZEhvdXJzID4gMTEgJiYgc2VsZWN0ZWRIb3VycyA8IDI0ID8gJ1BNJyA6ICdBTSc7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbnV0ZXMoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG1pbnV0ZXNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNaW51dGVzKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldE1pbnV0ZXMoKSArIG1pbnV0ZXNEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNaW51dGVzKClcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUFNUE0oKTogdm9pZCB7XG4gICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAnUE0nIDogJ0FNJztcblxuICAgIGNvbnN0IGhvdXJzVG9BZGQgPVxuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT09ICdBTScgPyAtMTIgOiAxMjtcbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEhvdXJzKFxuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLmdldEhvdXJzKCkgKyBob3Vyc1RvQWRkXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWRWYWx1ZSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKCcwJyArIHZhbHVlKS5zbGljZSgtMik7XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGV2dCA9IGV2dCA/IGV2dCA6ICh3aW5kb3cuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgbGV0IGNoYXJDb2RlID0gZXZ0LndoaWNoID8gZXZ0LndoaWNoIDogZXZ0LmtleUNvZGU7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykgfHwgKGNoYXJDb2RlID49IDk2ICYmIGNoYXJDb2RlIDw9IDEwNSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uUG9wb3ZlclNob3duKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25Qb3BvdmVySGlkZGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLmJsdXJPbkRhdGVUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBibHVyT25EYXRlVGltZSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgdGhpcy5kYXRlVGltZU1haW5UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZT8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblR3bz8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhblRocmVlPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5pc0Z1dHVyZURhdGVEaXNhYmxlZCAmJlxuICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlKS5pc0FmdGVyKG1vbWVudCgpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBmdXR1cmUgZGF0ZXNcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5leHBpcmVkRGF0ZUludmFsaWQgJiZcbiAgICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUobmV3IERhdGUoKSk7XG4gICAgICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICBtb21lbnQodGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUpLmlzQmVmb3JlKG1vbWVudCgpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTsgLy8gZG9uJ3QgYWNjZXB0IGV4cGlyZWQgZGF0ZXNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dChcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgLy8gICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVcbiAgICAgICAgICAvLyApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdISCc7XG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gY2xlYXJUaW1lb3V0KHRoaXMud2hvbGVJbnB1dFNlbGVjdGlvbik7XG4gICAgbGV0IHJhbmdlLCBzZWxlY3Rpb247XG5cbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuXG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09XG4gICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgICAgcmFuZ2Uuc2V0RW5kKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgIH1cblxuICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIHNlbGVjdGlvbj8uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cblxuICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgfSwgOTApO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdExhc3RPbmVBZnRlck1vdXNlVXAoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgfSwgOTApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RhdGVUaW1lUGlja2VyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25EZXN0b3J5KCkge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
2127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtc3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0L3NlcnZpY2VzL2NhLWlucHV0LXN0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBRWIsT0FBTyxFQUNQLFNBQVMsR0FDVixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQVM1QixVQUFVO0FBQ1YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFL0YsUUFBUTtBQUNSLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sVUFBVSxDQUFDO0FBTWxCLGFBQWE7QUFDYixPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUs1RCxZQUFZO0FBQ1osT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtwRCxNQUFNLE9BQU8saUJBQWlCO0lBK0g1QixZQUNVLGVBQThDLEVBQzlDLHdCQUFrRDtJQUUxRCxRQUFRO0lBQ0EscUJBQTRDO1FBSjVDLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQUM5Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBR2xELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFuSTlDLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzNELGtCQUFhLEdBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQywwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RCxvQkFBZSxHQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEMsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEUsdUJBQWtCLEdBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qyx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMxRCxpQkFBWSxHQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakMsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDaEUsdUJBQWtCLEdBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qyw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsdUJBQWtCLEdBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV2Qyx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM1RCxtQkFBYyxHQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFbkMsd0JBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDM0Qsa0JBQWEsR0FDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWxDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFDbkQsY0FBUyxHQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdEMsVUFBVTtRQUNGLHdCQUFtQixHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO1FBQ3BELGtCQUFhLEdBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQywyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQ2pELHFCQUFnQixHQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFckMsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNoRCxvQkFBZSxHQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEMsNEJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUNsRCxzQkFBaUIsR0FDdEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRDLGlDQUE0QixHQUFHLElBQUksT0FBTyxFQUc5QyxDQUFDO1FBQ0UsMkJBQXNCLEdBR3hCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUU5QyxxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBQzNDLGVBQVUsR0FBd0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRFLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFvQixDQUFDO1FBQ3RELGlCQUFZLEdBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsQyx1QkFBa0IsR0FBRyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLGFBQWE7WUFDbEIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQjtZQUN2QixJQUFJLENBQUMsWUFBWTtZQUNqQixJQUFJLENBQUMsa0JBQWtCO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLGNBQWM7WUFDbkIsSUFBSSxDQUFDLGFBQWE7U0FDbkIsQ0FBQyxDQUFDO1FBVUgsT0FBTztRQUNBLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLG1CQUFjLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFHbkMsa0JBQWtCO1FBQ1gsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFpQmhDLG9CQUFlLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFJcEMsbUJBQW1CO1FBQ1osZ0NBQTJCLEdBQVcsQ0FBQyxDQUFDO1FBQ3hDLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQyw0QkFBdUIsR0FBVyxDQUFDLENBQUM7UUFFM0MsbUJBQW1CO1FBQ1osZ0NBQTJCLEdBQVcsQ0FBQyxDQUFDO1FBQ3hDLG1CQUFjLEdBQVcsQ0FBQyxDQUFDO1FBRTFCLGFBQVEsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQVFuRCxDQUFDO0lBRUcsZUFBZSxDQUFDLEtBQWM7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBYztRQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxLQUFjO1FBQ3hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLG9CQUFvQixDQUFDLEtBQWM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sb0JBQW9CLENBQUMsS0FBVztRQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFjO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQWlCLEVBQUUsS0FBd0I7UUFDbkUsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxZQUF1QjtRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQWdCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxjQUF1QjtRQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQW9CO1FBQ3pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQWM7UUFDdEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBYztRQUNyQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUFjO1FBQ3ZDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLHdCQUF3QixDQUFDLEtBRy9CO1FBQ0MsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQXVCO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUF1QjtRQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU0sVUFBVSxDQUFDLEdBQXFCO1FBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztnQkFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO29CQUNuQix5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDakQ7Z0JBQ0EsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzdCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztpQkFDVDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO29CQUNyQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztpQkFDNUI7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7aUJBQ3RDO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBWTtRQUM1QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLG9CQUFvQjtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPO1NBQ1I7UUFDRCxrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRTtZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsZUFBZTthQUNWO1lBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsSUFFSTtnQkFDRSx5QkFBeUIsQ0FBQyxXQUFXO2dCQUNyQyx5QkFBeUIsQ0FBQyxXQUFXO2dCQUNyQyx5QkFBeUIsQ0FBQyxxQkFBcUI7YUFFbEQsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBRWpDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBRTdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNILENBQUM7SUFFTSxhQUFhLENBQUMsS0FBWSxFQUFFLE9BQWlCO1FBQ2xELE1BQU0sS0FBSyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO1FBRW5FLHlCQUF5QjtRQUN6QixJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekI7YUFBTSxJQUFJLEtBQUssRUFBRTtZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFL0Isb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU3QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQztZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztTQUM3QjtRQUVELGlDQUFpQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVUsRUFBRTtZQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkUsQ0FBQyxFQUNELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUMzQixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUMzQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ3RDLEtBQUssZUFBZSxDQUFDLFVBQVU7Z0JBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUs7b0JBQzVCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkUsTUFBTTtZQUNSLEtBQUssZUFBZSxDQUFDLFNBQVM7Z0JBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDUixLQUFLLGVBQWUsQ0FBQyxnQkFBZ0I7Z0JBQ25DLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FDeEMsc0JBQXNCLEVBQ3RCLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQ3pDLENBQUM7Z0JBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLG9CQUFvQixDQUFDO2dCQUN0RCxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxZQUFZLEVBQUU7WUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLE9BQU87YUFDUjtZQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQ25ELENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxZQUFZLEVBQUU7WUFDbkQsc0NBQXNDO1lBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPO2FBQ1I7WUFFRCxxQkFBcUI7WUFDckIsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCw2QkFBNkI7Z0JBQzdCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzdCO1lBRUQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUN0RCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyx5QkFBeUI7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFFakQsb0RBQW9EO1FBQ3BELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQ3BELFlBQVk7YUFDVCxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7YUFDOUIsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQ3ZELENBQUM7UUFDRixJQUFJLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixXQUFXLEdBQUcsR0FBRyxDQUFDO1NBQ25CO1FBRUQsZ0RBQWdEO1FBQ2hELFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0QyxJQUFJLFdBQVcsRUFBRTtZQUNmLDRCQUE0QjtZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxXQUFXLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTFCLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNwQywwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUNuRCxDQUFDO1lBRUYsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyx5QkFBeUI7Z0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUM7WUFFNUMsWUFBWTtZQUNaLElBQUksWUFBWSxFQUFFO2dCQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FDakUsQ0FBQzthQUNIO1lBRUQsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FDbkQsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtZQUNwQyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUN4QyxJQUFJLENBQUMsbUJBQW1CO29CQUN0QixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hFLElBQUksQ0FBQyxtQkFBbUI7b0JBQ3RCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNQO2FBQU07WUFDTCw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzlCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV2RCxJQUNFLFVBQVUsS0FBSyxlQUFlLENBQUMsSUFBSTtZQUNuQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ2xFO1lBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekQ7UUFFRCxJQUFJLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQ3pDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUN6RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUM7U0FDRjtRQUVELElBQUksVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDeEMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2xEO3FCQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ25EO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVDO1NBQ0Y7UUFFRCxJQUNFLFVBQVUsS0FBSyxlQUFlLENBQUMsU0FBUztZQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQ2hDO1lBQ0EsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDN0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQztRQUU1RCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtZQUM3RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUMzRCxTQUFTLEVBQ1QsR0FBRyxDQUNKLENBQUM7WUFDRixJQUFJLGNBQWMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUM7Z0JBQ2hELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO2FBQ25DO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FDeEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsRUFDaEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FDakMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO1lBRXRELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3hDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRWhELElBQUksVUFBVSxFQUFFO29CQUNkLHVDQUF1QztvQkFDdkMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsdUJBQXVCO29CQUN2QixNQUFNLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7aUJBQ2hFO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQ3RDLENBQUM7aUJBQ0g7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUNyQyxDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtZQUNuRSxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDckMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ1I7SUFDSCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQW9CO1FBQ3BDLHNDQUFzQztRQUN0QyxJQUNFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSztZQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2pEO1lBQ0EsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFO1lBQ25DLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQztnQkFDdEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFDRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTTtvQkFDdEMsSUFBSSxDQUFDLHlCQUF5QjtvQkFDaEMsS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQ3BCO29CQUNBLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsT0FBTztpQkFDUjtnQkFDRCx5QkFBeUI7Z0JBQ3pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFbEMsb0JBQW9CO2dCQUNwQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBRS9ELElBQUksQ0FBQyxlQUFlLEdBQUcsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsRUFBRTtvQkFDN0IsK0NBQStDO29CQUMvQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUN0RCxDQUFDLEVBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztvQkFFRixJQUFJLENBQUMsV0FBVzt3QkFBRSxXQUFXLEdBQUcsR0FBRyxDQUFDO29CQUVwQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FDekIsQ0FBQztvQkFFRixvQ0FBb0M7b0JBQ3BDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTztxQkFDUjtvQkFFRCwwQ0FBMEM7b0JBQzFDLFdBQVcsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO29CQUVoRSwwQkFBMEI7b0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsV0FBVyxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQ2hDLENBQUM7b0JBRUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFOzRCQUN4QixJQUFJLENBQUMsbUJBQW1CO2dDQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7NEJBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUN4QyxlQUFlLEVBQ2YsZUFBZSxDQUNoQixDQUFDO3lCQUNIOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUN4QyxlQUFlLEVBQ2YsZUFBZSxDQUNoQixDQUFDO3lCQUNIO29CQUNILENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFFRCxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFO1lBQ0UsZUFBZSxDQUFDLGFBQWE7WUFDN0IsZUFBZSxDQUFDLFNBQVM7WUFDekIsZUFBZSxDQUFDLFNBQVM7WUFDekIsZUFBZSxDQUFDLGFBQWE7WUFDN0IsZUFBZSxDQUFDLGFBQWE7U0FDOUIsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2hFO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO2dCQUNwRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRTtZQUNFLGVBQWUsQ0FBQyxHQUFHO1lBQ25CLGVBQWUsQ0FBQyxLQUFLO1lBQ3JCLGVBQWUsQ0FBQyxLQUFLO1lBQ3JCLGVBQWUsQ0FBQyxlQUFlO1lBQy9CLGVBQWUsQ0FBQyxZQUFZO1lBQzVCLGVBQWUsQ0FBQyxZQUFZO1lBQzVCLGVBQWUsQ0FBQyxHQUFHO1lBQ25CLGVBQWUsQ0FBQyxTQUFTO1lBQ3pCLGVBQWUsQ0FBQyxZQUFZO1lBQzVCLGVBQWUsQ0FBQyxZQUFZO1lBQzVCLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxLQUFLO1lBQ3JCLGVBQWUsQ0FBQyxjQUFjO1lBQzlCLGVBQWUsQ0FBQyxlQUFlO1lBQy9CLGVBQWUsQ0FBQyxLQUFLO1lBQ3JCLGVBQWUsQ0FBQyxHQUFHO1lBQ25CLGVBQWUsQ0FBQyxRQUFRO1lBQ3hCLGVBQWUsQ0FBQyxpQkFBaUI7WUFDakMsZUFBZSxDQUFDLGVBQWU7WUFDL0IsZUFBZSxDQUFDLFlBQVk7WUFDNUIsZUFBZSxDQUFDLGVBQWU7WUFDL0IsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLGtCQUFrQjtZQUNsQyxlQUFlLENBQUMsZ0JBQWdCO1lBQ2hDLGVBQWUsQ0FBQyxhQUFhO1lBQzdCLGVBQWUsQ0FBQyxpQkFBaUI7WUFDakMsZUFBZSxDQUFDLG9CQUFvQjtZQUNwQyxlQUFlLENBQUMscUJBQXFCO1lBQ3JDLGVBQWUsQ0FBQyxpQkFBaUI7WUFDakMsZUFBZSxDQUFDLFVBQVU7WUFDMUIsZUFBZSxDQUFDLGlCQUFpQjtZQUNqQyxlQUFlLENBQUMsOEJBQThCO1lBQzlDLGVBQWUsQ0FBQyxJQUFJO1lBQ3BCLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxPQUFPO1lBQ3ZCLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxrQkFBa0I7WUFDbEMsZUFBZSxDQUFDLEdBQUc7WUFDbkIsZUFBZSxDQUFDLGNBQWM7WUFDOUIsZUFBZSxDQUFDLGNBQWM7WUFDOUIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLGNBQWM7WUFDOUIsZUFBZSxDQUFDLGNBQWM7WUFDOUIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLE9BQU87WUFDdkIsZUFBZSxDQUFDLFNBQVM7WUFDekIsZUFBZSxDQUFDLElBQUk7WUFDcEIsZUFBZSxDQUFDLHFCQUFxQjtZQUNyQyxlQUFlLENBQUMsbUJBQW1CO1lBQ25DLGVBQWUsQ0FBQyxzQkFBc0I7WUFDdEMsZUFBZSxDQUFDLG9CQUFvQjtZQUNwQyxlQUFlLENBQUMscUJBQXFCO1lBQ3JDLGVBQWUsQ0FBQyxtQkFBbUI7U0FDcEMsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2hFO1lBQ0EsZUFBZTtZQUNmLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztnQkFDMUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO1lBRWQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FDYixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztnQkFDNUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FDZixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQztnQkFDOUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO1lBRWQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FDZixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQUksd0JBQXdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3ZFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUVELElBQ0U7WUFDRSxlQUFlLENBQUMsWUFBWTtZQUM1QixlQUFlLENBQUMsVUFBVTtZQUMxQixlQUFlLENBQUMsWUFBWTtTQUM3QixDQUFDLFFBQVEsQ0FBa0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFDaEU7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7Z0JBQ25ELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLElBQUksQ0FBQztZQUVkLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUNqRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUNoRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDaEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0U7WUFDRSxlQUFlLENBQUMsVUFBVTtZQUMxQixlQUFlLENBQUMsZ0JBQWdCO1lBQ2hDLGVBQWUsQ0FBQyxJQUFJO1NBQ3JCLENBQUMsUUFBUSxDQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUNoRTtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztnQkFDakQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFakUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDO2dCQUMxRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFDL0I7Z0JBQ0EsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUMzQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7WUFFZCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQztnQkFDcEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQzthQUNiO1lBQ0QsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7Z0JBQ2xELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFBSSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBRWpFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7WUFFZCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztnQkFDL0MsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVsQyx1QkFBdUI7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7b0JBQzVELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQzs7b0JBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFcEMsa0JBQWtCO2dCQUNsQixJQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUk7b0JBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUksRUFDeEQ7b0JBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ3pEO2dCQUNELE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxJQUNFO1lBQ0UsZUFBZSxDQUFDLFFBQVE7WUFDeEIsZUFBZSxDQUFDLFNBQVM7WUFDekIsZUFBZSxDQUFDLFFBQVE7U0FDekIsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2hFO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO3dCQUNwQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUN6RCxJQUFJLEVBQ0osRUFBRSxDQUNILENBQUM7d0JBQ0YsSUFDRSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFJOzRCQUNwQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFJLEVBQ3BDOzRCQUNBLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDOzRCQUN4RCxPQUFPLEtBQUssQ0FBQzt5QkFDZDt3QkFDRCxPQUFPLElBQUksQ0FBQztxQkFDYjtvQkFFRCxPQUFPO2dCQUNULENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNQO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUM7Z0JBQ3JELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLElBQUksQ0FBQztZQUVkLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDO2dCQUNyRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDeEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO1lBRWQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLElBQUksQ0FBQyx3QkFBd0I7aUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLElBQUksQ0FBQztZQUVkLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUNFLENBQUMsSUFBSSxDQUFDLGNBQWM7Z0JBQ3BCLElBQUksQ0FBQyx3QkFBd0I7cUJBQzFCLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7b0JBQzFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQzdDO2dCQUNBLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRTtvQkFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFJLENBQ3RCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQ3BDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7aUJBQzdCO2dCQUVELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRTtZQUNFLGVBQWUsQ0FBQyxpQkFBaUI7WUFDakMsZUFBZSxDQUFDLFlBQVk7U0FDN0IsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQ2hFO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3hELEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLElBQUksQ0FBQztpQkFDVDtnQkFDSCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtRQUVELElBQ0UsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQztnQkFDakQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCxjQUFjO1FBQ2QsSUFDRTtZQUNFLGVBQWUsQ0FBQyxRQUFRO1lBQ3hCLGVBQWUsQ0FBQyxRQUFRO1lBQ3hCLGVBQWUsQ0FBQyxRQUFRO1NBQ3pCLENBQUMsUUFBUSxDQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUNoRTtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztnQkFDL0MsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO2lCQUNUO2dCQUNILEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUNoRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDO2dCQUN0RCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0MsT0FBTyxJQUFJLENBQUM7aUJBQ1Q7Z0JBQ0gsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7UUFFRCw4QkFBOEI7UUFDOUIsSUFDRTtZQUNFLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxZQUFZO1NBQzdCLENBQUMsUUFBUSxDQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUNoRTtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztnQkFDN0MsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sSUFBSSxDQUFDO2lCQUNUO2dCQUNILEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUNyRCxFQUNEO1lBQ0EsSUFDRSxJQUFJLENBQUMsd0JBQXdCO2lCQUMxQixvQkFBb0IsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUNoRCxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUM3QztnQkFDQSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFFRCxJQUNFLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDckQsRUFDRDtZQUNBLElBQ0UsSUFBSSxDQUFDLHdCQUF3QjtpQkFDMUIsb0JBQW9CLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQztnQkFDcEQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDN0M7Z0JBQ0EsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUNGO1FBRUQsSUFDRSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3JELEVBQ0Q7WUFDQSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ25DLElBQ0UsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUMvQztZQUNBLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFDRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQztZQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2pEO1lBQ0EsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxLQUFVO1FBQzNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBaUMsQ0FBQztRQUVsRSxzQkFBc0I7UUFDdEIsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLGNBQXdCLENBQUM7UUFFN0QseURBQXlEO1FBQ3pELElBQ0UsY0FBYyxHQUFHLENBQUM7WUFDbEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQzlDO1lBQ0EsT0FBTztTQUNSO1FBRUQsb0dBQW9HO1FBQ3BHLElBQ0UsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDakQ7WUFDQSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7UUFFRCxvREFBb0Q7UUFDcEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLGNBQWMsQ0FBQztJQUNoRCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsS0FBb0I7UUFDckQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFvQjtRQUNoRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO2dCQUNyQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUVELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBQ0QsY0FBYztJQUVQLFVBQVUsQ0FBQyxLQUFZLEVBQUUsSUFBWSxFQUFFLE1BQWM7UUFDMUQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssaUJBQWlCLENBQUMsc0JBQXNCO2dCQUMzQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hDLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtnQkFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QyxNQUFNO1lBQ1IsS0FBSyxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixLQUFLLGlCQUFpQixDQUFDLE1BQU07Z0JBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsTUFBYztRQUU3QyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLG1CQUFtQixDQUFDLFNBQVM7Z0JBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO29CQUMvQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztvQkFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDWCxDQUFDO2dCQUNGLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFNBQVM7Z0JBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO29CQUMvQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztvQkFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDWCxDQUFDO2dCQUNGLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsTUFBYztRQUMvQyxNQUFNLEtBQUssR0FBRyx5QkFBeUIsQ0FBQyx5QkFBeUIsQ0FDL0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUNqQyxDQUFDO1FBRUYsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLG1CQUFtQixDQUFDLFNBQVM7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsU0FBUztnQkFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QixNQUFNO1lBQ1IsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUM1QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU07WUFDUjtnQkFDRSxNQUFNO1NBQ1Q7UUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBYTtRQUNwQyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRTtZQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FDbkUsQ0FBQztTQUNIO2FBQU0sSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyx5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQ25FLENBQUM7U0FDSDthQUFNLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFO1lBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUNuRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyx5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQ3BFLENBQUM7U0FDSDthQUFNLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FDbEUsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWE7UUFDcEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssR0FBRyxLQUFLLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyx5QkFBeUIsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQ25FLENBQUM7U0FDSDthQUFNLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsS0FBSyxFQUFFO1lBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUNuRSxDQUFDO1NBQ0g7YUFBTSxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRTtZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLHlCQUF5QixDQUFDLDBCQUEwQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FDbkUsQ0FBQztTQUNIO2FBQU0sSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUNwRSxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FDbkMseUJBQXlCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUNsRSxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE1BQWM7UUFDeEMsUUFBUSxNQUFNLEVBQUU7WUFDZCxLQUFLLG1CQUFtQixDQUFDLE9BQU87Z0JBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsTUFBTTtnQkFDN0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtTQUNUO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSztZQUN0QyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsT0FBTztZQUNuQyxJQUFJLEVBQ0YsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtnQkFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssMEJBQTBCO2dCQUNsRCxDQUFDLENBQUMsTUFBTTtnQkFDUixDQUFDLENBQUMsS0FBSztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWM7UUFDakMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRXhDLFFBQVEsTUFBTSxFQUFFO1lBQ2QsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO2dCQUM1QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLElBQUk7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtRQUVELElBQ0UsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDOUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFDL0M7WUFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFDRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNoRCxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFDakM7WUFDQSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUNuQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUs7WUFDL0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQ25DLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSztZQUMvQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztZQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNYLENBQUM7SUFDSixDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQWtCO1FBQy9CLGlCQUFpQjtRQUNqQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQztTQUN4RTtRQUVELGFBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7WUFDM0QsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQ0UsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLE1BQXNCLEVBQUUsUUFBUSxLQUFLLE9BQU8sQ0FBQztnQkFDdEQsS0FBSyxFQUFFLGFBQTZCLEVBQUUsUUFBUSxLQUFLLE9BQU87Z0JBQzNELEtBQUssRUFBRSxhQUFhLEtBQUssSUFBSSxFQUM3QjtnQkFDQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1lBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNsQjtRQUVELFdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9EO1FBRUQsV0FBVztRQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUM3RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7b0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakM7WUFFRCxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQzVCLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLG1CQUFtQixFQUN4RTtnQkFFQSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQztTQUNGO1FBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWtCO1FBQzlCLGlCQUFpQjtRQUVqQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUs7WUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQztRQUVwRSxhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE9BQU87U0FDUjtRQUVELGNBQWM7UUFDZCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsT0FBTztTQUNSO1FBRUQsT0FBTztRQUNQLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQ3JCLHlCQUF5QixDQUFDLHdCQUF3QjtZQUVsRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFFdEMsNENBQTRDO1FBQzVDLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjO1lBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUs7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQzlEO1lBQ0EsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVoRixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO2lCQUM3QixLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUM7aUJBQzlCLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUN2RCxDQUFDO1lBRUYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQ3pCLENBQUM7WUFFRiw0Q0FBNEM7WUFDNUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXRDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7YUFDekI7U0FDRjtRQUVELFdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQ2pFLElBQ0UsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO2dCQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO2dCQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7b0JBQ25CLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDO2dCQUNwRCxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUM1QjtnQkFDQSxJQUFLLEtBQUssRUFBRSxNQUFzQixFQUFFLFFBQVEsS0FBSyxPQUFPLEVBQUU7b0JBQ3hELE9BQU87aUJBQ1I7Z0JBQ0QsYUFBYTtnQkFDYixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7d0JBQy9CLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNUO3FCQUFNO29CQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzdCO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDNUI7U0FDRjtRQUNELDJCQUEyQjthQUN0QjtZQUNILElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFFN0IsaUJBQWlCO1lBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO2dCQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUVyRCxXQUFXO1lBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxVQUFVO2dCQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNoRSxtQkFBbUI7O2dCQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEtBQVUsRUFBRSxPQUFlLEdBQUc7UUFDMUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN4QyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQixLQUFLLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQVk7UUFDN0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVM7WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO1lBQ3RDLE1BQU0sRUFBRSxZQUFZO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxhQUFhLENBQ2xCLE9BQW1CLEVBQ25CLE9BQW1CLEVBQ25CLFNBQXFCLEVBQ3JCLE9BQW1CO1FBRW5CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxvQkFBb0IsQ0FDekIsRUFBYyxFQUNkLGNBQTBCO1FBRTFCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQy9CLE9BQU87U0FDUjtRQUVELElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLHFCQUFxQjtZQUV6RSxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUNsRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNoQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN0QyxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7aUJBQzlCO2dCQUNELE9BQU87YUFDUjtRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlELElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRTtZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVNLHNCQUFzQixDQUFDLEtBQVk7UUFDeEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUU7WUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUs7Z0JBQ3RDLE1BQU0sRUFBRSxpQkFBaUI7YUFDMUIsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLO2dCQUN0QyxNQUFNLEVBQUUsd0JBQXdCO2FBQ2pDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixrQkFBa0I7UUFDbEIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRTtZQUNuQyxJQUFJLENBQUMseUJBQXlCO2dCQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDO1NBQzdDO1FBRUQsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRTtZQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsNkJBQTZCO2dCQUNoRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDOztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUVELGFBQWE7UUFDYixJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVc7WUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVztZQUMvRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDekU7WUFDQSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVc7aUJBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO29CQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzVCLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELDRCQUE0QjtRQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFO1lBQ3JFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO2dCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDcEUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNsQztTQUNGO0lBQ0gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxLQUFvQjtRQUNuQyxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFdkUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRTtZQUNuQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFL0QsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xEO1FBRUQsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssZUFBZSxDQUFDLEtBQUssRUFBRTtZQUNqRSxJQUNHLEtBQUssQ0FBQyxNQUEyQixDQUFDLGNBQWMsS0FBSyxDQUFDO2dCQUN2RCxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFDakI7Z0JBQ0EsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3hCO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFvQjtRQUNqQyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUM3RDtRQUNELHNEQUFzRDtRQUN0RCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0QsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFFMUIsSUFDRSxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUM7WUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQ2hFO1lBQ0Esc0NBQXNDO1lBQ3RDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUM7WUFFckMsdUJBQXVCO1lBQ3ZCLElBQ0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSztnQkFDaEMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUNoRDtnQkFDQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7UUFFRCxJQUNFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTtZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7WUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsT0FBTyxFQUMzRDtZQUNBLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQztvQkFDNUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixJQUFJLEVBQUUsSUFBSTtpQkFDWCxDQUFDLENBQUM7YUFDSjtZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztvQkFDNUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVc7aUJBQ3ZCLENBQUMsQ0FBQztnQkFFSCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLE9BQU8sRUFBRTtvQkFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ2pDO2FBQ0Y7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztvQkFDNUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixJQUFJLEVBQUUsSUFBSTtpQkFDWCxDQUFDLENBQUM7YUFDSjtZQUNELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO29CQUM1QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQ3RCLElBQUksRUFBRSxJQUFJO2lCQUNYLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsa0dBQWtHO0lBRTNGLGlCQUFpQjtRQUN0QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVc7WUFDakUsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO2dCQUMzQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUN2RCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsSUFBc0I7UUFDNUMsSUFBSSxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsRUFBRTtZQUNuRSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO2FBQU0sSUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDekU7WUFDQSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO2FBQU07WUFDTCxJQUFJO2dCQUNGLElBQUksWUFBWSxJQUFJO29CQUNsQixDQUFDLENBQUMsSUFBSTtvQkFDTixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzRCxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTlDLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEQsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RSxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ2QsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUMvQztnQkFDQSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7UUFFSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixJQUFJLElBQUksQ0FBQyxPQUFPO1lBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDL0M7aUJBQU0sSUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUMvQztnQkFDQSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQzdDO2lCQUFNLElBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMsV0FBVyxFQUMvRDtnQkFDQSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQy9DO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFZO1FBQ2pDLElBQUksS0FBSztZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXLENBQUMsS0FBcUI7UUFDdEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBVyxDQUFDO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBSW5CO1FBQ0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFbEUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0MsSUFBSSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1lBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLE9BQU87U0FDUjtRQUVELFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNoQzthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25EO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNoRDtTQUNGO0lBQ0gsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE9BQWE7UUFDbkMsSUFBSSxLQUFZLENBQUM7UUFDakIsSUFBSSxTQUEyQixDQUFDO1FBRWhDLElBQUksTUFBTSxDQUFDLFlBQVksSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQy9DLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzdCLFNBQVMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRU0sdUJBQXVCO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFvQixFQUFFLGdCQUFnQixHQUFHLEtBQUs7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3JCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDekI7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE1BQU0sc0JBQXNCLEdBQzFCLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXLENBQUM7UUFFbEUsSUFBSSxlQUFlLElBQUksc0JBQXNCLEVBQUU7WUFDN0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN6QztnQkFDSCxJQUFJLENBQUMsZ0JBQWdCO29CQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFFOUMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQztvQkFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztnQkFFeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLENBQWdCO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7UUFDeEYsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBb0I7UUFDOUMsUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3JCLEtBQUssRUFBRSxFQUFFLGFBQWE7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsS0FBSyxFQUFFLENBQUMsQ0FBQyxjQUFjO1lBQ3ZCLEtBQUssQ0FBQyxFQUFFLE1BQU07Z0JBQ1osSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNO1lBQ1IsS0FBSyxFQUFFLEVBQUUsV0FBVztnQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixNQUFNO1lBQ1IsS0FBSyxFQUFFLEVBQUUsYUFBYTtnQkFDcEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QixNQUFNO1lBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBQ3BCLEtBQUssRUFBRSxFQUFFLFNBQVM7Z0JBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07U0FDVDtJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxDQUFnQjtRQUM5QyxNQUFNLG9CQUFvQixHQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUMsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDakQsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdEQ7YUFBTSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUN6QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDdkI7YUFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUMxQixRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FDM0IsQ0FBQztRQUN4QixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUN0QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUM5QyxDQUFDO1FBRUYsSUFBSSxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUFFLFNBQVMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEU7WUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUMxQixRQUFRLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FDM0IsQ0FBQztRQUN4QixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUN0QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUM5QyxDQUFDO1FBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDO1lBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7YUFDNUMsSUFBSSxZQUFZLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2FBQ2hEO1lBQ0gsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksWUFBWSxHQUFHLENBQUM7WUFBRSxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVNLG9CQUFvQixDQUFDLENBQWdCLEVBQUUsU0FBbUI7UUFDL0QsTUFBTSxZQUFZLEdBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUNqRSxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckQsTUFBTSxZQUFZLEdBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZTtZQUNqRSxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckQsSUFBSSxjQUEyQyxDQUFDO1FBRWhELElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLEVBQ3pFO1lBQ0EsY0FBYztnQkFDWixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWU7b0JBQ25FLENBQUMsQ0FBQyxFQUFFO29CQUNKLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsRUFBRTtZQUNuRSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxFQUFFO2dCQUM3QixJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjtxQkFBTSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7b0JBQ3JDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFO3dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDckMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3RCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BDO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzFDLFFBQVEsQ0FDTixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsR0FBRyxDQUFDLENBQ04sQ0FDRixDQUNGLENBQUM7d0JBRUYsSUFBSSxDQUFDLFdBQVc7NEJBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzs7NEJBRTVELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFFZCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDcEM7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDMUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQ3BCLENBQ0YsQ0FDRixDQUFDO29CQUVKLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztvQkFFbkQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQzs7d0JBQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNyQzthQUNGO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksU0FBUyxFQUFFO29CQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO29CQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNwQztxQkFBTSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUU7b0JBQ3JDLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFO3dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDckMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3RCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BDO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3pDLFFBQVEsQ0FDTixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsQ0FDRixDQUNGLENBQ0YsQ0FBQzt3QkFFRixJQUFJLENBQUMsV0FBVyxFQUFFOzRCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO3lCQUM3Qzs2QkFBTTs0QkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2I7d0JBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BDO2lCQUNGO3FCQUFNO29CQUNMLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM3RCxDQUNGLENBQUM7b0JBRUosSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ2xFLENBQUMsQ0FBQyxDQUNILENBQUM7b0JBRUYsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQzlCO2lCQUNGO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ3BDO3FCQUFNLElBQUksQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUN2QyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDWixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUM3QyxRQUFRLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDbEMsQ0FDRixDQUNGLENBQUM7b0JBRUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjtxQkFBTTtvQkFDTCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN6RCxDQUFDO29CQUVGLE1BQU0sYUFBYSxHQUNqQixTQUFTLEdBQUcsRUFBRTt3QkFDWixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzVCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUMvRCxDQUNGLENBQUM7b0JBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN6RCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUI7YUFDRjtTQUNGO2FBQU0sSUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxxQkFBcUIsRUFDekU7WUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDeEIsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDOUI7cUJBQU0sSUFBSSxZQUFZLEVBQUU7b0JBQ3ZCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDeEQsSUFBSSxXQUFXLEdBQUcsRUFBRSxFQUFFO3dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDckMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3RCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BDO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzFDLFFBQVEsQ0FDTixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDdkQsR0FBRyxDQUFDLENBQ04sQ0FDRixDQUNGLENBQUM7d0JBRUYsSUFBSSxDQUFDLFdBQVcsRUFBRTs0QkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt5QkFDN0M7NkJBQU07NEJBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLENBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUN2RCxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNiO3dCQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO3dCQUN4QixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwQztpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO3dCQUNqQixJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FDcEIsQ0FDRixDQUNGLENBQUM7b0JBRUosTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUV0RCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO29CQUVuRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTt3QkFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BDOzt3QkFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JDO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ3BDO3FCQUFNLElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUNsRSxDQUFDLENBQUMsQ0FDSCxDQUFDO29CQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQzdDLFFBQVEsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUNsQyxDQUNGLENBQ0YsQ0FBQztvQkFFRixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNMLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQUM7b0JBRUYsTUFBTSxhQUFhLEdBQ2pCLFNBQVMsR0FBRyxFQUFFO3dCQUNaLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDNUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQy9ELENBQ0YsQ0FBQztvQkFFRixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsQ0FDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3ZELENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1osSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBWSxFQUFFLFNBQW1CO1FBQ3BELFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1lBQ1IsS0FBSyxDQUFDO2dCQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztJQUM3QyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBaUI7UUFDeEMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBRXhELE1BQU0sSUFBSSxHQUFHLFNBQVMsS0FBSyxJQUFJLENBQUM7UUFDaEMsTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsQ0FBQztRQUNsRSxNQUFNLGdCQUFnQixHQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQztRQUU1RSxJQUFJLFlBQVksSUFBSSxnQkFBZ0I7WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQzs7WUFDNUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFhLEVBQUUsWUFBcUI7UUFDaEUsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUFhO1FBQ3pDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQztZQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBQ3hELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sV0FBVyxDQUFDLElBQWE7UUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxvQkFBb0IsQ0FDdkIsSUFBSSxJQUFJLENBQ04sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQzFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUM1RCxDQUNGLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNsRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FDbkQsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxVQUFVLENBQUMsSUFBYSxFQUFFLFlBQXFCO1FBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUNOLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUN6QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FDMUQsQ0FDRixDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxZQUFZO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQy9CLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDbkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FDOUMsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQWEsRUFBRSxZQUFxQjtRQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FDN0MsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxTQUFTLENBQzlELENBQ0YsQ0FDRixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsWUFBWTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUMvQixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLO2FBQ3hELFdBQVcsRUFBRTthQUNiLFFBQVEsRUFBRTthQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBYTtRQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxhQUFhLEdBQ2YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7UUFFOUQsSUFBSSxhQUFhLEtBQUssQ0FBQztZQUFFLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDNUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxDQUFDO1lBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUU3QyxJQUFJLENBQUMsb0JBQW9CLENBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQ3RFLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDbEQsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUN4RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUztZQUNwQyxhQUFhLEdBQUcsRUFBRSxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzNELENBQUM7SUFFTyxhQUFhLENBQUMsSUFBYTtRQUNqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FDNUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxZQUFZLENBQ2hFLENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2xELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQ2pELENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRWhFLE1BQU0sVUFBVSxHQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLG9CQUFvQixDQUN2QixJQUFJLElBQUksQ0FDTixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDMUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQzVELENBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVPLFFBQVEsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFrQjtRQUNqQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxLQUF1QixDQUFDO1FBQ2xELElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDbkQsT0FBTyxDQUNMLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxRQUFRLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxJQUFJLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUNuQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN2QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVcsRUFBRTtnQkFDbkUsSUFDRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUM7b0JBQzdDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDN0MsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQy9DO29CQUNBLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0I7d0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUU3RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLDRCQUE0Qjt5QkFDbEY7d0JBQ0gsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQjs0QkFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFDOUQ7NEJBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7eUJBQ3ZGOzZCQUFNOzRCQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDbkMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FDcEMsQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUM5QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzlCO2FBQ0Y7aUJBQU0sSUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUMvQztnQkFDQSxJQUNFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDNUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQzVDO29CQUNBLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0I7d0JBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQzlEO3dCQUNBLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO3FCQUN2Rjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ25DLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQ3BDLENBQUM7cUJBQ0g7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5QjthQUNGO2lCQUFNO2dCQUNMLElBQ0UsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUM1QyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFDNUM7b0JBQ0EseUNBQXlDO29CQUN6Qyw2QkFBNkI7b0JBQzdCLEtBQUs7aUJBQ047cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDOUI7YUFDRjtZQUVELFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU0seUJBQXlCO1FBQzlCLDBDQUEwQztRQUMxQyxJQUFJLEtBQUssRUFBRSxTQUFTLENBQUM7UUFFckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUMvQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFL0IsSUFDRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQ3JCLHlCQUF5QixDQUFDLHFCQUFxQixFQUMvQztnQkFDQSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQy9DO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDN0M7WUFFRCxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU0seUJBQXlCO1FBQzlCLElBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLEVBQ3pFO1lBQ0EsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDbkQ7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxZQUFZLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU8sQ0FDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyx5QkFBeUIsQ0FBQyxXQUFXO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDLFdBQVc7WUFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUsseUJBQXlCLENBQUMscUJBQXFCLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRU0sU0FBUztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQTMwRlUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQ29tbWFuZHNFdmVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbi8vIGJvb3RzdHJhcFxuaW1wb3J0IHsgTmdiUG9wb3ZlciB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuLy8gaGVscGVyc1xuaW1wb3J0IHsgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlciB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hlbHBlcnMvbWV0aG9kcy1jYWxjdWxhdGlvbnMuaGVscGVyJztcblxuLy8gZW51bXNcbmltcG9ydCB7XG4gIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0sXG4gIElucHV0Q29tbWFuZHNUeXBlLFxuICBJbnB1dENvbW1hbmRzQWN0aW9uLFxuICBJbnB1dFN0cmluZ0VudW0sXG59IGZyb20gJy4uL2VudW1zJztcblxuLy8gc2VydmljZXNcbmltcG9ydCB7IENhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnMvc2VydmljZXMvY2FsZW5kYXItZGF0ZXRpbWUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jYS1pbnB1dC12YWxpZGF0aW9uLnNlcnZpY2UnO1xuXG4vLyBTdmcgcm91dGVzXG5pbXBvcnQgeyBJbnB1dENoYW5nZVZhbHVlLCBJbnB1dFN2Z1JvdXRlcyB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gcGlwZXNcbmltcG9ydCB7IFRob3VzYW5kU2VwYXJhdG9yUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3Rob3VzYW5kLXNlcGFyYXRvci5waXBlJztcblxuLy8gY29uc3RhbnRzXG5pbXBvcnQgeyBJbnB1dENvbnN0YW50cyB9IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dFN0YXRlU2VydmljZSB7XG4gIHByaXZhdGUgaXNGb2N1c0lucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgaXNGb2N1c0lucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9XG4gICAgdGhpcy5pc0ZvY3VzSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNUb3VjaGVkSW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc1RvdWNoZWRJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNUb3VjaGVkSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNWaXNpYmxlQ29tbWFuZHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc1Zpc2libGVDb21tYW5kcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNWaXNpYmxlQ29tbWFuZHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNFZGl0SW5wdXRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0VkaXRJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0Ryb3Bkb3duVG9nZ2xlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRlPihuZXcgRGF0ZSgpKTtcbiAgcHVibGljIGRhdGVUaW1lSW5wdXREYXRlJDogT2JzZXJ2YWJsZTxEYXRlPiA9XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBzaG93RGF0ZUlucHV0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc2hvd0RhdGVJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuc2hvd0RhdGVJbnB1dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBpc0NhcHNMb2NrT25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBpc0NhcHNMb2NrT24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID1cbiAgICB0aGlzLmlzQ2Fwc0xvY2tPblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxJbnB1dENoYW5nZVZhbHVlPigpO1xuICBwdWJsaWMgb25DaGFuZ2UkOiBPYnNlcnZhYmxlPElucHV0Q2hhbmdlVmFsdWU+ID1cbiAgICB0aGlzLm9uQ2hhbmdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAvLyBPdXRwdXRzXG4gIHByaXZhdGUgY29tbWFuZEV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0PENvbW1hbmRzRXZlbnQ+KCk7XG4gIHB1YmxpYyBjb21tYW5kRXZlbnQkOiBPYnNlcnZhYmxlPENvbW1hbmRzRXZlbnQ+ID1cbiAgICB0aGlzLmNvbW1hbmRFdmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBjbGVhcklucHV0RXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIGNsZWFySW5wdXRFdmVudCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGluY29ycmVjdElucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHB1YmxpYyBpbmNvcnJlY3RJbnB1dCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuaW5jb3JyZWN0SW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgc2hvd0hpZGVEcm9wZG93blN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgc2hvd0hpZGVEcm9wZG93biQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPVxuICAgIHRoaXMuc2hvd0hpZGVEcm9wZG93blN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBkcm9wRG93bktleU5hdmlnYXRpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8e1xuICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICBkYXRhOiBJQ2FJbnB1dCB8IG51bGw7XG4gIH0+KCk7XG4gIHB1YmxpYyBkcm9wRG93bktleU5hdmlnYXRpb24kOiBPYnNlcnZhYmxlPHtcbiAgICBrZXlDb2RlOiBudW1iZXI7XG4gICAgZGF0YTogSUNhSW5wdXQgfCBudWxsO1xuICB9PiA9IHRoaXMuZHJvcERvd25LZXlOYXZpZ2F0aW9uU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGJsdXJJbnB1dFN1YmplY3QgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwdWJsaWMgYmx1cklucHV0JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuYmx1cklucHV0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGNoYW5nZUlucHV0U3ViamVjdCA9IG5ldyBTdWJqZWN0PElucHV0Q2hhbmdlVmFsdWU+KCk7XG4gIHB1YmxpYyBjaGFuZ2VJbnB1dCQ6IE9ic2VydmFibGU8SW5wdXRDaGFuZ2VWYWx1ZT4gPVxuICAgIHRoaXMuY2hhbmdlSW5wdXRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBjb21iaW5lZFZhcmlhYmxlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmlzRm9jdXNJbnB1dCQsXG4gICAgdGhpcy5pc1RvdWNoZWRJbnB1dCQsXG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kcyQsXG4gICAgdGhpcy5pc0VkaXRJbnB1dCQsXG4gICAgdGhpcy5pc0Ryb3Bkb3duVG9nZ2xlciQsXG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSQsXG4gICAgdGhpcy5zaG93RGF0ZUlucHV0JCxcbiAgICB0aGlzLmlzQ2Fwc0xvY2tPbiQsXG4gIF0pO1xuXG4gIHByaXZhdGUgY2RSZWYhOiBDaGFuZ2VEZXRlY3RvclJlZjtcblxuICBwcml2YXRlIGlucHV0Q29uZmlnITogSUNhSW5wdXQ7XG4gIHByaXZhdGUgaW5jb3JyZWN0VmFsdWUhOiBib29sZWFuO1xuXG4gIHByaXZhdGUgaW5wdXQhOiBFbGVtZW50UmVmO1xuICBwcml2YXRlIHN1cGVyQ29udHJvbCE6IE5nQ29udHJvbDtcblxuICAvLyBEYXRlXG4gIHB1YmxpYyBuZXdJbnB1dENoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdGlvbklucHV0OiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSBwcmV2ZW50Qmx1ciE6IGJvb2xlYW47XG5cbiAgLy8gSW5wdXQgU2VsZWN0aW9uXG4gIHB1YmxpYyBpbnB1dFNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBzcGFuT25lITogRWxlbWVudFJlZjtcbiAgcHVibGljIHNwYW5Ud28hOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgc3BhblRocmVlITogRWxlbWVudFJlZjtcbiAgcHVibGljIGhvbGRlcjEhOiBFbGVtZW50UmVmO1xuICBwdWJsaWMgdDIhOiBOZ2JQb3BvdmVyO1xuICBwdWJsaWMgbmdiTWFpblBvcG92ZXIhOiBOZ2JQb3BvdmVyO1xuXG4gIHByaXZhdGUgaW5wdXRDb21tYW5kc1RpbWVvdXQhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBmb2N1c0JsdXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lb3V0Q2xlYW5lciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuICBwcml2YXRlIGRhdGVUaW1lTWFpblRpbWVyITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG4gIHByaXZhdGUgcGFzc3dvcmRUaW1lb3V0ITogTm9kZUpTLlRpbWVvdXQgfCBudW1iZXI7XG5cbiAgLy8gUHJpY2UgU2VwYXJhdG9yXG4gIHB1YmxpYyBjdXJzb3JJbnB1dFBvc2l0aW9uITogbnVtYmVyO1xuICBwdWJsaWMgaGFzRGVjaW1hbEluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIG9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQhOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyBpc0RvdERlbGV0ZWQhOiBib29sZWFuO1xuXG4gIC8vIE51bWJlciBvZiBzcGFjZXNcbiAgcHVibGljIG51bWJlck9mQ29uc2VjdXRpdmVseVNwYWNlczogbnVtYmVyID0gMDtcbiAgcHVibGljIG9uZVNwYWNlT25seUNvdW50ZXI6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBsYXN0Q3Vyc29yU3BhY2VQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAvLyBOdW1iZXIgb2YgcG9pbnRzXG4gIHB1YmxpYyBudW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHM6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBudW1iZXJPZlBvaW50czogbnVtYmVyID0gMDtcblxuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNhbGVuZGFyU2VydmljZTogQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYUlucHV0VmFsaWRhdGlvblNlcnZpY2U6IENhSW5wdXRWYWxpZGF0aW9uU2VydmljZSxcblxuICAgIC8vIFBpcGVzXG4gICAgcHJpdmF0ZSB0aG91c2FuZFNlcGFyYXRvclBpcGU6IFRob3VzYW5kU2VwYXJhdG9yUGlwZVxuICApIHt9XG5cbiAgcHVibGljIHNldElzRm9jdXNJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c0lucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc1RvdWNoZWRJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNUb3VjaGVkSW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElzVmlzaWJsZUNvbW1hbmRzKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1Zpc2libGVDb21tYW5kc1N1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNFZGl0SW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdElucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJc0Ryb3Bkb3duVG9nZ2xlcih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldERhdGVUaW1lSW5wdXREYXRlKHZhbHVlOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2hvd0RhdGVJbnB1dCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0RhdGVJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNDYXBzTG9ja09uKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0NhcHNMb2NrT25TdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldElucHV0RWxlbWVudFJlZihpbnB1dDogRWxlbWVudFJlZiwgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuY2RSZWYgPSBjZFJlZjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdXBlckNvbnRyb2woc3VwZXJDb250cm9sOiBOZ0NvbnRyb2wpOiB2b2lkIHtcbiAgICB0aGlzLnN1cGVyQ29udHJvbCA9IHN1cGVyQ29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnB1dENvbmZpZyhjb25maWc6IElDYUlucHV0KTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dENvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbmNvcnJlY3RWYWx1ZShpbmNvcnJlY3RWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaW5jb3JyZWN0VmFsdWUgPSBpbmNvcnJlY3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kRXZlbnQodmFsdWU6IENvbW1hbmRzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbW1hbmRFdmVudFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2xlYXJJbnB1dEV2ZW50KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhcklucHV0RXZlbnRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldEluY29ycmVjdElucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmNvcnJlY3RJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0U2hvd0hpZGVEcm9wZG93bih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd0hpZGVEcm9wZG93blN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHZhbHVlOiB7XG4gICAga2V5Q29kZTogbnVtYmVyO1xuICAgIGRhdGE6IElDYUlucHV0IHwgbnVsbDtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZHJvcERvd25LZXlOYXZpZ2F0aW9uU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCbHVySW5wdXQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmJsdXJJbnB1dFN1YmplY3QubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q2hhbmdlSW5wdXQodmFsdWU6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUlucHV0U3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRPbkNoYW5nZSh2YWx1ZTogSW5wdXRDaGFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDaGFuZ2VJbnB1dChvYmopO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgICApIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgIHRoaXMudGltZW91dENsZWFuZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChvYmopO1xuICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gb2JqO1xuICAgICAgICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IpIHtcbiAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBvYmo7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gQ2xlYXIgd2hvbGUgaW5wdXRcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5yZW1vdmVJbnB1dCkge1xuICAgICAgdGhpcy5zZXRDbGVhcklucHV0RXZlbnQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEluY29ycmVjdCBJbnB1dFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmluY29ycmVjdElucHV0KSB7XG4gICAgICB0aGlzLmluY29ycmVjdFZhbHVlID0gIXRoaXMuaW5jb3JyZWN0VmFsdWU7XG4gICAgICB0aGlzLnNldEluY29ycmVjdElucHV0KHRoaXMuaW5jb3JyZWN0VmFsdWUpO1xuICAgIH1cbiAgICAvLyBOYXRpdmUgY2xlYXJcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5U3BhY2VzID0gMDtcbiAgICAgIHRoaXMubnVtYmVyT2ZDb25zZWN1dGl2ZWx5UG9pbnRzID0gMDtcbiAgICAgIHRoaXMubnVtYmVyT2ZQb2ludHMgPSAwO1xuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID0gMDtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZXRJc1RvdWNoZWRJbnB1dCh0cnVlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIGlmIChcbiAgICAgICAgKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIsXG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSLFxuICAgICAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQsXG4gICAgICAgICAgXSBhcyBzdHJpbmdbXVxuICAgICAgICApLmluY2x1ZGVzKHRoaXMuaW5wdXRDb25maWcubmFtZSlcbiAgICAgIClcbiAgICAgICAgdGhpcy5yZXNldERhdGVUaW1lSW5wdXRzKCk7XG5cbiAgICAgIHRoaXMuc2V0Q2xlYXJJbnB1dEV2ZW50KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm1UZXh0KGV2ZW50OiBFdmVudCwgaXNQYXN0ZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5jdXJzb3JJbnB1dFBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgLy8gSGFuZGxlIHBhc3RlIG9wZXJhdGlvblxuICAgIGlmIChpc1Bhc3RlKSB7XG4gICAgICB0aGlzLmhhbmRsZVBhc3RlKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5VGV4dFRyYW5zZm9ybWF0aW9uKCk7XG5cbiAgICAvLyBBcHBseSB0aG91c2FuZCBhbmQgcHJpY2Ugc2VwYXJhdG9ycyBpZiBjb25maWd1cmVkXG4gICAgdGhpcy5hcHBseVRob3VzYW5kU2VwYXJhdG9yKCk7XG4gICAgdGhpcy5hcHBseVByaWNlU2VwYXJhdG9yKCk7XG5cbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24odmFsdWUpO1xuXG4gICAgdGhpcy5zYW5pdGl6ZUNvbnNlY3V0aXZlU3BhY2VzKCk7XG5cbiAgICB0aGlzLnJlbW92ZUxlYWRpbmdaZXJvKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhc3RlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIHRoaXMubGltaXRJbnB1dExlbmd0aCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaW5wdXRTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBEZWxldGUgc3BhY2VzIG9uIGJlZ2luIGFuZCBlbmRcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUudHJpbSgpO1xuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgbGltaXRJbnB1dExlbmd0aCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLmxlbmd0aCA+IHRoaXMuaW5wdXRDb25maWcubWF4TGVuZ3RoISkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnN1YnN0cmluZyhcbiAgICAgICAgMCxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5tYXhMZW5ndGhcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRleHRUcmFuc2Zvcm1hdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgc3dpdGNoICh0aGlzLmlucHV0Q29uZmlnLnRleHRUcmFuc2Zvcm0pIHtcbiAgICAgIGNhc2UgSW5wdXRTdHJpbmdFbnVtLkNBUElUQUxJWkU6XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9XG4gICAgICAgICAgdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHJpbmcoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0U3RyaW5nRW51bS5VUFBFUkNBU0U6XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlLnRvTG9jYWxlVXBwZXJDYXNlKCdlbi1VUycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRTdHJpbmdFbnVtLkNBUElUQUxJWkVEX0NBU0U6XG4gICAgICAgIGNvbnN0IGNhcGl0YWxpemVkQ2FzZVdvcmRzID0gdmFsdWUucmVwbGFjZShcbiAgICAgICAgICAvKF5cXHd7MX0pfChcXHMrXFx3ezF9KS9nLFxuICAgICAgICAgIChsZXR0ZXI6IHN0cmluZykgPT4gbGV0dGVyLnRvVXBwZXJDYXNlKClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjYXBpdGFsaXplZENhc2VXb3JkcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRob3VzYW5kU2VwYXJhdG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnRob3VzYW5kU2VwYXJhdG9yICYmIGNvbnRyb2xWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMuaXNBbGxaZXJvcyhjb250cm9sVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoJzAnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnRvU3RyaW5nKCkpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oY29udHJvbFZhbHVlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlQcmljZVNlcGFyYXRvcigpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvciAmJiBjb250cm9sVmFsdWUpIHtcbiAgICAgIC8vIDAuIERvbid0IGFsbG93IDAgYXMgZmlyc3QgY2hhcmFjdGVyXG4gICAgICBpZiAodGhpcy5pc0FsbFplcm9zKGNvbnRyb2xWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgnMCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIHVzZXIgc2V0IGRvdFxuICAgICAgaWYgKGNvbnRyb2xWYWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0V2l0aERlY2ltYWwoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIElmIHVzZXIgZG9lc24ndCBzZXQgZG90XG4gICAgICAgIHRoaXMuZm9ybWF0V2l0aG91dERlY2ltYWwoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRJbnB1dEN1cnNvclBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRXaXRoRGVjaW1hbCgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZTtcbiAgICAvLyA0LjEuIENoZWNrIGZvciBEb3QgcG9zaXRpb25cbiAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IGNvbnRyb2xWYWx1ZS5pbmRleE9mKCcuJyk7XG5cbiAgICB0aGlzLm9yaWdpblByaWNlU2VwYXJhdG9yTGltaXQgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24hICsgMztcblxuICAgIC8vIDQuMi4gRGl2aWRlIG51bWJlciBpbnRvIGRlY2ltYWwgYW5kIGludGVnZXIgcGFydHNcbiAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgICBjb250cm9sVmFsdWVcbiAgICAgICAgLnNsaWNlKDAsIHRoaXMuaGFzRGVjaW1hbEluZGV4KVxuICAgICAgICAuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgKTtcbiAgICBsZXQgZGVjaW1hbFBhcnQgPSBjb250cm9sVmFsdWUuc2xpY2UodGhpcy5oYXNEZWNpbWFsSW5kZXggKyAxKTtcblxuICAgIGlmICghaW50ZWdlclBhcnQpIHtcbiAgICAgIGludGVnZXJQYXJ0ID0gJzAnO1xuICAgIH1cblxuICAgIC8vIDQuNC4gR2V0IG9ubHkgdHdvIG51bWJlcnMgb2YgdGhlIGRlY2ltYWwgcGFydFxuICAgIGRlY2ltYWxQYXJ0ID0gZGVjaW1hbFBhcnQuc2xpY2UoMCwgMik7XG5cbiAgICBpZiAoZGVjaW1hbFBhcnQpIHtcbiAgICAgIC8vIDQuNS4gU2V0IGZvcm1hdHRlZCBudW1iZXJcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoYCR7aW50ZWdlclBhcnR9LiR7ZGVjaW1hbFBhcnR9YCk7XG4gICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFdpdGhvdXREZWNpbWFsKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gLTE7XG5cbiAgICBpZiAoY29udHJvbFZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEpIHtcbiAgICAgIC8vIFRyYW5zZm9ybSB2YWx1ZSB3aXRoIHRob3VzYW5kIHNlcGFyYXRvclxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgdGhpcy50aG91c2FuZFNlcGFyYXRvclBpcGUudHJhbnNmb3JtKGNvbnRyb2xWYWx1ZSlcbiAgICAgICk7XG5cbiAgICAgIC8vIExpbWl0IHZhbGlkYXRpb25cbiAgICAgIHRoaXMub3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCA9XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uO1xuXG4gICAgICAvLyBDdXQgdmFsdWVcbiAgICAgIGlmIChjb250cm9sVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICBjb250cm9sVmFsdWUuc2xpY2UoMCwgdGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvckxpbWl0YXRpb24pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFRyYW5zZm9ybSB2YWx1ZSBhZ2FpbiBhZnRlciBjdXR0aW5nXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oY29udHJvbFZhbHVlKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldElucHV0Q3Vyc29yUG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShcbiAgICAgICAgICB0aGlzLmN1cnNvcklucHV0UG9zaXRpb24gK1xuICAgICAgICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLmluZGV4T2YoJy4nKSA9PT0gLTEgPyAxIDogMCksXG4gICAgICAgICAgdGhpcy5jdXJzb3JJbnB1dFBvc2l0aW9uICtcbiAgICAgICAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5pbmRleE9mKCcuJykgPT09IC0xID8gMSA6IDApXG4gICAgICAgICk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgd2UgaGF2ZSAke259MDAwMDAgYW5kIHdlIGRlbGV0ZSBOIHRoZW4gd2UgZ290IHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGRvdFxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZSgwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQWxsWmVyb3ModmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnJykuZXZlcnkoKGNoYXIpID0+IGNoYXIgPT09ICcwJyk7XG4gIH1cblxuICBwcml2YXRlIGN1c3RvbVZhbGlkYXRpb24odmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZ05hbWUgPSB0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChcbiAgICAgIGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5ZRUFSICYmXG4gICAgICBwYXJzZUludCh2YWx1ZSkgPiBwYXJzZUludChtb21lbnQoKS5hZGQoMSwgJ3llYXInKS5mb3JtYXQoJ1lZWVknKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5NT05USFMpIHtcbiAgICAgIGlmIChwYXJzZUludCh2YWx1ZSkgPCAxIHx8IHBhcnNlSW50KHZhbHVlKSA+IDEyKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ05hbWUgPT09IElucHV0U3RyaW5nRW51bS5BWExFUykge1xuICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IDEgfHwgcGFyc2VJbnQodmFsdWUpID4gMTcpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KHZhbHVlKSA8IDEpIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBtaW46IDEgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodmFsdWUpID4gMTcpIHtcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBtYXg6IDE3IH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY29uZmlnTmFtZSA9PT0gSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRSAmJlxuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWVcbiAgICApIHtcbiAgICAgIHRoaXMuY2FwaXRhbGl6ZVdvcmRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjYXBpdGFsaXplV29yZHMoKTogdm9pZCB7XG4gICAgY29uc3Qgd29yZHMgPSB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IGNhcGl0YWxpemVkID0gd29yZHMubWFwKCh3b3JkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGNhcGl0YWxpemVkLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2FuaXRpemVDb25zZWN1dGl2ZVNwYWNlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWdOYW1lcyA9IElucHV0Q29uc3RhbnRzLnRleHRUcmFuc2Zvcm1Db25maWdOYW1lcztcblxuICAgIGlmIChjb25maWdOYW1lcy5pbmNsdWRlcyh0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlLnJlcGxhY2UoXG4gICAgICAgIC9cXHN7Mix9L2csXG4gICAgICAgICcgJ1xuICAgICAgKTtcbiAgICAgIGlmIChzYW5pdGl6ZWRJbnB1dCAhPT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHNhbml0aXplZElucHV0O1xuICAgICAgICB0aGlzLnNldEN1cnNvckZvclNhbml0aXplZElucHV0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJzb3JGb3JTYW5pdGl6ZWRJbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgIHRoaXMubGFzdEN1cnNvclNwYWNlUG9zaXRpb24gLSAxLFxuICAgICAgICB0aGlzLmxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uIC0gMVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGVhZGluZ1plcm8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucmVtb3ZlTGVhZGluZ1plcm8pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xuXG4gICAgICBpZiAoIWN1cnJlbnRWYWx1ZSkge1xuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5lZ2F0aXZlTGVhZGluZ1plcm8pIHtcbiAgICAgICAgY29uc3QgaXNOZWdhdGl2ZSA9IGN1cnJlbnRWYWx1ZS5zdGFydHNXaXRoKCctJyk7XG5cbiAgICAgICAgaWYgKGlzTmVnYXRpdmUpIHtcbiAgICAgICAgICAvLyBHZXQgdGhlIHBhcnQgYWZ0ZXIgdGhlIG5lZ2F0aXZlIHNpZ25cbiAgICAgICAgICBjb25zdCBudW1iZXJQYXJ0ID0gY3VycmVudFZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zXG4gICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWROdW1iZXIgPSBudW1iZXJQYXJ0LnJlcGxhY2UoL14wKyg/PVxcZCkvLCAnJyk7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShgLSR7dHJhbnNmb3JtZWROdW1iZXJ9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5yZXBsYWNlKC9eMCsoPz1cXGQpLywgJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICBjdXJyZW50VmFsdWUucmVwbGFjZSgvXjArKD8hJCkvLCAnJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0b0ZvY3VzRmlyc3RJbnB1dCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgJiYgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5hdXRvRm9jdXMgPSBmYWxzZTtcbiAgICAgIH0sIDMwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25LZXlwcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4gfCB2b2lkIHtcbiAgICAvLyBEaXNhYmxlIGZpcnN0IGNoYXJhY3RlciB0byBiZSBzcGFjZVxuICAgIGlmIChcbiAgICAgICF0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgJiZcbiAgICAgIC9eXFxzKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QUklDRV9TRVBBUkFUT1IpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8ubGVuZ3RoID09PVxuICAgICAgICAgICAgdGhpcy5vcmlnaW5QcmljZVNlcGFyYXRvckxpbWl0ICYmXG4gICAgICAgICAgZXZlbnQua2V5Q29kZSAhPT0gNDZcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gIERpc2FibGUgbXVsdGlwbGUgZG90c1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG5cbiAgICAgICAgLy8gRmluZCBpbmRleCBvZiBkb3RcbiAgICAgICAgY29uc3QgdmFsdWVUb1N0cmluZyA9IFN0cmluZyh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5oYXNEZWNpbWFsSW5kZXggPSB2YWx1ZVRvU3RyaW5nPy5pbmRleE9mKCcuJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzRGVjaW1hbEluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyAxLiBEaXZpZGUgbnVtYmVyIG9uIGRlY2ltYWwgYW5kIGludGVnZXIgcGFydFxuICAgICAgICAgIGxldCBpbnRlZ2VyUGFydCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghaW50ZWdlclBhcnQpIGludGVnZXJQYXJ0ID0gJzAnO1xuXG4gICAgICAgICAgbGV0IGRlY2ltYWxQYXJ0ID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUuc2xpY2UoXG4gICAgICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCArIDFcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gMi4gRGlzYWJsZSBtb3JlIHRoYW4gdHdvIGRlY2ltYWxzXG4gICAgICAgICAgaWYgKGRlY2ltYWxQYXJ0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMy4gR2V0IG9ubHkgdHdvIG51bWJlcnMgb2YgZGVjaW1hbCBwYXJ0XG4gICAgICAgICAgZGVjaW1hbFBhcnQgPSBkZWNpbWFsUGFydC5zbGljZSgwLCAyKTtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICAgIC8vIDQuIFNldCBmb3JtYXR0ZWQgbnVtYmVyXG4gICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ICsgJy4nICsgZGVjaW1hbFBhcnRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDUxKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3Vyc29ySW5wdXRQb3NpdGlvbiA9XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoXG4gICAgICAgICAgICAgICAgY3VycmVudFBvc2l0aW9uLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvblxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBjdXJyZW50UG9zaXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5CVVNJTkVTU19OQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU0hPUF9OQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9TVE9QLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUFJPRFVDRVJfTkFNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlRFUk1JTkFMX05BTUUsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5CVVNJTkVTU19OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5FSU4sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NQ19GRixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBIT05FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEhPTkVfRVhURU5TSU9OLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQUNDT1VOVF9CQU5LLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUk9VVElOR19CQU5LLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU1NOLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9DQVJELFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRU1QVFlfV0VJR0hULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uQ1JFRElUX0xJTUlULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUE9fQk9YLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUFJJQ0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5UUkFJTEVSX1ZPTFVNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlJFUEFJUl9PRE9NRVRFUixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlVTRE9ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uSVJQLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uU1RBUlRJTkcsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DVVNUT01FUl9QQVlfVEVSTSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNVU1RPTUVSX0NSRURJVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkRFRkFVTFRfQkFTRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkVBQ0hfT0NDVVJSRU5DRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkRBTUFHRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlBFUlNPTkFMX0FEVkVSX0lOSixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1FRElDQUxfRVhQRU5TRVMsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5CT0RJTFlfSU5KVVJZLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uR0VORVJBTF9BR0dSRUdBVEUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QUk9EVUNUU19DT01QX09QX0FHRyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNPTUJJTkVEX1NJTkdMRV9MSU1JVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNJTkdMRV9DT05WRVlBTkNFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uREVEVUNUQUJMRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkNPTVBSRUhfQ09MTElTSU9OLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVFJBSUxFUl9WQUxVRV9JTlNVUkFOQ0VfUE9MSUNZLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUkVOVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNBTEFSWSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1JTEVBR0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NT05USFMsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5FTVBUWV9XRUlHSFRfU1BBQ0UsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5RVFksXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QVVJDSEFTRV9QUklDRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVRUxfVEFOS19TSVpFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uV0VJR0hULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uRlVFTF9QRVJfTUlMRVMsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GVUVMX1BSSUNFX01BUCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkFNT1VOVCxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkJPTF9OTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLlNFQUxfTk8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QSUNLVVBfTk8sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5DT0RFLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRlJPTV9GSVJTVF9GUk9NLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uTVVMVElfRlJPTV9GSVJTVF9UTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZPUk1fU0VDT05EX0ZST00sXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5NVUxUSV9GT1JNX1NFQ09ORF9UTyxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZPUk1fVEhJUkRfRlJPTSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk1VTFRJX0ZPUk1fVEhJUkRfVE8sXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICAvLyBPbmx5IG51bWJlcnNcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlFUWSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uRU1BSUxdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5FTUFJTClcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVBvaW50cyhldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLklOVk9JQ0VdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5JTlZPSUNFKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5BRERSRVNTXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKC9eW0EtWmEtejAtOVxccy4mLyxfLV0qJC8/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5BRERSRVNTX1VOSVQsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5ERVBBUlRNRU5ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVkVISUNMRV9VTklULFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uQUREUkVTU19VTklUKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GSVJTVF9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRklSU1RfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkxBU1RfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkxBU1RfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5CQU5LX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5CQU5LX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU11bHRpcGxlUG9pbnRzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uVklOX05VTUJFUixcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLklOU1VSQU5DRV9QT0xJQ1ksXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5JRlRBLFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uVklOX05VTUJFUilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiAhL15bSWlPUV0qJC8/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uVFJVQ0tfVFJBSUxFUl9NT0RFTF0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlRSVUNLX1RSQUlMRVJfTU9ERUwpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlT25lU3BhY2VPbmx5KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uWUVBUl0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgL14wKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpICYmXG4gICAgICAgICF0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWVcbiAgICAgICkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLllFQVIpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkxJQ0VOU0VfUExBVEVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5MSUNFTlNFX1BMQVRFKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVuYWJsZU9uZVNwYWNlT25seShldmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkRFU0NSSVBUSU9OXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uREVTQ1JJUFRJT04pXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5BTExPV19BTExdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoLy4qLz8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSkpIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uREJBX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5EQkFfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uUEVSX01JTEVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QRVJfTUlMRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuXG4gICAgICAgIC8vIENoZWNrIGZvciBtYXggbGVuZ3RoXG4gICAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnLicpKVxuICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcubWF4TGVuZ3RoID0gNDtcbiAgICAgICAgZWxzZSB0aGlzLmlucHV0Q29uZmlnLm1heExlbmd0aCA9IDI7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHJhbmdlXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSA+IHRoaXMuaW5wdXRDb25maWcubWF4ISB8fFxuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlIDwgdGhpcy5pbnB1dENvbmZpZy5taW4hXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEVSX1NUT1AsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5GTEFUX1JBVEUsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QRVJfTE9BRCxcbiAgICAgIF0uaW5jbHVkZXMoPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlBFUl9TVE9QKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgcGVyU3RvcFZhbHVlID0gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUucmVwbGFjZShcbiAgICAgICAgICAgICAgLywvZyxcbiAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBlclN0b3BWYWx1ZSA+IHRoaXMuaW5wdXRDb25maWcubWF4ISB8fFxuICAgICAgICAgICAgICBwZXJTdG9wVmFsdWUgPCB0aGlzLmlucHV0Q29uZmlnLm1pbiFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uUkVMQVRJT05TSElQLCBJbnB1dFN0cmluZ0VudW0uU0NBQ10uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkVNRVJHRU5DWV9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5FTUVSR0VOQ1lfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkVNRVJHRU5DWV9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GVUxMX0NPTlRBQ1RfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZVTExfQ09OVEFDVF9OQU1FKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GVUVMX1NUT1JFXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRlVFTF9TVE9SRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtJbnB1dFN0cmluZ0VudW0uSE9TXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5pbnB1dFNlbGVjdGlvbiAmJlxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uSE9TKVxuICAgICAgICAgID8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlICogMTAgKyBldmVudC5jaGFyQ29kZSAtIDQ4IDw9XG4gICAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5tYXghXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFNlbGVjdGlvbikge1xuICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5pbnB1dFNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIFtcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLkZVTExfUEFSS0lOR19TTE9ULFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEFSS0lOR19TTE9ULFxuICAgICAgXS5pbmNsdWRlcyg8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uRlVMTF9QQVJLSU5HX1NMT1QpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5DRExfTlVNQkVSXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uQ0RMX05VTUJFUilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxsIFNpbWJvbHNcbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5VU0VSTkFNRSxcbiAgICAgICAgSW5wdXRTdHJpbmdFbnVtLk5JQ0tOQU1FLFxuICAgICAgICBJbnB1dFN0cmluZ0VudW0uUEFTU1dPUkQsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5VU0VSTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRV0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLkZVTExfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQpO1xuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aXBsZVBvaW50cyhldmVudCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLlRPTExfVkFMSURBVElPTl0uaW5jbHVkZXMoXG4gICAgICAgIDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jYUlucHV0VmFsaWRhdGlvblNlcnZpY2VcbiAgICAgICAgICAuZ2V0SW5wdXRSZWdleFBhdHRlcm4oSW5wdXRTdHJpbmdFbnVtLlRPTExfVkFMSURBVElPTilcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBKdXN0IGNoYXJhY3RlcnMgYW5kIG51bWJlcnNcbiAgICBpZiAoXG4gICAgICBbXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QUkVGSVgsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5TVUZGSVgsXG4gICAgICAgIElucHV0U3RyaW5nRW51bS5QQVJLSU5HX05BTUUsXG4gICAgICBdLmluY2x1ZGVzKDxJbnB1dFN0cmluZ0VudW0+dGhpcy5pbnB1dENvbmZpZy5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5QUkVGSVgpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgW0lucHV0U3RyaW5nRW51bS5GVUxMX05BTUVdLmluY2x1ZGVzKFxuICAgICAgICA8SW5wdXRTdHJpbmdFbnVtPnRoaXMuaW5wdXRDb25maWcubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY2FJbnB1dFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgICAgLmdldElucHV0UmVnZXhQYXR0ZXJuKElucHV0U3RyaW5nRW51bS5GVUxMX05BTUUpXG4gICAgICAgICAgPy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNvbnNlY3V0aXZlbHlTcGFjZXMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLklOU1VSRVJfTkFNRSwgSW5wdXRTdHJpbmdFbnVtLk9GRklDRV9OQU1FXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmNhSW5wdXRWYWxpZGF0aW9uU2VydmljZVxuICAgICAgICAgIC5nZXRJbnB1dFJlZ2V4UGF0dGVybihJbnB1dFN0cmluZ0VudW0uUFJPRFVDRVJfTkFNRSlcbiAgICAgICAgICA/LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBbSW5wdXRTdHJpbmdFbnVtLklOUFVUX0RST1BET1dOX0xBQkVMXS5pbmNsdWRlcyhcbiAgICAgICAgPElucHV0U3RyaW5nRW51bT50aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5kaXNhYmxlQ29uc2VjdXRpdmVseVNwYWNlcyhldmVudCk7XG4gICAgICB0aGlzLmRpc2FibGVDb25zZWN1dGl2ZWx5UG9pbnRzKGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVPbmVTcGFjZU9ubHkoZXZlbnQ6IGFueSkge1xuICAgIGlmIChcbiAgICAgIC9eXFxzKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpIHx8XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8uaW5jbHVkZXMoJyAnKVxuICAgICkge1xuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyKys7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5vbmVTcGFjZU9ubHlDb3VudGVyID4gMSAmJlxuICAgICAgL15cXHMqJC8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKSlcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVDb25zZWN1dGl2ZWx5U3BhY2VzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIC8vIEdldCBjdXJzb3IgcG9zaXRpb25cbiAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydCBhcyBudW1iZXI7XG5cbiAgICAvLyBJZiB0aGUgY3Vyc29yIGlzIGluIHRoZSBtaWRkbGUgb2YgYSB3b3JkLCBhbGxvdyBzcGFjZXNcbiAgICBpZiAoXG4gICAgICBjdXJzb3JQb3NpdGlvbiA+IDAgJiZcbiAgICAgICEvXFxzLy50ZXN0KGlucHV0RWxlbWVudC52YWx1ZVtjdXJzb3JQb3NpdGlvbiAtIDFdKSAmJlxuICAgICAgIS9cXHMvLnRlc3QoaW5wdXRFbGVtZW50LnZhbHVlW2N1cnNvclBvc2l0aW9uXSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgdXNlciBpcyB0eXBpbmcgYSBzcGFjZSBhbmQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBpcyBhIHNwYWNlLCBwcmV2ZW50IHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5ID09PSAnICcgJiZcbiAgICAgIC9cXHMvLnRlc3QoaW5wdXRFbGVtZW50LnZhbHVlW2N1cnNvclBvc2l0aW9uIC0gMV0pXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8vIFNhdmUgdGhlIGN1cnNvciBwb3NpdGlvbiBmb3IgdGhlIG5leHQgaW5wdXQgZXZlbnRcbiAgICB0aGlzLmxhc3RDdXJzb3JTcGFjZVBvc2l0aW9uID0gY3Vyc29yUG9zaXRpb247XG4gIH1cblxuICBwcml2YXRlIGRpc2FibGVDb25zZWN1dGl2ZWx5UG9pbnRzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB8IGJvb2xlYW4ge1xuICAgIGlmICgvXlsuXSokLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUpKSkge1xuICAgICAgdGhpcy5udW1iZXJPZkNvbnNlY3V0aXZlbHlQb2ludHMrKztcbiAgICAgIGlmICh0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA+IDEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVBvaW50cyA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNhYmxlTXVsdGlwbGVQb2ludHMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHwgYm9vbGVhbiB7XG4gICAgaWYgKC9eWy5dKiQvLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSkpKSB7XG4gICAgICBpZiAoIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlPy50b1N0cmluZygpLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzKys7XG4gICAgICBpZiAodGhpcy5udW1iZXJPZlBvaW50cyA+IDEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcbiAgICB9XG4gIH1cbiAgLy8gLS0tLS0tLSBlbmRcblxuICBwdWJsaWMgb25Db21tYW5kcyhldmVudDogRXZlbnQsIHR5cGU6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLlBNX0lOQ1JFTUVOVF9ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaGFuZGxlUG1JbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNUeXBlLklOQ1JFTUVOVF9ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuaGFuZGxlSW5jcmVtZW50RGVjcmVtZW50KGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzVHlwZS5DT05GSVJNX0NBTkNFTDpcbiAgICAgICAgdGhpcy5oYW5kbGVDb25maXJtQ2FuY2VsKGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzVHlwZS5NT05USFM6XG4gICAgICAgIHRoaXMuaGFuZGxlTW9udGhzKGFjdGlvbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbmNyZW1lbnREZWNyZW1lbnQoYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBcbiAgICBjbGVhclRpbWVvdXQodGhpcy5pbnB1dENvbW1hbmRzVGltZW91dCk7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5ERUNSRU1FTlQ6XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgKHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICAgICAgOiAwKSAtIDFcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uSU5DUkVNRU5UOlxuICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICAgICAgPyBwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSlcbiAgICAgICAgICAgIDogMCkgKyAxXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBtSW5jcmVtZW50RGVjcmVtZW50KGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnRUaG91c2FuU2VwSW5OdW1iZXIoXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkRFQ1JFTUVOVDpcbiAgICAgICAgdGhpcy5kZWNyZW1lbnRQbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uSU5DUkVNRU5UOlxuICAgICAgICB0aGlzLmluY3JlbWVudFBtVmFsdWUodmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5SRVNFVDpcbiAgICAgICAgdGhpcy5yZXNldFBtVmFsdWUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID49IDEwMDAwICYmIHZhbHVlIDwgMjAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAxMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDIwMDAxICYmIHZhbHVlIDwgNTAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSAzMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDUwMDAxICYmIHZhbHVlIDwgMTAwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlIC0gNTAwMClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSAtIDEwMDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgLSA1MDApXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50UG1WYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID4gMTAwMDAgJiYgdmFsdWUgPCAyMDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDEwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjAwMDEgJiYgdmFsdWUgPCA1MDAwMCkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgTWV0aG9kc0NhbGN1bGF0aW9uc0hlbHBlci5jb252ZXJ0TnVtYmVySW5UaG91c2FuZFNlcCh2YWx1ZSArIDMwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gNTAwMDEgJiYgdmFsdWUgPCAxMDAwMDApIHtcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgIE1ldGhvZHNDYWxjdWxhdGlvbnNIZWxwZXIuY29udmVydE51bWJlckluVGhvdXNhbmRTZXAodmFsdWUgKyA1MDAwKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDEwMDAwKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgMTAwMDApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKFxuICAgICAgICBNZXRob2RzQ2FsY3VsYXRpb25zSGVscGVyLmNvbnZlcnROdW1iZXJJblRob3VzYW5kU2VwKHZhbHVlICsgNTAwKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UG1WYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZz8uZGVmYXVsdFZhbHVlKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5wYXRjaFZhbHVlKHRoaXMuaW5wdXRDb25maWc/LmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDb25maXJtQ2FuY2VsKGFjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgSW5wdXRDb21tYW5kc0FjdGlvbi5DT05GSVJNOlxuICAgICAgICB0aGlzLmNvbmZpcm1Db21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJbnB1dENvbW1hbmRzQWN0aW9uLkNBTkNFTDpcbiAgICAgICAgdGhpcy5jYW5jZWxDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuc2V0SXNFZGl0SW5wdXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlybUNvbW1hbmQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb21tYW5kRXZlbnQoe1xuICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICBhY3Rpb246IElucHV0Q29tbWFuZHNBY3Rpb24uQ09ORklSTSxcbiAgICAgIG1vZGU6XG4gICAgICAgICF0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgJiZcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSAnSW5wdXQgRHJvcGRvd24gQmFuayBOYW1lJ1xuICAgICAgICAgID8gJ2VkaXQnXG4gICAgICAgICAgOiAnbmV3JyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQ29tbWFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7IGFjdGlvbjogSW5wdXRDb21tYW5kc0FjdGlvbi5DQU5DRUwgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1vbnRocyhhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmlucHV0Q29tbWFuZHNUaW1lb3V0KTtcblxuICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uTUlOVVM6XG4gICAgICAgIHRoaXMuZGVjcmVtZW50TW9udGgoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIElucHV0Q29tbWFuZHNBY3Rpb24uUExVUzpcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRNb250aCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA8IDEgfHxcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA+IDEyXG4gICAgKSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIGRlY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKSA9PT0gMSB8fFxuICAgICAgIXRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApIC0gMVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluY3JlbWVudE1vbnRoKCk6IHZvaWQge1xuICAgIGlmIChwYXJzZUludCh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSkgPT09IDEyKSB7XG4gICAgICB0aGlzLmJsdXJPbkNvbW1hbmRzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZVxuICAgICAgICA/IHBhcnNlSW50KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlKVxuICAgICAgICA6IDApICsgMVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cyhldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAvLyBEcm9wRG93biBMYWJlbFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uID0gSW5wdXRTdmdSb3V0ZXMuZHluYW1pY0ZvY3VzTGFiZWxTdmc7XG4gICAgfVxuXG4gICAgLy8gRGF0ZXBpY2tlclxuICAgIGlmICh0aGlzLmlzRGF0ZVRpbWVQaWNrZXIoKSAmJiAhdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEgJiZcbiAgICAgICAgICAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB8fFxuICAgICAgICAoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fFxuICAgICAgICBldmVudD8ucmVsYXRlZFRhcmdldCA9PT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucHJldmVudEJsdXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudDIudG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgLy8gRHJvcGRvd25cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duKSB7XG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKHRydWUpO1xuICAgICAgdGhpcy5zZXRTaG93SGlkZURyb3Bkb3duKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBDb21tYW5kc1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzICYmICF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLnR5cGUgPT09IElucHV0Q29tbWFuZHNUeXBlLk1PTlRIUykge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PVxuICAgICAgICAgIElucHV0Q29tbWFuZHNUeXBlLlBNX0lOQ1JFTUVOVF9ERUNSRU1FTlQgfHxcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcy50eXBlID09PSBJbnB1dENvbW1hbmRzVHlwZS5JTkNSRU1FTlRfREVDUkVNRU5UXG4gICAgICApIHtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25CbHVyKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIC8vIERyb3BEb3duIExhYmVsXG5cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsICYmICF0aGlzLmlzRWRpdElucHV0U3ViamVjdC52YWx1ZSlcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uID0gSW5wdXRTdmdSb3V0ZXMuZHluYW1pY0xhYmVsU3ZnO1xuXG4gICAgLy8gRWRpdCBJbnB1dFxuICAgIGlmICh0aGlzLmlzRWRpdElucHV0U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBEYXRlcGlja2VyO1xuICAgIGlmICh0aGlzLnByZXZlbnRCbHVyKSB7XG4gICAgICB0aGlzLnByZXZlbnRCbHVyID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQmFua1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgIElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uSU5QVVRfRFJPUERPV05fQkFOS19OQU1FXG4gICAgKVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gZmFsc2U7XG5cbiAgICAvLyBQcmljZSBTZXBhcmF0b3IgLSByZW1vdmUgZG90IG9uIGZvY3VzIG91dFxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IgJiZcbiAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlICYmXG4gICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8udG9TdHJpbmcoKS5pbmRleE9mKCcuJykgPj0gMFxuICAgICkge1xuICAgICAgLy8gNC4xLiBDaGVjayBmb3IgRG90IHBvc2l0aW9uXG4gICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnRvU3RyaW5nKCkuaW5kZXhPZignLicpO1xuXG4gICAgICBsZXQgaW50ZWdlclBhcnQgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgLnNsaWNlKDAsIHRoaXMuaGFzRGVjaW1hbEluZGV4KVxuICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmlucHV0Q29uZmlnLnByaWNlU2VwYXJhdG9yTGltaXRhdGlvbilcbiAgICAgICk7XG5cbiAgICAgIGxldCBkZWNpbWFsUGFydCA9IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLnNsaWNlKFxuICAgICAgICB0aGlzLmhhc0RlY2ltYWxJbmRleCArIDFcbiAgICAgICk7XG5cbiAgICAgIC8vIDQuNC4gR2V0IG9ubHkgdHdvIG51bWJlcnMgb2YgZGVjaW1hbCBwYXJ0XG4gICAgICBkZWNpbWFsUGFydCA9IGRlY2ltYWxQYXJ0LnNsaWNlKDAsIDIpO1xuXG4gICAgICBpZiAoIWRlY2ltYWxQYXJ0KSB7XG4gICAgICAgIHRoaXMuaGFzRGVjaW1hbEluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnBhdGNoVmFsdWUoaW50ZWdlclBhcnQpO1xuICAgICAgICB0aGlzLm51bWJlck9mUG9pbnRzID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEcm9wZG93blxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRHJvcGRvd24gfHwgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICBpZiAoXG4gICAgICAgICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIgfHxcbiAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09XG4gICAgICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRCkgJiZcbiAgICAgICAgIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZFxuICAgICAgKSB7XG4gICAgICAgIGlmICgoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm5vZGVOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIERhdGVwaWNrZXJcbiAgICAgICAgaWYgKHRoaXMuaXNEYXRlVGltZVBpY2tlcigpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0JsdXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ibHVyT25Ecm9wRG93bkFycm93KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE5vcm1hbCwgd2l0aG91dCBkcm9wZG93blxuICAgIGVsc2Uge1xuICAgICAgbGV0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICAgIC8vIElucHV0IENvbW1hbmRzXG4gICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcykgdGhpcy5ibHVyT25Db21tYW5kcygpO1xuXG4gICAgICAvLyBQYXNzd29yZFxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcudHlwZSA9PT0gJ3Bhc3N3b3JkJykgdGhpcy5ibHVyT25QYXNzd29yZCgpO1xuICAgICAgLy8gTm9ybWFsIGZvY3VzIG91dFxuICAgICAgZWxzZSB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRCbHVySW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5zZXRJc1RvdWNoZWRJbnB1dCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgYmx1ck9uQ29tbWFuZHMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dENvbW1hbmRzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyEuYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKGZhbHNlKTtcbiAgICAgIHRoaXMuaW5wdXRDb25maWcuYmxhY2tJbnB1dCA9IGZhbHNlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIHByaXZhdGUgYmx1ck9uRHJvcERvd25BcnJvdygpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcblxuICAgICAgdGhpcy5zZXRJc0Ryb3Bkb3duVG9nZ2xlcihmYWxzZSk7XG4gICAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICB0aGlzLnNldFNob3dIaWRlRHJvcGRvd24odGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBwdWJsaWMgYmx1ck9uUGFzc3dvcmQoKSB7XG4gICAgdGhpcy5wYXNzd29yZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxNTApO1xuICB9XG5cbiAgcHVibGljIHNldElucHV0Q3Vyc29yQXRUaGVFbmQoaW5wdXQ6IGFueSwgdGltZTogbnVtYmVyID0gMTIwKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gaW5wdXQuc2VsZWN0aW9uRW5kO1xuICAgIGlmIChpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uRW5kLCBzZWxlY3Rpb25FbmQpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgfSwgdGltZSk7XG4gIH1cblxuICBwdWJsaWMgb25FZGl0SW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMuc2V0SXNFZGl0SW5wdXQodHJ1ZSk7XG4gICAgdGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsTmV3ID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmJsdWVJbnB1dCkgdGhpcy5pbnB1dENvbmZpZy5ibGFja0lucHV0ID0gdHJ1ZTtcbiAgICB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHModHJ1ZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG5cbiAgICB0aGlzLnNldElucHV0Q3Vyc29yQXRUaGVFbmQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcblxuICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgIGRhdGE6IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLFxuICAgICAgYWN0aW9uOiAnRWRpdCBJbnB1dCcsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0Vmlld0NoaWxkcyhcbiAgICBzcGFuT25lOiBFbGVtZW50UmVmLFxuICAgIHNwYW5Ud286IEVsZW1lbnRSZWYsXG4gICAgc3BhblRocmVlOiBFbGVtZW50UmVmLFxuICAgIGhvbGRlcjE6IEVsZW1lbnRSZWZcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5zcGFuT25lID0gc3Bhbk9uZTtcbiAgICB0aGlzLnNwYW5Ud28gPSBzcGFuVHdvO1xuICAgIHRoaXMuc3BhblRocmVlID0gc3BhblRocmVlO1xuICAgIHRoaXMuaG9sZGVyMSA9IGhvbGRlcjE7XG4gIH1cblxuICBwdWJsaWMgc2V0Vmlld0NoaWxkc1BvcG92ZXIoXG4gICAgdDI6IE5nYlBvcG92ZXIsXG4gICAgbmdiTWFpblBvcG92ZXI6IE5nYlBvcG92ZXJcbiAgKTogdm9pZCB7XG4gICAgdGhpcy50MiA9IHQyO1xuICAgIHRoaXMubmdiTWFpblBvcG92ZXIgPSBuZ2JNYWluUG9wb3ZlcjtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVEcm9wZG93bk9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKVxuICAgICAgaWYgKHRoaXMudDIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnQyLmlzT3BlbigpKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLnQyLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICB0aGlzLnNldElzRHJvcGRvd25Ub2dnbGVyKCF0aGlzLmlzRHJvcGRvd25Ub2dnbGVyU3ViamVjdC52YWx1ZSk7XG5cbiAgICB0aGlzLnNldFNob3dIaWRlRHJvcGRvd24odGhpcy5pc0Ryb3Bkb3duVG9nZ2xlclN1YmplY3QudmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNEcm9wZG93blRvZ2dsZXJTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblBsYWNlaG9sZGVySWNvbkV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaXNFZGl0SW5wdXRTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLnNldENvbW1hbmRFdmVudCh7XG4gICAgICAgIGRhdGE6IHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLFxuICAgICAgICBhY3Rpb246ICdUb2dnbGUgRHJvcGRvd24nLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Q29tbWFuZEV2ZW50KHtcbiAgICAgICAgZGF0YTogdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUsXG4gICAgICAgIGFjdGlvbjogJ1BsYWNlaG9sZGVyIEljb24gRXZlbnQnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSW5wdXRDb25maWdDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gUHJpY2UgU2VwYXJhdG9yXG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3IpIHtcbiAgICAgIHRoaXMub3JpZ2luUHJpY2VTZXBhcmF0b3JMaW1pdCA9XG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcucHJpY2VTZXBhcmF0b3JMaW1pdGF0aW9uO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbSBSYW5nZVxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzVXNpbmdDdXN0b21QZXJpb2RSYW5nZSkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuaXNEaXNwbGF5aW5nQ3VzdG9tUGVyaW9kUmFuZ2UpXG4gICAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgICAgZWxzZSB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gRGF0ZVBpY2tlclxuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUiB8fFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZFxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGUpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KGRhdGUpO1xuICAgICAgICAgICAgdGhpcy50Mi5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gV2hlbiBhZGQgbW9kZSBpbiBkcm9wZG93blxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzPy5hY3RpdmUgJiYgIXRoaXMuaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMudHlwZSA9PT0gJ2NvbmZpcm0tY2FuY2VsJykge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuYmx1ZUlucHV0KSB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldElzVmlzaWJsZUNvbW1hbmRzKHRydWUpO1xuICAgICAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudCkgdGhpcy5zZXRJc0NhcHNMb2NrT24oZXZlbnQ/LmdldE1vZGlmaWVyU3RhdGU/LignQ2Fwc0xvY2snKSk7XG5cbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5wcmljZVNlcGFyYXRvcikge1xuICAgICAgY29uc3QgdmFsdWVUb1N0cmluZyA9IFN0cmluZyh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSk7XG5cbiAgICAgIHRoaXMuaXNEb3REZWxldGVkID0gdmFsdWVUb1N0cmluZz8uaW5jbHVkZXMoJy4nKTtcbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIGZvciBwaG9uZSBmaWVsZCBmaXJzdCBjaGFyYWN0ZXIgdG8gYmUgMFxuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gSW5wdXRTdHJpbmdFbnVtLlBIT05FKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiZcbiAgICAgICAgZXZlbnQua2V5ID09PSAnMCdcbiAgICAgICkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICB0aGlzLnNldERyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgIGRhdGE6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25LZXl1cChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zZXRJc0NhcHNMb2NrT24oZXZlbnQ/LmdldE1vZGlmaWVyU3RhdGU/LignQ2Fwc0xvY2snKSk7XG4gICAgfVxuICAgIC8vIFJlc2V0IGZ1bmN0aW9uIHByb3BlcnR5IGZvciBkaXNhYmxpbmcgbXVsdGlwbGUgZG90c1xuICAgIGNvbnN0IHZhbHVlVG9TdHJpbmcgPSBTdHJpbmcodGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8udmFsdWUpO1xuXG4gICAgaWYgKHRoaXMuaXNEb3REZWxldGVkICYmICF2YWx1ZVRvU3RyaW5nPy5pbmNsdWRlcygnLicpKVxuICAgICAgdGhpcy5udW1iZXJPZlBvaW50cyA9IDA7XG5cbiAgICBpZiAoXG4gICAgICBldmVudC5rZXlDb2RlID09IDggJiZcbiAgICAgICEodGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duIHx8IHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbClcbiAgICApIHtcbiAgICAgIC8vIFJlc2V0IE11bHRpcGxlIENvbnNlY3V0aXZlbHkgU3BhY2VzXG4gICAgICB0aGlzLm51bWJlck9mQ29uc2VjdXRpdmVseVNwYWNlcyA9IDA7XG5cbiAgICAgIC8vIFJlc2V0IE9uZSBTcGFjZSBPbmx5XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlICYmXG4gICAgICAgICF0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZT8uaW5jbHVkZXMoJyAnKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub25lU3BhY2VPbmx5Q291bnRlciA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5pc0Ryb3Bkb3duIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5BRERSRVNTXG4gICAgKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gNDAgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogdGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5BRERSRVNTKSB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIHRoaXMuc2V0SXNWaXNpYmxlQ29tbWFuZHMoZmFsc2UpO1xuICAgICAgICB0aGlzLm9uQmx1cigpO1xuICAgICAgICB0aGlzLmJsdXJPbkRyb3BEb3duQXJyb3coKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgdGhpcy5zZXREcm9wRG93bktleU5hdmlnYXRpb24oe1xuICAgICAgICAgIGtleUNvZGU6IGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gOSkge1xuICAgICAgICB0aGlzLm9uRm9jdXMoKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2V0RHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAgICBrZXlDb2RlOiBldmVudC5rZXlDb2RlLFxuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGF0ZSAmIFRpbWUgUGlja2VyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIHNldFRpbWVQaWNrZXJUaW1lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIpXG4gICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICBtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArXG4gICAgICAgICAgICAodGhpcy5pbnB1dENvbmZpZz8uaXNGcm9tRGF0ZSA/ICcgMTI6MTUnIDogJyAxMjowMCcpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0VGltZURhdGVJbnB1dChkYXRlOiBJbnB1dENoYW5nZVZhbHVlKTogdm9pZCB7XG4gICAgbGV0IHRleHQsIGRhdGVGb3JtYXQsIHRpbWVGb3JtYXQ7XG4gICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdNTS9ERC9ZWScpO1xuICAgICAgZGF0ZUZvcm1hdCA9IHRleHQuc3BsaXQoJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9XG4gICAgICAgIGRhdGUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgPyBkYXRlXG4gICAgICAgICAgOiBuZXcgRGF0ZShtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArICcgJyArIGRhdGUpO1xuICAgICAgdGV4dCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdISDptbScpO1xuXG4gICAgICB0aW1lRm9ybWF0ID0gbW9tZW50KG5ldyBEYXRlKGRhdGUpKS5mb3JtYXQoJ2hoL21tL0EnKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0aW1lRm9ybWF0LnNwbGl0KCcvJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGV4dDtcbiAgICB0aGlzLnNldE9uQ2hhbmdlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuXG4gICAgaWYgKHRoaXMuc3Bhbk9uZSkgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFswXTtcblxuICAgIGlmICh0aGlzLnNwYW5Ud28pXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzFdO1xuICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzJdO1xuICAgICAgfVxuXG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShuZXcgRGF0ZShkYXRlKSk7XG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RGF0ZVRpbWVJbnB1dHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Bhbk9uZSlcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVJcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnTU0nO1xuICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdBTSc7XG4gICAgICB9XG5cbiAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdGlvbkNoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHRoaXMuaW5wdXRTZWxlY3Rpb24gPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIG9uRGF0ZVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBwYXN0ZVRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHBhc3RlZERhdGUgPSBuZXcgRGF0ZShwYXN0ZVRleHQpO1xuICAgIGlmICghaXNOYU4ocGFzdGVkRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQocGFzdGVkRGF0ZSk7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZXZlbnQ6IHtcbiAgICBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgdGFyZ2V0OiBhbnk7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuXG4gICAgY29uc3Qgc2VsZWN0aW9uSW5wdXQgPSBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG5cbiAgICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gJiYgY3VycmVudFNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDEwKSB7XG4gICAgICB0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYWluJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSBzZWxlY3Rpb25JbnB1dDtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihlbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U3BhblNlbGVjdGlvbihlbGVtZW50OiBOb2RlKTogdm9pZCB7XG4gICAgbGV0IHJhbmdlOiBSYW5nZTtcbiAgICBsZXQgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsO1xuXG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvd0RhdGVUaW1lUGxhY2Vob2xkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KHRydWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcblxuICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VTZWxlY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIG5vUHJldmVudERlZmF1bHQgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmF2aWdhdGlvbktleSA9IHRoaXMuaXNOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICBjb25zdCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5ID1cbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDMgJiZcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUjtcblxuICAgIGlmIChpc05hdmlnYXRpb25LZXkgfHwgaXNTcGVjaWFsVGltZVBpY2tlcktleSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuaGFuZGxlTmF2aWdhdGlvbktleShldmVudCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc051bWJlcihldmVudCkpIHtcbiAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoIW5vUHJldmVudERlZmF1bHQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcblxuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTmF2aWdhdGlvbktleShlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmF2aWdhdGlvbktleXMgPSBbMzcsIDM4LCAzOSwgNDAsIDgsIDksIDQ2XTsgLy8gQXJyb3cga2V5cywgQmFja3NwYWNlLCBUYWIsIERlbGV0ZVxuICAgIHJldHVybiBuYXZpZ2F0aW9uS2V5cy5pbmNsdWRlcyhlLmtleUNvZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIDM3OiAvLyBMZWZ0IGFycm93XG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbkxlZnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM5OiAvLyBSaWdodCBhcnJvd1xuICAgICAgY2FzZSA5OiAvLyBUYWJcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzODogLy8gVXAgYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCd1cCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDA6IC8vIERvd24gYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OiAvLyBCYWNrc3BhY2VcbiAgICAgIGNhc2UgNDY6IC8vIERlbGV0ZVxuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50LCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uTGVmdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNEYXRlcGlja2VyQmFua0NhcmQgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcbiAgICBjb25zdCBtYXhJbmRleCA9IGlzRGF0ZXBpY2tlckJhbmtDYXJkID8gMSA6IDI7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA8IG1heEluZGV4ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICs9IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSA5ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dElucHV0KCk7XG4gICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PT0gOSkge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzTmV4dElucHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgKGlucHV0KSA9PiBpbnB1dCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50XG4gICAgKTtcblxuICAgIGlmIChhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0pIGFsbElucHV0c1tjdXJyZW50SW5kZXggKyAxXS5mb2N1cygpO1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNQcmV2aW91c0lucHV0KCk6IHZvaWQge1xuICAgIGNvbnN0IGFsbElucHV0cyA9IEFycmF5LmZyb20oXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dC5pbnB1dC1jb250cm9sJylcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnRbXTtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgKGlucHV0KSA9PiBpbnB1dCA9PT0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50XG4gICAgKTtcblxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMztcbiAgICBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IDApIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCAtPSAxO1xuICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudEluZGV4ID4gMCkgYWxsSW5wdXRzW2N1cnJlbnRJbmRleCAtIDFdLmZvY3VzKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZTogS2V5Ym9hcmRFdmVudCwgaXNSZXN0YXJ0PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHNwYW5PbmVWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHwgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuICAgIGNvbnN0IHNwYW5Ud29WYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgfHwgdGhpcy5uZXdJbnB1dENoYW5nZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBwYXJzZUludCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgbGV0IHNwYW5UaHJlZVZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgIT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICBzcGFuVGhyZWVWYWx1ZSA9XG4gICAgICAgIGlzTmFOKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSB8fCB0aGlzLm5ld0lucHV0Q2hhbmdlZFxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHBhcnNlSW50KHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKTtcbiAgICB9XG5cbiAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZXQgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHNwYW5Ud29WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3BhblR3b1ZhbHVlfSR7ZS5rZXl9YCk7XG4gICAgICAgICAgaWYgKGZpbmFsX3ZhbHVlID4gMzEpIHtcbiAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgJzAnICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICghZmluYWxfdmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ2RkJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHBhcnNlSW50KGUua2V5KSlcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldERhdGUocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoXG4gICAgICAgICAgICAtMlxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMzEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhblRocmVlVmFsdWUgfHwgc3BhblRocmVlVmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICcwJyArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQoYDIwMCR7cGFyc2VJbnQoZS5rZXkpfWApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZpbmFsU2hvd1llYXIgPVxuICAgICAgICAgICAgZmluYWxZZWFyID4gMzFcbiAgICAgICAgICAgICAgPyBwYXJzZUludChgMTkke2ZpbmFsWWVhcn1gKVxuICAgICAgICAgICAgICA6IHBhcnNlSW50KGAyMCR7ZmluYWxZZWFyfWApO1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RnVsbFllYXIoZmluYWxTaG93WWVhcilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICB0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbklucHV0KSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgICAnMCcgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICAgICAgICAgICkgLSAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgICBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICAgICAgICAgIHBhcnNlSW50KGUua2V5KSAtIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGZpbmFsX3ZhbHVlO1xuXG4gICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1Jlc3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNwYW5Ud29WYWx1ZSB8fCBzcGFuVHdvVmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZShcbiAgICAgICAgICAgIC0yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmluYWxZZWFyID0gcGFyc2VJbnQoXG4gICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgICAgICAgIG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0U3BhbkJ5VGFiSW5kZXgoaW5keDogbnVtYmVyLCBjaGFuZ2VUYWI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgc3dpdGNoIChpbmR4KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZVRhYikgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXRlVGltZU1vZGVsKGRpcmVjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xKSB0aGlzLnNlbGVjdGlvbklucHV0ID0gMDtcblxuICAgIGNvbnN0IGlzVXAgPSBkaXJlY3Rpb24gPT09ICd1cCc7XG4gICAgY29uc3QgaXNEYXRlUGlja2VyID1cbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUjtcbiAgICBjb25zdCBpc0JhbmtDYXJkUGlja2VyID1cbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkQ7XG5cbiAgICBpZiAoaXNEYXRlUGlja2VyIHx8IGlzQmFua0NhcmRQaWNrZXIpXG4gICAgICB0aGlzLmhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICAgIGVsc2UgdGhpcy5oYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURhdGVQaWNrZXJJbnB1dChpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkgdGhpcy51cGRhdGVNb250aChpc1VwKTtcbiAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAxKSB0aGlzLnVwZGF0ZURhdGUoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICBlbHNlIHRoaXMudXBkYXRlWWVhcihpc1VwLCBpc0RhdGVQaWNrZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZUhvdXJzKGlzVXApO1xuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlTWludXRlcyhpc1VwKTtcbiAgICBlbHNlIHRoaXMudG9nZ2xlQU1QTSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGhEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRNb250aChcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNb250aCgpICsgbW9udGhEZWx0YVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNb250aCgpICsgMVxuICAgICk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZShpc1VwOiBib29sZWFuLCBpc0RhdGVQaWNrZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0RGF0ZShcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXREYXRlKCkgKyBkYXRlRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgPyB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudFxuICAgICAgOiB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudDtcbiAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oc3BhbkVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVZZWFyKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHllYXJEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRGdWxsWWVhcihcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRGdWxsWWVhcigpICsgeWVhckRlbHRhXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBpc0RhdGVQaWNrZXJcbiAgICAgID8gdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudFxuICAgICAgOiB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudDtcbiAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZVxuICAgICAgLmdldEZ1bGxZZWFyKClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAuc2xpY2UoLTIpO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhvdXJzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBob3Vyc0RlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICBsZXQgc2VsZWN0ZWRIb3VycyA9XG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRIb3VycygpICsgaG91cnNEZWx0YTtcblxuICAgIGlmIChzZWxlY3RlZEhvdXJzID09PSAwKSBzZWxlY3RlZEhvdXJzID0gMjQ7XG4gICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IC0xKSBzZWxlY3RlZEhvdXJzID0gMjM7XG5cbiAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKFxuICAgICAgbmV3IERhdGUodGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0SG91cnMoc2VsZWN0ZWRIb3VycykpXG4gICAgKTtcblxuICAgIHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICBzZWxlY3RlZEhvdXJzID4gMTIgPyBzZWxlY3RlZEhvdXJzIC0gMTIgOiBzZWxlY3RlZEhvdXJzXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgc2VsZWN0ZWRIb3VycyA+IDExICYmIHNlbGVjdGVkSG91cnMgPCAyNCA/ICdQTScgOiAnQU0nO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaW51dGVzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtaW51dGVzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuc2V0RGF0ZVRpbWVJbnB1dERhdGUoXG4gICAgICBuZXcgRGF0ZShcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuc2V0TWludXRlcyhcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRNaW51dGVzKCkgKyBtaW51dGVzRGVsdGFcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLnBhZFZhbHVlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWUuZ2V0TWludXRlcygpXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVBTVBNKCk6IHZvaWQge1xuICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID1cbiAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gJ1BNJyA6ICdBTSc7XG5cbiAgICBjb25zdCBob3Vyc1RvQWRkID1cbiAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gLTEyIDogMTI7XG4gICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShcbiAgICAgIG5ldyBEYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5zZXRIb3VycyhcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZS5nZXRIb3VycygpICsgaG91cnNUb0FkZFxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5UaHJlZS5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFkVmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc051bWJlcihldnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICBldnQgPSBldnQgPyBldnQgOiAod2luZG93LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpO1xuICAgIGxldCBjaGFyQ29kZSA9IGV2dC53aGljaCA/IGV2dC53aGljaCA6IGV2dC5rZXlDb2RlO1xuICAgIHJldHVybiAoXG4gICAgICAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHx8IChjaGFyQ29kZSA+PSA5NiAmJiBjaGFyQ29kZSA8PSAxMDUpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJTaG93bigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQodHJ1ZSk7XG4gICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUG9wb3ZlckhpZGRlbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5ibHVyT25EYXRlVGltZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYmx1ck9uRGF0ZVRpbWUoKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgIHRoaXMuZGF0ZVRpbWVNYWluVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5PbmU/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5Ud28/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW5UaHJlZT8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuaXNGdXR1cmVEYXRlRGlzYWJsZWQgJiZcbiAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZSkuaXNBZnRlcihtb21lbnQoKSlcbiAgICAgICAgICApXG4gICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlU3ViamVjdC52YWx1ZSkuaXNCZWZvcmUobW9tZW50KCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHsgaW52YWxpZDogdHJ1ZSB9KTsgLy8gZG9uJ3QgYWNjZXB0IGV4cGlyZWQgZGF0ZXNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZVN1YmplY3QudmFsdWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuT25lLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLnNldERhdGVUaW1lSW5wdXREYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlucHV0Q29uZmlnLmV4cGlyZWREYXRlSW52YWxpZCAmJlxuICAgICAgICAgICAgbW9tZW50KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7IGludmFsaWQ6IHRydWUgfSk7IC8vIGRvbid0IGFjY2VwdCBleHBpcmVkIGRhdGVzXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJTZXJ2aWNlLmRhdGVDaGFuZ2VkLm5leHQoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGVTdWJqZWN0LnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZXREYXRlVGltZUlucHV0RGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgICB0aGlzLnNldFNob3dEYXRlSW5wdXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3Bhbk9uZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KFxuICAgICAgICAgIC8vICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAgICAgLy8gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW5PbmUubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgIHRoaXMuc3BhblR3by5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdNTSc7XG4gICAgICAgICAgdGhpcy5zZXRUaW1lUGlja2VyVGltZSgpO1xuICAgICAgICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLndob2xlSW5wdXRTZWxlY3Rpb24pO1xuICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgdGhpcy5zZXRTaG93RGF0ZUlucHV0KHRydWUpO1xuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dCh0cnVlKTtcblxuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uICYmIGRvY3VtZW50LmNyZWF0ZVJhbmdlKSB7XG4gICAgICBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lQWZ0ZXJNb3VzZVVwKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgdGhpcy5zcGFuVHdvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW5Ud28ubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgdGhpcy5zcGFuVGhyZWUubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhblRocmVlLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2hvd0RhdGVJbnB1dCh0cnVlKTtcbiAgICB0aGlzLnRpbWVvdXRDbGVhbmVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgIH0sIDkwKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXRlVGltZVBpY2tlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSIHx8XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uVElNRV9QSUNLRVIgfHxcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRGVzdG9yeSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==