valtech-components 4.0.204 → 4.0.206

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 (31) hide show
  1. package/esm2022/lib/components/molecules/load-more/load-more.component.mjs +11 -7
  2. package/esm2022/lib/components/molecules/reaction-bar/reaction-bar.component.mjs +326 -0
  3. package/esm2022/lib/components/molecules/reaction-bar/types.mjs +2 -0
  4. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +4 -1
  5. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +79 -5
  6. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.i18n.mjs +5 -1
  7. package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +3 -3
  8. package/esm2022/lib/services/auth/org-switch.service.mjs +11 -1
  9. package/esm2022/lib/services/reactions/config.mjs +22 -0
  10. package/esm2022/lib/services/reactions/index.mjs +3 -0
  11. package/esm2022/lib/services/reactions/reactions.service.mjs +89 -0
  12. package/esm2022/lib/services/reactions/types.mjs +2 -0
  13. package/esm2022/public-api.mjs +5 -3
  14. package/fesm2022/valtech-components.mjs +533 -68
  15. package/fesm2022/valtech-components.mjs.map +1 -1
  16. package/lib/components/molecules/reaction-bar/reaction-bar.component.d.ts +44 -0
  17. package/lib/components/molecules/reaction-bar/types.d.ts +55 -0
  18. package/lib/components/organisms/organization-view/organization-view.component.d.ts +1 -0
  19. package/lib/components/organisms/switch-org-modal/switch-org-modal.component.d.ts +5 -1
  20. package/lib/services/auth/org-switch.service.d.ts +9 -0
  21. package/lib/services/reactions/config.d.ts +20 -0
  22. package/lib/services/reactions/index.d.ts +3 -0
  23. package/lib/services/reactions/reactions.service.d.ts +42 -0
  24. package/lib/services/reactions/types.d.ts +48 -0
  25. package/package.json +1 -1
  26. package/public-api.d.ts +3 -2
  27. package/esm2022/lib/services/pdf/pdf.service.mjs +0 -59
  28. package/esm2022/lib/services/pdf/types.mjs +0 -2
  29. package/lib/services/pdf/pdf.service.d.ts +0 -27
  30. package/lib/services/pdf/types.d.ts +0 -31
  31. package/src/lib/services/firebase/firebase-messaging-sw.js +0 -145
@@ -18,6 +18,7 @@ import { ComponentStates } from '../../types';
18
18
  import { SectionHeaderComponent } from '../../molecules/section-header/section-header.component';
19
19
  import { HasPermissionDirective } from '../../../directives/has-permission.directive';
20
20
  import { AuthService } from '../../../services/auth/auth.service';
21
+ import { OrgSwitchService } from '../../../services/auth/org-switch.service';
21
22
  import { I18nService } from '../../../services/i18n';
22
23
  import { interpretError } from '../../../services/errors/interpret-error';
23
24
  import { ModalService } from '../../../services/modal/modal.service';
@@ -80,6 +81,7 @@ export class OrganizationViewComponent {
80
81
  this.nav = inject(NavigationService);
81
82
  this.i18n = inject(I18nService);
82
83
  this.auth = inject(AuthService);
84
+ this.orgSwitch = inject(OrgSwitchService);
83
85
  this.orgService = inject(OrgService);
84
86
  this.toast = inject(ToastService);
85
87
  this.errors = inject(ValtechErrorService);
@@ -333,6 +335,7 @@ export class OrganizationViewComponent {
333
335
  org: this.org(),
334
336
  onSuccess: (updated) => {
335
337
  this.org.set(updated);
338
+ this.orgSwitch.notifyOrgDataUpdated(updated);
336
339
  this.resolvedConfig().onOrgEdited?.();
337
340
  },
338
341
  },
@@ -1355,4 +1358,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
1355
1358
  }], ctorParameters: () => [], propDecorators: { config: [{
1356
1359
  type: Input
1357
1360
  }] } });
1358
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9vcmdhbml6YXRpb24tdmlldy9vcmdhbml6YXRpb24tdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlUVDt3REFpTlEsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBpc0Rldk1vZGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpcmVzdG9yZSwgZG9jLCBnZXREb2MgfSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IHdhcm5pbmdPdXRsaW5lLCBzd2FwSG9yaXpvbnRhbE91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEN0YUNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY3RhLWNhcmQvY3RhLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVFcnJvclN0YXRlUHJvcHMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeSc7XG5pbXBvcnQgeyBNZW1iZXJDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL21lbWJlci1jYXJkL21lbWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTZWN0aW9uSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlY3Rpb24taGVhZGVyL3NlY3Rpb24taGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWN0aW9uSGVhZGVyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VjdGlvbi1oZWFkZXIvdHlwZXMnO1xuaW1wb3J0IHsgQnV0dG9uR3JvdXBNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvdHlwZXMnO1xuXG5pbXBvcnQgeyBIYXNQZXJtaXNzaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9oYXMtcGVybWlzc2lvbi5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBpbnRlcnByZXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy9pbnRlcnByZXQtZXJyb3InO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvb3JnLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgT3JnTWVtYmVyLFxuICBPcmdSb2xlLFxuICBPcmdhbml6YXRpb24sXG4gIHJlc29sdmVSb2xlTGFiZWxGcm9tTGlzdCxcbiAgU1lTVEVNX1JPTEVfREVGQVVMVFMsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy90eXBlcyc7XG5pbXBvcnQgeyBjb25uZWN0UGFnZVJlZnJlc2ggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wYWdlLXJlZnJlc2gvcGFnZS1yZWZyZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL3ZhbHRlY2gtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBDcmVhdGVPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS1vcmctbW9kYWwvY3JlYXRlLW9yZy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWRpdE9yZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vZWRpdC1vcmctbW9kYWwvZWRpdC1vcmctbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IEludml0ZU1lbWJlck1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vaW52aXRlLW1lbWJlci1tb2RhbC9pbnZpdGUtbWVtYmVyLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW1iZXJEZXRhaWxNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21lbWJlci1kZXRhaWwtbW9kYWwvbWVtYmVyLWRldGFpbC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVtYmVyRGV0YWlsIH0gZnJvbSAnLi4vbWVtYmVyLWRldGFpbC1tb2RhbC90eXBlcyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vcGVybWlzc2lvbnMtdmlldy9wZXJtaXNzaW9ucy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNmZXJPd25lcnNoaXBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3RyYW5zZmVyLW93bmVyc2hpcC1tb2RhbC90cmFuc2Zlci1vd25lcnNoaXAtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVtYmVyLWltcG9ydC1tb2RhbC9tZW1iZXItaW1wb3J0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdJbmZvU2hlZXRDb21wb25lbnQgfSBmcm9tICcuLi9vcmctaW5mby1zaGVldC9vcmctaW5mby1zaGVldC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3dpdGNoT3JnTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9zd2l0Y2gtb3JnLW1vZGFsL3N3aXRjaC1vcmctbW9kYWwuY29tcG9uZW50JztcblxuaW1wb3J0IHsgT3JnYW5pemF0aW9uVmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgT1JHQU5JWkFUSU9OX1ZJRVdfSTE4TiB9IGZyb20gJy4vb3JnYW5pemF0aW9uLXZpZXcuaTE4bic7XG5cbmFkZEljb25zKHsgd2FybmluZ091dGxpbmUsIHN3YXBIb3Jpem9udGFsT3V0bGluZSB9KTtcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuT3JnYW5pemF0aW9uJztcbmNvbnN0IERFRkFVTFRfVklFV19QRVJNSVNTSU9OU19ST1VURSA9ICcvYXBwL3NldHRpbmdzL3Blcm1pc3Npb25zJztcbmNvbnN0IERFRkFVTFRfQVBJX0tFWVNfUk9VVEUgPSAnL2FwcC9zZXR0aW5ncy9hcGkta2V5cyc7XG5jb25zdCBERUZBVUxUX0xFQVZFX1JFRElSRUNUX1JPVVRFID0gJy9hcHAvc2V0dGluZ3MvYWNjb3VudCc7XG5cbi8qKlxuICogYHZhbC1vcmdhbml6YXRpb24tdmlld2Ag4oCUIHZpc3RhIEdlc3Rpw7NuIGRlIG9yZ2FuaXphY2nDs24gZnVsbC1mZWF0dXJlXG4gKiBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZVxuICogQURSLTAyMS4gUmXDum5lOlxuICogIC0gKipJbmZvcm1hY2nDs24qKiDigJQgbm9tYnJlLCBkZXNjcmlwY2nDs24sIHBsYW4geSB0aXBvIGRlIGxhIG9yZyBhY3RpdmE7IGVkaXRhclxuICogICAgdsOtYSBtb2RhbCBgdmFsLWVkaXQtb3JnLW1vZGFsYCAoc29sbyBzaSBgY2FuRWRpdE9yZygpYCkuXG4gKiAgLSAqKk1pZW1icm9zKiog4oCUIGxpc3RhIHBhZ2luYWRhIChgdmFsLW1lbWJlci1jYXJkYCkgZW5yaXF1ZWNpZGEgY29uIHBlcmZpbGVzXG4gKiAgICBww7pibGljb3MgKEZpcmVzdG9yZSk7IHZlciBkZXRhbGxlIHbDrWEgYHZhbC1tZW1iZXItZGV0YWlsLW1vZGFsYC5cbiAqICAtICoqUm9sZXMgeSBwZXJtaXNvcyoqIOKAlCBzZWNjacOzbiBleHBsaWNhdGl2YSBjb24gQ1RBIGEgbGEgcnV0YSBkZSBwZXJtaXNvcy5cbiAqICAtICoqSW52aXRhcioqIOKAlCBDVEEgcXVlIGFicmUgYHZhbC1pbnZpdGUtbWVtYmVyLW1vZGFsYCAoZ2F0ZWFkYSBwb3IgYHVzZXJzOipgKS5cbiAqICAtICoqVHJhbnNmZXJpciBwcm9waWVkYWQqKiDigJQgYHZhbC10cmFuc2Zlci1vd25lcnNoaXAtbW9kYWxgIChzb2xvIG93bmVyKS5cbiAqICAtICoqU2FsaXIgZGUgbGEgb3JnYW5pemFjacOzbioqIOKAlCBgT3JnU2VydmljZS5sZWF2ZU9yZ2AgY29uIGNvbmZpcm1hY2nDs25cbiAqICAgIGRlc3RydWN0aXZhLlxuICpcbiAqICoqUkJBQyBpbnRlcm5vKiogKGRlY2lzacOzbiBDVE8sIEFEUi0wMjEpOiBlbCBnYXRpbmcgZmlubyBzZSByZXN1ZWx2ZSBkZW50cm8gZGVcbiAqIGxhIHZpc3RhIHbDrWEgYEF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24oKWAgKyBgKnZhbEhhc1Blcm1pc3Npb25gICsgY29tcHV0ZWRzXG4gKiBgaXNPd25lcigpYC9gY2FuTWFuYWdlTWVtYmVycygpYC9gY2FuRWRpdE9yZygpYC4gTk8gc2UgZXhwb25lIGNvbW8gY29uZmlnLlxuICpcbiAqICoqQXV0by1yZWxvYWQgZW4gb3JnLXN3aXRjaCoqOiB1biBgZWZmZWN0YCByZWFjdGlvbmEgYSBgYWN0aXZlT3JnSWQoKWAgeSByZWNhcmdhXG4gKiBvcmcgKyBtaWVtYnJvcyBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZGUgb3JnYW5pemFjacOzbiBhY3RpdmEgbWllbnRyYXMgbGEgdmlzdGFcbiAqIGVzdMOhIG1vbnRhZGEuIEVsIGVmZmVjdCBjdWJyZSB0YW1iacOpbiBsYSBjYXJnYSBpbmljaWFsIChzaW4gZG9ibGUgY2FyZ2EpLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCBzb2xvIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhIGRlIGNvbmZpZyAobm8tb3BcbiAqIGVtYmViaWRvKS4gQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsXG4gKiBuYW1lc3BhY2UgKGRlZmF1bHQgYFNldHRpbmdzLk9yZ2FuaXphdGlvbmApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtb3JnYW5pemF0aW9uLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ3JlYXRlT3JnTW9kYWxDb21wb25lbnQsXG4gICAgQ3RhQ2FyZENvbXBvbmVudCxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgSGFzUGVybWlzc2lvbkRpcmVjdGl2ZSxcbiAgICBJb25JY29uLFxuICAgIFNrZWxldG9uTGF5b3V0Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRDb21wb25lbnQsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIE1lbWJlckNhcmRDb21wb25lbnQsXG4gICAgUGVybWlzc2lvbnNNb2RhbENvbXBvbmVudCxcbiAgICBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgIE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50LFxuICAgIE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICBTZWN0aW9uSGVhZGVyQ29tcG9uZW50LFxuICAgIFN3aXRjaE9yZ01vZGFsQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwYWdlXCI+XG4gICAgICA8aGVhZGVyIGNsYXNzPVwicGFnZS1oZWFkZXJcIj5cbiAgICAgICAgPHZhbC1zZWN0aW9uLWhlYWRlciBbcHJvcHNdPVwic3dpdGNoT3JnU2VjdGlvblByb3BzKClcIiAoYWN0aW9uQ2xpY2spPVwib25IZWFkZXJBY3Rpb24oJGV2ZW50KVwiIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dJbmZvKSB7XG4gICAgICAgIDwhLS0gT3JnIEluZm8gLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2luZm9UaXRsZScpLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBAaWYgKGNhbkVkaXRPcmcoKSkge1xuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwiZWRpdEJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25FZGl0KClcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnbGlzdCcsIHJvd3M6IDQgfVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChvcmdFcnJvclN0YXRlKCkpIHtcbiAgICAgICAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwib3JnRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmIChvcmcoKTsgYXMgbykge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKG8ubG9nb1VybCAmJiAhbG9nb0ZhaWxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1sb2dvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm9yZy1sb2dvLWltZ1wiIFtzcmNdPVwiby5sb2dvVXJsXCIgW2FsdF09XCJvLm5hbWVcIiAoZXJyb3IpPVwibG9nb0ZhaWxlZC5zZXQodHJ1ZSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9OYW1lJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tdmFsdWVcIj57eyBvLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9EZXNjcmlwdGlvbicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLXZhbHVlIG9yZy1pbmZvLXZhbHVlLS1tdXRlZFwiPnt7IG8uZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9QbGFuJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhbi1iYWRnZSBwbGFuLWJhZGdlLS17eyBvLnBsYW4gfX1cIj57eyBwbGFuTGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb1R5cGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby12YWx1ZVwiPnt7IG8udHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dNZW1iZXJzKSB7XG4gICAgICAgIDwhLS0gTWVtYmVycyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzVGl0bGUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChtZW1iZXJzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCJ7IHByZXNldDogJ2xpc3QnLCByb3dzOiAzIH1cIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAobWVtYmVyc0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJtZW1iZXJzRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChtZW1iZXJzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbWVtYmVyc0VtcHR5JyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVtYmVycy1saXN0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAobSBvZiB2aXNpYmxlTWVtYmVycygpOyB0cmFjayBtLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgPHZhbC1tZW1iZXItY2FyZFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInb3JnLW1lbWJlci0nICsgbS51c2VySWRcIlxuICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBtLnVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBtLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogbS5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw6IG0uYXZhdGFyLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGVMYWJlbDogbS5yb2xlc1swXSA/IHJvbGVMYWJlbChtLnJvbGVzWzBdKSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkFyaWFMYWJlbDogdHQoJ3ZpZXdNZW1iZXJDdGEnKSxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkFjdGlvbik9XCJvblZpZXdNZW1iZXIobSlcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKCFzaG93QWxsTWVtYmVycygpICYmIG1lbWJlcnMoKS5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgKGNsaWNrKT1cInNob3dBbGxNZW1iZXJzLnNldCh0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAge3sgdHQoJ21lbWJlcnNTaG93TW9yZScpIH19ICh7eyBtZW1iZXJzKCkubGVuZ3RoIC0gMyB9fSlcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNob3dBbGxNZW1iZXJzKCkgJiYgbWVtYmVyc05leHRUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdNb3JlTWVtYmVycygpXCIgKGNsaWNrKT1cImxvYWRNb3JlTWVtYmVycygpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsb2FkaW5nTW9yZU1lbWJlcnMoKSA/ICfigKYnIDogdHQoJ21lbWJlcnNTaG93TW9yZScpIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1JvbGVzKSB7XG4gICAgICAgIDwhLS0gUm9sZXMgeSBwZXJtaXNvczogc2VjY2lvbiBleHBsaWNhdGl2YSwgZGV0YWxsZSBlbiBsYSBydXRhIGRlIHBlcm1pc29zIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ3JvbGVzU2VjdGlvblRpdGxlJyksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdyb2xlc0hpbnQnKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInZpZXdQZXJtaXNzaW9uc0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25WaWV3UGVybWlzc2lvbnMoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd05ld09yZ0N0YSkge1xuICAgICAgICA8IS0tIE51ZXZhIG9yZyBDVEEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtY3RhLWNhcmQgW3Byb3BzXT1cIm5ld09yZ0N0YVByb3BzKClcIiAob25BY3Rpb24pPVwib25OZXdPcmcoKVwiIC8+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dJbnZpdGUpIHtcbiAgICAgICAgPCEtLSBJbnZpdGU6IHNvbG8gYWRtaW4rIChnYXRpbmcgUkJBQyBpbnRlcm5vKSAtLT5cbiAgICAgICAgPHNlY3Rpb24gKnZhbEhhc1Blcm1pc3Npb249XCIndXNlcnM6KidcIiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIiBkYXRhLXRlc3RpZD1cIm9yZy1pbnZpdGUtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YV9fdGV4dFwiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW52aXRlQ3RhVGl0bGUnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2ludml0ZUN0YUhpbnQnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIm9wZW5JbnZpdGVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3Blbkludml0ZSgpXCIgLz5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIm9wZW5JbXBvcnRCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlbkltcG9ydCgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gQVBJIEtleXM6IHNlY2Npw7NuIHByb3BpYS4gSW50ZWdyYWNpb25lcyBNMk0gKGltcG9ydCBkZSBtaWVtYnJvcywgZXRjLikuIC0tPlxuICAgICAgPHNlY3Rpb24gKnZhbEhhc1Blcm1pc3Npb249XCInYXBpLWtleXM6cmVhZCdcIiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIiBkYXRhLXRlc3RpZD1cIm9yZy1hcGlrZXlzLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YV9fdGV4dFwiPlxuICAgICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSwgY29udGVudDogdHQoJ2FwaUtleXNTZWN0aW9uVGl0bGUnKSB9XCIgLz5cbiAgICAgICAgICAgIDx2YWwtdGV4dCBbcHJvcHNdPVwieyBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UsIGNvbnRlbnQ6IHR0KCdhcGlLZXlzU2VjdGlvbkhpbnQnKSB9XCIgLz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJvcmctbW9yZS1pbmZvLWxpbmtcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQXBpS2V5c0luZm8oKVwiPlxuICAgICAgICAgICAgICB7eyB0dCgnYXBpS2V5c01vcmVJbmZvJykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX19hY3Rpb25zXCI+XG4gICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3BlbkFwaUtleXNCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlbkFwaUtleXMoKVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1RyYW5zZmVyT3duZXJzaGlwICYmIGlzT3duZXIoKSkge1xuICAgICAgICA8IS0tIFRyYW5zZmVyIG93bmVyc2hpcDogc29sbyBvd25lciAoZ2F0aW5nIFJCQUMgaW50ZXJubykgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLXRyYW5zZmVyLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZS1kYW5nZXJcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwid2FybmluZy1vdXRsaW5lXCIgY2xhc3M9XCJkYW5nZXItaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlLCBjb250ZW50OiB0dCgndHJhbnNmZXJUaXRsZScpIH1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCd0cmFuc2ZlckhpbnQnKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICBAaWYgKHRyYW5zZmVyYWJsZU1lbWJlcnMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJ0cmFuc2ZlckJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuVHJhbnNmZXIoKVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbWVtYmVyc0VtcHR5JyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0xlYXZlKSB7XG4gICAgICAgIDwhLS0gTGVhdmUgb3JnIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZS1kYW5nZXJcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwid2FybmluZy1vdXRsaW5lXCIgY2xhc3M9XCJkYW5nZXItaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlLCBjb250ZW50OiB0dCgnbGVhdmVUaXRsZScpIH1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGlzT3duZXIoKSA/IHR0KCdsZWF2ZU93bmVySGludCcpIDogdHQoJ2xlYXZlSGludCcpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwibGVhdmVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uTGVhdmUoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0RlbGV0ZU9yZyAmJiBpc093bmVyKCkpIHtcbiAgICAgICAgPCEtLSBEZWxldGUgb3JnOiBzb2xvIG93bmVyLCBhY2Npw7NuIG3DoXMgZGVzdHJ1Y3RpdmEgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWRlbGV0ZS1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tdGl0bGUtZGFuZ2VyXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cIndhcm5pbmctb3V0bGluZVwiIGNsYXNzPVwiZGFuZ2VyLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdkYXJrJywgYm9sZDogdHJ1ZSwgY29udGVudDogdHQoJ2RlbGV0ZVRpdGxlJykgfVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJ7IGNvbnRlbnQ6IHR0KCdkZWxldGVIaW50JyksIHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSB9XCIgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwiZGVsZXRlQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbkRlbGV0ZSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoaXNEZWJ1Zykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb24gcmJhYy1kZWJ1Z1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlci1yb3dcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnUkJBQyAobGl2ZSknLFxuICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJiYWMtZGVidWdfX2JvZHlcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19yb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX19sYWJlbFwiPlJvbGVzPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX3ZhbHVlXCI+e3sgYXV0aC5yb2xlcygpLmpvaW4oJywgJykgfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19yb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX19sYWJlbFwiPlBlcm1pc29zPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX3ZhbHVlIHJiYWMtZGVidWdfX3ZhbHVlLS1wZXJtc1wiPnt7IGF1dGgucGVybWlzc2lvbnMoKS5qb2luKCcsICcpIHx8ICfigJQnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICAgIDx2YWwtcGVybWlzc2lvbnMtbW9kYWxcbiAgICAgICAgW2lzT3Blbl09XCJwZXJtaXNzaW9uc09wZW4oKVwiXG4gICAgICAgIFtjb25maWddPVwieyBpMThuTmFtZXNwYWNlOiByZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2UgfVwiXG4gICAgICAgIChkaXNtaXNzZWQpPVwicGVybWlzc2lvbnNPcGVuLnNldChmYWxzZSlcIlxuICAgICAgLz5cbiAgICAgIDx2YWwtY3JlYXRlLW9yZy1tb2RhbFxuICAgICAgICBbaXNPcGVuXT1cImNyZWF0ZU9yZ01vZGFsT3BlbigpXCJcbiAgICAgICAgKGRpc21pc3NlZCk9XCJjcmVhdGVPcmdNb2RhbE9wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAgIChjcmVhdGVkKT1cIm9uT3JnQ3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cbiAgICAgIC5vcmctbW9yZS1pbmZvLWxpbmsge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDRweCAwO1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gKyAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWhlYWRlci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucy0tZ2FwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuaW52aXRlLWN0YSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgIH1cbiAgICAgIC5pbnZpdGUtY3RhX190ZXh0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgICAuaW52aXRlLWN0YV9fYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLWNhcmQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmNGY1ZjgpO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLWxvZ28ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogOHB4IDAgMTZweDtcbiAgICAgIH1cbiAgICAgIC5vcmctbG9nby1pbWcge1xuICAgICAgICB3aWR0aDogODBweDtcbiAgICAgICAgaGVpZ2h0OiA4MHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgfVxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5vcmctaW5mby1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5vcmctaW5mby1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAub3JnLWluZm8tY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tZmllbGQge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tZmllbGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuNzRyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby12YWx1ZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby12YWx1ZS0tbXV0ZWQge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2UtLWZyZWUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQtc2hhZGUsICNkN2Q4ZGEpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2UtLXBybyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZS0tZW50ZXJwcmlzZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNWM1NDI7XG4gICAgICAgIGNvbG9yOiAjMjIyO1xuICAgICAgfVxuICAgICAgLm1lbWJlcnMtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLm1lbWJlcnMtc2hvdy1tb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgcGFkZGluZzogOHB4IDA7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1ZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fbGFiZWwge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIG1pbi13aWR0aDogNzJweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fdmFsdWUge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fdmFsdWUtLXBlcm1zIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgfVxuICAgICAgLnNlY3Rpb24tdGl0bGUtZGFuZ2VyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi10aXRsZS1kYW5nZXIgdmFsLXRpdGxlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cbiAgICAgIC5kYW5nZXItaWNvbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXdhcm5pbmctc2hhZGUsICNkNGEwMTcpO1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBPcmdhbml6YXRpb25WaWV3Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICByZWFkb25seSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBwcml2YXRlIGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmUpO1xuICBwcml2YXRlIGNvbmZpcm1EaWFsb2cgPSBpbmplY3QoQ29uZmlybWF0aW9uRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcmVhZG9ubHkgaXNEZWJ1ZyA9IGlzRGV2TW9kZSgpO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBvcmdhbml6YXRpb25Db25maWdgIChwb2JsYWRvIHBvciBgcHJvdmlkZVZhbHRlY2hPcmdhbml6YXRpb25Sb3V0ZXNgKS5cbiAgICogYHJlc29sdmVkQ29uZmlnYCBtZXJnZWEgY29uIGxvcyBkZWZhdWx0cyDigJQgYEBJbnB1dGAgZ2FuYSBzb2JyZSByb3V0ZSBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnPzogT3JnYW5pemF0aW9uVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPFxuICAgICAgT21pdDxcbiAgICAgICAgT3JnYW5pemF0aW9uVmlld0NvbmZpZyxcbiAgICAgICAgJ29uT3JnRWRpdGVkJyB8ICdvbk1lbWJlckludml0ZWQnIHwgJ29uT3duZXJzaGlwVHJhbnNmZXJyZWQnIHwgJ29uTGVmdE9yZycgfCAnb25PcmdEZWxldGVkJyB8ICdvbk9yZ0NyZWF0ZWQnXG4gICAgICA+XG4gICAgPiAmXG4gICAgICBQaWNrPFxuICAgICAgICBPcmdhbml6YXRpb25WaWV3Q29uZmlnLFxuICAgICAgICAnb25PcmdFZGl0ZWQnIHwgJ29uTWVtYmVySW52aXRlZCcgfCAnb25Pd25lcnNoaXBUcmFuc2ZlcnJlZCcgfCAnb25MZWZ0T3JnJyB8ICdvbk9yZ0RlbGV0ZWQnIHwgJ29uT3JnQ3JlYXRlZCdcbiAgICAgID5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ29yZ2FuaXphdGlvbkNvbmZpZyddID8/IHt9KSBhcyBPcmdhbml6YXRpb25WaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogT3JnYW5pemF0aW9uVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dJbmZvOiBtZXJnZWQuc2hvd0luZm8gPz8gdHJ1ZSxcbiAgICAgIHNob3dNZW1iZXJzOiBtZXJnZWQuc2hvd01lbWJlcnMgPz8gdHJ1ZSxcbiAgICAgIHNob3dSb2xlczogbWVyZ2VkLnNob3dSb2xlcyA/PyB0cnVlLFxuICAgICAgc2hvd0ludml0ZTogbWVyZ2VkLnNob3dJbnZpdGUgPz8gdHJ1ZSxcbiAgICAgIHNob3dOZXdPcmdDdGE6IG1lcmdlZC5zaG93TmV3T3JnQ3RhID8/IHRydWUsXG4gICAgICBzaG93VHJhbnNmZXJPd25lcnNoaXA6IG1lcmdlZC5zaG93VHJhbnNmZXJPd25lcnNoaXAgPz8gdHJ1ZSxcbiAgICAgIHNob3dMZWF2ZTogbWVyZ2VkLnNob3dMZWF2ZSA/PyB0cnVlLFxuICAgICAgc2hvd0RlbGV0ZU9yZzogbWVyZ2VkLnNob3dEZWxldGVPcmcgPz8gdHJ1ZSxcbiAgICAgIGkxOG5OYW1lc3BhY2U6IG1lcmdlZC5pMThuTmFtZXNwYWNlID8/IERFRkFVTFRfTkFNRVNQQUNFLFxuICAgICAgdmlld1Blcm1pc3Npb25zUm91dGU6IG1lcmdlZC52aWV3UGVybWlzc2lvbnNSb3V0ZSA/PyBERUZBVUxUX1ZJRVdfUEVSTUlTU0lPTlNfUk9VVEUsXG4gICAgICBhcGlLZXlzUm91dGU6IG1lcmdlZC5hcGlLZXlzUm91dGUgPz8gREVGQVVMVF9BUElfS0VZU19ST1VURSxcbiAgICAgIGxlYXZlUmVkaXJlY3RSb3V0ZTogbWVyZ2VkLmxlYXZlUmVkaXJlY3RSb3V0ZSA/PyBERUZBVUxUX0xFQVZFX1JFRElSRUNUX1JPVVRFLFxuICAgICAgb25PcmdFZGl0ZWQ6IG1lcmdlZC5vbk9yZ0VkaXRlZCxcbiAgICAgIG9uTWVtYmVySW52aXRlZDogbWVyZ2VkLm9uTWVtYmVySW52aXRlZCxcbiAgICAgIG9uT3duZXJzaGlwVHJhbnNmZXJyZWQ6IG1lcmdlZC5vbk93bmVyc2hpcFRyYW5zZmVycmVkLFxuICAgICAgb25MZWZ0T3JnOiBtZXJnZWQub25MZWZ0T3JnLFxuICAgICAgb25PcmdEZWxldGVkOiBtZXJnZWQub25PcmdEZWxldGVkLFxuICAgICAgb25PcmdDcmVhdGVkOiBtZXJnZWQub25PcmdDcmVhdGVkLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAoY2FwdHVyYWRvIHBhcmEgbGxhbWFkYXMgbm8tcmVhY3RpdmFzKS4gKi9cbiAgcHJpdmF0ZSBnZXQgbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2U7XG4gIH1cblxuICByZWFkb25seSBvcmcgPSBzaWduYWw8T3JnYW5pemF0aW9uIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBMb2dvIGRlIG9yZyBxdWUgZmFsbMOzIGFsIGNhcmdhciDihpIgb2N1bHRhIGVsIGJsb3F1ZSAoY2FlIGEgbGEgY2FyZCBzaW4gbG9nbykuICovXG4gIHJlYWRvbmx5IGxvZ29GYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbGVhdmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNyZWF0ZU9yZ01vZGFsT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3JnTG9hZEVycm9yID0gc2lnbmFsPHVua25vd24+KG51bGwpO1xuXG4gIHJlYWRvbmx5IG9yZ0Vycm9yU3RhdGUgPSBjb21wdXRlZDxFbXB0eVN0YXRlTWV0YWRhdGEgfCBudWxsPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBlcnIgPSB0aGlzLm9yZ0xvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZVRpdGxlJyksIGVycm9yOiB0aGlzLnR0KCdlcnJvclRpdGxlJykgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVIaW50JyksXG4gICAgICAgIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50dCgncmV0cnknKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMubG9hZE9yZygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubG9hZGluZygpLFxuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSBtZW1iZXJzID0gc2lnbmFsPE1lbWJlckRldGFpbFtdPihbXSk7XG4gIHJlYWRvbmx5IG1lbWJlcnNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZW1iZXJzTG9hZEVycm9yID0gc2lnbmFsPHVua25vd24+KG51bGwpO1xuXG4gIHJlYWRvbmx5IG1lbWJlcnNFcnJvclN0YXRlID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhIHwgbnVsbD4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgZXJyID0gdGhpcy5tZW1iZXJzTG9hZEVycm9yKCk7XG4gICAgaWYgKCFlcnIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCB7XG4gICAgICB0aXRsZTogeyBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lVGl0bGUnKSwgZXJyb3I6IHRoaXMudHQoJ2Vycm9yVGl0bGUnKSB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZUhpbnQnKSxcbiAgICAgICAgZXJyb3I6IGludGVycHJldEVycm9yKGVycikubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICByZXRyeUxhYmVsOiB0aGlzLnR0KCdyZXRyeScpLFxuICAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5sb2FkTWVtYmVycygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubWVtYmVyc0xvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWVtYmVyc05leHRUb2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZ01vcmVNZW1iZXJzID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0FsbE1lbWJlcnMgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSB2aXNpYmxlTWVtYmVycyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnNob3dBbGxNZW1iZXJzKCkgPyB0aGlzLm1lbWJlcnMoKSA6IHRoaXMubWVtYmVycygpLnNsaWNlKDAsIDMpKSk7XG4gIHJlYWRvbmx5IHRyYW5zZmVycmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRlbGV0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgYXZhaWxhYmxlUm9sZXMgPSBzaWduYWw8T3JnUm9sZVtdPihTWVNURU1fUk9MRV9ERUZBVUxUUyk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnSWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC51c2VyKCkgYXMge1xuICAgICAgYWN0aXZlT3JnSWQ/OiBzdHJpbmc7XG4gICAgICBhY3RpdmVPcmc/OiBzdHJpbmc7XG4gICAgfSB8IG51bGw7XG4gICAgcmV0dXJuIHU/LmFjdGl2ZU9yZ0lkID8/IHU/LmFjdGl2ZU9yZyA/PyAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdXNlcklkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdXRoLnVzZXIoKT8udXNlcklkID8/ICcnKTtcblxuICByZWFkb25seSBpc093bmVyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG8gPSB0aGlzLm9yZygpO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMudXNlcklkKCk7XG4gICAgcmV0dXJuICEhbyAmJiAhIXVpZCAmJiBvLm93bmVySWQgPT09IHVpZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY2FuRWRpdE9yZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNPd25lcigpIHx8IHRoaXMuYXV0aC5oYXNQZXJtaXNzaW9uKCdvcmc6bWFuYWdlJykpO1xuXG4gIHJlYWRvbmx5IGNhbk1hbmFnZU1lbWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNPd25lcigpKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCB1aWQgPSB0aGlzLnVzZXJJZCgpO1xuICAgIGNvbnN0IG1lID0gdGhpcy5tZW1iZXJzKCkuZmluZChtID0+IG0udXNlcklkID09PSB1aWQpO1xuICAgIGlmICghbWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbWUucm9sZXMuc29tZShyID0+IHIgPT09ICdhZG1pbicgfHwgciA9PT0gJ3N1cGVyX2FkbWluJyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIHJlYWRvbmx5IHBsYW5MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwbGFuID0gdGhpcy5vcmcoKT8ucGxhbjtcbiAgICBpZiAocGxhbiA9PT0gJ3BybycpIHJldHVybiB0aGlzLnR0KCdwbGFuUHJvJyk7XG4gICAgaWYgKHBsYW4gPT09ICdlbnRlcnByaXNlJykgcmV0dXJuIHRoaXMudHQoJ3BsYW5FbnRlcnByaXNlJyk7XG4gICAgcmV0dXJuIHRoaXMudHQoJ3BsYW5GcmVlJyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN3aXRjaE9yZ1NlY3Rpb25Qcm9wcyA9IGNvbXB1dGVkPFNlY3Rpb25IZWFkZXJNZXRhZGF0YT4oKCkgPT4gKHtcbiAgICB0aXRsZTogdGhpcy5wYWdlVGl0bGUoKSxcbiAgICB0aXRsZVNpemU6ICdwYWdlJyxcbiAgICBhY3Rpb246IHtcbiAgICAgIHRleHQ6IHRoaXMudHQoJ3N3aXRjaE9yZ0N0YScpLFxuICAgICAgaWNvbjogeyBuYW1lOiAnc3dhcC1ob3Jpem9udGFsLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0b2tlbjogJ29yZy1zd2l0Y2gnLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH0sXG4gICAgaW5mb0xpbms6IHsgbGFiZWw6IHRoaXMudHQoJ29yZ3NNb3JlSW5mbycpLCB0b2tlbjogJ29yZy1tb3JlLWluZm8nIH0sXG4gIH0pKTtcblxuICByZWFkb25seSBlZGl0QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdlZGl0Q3RhJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ3NtYWxsJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGxlYXZlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdsZWF2ZUN0YScpLFxuICAgIHRva2VuOiAnb3JnLWxlYXZlJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMuaXNPd25lcigpIHx8IHRoaXMubGVhdmluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0cmFuc2ZlcmFibGVNZW1iZXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tZW1iZXJzKCkuZmlsdGVyKG0gPT4gbS51c2VySWQgIT09IHRoaXMudXNlcklkKCkpKTtcblxuICByZWFkb25seSB2aWV3UGVybWlzc2lvbnNCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3JvbGVzVmlld1Blcm1zJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnb3JnLXZpZXctcGVybWlzc2lvbnMnLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNmZXJCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3RyYW5zZmVyQ3RhJyksXG4gICAgdG9rZW46ICdvcmctdHJhbnNmZXItc3VibWl0JyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMudHJhbnNmZXJyaW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5JbnZpdGVCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2ludml0ZU9wZW4nKSxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgb3BlbkltcG9ydEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnaW1wb3J0T3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5BcGlLZXlzQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzT3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGRlbGV0ZUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnZGVsZXRlQ3RhJyksXG4gICAgdG9rZW46ICdvcmctZGVsZXRlJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMuZGVsZXRpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgbmV3T3JnQ3RhUHJvcHMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzTmV3UXVlc3Rpb24nKSxcbiAgICBkZXNjcmlwdGlvbjogdGhpcy50dCgnb3Jnc05ld0hpbnQnKSxcbiAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTRweCcsXG4gICAgYWN0aW9uczoge1xuICAgICAgcG9zaXRpb246ICdyaWdodCcsXG4gICAgICBjb2x1bW5lZDogZmFsc2UsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzTmV3Q3RhJyksXG4gICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBzdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgICAgIHRva2VuOiAnb3JnLW5ldycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgQnV0dG9uR3JvdXBNZXRhZGF0YSxcbiAgfSkpO1xuXG4gIC8qKiBHdWFyZGEgcGFyYSBkZXRlY3RhciBlbCBwcmltZXIgZGlzcGFybyBkZWwgZWZmZWN0IChldml0YSBkb2JsZSBjYXJnYSkuICovXG4gIHByaXZhdGUgbGFzdExvYWRlZE9yZ0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBucyA9IHRoaXMubnM7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMobnMsIE9SR0FOSVpBVElPTl9WSUVXX0kxOE4pO1xuICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIG5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuXG4gICAgLy8gQXV0by1yZWxvYWQgZW4gb3JnLXN3aXRjaDogcmVhY2Npb25hIGEgYWN0aXZlT3JnSWQoKSB5IHJlY2FyZ2Egb3JnICsgbWllbWJyb3NcbiAgICAvLyBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZGUgb3JnYW5pemFjacOzbiBhY3RpdmEgbWllbnRyYXMgbGEgdmlzdGEgZXN0w6FcbiAgICAvLyBtb250YWRhLiBDdWJyZSB0YW1iacOpbiBsYSBjYXJnYSBpbmljaWFsIOKAlCBgbGFzdExvYWRlZE9yZ0lkYCBldml0YSByZWNhcmdhclxuICAgIC8vIGRvcyB2ZWNlcyBlbCBtaXNtbyBpZCAocC5lai4gc2kgZWwgZWZmZWN0IHJlLWNvcnJlIHBvciBvdHJhIGRlcGVuZGVuY2lhKS5cbiAgICAvLyBgYWxsb3dTaWduYWxXcml0ZXNgIHBvcnF1ZSBsYXMgbG9hZCBmbnMgZXNjcmliZW4gc2lnbmFscyBzw61uY3JvbmFtZW50ZVxuICAgIC8vIChsb2FkaW5nL2Vycm9yL3Rva2VuKSDigJQgQW5ndWxhciAxOCBibG9xdWVhIHdyaXRlcyBlbiBlZmZlY3Qgc2luIGVsIGZsYWcuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICAgICAgaWYgKG9yZ0lkID09PSB0aGlzLmxhc3RMb2FkZWRPcmdJZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmxhc3RMb2FkZWRPcmdJZCA9IG9yZ0lkO1xuICAgICAgICB0aGlzLmxvYWRPcmcoKTtcbiAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICB0aGlzLmxvYWRSb2xlcygpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBjb25uZWN0UGFnZVJlZnJlc2goYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZE9yZygpLCB0aGlzLmxvYWRNZW1iZXJzKCldKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRWRpdCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IEVkaXRPcmdNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG9yZzogdGhpcy5vcmcoKSxcbiAgICAgICAgb25TdWNjZXNzOiAodXBkYXRlZDogT3JnYW5pemF0aW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmcuc2V0KHVwZGF0ZWQpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk9yZ0VkaXRlZD8uKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25MZWF2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc093bmVyKCkgfHwgdGhpcy5sZWF2aW5nKCkpIHJldHVybjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2cuY29uZmlybURlc3RydWN0aXZlKHtcbiAgICAgIHRpdGxlOiB0aGlzLnR0KCdsZWF2ZVRpdGxlJyksXG4gICAgICBtZXNzYWdlOiB0aGlzLnR0KCdsZWF2ZUNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgnbGVhdmVDdGEnKSB9LFxuICAgICAgY2FuY2VsQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2NhbmNlbEN0YScpIH0sXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQuY29uZmlybWVkKSByZXR1cm47XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMubGVhdmluZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMub3JnU2VydmljZS5sZWF2ZU9yZyhvcmdJZCkpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnbGVhdmVTdWNjZXNzJyksXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZmcgPSB0aGlzLnJlc29sdmVkQ29uZmlnKCk7XG4gICAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKGNmZy5sZWF2ZVJlZGlyZWN0Um91dGUpO1xuICAgICAgY2ZnLm9uTGVmdE9yZz8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24ubGVhdmUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2xlYXZlRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubGVhdmluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc093bmVyKCkgfHwgdGhpcy5kZWxldGluZygpKSByZXR1cm47XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtRGlhbG9nLmNvbmZpcm1EZXN0cnVjdGl2ZSh7XG4gICAgICB0aXRsZTogdGhpcy50dCgnZGVsZXRlVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2RlbGV0ZUNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgnZGVsZXRlQ3RhJykgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCdjYW5jZWxDdGEnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybjtcbiAgICB0aGlzLmRlbGV0aW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZyhvcmdJZCkpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHsgbWVzc2FnZTogdGhpcy50dCgnZGVsZXRlU3VjY2VzcycpLCBjb2xvcjogJ2RhcmsnLCBkdXJhdGlvbjogMzUwMCB9KTtcbiAgICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWcoKTtcbiAgICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwoY2ZnLmxlYXZlUmVkaXJlY3RSb3V0ZSk7XG4gICAgICBjZmcub25PcmdEZWxldGVkPy4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ29yZ2FuaXphdGlvbi5kZWxldGUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2RlbGV0ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRlbGV0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25OZXdPcmcoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVPcmdNb2RhbE9wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcmdDcmVhdGVkKG5ld09yZzogT3JnYW5pemF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVPcmdNb2RhbE9wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25PcmdDcmVhdGVkPy4obmV3T3JnKTtcbiAgfVxuXG4gIG9uT3Blbkludml0ZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IEludml0ZU1lbWJlck1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb3JnSWQ6IHRoaXMuYWN0aXZlT3JnSWQoKSxcbiAgICAgICAgZXhpc3RpbmdNZW1iZXJJZHM6IHRoaXMubWVtYmVycygpLm1hcChtID0+IG0udXNlcklkKSxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk1lbWJlckludml0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uT3BlbkltcG9ydCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb3JnSWQ6IHRoaXMuYWN0aXZlT3JnSWQoKSxcbiAgICAgICAgYXZhaWxhYmxlUm9sZXM6IHRoaXMuYXZhaWxhYmxlUm9sZXMoKSxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk1lbWJlckludml0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uT3BlbkFwaUtleXMoKTogdm9pZCB7XG4gICAgLy8gTGFzIEFQSSBLZXlzIGFob3JhIHZpdmVuIGVuIHN1IHByb3BpYSB2aXN0YSAoYHZhbC1hcGkta2V5cy12aWV3YCk6IGNyZWFyXG4gICAgLy8gYXJyaWJhLCBsaXN0YSBhYmFqbyBjb24gY3JlYWRvci9mZWNoYS4gTmF2ZWdhbW9zIGVuIHZleiBkZSBhYnJpciB1biBtb2RhbC5cbiAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKHRoaXMucmVzb2x2ZWRDb25maWcoKS5hcGlLZXlzUm91dGUpO1xuICB9XG5cbiAgLy8gXCJNw6FzIGluZm9ybWFjacOzblwiIHNvYnJlIG9yZ2FuaXphY2lvbmVzIOKAlCBtaXNtbyBzaGVldCBleHBsaWNhdGl2byBxdWUgbXVlc3RyYVxuICBvbkhlYWRlckFjdGlvbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRva2VuID09PSAnb3JnLXN3aXRjaCcpIHRoaXMub25Td2l0Y2hPcmcoKTtcbiAgICBlbHNlIGlmICh0b2tlbiA9PT0gJ29yZy1tb3JlLWluZm8nKSB0aGlzLm9uT3JnSW5mbygpO1xuICB9XG5cbiAgLy8gYWNjb3VudC12aWV3IHNpbiBvcmcsIHBlcm8gZGlzcG9uaWJsZSBzaWVtcHJlICh0b2RvIHVzZXIgdGllbmUgb3JnIHBvciBkZWZlY3RvKS5cbiAgb25Td2l0Y2hPcmcoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogU3dpdGNoT3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBpMThuTmFtZXNwYWNlOiAnU2V0dGluZ3MuU3dpdGNoT3JnJyxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuODVdLCBpbml0aWFsQnJlYWtwb2ludDogMC44NSwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25PcmdJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ29yZ3NJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXCJNw6FzIGluZm9ybWFjacOzblwiIGRlIGxhIHNlY2Npw7NuIEludGVncmFjaW9uZXMg4oCUIGFicmUgdW4gc2hlZXQgRVhQTElDQVRJVk9cbiAgLy8gKGFydGljbGUtc3R5bGUsIHNpbiBsYXMgZmVhdHVyZS1jYXJkcyBkZSBvcmcpLCBOTyBlbCBtb2RhbCBkZSBnZXN0acOzbiBkZSBBUElcbiAgLy8ga2V5cy4gTGEgZ2VzdGnDs24gc2UgYWJyZSBjb24gZWwgYm90w7NuIFwiR2VzdGlvbmFyXCIgKG9uT3BlbkFwaUtleXMpLlxuICBvbkFwaUtleXNJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHNob3dGZWF0dXJlczogZmFsc2UsXG4gICAgICAgIGZlYXR1cmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ2NvZGUtc2xhc2gtb3V0bGluZScsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50dCgnYXBpS2V5c0ZlYXR1cmVBdXRvVGl0bGUnKSxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlQXV0b0Rlc2MnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdzaGllbGQtY2hlY2ttYXJrLW91dGxpbmUnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlUGVybXNUaXRsZScpLFxuICAgICAgICAgICAgZGVzYzogdGhpcy50dCgnYXBpS2V5c0ZlYXR1cmVQZXJtc0Rlc2MnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICd3YXJuaW5nLW91dGxpbmUnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlU2VjcmV0VGl0bGUnKSxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlU2VjcmV0RGVzYycpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ2FwaUtleXNJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25WaWV3UGVybWlzc2lvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJtaXNzaW9uc09wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcGVuVHJhbnNmZXIoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgbWVtYmVyczogdGhpcy50cmFuc2ZlcmFibGVNZW1iZXJzKCksXG4gICAgICAgIG9uQ29uZmlybTogKG5ld093bmVySWQ6IHN0cmluZykgPT4gdm9pZCB0aGlzLm9uVHJhbnNmZXIobmV3T3duZXJJZCksXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25UcmFuc2ZlcihuZXdPd25lcklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5ld093bmVySWQgfHwgdGhpcy50cmFuc2ZlcnJpbmcoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybURpYWxvZy5jb25maXJtRGVzdHJ1Y3RpdmUoe1xuICAgICAgdGl0bGU6IHRoaXMudHQoJ3RyYW5zZmVyVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyQ29uZmlybScpLFxuICAgICAgY29uZmlybUJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCd0cmFuc2ZlckN0YScpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50dCgnY2FuY2VsQ3RhJykgfSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdC5jb25maXJtZWQpIHJldHVybjtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy50cmFuc2ZlcnJpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UudHJhbnNmZXJPd25lcnNoaXAob3JnSWQsIG5ld093bmVySWQpKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyU3VjY2VzcycpLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBkdXJhdGlvbjogMzUwMCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkT3JnKCk7XG4gICAgICB0aGlzLmxvYWRNZW1iZXJzKCk7XG4gICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25Pd25lcnNoaXBUcmFuc2ZlcnJlZD8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24udHJhbnNmZXInLFxuICAgICAgICBmYWxsYmFja0tleTogJ3RyYW5zZmVyRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNmZXJyaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3JnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3JnTG9hZEVycm9yLnNldChudWxsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnKG9yZ0lkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBvcmcgPT4ge1xuICAgICAgICAgIHRoaXMubG9nb0ZhaWxlZC5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMub3JnLnNldChvcmcpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdMb2FkRXJyb3Iuc2V0KGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkTWVtYmVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0FsbE1lbWJlcnMuc2V0KGZhbHNlKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnTWVtYmVycyhvcmdJZCwgeyBsaW1pdDogMjAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnMuc2V0KGNhcmRzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgICAgaWYgKHJlcy5yb2xlRGlzcGxheU5hbWVzKSB0aGlzLm1lcmdlUm9sZURpc3BsYXlOYW1lcyhyZXMucm9sZURpc3BsYXlOYW1lcyk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRNb3JlTWVtYmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVtYmVyc05leHRUb2tlbigpO1xuICAgIGlmICghb3JnSWQgfHwgIXRva2VuIHx8IHRoaXMubG9hZGluZ01vcmVNZW1iZXJzKCkpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZ01lbWJlcnMob3JnSWQsIHsgbGltaXQ6IDIwLCBuZXh0VG9rZW46IHRva2VuIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyByZXMgPT4ge1xuICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy5tZW1iZXJzLnVwZGF0ZShwcmV2ID0+IFsuLi5wcmV2LCAuLi5jYXJkc10pO1xuICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgIHRoaXMubG9hZGluZ01vcmVNZW1iZXJzLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLmxvYWRNb3JlTWVtYmVycycsXG4gICAgICAgICAgZmFsbGJhY2tLZXk6ICdtZW1iZXJzRXJyb3InLFxuICAgICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5yaWNoV2l0aFByb2ZpbGVzKG1lbWJlcnM6IE9yZ01lbWJlcltdKTogUHJvbWlzZTxNZW1iZXJEZXRhaWxbXT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBtZW1iZXJzLm1hcChhc3luYyBtID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gYXdhaXQgZ2V0RG9jKGRvYyh0aGlzLmZpcmVzdG9yZSwgYHByb2ZpbGVzLyR7bS51c2VySWR9YCkpO1xuICAgICAgICAgIGNvbnN0IHAgPSBzbmFwLmV4aXN0cygpID8gc25hcC5kYXRhKCkgOiB7fTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGhhbmRsZTogcFsnaGFuZGxlJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXZhdGFyOiAocFsnYXZhdGFyVXJsJ10gPz8gcFsnYXZhdGFyJ10pIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5hbWU6IChwWyduYW1lJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSB8fCBtLm5hbWUsXG4gICAgICAgICAgfSBhcyBNZW1iZXJEZXRhaWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBtIGFzIE1lbWJlckRldGFpbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLm1hcChyID0+IChyLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgPyByLnZhbHVlIDogKHt9IGFzIE1lbWJlckRldGFpbCkpKTtcbiAgfVxuXG4gIGxvYWRSb2xlcygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJvbGVzID0+IHtcbiAgICAgICAgaWYgKHJvbGVzLmxlbmd0aCkgdGhpcy5hdmFpbGFibGVSb2xlcy5zZXQocm9sZXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJvbGVMYWJlbChyb2xlSWRPck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVSb2xlTGFiZWxGcm9tTGlzdChyb2xlSWRPck5hbWUsIHRoaXMuYXZhaWxhYmxlUm9sZXMoKSwgdGhpcy5pMThuLmxhbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUm9sZURpc3BsYXlOYW1lcyhkaXNwbGF5TmFtZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KTogdm9pZCB7XG4gICAgdGhpcy5hdmFpbGFibGVSb2xlcy51cGRhdGUocm9sZXMgPT4ge1xuICAgICAgY29uc3QgYnlOYW1lID0gbmV3IE1hcChyb2xlcy5tYXAociA9PiBbci5uYW1lLCByXSkpO1xuICAgICAgZm9yIChjb25zdCBbcm9sZU5hbWUsIGxhYmVsc10gb2YgT2JqZWN0LmVudHJpZXMoZGlzcGxheU5hbWVzKSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGJ5TmFtZS5nZXQocm9sZU5hbWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICBpZiAoIWV4aXN0aW5nLmRpc3BsYXlOYW1lKSBieU5hbWUuc2V0KHJvbGVOYW1lLCB7IC4uLmV4aXN0aW5nLCBkaXNwbGF5TmFtZTogbGFiZWxzIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5TmFtZS5zZXQocm9sZU5hbWUsIHsgaWQ6IHJvbGVOYW1lLCBuYW1lOiByb2xlTmFtZSwgZGlzcGxheU5hbWU6IGxhYmVscyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oYnlOYW1lLnZhbHVlcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uVmlld01lbWJlcihtZW1iZXI6IE1lbWJlckRldGFpbCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogTWVtYmVyRGV0YWlsTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBtZW1iZXIsXG4gICAgICAgIG9yZ0lkOiB0aGlzLmFjdGl2ZU9yZ0lkKCksXG4gICAgICAgIGF2YWlsYWJsZVJvbGVzOiB0aGlzLmF2YWlsYWJsZVJvbGVzKCksXG4gICAgICAgIGNhbk1hbmFnZTogdGhpcy5jYW5NYW5hZ2VNZW1iZXJzKCkgJiYgbWVtYmVyLnVzZXJJZCAhPT0gdGhpcy51c2VySWQoKSxcbiAgICAgICAgaXNTZWxmOiBtZW1iZXIudXNlcklkID09PSB0aGlzLnVzZXJJZCgpLFxuICAgICAgICBvbkNoYW5nZWQ6ICgpID0+IHRoaXMubG9hZE1lbWJlcnMoKSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG59XG4iXX0=
1361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9vcmdhbml6YXRpb24tdmlldy9vcmdhbml6YXRpb24tdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFFeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpVFQ7d0RBa05RLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBJbnB1dCwgaXNEZXZNb2RlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaXJlc3RvcmUsIGRvYywgZ2V0RG9jIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyB3YXJuaW5nT3V0bGluZSwgc3dhcEhvcml6b250YWxPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdGFDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2N0YS1jYXJkL2N0YS1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvdHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlRXJyb3JTdGF0ZVByb3BzIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL2ZhY3RvcnknO1xuaW1wb3J0IHsgTWVtYmVyQ2FyZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9tZW1iZXItY2FyZC9tZW1iZXItY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2tlbGV0b25MYXlvdXRDb21wb25lbnQgfSBmcm9tICcuLi9za2VsZXRvbi1sYXlvdXQvc2tlbGV0b24tbGF5b3V0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgU2VjdGlvbkhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWN0aW9uLWhlYWRlci9zZWN0aW9uLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VjdGlvbkhlYWRlck1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlY3Rpb24taGVhZGVyL3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbkdyb3VwTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvYnV0dG9uLWdyb3VwL3R5cGVzJztcblxuaW1wb3J0IHsgSGFzUGVybWlzc2lvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvaGFzLXBlcm1pc3Npb24uZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBPcmdTd2l0Y2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9vcmctc3dpdGNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IGludGVycHJldEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL2ludGVycHJldC1lcnJvcic7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9vcmcuc2VydmljZSc7XG5pbXBvcnQge1xuICBPcmdNZW1iZXIsXG4gIE9yZ1JvbGUsXG4gIE9yZ2FuaXphdGlvbixcbiAgcmVzb2x2ZVJvbGVMYWJlbEZyb21MaXN0LFxuICBTWVNURU1fUk9MRV9ERUZBVUxUUyxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL3R5cGVzJztcbmltcG9ydCB7IGNvbm5lY3RQYWdlUmVmcmVzaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvdmFsdGVjaC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuc2VydmljZSc7XG5cbmltcG9ydCB7IENyZWF0ZU9yZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vY3JlYXRlLW9yZy1tb2RhbC9jcmVhdGUtb3JnLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFZGl0T3JnTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9lZGl0LW9yZy1tb2RhbC9lZGl0LW9yZy1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW52aXRlTWVtYmVyTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9pbnZpdGUtbWVtYmVyLW1vZGFsL2ludml0ZS1tZW1iZXItbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckRldGFpbE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVtYmVyLWRldGFpbC1tb2RhbC9tZW1iZXItZGV0YWlsLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW1iZXJEZXRhaWwgfSBmcm9tICcuLi9tZW1iZXItZGV0YWlsLW1vZGFsL3R5cGVzJztcbmltcG9ydCB7IFBlcm1pc3Npb25zTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9wZXJtaXNzaW9ucy12aWV3L3Blcm1pc3Npb25zLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJhbnNmZXItb3duZXJzaGlwLW1vZGFsL3RyYW5zZmVyLW93bmVyc2hpcC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVtYmVySW1wb3J0TW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9tZW1iZXItaW1wb3J0LW1vZGFsL21lbWJlci1pbXBvcnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE9yZ0luZm9TaGVldENvbXBvbmVudCB9IGZyb20gJy4uL29yZy1pbmZvLXNoZWV0L29yZy1pbmZvLXNoZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTd2l0Y2hPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3N3aXRjaC1vcmctbW9kYWwvc3dpdGNoLW9yZy1tb2RhbC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBPcmdhbml6YXRpb25WaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBPUkdBTklaQVRJT05fVklFV19JMThOIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tdmlldy5pMThuJztcblxuYWRkSWNvbnMoeyB3YXJuaW5nT3V0bGluZSwgc3dhcEhvcml6b250YWxPdXRsaW5lIH0pO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdTZXR0aW5ncy5Pcmdhbml6YXRpb24nO1xuY29uc3QgREVGQVVMVF9WSUVXX1BFUk1JU1NJT05TX1JPVVRFID0gJy9hcHAvc2V0dGluZ3MvcGVybWlzc2lvbnMnO1xuY29uc3QgREVGQVVMVF9BUElfS0VZU19ST1VURSA9ICcvYXBwL3NldHRpbmdzL2FwaS1rZXlzJztcbmNvbnN0IERFRkFVTFRfTEVBVkVfUkVESVJFQ1RfUk9VVEUgPSAnL2FwcC9zZXR0aW5ncy9hY2NvdW50JztcblxuLyoqXG4gKiBgdmFsLW9yZ2FuaXphdGlvbi12aWV3YCDigJQgdmlzdGEgR2VzdGnDs24gZGUgb3JnYW5pemFjacOzbiBmdWxsLWZlYXR1cmVcbiAqIGF1dG9jb250ZW5pZGEgKG9yZ2FuaXNtKS4gUHJvbW92aWRhIGRlc2RlIGBzaG93Y2FzZWAgYmFqbyBlbCBwcm9jZXNvIGRlXG4gKiBBRFItMDIxLiBSZcO6bmU6XG4gKiAgLSAqKkluZm9ybWFjacOzbioqIOKAlCBub21icmUsIGRlc2NyaXBjacOzbiwgcGxhbiB5IHRpcG8gZGUgbGEgb3JnIGFjdGl2YTsgZWRpdGFyXG4gKiAgICB2w61hIG1vZGFsIGB2YWwtZWRpdC1vcmctbW9kYWxgIChzb2xvIHNpIGBjYW5FZGl0T3JnKClgKS5cbiAqICAtICoqTWllbWJyb3MqKiDigJQgbGlzdGEgcGFnaW5hZGEgKGB2YWwtbWVtYmVyLWNhcmRgKSBlbnJpcXVlY2lkYSBjb24gcGVyZmlsZXNcbiAqICAgIHDDumJsaWNvcyAoRmlyZXN0b3JlKTsgdmVyIGRldGFsbGUgdsOtYSBgdmFsLW1lbWJlci1kZXRhaWwtbW9kYWxgLlxuICogIC0gKipSb2xlcyB5IHBlcm1pc29zKiog4oCUIHNlY2Npw7NuIGV4cGxpY2F0aXZhIGNvbiBDVEEgYSBsYSBydXRhIGRlIHBlcm1pc29zLlxuICogIC0gKipJbnZpdGFyKiog4oCUIENUQSBxdWUgYWJyZSBgdmFsLWludml0ZS1tZW1iZXItbW9kYWxgIChnYXRlYWRhIHBvciBgdXNlcnM6KmApLlxuICogIC0gKipUcmFuc2ZlcmlyIHByb3BpZWRhZCoqIOKAlCBgdmFsLXRyYW5zZmVyLW93bmVyc2hpcC1tb2RhbGAgKHNvbG8gb3duZXIpLlxuICogIC0gKipTYWxpciBkZSBsYSBvcmdhbml6YWNpw7NuKiog4oCUIGBPcmdTZXJ2aWNlLmxlYXZlT3JnYCBjb24gY29uZmlybWFjacOzblxuICogICAgZGVzdHJ1Y3RpdmEuXG4gKlxuICogKipSQkFDIGludGVybm8qKiAoZGVjaXNpw7NuIENUTywgQURSLTAyMSk6IGVsIGdhdGluZyBmaW5vIHNlIHJlc3VlbHZlIGRlbnRybyBkZVxuICogbGEgdmlzdGEgdsOtYSBgQXV0aFNlcnZpY2UuaGFzUGVybWlzc2lvbigpYCArIGAqdmFsSGFzUGVybWlzc2lvbmAgKyBjb21wdXRlZHNcbiAqIGBpc093bmVyKClgL2BjYW5NYW5hZ2VNZW1iZXJzKClgL2BjYW5FZGl0T3JnKClgLiBOTyBzZSBleHBvbmUgY29tbyBjb25maWcuXG4gKlxuICogKipBdXRvLXJlbG9hZCBlbiBvcmctc3dpdGNoKio6IHVuIGBlZmZlY3RgIHJlYWN0aW9uYSBhIGBhY3RpdmVPcmdJZCgpYCB5IHJlY2FyZ2FcbiAqIG9yZyArIG1pZW1icm9zIGN1YW5kbyBlbCB1c3VhcmlvIGNhbWJpYSBkZSBvcmdhbml6YWNpw7NuIGFjdGl2YSBtaWVudHJhcyBsYSB2aXN0YVxuICogZXN0w6EgbW9udGFkYS4gRWwgZWZmZWN0IGN1YnJlIHRhbWJpw6luIGxhIGNhcmdhIGluaWNpYWwgKHNpbiBkb2JsZSBjYXJnYSkuXG4gKlxuICogTk8gcmVuZGVyaXphIGlvbi1jb250ZW50IOKAlCB2aXZlIGRlbnRybyBkZSB2YWwtcGFnZS13cmFwcGVyLiBgQWN0aXZhdGVkUm91dGVgIHNlXG4gKiBpbnllY3RhIGB7IG9wdGlvbmFsOiB0cnVlIH1gIHNvbG8gcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnIChuby1vcFxuICogZW1iZWJpZG8pLiBBdXRvLXJlZ2lzdHJhIHN1cyBkZWZhdWx0cyBpMThuIChlcy9lbikgc2kgZWwgY29uc3VtZXIgbm8gcHJvdmV5w7MgZWxcbiAqIG5hbWVzcGFjZSAoZGVmYXVsdCBgU2V0dGluZ3MuT3JnYW5pemF0aW9uYCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1vcmdhbml6YXRpb24tdmlldycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDcmVhdGVPcmdNb2RhbENvbXBvbmVudCxcbiAgICBDdGFDYXJkQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBIYXNQZXJtaXNzaW9uRGlyZWN0aXZlLFxuICAgIElvbkljb24sXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgTWVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICBQZXJtaXNzaW9uc01vZGFsQ29tcG9uZW50LFxuICAgIFRyYW5zZmVyT3duZXJzaGlwTW9kYWxDb21wb25lbnQsXG4gICAgTWVtYmVySW1wb3J0TW9kYWxDb21wb25lbnQsXG4gICAgT3JnSW5mb1NoZWV0Q29tcG9uZW50LFxuICAgIFNlY3Rpb25IZWFkZXJDb21wb25lbnQsXG4gICAgU3dpdGNoT3JnTW9kYWxDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICA8dmFsLXNlY3Rpb24taGVhZGVyIFtwcm9wc109XCJzd2l0Y2hPcmdTZWN0aW9uUHJvcHMoKVwiIChhY3Rpb25DbGljayk9XCJvbkhlYWRlckFjdGlvbigkZXZlbnQpXCIgLz5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0luZm8pIHtcbiAgICAgICAgPCEtLSBPcmcgSW5mbyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW5mb1RpdGxlJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoY2FuRWRpdE9yZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJlZGl0QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbkVkaXQoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogNCB9XCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKG9yZ0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJvcmdFcnJvclN0YXRlKCkhXCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKG9yZygpOyBhcyBvKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoby5sb2dvVXJsICYmICFsb2dvRmFpbGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWxvZ29cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwib3JnLWxvZ28taW1nXCIgW3NyY109XCJvLmxvZ29VcmxcIiBbYWx0XT1cIm8ubmFtZVwiIChlcnJvcik9XCJsb2dvRmFpbGVkLnNldCh0cnVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb05hbWUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby12YWx1ZVwiPnt7IG8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb0Rlc2NyaXB0aW9uJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tdmFsdWUgb3JnLWluZm8tdmFsdWUtLW11dGVkXCI+e3sgby5kZXNjcmlwdGlvbiB8fCAn4oCUJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb1BsYW4nKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbGFuLWJhZGdlIHBsYW4tYmFkZ2UtLXt7IG8ucGxhbiB9fVwiPnt7IHBsYW5MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3JnLWluZm8tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby1sYWJlbFwiPnt7IHR0KCdpbmZvVHlwZScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLXZhbHVlXCI+e3sgby50eXBlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd01lbWJlcnMpIHtcbiAgICAgICAgPCEtLSBNZW1iZXJzIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ21lbWJlcnNUaXRsZScpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKG1lbWJlcnNMb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnbGlzdCcsIHJvd3M6IDMgfVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChtZW1iZXJzRXJyb3JTdGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cIm1lbWJlcnNFcnJvclN0YXRlKCkhXCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKG1lbWJlcnMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzRW1wdHknKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW1iZXJzLWxpc3RcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChtIG9mIHZpc2libGVNZW1iZXJzKCk7IHRyYWNrIG0udXNlcklkKSB7XG4gICAgICAgICAgICAgICAgICA8dmFsLW1lbWJlci1jYXJkXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidvcmctbWVtYmVyLScgKyBtLnVzZXJJZFwiXG4gICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IG0udXNlcklkLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IG0uaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiBtLmVtYWlsLFxuICAgICAgICAgICAgICAgICAgICAgIGF2YXRhclVybDogbS5hdmF0YXIsXG4gICAgICAgICAgICAgICAgICAgICAgcm9sZUxhYmVsOiBtLnJvbGVzWzBdID8gcm9sZUxhYmVsKG0ucm9sZXNbMF0pIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQXJpYUxhYmVsOiB0dCgndmlld01lbWJlckN0YScpLFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQWN0aW9uKT1cIm9uVmlld01lbWJlcihtKVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoIXNob3dBbGxNZW1iZXJzKCkgJiYgbWVtYmVycygpLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWVtYmVycy1zaG93LW1vcmVcIiAoY2xpY2spPVwic2hvd0FsbE1lbWJlcnMuc2V0KHRydWUpXCI+XG4gICAgICAgICAgICAgICAgICB7eyB0dCgnbWVtYmVyc1Nob3dNb3JlJykgfX0gKHt7IG1lbWJlcnMoKS5sZW5ndGggLSAzIH19KVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0FsbE1lbWJlcnMoKSAmJiBtZW1iZXJzTmV4dFRva2VuKCkpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWVtYmVycy1zaG93LW1vcmVcIiBbZGlzYWJsZWRdPVwibG9hZGluZ01vcmVNZW1iZXJzKClcIiAoY2xpY2spPVwibG9hZE1vcmVNZW1iZXJzKClcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGxvYWRpbmdNb3JlTWVtYmVycygpID8gJ+KApicgOiB0dCgnbWVtYmVyc1Nob3dNb3JlJykgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93Um9sZXMpIHtcbiAgICAgICAgPCEtLSBSb2xlcyB5IHBlcm1pc29zOiBzZWNjaW9uIGV4cGxpY2F0aXZhLCBkZXRhbGxlIGVuIGxhIHJ1dGEgZGUgcGVybWlzb3MgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICBjb250ZW50OiB0dCgncm9sZXNTZWN0aW9uVGl0bGUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3JvbGVzSGludCcpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwidmlld1Blcm1pc3Npb25zQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvblZpZXdQZXJtaXNzaW9ucygpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93TmV3T3JnQ3RhKSB7XG4gICAgICAgIDwhLS0gTnVldmEgb3JnIENUQSAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC1jdGEtY2FyZCBbcHJvcHNdPVwibmV3T3JnQ3RhUHJvcHMoKVwiIChvbkFjdGlvbik9XCJvbk5ld09yZygpXCIgLz5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0ludml0ZSkge1xuICAgICAgICA8IS0tIEludml0ZTogc29sbyBhZG1pbisgKGdhdGluZyBSQkFDIGludGVybm8pIC0tPlxuICAgICAgICA8c2VjdGlvbiAqdmFsSGFzUGVybWlzc2lvbj1cIid1c2VyczoqJ1wiIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWludml0ZS1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX190ZXh0XCI+XG4gICAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdpbnZpdGVDdGFUaXRsZScpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW52aXRlQ3RhSGludCcpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YV9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3Blbkludml0ZUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuSW52aXRlKClcIiAvPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3BlbkltcG9ydEJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuSW1wb3J0KClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBBUEkgS2V5czogc2VjY2nDs24gcHJvcGlhLiBJbnRlZ3JhY2lvbmVzIE0yTSAoaW1wb3J0IGRlIG1pZW1icm9zLCBldGMuKS4gLS0+XG4gICAgICA8c2VjdGlvbiAqdmFsSGFzUGVybWlzc2lvbj1cIidhcGkta2V5czpyZWFkJ1wiIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWFwaWtleXMtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX190ZXh0XCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlLCBjb250ZW50OiB0dCgnYXBpS2V5c1NlY3Rpb25UaXRsZScpIH1cIiAvPlxuICAgICAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSwgY29udGVudDogdHQoJ2FwaUtleXNTZWN0aW9uSGludCcpIH1cIiAvPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9yZy1tb3JlLWluZm8tbGlua1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25BcGlLZXlzSW5mbygpXCI+XG4gICAgICAgICAgICAgIHt7IHR0KCdhcGlLZXlzTW9yZUluZm8nKSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJvcGVuQXBpS2V5c0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuQXBpS2V5cygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93VHJhbnNmZXJPd25lcnNoaXAgJiYgaXNPd25lcigpKSB7XG4gICAgICAgIDwhLS0gVHJhbnNmZXIgb3duZXJzaGlwOiBzb2xvIG93bmVyIChnYXRpbmcgUkJBQyBpbnRlcm5vKSAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCIgZGF0YS10ZXN0aWQ9XCJvcmctdHJhbnNmZXItc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlLWRhbmdlclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ3YXJuaW5nLW91dGxpbmVcIiBjbGFzcz1cImRhbmdlci1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgc2l6ZTogJ21lZGl1bScsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IHRydWUsIGNvbnRlbnQ6IHR0KCd0cmFuc2ZlclRpdGxlJykgfVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3RyYW5zZmVySGludCcpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAodHJhbnNmZXJhYmxlTWVtYmVycygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInRyYW5zZmVyQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbk9wZW5UcmFuc2ZlcigpXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzRW1wdHknKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93TGVhdmUpIHtcbiAgICAgICAgPCEtLSBMZWF2ZSBvcmcgLS0+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlLWRhbmdlclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ3YXJuaW5nLW91dGxpbmVcIiBjbGFzcz1cImRhbmdlci1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgc2l6ZTogJ21lZGl1bScsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IHRydWUsIGNvbnRlbnQ6IHR0KCdsZWF2ZVRpdGxlJykgfVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogaXNPd25lcigpID8gdHQoJ2xlYXZlT3duZXJIaW50JykgOiB0dCgnbGVhdmVIaW50JyksXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJsZWF2ZUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25MZWF2ZSgpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93RGVsZXRlT3JnICYmIGlzT3duZXIoKSkge1xuICAgICAgICA8IS0tIERlbGV0ZSBvcmc6IHNvbG8gb3duZXIsIGFjY2nDs24gbcOhcyBkZXN0cnVjdGl2YSAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCIgZGF0YS10ZXN0aWQ9XCJvcmctZGVsZXRlLXNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZS1kYW5nZXJcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwid2FybmluZy1vdXRsaW5lXCIgY2xhc3M9XCJkYW5nZXItaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlLCBjb250ZW50OiB0dCgnZGVsZXRlVGl0bGUnKSB9XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICA8dmFsLXRleHQgW3Byb3BzXT1cInsgY29udGVudDogdHQoJ2RlbGV0ZUhpbnQnKSwgc2l6ZTogJ21lZGl1bScsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlIH1cIiAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJkZWxldGVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uRGVsZXRlKClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChpc0RlYnVnKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvbiByYmFjLWRlYnVnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdSQkFDIChsaXZlKScsXG4gICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmJhYy1kZWJ1Z19fYm9keVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJiYWMtZGVidWdfX3Jvd1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX2xhYmVsXCI+Um9sZXM8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmJhYy1kZWJ1Z19fdmFsdWVcIj57eyBhdXRoLnJvbGVzKCkuam9pbignLCAnKSB8fCAn4oCUJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJiYWMtZGVidWdfX3Jvd1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJiYWMtZGVidWdfX2xhYmVsXCI+UGVybWlzb3M8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmJhYy1kZWJ1Z19fdmFsdWUgcmJhYy1kZWJ1Z19fdmFsdWUtLXBlcm1zXCI+e3sgYXV0aC5wZXJtaXNzaW9ucygpLmpvaW4oJywgJykgfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuICAgICAgPHZhbC1wZXJtaXNzaW9ucy1tb2RhbFxuICAgICAgICBbaXNPcGVuXT1cInBlcm1pc3Npb25zT3BlbigpXCJcbiAgICAgICAgW2NvbmZpZ109XCJ7IGkxOG5OYW1lc3BhY2U6IHJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZSB9XCJcbiAgICAgICAgKGRpc21pc3NlZCk9XCJwZXJtaXNzaW9uc09wZW4uc2V0KGZhbHNlKVwiXG4gICAgICAvPlxuICAgICAgPHZhbC1jcmVhdGUtb3JnLW1vZGFsXG4gICAgICAgIFtpc09wZW5dPVwiY3JlYXRlT3JnTW9kYWxPcGVuKClcIlxuICAgICAgICAoZGlzbWlzc2VkKT1cImNyZWF0ZU9yZ01vZGFsT3Blbi5zZXQoZmFsc2UpXCJcbiAgICAgICAgKGNyZWF0ZWQpPVwib25PcmdDcmVhdGVkKCRldmVudClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLnBhZ2Uge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICAgIG1heC13aWR0aDogNzIwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgfVxuICAgICAgLm9yZy1tb3JlLWluZm8tbGluayB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgcGFkZGluZzogNHB4IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICM3MDI2ZGYpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24ge1xuICAgICAgICBwYWRkaW5nOiAxNnB4IDA7XG4gICAgICB9XG4gICAgICAuc2V0dGluZ3Mtc2VjdGlvbiArIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wOCkpO1xuICAgICAgfVxuICAgICAgLnNlY3Rpb24taGVhZGVyLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDhweDtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWJvZHkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAucm93LWFjdGlvbnMge1xuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zLS1nYXAge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cbiAgICAgIC5pbnZpdGUtY3RhIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxNnB4O1xuICAgICAgfVxuICAgICAgLmludml0ZS1jdGFfX3RleHQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgIH1cbiAgICAgIC5pbnZpdGUtY3RhX19hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tY2FyZCB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tbG9nbyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiA4cHggMCAxNnB4O1xuICAgICAgfVxuICAgICAgLm9yZy1sb2dvLWltZyB7XG4gICAgICAgIHdpZHRoOiA4MHB4O1xuICAgICAgICBoZWlnaHQ6IDgwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICB9XG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLm9yZy1pbmZvLWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLm9yZy1pbmZvLWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5vcmctaW5mby1jYXJkIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1maWVsZCB7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1maWVsZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLXZhbHVlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLXZhbHVlLS1tdXRlZCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICAgIH1cbiAgICAgIC5wbGFuLWJhZGdlIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIHBhZGRpbmc6IDNweCAxMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZS0tZnJlZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSwgI2Q3ZDhkYSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZS0tcHJvIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH1cbiAgICAgIC5wbGFuLWJhZGdlLS1lbnRlcnByaXNlIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y1YzU0MjtcbiAgICAgICAgY29sb3I6ICMyMjI7XG4gICAgICB9XG4gICAgICAubWVtYmVycy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAubWVtYmVycy1zaG93LW1vcmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBwYWRkaW5nOiA4cHggMDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnIHtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWdfX2JvZHkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgfVxuICAgICAgLnJiYWMtZGVidWdfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19sYWJlbCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgICAgbWluLXdpZHRoOiA3MnB4O1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX192YWx1ZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX192YWx1ZS0tcGVybXMge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi10aXRsZS1kYW5nZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLXRpdGxlLWRhbmdlciB2YWwtdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuICAgICAgLmRhbmdlci1pY29uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4xMjVyZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itd2FybmluZy1zaGFkZSwgI2Q0YTAxNyk7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvblZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHJlYWRvbmx5IGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIG9yZ1N3aXRjaCA9IGluamVjdChPcmdTd2l0Y2hTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIG1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuICBwcml2YXRlIGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmUpO1xuICBwcml2YXRlIGNvbmZpcm1EaWFsb2cgPSBpbmplY3QoQ29uZmlybWF0aW9uRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgcmVhZG9ubHkgaXNEZWJ1ZyA9IGlzRGV2TW9kZSgpO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBvcmdhbml6YXRpb25Db25maWdgIChwb2JsYWRvIHBvciBgcHJvdmlkZVZhbHRlY2hPcmdhbml6YXRpb25Sb3V0ZXNgKS5cbiAgICogYHJlc29sdmVkQ29uZmlnYCBtZXJnZWEgY29uIGxvcyBkZWZhdWx0cyDigJQgYEBJbnB1dGAgZ2FuYSBzb2JyZSByb3V0ZSBkYXRhLlxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnPzogT3JnYW5pemF0aW9uVmlld0NvbmZpZztcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFxuICAgIFJlcXVpcmVkPFxuICAgICAgT21pdDxcbiAgICAgICAgT3JnYW5pemF0aW9uVmlld0NvbmZpZyxcbiAgICAgICAgJ29uT3JnRWRpdGVkJyB8ICdvbk1lbWJlckludml0ZWQnIHwgJ29uT3duZXJzaGlwVHJhbnNmZXJyZWQnIHwgJ29uTGVmdE9yZycgfCAnb25PcmdEZWxldGVkJyB8ICdvbk9yZ0NyZWF0ZWQnXG4gICAgICA+XG4gICAgPiAmXG4gICAgICBQaWNrPFxuICAgICAgICBPcmdhbml6YXRpb25WaWV3Q29uZmlnLFxuICAgICAgICAnb25PcmdFZGl0ZWQnIHwgJ29uTWVtYmVySW52aXRlZCcgfCAnb25Pd25lcnNoaXBUcmFuc2ZlcnJlZCcgfCAnb25MZWZ0T3JnJyB8ICdvbk9yZ0RlbGV0ZWQnIHwgJ29uT3JnQ3JlYXRlZCdcbiAgICAgID5cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ29yZ2FuaXphdGlvbkNvbmZpZyddID8/IHt9KSBhcyBPcmdhbml6YXRpb25WaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogT3JnYW5pemF0aW9uVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dJbmZvOiBtZXJnZWQuc2hvd0luZm8gPz8gdHJ1ZSxcbiAgICAgIHNob3dNZW1iZXJzOiBtZXJnZWQuc2hvd01lbWJlcnMgPz8gdHJ1ZSxcbiAgICAgIHNob3dSb2xlczogbWVyZ2VkLnNob3dSb2xlcyA/PyB0cnVlLFxuICAgICAgc2hvd0ludml0ZTogbWVyZ2VkLnNob3dJbnZpdGUgPz8gdHJ1ZSxcbiAgICAgIHNob3dOZXdPcmdDdGE6IG1lcmdlZC5zaG93TmV3T3JnQ3RhID8/IHRydWUsXG4gICAgICBzaG93VHJhbnNmZXJPd25lcnNoaXA6IG1lcmdlZC5zaG93VHJhbnNmZXJPd25lcnNoaXAgPz8gdHJ1ZSxcbiAgICAgIHNob3dMZWF2ZTogbWVyZ2VkLnNob3dMZWF2ZSA/PyB0cnVlLFxuICAgICAgc2hvd0RlbGV0ZU9yZzogbWVyZ2VkLnNob3dEZWxldGVPcmcgPz8gdHJ1ZSxcbiAgICAgIGkxOG5OYW1lc3BhY2U6IG1lcmdlZC5pMThuTmFtZXNwYWNlID8/IERFRkFVTFRfTkFNRVNQQUNFLFxuICAgICAgdmlld1Blcm1pc3Npb25zUm91dGU6IG1lcmdlZC52aWV3UGVybWlzc2lvbnNSb3V0ZSA/PyBERUZBVUxUX1ZJRVdfUEVSTUlTU0lPTlNfUk9VVEUsXG4gICAgICBhcGlLZXlzUm91dGU6IG1lcmdlZC5hcGlLZXlzUm91dGUgPz8gREVGQVVMVF9BUElfS0VZU19ST1VURSxcbiAgICAgIGxlYXZlUmVkaXJlY3RSb3V0ZTogbWVyZ2VkLmxlYXZlUmVkaXJlY3RSb3V0ZSA/PyBERUZBVUxUX0xFQVZFX1JFRElSRUNUX1JPVVRFLFxuICAgICAgb25PcmdFZGl0ZWQ6IG1lcmdlZC5vbk9yZ0VkaXRlZCxcbiAgICAgIG9uTWVtYmVySW52aXRlZDogbWVyZ2VkLm9uTWVtYmVySW52aXRlZCxcbiAgICAgIG9uT3duZXJzaGlwVHJhbnNmZXJyZWQ6IG1lcmdlZC5vbk93bmVyc2hpcFRyYW5zZmVycmVkLFxuICAgICAgb25MZWZ0T3JnOiBtZXJnZWQub25MZWZ0T3JnLFxuICAgICAgb25PcmdEZWxldGVkOiBtZXJnZWQub25PcmdEZWxldGVkLFxuICAgICAgb25PcmdDcmVhdGVkOiBtZXJnZWQub25PcmdDcmVhdGVkLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAoY2FwdHVyYWRvIHBhcmEgbGxhbWFkYXMgbm8tcmVhY3RpdmFzKS4gKi9cbiAgcHJpdmF0ZSBnZXQgbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2U7XG4gIH1cblxuICByZWFkb25seSBvcmcgPSBzaWduYWw8T3JnYW5pemF0aW9uIHwgbnVsbD4obnVsbCk7XG4gIC8qKiBMb2dvIGRlIG9yZyBxdWUgZmFsbMOzIGFsIGNhcmdhciDihpIgb2N1bHRhIGVsIGJsb3F1ZSAoY2FlIGEgbGEgY2FyZCBzaW4gbG9nbykuICovXG4gIHJlYWRvbmx5IGxvZ29GYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbGVhdmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHBlcm1pc3Npb25zT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGNyZWF0ZU9yZ01vZGFsT3BlbiA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3JnTG9hZEVycm9yID0gc2lnbmFsPHVua25vd24+KG51bGwpO1xuXG4gIHJlYWRvbmx5IG9yZ0Vycm9yU3RhdGUgPSBjb21wdXRlZDxFbXB0eVN0YXRlTWV0YWRhdGEgfCBudWxsPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBlcnIgPSB0aGlzLm9yZ0xvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZVRpdGxlJyksIGVycm9yOiB0aGlzLnR0KCdlcnJvclRpdGxlJykgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVIaW50JyksXG4gICAgICAgIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50dCgncmV0cnknKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMubG9hZE9yZygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubG9hZGluZygpLFxuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSBtZW1iZXJzID0gc2lnbmFsPE1lbWJlckRldGFpbFtdPihbXSk7XG4gIHJlYWRvbmx5IG1lbWJlcnNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZW1iZXJzTG9hZEVycm9yID0gc2lnbmFsPHVua25vd24+KG51bGwpO1xuXG4gIHJlYWRvbmx5IG1lbWJlcnNFcnJvclN0YXRlID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhIHwgbnVsbD4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgZXJyID0gdGhpcy5tZW1iZXJzTG9hZEVycm9yKCk7XG4gICAgaWYgKCFlcnIpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCB7XG4gICAgICB0aXRsZTogeyBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lVGl0bGUnKSwgZXJyb3I6IHRoaXMudHQoJ2Vycm9yVGl0bGUnKSB9LFxuICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZUhpbnQnKSxcbiAgICAgICAgZXJyb3I6IGludGVycHJldEVycm9yKGVycikubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICByZXRyeUxhYmVsOiB0aGlzLnR0KCdyZXRyeScpLFxuICAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5sb2FkTWVtYmVycygpLFxuICAgICAgcmV0cnlpbmc6IHRoaXMubWVtYmVyc0xvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWVtYmVyc05leHRUb2tlbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZ01vcmVNZW1iZXJzID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgc2hvd0FsbE1lbWJlcnMgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSB2aXNpYmxlTWVtYmVycyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLnNob3dBbGxNZW1iZXJzKCkgPyB0aGlzLm1lbWJlcnMoKSA6IHRoaXMubWVtYmVycygpLnNsaWNlKDAsIDMpKSk7XG4gIHJlYWRvbmx5IHRyYW5zZmVycmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRlbGV0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgYXZhaWxhYmxlUm9sZXMgPSBzaWduYWw8T3JnUm9sZVtdPihTWVNURU1fUk9MRV9ERUZBVUxUUyk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnSWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC51c2VyKCkgYXMge1xuICAgICAgYWN0aXZlT3JnSWQ/OiBzdHJpbmc7XG4gICAgICBhY3RpdmVPcmc/OiBzdHJpbmc7XG4gICAgfSB8IG51bGw7XG4gICAgcmV0dXJuIHU/LmFjdGl2ZU9yZ0lkID8/IHU/LmFjdGl2ZU9yZyA/PyAnJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdXNlcklkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdXRoLnVzZXIoKT8udXNlcklkID8/ICcnKTtcblxuICByZWFkb25seSBpc093bmVyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG8gPSB0aGlzLm9yZygpO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMudXNlcklkKCk7XG4gICAgcmV0dXJuICEhbyAmJiAhIXVpZCAmJiBvLm93bmVySWQgPT09IHVpZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY2FuRWRpdE9yZyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNPd25lcigpIHx8IHRoaXMuYXV0aC5oYXNQZXJtaXNzaW9uKCdvcmc6bWFuYWdlJykpO1xuXG4gIHJlYWRvbmx5IGNhbk1hbmFnZU1lbWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNPd25lcigpKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCB1aWQgPSB0aGlzLnVzZXJJZCgpO1xuICAgIGNvbnN0IG1lID0gdGhpcy5tZW1iZXJzKCkuZmluZChtID0+IG0udXNlcklkID09PSB1aWQpO1xuICAgIGlmICghbWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gbWUucm9sZXMuc29tZShyID0+IHIgPT09ICdhZG1pbicgfHwgciA9PT0gJ3N1cGVyX2FkbWluJyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VUaXRsZScpKTtcbiAgcmVhZG9ubHkgcGFnZURlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZURlc2NyaXB0aW9uJykpO1xuXG4gIHJlYWRvbmx5IHBsYW5MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwbGFuID0gdGhpcy5vcmcoKT8ucGxhbjtcbiAgICBpZiAocGxhbiA9PT0gJ3BybycpIHJldHVybiB0aGlzLnR0KCdwbGFuUHJvJyk7XG4gICAgaWYgKHBsYW4gPT09ICdlbnRlcnByaXNlJykgcmV0dXJuIHRoaXMudHQoJ3BsYW5FbnRlcnByaXNlJyk7XG4gICAgcmV0dXJuIHRoaXMudHQoJ3BsYW5GcmVlJyk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN3aXRjaE9yZ1NlY3Rpb25Qcm9wcyA9IGNvbXB1dGVkPFNlY3Rpb25IZWFkZXJNZXRhZGF0YT4oKCkgPT4gKHtcbiAgICB0aXRsZTogdGhpcy5wYWdlVGl0bGUoKSxcbiAgICB0aXRsZVNpemU6ICdwYWdlJyxcbiAgICBhY3Rpb246IHtcbiAgICAgIHRleHQ6IHRoaXMudHQoJ3N3aXRjaE9yZ0N0YScpLFxuICAgICAgaWNvbjogeyBuYW1lOiAnc3dhcC1ob3Jpem9udGFsLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0b2tlbjogJ29yZy1zd2l0Y2gnLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH0sXG4gICAgaW5mb0xpbms6IHsgbGFiZWw6IHRoaXMudHQoJ29yZ3NNb3JlSW5mbycpLCB0b2tlbjogJ29yZy1tb3JlLWluZm8nIH0sXG4gIH0pKTtcblxuICByZWFkb25seSBlZGl0QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdlZGl0Q3RhJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ3NtYWxsJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGxlYXZlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdsZWF2ZUN0YScpLFxuICAgIHRva2VuOiAnb3JnLWxlYXZlJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMuaXNPd25lcigpIHx8IHRoaXMubGVhdmluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0cmFuc2ZlcmFibGVNZW1iZXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tZW1iZXJzKCkuZmlsdGVyKG0gPT4gbS51c2VySWQgIT09IHRoaXMudXNlcklkKCkpKTtcblxuICByZWFkb25seSB2aWV3UGVybWlzc2lvbnNCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3JvbGVzVmlld1Blcm1zJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnb3JnLXZpZXctcGVybWlzc2lvbnMnLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNmZXJCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3RyYW5zZmVyQ3RhJyksXG4gICAgdG9rZW46ICdvcmctdHJhbnNmZXItc3VibWl0JyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMudHJhbnNmZXJyaW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5JbnZpdGVCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2ludml0ZU9wZW4nKSxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgb3BlbkltcG9ydEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnaW1wb3J0T3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5BcGlLZXlzQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzT3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGRlbGV0ZUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnZGVsZXRlQ3RhJyksXG4gICAgdG9rZW46ICdvcmctZGVsZXRlJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMuZGVsZXRpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgbmV3T3JnQ3RhUHJvcHMgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzTmV3UXVlc3Rpb24nKSxcbiAgICBkZXNjcmlwdGlvbjogdGhpcy50dCgnb3Jnc05ld0hpbnQnKSxcbiAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTRweCcsXG4gICAgYWN0aW9uczoge1xuICAgICAgcG9zaXRpb246ICdyaWdodCcsXG4gICAgICBjb2x1bW5lZDogZmFsc2UsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzTmV3Q3RhJyksXG4gICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBzdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgICAgIHRva2VuOiAnb3JnLW5ldycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0gYXMgQnV0dG9uR3JvdXBNZXRhZGF0YSxcbiAgfSkpO1xuXG4gIC8qKiBHdWFyZGEgcGFyYSBkZXRlY3RhciBlbCBwcmltZXIgZGlzcGFybyBkZWwgZWZmZWN0IChldml0YSBkb2JsZSBjYXJnYSkuICovXG4gIHByaXZhdGUgbGFzdExvYWRlZE9yZ0lkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBucyA9IHRoaXMubnM7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMobnMsIE9SR0FOSVpBVElPTl9WSUVXX0kxOE4pO1xuICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIG5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuXG4gICAgLy8gQXV0by1yZWxvYWQgZW4gb3JnLXN3aXRjaDogcmVhY2Npb25hIGEgYWN0aXZlT3JnSWQoKSB5IHJlY2FyZ2Egb3JnICsgbWllbWJyb3NcbiAgICAvLyBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZGUgb3JnYW5pemFjacOzbiBhY3RpdmEgbWllbnRyYXMgbGEgdmlzdGEgZXN0w6FcbiAgICAvLyBtb250YWRhLiBDdWJyZSB0YW1iacOpbiBsYSBjYXJnYSBpbmljaWFsIOKAlCBgbGFzdExvYWRlZE9yZ0lkYCBldml0YSByZWNhcmdhclxuICAgIC8vIGRvcyB2ZWNlcyBlbCBtaXNtbyBpZCAocC5lai4gc2kgZWwgZWZmZWN0IHJlLWNvcnJlIHBvciBvdHJhIGRlcGVuZGVuY2lhKS5cbiAgICAvLyBgYWxsb3dTaWduYWxXcml0ZXNgIHBvcnF1ZSBsYXMgbG9hZCBmbnMgZXNjcmliZW4gc2lnbmFscyBzw61uY3JvbmFtZW50ZVxuICAgIC8vIChsb2FkaW5nL2Vycm9yL3Rva2VuKSDigJQgQW5ndWxhciAxOCBibG9xdWVhIHdyaXRlcyBlbiBlZmZlY3Qgc2luIGVsIGZsYWcuXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICAgICAgaWYgKG9yZ0lkID09PSB0aGlzLmxhc3RMb2FkZWRPcmdJZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmxhc3RMb2FkZWRPcmdJZCA9IG9yZ0lkO1xuICAgICAgICB0aGlzLmxvYWRPcmcoKTtcbiAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICB0aGlzLmxvYWRSb2xlcygpO1xuICAgICAgfSxcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICk7XG5cbiAgICBjb25uZWN0UGFnZVJlZnJlc2goYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZE9yZygpLCB0aGlzLmxvYWRNZW1iZXJzKCldKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRWRpdCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IEVkaXRPcmdNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG9yZzogdGhpcy5vcmcoKSxcbiAgICAgICAgb25TdWNjZXNzOiAodXBkYXRlZDogT3JnYW5pemF0aW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmcuc2V0KHVwZGF0ZWQpO1xuICAgICAgICAgIHRoaXMub3JnU3dpdGNoLm5vdGlmeU9yZ0RhdGFVcGRhdGVkKHVwZGF0ZWQpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk9yZ0VkaXRlZD8uKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25MZWF2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc093bmVyKCkgfHwgdGhpcy5sZWF2aW5nKCkpIHJldHVybjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2cuY29uZmlybURlc3RydWN0aXZlKHtcbiAgICAgIHRpdGxlOiB0aGlzLnR0KCdsZWF2ZVRpdGxlJyksXG4gICAgICBtZXNzYWdlOiB0aGlzLnR0KCdsZWF2ZUNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgnbGVhdmVDdGEnKSB9LFxuICAgICAgY2FuY2VsQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2NhbmNlbEN0YScpIH0sXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQuY29uZmlybWVkKSByZXR1cm47XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMubGVhdmluZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMub3JnU2VydmljZS5sZWF2ZU9yZyhvcmdJZCkpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy50dCgnbGVhdmVTdWNjZXNzJyksXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBjZmcgPSB0aGlzLnJlc29sdmVkQ29uZmlnKCk7XG4gICAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKGNmZy5sZWF2ZVJlZGlyZWN0Um91dGUpO1xuICAgICAgY2ZnLm9uTGVmdE9yZz8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24ubGVhdmUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2xlYXZlRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubGVhdmluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc093bmVyKCkgfHwgdGhpcy5kZWxldGluZygpKSByZXR1cm47XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtRGlhbG9nLmNvbmZpcm1EZXN0cnVjdGl2ZSh7XG4gICAgICB0aXRsZTogdGhpcy50dCgnZGVsZXRlVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2RlbGV0ZUNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgnZGVsZXRlQ3RhJykgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCdjYW5jZWxDdGEnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybjtcbiAgICB0aGlzLmRlbGV0aW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5vcmdTZXJ2aWNlLmRlbGV0ZU9yZyhvcmdJZCkpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHsgbWVzc2FnZTogdGhpcy50dCgnZGVsZXRlU3VjY2VzcycpLCBjb2xvcjogJ2RhcmsnLCBkdXJhdGlvbjogMzUwMCB9KTtcbiAgICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWcoKTtcbiAgICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwoY2ZnLmxlYXZlUmVkaXJlY3RSb3V0ZSk7XG4gICAgICBjZmcub25PcmdEZWxldGVkPy4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ29yZ2FuaXphdGlvbi5kZWxldGUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2RlbGV0ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRlbGV0aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25OZXdPcmcoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVPcmdNb2RhbE9wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcmdDcmVhdGVkKG5ld09yZzogT3JnYW5pemF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGVPcmdNb2RhbE9wZW4uc2V0KGZhbHNlKTtcbiAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25PcmdDcmVhdGVkPy4obmV3T3JnKTtcbiAgfVxuXG4gIG9uT3Blbkludml0ZSgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IEludml0ZU1lbWJlck1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb3JnSWQ6IHRoaXMuYWN0aXZlT3JnSWQoKSxcbiAgICAgICAgZXhpc3RpbmdNZW1iZXJJZHM6IHRoaXMubWVtYmVycygpLm1hcChtID0+IG0udXNlcklkKSxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk1lbWJlckludml0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uT3BlbkltcG9ydCgpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb3JnSWQ6IHRoaXMuYWN0aXZlT3JnSWQoKSxcbiAgICAgICAgYXZhaWxhYmxlUm9sZXM6IHRoaXMuYXZhaWxhYmxlUm9sZXMoKSxcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRDb25maWcoKS5vbk1lbWJlckludml0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uT3BlbkFwaUtleXMoKTogdm9pZCB7XG4gICAgLy8gTGFzIEFQSSBLZXlzIGFob3JhIHZpdmVuIGVuIHN1IHByb3BpYSB2aXN0YSAoYHZhbC1hcGkta2V5cy12aWV3YCk6IGNyZWFyXG4gICAgLy8gYXJyaWJhLCBsaXN0YSBhYmFqbyBjb24gY3JlYWRvci9mZWNoYS4gTmF2ZWdhbW9zIGVuIHZleiBkZSBhYnJpciB1biBtb2RhbC5cbiAgICB0aGlzLm5hdi5uYXZpZ2F0ZUJ5VXJsKHRoaXMucmVzb2x2ZWRDb25maWcoKS5hcGlLZXlzUm91dGUpO1xuICB9XG5cbiAgLy8gXCJNw6FzIGluZm9ybWFjacOzblwiIHNvYnJlIG9yZ2FuaXphY2lvbmVzIOKAlCBtaXNtbyBzaGVldCBleHBsaWNhdGl2byBxdWUgbXVlc3RyYVxuICBvbkhlYWRlckFjdGlvbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRva2VuID09PSAnb3JnLXN3aXRjaCcpIHRoaXMub25Td2l0Y2hPcmcoKTtcbiAgICBlbHNlIGlmICh0b2tlbiA9PT0gJ29yZy1tb3JlLWluZm8nKSB0aGlzLm9uT3JnSW5mbygpO1xuICB9XG5cbiAgLy8gYWNjb3VudC12aWV3IHNpbiBvcmcsIHBlcm8gZGlzcG9uaWJsZSBzaWVtcHJlICh0b2RvIHVzZXIgdGllbmUgb3JnIHBvciBkZWZlY3RvKS5cbiAgb25Td2l0Y2hPcmcoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHtcbiAgICAgIGNvbXBvbmVudDogU3dpdGNoT3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBpMThuTmFtZXNwYWNlOiAnU2V0dGluZ3MuU3dpdGNoT3JnJyxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuODVdLCBpbml0aWFsQnJlYWtwb2ludDogMC44NSwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25PcmdJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ29yZ3NJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXCJNw6FzIGluZm9ybWFjacOzblwiIGRlIGxhIHNlY2Npw7NuIEludGVncmFjaW9uZXMg4oCUIGFicmUgdW4gc2hlZXQgRVhQTElDQVRJVk9cbiAgLy8gKGFydGljbGUtc3R5bGUsIHNpbiBsYXMgZmVhdHVyZS1jYXJkcyBkZSBvcmcpLCBOTyBlbCBtb2RhbCBkZSBnZXN0acOzbiBkZSBBUElcbiAgLy8ga2V5cy4gTGEgZ2VzdGnDs24gc2UgYWJyZSBjb24gZWwgYm90w7NuIFwiR2VzdGlvbmFyXCIgKG9uT3BlbkFwaUtleXMpLlxuICBvbkFwaUtleXNJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHNob3dGZWF0dXJlczogZmFsc2UsXG4gICAgICAgIGZlYXR1cmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWNvbjogJ2NvZGUtc2xhc2gtb3V0bGluZScsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50dCgnYXBpS2V5c0ZlYXR1cmVBdXRvVGl0bGUnKSxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlQXV0b0Rlc2MnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICdzaGllbGQtY2hlY2ttYXJrLW91dGxpbmUnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlUGVybXNUaXRsZScpLFxuICAgICAgICAgICAgZGVzYzogdGhpcy50dCgnYXBpS2V5c0ZlYXR1cmVQZXJtc0Rlc2MnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGljb246ICd3YXJuaW5nLW91dGxpbmUnLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlU2VjcmV0VGl0bGUnKSxcbiAgICAgICAgICAgIGRlc2M6IHRoaXMudHQoJ2FwaUtleXNGZWF0dXJlU2VjcmV0RGVzYycpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ2FwaUtleXNJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25WaWV3UGVybWlzc2lvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5wZXJtaXNzaW9uc09wZW4uc2V0KHRydWUpO1xuICB9XG5cbiAgb25PcGVuVHJhbnNmZXIoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgbWVtYmVyczogdGhpcy50cmFuc2ZlcmFibGVNZW1iZXJzKCksXG4gICAgICAgIG9uQ29uZmlybTogKG5ld093bmVySWQ6IHN0cmluZykgPT4gdm9pZCB0aGlzLm9uVHJhbnNmZXIobmV3T3duZXJJZCksXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25UcmFuc2ZlcihuZXdPd25lcklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5ld093bmVySWQgfHwgdGhpcy50cmFuc2ZlcnJpbmcoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybURpYWxvZy5jb25maXJtRGVzdHJ1Y3RpdmUoe1xuICAgICAgdGl0bGU6IHRoaXMudHQoJ3RyYW5zZmVyVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyQ29uZmlybScpLFxuICAgICAgY29uZmlybUJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCd0cmFuc2ZlckN0YScpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50dCgnY2FuY2VsQ3RhJykgfSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdC5jb25maXJtZWQpIHJldHVybjtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy50cmFuc2ZlcnJpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UudHJhbnNmZXJPd25lcnNoaXAob3JnSWQsIG5ld093bmVySWQpKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyU3VjY2VzcycpLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBkdXJhdGlvbjogMzUwMCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkT3JnKCk7XG4gICAgICB0aGlzLmxvYWRNZW1iZXJzKCk7XG4gICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25Pd25lcnNoaXBUcmFuc2ZlcnJlZD8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24udHJhbnNmZXInLFxuICAgICAgICBmYWxsYmFja0tleTogJ3RyYW5zZmVyRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNmZXJyaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3JnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3JnTG9hZEVycm9yLnNldChudWxsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnKG9yZ0lkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBvcmcgPT4ge1xuICAgICAgICAgIHRoaXMubG9nb0ZhaWxlZC5zZXQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMub3JnLnNldChvcmcpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdMb2FkRXJyb3Iuc2V0KGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkTWVtYmVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0FsbE1lbWJlcnMuc2V0KGZhbHNlKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnTWVtYmVycyhvcmdJZCwgeyBsaW1pdDogMjAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnMuc2V0KGNhcmRzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgICAgaWYgKHJlcy5yb2xlRGlzcGxheU5hbWVzKSB0aGlzLm1lcmdlUm9sZURpc3BsYXlOYW1lcyhyZXMucm9sZURpc3BsYXlOYW1lcyk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRNb3JlTWVtYmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVtYmVyc05leHRUb2tlbigpO1xuICAgIGlmICghb3JnSWQgfHwgIXRva2VuIHx8IHRoaXMubG9hZGluZ01vcmVNZW1iZXJzKCkpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZ01lbWJlcnMob3JnSWQsIHsgbGltaXQ6IDIwLCBuZXh0VG9rZW46IHRva2VuIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyByZXMgPT4ge1xuICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy5tZW1iZXJzLnVwZGF0ZShwcmV2ID0+IFsuLi5wcmV2LCAuLi5jYXJkc10pO1xuICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgIHRoaXMubG9hZGluZ01vcmVNZW1iZXJzLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLmxvYWRNb3JlTWVtYmVycycsXG4gICAgICAgICAgZmFsbGJhY2tLZXk6ICdtZW1iZXJzRXJyb3InLFxuICAgICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5yaWNoV2l0aFByb2ZpbGVzKG1lbWJlcnM6IE9yZ01lbWJlcltdKTogUHJvbWlzZTxNZW1iZXJEZXRhaWxbXT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBtZW1iZXJzLm1hcChhc3luYyBtID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gYXdhaXQgZ2V0RG9jKGRvYyh0aGlzLmZpcmVzdG9yZSwgYHByb2ZpbGVzLyR7bS51c2VySWR9YCkpO1xuICAgICAgICAgIGNvbnN0IHAgPSBzbmFwLmV4aXN0cygpID8gc25hcC5kYXRhKCkgOiB7fTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGhhbmRsZTogcFsnaGFuZGxlJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXZhdGFyOiAocFsnYXZhdGFyVXJsJ10gPz8gcFsnYXZhdGFyJ10pIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5hbWU6IChwWyduYW1lJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSB8fCBtLm5hbWUsXG4gICAgICAgICAgfSBhcyBNZW1iZXJEZXRhaWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBtIGFzIE1lbWJlckRldGFpbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLm1hcChyID0+IChyLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgPyByLnZhbHVlIDogKHt9IGFzIE1lbWJlckRldGFpbCkpKTtcbiAgfVxuXG4gIGxvYWRSb2xlcygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJvbGVzID0+IHtcbiAgICAgICAgaWYgKHJvbGVzLmxlbmd0aCkgdGhpcy5hdmFpbGFibGVSb2xlcy5zZXQocm9sZXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJvbGVMYWJlbChyb2xlSWRPck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVSb2xlTGFiZWxGcm9tTGlzdChyb2xlSWRPck5hbWUsIHRoaXMuYXZhaWxhYmxlUm9sZXMoKSwgdGhpcy5pMThuLmxhbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUm9sZURpc3BsYXlOYW1lcyhkaXNwbGF5TmFtZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KTogdm9pZCB7XG4gICAgdGhpcy5hdmFpbGFibGVSb2xlcy51cGRhdGUocm9sZXMgPT4ge1xuICAgICAgY29uc3QgYnlOYW1lID0gbmV3IE1hcChyb2xlcy5tYXAociA9PiBbci5uYW1lLCByXSkpO1xuICAgICAgZm9yIChjb25zdCBbcm9sZU5hbWUsIGxhYmVsc10gb2YgT2JqZWN0LmVudHJpZXMoZGlzcGxheU5hbWVzKSkge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGJ5TmFtZS5nZXQocm9sZU5hbWUpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICBpZiAoIWV4aXN0aW5nLmRpc3BsYXlOYW1lKSBieU5hbWUuc2V0KHJvbGVOYW1lLCB7IC4uLmV4aXN0aW5nLCBkaXNwbGF5TmFtZTogbGFiZWxzIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ5TmFtZS5zZXQocm9sZU5hbWUsIHsgaWQ6IHJvbGVOYW1lLCBuYW1lOiByb2xlTmFtZSwgZGlzcGxheU5hbWU6IGxhYmVscyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oYnlOYW1lLnZhbHVlcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uVmlld01lbWJlcihtZW1iZXI6IE1lbWJlckRldGFpbCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogTWVtYmVyRGV0YWlsTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBtZW1iZXIsXG4gICAgICAgIG9yZ0lkOiB0aGlzLmFjdGl2ZU9yZ0lkKCksXG4gICAgICAgIGF2YWlsYWJsZVJvbGVzOiB0aGlzLmF2YWlsYWJsZVJvbGVzKCksXG4gICAgICAgIGNhbk1hbmFnZTogdGhpcy5jYW5NYW5hZ2VNZW1iZXJzKCkgJiYgbWVtYmVyLnVzZXJJZCAhPT0gdGhpcy51c2VySWQoKSxcbiAgICAgICAgaXNTZWxmOiBtZW1iZXIudXNlcklkID09PSB0aGlzLnVzZXJJZCgpLFxuICAgICAgICBvbkNoYW5nZWQ6ICgpID0+IHRoaXMubG9hZE1lbWJlcnMoKSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG59XG4iXX0=