@gnggln/ng-ui-system 1.0.0-alpha.21 → 1.0.0-alpha.22

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 (45) hide show
  1. package/crud-table/lib/components/form-builder/types/schema.types.d.ts +20 -0
  2. package/crud-table/lib/core/logging/logger.service.d.ts +1 -1
  3. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +1 -1
  4. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +1 -1
  5. package/esm2022/crud-table/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +1 -1
  6. package/esm2022/crud-table/lib/components/form-builder/types/schema.types.mjs +1 -1
  7. package/esm2022/crud-table/lib/core/logging/logger.service.mjs +1 -1
  8. package/esm2022/form-builder/lib/components/form-builder/form-wizard.component.mjs +105 -18
  9. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +1 -1
  10. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +1 -1
  11. package/esm2022/form-builder/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +1 -1
  12. package/esm2022/form-builder/lib/components/form-builder/types/index.mjs +1 -1
  13. package/esm2022/form-builder/lib/components/form-builder/types/schema.types.mjs +1 -1
  14. package/esm2022/form-builder/lib/core/logging/logger.service.mjs +1 -1
  15. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +1 -1
  16. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +1 -1
  17. package/esm2022/form-builder-editor/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +1 -1
  18. package/esm2022/form-builder-editor/lib/components/form-builder/types/index.mjs +1 -1
  19. package/esm2022/form-builder-editor/lib/components/form-builder/types/schema.types.mjs +1 -1
  20. package/esm2022/form-builder-editor/lib/core/logging/logger.service.mjs +1 -1
  21. package/esm2022/lib/components/form-builder/form-wizard.component.mjs +105 -18
  22. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-number-field.component.mjs +1 -1
  23. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-radio-field.component.mjs +1 -1
  24. package/esm2022/lib/components/form-builder/sub-components/form-fields/form-select-field.component.mjs +1 -1
  25. package/esm2022/lib/components/form-builder/types/index.mjs +1 -1
  26. package/esm2022/lib/components/form-builder/types/schema.types.mjs +1 -1
  27. package/esm2022/lib/core/logging/logger.service.mjs +1 -1
  28. package/fesm2022/gnggln-ng-ui-system-crud-table.mjs.map +1 -1
  29. package/fesm2022/gnggln-ng-ui-system-form-builder-editor.mjs.map +1 -1
  30. package/fesm2022/gnggln-ng-ui-system-form-builder.mjs +104 -17
  31. package/fesm2022/gnggln-ng-ui-system-form-builder.mjs.map +1 -1
  32. package/fesm2022/gnggln-ng-ui-system.mjs +104 -17
  33. package/fesm2022/gnggln-ng-ui-system.mjs.map +1 -1
  34. package/form-builder/lib/components/form-builder/form-wizard.component.d.ts +10 -1
  35. package/form-builder/lib/components/form-builder/types/index.d.ts +1 -1
  36. package/form-builder/lib/components/form-builder/types/schema.types.d.ts +20 -0
  37. package/form-builder/lib/core/logging/logger.service.d.ts +1 -1
  38. package/form-builder-editor/lib/components/form-builder/types/index.d.ts +1 -1
  39. package/form-builder-editor/lib/components/form-builder/types/schema.types.d.ts +20 -0
  40. package/form-builder-editor/lib/core/logging/logger.service.d.ts +1 -1
  41. package/lib/components/form-builder/form-wizard.component.d.ts +10 -1
  42. package/lib/components/form-builder/types/index.d.ts +1 -1
  43. package/lib/components/form-builder/types/schema.types.d.ts +20 -0
  44. package/lib/core/logging/logger.service.d.ts +1 -1
  45. package/package.json +30 -30
@@ -715,6 +715,69 @@ export class UiFormWizardComponent {
715
715
  await this.wizardConfig.onStepSave(data, this.state.currentStep);
716
716
  }
717
717
  }
718
+ /**
719
+ * Scansiona gli step in ordine, marca come completati quelli validi rispetto alle
720
+ * stesse regole di Next/Completa e posiziona il wizard sul primo step non valido
721
+ * (o sull'ultimo se tutti validi). Utile dopo il preload di `initialData` in edit.
722
+ */
723
+ async resumeCompletedStepsFromValidation(options) {
724
+ const emitStepComplete = options?.emitStepComplete ?? false;
725
+ const emitStepSave = options?.emitStepSave ?? false;
726
+ if (!this.schema || this.state.totalSteps <= 0) {
727
+ return { lastCompletedStep: -1, currentStep: 0 };
728
+ }
729
+ this.logger?.logWizardAction('resume', {
730
+ wizardId: this.wizardConfig?.wizardId,
731
+ schemaId: this.schema.id,
732
+ totalSteps: this.state.totalSteps,
733
+ });
734
+ const completed = new Set();
735
+ let lastCompletedStep = -1;
736
+ let targetStep = 0;
737
+ for (let i = 0; i < this.state.totalSteps; i++) {
738
+ const ready = await this.prepareStepForValidation(i);
739
+ if (!ready) {
740
+ targetStep = i;
741
+ break;
742
+ }
743
+ const valid = await this.validateCurrentStep({
744
+ emitStepComplete,
745
+ emitStepValidationFailed: false,
746
+ });
747
+ if (!valid) {
748
+ targetStep = i;
749
+ break;
750
+ }
751
+ completed.add(i);
752
+ lastCompletedStep = i;
753
+ targetStep = i;
754
+ this.accumulatedData = {
755
+ ...this.accumulatedData,
756
+ ...(this.formBuilder?.getFormValue() || {}),
757
+ };
758
+ if (emitStepSave) {
759
+ await this.autoSaveIfNeeded();
760
+ }
761
+ }
762
+ this.state.completedSteps = completed;
763
+ for (let v = 0; v <= targetStep; v++) {
764
+ this.state.visitedSteps.add(v);
765
+ }
766
+ if (this.state.currentStep !== targetStep) {
767
+ this.navigateToStep(targetStep);
768
+ }
769
+ else {
770
+ this.syncWizardState();
771
+ this.cdr.markForCheck();
772
+ }
773
+ this.logger?.logWizardAction('resumeComplete', {
774
+ wizardId: this.wizardConfig?.wizardId,
775
+ lastCompletedStep,
776
+ currentStep: targetStep,
777
+ completedSteps: Array.from(completed),
778
+ });
779
+ return { lastCompletedStep, currentStep: targetStep };
780
+ }
718
781
  // ─── Callback form builder ─────────────────────────────────────
719
782
  onValueChange(data) {
720
783
  this.accumulatedData = { ...this.accumulatedData, ...data };
@@ -755,7 +818,9 @@ export class UiFormWizardComponent {
755
818
  this.syncWizardState();
756
819
  this.cdr.markForCheck();
757
820
  }
758
- async validateCurrentStep() {
821
+ async validateCurrentStep(options) {
822
+ const emitStepComplete = options?.emitStepComplete ?? true;
823
+ const emitStepValidationFailed = options?.emitStepValidationFailed ?? true;
759
824
  this.formBuilder?.validateAllFields();
760
825
  const group = this.wizardStepGroups[this.state.currentStep];
761
826
  const primary = group?.[0];
@@ -769,10 +834,12 @@ export class UiFormWizardComponent {
769
834
  if (customFnName && this.customValidationMethods[customFnName]) {
770
835
  const customValid = await this.customValidationMethods[customFnName](this.accumulatedData, this.state.currentStep, isFormValid);
771
836
  if (!customValid) {
772
- this.stepValidationFailed.emit({
773
- step: this.state.currentStep,
774
- errors: ['Validazione custom fallita'],
775
- });
837
+ if (emitStepValidationFailed) {
838
+ this.stepValidationFailed.emit({
839
+ step: this.state.currentStep,
840
+ errors: ['Validazione custom fallita'],
841
+ });
842
+ }
776
843
  return false;
777
844
  }
778
845
  }
@@ -787,23 +854,43 @@ export class UiFormWizardComponent {
787
854
  step: this.state.currentStep,
788
855
  errors,
789
856
  });
790
- this.stepValidationFailed.emit({
857
+ if (emitStepValidationFailed) {
858
+ this.stepValidationFailed.emit({
859
+ step: this.state.currentStep,
860
+ errors,
861
+ });
862
+ }
863
+ return false;
864
+ }
865
+ if (emitStepComplete) {
866
+ this.logger?.logWizardAction('stepComplete', {
867
+ wizardId: this.wizardConfig.wizardId,
791
868
  step: this.state.currentStep,
792
- errors,
869
+ schemaId: this.schema?.id,
870
+ });
871
+ this.stepComplete.emit({
872
+ step: this.state.currentStep,
873
+ data: this.formBuilder?.getFormValue() || {},
793
874
  });
794
- return false;
795
875
  }
796
- this.logger?.logWizardAction('stepComplete', {
797
- wizardId: this.wizardConfig.wizardId,
798
- step: this.state.currentStep,
799
- schemaId: this.schema?.id,
800
- });
801
- this.stepComplete.emit({
802
- step: this.state.currentStep,
803
- data: this.formBuilder?.getFormValue() || {},
804
- });
805
876
  return true;
806
877
  }
878
+ /** Naviga allo step e attende il mount del form builder per la validazione resume. */
879
+ async prepareStepForValidation(stepIndex) {
880
+ this.navigateToStep(stepIndex);
881
+ return this.waitForFormBuilderReady();
882
+ }
883
+ async waitForFormBuilderReady(maxAttempts = 30) {
884
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
885
+ this.cdr.detectChanges();
886
+ if (this.formBuilder) {
887
+ await Promise.resolve();
888
+ return true;
889
+ }
890
+ await new Promise((resolve) => setTimeout(resolve, 0));
891
+ }
892
+ return false;
893
+ }
807
894
  /**
808
895
  * Raggruppa le sezioni con `wizardStep` per `stepNumber` (ordine stabile per numero, poi ordine di apparizione nello schema).
809
896
  */
@@ -1061,4 +1148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
1061
1148
  type: HostListener,
1062
1149
  args: ['document:keydown', ['$event']]
1063
1150
  }] } });
1064
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS13aXphcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvZm9ybS13aXphcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWdCbEUsT0FBTyxFQUNMLG1CQUFtQixHQUVwQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBRXBFLHFFQUFxRTtBQUVyRTs7O0dBR0c7QUFnSEgsTUFBTSxPQUFPLHVCQUF1QjtJQS9HcEM7UUFpSFcsZUFBVSxHQUFzQixFQUFFLENBQUM7UUFFbkMsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNyQyxpRkFBaUY7UUFDeEUsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRTdCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBaUJuRDtJQWZDLG1HQUFtRztJQUNuRyx3QkFBd0IsQ0FBQyxTQUFpQjtRQUN4QyxJQUFJ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QUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFJSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkF3SlAsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIFZpZXdDaGlsZCxcclxuICBpbmplY3QsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMdWNpZGVBbmd1bGFyTW9kdWxlIH0gZnJvbSAnbHVjaWRlLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVWlCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2J1dHRvbi9pbmRleCc7XHJcblxyXG5pbXBvcnQgeyBVaUZvcm1CdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9mb3JtLWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBVaUZvcm1TY2hlbWEsXHJcbiAgVWlGb3JtU2VjdGlvbixcclxuICBVaUZvcm1EYXRhLFxyXG4gIFVpV2l6YXJkQ29uZmlnLFxyXG4gIFVpV2l6YXJkU3RhdGUsXHJcbiAgVWlXaXphcmRTdGVwQ2hhbmdlRXZlbnQsXHJcbiAgVWlXaXphcmRTdGVwQ29tcGxldGVFdmVudCxcclxuICBVaVdpemFyZFZhbGlkYXRpb25GbixcclxuICBVaUZvcm1DdXN0b21FdmVudCxcclxufSBmcm9tICcuL3R5cGVzL3NjaGVtYS50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgVWlGb3JtRXJyb3JEZXRhaWwsXHJcbiAgVWlGb3JtVmFsaWRhdGlvblN0YXRlLFxyXG59IGZyb20gJy4vdHlwZXMvdmFsaWRhdGlvbi50eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgVWlXaXphcmRTeW5jU2VydmljZSxcclxuICBVaVdpemFyZFN5bmNEYXRhLFxyXG59IGZyb20gJy4vc2VydmljZXMvd2l6YXJkLXN5bmMuc2VydmljZSc7XHJcbmltcG9ydCB7IFVpTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvbG9nZ2luZy9sb2dnZXIuc2VydmljZSc7XHJcblxyXG4vLyDilIDilIDilIAgQ29tcG9uZW50aSBpbnRlcm5pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuLyoqXHJcbiAqIEhlYWRlciBkZWwgd2l6YXJkOiBwcm9ncmVzc28gZSBpbmZvIGRlbGxvIHN0ZXAgY29ycmVudGUuXHJcbiAqIENvbiBgcHJvZ3Jlc3NTdHlsZTogJ3N0ZXBzJ2AgZW1ldHRlIGBzdGVwU2VsZWN0YCBwZXIgc2FsdGFyZSBhIHVubyBzdGVwIGdpw6AgY29tcGxldGF0by5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktd2l6YXJkLWhlYWRlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTHVjaWRlQW5ndWxhck1vZHVsZV0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19oZWFkZXJcIj5cclxuICAgICAgQGlmIChjb25maWcuc2hvd1Byb2dyZXNzICE9PSBmYWxzZSkge1xyXG4gICAgICAgIEBpZiAoY29uZmlnLnByb2dyZXNzU3R5bGUgIT09ICdzdGVwcycpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fcHJvZ3Jlc3MtYmFyXCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19wcm9ncmVzcy1maWxsXCJcclxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJwcm9ncmVzc1BlcmNlbnRcIlxyXG4gICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWktZm9ybS13aXphcmRfX3Byb2dyZXNzLXRleHRcIj5cclxuICAgICAgICAgICAge3sgcHJvZ3Jlc3NQZXJjZW50IH19JSBjb21wbGV0YXRvXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXBzXCI+XHJcbiAgICAgICAgICAgIEBmb3IgKFxyXG4gICAgICAgICAgICAgIGdyb3VwIG9mIHN0ZXBHcm91cHM7XHJcbiAgICAgICAgICAgICAgdHJhY2sgJGluZGV4O1xyXG4gICAgICAgICAgICAgIGxldCBpID0gJGluZGV4XHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXBcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnVpLWZvcm0td2l6YXJkX19zdGVwLS1jdXJyZW50XT1cIlxyXG4gICAgICAgICAgICAgICAgICBpID09PSBzdGF0ZS5jdXJyZW50U3RlcFxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy51aS1mb3JtLXdpemFyZF9fc3RlcC0tY29tcGxldGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICBzdGF0ZS5jb21wbGV0ZWRTdGVwcy5oYXMoaSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MudWktZm9ybS13aXphcmRfX3N0ZXAtLXZpc2l0ZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0YXRlLnZpc2l0ZWRTdGVwcy5oYXMoaSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MudWktZm9ybS13aXphcmRfX3N0ZXAtLW5hdmlnYWJsZV09XCJcclxuICAgICAgICAgICAgICAgICAgaXNTdGVwSW5kaWNhdG9yTmF2aWdhYmxlKGkpXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBpZiAoaXNTdGVwSW5kaWNhdG9yTmF2aWdhYmxlKGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLXRyaWdnZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdGVwQXJpYUxhYmVsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cFswXS53aXphcmRTdGVwPy5zdGVwVGl0bGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFswXS50aXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTdGVwICcgKyAoaSArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3RlcFNlbGVjdC5lbWl0KGkpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1jaXJjbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc3RhdGUuY29tcGxldGVkU3RlcHMuaGFzKGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsdWNpZGUtaWNvbiBuYW1lPVwiY2hlY2tcIiBbc2l6ZV09XCIxNlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cFswXS53aXphcmRTdGVwPy5zdGVwVGl0bGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFswXS50aXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTdGVwICcgKyAoaSArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1zdGF0aWNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGkgPT09IHN0YXRlLmN1cnJlbnRTdGVwID8gJ3N0ZXAnIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHN0YXRlLmNvbXBsZXRlZFN0ZXBzLmhhcyhpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bHVjaWRlLWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBbMF0ud2l6YXJkU3RlcD8uc3RlcFRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBbMF0udGl0bGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnU3RlcCAnICsgKGkgKyAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWluZm9cIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC10aXRsZVwiPnt7IGN1cnJlbnRTdGVwVGl0bGUgfX08L2gyPlxyXG4gICAgICAgIEBpZiAoY3VycmVudFN0ZXBEZXNjcmlwdGlvbikge1xyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICB7eyBjdXJyZW50U3RlcERlc2NyaXB0aW9uIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtY291bnRlclwiPlxyXG4gICAgICAgICAgUGFzc28ge3sgc3RhdGUuY3VycmVudFN0ZXAgKyAxIH19IGRpIHt7IHN0YXRlLnRvdGFsU3RlcHMgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpV2l6YXJkSGVhZGVyQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBjb25maWchOiBVaVdpemFyZENvbmZpZztcclxuICBASW5wdXQoKSBzdGVwR3JvdXBzOiBVaUZvcm1TZWN0aW9uW11bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHN0YXRlITogVWlXaXphcmRTdGF0ZTtcclxuICBASW5wdXQoKSBwcm9ncmVzc1BlcmNlbnQgPSAwO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRTdGVwVGl0bGUgPSAnJztcclxuICBASW5wdXQoKSBjdXJyZW50U3RlcERlc2NyaXB0aW9uID0gJyc7XHJcbiAgLyoqIFF1YW5kbyB0cnVlLCBpIGJ1bGxldCBzdGVwIG5vbiBzb25vIGludGVyYXR0aXZpIChlcy4gd2l6YXJkIGRpc2FiaWxpdGF0bykuICovXHJcbiAgQElucHV0KCkgZGlzYWJsZVN0ZXBJbmRpY2F0b3JzID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBzdGVwU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIC8qKiBJbmRpY2Ugc3RlcCBzZWxlemlvbmFiaWxlIHRyYW1pdGUgYnVsbGV0L3RpdG9sbyAoc29sbyBzdGVwIGdpw6AgY29tcGxldGF0aSwgbm9uIGlsIGNvcnJlbnRlKS4gKi9cclxuICBpc1N0ZXBJbmRpY2F0b3JOYXZpZ2FibGUoc3RlcEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5hbGxvd1N0ZXBJbmRpY2F0b3JOYXZpZ2F0aW9uID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZVN0ZXBJbmRpY2F0b3JzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5jb25maWcuYWxsb3dCYWNrTmF2aWdhdGlvbiA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHN0ZXBJbmRleCAhPT0gdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCAmJlxyXG4gICAgICB0aGlzLnN0YXRlLmNvbXBsZXRlZFN0ZXBzLmhhcyhzdGVwSW5kZXgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRlc3RvIGFjY2Vzc2liaWxlIHBlciBpbCBwdWxzYW50ZSBzdGVwIChuYXZpZ2F6aW9uZSkuICovXHJcbiAgc3RlcEFyaWFMYWJlbChzdGVwVGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYFZhaSBhbGxvIHN0ZXA6ICR7c3RlcFRpdGxlfWA7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRm9vdGVyIGRlbCB3aXphcmQ6IHB1bHNhbnRpIGRpIG5hdmlnYXppb25lIGUgc2FsdmF0YWdnaW8uXHJcbiAqIEVtZXR0ZSBldmVudGkgcGVyIFByZXZpb3VzLCBOZXh0LCBGaW5pc2gsIFNhdmUuXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLXdpemFyZC1mb290ZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1VpQnV0dG9uQ29tcG9uZW50XSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX2Zvb3RlclwiPlxyXG4gICAgICBAaWYgKFxyXG4gICAgICAgIGNvbmZpZy5hbGxvd0JhY2tOYXZpZ2F0aW9uICE9PSBmYWxzZSAmJiBzdGF0ZS5jdXJyZW50U3RlcCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19uYXYtYWN0aW9uXCI+XHJcbiAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcuYnV0dG9uTGFiZWxzPy5wcmV2aW91cyA/PyAnSW5kaWV0cm8nXCJcclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICBpY29uPVwiY2hldnJvbi1sZWZ0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzLmVtaXQoKVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fbmF2LWhpbnRcIj5DdHJsICsg4oaQPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX2Zvb3Rlci1yaWdodFwiPlxyXG4gICAgICAgIEBpZiAoY29uZmlnLmF1dG9TYXZlICYmIGNvbmZpZy5idXR0b25MYWJlbHM/LnNhdmUpIHtcclxuICAgICAgICAgIDx1aS1idXR0b25cclxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy5idXR0b25MYWJlbHMhLnNhdmUhXCJcclxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2F2ZS5lbWl0KClcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19uYXYtYWN0aW9uXCI+XHJcbiAgICAgICAgICBAaWYgKGlzTGFzdFN0ZXApIHtcclxuICAgICAgICAgICAgPHVpLWJ1dHRvblxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJjb25maWcuYnV0dG9uTGFiZWxzPy5maW5pc2ggPz8gJ0NvbXBsZXRhJ1wiXHJcbiAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgIGljb249XCJjaGVja1wiXHJcbiAgICAgICAgICAgICAgaWNvblBvc2l0aW9uPVwidHJhaWxpbmdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJmaW5pc2guZW1pdCgpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIlxyXG4gICAgICAgICAgICAgICAgY29uZmlnLmJ1dHRvbkxhYmVscz8ubmV4dCA/P1xyXG4gICAgICAgICAgICAgICAgICBjb25maWcuYnV0dG9uTGFiZWxzPy5zdWJtaXQgPz9cclxuICAgICAgICAgICAgICAgICAgJ0F2YW50aSdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICBpY29uPVwiY2hldnJvbi1yaWdodFwiXHJcbiAgICAgICAgICAgICAgaWNvblBvc2l0aW9uPVwidHJhaWxpbmdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuZXh0LmVtaXQoKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19uYXYtaGludFwiPkN0cmwgKyDihpI8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpV2l6YXJkRm9vdGVyQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBjb25maWchOiBVaVdpemFyZENvbmZpZztcclxuICBASW5wdXQoKSBzdGF0ZSE6IFVpV2l6YXJkU3RhdGU7XHJcbiAgQElucHV0KCkgaXNMYXN0U3RlcCA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgcHJldmlvdXMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG5leHQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGZpbmlzaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxufVxyXG5cclxuLy8g4pSA4pSA4pSAIENvbXBvbmVudGUgd2l6YXJkIHByaW5jaXBhbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSB3aXphcmQgY2hlIHdyYXBwYSBgVWlGb3JtQnVpbGRlckNvbXBvbmVudGBcclxuICogYWdnaXVuZ2VuZG8gbmF2aWdhemlvbmUgbXVsdGktc3RlcCwgYmFycmEgZGkgcHJvZ3Jlc3NvLFxyXG4gKiB2YWxpZGF6aW9uZSBwZXIgc3RlcCBlIHNpbmNyb25penphemlvbmUgd2lyZWxlc3MuXHJcbiAqIFBpw7kgc2V6aW9uaSBzY2hlbWEgY29uIGxvIHN0ZXNzbyBgd2l6YXJkU3RlcC5zdGVwTnVtYmVyYCBmb3JtYW5vIHVuIHVuaWNvIHBhc3NvXHJcbiAqIChlcy4gcGnDuSBibG9jY2hpIGNvbGxhc3NhYmlsaSBwZXIgc3RlcCk7IG1ldGFkYXRpIGRlbCBwYXNzbyBkYWxsYSBwcmltYSBzZXppb25lIGRlbCBncnVwcG8uXHJcbiAqXHJcbiAqIEBzZWxlY3RvciB1aS1mb3JtLXdpemFyZFxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDx1aS1mb3JtLXdpemFyZFxyXG4gKiAgIFtzY2hlbWFdPVwid2l6YXJkU2NoZW1hXCJcclxuICogICBbd2l6YXJkQ29uZmlnXT1cIndpemFyZENvbmZpZ1wiXHJcbiAqICAgKHdpemFyZENvbXBsZXRlKT1cIm9uQ29tcGxldGUoJGV2ZW50KVwiXHJcbiAqICAgKHN0ZXBDaGFuZ2UpPVwib25TdGVwQ2hhbmdlKCRldmVudClcIlxyXG4gKiAvPlxyXG4gKiBgYGBcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktZm9ybS13aXphcmQnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTHVjaWRlQW5ndWxhck1vZHVsZSxcclxuICAgIFVpQnV0dG9uQ29tcG9uZW50LFxyXG4gICAgVWlGb3JtQnVpbGRlckNvbXBvbmVudCxcclxuICAgIFVpV2l6YXJkSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgVWlXaXphcmRGb290ZXJDb21wb25lbnQsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICBAaWYgKHNjaGVtYSAmJiB3aXphcmRDb25maWcpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkXCI+XHJcbiAgICAgICAgPCEtLSBIZWFkZXIgd2l6YXJkIChuYXNjb3N0byBzZSB3aXJlbGVzcykgLS0+XHJcbiAgICAgICAgQGlmICghd2l6YXJkQ29uZmlnLndpcmVsZXNzSGVhZGluZykge1xyXG4gICAgICAgICAgPHVpLXdpemFyZC1oZWFkZXJcclxuICAgICAgICAgICAgW2NvbmZpZ109XCJ3aXphcmRDb25maWdcIlxyXG4gICAgICAgICAgICBbc3RlcEdyb3Vwc109XCJ3aXphcmRTdGVwR3JvdXBzXCJcclxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcclxuICAgICAgICAgICAgW3Byb2dyZXNzUGVyY2VudF09XCJwcm9ncmVzc1BlcmNlbnRcIlxyXG4gICAgICAgICAgICBbY3VycmVudFN0ZXBUaXRsZV09XCJjdXJyZW50U3RlcFRpdGxlXCJcclxuICAgICAgICAgICAgW2N1cnJlbnRTdGVwRGVzY3JpcHRpb25dPVwiY3VycmVudFN0ZXBEZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlU3RlcEluZGljYXRvcnNdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAoc3RlcFNlbGVjdCk9XCJvbldpemFyZFN0ZXBJbmRpY2F0b3JTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPCEtLSBOYXZpZ2F6aW9uZSBzb3ByYSBpbCBmb3JtIC0tPlxyXG4gICAgICAgIEBpZiAoc2hvd1RvcE5hdikge1xyXG4gICAgICAgICAgPHVpLXdpemFyZC1mb290ZXJcclxuICAgICAgICAgICAgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fZm9vdGVyIHVpLWZvcm0td2l6YXJkX19mb290ZXItLXRvcFwiXHJcbiAgICAgICAgICAgIFtjb25maWddPVwid2l6YXJkQ29uZmlnXCJcclxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcclxuICAgICAgICAgICAgW2lzTGFzdFN0ZXBdPVwiaXNMYXN0U3RlcFwiXHJcbiAgICAgICAgICAgIChwcmV2aW91cyk9XCJnb1RvUHJldmlvdXNTdGVwKClcIlxyXG4gICAgICAgICAgICAobmV4dCk9XCJnb1RvTmV4dFN0ZXAoKVwiXHJcbiAgICAgICAgICAgIChmaW5pc2gpPVwiZmluaXNoV2l6YXJkKClcIlxyXG4gICAgICAgICAgICAoc2F2ZSk9XCJzYXZlQ3VycmVudFN0ZXAoKVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19jb250ZW50XCI+XHJcbiAgICAgICAgICA8IS0tIEZvcm0gYnVpbGRlciBwZXIgbG8gc3RlcCBjb3JyZW50ZSAtLT5cclxuICAgICAgICAgIDx1aS1mb3JtLWJ1aWxkZXJcclxuICAgICAgICAgICAgW3NjaGVtYV09XCJjdXJyZW50U3RlcFNjaGVtYSFcIlxyXG4gICAgICAgICAgICBbaW5pdGlhbERhdGFdPVwibWVyZ2VkSW5pdGlhbERhdGFGb3JCdWlsZGVyXCJcclxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgW2xvYWRpbmdGb3JdPVwibG9hZGluZ0ZvclwiXHJcbiAgICAgICAgICAgIFtjdXN0b21GaWVsZFRlbXBsYXRlc109XCJjdXN0b21GaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgIFtjdXN0b21GaWVsZFRlbXBsYXRlRmFsbGJhY2tdPVwiY3VzdG9tRmllbGRUZW1wbGF0ZUZhbGxiYWNrXCJcclxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh2YWxpZGF0aW9uQ2hhbmdlKT1cIm9uVmFsaWRhdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGN1c3RvbUV2ZW50KT1cImN1c3RvbUV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIE5hdmlnYXppb25lIHNvdHRvIGlsIGZvcm0gLS0+XHJcbiAgICAgICAgQGlmIChzaG93Qm90dG9tTmF2KSB7XHJcbiAgICAgICAgICA8dWktd2l6YXJkLWZvb3RlclxyXG4gICAgICAgICAgICBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19mb290ZXJcIlxyXG4gICAgICAgICAgICBbY29uZmlnXT1cIndpemFyZENvbmZpZ1wiXHJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXHJcbiAgICAgICAgICAgIFtpc0xhc3RTdGVwXT1cImlzTGFzdFN0ZXBcIlxyXG4gICAgICAgICAgICAocHJldmlvdXMpPVwiZ29Ub1ByZXZpb3VzU3RlcCgpXCJcclxuICAgICAgICAgICAgKG5leHQpPVwiZ29Ub05leHRTdGVwKClcIlxyXG4gICAgICAgICAgICAoZmluaXNoKT1cImZpbmlzaFdpemFyZCgpXCJcclxuICAgICAgICAgICAgKHNhdmUpPVwic2F2ZUN1cnJlbnRTdGVwKClcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICB9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIGAsXHJcbiAgc3R5bGVVcmw6ICcuL2Zvcm0td2l6YXJkLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpRm9ybVdpemFyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB3aXphcmRTeW5jID0gaW5qZWN0KFVpV2l6YXJkU3luY1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KFVpTG9nZ2VyU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChVaUZvcm1CdWlsZGVyQ29tcG9uZW50KSBmb3JtQnVpbGRlcj86IFVpRm9ybUJ1aWxkZXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBJbnB1dCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgLyoqIFNjaGVtYSBjb21wbGV0byBkZWwgZm9ybSAodHV0dGUgbGUgc2V6aW9uaSBjb24gd2l6YXJkU3RlcCkuICovXHJcbiAgQElucHV0KCkgc2NoZW1hITogVWlGb3JtU2NoZW1hO1xyXG5cclxuICAvKiogQ29uZmlndXJhemlvbmUgZGVsIHdpemFyZC4gKi9cclxuICBASW5wdXQoKSB3aXphcmRDb25maWchOiBVaVdpemFyZENvbmZpZztcclxuXHJcbiAgLyoqIE1ldG9kaSBkaSB2YWxpZGF6aW9uZSBjdXN0b20gcGVyIHN0ZXAuICovXHJcbiAgQElucHV0KCkgY3VzdG9tVmFsaWRhdGlvbk1ldGhvZHM6IFJlY29yZDxzdHJpbmcsIFVpV2l6YXJkVmFsaWRhdGlvbkZuPiA9IHt9O1xyXG5cclxuICAvKiogRGF0aSBpbml6aWFsaS4gKi9cclxuICBASW5wdXQoKSBpbml0aWFsRGF0YTogVWlGb3JtRGF0YSA9IHt9O1xyXG5cclxuICAvKiogTW9kYWxpdGEgc29sYSBsZXR0dXJhLiAqL1xyXG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XHJcblxyXG4gIC8qKiBTdGF0byBkaXNhYmlsaXRhdG8uICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFB1bHNhbnRlIGluIGNhcmljYW1lbnRvLiAqL1xyXG4gIEBJbnB1dCgpIGxvYWRpbmdGb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAvKiogVGVtcGxhdGUgcGVyIGNhbXBpIGB0eXBlOiAnY3VzdG9tJ2AgKGlub2x0cm8gYWwgZm9ybSBidWlsZGVyKS4gKi9cclxuICBASW5wdXQoKSBjdXN0b21GaWVsZFRlbXBsYXRlczogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVSZWY8dW5rbm93bj4+ID0ge307XHJcblxyXG4gIC8qKiBGYWxsYmFjayB0ZW1wbGF0ZSBwZXIgY2FtcGkgY3VzdG9tIChpbm9sdHJvIGFsIGZvcm0gYnVpbGRlcikuICovXHJcbiAgQElucHV0KCkgY3VzdG9tRmllbGRUZW1wbGF0ZUZhbGxiYWNrPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBPdXRwdXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIEBPdXRwdXQoKSBzdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVaVdpemFyZFN0ZXBDaGFuZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgc3RlcENvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxVaVdpemFyZFN0ZXBDb21wbGV0ZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBzdGVwVmFsaWRhdGlvbkZhaWxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgc3RlcDogbnVtYmVyO1xyXG4gICAgZXJyb3JzOiBzdHJpbmdbXTtcclxuICB9PigpO1xyXG4gIEBPdXRwdXQoKSB3aXphcmRDb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VWlGb3JtRGF0YT4oKTtcclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFVpRm9ybURhdGE+KCk7XHJcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFVpRm9ybVZhbGlkYXRpb25TdGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgY3VzdG9tRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFVpRm9ybUN1c3RvbUV2ZW50PigpO1xyXG5cclxuICAvLyDilIDilIDilIAgU3RhdG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIHN0YXRlOiBVaVdpemFyZFN0YXRlID0ge1xyXG4gICAgY3VycmVudFN0ZXA6IDAsXHJcbiAgICB0b3RhbFN0ZXBzOiAwLFxyXG4gICAgY29tcGxldGVkU3RlcHM6IG5ldyBTZXQ8bnVtYmVyPigpLFxyXG4gICAgdmlzaXRlZFN0ZXBzOiBuZXcgU2V0PG51bWJlcj4oWzBdKSxcclxuICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgc3RlcEVycm9yczoge30sXHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogR3J1cHBpIGRpIHNlemlvbmkgc2NoZW1hIHBlciBwYXNzbyBsb2dpY28gZGVsIHdpemFyZC5cclxuICAgKiBTZXppb25pIGNvbiBsbyBzdGVzc28gYHdpemFyZFN0ZXAuc3RlcE51bWJlcmAgY29tcG9uZ29ubyB1biB1bmljbyBwYXNzbyAob3JkaW5lOiBjb21lIGluIGBzY2hlbWEuc2VjdGlvbnNgIGRvcG8gc29ydCBwZXIgbnVtZXJvKS5cclxuICAgKi9cclxuICB3aXphcmRTdGVwR3JvdXBzOiBVaUZvcm1TZWN0aW9uW11bXSA9IFtdO1xyXG5cclxuICAvKiogRGF0aSBhY2N1bXVsYXRpIGRlbCBmb3JtLiAqL1xyXG4gIHByaXZhdGUgYWNjdW11bGF0ZWREYXRhOiBVaUZvcm1EYXRhID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjaGVtYSBjYWNoYXRvIHBlciBsbyBzdGVwIGNvcnJlbnRlLlxyXG4gICAqIEV2aXRhIGRpIGNyZWFyZSB1biBudW92byBvZ2dldHRvIGFkIG9nbmkgY2ljbG8gZGkgY2hhbmdlIGRldGVjdGlvbixcclxuICAgKiBjb3NhIGNoZSBjYXVzZXJlYmJlIHJlYnVpbGQgaW5maW5pdGkgbmVsIGZvcm0gYnVpbGRlci5cclxuICAgKi9cclxuICBfY2FjaGVkU3RlcFNjaGVtYTogVWlGb3JtU2NoZW1hIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY2FjaGVkU3RlcEluZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgLy8g4pSA4pSA4pSAIEdldHRlciBjYWxjb2xhdGkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIGdldCBjdXJyZW50U3RlcFNjaGVtYSgpOiBVaUZvcm1TY2hlbWEgfCBudWxsIHtcclxuICAgIC8vIFNlIGxvIHN0ZXAgbm9uIGUgY2FtYmlhdG8sIHJlc3RpdHVpc2NpIGxvIHNjaGVtYSBjYWNoYXRvXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2NhY2hlZFN0ZXBJbmRleCA9PT0gdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCAmJlxyXG4gICAgICB0aGlzLl9jYWNoZWRTdGVwU2NoZW1hXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFN0ZXBTY2hlbWE7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLndpemFyZFN0ZXBHcm91cHNbdGhpcy5zdGF0ZS5jdXJyZW50U3RlcF07XHJcbiAgICBpZiAoIWdyb3VwPy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG5cclxuICAgIHRoaXMuX2NhY2hlZFN0ZXBTY2hlbWEgPSB7XHJcbiAgICAgIGlkOiB0aGlzLnNjaGVtYS5pZCArICctc3RlcC0nICsgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgc2VjdGlvbnM6IGdyb3VwLFxyXG4gICAgICBjb25maWc6IHsgLi4udGhpcy5zY2hlbWEuY29uZmlnLCBoaWRlRm9vdGVyOiB0cnVlLCBzaG93QnV0dG9uczogZmFsc2UgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLl9jYWNoZWRTdGVwSW5kZXggPSB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwO1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFN0ZXBTY2hlbWE7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudFN0ZXBUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcHJpbWFyeSA9IHRoaXMud2l6YXJkU3RlcEdyb3Vwc1t0aGlzLnN0YXRlLmN1cnJlbnRTdGVwXT8uWzBdO1xyXG4gICAgcmV0dXJuIHByaW1hcnk/LndpemFyZFN0ZXA/LnN0ZXBUaXRsZSB8fCBwcmltYXJ5Py50aXRsZSB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50U3RlcERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwcmltYXJ5ID0gdGhpcy53aXphcmRTdGVwR3JvdXBzW3RoaXMuc3RhdGUuY3VycmVudFN0ZXBdPy5bMF07XHJcbiAgICByZXR1cm4gcHJpbWFyeT8ud2l6YXJkU3RlcD8uc3RlcERlc2NyaXB0aW9uIHx8IHByaW1hcnk/LmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTGFzdFN0ZXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCA+PSB0aGlzLnN0YXRlLnRvdGFsU3RlcHMgLSAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2dyZXNzUGVyY2VudCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUudG90YWxTdGVwcyA8PSAxKSByZXR1cm4gMTAwO1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoXHJcbiAgICAgICh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwIC8gKHRoaXMuc3RhdGUudG90YWxTdGVwcyAtIDEpKSAqIDEwMCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRpIHBhc3NhdGkgYWwgZm9ybSBidWlsZGVyOiB1bmlvbmUgdHJhIHZhbG9yaSBmb3JuaXRpIGRhbCBjb25zdW1lciBlXHJcbiAgICogc3RhdG8gYWNjdW11bGF0byB0cmEgZ2xpIHN0ZXAuIFNlbnphIHF1ZXN0bywgdG9ybmFuZG8gaW5kaWV0cm8gaWwgYnVpbGRlclxyXG4gICAqIHJpY2V2ZXJlYmJlIHNvbG8gYGluaXRpYWxEYXRhYCBlIHJpY3JlZXJlYmJlIGkgY2FtcGkgdnVvdGksIHB1ciBhdmVuZG9cclxuICAgKiBpIHZhbG9yaSBhbmNvcmEgaW4gYGFjY3VtdWxhdGVkRGF0YWAuXHJcbiAgICovXHJcbiAgZ2V0IG1lcmdlZEluaXRpYWxEYXRhRm9yQnVpbGRlcigpOiBVaUZvcm1EYXRhIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuaW5pdGlhbERhdGEsIC4uLnRoaXMuYWNjdW11bGF0ZWREYXRhIH07XHJcbiAgfVxyXG5cclxuICAvKiogTW9zdHJhIGxhIG5hdmlnYXppb25lIHNvcHJhIGlsIGZvcm0gYnVpbGRlci4gKi9cclxuICBnZXQgc2hvd1RvcE5hdigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy5zaG93TmF2aWdhdGlvbkJ1dHRvbnMgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBwb3MgPSB0aGlzLndpemFyZENvbmZpZy5uYXZpZ2F0aW9uUG9zaXRpb247XHJcbiAgICByZXR1cm4gcG9zID09PSAndG9wJyB8fCBwb3MgPT09ICdib3RoJztcclxuICB9XHJcblxyXG4gIC8qKiBNb3N0cmEgbGEgbmF2aWdhemlvbmUgc290dG8gaWwgZm9ybSBidWlsZGVyLiAqL1xyXG4gIGdldCBzaG93Qm90dG9tTmF2KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMud2l6YXJkQ29uZmlnLnNob3dOYXZpZ2F0aW9uQnV0dG9ucyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IHBvcyA9IHRoaXMud2l6YXJkQ29uZmlnLm5hdmlnYXRpb25Qb3NpdGlvbjtcclxuICAgIHJldHVybiBwb3MgPT09ICdib3R0b20nIHx8IHBvcyA9PT0gJ2JvdGgnIHx8IHBvcyA9PSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIExpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2NoZW1hKSB7XHJcbiAgICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ2luaXQnLCB7IHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZz8ud2l6YXJkSWQsIGVycm9yOiAnc2NoZW1hIG5vbiBwcmVzZW50ZScgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLndpemFyZFN0ZXBHcm91cHMgPSB0aGlzLmJ1aWxkV2l6YXJkU3RlcEdyb3Vwcyh0aGlzLnNjaGVtYS5zZWN0aW9ucyk7XHJcbiAgICB0aGlzLnN0YXRlLnRvdGFsU3RlcHMgPSB0aGlzLndpemFyZFN0ZXBHcm91cHMubGVuZ3RoO1xyXG4gICAgdGhpcy5hY2N1bXVsYXRlZERhdGEgPSB7IC4uLnRoaXMuaW5pdGlhbERhdGEgfTtcclxuXHJcbiAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdpbml0Jywge1xyXG4gICAgICB3aXphcmRJZDogdGhpcy53aXphcmRDb25maWc/LndpemFyZElkLFxyXG4gICAgICBzY2hlbWFJZDogdGhpcy5zY2hlbWEuaWQsXHJcbiAgICAgIHRvdGFsU3RlcHM6IHRoaXMuc3RhdGUudG90YWxTdGVwcyxcclxuICAgICAgdG90YWxTZWN0aW9uczogdGhpcy53aXphcmRTdGVwR3JvdXBzLnJlZHVjZSgoc3VtLCBnKSA9PiBzdW0gKyBnLmxlbmd0aCwgMCksXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTaW5jcm9uaXp6YXppb25lIHdpcmVsZXNzXHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpIHtcclxuICAgICAgdGhpcy5zeW5jV2l6YXJkU3RhdGUoKTtcclxuXHJcbiAgICAgIC8vIEFzY29sdGEgbmF2aWdhemlvbmUgZXN0ZXJuYVxyXG4gICAgICB0aGlzLndpemFyZFN5bmNcclxuICAgICAgICAuZ2V0V2l6YXJkU3RhdGUkKHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLndpemFyZFN0YXRlLmN1cnJlbnRTdGVwICE9PSB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1N0ZXAoZGF0YS53aXphcmRTdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ2Rlc3Ryb3knLCB7XHJcbiAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZz8ud2l6YXJkSWQsXHJcbiAgICAgIHNjaGVtYUlkOiB0aGlzLnNjaGVtYT8uaWQsXHJcbiAgICAgIGN1cnJlbnRTdGVwOiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZz8ud2l6YXJkSWQpIHtcclxuICAgICAgdGhpcy53aXphcmRTeW5jLnVucmVnaXN0ZXJXaXphcmQodGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2NvcmNpYXRvaWE6IEN0cmwgKyBGcmVjY2lhIHNpbmlzdHJhL2Rlc3RyYSBwZXIgbmF2aWdhcmUgY29tZSBpIHB1bHNhbnRpXHJcbiAgICogSW5kaWV0cm8gLyBBdmFudGkgKHN1bGwndWx0aW1vIHN0ZXAsIEF2YW50aSBlcXVpdmFsZSBhIENvbXBsZXRhKS5cclxuICAgKiBJZ25vcmF0YSBzZSBpbCBmb2N1cyDDqCBpbiB1biBjYW1wbyBkaSBpbnB1dCBwZXIgbm9uIGludGVyZmVyaXJlIGNvbiBsYSBkaWdpdGF6aW9uZS5cclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBvbkRvY3VtZW50S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNjaGVtYSB8fCAhdGhpcy53aXphcmRDb25maWcgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMud2l6YXJkQ29uZmlnLnNob3dOYXZpZ2F0aW9uQnV0dG9ucyA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgIGlmICghZXZlbnQuY3RybEtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ0Fycm93TGVmdCcgJiYgZXZlbnQua2V5ICE9PSAnQXJyb3dSaWdodCcpIHJldHVybjtcclxuICAgIGlmICh0aGlzLmlzRWRpdGFibGVLZXlib2FyZFRhcmdldChldmVudC50YXJnZXQpKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcclxuICAgICAgaWYgKHRoaXMud2l6YXJkQ29uZmlnLmFsbG93QmFja05hdmlnYXRpb24gPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwIDw9IDApIHJldHVybjtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgdGhpcy5sb2dnZXI/LmxvZ1dpemFyZEFjdGlvbigna2V5Ym9hcmROYXZpZ2F0aW9uJywge1xyXG4gICAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCxcclxuICAgICAgICBkaXJlY3Rpb246ICdwcmV2aW91cycsXHJcbiAgICAgICAgZnJvbVN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmdvVG9QcmV2aW91c1N0ZXAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFycm93UmlnaHRcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdrZXlib2FyZE5hdmlnYXRpb24nLCB7XHJcbiAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCxcclxuICAgICAgZGlyZWN0aW9uOiB0aGlzLmlzTGFzdFN0ZXAgPyAnZmluaXNoJyA6ICduZXh0JyxcclxuICAgICAgZnJvbVN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLmlzTGFzdFN0ZXApIHtcclxuICAgICAgdm9pZCB0aGlzLmZpbmlzaFdpemFyZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdm9pZCB0aGlzLmdvVG9OZXh0U3RlcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgc2UgaWwgdGFyZ2V0IGRlbCBrZXlkb3duIMOoIHVuIGVsZW1lbnRvIGRvdmUgbGEgZGlnaXRhemlvbmUgaGEgcHJpb3JpdMOgIHN1bGxhIHNob3J0Y3V0IHdpemFyZC4gKi9cclxuICBwcml2YXRlIGlzRWRpdGFibGVLZXlib2FyZFRhcmdldCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0YXJnZXQgfHwgISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGVsID0gdGFyZ2V0O1xyXG4gICAgaWYgKGVsLmlzQ29udGVudEVkaXRhYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWU7XHJcbiAgICBpZiAodGFnID09PSAnSU5QVVQnIHx8IHRhZyA9PT0gJ1RFWFRBUkVBJyB8fCB0YWcgPT09ICdTRUxFQ1QnKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBOYXZpZ2F6aW9uZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgLyoqIFZhaSBhbGxvIHN0ZXAgc3VjY2Vzc2l2byBjb24gdmFsaWRhemlvbmUuICovXHJcbiAgYXN5bmMgZ29Ub05leHRTdGVwKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaXNMYXN0U3RlcCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFZhbGlkYSBzdGVwIGNvcnJlbnRlXHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLnZhbGlkYXRlQ3VycmVudFN0ZXAoKSkpIHJldHVybjtcclxuXHJcbiAgICAvLyBTYWx2YSBkYXRpIHN0ZXAgY29ycmVudGVcclxuICAgIHRoaXMuc3RhdGUuY29tcGxldGVkU3RlcHMuYWRkKHRoaXMuc3RhdGUuY3VycmVudFN0ZXApO1xyXG4gICAgYXdhaXQgdGhpcy5hdXRvU2F2ZUlmTmVlZGVkKCk7XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcCh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwICsgMSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG9ybmEgYWxsbyBzdGVwIHByZWNlZGVudGUuICovXHJcbiAgZ29Ub1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwIDw9IDApIHJldHVybjtcclxuICAgIHRoaXMubmF2aWdhdGVUb1N0ZXAodGhpcy5zdGF0ZS5jdXJyZW50U3RlcCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmF2aWdhemlvbmUgdHJhbWl0ZSBpbmRpY2F0b3JpIHN0ZXAgKGJ1bGxldCArIHRpdG9sbykgcXVhbmRvIGBwcm9ncmVzc1N0eWxlYCDDqCBgJ3N0ZXBzJ2AuXHJcbiAgICogQ29uc2VudGl0byBzb2xvIHZlcnNvIHN0ZXAgZ2nDoCBtYXJjYXRpIGNvbXBsZXRhdGkuXHJcbiAgICovXHJcbiAgb25XaXphcmRTdGVwSW5kaWNhdG9yU2VsZWN0KHN0ZXBJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMud2l6YXJkQ29uZmlnLmFsbG93U3RlcEluZGljYXRvck5hdmlnYXRpb24gPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcuYWxsb3dCYWNrTmF2aWdhdGlvbiA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgIGlmIChzdGVwSW5kZXggPT09IHRoaXMuc3RhdGUuY3VycmVudFN0ZXApIHJldHVybjtcclxuICAgIGlmICghdGhpcy5zdGF0ZS5jb21wbGV0ZWRTdGVwcy5oYXMoc3RlcEluZGV4KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ25hdmlnYXRpb24nLCB7XHJcbiAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCxcclxuICAgICAgdmlhOiAnc3RlcEluZGljYXRvcicsXHJcbiAgICAgIGZyb21TdGVwOiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICB0b1N0ZXA6IHN0ZXBJbmRleCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcChzdGVwSW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbXBsZXRhIGlsIHdpemFyZC4gKi9cclxuICBhc3luYyBmaW5pc2hXaXphcmQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLnZhbGlkYXRlQ3VycmVudFN0ZXAoKSkpIHtcclxuICAgICAgdGhpcy5sb2dnZXI/LmxvZ1dpemFyZEFjdGlvbignc3RlcFZhbGlkYXRpb25GYWlsZWQnLCB7XHJcbiAgICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgY29udGV4dDogJ2ZpbmlzaCcsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5jb21wbGV0ZWRTdGVwcy5hZGQodGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICBhd2FpdCB0aGlzLmF1dG9TYXZlSWZOZWVkZWQoKTtcclxuXHJcbiAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdjb21wbGV0ZScsIHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICBzY2hlbWFJZDogdGhpcy5zY2hlbWE/LmlkLFxyXG4gICAgICB0b3RhbFN0ZXBzOiB0aGlzLnN0YXRlLnRvdGFsU3RlcHMsXHJcbiAgICAgIGNvbXBsZXRlZFN0ZXBzOiBBcnJheS5mcm9tKHRoaXMuc3RhdGUuY29tcGxldGVkU3RlcHMpLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLndpemFyZENvbXBsZXRlLmVtaXQodGhpcy5hY2N1bXVsYXRlZERhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFNhbHZhIGxvIHN0ZXAgY29ycmVudGUgbWFudWFsbWVudGUuICovXHJcbiAgYXN5bmMgc2F2ZUN1cnJlbnRTdGVwKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMud2l6YXJkQ29uZmlnLm9uU3RlcFNhdmUpIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybUJ1aWxkZXI/LmdldEZvcm1WYWx1ZSgpIHx8IHt9O1xyXG4gICAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdzYXZlJywge1xyXG4gICAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCxcclxuICAgICAgICBzdGVwOiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICAgIHNjaGVtYUlkOiB0aGlzLnNjaGVtYT8uaWQsXHJcbiAgICAgIH0pO1xyXG4gICAgICBhd2FpdCB0aGlzLndpemFyZENvbmZpZy5vblN0ZXBTYXZlKGRhdGEsIHRoaXMuc3RhdGUuY3VycmVudFN0ZXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIENhbGxiYWNrIGZvcm0gYnVpbGRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgb25WYWx1ZUNoYW5nZShkYXRhOiBVaUZvcm1EYXRhKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjY3VtdWxhdGVkRGF0YSA9IHsgLi4udGhpcy5hY2N1bXVsYXRlZERhdGEsIC4uLmRhdGEgfTtcclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ3ZhbHVlQ2hhbmdlJywge1xyXG4gICAgICB3aXphcmRJZDogdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQsXHJcbiAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgIHNjaGVtYUlkOiB0aGlzLnNjaGVtYT8uaWQsXHJcbiAgICAgIGNoYW5nZWRLZXlzOiBPYmplY3Qua2V5cyhkYXRhKSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuYWNjdW11bGF0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIG9uVmFsaWRhdGlvbkNoYW5nZShzdGF0ZTogVWlGb3JtVmFsaWRhdGlvblN0YXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlLmlzVmFsaWQgPSBzdGF0ZS52YWxpZDtcclxuICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZS5lbWl0KHN0YXRlKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBOYXZpZ2F6aW9uZSBpbnRlcm5hIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlVG9TdGVwKHRhcmdldFN0ZXA6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRhcmdldFN0ZXAgPCAwIHx8IHRhcmdldFN0ZXAgPj0gdGhpcy5zdGF0ZS50b3RhbFN0ZXBzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZnJvbSA9IHRoaXMuc3RhdGUuY3VycmVudFN0ZXA7XHJcbiAgICB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwID0gdGFyZ2V0U3RlcDtcclxuICAgIHRoaXMuc3RhdGUudmlzaXRlZFN0ZXBzLmFkZCh0YXJnZXRTdGVwKTtcclxuXHJcbiAgICAvLyBJbnZhbGlkYSBsYSBjYWNoZSBwZXIgZm9yemFyZSBsYSBjcmVhemlvbmUgZGkgdW4gbnVvdm8gc2NoZW1hXHJcbiAgICB0aGlzLl9jYWNoZWRTdGVwU2NoZW1hID0gbnVsbDtcclxuICAgIHRoaXMuX2NhY2hlZFN0ZXBJbmRleCA9IC0xO1xyXG5cclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ3N0ZXBDaGFuZ2UnLCB7XHJcbiAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCxcclxuICAgICAgZnJvbSxcclxuICAgICAgdG86IHRhcmdldFN0ZXAsXHJcbiAgICAgIGRpcmVjdGlvbjogdGFyZ2V0U3RlcCA+IGZyb20gPyAnbmV4dCcgOiAncHJldmlvdXMnLFxyXG4gICAgICBzY2hlbWFJZDogdGhpcy5zY2hlbWE/LmlkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBmcm9tLFxyXG4gICAgICB0bzogdGFyZ2V0U3RlcCxcclxuICAgICAgZGlyZWN0aW9uOiB0YXJnZXRTdGVwID4gZnJvbSA/ICduZXh0JyA6ICdwcmV2aW91cycsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN5bmNXaXphcmRTdGF0ZSgpO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlQ3VycmVudFN0ZXAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLmZvcm1CdWlsZGVyPy52YWxpZGF0ZUFsbEZpZWxkcygpO1xyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLndpemFyZFN0ZXBHcm91cHNbdGhpcy5zdGF0ZS5jdXJyZW50U3RlcF07XHJcbiAgICBjb25zdCBwcmltYXJ5ID0gZ3JvdXA/LlswXTtcclxuICAgIGNvbnN0IHZhbGlkYXRlQ3VzdG9tQ29tcG9uZW50cyA9XHJcbiAgICAgIHByaW1hcnk/LndpemFyZFN0ZXA/LnZhbGlkYXRpb24/LnZhbGlkYXRlQ3VzdG9tQ29tcG9uZW50cyAhPT0gZmFsc2U7XHJcbiAgICBjb25zdCBjdXN0b21GaWVsZEtleXMgPSBuZXcgU2V0KHRoaXMuZ2V0Q3VzdG9tRmllbGRLZXlzRm9yR3JvdXAoZ3JvdXApKTtcclxuXHJcbiAgICBjb25zdCBpc0Zvcm1WYWxpZCA9IHZhbGlkYXRlQ3VzdG9tQ29tcG9uZW50c1xyXG4gICAgICA/ICh0aGlzLmZvcm1CdWlsZGVyPy5pc0Zvcm1WYWxpZCgpID8/IHRydWUpXHJcbiAgICAgIDogKHRoaXMuZm9ybUJ1aWxkZXI/LmlzRm9ybVZhbGlkRXhjbHVkaW5nRmllbGRLZXlzKGN1c3RvbUZpZWxkS2V5cykgPz9cclxuICAgICAgICB0cnVlKTtcclxuXHJcbiAgICBjb25zdCBjdXN0b21Gbk5hbWUgPSBwcmltYXJ5Py53aXphcmRTdGVwPy5jdXN0b21WYWxpZGF0aW9uRm47XHJcblxyXG4gICAgaWYgKGN1c3RvbUZuTmFtZSAmJiB0aGlzLmN1c3RvbVZhbGlkYXRpb25NZXRob2RzW2N1c3RvbUZuTmFtZV0pIHtcclxuICAgICAgY29uc3QgY3VzdG9tVmFsaWQgPSBhd2FpdCB0aGlzLmN1c3RvbVZhbGlkYXRpb25NZXRob2RzW2N1c3RvbUZuTmFtZV0oXHJcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZERhdGEsXHJcbiAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgICBpc0Zvcm1WYWxpZCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghY3VzdG9tVmFsaWQpIHtcclxuICAgICAgICB0aGlzLnN0ZXBWYWxpZGF0aW9uRmFpbGVkLmVtaXQoe1xyXG4gICAgICAgICAgc3RlcDogdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgICAgIGVycm9yczogWydWYWxpZGF6aW9uZSBjdXN0b20gZmFsbGl0YSddLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNGb3JtVmFsaWQgJiYgcHJpbWFyeT8ud2l6YXJkU3RlcD8udmFsaWRhdGlvbj8ucmVxdWlyZWQgIT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBkZXRhaWxzID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0RGV0YWlsZWRGb3JtRXJyb3JzKCkgfHwgW107XHJcbiAgICAgIGlmICghdmFsaWRhdGVDdXN0b21Db21wb25lbnRzICYmIGdyb3VwPy5sZW5ndGgpIHtcclxuICAgICAgICBkZXRhaWxzID0gdGhpcy5maWx0ZXJFcnJvckRldGFpbHNFeGNsdWRpbmdDdXN0b21GaWVsZHMoXHJcbiAgICAgICAgICBkZXRhaWxzLFxyXG4gICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICBjdXN0b21GaWVsZEtleXMsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBlcnJvcnMgPSBkZXRhaWxzLmZsYXRNYXAoKGUpID0+IGUuZXJyb3JzKTtcclxuICAgICAgdGhpcy5sb2dnZXI/LmxvZ1dpemFyZEFjdGlvbignc3RlcFZhbGlkYXRpb25GYWlsZWQnLCB7XHJcbiAgICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgZXJyb3JzLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zdGVwVmFsaWRhdGlvbkZhaWxlZC5lbWl0KHtcclxuICAgICAgICBzdGVwOiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICAgIGVycm9ycyxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdzdGVwQ29tcGxldGUnLCB7XHJcbiAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCxcclxuICAgICAgc3RlcDogdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgc2NoZW1hSWQ6IHRoaXMuc2NoZW1hPy5pZCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdGVwQ29tcGxldGUuZW1pdCh7XHJcbiAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgIGRhdGE6IHRoaXMuZm9ybUJ1aWxkZXI/LmdldEZvcm1WYWx1ZSgpIHx8IHt9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSYWdncnVwcGEgbGUgc2V6aW9uaSBjb24gYHdpemFyZFN0ZXBgIHBlciBgc3RlcE51bWJlcmAgKG9yZGluZSBzdGFiaWxlIHBlciBudW1lcm8sIHBvaSBvcmRpbmUgZGkgYXBwYXJpemlvbmUgbmVsbG8gc2NoZW1hKS5cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkV2l6YXJkU3RlcEdyb3VwcyhzZWN0aW9uczogVWlGb3JtU2VjdGlvbltdKTogVWlGb3JtU2VjdGlvbltdW10ge1xyXG4gICAgY29uc3Qgd2l0aFdpemFyZCA9IHNlY3Rpb25zLmZpbHRlcigocykgPT4gcy53aXphcmRTdGVwKTtcclxuICAgIHdpdGhXaXphcmQuc29ydChcclxuICAgICAgKGEsIGIpID0+XHJcbiAgICAgICAgKGEud2l6YXJkU3RlcCEuc3RlcE51bWJlciB8fCAwKSAtIChiLndpemFyZFN0ZXAhLnN0ZXBOdW1iZXIgfHwgMCksXHJcbiAgICApO1xyXG4gICAgY29uc3QgZ3JvdXBzOiBVaUZvcm1TZWN0aW9uW11bXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBzIG9mIHdpdGhXaXphcmQpIHtcclxuICAgICAgY29uc3QgbnVtID0gcy53aXphcmRTdGVwIS5zdGVwTnVtYmVyO1xyXG4gICAgICBjb25zdCBwcmV2ID0gZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXY/Lmxlbmd0aCAmJlxyXG4gICAgICAgIChwcmV2WzBdLndpemFyZFN0ZXAhLnN0ZXBOdW1iZXIgfHwgMCkgPT09IChudW0gfHwgMClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcHJldi5wdXNoKHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKFtzXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hpYXZpIGRlaSBjYW1waSBgY3VzdG9tYCBpbiB0dXR0ZSBsZSBzZXppb25pIGRlbCBwYXNzbyBjb3JyZW50ZS4gKi9cclxuICBwcml2YXRlIGdldEN1c3RvbUZpZWxkS2V5c0Zvckdyb3VwKFxyXG4gICAgZ3JvdXA6IFVpRm9ybVNlY3Rpb25bXSB8IHVuZGVmaW5lZCxcclxuICApOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIWdyb3VwPy5sZW5ndGgpIHJldHVybiBbXTtcclxuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZ3JvdXApIHtcclxuICAgICAgZm9yIChjb25zdCBmIG9mIHNlY3Rpb24uZmllbGRzIHx8IFtdKSB7XHJcbiAgICAgICAgaWYgKGYudHlwZSA9PT0gJ2N1c3RvbScpIGtleXMucHVzaChmLmtleSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBrZXlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJpbXVvdmUgZGFnbGkgZXJyb3JpIGkgY2FtcGkgY3VzdG9tIHF1YW5kbyBgdmFsaWRhdGVDdXN0b21Db21wb25lbnRzYCDDqCBmYWxzZS4gKi9cclxuICBwcml2YXRlIGZpbHRlckVycm9yRGV0YWlsc0V4Y2x1ZGluZ0N1c3RvbUZpZWxkcyhcclxuICAgIGRldGFpbHM6IFVpRm9ybUVycm9yRGV0YWlsW10sXHJcbiAgICBncm91cDogVWlGb3JtU2VjdGlvbltdLFxyXG4gICAgY3VzdG9tS2V5czogU2V0PHN0cmluZz4sXHJcbiAgKTogVWlGb3JtRXJyb3JEZXRhaWxbXSB7XHJcbiAgICBjb25zdCBzZWN0aW9uSWRzID0gZ3JvdXAubWFwKChzKSA9PiBzLmlkKTtcclxuICAgIHJldHVybiBkZXRhaWxzLmZpbHRlcigoZCkgPT4ge1xyXG4gICAgICBjb25zdCBsb2dpY2FsS2V5ID0gdGhpcy5sb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5Rm9yR3JvdXAoXHJcbiAgICAgICAgZC5maWVsZEtleSxcclxuICAgICAgICBzZWN0aW9uSWRzLFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gIWN1c3RvbUtleXMuaGFzKGxvZ2ljYWxLZXkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaXNvbHZlIGxhIGNoaWF2ZSBsb2dpY2EgZGVsIGNhbXBvIHJpc3BldHRvIGEgdHV0dGUgbGUgc2V6aW9uaSBkZWwgZ3J1cHBvIChjYW1waSBmbGF0IG8gcmVwZWF0YWJsZSkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5Rm9yR3JvdXAoXHJcbiAgICBmaWVsZEtleTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbklkczogc3RyaW5nW10sXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2VjdGlvbklkcykge1xyXG4gICAgICBjb25zdCBrID0gdGhpcy5sb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5KGZpZWxkS2V5LCBpZCk7XHJcbiAgICAgIGlmIChrICE9PSBmaWVsZEtleSkgcmV0dXJuIGs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICAvKiogRXN0cmFlIGxhIGNoaWF2ZSBjYW1wbyBkYSBgZmllbGRLZXlgIGZsYXQgbyBgc2VjdGlvbklkW2ldLmZpZWxkS2V5YC4gKi9cclxuICBwcml2YXRlIGxvZ2ljYWxGaWVsZEtleUZyb21EZXRhaWxLZXkoXHJcbiAgICBmaWVsZEtleTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7dGhpcy5lc2NhcGVSZWdFeHAoc2VjdGlvbklkKX1cXFxcW1xcXFxkK1xcXFxdXFxcXC4oLispJGApO1xyXG4gICAgY29uc3QgbSA9IGZpZWxkS2V5Lm1hdGNoKHJlKTtcclxuICAgIHJldHVybiBtID8gbVsxXSA6IGZpZWxkS2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlc2NhcGVSZWdFeHAoczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGF1dG9TYXZlSWZOZWVkZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcuYXV0b1NhdmUgJiYgdGhpcy53aXphcmRDb25maWcub25TdGVwU2F2ZSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge307XHJcbiAgICAgIGF3YWl0IHRoaXMud2l6YXJkQ29uZmlnLm9uU3RlcFNhdmUoZGF0YSwgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN5bmNXaXphcmRTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzeW5jRGF0YTogVWlXaXphcmRTeW5jRGF0YSA9IHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICB3aXphcmRTdGF0ZTogeyAuLi50aGlzLnN0YXRlIH0sXHJcbiAgICAgIHdpemFyZFN0ZXBzOiB0aGlzLndpemFyZFN0ZXBHcm91cHMubWFwKChnKSA9PiAoe1xyXG4gICAgICAgIHRpdGxlOiBnWzBdPy53aXphcmRTdGVwPy5zdGVwVGl0bGUgfHwgZ1swXT8udGl0bGUsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGdbMF0/LndpemFyZFN0ZXA/LnN0ZXBEZXNjcmlwdGlvbiB8fCBnWzBdPy5kZXNjcmlwdGlvbixcclxuICAgICAgfSkpLFxyXG4gICAgICBpc1dpemFyZE1vZGU6IHRydWUsXHJcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMud2l6YXJkU3luYy5yZWdpc3RlcldpemFyZCh0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCwgc3luY0RhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=
1151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS13aXphcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvZm9ybS13aXphcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWtCbEUsT0FBTyxFQUNMLG1CQUFtQixHQUVwQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBRXBFLHFFQUFxRTtBQUVyRTs7O0dBR0c7QUFnSEgsTUFBTSxPQUFPLHVCQUF1QjtJQS9HcEM7UUFpSFcsZUFBVSxHQUFzQixFQUFFLENBQUM7UUFFbkMsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFDcEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLDJCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUNyQyxpRkFBaUY7UUFDeEUsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBRTdCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBaUJuRDtJQWZDLG1HQUFtRztJQUNuRyx3QkFBd0IsQ0FBQyxTQUFpQjtRQUN4QyxJQUFJ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Uzt1QkFBQyxzQkFBc0I7Z0JBS3hCLE1BQU07c0JBQWQsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBSUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBd0pQLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBWaWV3Q2hpbGQsXHJcbiAgaW5qZWN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSB9IGZyb20gJ2x1Y2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9idXR0b24vaW5kZXgnO1xyXG5cclxuaW1wb3J0IHsgVWlGb3JtQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgVWlGb3JtU2NoZW1hLFxyXG4gIFVpRm9ybVNlY3Rpb24sXHJcbiAgVWlGb3JtRGF0YSxcclxuICBVaVdpemFyZENvbmZpZyxcclxuICBVaVdpemFyZFN0YXRlLFxyXG4gIFVpV2l6YXJkU3RlcENoYW5nZUV2ZW50LFxyXG4gIFVpV2l6YXJkU3RlcENvbXBsZXRlRXZlbnQsXHJcbiAgVWlXaXphcmRSZXN1bWVPcHRpb25zLFxyXG4gIFVpV2l6YXJkUmVzdW1lUmVzdWx0LFxyXG4gIFVpV2l6YXJkVmFsaWRhdGlvbkZuLFxyXG4gIFVpRm9ybUN1c3RvbUV2ZW50LFxyXG59IGZyb20gJy4vdHlwZXMvc2NoZW1hLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBVaUZvcm1FcnJvckRldGFpbCxcclxuICBVaUZvcm1WYWxpZGF0aW9uU3RhdGUsXHJcbn0gZnJvbSAnLi90eXBlcy92YWxpZGF0aW9uLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBVaVdpemFyZFN5bmNTZXJ2aWNlLFxyXG4gIFVpV2l6YXJkU3luY0RhdGEsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlcy93aXphcmQtc3luYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVWlMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9sb2dnaW5nL2xvZ2dlci5zZXJ2aWNlJztcclxuXHJcbi8vIOKUgOKUgOKUgCBDb21wb25lbnRpIGludGVybmkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4vKipcclxuICogSGVhZGVyIGRlbCB3aXphcmQ6IHByb2dyZXNzbyBlIGluZm8gZGVsbG8gc3RlcCBjb3JyZW50ZS5cclxuICogQ29uIGBwcm9ncmVzc1N0eWxlOiAnc3RlcHMnYCBlbWV0dGUgYHN0ZXBTZWxlY3RgIHBlciBzYWx0YXJlIGEgdW5vIHN0ZXAgZ2nDoCBjb21wbGV0YXRvLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS13aXphcmQtaGVhZGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtMdWNpZGVBbmd1bGFyTW9kdWxlXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX2hlYWRlclwiPlxyXG4gICAgICBAaWYgKGNvbmZpZy5zaG93UHJvZ3Jlc3MgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgQGlmIChjb25maWcucHJvZ3Jlc3NTdHlsZSAhPT0gJ3N0ZXBzJykge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19wcm9ncmVzcy1iYXJcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidWktZm9ybS13aXphcmRfX3Byb2dyZXNzLWZpbGxcIlxyXG4gICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInByb2dyZXNzUGVyY2VudFwiXHJcbiAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fcHJvZ3Jlc3MtdGV4dFwiPlxyXG4gICAgICAgICAgICB7eyBwcm9ncmVzc1BlcmNlbnQgfX0lIGNvbXBsZXRhdG9cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcHNcIj5cclxuICAgICAgICAgICAgQGZvciAoXHJcbiAgICAgICAgICAgICAgZ3JvdXAgb2Ygc3RlcEdyb3VwcztcclxuICAgICAgICAgICAgICB0cmFjayAkaW5kZXg7XHJcbiAgICAgICAgICAgICAgbGV0IGkgPSAkaW5kZXhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MudWktZm9ybS13aXphcmRfX3N0ZXAtLWN1cnJlbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGkgPT09IHN0YXRlLmN1cnJlbnRTdGVwXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnVpLWZvcm0td2l6YXJkX19zdGVwLS1jb21wbGV0ZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBsZXRlZFN0ZXBzLmhhcyhpKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy51aS1mb3JtLXdpemFyZF9fc3RlcC0tdmlzaXRlZF09XCJcclxuICAgICAgICAgICAgICAgICAgc3RhdGUudmlzaXRlZFN0ZXBzLmhhcyhpKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy51aS1mb3JtLXdpemFyZF9fc3RlcC0tbmF2aWdhYmxlXT1cIlxyXG4gICAgICAgICAgICAgICAgICBpc1N0ZXBJbmRpY2F0b3JOYXZpZ2FibGUoaSlcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmIChpc1N0ZXBJbmRpY2F0b3JOYXZpZ2FibGUoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtdHJpZ2dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHN0ZXBBcmlhTGFiZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwWzBdLndpemFyZFN0ZXA/LnN0ZXBUaXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwWzBdLnRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ZXAgJyArIChpICsgMSlcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdGVwU2VsZWN0LmVtaXQoaSlcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWNpcmNsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChzdGF0ZS5jb21wbGV0ZWRTdGVwcy5oYXMoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGx1Y2lkZS1pY29uIG5hbWU9XCJjaGVja1wiIFtzaXplXT1cIjE2XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwWzBdLndpemFyZFN0ZXA/LnN0ZXBUaXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwWzBdLnRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ZXAgJyArIChpICsgMSlcclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLXN0YXRpY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgaSA9PT0gc3RhdGUuY3VycmVudFN0ZXAgPyAnc3RlcCcgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1jaXJjbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc3RhdGUuY29tcGxldGVkU3RlcHMuaGFzKGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsdWNpZGUtaWNvbiBuYW1lPVwiY2hlY2tcIiBbc2l6ZV09XCIxNlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cFswXS53aXphcmRTdGVwPy5zdGVwVGl0bGUgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFswXS50aXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTdGVwICcgKyAoaSArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtaW5mb1wiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLXRpdGxlXCI+e3sgY3VycmVudFN0ZXBUaXRsZSB9fTwvaDI+XHJcbiAgICAgICAgQGlmIChjdXJyZW50U3RlcERlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgIHt7IGN1cnJlbnRTdGVwRGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICB9XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1jb3VudGVyXCI+XHJcbiAgICAgICAgICBQYXNzbyB7eyBzdGF0ZS5jdXJyZW50U3RlcCArIDEgfX0gZGkge3sgc3RhdGUudG90YWxTdGVwcyB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlXaXphcmRIZWFkZXJDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFVpV2l6YXJkQ29uZmlnO1xyXG4gIEBJbnB1dCgpIHN0ZXBHcm91cHM6IFVpRm9ybVNlY3Rpb25bXVtdID0gW107XHJcbiAgQElucHV0KCkgc3RhdGUhOiBVaVdpemFyZFN0YXRlO1xyXG4gIEBJbnB1dCgpIHByb2dyZXNzUGVyY2VudCA9IDA7XHJcbiAgQElucHV0KCkgY3VycmVudFN0ZXBUaXRsZSA9ICcnO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRTdGVwRGVzY3JpcHRpb24gPSAnJztcclxuICAvKiogUXVhbmRvIHRydWUsIGkgYnVsbGV0IHN0ZXAgbm9uIHNvbm8gaW50ZXJhdHRpdmkgKGVzLiB3aXphcmQgZGlzYWJpbGl0YXRvKS4gKi9cclxuICBASW5wdXQoKSBkaXNhYmxlU3RlcEluZGljYXRvcnMgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHN0ZXBTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgLyoqIEluZGljZSBzdGVwIHNlbGV6aW9uYWJpbGUgdHJhbWl0ZSBidWxsZXQvdGl0b2xvIChzb2xvIHN0ZXAgZ2nDoCBjb21wbGV0YXRpLCBub24gaWwgY29ycmVudGUpLiAqL1xyXG4gIGlzU3RlcEluZGljYXRvck5hdmlnYWJsZShzdGVwSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmFsbG93U3RlcEluZGljYXRvck5hdmlnYXRpb24gPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlU3RlcEluZGljYXRvcnMpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5hbGxvd0JhY2tOYXZpZ2F0aW9uID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgc3RlcEluZGV4ICE9PSB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwICYmXHJcbiAgICAgIHRoaXMuc3RhdGUuY29tcGxldGVkU3RlcHMuaGFzKHN0ZXBJbmRleClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogVGVzdG8gYWNjZXNzaWJpbGUgcGVyIGlsIHB1bHNhbnRlIHN0ZXAgKG5hdmlnYXppb25lKS4gKi9cclxuICBzdGVwQXJpYUxhYmVsKHN0ZXBUaXRsZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgVmFpIGFsbG8gc3RlcDogJHtzdGVwVGl0bGV9YDtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGb290ZXIgZGVsIHdpemFyZDogcHVsc2FudGkgZGkgbmF2aWdhemlvbmUgZSBzYWx2YXRhZ2dpby5cclxuICogRW1ldHRlIGV2ZW50aSBwZXIgUHJldmlvdXMsIE5leHQsIEZpbmlzaCwgU2F2ZS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndWktd2l6YXJkLWZvb3RlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbVWlCdXR0b25Db21wb25lbnRdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fZm9vdGVyXCI+XHJcbiAgICAgIEBpZiAoXHJcbiAgICAgICAgY29uZmlnLmFsbG93QmFja05hdmlnYXRpb24gIT09IGZhbHNlICYmIHN0YXRlLmN1cnJlbnRTdGVwID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX25hdi1hY3Rpb25cIj5cclxuICAgICAgICAgIDx1aS1idXR0b25cclxuICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy5idXR0b25MYWJlbHM/LnByZXZpb3VzID8/ICdJbmRpZXRybydcIlxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgIGljb249XCJjaGV2cm9uLWxlZnRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXMuZW1pdCgpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19uYXYtaGludFwiPkN0cmwgKyDihpA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fZm9vdGVyLXJpZ2h0XCI+XHJcbiAgICAgICAgQGlmIChjb25maWcuYXV0b1NhdmUgJiYgY29uZmlnLmJ1dHRvbkxhYmVscz8uc2F2ZSkge1xyXG4gICAgICAgICAgPHVpLWJ1dHRvblxyXG4gICAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnLmJ1dHRvbkxhYmVscyEuc2F2ZSFcIlxyXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzYXZlLmVtaXQoKVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIH1cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX25hdi1hY3Rpb25cIj5cclxuICAgICAgICAgIEBpZiAoaXNMYXN0U3RlcCkge1xyXG4gICAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy5idXR0b25MYWJlbHM/LmZpbmlzaCA/PyAnQ29tcGxldGEnXCJcclxuICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgaWNvbj1cImNoZWNrXCJcclxuICAgICAgICAgICAgICBpY29uUG9zaXRpb249XCJ0cmFpbGluZ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbmlzaC5lbWl0KClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgIDx1aS1idXR0b25cclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiXHJcbiAgICAgICAgICAgICAgICBjb25maWcuYnV0dG9uTGFiZWxzPy5uZXh0ID8/XHJcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5idXR0b25MYWJlbHM/LnN1Ym1pdCA/P1xyXG4gICAgICAgICAgICAgICAgICAnQXZhbnRpJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLXJpZ2h0XCJcclxuICAgICAgICAgICAgICBpY29uUG9zaXRpb249XCJ0cmFpbGluZ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHQuZW1pdCgpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWktZm9ybS13aXphcmRfX25hdi1oaW50XCI+Q3RybCArIOKGkjwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlXaXphcmRGb290ZXJDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFVpV2l6YXJkQ29uZmlnO1xyXG4gIEBJbnB1dCgpIHN0YXRlITogVWlXaXphcmRTdGF0ZTtcclxuICBASW5wdXQoKSBpc0xhc3RTdGVwID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBwcmV2aW91cyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgbmV4dCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgZmluaXNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG59XHJcblxyXG4vLyDilIDilIDilIAgQ29tcG9uZW50ZSB3aXphcmQgcHJpbmNpcGFsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIHdpemFyZCBjaGUgd3JhcHBhIGBVaUZvcm1CdWlsZGVyQ29tcG9uZW50YFxyXG4gKiBhZ2dpdW5nZW5kbyBuYXZpZ2F6aW9uZSBtdWx0aS1zdGVwLCBiYXJyYSBkaSBwcm9ncmVzc28sXHJcbiAqIHZhbGlkYXppb25lIHBlciBzdGVwIGUgc2luY3Jvbml6emF6aW9uZSB3aXJlbGVzcy5cclxuICogUGnDuSBzZXppb25pIHNjaGVtYSBjb24gbG8gc3Rlc3NvIGB3aXphcmRTdGVwLnN0ZXBOdW1iZXJgIGZvcm1hbm8gdW4gdW5pY28gcGFzc29cclxuICogKGVzLiBwacO5IGJsb2NjaGkgY29sbGFzc2FiaWxpIHBlciBzdGVwKTsgbWV0YWRhdGkgZGVsIHBhc3NvIGRhbGxhIHByaW1hIHNlemlvbmUgZGVsIGdydXBwby5cclxuICpcclxuICogQHNlbGVjdG9yIHVpLWZvcm0td2l6YXJkXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHVpLWZvcm0td2l6YXJkXHJcbiAqICAgW3NjaGVtYV09XCJ3aXphcmRTY2hlbWFcIlxyXG4gKiAgIFt3aXphcmRDb25maWddPVwid2l6YXJkQ29uZmlnXCJcclxuICogICAod2l6YXJkQ29tcGxldGUpPVwib25Db21wbGV0ZSgkZXZlbnQpXCJcclxuICogICAoc3RlcENoYW5nZSk9XCJvblN0ZXBDaGFuZ2UoJGV2ZW50KVwiXHJcbiAqIC8+XHJcbiAqIGBgYFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1mb3JtLXdpemFyZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBMdWNpZGVBbmd1bGFyTW9kdWxlLFxyXG4gICAgVWlCdXR0b25Db21wb25lbnQsXHJcbiAgICBVaUZvcm1CdWlsZGVyQ29tcG9uZW50LFxyXG4gICAgVWlXaXphcmRIZWFkZXJDb21wb25lbnQsXHJcbiAgICBVaVdpemFyZEZvb3RlckNvbXBvbmVudCxcclxuICBdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIEBpZiAoc2NoZW1hICYmIHdpemFyZENvbmZpZykge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRcIj5cclxuICAgICAgICA8IS0tIEhlYWRlciB3aXphcmQgKG5hc2Nvc3RvIHNlIHdpcmVsZXNzKSAtLT5cclxuICAgICAgICBAaWYgKCF3aXphcmRDb25maWcud2lyZWxlc3NIZWFkaW5nKSB7XHJcbiAgICAgICAgICA8dWktd2l6YXJkLWhlYWRlclxyXG4gICAgICAgICAgICBbY29uZmlnXT1cIndpemFyZENvbmZpZ1wiXHJcbiAgICAgICAgICAgIFtzdGVwR3JvdXBzXT1cIndpemFyZFN0ZXBHcm91cHNcIlxyXG4gICAgICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxyXG4gICAgICAgICAgICBbcHJvZ3Jlc3NQZXJjZW50XT1cInByb2dyZXNzUGVyY2VudFwiXHJcbiAgICAgICAgICAgIFtjdXJyZW50U3RlcFRpdGxlXT1cImN1cnJlbnRTdGVwVGl0bGVcIlxyXG4gICAgICAgICAgICBbY3VycmVudFN0ZXBEZXNjcmlwdGlvbl09XCJjdXJyZW50U3RlcERlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVTdGVwSW5kaWNhdG9yc109XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIChzdGVwU2VsZWN0KT1cIm9uV2l6YXJkU3RlcEluZGljYXRvclNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8IS0tIE5hdmlnYXppb25lIHNvcHJhIGlsIGZvcm0gLS0+XHJcbiAgICAgICAgQGlmIChzaG93VG9wTmF2KSB7XHJcbiAgICAgICAgICA8dWktd2l6YXJkLWZvb3RlclxyXG4gICAgICAgICAgICBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19mb290ZXIgdWktZm9ybS13aXphcmRfX2Zvb3Rlci0tdG9wXCJcclxuICAgICAgICAgICAgW2NvbmZpZ109XCJ3aXphcmRDb25maWdcIlxyXG4gICAgICAgICAgICBbc3RhdGVdPVwic3RhdGVcIlxyXG4gICAgICAgICAgICBbaXNMYXN0U3RlcF09XCJpc0xhc3RTdGVwXCJcclxuICAgICAgICAgICAgKHByZXZpb3VzKT1cImdvVG9QcmV2aW91c1N0ZXAoKVwiXHJcbiAgICAgICAgICAgIChuZXh0KT1cImdvVG9OZXh0U3RlcCgpXCJcclxuICAgICAgICAgICAgKGZpbmlzaCk9XCJmaW5pc2hXaXphcmQoKVwiXHJcbiAgICAgICAgICAgIChzYXZlKT1cInNhdmVDdXJyZW50U3RlcCgpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX2NvbnRlbnRcIj5cclxuICAgICAgICAgIDwhLS0gRm9ybSBidWlsZGVyIHBlciBsbyBzdGVwIGNvcnJlbnRlIC0tPlxyXG4gICAgICAgICAgPHVpLWZvcm0tYnVpbGRlclxyXG4gICAgICAgICAgICBbc2NoZW1hXT1cImN1cnJlbnRTdGVwU2NoZW1hIVwiXHJcbiAgICAgICAgICAgIFtpbml0aWFsRGF0YV09XCJtZXJnZWRJbml0aWFsRGF0YUZvckJ1aWxkZXJcIlxyXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbbG9hZGluZ0Zvcl09XCJsb2FkaW5nRm9yXCJcclxuICAgICAgICAgICAgW2N1c3RvbUZpZWxkVGVtcGxhdGVzXT1cImN1c3RvbUZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgW2N1c3RvbUZpZWxkVGVtcGxhdGVGYWxsYmFja109XCJjdXN0b21GaWVsZFRlbXBsYXRlRmFsbGJhY2tcIlxyXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHZhbGlkYXRpb25DaGFuZ2UpPVwib25WYWxpZGF0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY3VzdG9tRXZlbnQpPVwiY3VzdG9tRXZlbnQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gTmF2aWdhemlvbmUgc290dG8gaWwgZm9ybSAtLT5cclxuICAgICAgICBAaWYgKHNob3dCb3R0b21OYXYpIHtcclxuICAgICAgICAgIDx1aS13aXphcmQtZm9vdGVyXHJcbiAgICAgICAgICAgIGNsYXNzPVwidWktZm9ybS13aXphcmRfX2Zvb3RlclwiXHJcbiAgICAgICAgICAgIFtjb25maWddPVwid2l6YXJkQ29uZmlnXCJcclxuICAgICAgICAgICAgW3N0YXRlXT1cInN0YXRlXCJcclxuICAgICAgICAgICAgW2lzTGFzdFN0ZXBdPVwiaXNMYXN0U3RlcFwiXHJcbiAgICAgICAgICAgIChwcmV2aW91cyk9XCJnb1RvUHJldmlvdXNTdGVwKClcIlxyXG4gICAgICAgICAgICAobmV4dCk9XCJnb1RvTmV4dFN0ZXAoKVwiXHJcbiAgICAgICAgICAgIChmaW5pc2gpPVwiZmluaXNoV2l6YXJkKClcIlxyXG4gICAgICAgICAgICAoc2F2ZSk9XCJzYXZlQ3VycmVudFN0ZXAoKVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgYCxcclxuICBzdHlsZVVybDogJy4vZm9ybS13aXphcmQuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlGb3JtV2l6YXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHdpemFyZFN5bmMgPSBpbmplY3QoVWlXaXphcmRTeW5jU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoVWlMb2dnZXJTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBAVmlld0NoaWxkKFVpRm9ybUJ1aWxkZXJDb21wb25lbnQpIGZvcm1CdWlsZGVyPzogVWlGb3JtQnVpbGRlckNvbXBvbmVudDtcclxuXHJcbiAgLy8g4pSA4pSA4pSAIElucHV0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKiogU2NoZW1hIGNvbXBsZXRvIGRlbCBmb3JtICh0dXR0ZSBsZSBzZXppb25pIGNvbiB3aXphcmRTdGVwKS4gKi9cclxuICBASW5wdXQoKSBzY2hlbWEhOiBVaUZvcm1TY2hlbWE7XHJcblxyXG4gIC8qKiBDb25maWd1cmF6aW9uZSBkZWwgd2l6YXJkLiAqL1xyXG4gIEBJbnB1dCgpIHdpemFyZENvbmZpZyE6IFVpV2l6YXJkQ29uZmlnO1xyXG5cclxuICAvKiogTWV0b2RpIGRpIHZhbGlkYXppb25lIGN1c3RvbSBwZXIgc3RlcC4gKi9cclxuICBASW5wdXQoKSBjdXN0b21WYWxpZGF0aW9uTWV0aG9kczogUmVjb3JkPHN0cmluZywgVWlXaXphcmRWYWxpZGF0aW9uRm4+ID0ge307XHJcblxyXG4gIC8qKiBEYXRpIGluaXppYWxpLiAqL1xyXG4gIEBJbnB1dCgpIGluaXRpYWxEYXRhOiBVaUZvcm1EYXRhID0ge307XHJcblxyXG4gIC8qKiBNb2RhbGl0YSBzb2xhIGxldHR1cmEuICovXHJcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFN0YXRvIGRpc2FiaWxpdGF0by4gKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAvKiogUHVsc2FudGUgaW4gY2FyaWNhbWVudG8uICovXHJcbiAgQElucHV0KCkgbG9hZGluZ0Zvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBwZXIgY2FtcGkgYHR5cGU6ICdjdXN0b20nYCAoaW5vbHRybyBhbCBmb3JtIGJ1aWxkZXIpLiAqL1xyXG4gIEBJbnB1dCgpIGN1c3RvbUZpZWxkVGVtcGxhdGVzOiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVJlZjx1bmtub3duPj4gPSB7fTtcclxuXHJcbiAgLyoqIEZhbGxiYWNrIHRlbXBsYXRlIHBlciBjYW1waSBjdXN0b20gKGlub2x0cm8gYWwgZm9ybSBidWlsZGVyKS4gKi9cclxuICBASW5wdXQoKSBjdXN0b21GaWVsZFRlbXBsYXRlRmFsbGJhY2s/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgLy8g4pSA4pSA4pSAIE91dHB1dCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgQE91dHB1dCgpIHN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFVpV2l6YXJkU3RlcENoYW5nZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBzdGVwQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFVpV2l6YXJkU3RlcENvbXBsZXRlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHN0ZXBWYWxpZGF0aW9uRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBzdGVwOiBudW1iZXI7XHJcbiAgICBlcnJvcnM6IHN0cmluZ1tdO1xyXG4gIH0+KCk7XHJcbiAgQE91dHB1dCgpIHdpemFyZENvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxVaUZvcm1EYXRhPigpO1xyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VWlGb3JtRGF0YT4oKTtcclxuICBAT3V0cHV0KCkgdmFsaWRhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VWlGb3JtVmFsaWRhdGlvblN0YXRlPigpO1xyXG4gIEBPdXRwdXQoKSBjdXN0b21FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlGb3JtQ3VzdG9tRXZlbnQ+KCk7XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBTdGF0byDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgc3RhdGU6IFVpV2l6YXJkU3RhdGUgPSB7XHJcbiAgICBjdXJyZW50U3RlcDogMCxcclxuICAgIHRvdGFsU3RlcHM6IDAsXHJcbiAgICBjb21wbGV0ZWRTdGVwczogbmV3IFNldDxudW1iZXI+KCksXHJcbiAgICB2aXNpdGVkU3RlcHM6IG5ldyBTZXQ8bnVtYmVyPihbMF0pLFxyXG4gICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICBzdGVwRXJyb3JzOiB7fSxcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBHcnVwcGkgZGkgc2V6aW9uaSBzY2hlbWEgcGVyIHBhc3NvIGxvZ2ljbyBkZWwgd2l6YXJkLlxyXG4gICAqIFNlemlvbmkgY29uIGxvIHN0ZXNzbyBgd2l6YXJkU3RlcC5zdGVwTnVtYmVyYCBjb21wb25nb25vIHVuIHVuaWNvIHBhc3NvIChvcmRpbmU6IGNvbWUgaW4gYHNjaGVtYS5zZWN0aW9uc2AgZG9wbyBzb3J0IHBlciBudW1lcm8pLlxyXG4gICAqL1xyXG4gIHdpemFyZFN0ZXBHcm91cHM6IFVpRm9ybVNlY3Rpb25bXVtdID0gW107XHJcblxyXG4gIC8qKiBEYXRpIGFjY3VtdWxhdGkgZGVsIGZvcm0uICovXHJcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZERhdGE6IFVpRm9ybURhdGEgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2NoZW1hIGNhY2hhdG8gcGVyIGxvIHN0ZXAgY29ycmVudGUuXHJcbiAgICogRXZpdGEgZGkgY3JlYXJlIHVuIG51b3ZvIG9nZ2V0dG8gYWQgb2duaSBjaWNsbyBkaSBjaGFuZ2UgZGV0ZWN0aW9uLFxyXG4gICAqIGNvc2EgY2hlIGNhdXNlcmViYmUgcmVidWlsZCBpbmZpbml0aSBuZWwgZm9ybSBidWlsZGVyLlxyXG4gICAqL1xyXG4gIF9jYWNoZWRTdGVwU2NoZW1hOiBVaUZvcm1TY2hlbWEgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jYWNoZWRTdGVwSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICAvLyDilIDilIDilIAgR2V0dGVyIGNhbGNvbGF0aSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgZ2V0IGN1cnJlbnRTdGVwU2NoZW1hKCk6IFVpRm9ybVNjaGVtYSB8IG51bGwge1xyXG4gICAgLy8gU2UgbG8gc3RlcCBub24gZSBjYW1iaWF0bywgcmVzdGl0dWlzY2kgbG8gc2NoZW1hIGNhY2hhdG9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fY2FjaGVkU3RlcEluZGV4ID09PSB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwICYmXHJcbiAgICAgIHRoaXMuX2NhY2hlZFN0ZXBTY2hlbWFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3RlcFNjaGVtYTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMud2l6YXJkU3RlcEdyb3Vwc1t0aGlzLnN0YXRlLmN1cnJlbnRTdGVwXTtcclxuICAgIGlmICghZ3JvdXA/Lmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVkU3RlcFNjaGVtYSA9IHtcclxuICAgICAgaWQ6IHRoaXMuc2NoZW1hLmlkICsgJy1zdGVwLScgKyB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICBzZWN0aW9uczogZ3JvdXAsXHJcbiAgICAgIGNvbmZpZzogeyAuLi50aGlzLnNjaGVtYS5jb25maWcsIGhpZGVGb290ZXI6IHRydWUsIHNob3dCdXR0b25zOiBmYWxzZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2NhY2hlZFN0ZXBJbmRleCA9IHRoaXMuc3RhdGUuY3VycmVudFN0ZXA7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3RlcFNjaGVtYTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50U3RlcFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwcmltYXJ5ID0gdGhpcy53aXphcmRTdGVwR3JvdXBzW3RoaXMuc3RhdGUuY3VycmVudFN0ZXBdPy5bMF07XHJcbiAgICByZXR1cm4gcHJpbWFyeT8ud2l6YXJkU3RlcD8uc3RlcFRpdGxlIHx8IHByaW1hcnk/LnRpdGxlIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRTdGVwRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHByaW1hcnkgPSB0aGlzLndpemFyZFN0ZXBHcm91cHNbdGhpcy5zdGF0ZS5jdXJyZW50U3RlcF0/LlswXTtcclxuICAgIHJldHVybiBwcmltYXJ5Py53aXphcmRTdGVwPy5zdGVwRGVzY3JpcHRpb24gfHwgcHJpbWFyeT8uZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNMYXN0U3RlcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwID49IHRoaXMuc3RhdGUudG90YWxTdGVwcyAtIDE7XHJcbiAgfVxyXG5cclxuICBnZXQgcHJvZ3Jlc3NQZXJjZW50KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZS50b3RhbFN0ZXBzIDw9IDEpIHJldHVybiAxMDA7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChcclxuICAgICAgKHRoaXMuc3RhdGUuY3VycmVudFN0ZXAgLyAodGhpcy5zdGF0ZS50b3RhbFN0ZXBzIC0gMSkpICogMTAwLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGkgcGFzc2F0aSBhbCBmb3JtIGJ1aWxkZXI6IHVuaW9uZSB0cmEgdmFsb3JpIGZvcm5pdGkgZGFsIGNvbnN1bWVyIGVcclxuICAgKiBzdGF0byBhY2N1bXVsYXRvIHRyYSBnbGkgc3RlcC4gU2VuemEgcXVlc3RvLCB0b3JuYW5kbyBpbmRpZXRybyBpbCBidWlsZGVyXHJcbiAgICogcmljZXZlcmViYmUgc29sbyBgaW5pdGlhbERhdGFgIGUgcmljcmVlcmViYmUgaSBjYW1waSB2dW90aSwgcHVyIGF2ZW5kb1xyXG4gICAqIGkgdmFsb3JpIGFuY29yYSBpbiBgYWNjdW11bGF0ZWREYXRhYC5cclxuICAgKi9cclxuICBnZXQgbWVyZ2VkSW5pdGlhbERhdGFGb3JCdWlsZGVyKCk6IFVpRm9ybURhdGEge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5pbml0aWFsRGF0YSwgLi4udGhpcy5hY2N1bXVsYXRlZERhdGEgfTtcclxuICB9XHJcblxyXG4gIC8qKiBNb3N0cmEgbGEgbmF2aWdhemlvbmUgc29wcmEgaWwgZm9ybSBidWlsZGVyLiAqL1xyXG4gIGdldCBzaG93VG9wTmF2KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMud2l6YXJkQ29uZmlnLnNob3dOYXZpZ2F0aW9uQnV0dG9ucyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IHBvcyA9IHRoaXMud2l6YXJkQ29uZmlnLm5hdmlnYXRpb25Qb3NpdGlvbjtcclxuICAgIHJldHVybiBwb3MgPT09ICd0b3AnIHx8IHBvcyA9PT0gJ2JvdGgnO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1vc3RyYSBsYSBuYXZpZ2F6aW9uZSBzb3R0byBpbCBmb3JtIGJ1aWxkZXIuICovXHJcbiAgZ2V0IHNob3dCb3R0b21OYXYoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcuc2hvd05hdmlnYXRpb25CdXR0b25zID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgcG9zID0gdGhpcy53aXphcmRDb25maWcubmF2aWdhdGlvblBvc2l0aW9uO1xyXG4gICAgcmV0dXJuIHBvcyA9PT0gJ2JvdHRvbScgfHwgcG9zID09PSAnYm90aCcgfHwgcG9zID09IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zY2hlbWEpIHtcclxuICAgICAgdGhpcy5sb2dnZXI/LmxvZ1dpemFyZEFjdGlvbignaW5pdCcsIHsgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnPy53aXphcmRJZCwgZXJyb3I6ICdzY2hlbWEgbm9uIHByZXNlbnRlJyB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMud2l6YXJkU3RlcEdyb3VwcyA9IHRoaXMuYnVpbGRXaXphcmRTdGVwR3JvdXBzKHRoaXMuc2NoZW1hLnNlY3Rpb25zKTtcclxuICAgIHRoaXMuc3RhdGUudG90YWxTdGVwcyA9IHRoaXMud2l6YXJkU3RlcEdyb3Vwcy5sZW5ndGg7XHJcbiAgICB0aGlzLmFjY3VtdWxhdGVkRGF0YSA9IHsgLi4udGhpcy5pbml0aWFsRGF0YSB9O1xyXG5cclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ2luaXQnLCB7XHJcbiAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZz8ud2l6YXJkSWQsXHJcbiAgICAgIHNjaGVtYUlkOiB0aGlzLnNjaGVtYS5pZCxcclxuICAgICAgdG90YWxTdGVwczogdGhpcy5zdGF0ZS50b3RhbFN0ZXBzLFxyXG4gICAgICB0b3RhbFNlY3Rpb25zOiB0aGlzLndpemFyZFN0ZXBHcm91cHMucmVkdWNlKChzdW0sIGcpID0+IHN1bSArIGcubGVuZ3RoLCAwKSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFNpbmNyb25penphemlvbmUgd2lyZWxlc3NcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCkge1xyXG4gICAgICB0aGlzLnN5bmNXaXphcmRTdGF0ZSgpO1xyXG5cclxuICAgICAgLy8gQXNjb2x0YSBuYXZpZ2F6aW9uZSBlc3Rlcm5hXHJcbiAgICAgIHRoaXMud2l6YXJkU3luY1xyXG4gICAgICAgIC5nZXRXaXphcmRTdGF0ZSQodGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEud2l6YXJkU3RhdGUuY3VycmVudFN0ZXAgIT09IHRoaXMuc3RhdGUuY3VycmVudFN0ZXApIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcChkYXRhLndpemFyZFN0YXRlLmN1cnJlbnRTdGVwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2dnZXI/LmxvZ1dpemFyZEFjdGlvbignZGVzdHJveScsIHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnPy53aXphcmRJZCxcclxuICAgICAgc2NoZW1hSWQ6IHRoaXMuc2NoZW1hPy5pZCxcclxuICAgICAgY3VycmVudFN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgaWYgKHRoaXMud2l6YXJkQ29uZmlnPy53aXphcmRJZCkge1xyXG4gICAgICB0aGlzLndpemFyZFN5bmMudW5yZWdpc3RlcldpemFyZCh0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY29yY2lhdG9pYTogQ3RybCArIEZyZWNjaWEgc2luaXN0cmEvZGVzdHJhIHBlciBuYXZpZ2FyZSBjb21lIGkgcHVsc2FudGlcclxuICAgKiBJbmRpZXRybyAvIEF2YW50aSAoc3VsbCd1bHRpbW8gc3RlcCwgQXZhbnRpIGVxdWl2YWxlIGEgQ29tcGxldGEpLlxyXG4gICAqIElnbm9yYXRhIHNlIGlsIGZvY3VzIMOoIGluIHVuIGNhbXBvIGRpIGlucHV0IHBlciBub24gaW50ZXJmZXJpcmUgY29uIGxhIGRpZ2l0YXppb25lLlxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uRG9jdW1lbnRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2NoZW1hIHx8ICF0aGlzLndpemFyZENvbmZpZyB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcuc2hvd05hdmlnYXRpb25CdXR0b25zID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgaWYgKCFldmVudC5jdHJsS2V5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpZiAoZXZlbnQua2V5ICE9PSAnQXJyb3dMZWZ0JyAmJiBldmVudC5rZXkgIT09ICdBcnJvd1JpZ2h0JykgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZUtleWJvYXJkVGFyZ2V0KGV2ZW50LnRhcmdldCkpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xyXG4gICAgICBpZiAodGhpcy53aXphcmRDb25maWcuYWxsb3dCYWNrTmF2aWdhdGlvbiA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFN0ZXAgPD0gMCkgcmV0dXJuO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdrZXlib2FyZE5hdmlnYXRpb24nLCB7XHJcbiAgICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICAgIGRpcmVjdGlvbjogJ3ByZXZpb3VzJyxcclxuICAgICAgICBmcm9tU3RlcDogdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXJyb3dSaWdodFxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ2tleWJvYXJkTmF2aWdhdGlvbicsIHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICBkaXJlY3Rpb246IHRoaXMuaXNMYXN0U3RlcCA/ICdmaW5pc2gnIDogJ25leHQnLFxyXG4gICAgICBmcm9tU3RlcDogdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuaXNMYXN0U3RlcCkge1xyXG4gICAgICB2b2lkIHRoaXMuZmluaXNoV2l6YXJkKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2b2lkIHRoaXMuZ29Ub05leHRTdGVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVHJ1ZSBzZSBpbCB0YXJnZXQgZGVsIGtleWRvd24gw6ggdW4gZWxlbWVudG8gZG92ZSBsYSBkaWdpdGF6aW9uZSBoYSBwcmlvcml0w6Agc3VsbGEgc2hvcnRjdXQgd2l6YXJkLiAqL1xyXG4gIHByaXZhdGUgaXNFZGl0YWJsZUtleWJvYXJkVGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRhcmdldCB8fCAhKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZWwgPSB0YXJnZXQ7XHJcbiAgICBpZiAoZWwuaXNDb250ZW50RWRpdGFibGUpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgdGFnID0gZWwudGFnTmFtZTtcclxuICAgIGlmICh0YWcgPT09ICdJTlBVVCcgfHwgdGFnID09PSAnVEVYVEFSRUEnIHx8IHRhZyA9PT0gJ1NFTEVDVCcpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8g4pSA4pSA4pSAIE5hdmlnYXppb25lIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKiogVmFpIGFsbG8gc3RlcCBzdWNjZXNzaXZvIGNvbiB2YWxpZGF6aW9uZS4gKi9cclxuICBhc3luYyBnb1RvTmV4dFN0ZXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5pc0xhc3RTdGVwKSByZXR1cm47XHJcblxyXG4gICAgLy8gVmFsaWRhIHN0ZXAgY29ycmVudGVcclxuICAgIGlmICghKGF3YWl0IHRoaXMudmFsaWRhdGVDdXJyZW50U3RlcCgpKSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFNhbHZhIGRhdGkgc3RlcCBjb3JyZW50ZVxyXG4gICAgdGhpcy5zdGF0ZS5jb21wbGV0ZWRTdGVwcy5hZGQodGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICBhd2FpdCB0aGlzLmF1dG9TYXZlSWZOZWVkZWQoKTtcclxuXHJcbiAgICB0aGlzLm5hdmlnYXRlVG9TdGVwKHRoaXMuc3RhdGUuY3VycmVudFN0ZXAgKyAxKTtcclxuICB9XHJcblxyXG4gIC8qKiBUb3JuYSBhbGxvIHN0ZXAgcHJlY2VkZW50ZS4gKi9cclxuICBnb1RvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFN0ZXAgPD0gMCkgcmV0dXJuO1xyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcCh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwIC0gMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOYXZpZ2F6aW9uZSB0cmFtaXRlIGluZGljYXRvcmkgc3RlcCAoYnVsbGV0ICsgdGl0b2xvKSBxdWFuZG8gYHByb2dyZXNzU3R5bGVgIMOoIGAnc3RlcHMnYC5cclxuICAgKiBDb25zZW50aXRvIHNvbG8gdmVyc28gc3RlcCBnacOgIG1hcmNhdGkgY29tcGxldGF0aS5cclxuICAgKi9cclxuICBvbldpemFyZFN0ZXBJbmRpY2F0b3JTZWxlY3Qoc3RlcEluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcuYWxsb3dTdGVwSW5kaWNhdG9yTmF2aWdhdGlvbiA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy5hbGxvd0JhY2tOYXZpZ2F0aW9uID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgaWYgKHN0ZXBJbmRleCA9PT0gdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCkgcmV0dXJuO1xyXG4gICAgaWYgKCF0aGlzLnN0YXRlLmNvbXBsZXRlZFN0ZXBzLmhhcyhzdGVwSW5kZXgpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5sb2dnZXI/LmxvZ1dpemFyZEFjdGlvbignbmF2aWdhdGlvbicsIHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICB2aWE6ICdzdGVwSW5kaWNhdG9yJyxcclxuICAgICAgZnJvbVN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgIHRvU3RlcDogc3RlcEluZGV4LFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm5hdmlnYXRlVG9TdGVwKHN0ZXBJbmRleCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29tcGxldGEgaWwgd2l6YXJkLiAqL1xyXG4gIGFzeW5jIGZpbmlzaFdpemFyZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghKGF3YWl0IHRoaXMudmFsaWRhdGVDdXJyZW50U3RlcCgpKSkge1xyXG4gICAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdzdGVwVmFsaWRhdGlvbkZhaWxlZCcsIHtcclxuICAgICAgICB3aXphcmRJZDogdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQsXHJcbiAgICAgICAgc3RlcDogdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgICBjb250ZXh0OiAnZmluaXNoJyxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXRlLmNvbXBsZXRlZFN0ZXBzLmFkZCh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwKTtcclxuICAgIGF3YWl0IHRoaXMuYXV0b1NhdmVJZk5lZWRlZCgpO1xyXG5cclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ2NvbXBsZXRlJywge1xyXG4gICAgICB3aXphcmRJZDogdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQsXHJcbiAgICAgIHNjaGVtYUlkOiB0aGlzLnNjaGVtYT8uaWQsXHJcbiAgICAgIHRvdGFsU3RlcHM6IHRoaXMuc3RhdGUudG90YWxTdGVwcyxcclxuICAgICAgY29tcGxldGVkU3RlcHM6IEFycmF5LmZyb20odGhpcy5zdGF0ZS5jb21wbGV0ZWRTdGVwcyksXHJcbiAgICB9KTtcclxuICAgIHRoaXMud2l6YXJkQ29tcGxldGUuZW1pdCh0aGlzLmFjY3VtdWxhdGVkRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKiogU2FsdmEgbG8gc3RlcCBjb3JyZW50ZSBtYW51YWxtZW50ZS4gKi9cclxuICBhc3luYyBzYXZlQ3VycmVudFN0ZXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcub25TdGVwU2F2ZSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge307XHJcbiAgICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ3NhdmUnLCB7XHJcbiAgICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgc2NoZW1hSWQ6IHRoaXMuc2NoZW1hPy5pZCxcclxuICAgICAgfSk7XHJcbiAgICAgIGF3YWl0IHRoaXMud2l6YXJkQ29uZmlnLm9uU3RlcFNhdmUoZGF0YSwgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY2Fuc2lvbmEgZ2xpIHN0ZXAgaW4gb3JkaW5lLCBtYXJjYSBjb21lIGNvbXBsZXRhdGkgcXVlbGxpIHZhbGlkaSByaXNwZXR0byBhbGxlXHJcbiAgICogc3Rlc3NlIHJlZ29sZSBkaSBOZXh0L0NvbXBsZXRhIGUgcG9zaXppb25hIGlsIHdpemFyZCBzdWwgcHJpbW8gc3RlcCBub24gdmFsaWRvXHJcbiAgICogKG8gc3VsbCd1bHRpbW8gc2UgdHV0dGkgdmFsaWRpKS4gVXRpbGUgZG9wbyBpbCBwcmVsb2FkIGRpIGBpbml0aWFsRGF0YWAgaW4gZWRpdC5cclxuICAgKi9cclxuICBhc3luYyByZXN1bWVDb21wbGV0ZWRTdGVwc0Zyb21WYWxpZGF0aW9uKFxyXG4gICAgb3B0aW9ucz86IFVpV2l6YXJkUmVzdW1lT3B0aW9ucyxcclxuICApOiBQcm9taXNlPFVpV2l6YXJkUmVzdW1lUmVzdWx0PiB7XHJcbiAgICBjb25zdCBlbWl0U3RlcENvbXBsZXRlID0gb3B0aW9ucz8uZW1pdFN0ZXBDb21wbGV0ZSA/PyBmYWxzZTtcclxuICAgIGNvbnN0IGVtaXRTdGVwU2F2ZSA9IG9wdGlvbnM/LmVtaXRTdGVwU2F2ZSA/PyBmYWxzZTtcclxuXHJcbiAgICBpZiAoIXRoaXMuc2NoZW1hIHx8IHRoaXMuc3RhdGUudG90YWxTdGVwcyA8PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGxhc3RDb21wbGV0ZWRTdGVwOiAtMSwgY3VycmVudFN0ZXA6IDAgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdyZXN1bWUnLCB7XHJcbiAgICAgIHdpemFyZElkOiB0aGlzLndpemFyZENvbmZpZz8ud2l6YXJkSWQsXHJcbiAgICAgIHNjaGVtYUlkOiB0aGlzLnNjaGVtYS5pZCxcclxuICAgICAgdG90YWxTdGVwczogdGhpcy5zdGF0ZS50b3RhbFN0ZXBzLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY29tcGxldGVkID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICBsZXQgbGFzdENvbXBsZXRlZFN0ZXAgPSAtMTtcclxuICAgIGxldCB0YXJnZXRTdGVwID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3RhdGUudG90YWxTdGVwczsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJlYWR5ID0gYXdhaXQgdGhpcy5wcmVwYXJlU3RlcEZvclZhbGlkYXRpb24oaSk7XHJcbiAgICAgIGlmICghcmVhZHkpIHtcclxuICAgICAgICB0YXJnZXRTdGVwID0gaTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQ3VycmVudFN0ZXAoe1xyXG4gICAgICAgIGVtaXRTdGVwQ29tcGxldGUsXHJcbiAgICAgICAgZW1pdFN0ZXBWYWxpZGF0aW9uRmFpbGVkOiBmYWxzZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgdGFyZ2V0U3RlcCA9IGk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbXBsZXRlZC5hZGQoaSk7XHJcbiAgICAgIGxhc3RDb21wbGV0ZWRTdGVwID0gaTtcclxuICAgICAgdGFyZ2V0U3RlcCA9IGk7XHJcblxyXG4gICAgICB0aGlzLmFjY3VtdWxhdGVkRGF0YSA9IHtcclxuICAgICAgICAuLi50aGlzLmFjY3VtdWxhdGVkRGF0YSxcclxuICAgICAgICAuLi4odGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge30pLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKGVtaXRTdGVwU2F2ZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYXV0b1NhdmVJZk5lZWRlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGF0ZS5jb21wbGV0ZWRTdGVwcyA9IGNvbXBsZXRlZDtcclxuICAgIGZvciAobGV0IHYgPSAwOyB2IDw9IHRhcmdldFN0ZXA7IHYrKykge1xyXG4gICAgICB0aGlzLnN0YXRlLnZpc2l0ZWRTdGVwcy5hZGQodik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFN0ZXAgIT09IHRhcmdldFN0ZXApIHtcclxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcCh0YXJnZXRTdGVwKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3luY1dpemFyZFN0YXRlKCk7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9nZ2VyPy5sb2dXaXphcmRBY3Rpb24oJ3Jlc3VtZUNvbXBsZXRlJywge1xyXG4gICAgICB3aXphcmRJZDogdGhpcy53aXphcmRDb25maWc/LndpemFyZElkLFxyXG4gICAgICBsYXN0Q29tcGxldGVkU3RlcCxcclxuICAgICAgY3VycmVudFN0ZXA6IHRhcmdldFN0ZXAsXHJcbiAgICAgIGNvbXBsZXRlZFN0ZXBzOiBBcnJheS5mcm9tKGNvbXBsZXRlZCksXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4geyBsYXN0Q29tcGxldGVkU3RlcCwgY3VycmVudFN0ZXA6IHRhcmdldFN0ZXAgfTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBDYWxsYmFjayBmb3JtIGJ1aWxkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIG9uVmFsdWVDaGFuZ2UoZGF0YTogVWlGb3JtRGF0YSk6IHZvaWQge1xyXG4gICAgdGhpcy5hY2N1bXVsYXRlZERhdGEgPSB7IC4uLnRoaXMuYWNjdW11bGF0ZWREYXRhLCAuLi5kYXRhIH07XHJcbiAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCd2YWx1ZUNoYW5nZScsIHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICBzdGVwOiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICBzY2hlbWFJZDogdGhpcy5zY2hlbWE/LmlkLFxyXG4gICAgICBjaGFuZ2VkS2V5czogT2JqZWN0LmtleXMoZGF0YSksXHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmFjY3VtdWxhdGVkRGF0YSk7XHJcbiAgfVxyXG5cclxuICBvblZhbGlkYXRpb25DaGFuZ2Uoc3RhdGU6IFVpRm9ybVZhbGlkYXRpb25TdGF0ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0ZS5pc1ZhbGlkID0gc3RhdGUudmFsaWQ7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdChzdGF0ZSk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgTmF2aWdhemlvbmUgaW50ZXJuYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvU3RlcCh0YXJnZXRTdGVwOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh0YXJnZXRTdGVwIDwgMCB8fCB0YXJnZXRTdGVwID49IHRoaXMuc3RhdGUudG90YWxTdGVwcykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGZyb20gPSB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwO1xyXG4gICAgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCA9IHRhcmdldFN0ZXA7XHJcbiAgICB0aGlzLnN0YXRlLnZpc2l0ZWRTdGVwcy5hZGQodGFyZ2V0U3RlcCk7XHJcblxyXG4gICAgLy8gSW52YWxpZGEgbGEgY2FjaGUgcGVyIGZvcnphcmUgbGEgY3JlYXppb25lIGRpIHVuIG51b3ZvIHNjaGVtYVxyXG4gICAgdGhpcy5fY2FjaGVkU3RlcFNjaGVtYSA9IG51bGw7XHJcbiAgICB0aGlzLl9jYWNoZWRTdGVwSW5kZXggPSAtMTtcclxuXHJcbiAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdzdGVwQ2hhbmdlJywge1xyXG4gICAgICB3aXphcmRJZDogdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQsXHJcbiAgICAgIGZyb20sXHJcbiAgICAgIHRvOiB0YXJnZXRTdGVwLFxyXG4gICAgICBkaXJlY3Rpb246IHRhcmdldFN0ZXAgPiBmcm9tID8gJ25leHQnIDogJ3ByZXZpb3VzJyxcclxuICAgICAgc2NoZW1hSWQ6IHRoaXMuc2NoZW1hPy5pZCxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KHtcclxuICAgICAgZnJvbSxcclxuICAgICAgdG86IHRhcmdldFN0ZXAsXHJcbiAgICAgIGRpcmVjdGlvbjogdGFyZ2V0U3RlcCA+IGZyb20gPyAnbmV4dCcgOiAncHJldmlvdXMnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zeW5jV2l6YXJkU3RhdGUoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUN1cnJlbnRTdGVwKG9wdGlvbnM/OiB7XHJcbiAgICBlbWl0U3RlcENvbXBsZXRlPzogYm9vbGVhbjtcclxuICAgIGVtaXRTdGVwVmFsaWRhdGlvbkZhaWxlZD86IGJvb2xlYW47XHJcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgZW1pdFN0ZXBDb21wbGV0ZSA9IG9wdGlvbnM/LmVtaXRTdGVwQ29tcGxldGUgPz8gdHJ1ZTtcclxuICAgIGNvbnN0IGVtaXRTdGVwVmFsaWRhdGlvbkZhaWxlZCA9IG9wdGlvbnM/LmVtaXRTdGVwVmFsaWRhdGlvbkZhaWxlZCA/PyB0cnVlO1xyXG5cclxuICAgIHRoaXMuZm9ybUJ1aWxkZXI/LnZhbGlkYXRlQWxsRmllbGRzKCk7XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMud2l6YXJkU3RlcEdyb3Vwc1t0aGlzLnN0YXRlLmN1cnJlbnRTdGVwXTtcclxuICAgIGNvbnN0IHByaW1hcnkgPSBncm91cD8uWzBdO1xyXG4gICAgY29uc3QgdmFsaWRhdGVDdXN0b21Db21wb25lbnRzID1cclxuICAgICAgcHJpbWFyeT8ud2l6YXJkU3RlcD8udmFsaWRhdGlvbj8udmFsaWRhdGVDdXN0b21Db21wb25lbnRzICE9PSBmYWxzZTtcclxuICAgIGNvbnN0IGN1c3RvbUZpZWxkS2V5cyA9IG5ldyBTZXQodGhpcy5nZXRDdXN0b21GaWVsZEtleXNGb3JHcm91cChncm91cCkpO1xyXG5cclxuICAgIGNvbnN0IGlzRm9ybVZhbGlkID0gdmFsaWRhdGVDdXN0b21Db21wb25lbnRzXHJcbiAgICAgID8gKHRoaXMuZm9ybUJ1aWxkZXI/LmlzRm9ybVZhbGlkKCkgPz8gdHJ1ZSlcclxuICAgICAgOiAodGhpcy5mb3JtQnVpbGRlcj8uaXNGb3JtVmFsaWRFeGNsdWRpbmdGaWVsZEtleXMoY3VzdG9tRmllbGRLZXlzKSA/P1xyXG4gICAgICAgIHRydWUpO1xyXG5cclxuICAgIGNvbnN0IGN1c3RvbUZuTmFtZSA9IHByaW1hcnk/LndpemFyZFN0ZXA/LmN1c3RvbVZhbGlkYXRpb25GbjtcclxuXHJcbiAgICBpZiAoY3VzdG9tRm5OYW1lICYmIHRoaXMuY3VzdG9tVmFsaWRhdGlvbk1ldGhvZHNbY3VzdG9tRm5OYW1lXSkge1xyXG4gICAgICBjb25zdCBjdXN0b21WYWxpZCA9IGF3YWl0IHRoaXMuY3VzdG9tVmFsaWRhdGlvbk1ldGhvZHNbY3VzdG9tRm5OYW1lXShcclxuICAgICAgICB0aGlzLmFjY3VtdWxhdGVkRGF0YSxcclxuICAgICAgICB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICAgIGlzRm9ybVZhbGlkLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCFjdXN0b21WYWxpZCkge1xyXG4gICAgICAgIGlmIChlbWl0U3RlcFZhbGlkYXRpb25GYWlsZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RlcFZhbGlkYXRpb25GYWlsZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgICAgIGVycm9yczogWydWYWxpZGF6aW9uZSBjdXN0b20gZmFsbGl0YSddLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNGb3JtVmFsaWQgJiYgcHJpbWFyeT8ud2l6YXJkU3RlcD8udmFsaWRhdGlvbj8ucmVxdWlyZWQgIT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBkZXRhaWxzID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0RGV0YWlsZWRGb3JtRXJyb3JzKCkgfHwgW107XHJcbiAgICAgIGlmICghdmFsaWRhdGVDdXN0b21Db21wb25lbnRzICYmIGdyb3VwPy5sZW5ndGgpIHtcclxuICAgICAgICBkZXRhaWxzID0gdGhpcy5maWx0ZXJFcnJvckRldGFpbHNFeGNsdWRpbmdDdXN0b21GaWVsZHMoXHJcbiAgICAgICAgICBkZXRhaWxzLFxyXG4gICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICBjdXN0b21GaWVsZEtleXMsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBlcnJvcnMgPSBkZXRhaWxzLmZsYXRNYXAoKGUpID0+IGUuZXJyb3JzKTtcclxuICAgICAgdGhpcy5sb2dnZXI/LmxvZ1dpemFyZEFjdGlvbignc3RlcFZhbGlkYXRpb25GYWlsZWQnLCB7XHJcbiAgICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgZXJyb3JzLFxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVtaXRTdGVwVmFsaWRhdGlvbkZhaWxlZCkge1xyXG4gICAgICAgIHRoaXMuc3RlcFZhbGlkYXRpb25GYWlsZWQuZW1pdCh7XHJcbiAgICAgICAgICBzdGVwOiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICAgICAgZXJyb3JzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZW1pdFN0ZXBDb21wbGV0ZSkge1xyXG4gICAgICB0aGlzLmxvZ2dlcj8ubG9nV2l6YXJkQWN0aW9uKCdzdGVwQ29tcGxldGUnLCB7XHJcbiAgICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgc2NoZW1hSWQ6IHRoaXMuc2NoZW1hPy5pZCxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc3RlcENvbXBsZXRlLmVtaXQoe1xyXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgZGF0YTogdGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge30sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE5hdmlnYSBhbGxvIHN0ZXAgZSBhdHRlbmRlIGlsIG1vdW50IGRlbCBmb3JtIGJ1aWxkZXIgcGVyIGxhIHZhbGlkYXppb25lIHJlc3VtZS4gKi9cclxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVTdGVwRm9yVmFsaWRhdGlvbihzdGVwSW5kZXg6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcChzdGVwSW5kZXgpO1xyXG4gICAgcmV0dXJuIHRoaXMud2FpdEZvckZvcm1CdWlsZGVyUmVhZHkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckZvcm1CdWlsZGVyUmVhZHkobWF4QXR0ZW1wdHMgPSAzMCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybUJ1aWxkZXIpIHtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAwKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSYWdncnVwcGEgbGUgc2V6aW9uaSBjb24gYHdpemFyZFN0ZXBgIHBlciBgc3RlcE51bWJlcmAgKG9yZGluZSBzdGFiaWxlIHBlciBudW1lcm8sIHBvaSBvcmRpbmUgZGkgYXBwYXJpemlvbmUgbmVsbG8gc2NoZW1hKS5cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkV2l6YXJkU3RlcEdyb3VwcyhzZWN0aW9uczogVWlGb3JtU2VjdGlvbltdKTogVWlGb3JtU2VjdGlvbltdW10ge1xyXG4gICAgY29uc3Qgd2l0aFdpemFyZCA9IHNlY3Rpb25zLmZpbHRlcigocykgPT4gcy53aXphcmRTdGVwKTtcclxuICAgIHdpdGhXaXphcmQuc29ydChcclxuICAgICAgKGEsIGIpID0+XHJcbiAgICAgICAgKGEud2l6YXJkU3RlcCEuc3RlcE51bWJlciB8fCAwKSAtIChiLndpemFyZFN0ZXAhLnN0ZXBOdW1iZXIgfHwgMCksXHJcbiAgICApO1xyXG4gICAgY29uc3QgZ3JvdXBzOiBVaUZvcm1TZWN0aW9uW11bXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBzIG9mIHdpdGhXaXphcmQpIHtcclxuICAgICAgY29uc3QgbnVtID0gcy53aXphcmRTdGVwIS5zdGVwTnVtYmVyO1xyXG4gICAgICBjb25zdCBwcmV2ID0gZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXY/Lmxlbmd0aCAmJlxyXG4gICAgICAgIChwcmV2WzBdLndpemFyZFN0ZXAhLnN0ZXBOdW1iZXIgfHwgMCkgPT09IChudW0gfHwgMClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcHJldi5wdXNoKHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKFtzXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hpYXZpIGRlaSBjYW1waSBgY3VzdG9tYCBpbiB0dXR0ZSBsZSBzZXppb25pIGRlbCBwYXNzbyBjb3JyZW50ZS4gKi9cclxuICBwcml2YXRlIGdldEN1c3RvbUZpZWxkS2V5c0Zvckdyb3VwKFxyXG4gICAgZ3JvdXA6IFVpRm9ybVNlY3Rpb25bXSB8IHVuZGVmaW5lZCxcclxuICApOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIWdyb3VwPy5sZW5ndGgpIHJldHVybiBbXTtcclxuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZ3JvdXApIHtcclxuICAgICAgZm9yIChjb25zdCBmIG9mIHNlY3Rpb24uZmllbGRzIHx8IFtdKSB7XHJcbiAgICAgICAgaWYgKGYudHlwZSA9PT0gJ2N1c3RvbScpIGtleXMucHVzaChmLmtleSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBrZXlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJpbXVvdmUgZGFnbGkgZXJyb3JpIGkgY2FtcGkgY3VzdG9tIHF1YW5kbyBgdmFsaWRhdGVDdXN0b21Db21wb25lbnRzYCDDqCBmYWxzZS4gKi9cclxuICBwcml2YXRlIGZpbHRlckVycm9yRGV0YWlsc0V4Y2x1ZGluZ0N1c3RvbUZpZWxkcyhcclxuICAgIGRldGFpbHM6IFVpRm9ybUVycm9yRGV0YWlsW10sXHJcbiAgICBncm91cDogVWlGb3JtU2VjdGlvbltdLFxyXG4gICAgY3VzdG9tS2V5czogU2V0PHN0cmluZz4sXHJcbiAgKTogVWlGb3JtRXJyb3JEZXRhaWxbXSB7XHJcbiAgICBjb25zdCBzZWN0aW9uSWRzID0gZ3JvdXAubWFwKChzKSA9PiBzLmlkKTtcclxuICAgIHJldHVybiBkZXRhaWxzLmZpbHRlcigoZCkgPT4ge1xyXG4gICAgICBjb25zdCBsb2dpY2FsS2V5ID0gdGhpcy5sb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5Rm9yR3JvdXAoXHJcbiAgICAgICAgZC5maWVsZEtleSxcclxuICAgICAgICBzZWN0aW9uSWRzLFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gIWN1c3RvbUtleXMuaGFzKGxvZ2ljYWxLZXkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaXNvbHZlIGxhIGNoaWF2ZSBsb2dpY2EgZGVsIGNhbXBvIHJpc3BldHRvIGEgdHV0dGUgbGUgc2V6aW9uaSBkZWwgZ3J1cHBvIChjYW1waSBmbGF0IG8gcmVwZWF0YWJsZSkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5Rm9yR3JvdXAoXHJcbiAgICBmaWVsZEtleTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbklkczogc3RyaW5nW10sXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2VjdGlvbklkcykge1xyXG4gICAgICBjb25zdCBrID0gdGhpcy5sb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5KGZpZWxkS2V5LCBpZCk7XHJcbiAgICAgIGlmIChrICE9PSBmaWVsZEtleSkgcmV0dXJuIGs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICAvKiogRXN0cmFlIGxhIGNoaWF2ZSBjYW1wbyBkYSBgZmllbGRLZXlgIGZsYXQgbyBgc2VjdGlvbklkW2ldLmZpZWxkS2V5YC4gKi9cclxuICBwcml2YXRlIGxvZ2ljYWxGaWVsZEtleUZyb21EZXRhaWxLZXkoXHJcbiAgICBmaWVsZEtleTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7dGhpcy5lc2NhcGVSZWdFeHAoc2VjdGlvbklkKX1cXFxcW1xcXFxkK1xcXFxdXFxcXC4oLispJGApO1xyXG4gICAgY29uc3QgbSA9IGZpZWxkS2V5Lm1hdGNoKHJlKTtcclxuICAgIHJldHVybiBtID8gbVsxXSA6IGZpZWxkS2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlc2NhcGVSZWdFeHAoczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGF1dG9TYXZlSWZOZWVkZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcuYXV0b1NhdmUgJiYgdGhpcy53aXphcmRDb25maWcub25TdGVwU2F2ZSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge307XHJcbiAgICAgIGF3YWl0IHRoaXMud2l6YXJkQ29uZmlnLm9uU3RlcFNhdmUoZGF0YSwgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN5bmNXaXphcmRTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzeW5jRGF0YTogVWlXaXphcmRTeW5jRGF0YSA9IHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICB3aXphcmRTdGF0ZTogeyAuLi50aGlzLnN0YXRlIH0sXHJcbiAgICAgIHdpemFyZFN0ZXBzOiB0aGlzLndpemFyZFN0ZXBHcm91cHMubWFwKChnKSA9PiAoe1xyXG4gICAgICAgIHRpdGxlOiBnWzBdPy53aXphcmRTdGVwPy5zdGVwVGl0bGUgfHwgZ1swXT8udGl0bGUsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGdbMF0/LndpemFyZFN0ZXA/LnN0ZXBEZXNjcmlwdGlvbiB8fCBnWzBdPy5kZXNjcmlwdGlvbixcclxuICAgICAgfSkpLFxyXG4gICAgICBpc1dpemFyZE1vZGU6IHRydWUsXHJcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMud2l6YXJkU3luYy5yZWdpc3RlcldpemFyZCh0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCwgc3luY0RhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -110,4 +110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
110
110
  }], blurred: [{
111
111
  type: Output
112
112
  }] } });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1udW1iZXItZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvc3ViLWNvbXBvbmVudHMvZm9ybS1maWVsZHMvZm9ybS1udW1iZXItZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvc3ViLWNvbXBvbmVudHMvZm9ybS1maWVsZHMvZm9ybS1udW1iZXItZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFFTCxNQUFNLEVBRU4saUJBQWlCLEVBRWpCLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5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LG1CQUFtQixnUEFFbkIsd0JBQXdCOzs0RkFnQmYsMEJBQTBCO2tCQWxDdEMsU0FBUzsrQkFFRSxzQkFBc0IsY0FFcEIsSUFBSSxXQUVQO3dCQUVQLG1CQUFtQjt3QkFFbkIsa0JBQWtCO3dCQUVsQixjQUFjO3dCQUVkLGdCQUFnQjt3QkFFaEIsbUJBQW1CO3dCQUVuQix3QkFBd0I7cUJBRXpCLG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUVoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBRTFCLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLENBQUM7OEJBY3JFLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlJLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcclxuICBDb21wb25lbnQsXHJcclxuICBFdmVudEVtaXR0ZXIsXHJcclxuICBJbnB1dCxcclxyXG4gIE91dHB1dCxcclxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXHJcbiAgaW5qZWN0LFxyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxyXG5pbXBvcnQgeyBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxyXG5pbXBvcnQgeyBMdWNpZGVBbmd1bGFyTW9kdWxlIH0gZnJvbSAnbHVjaWRlLWFuZ3VsYXInO1xyXHJcbmltcG9ydCB7IFVpQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY3VycmVuY3ktaW5wdXQuZGlyZWN0aXZlJztcclxyXG5pbXBvcnQgeyBVaUZvcm1FcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tZXJyb3Itc3RhdGUubWF0Y2hlcic7XHJcclxuaW1wb3J0IHsgVWlGb3JtRmllbGRFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLWZpZWxkLWVycm9yLnNlcnZpY2UnO1xyXHJcbmltcG9ydCB7IFVpRm9ybUZpZWxkRGVzY3JpcHRvciB9IGZyb20gJy4uLy4uL3R5cGVzL2ZpZWxkLnR5cGVzJztcclxyXG5pbXBvcnQgeyBVaVZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdmFsaWRhdGlvbi50eXBlcyc7XHJcclxuXHJcclxuLyoqXHJcclxuICogQ2FtcG8gYXRvbWljbyBudW1iZXIgLyBjdXJyZW5jeSDigJQgc3Rlc3NvIHJlbmRlcmluZyBkZWwgZm9ybS1idWlsZGVyLlxyXHJcbiAqXHJcclxuICogQHNlbGVjdG9yIHVpLWZvcm0tbnVtYmVyLWZpZWxkXHJcclxuICovXHJcclxuQENvbXBvbmVudCh7XHJcclxuICBzZWxlY3RvcjogJ3VpLWZvcm0tbnVtYmVyLWZpZWxkJyxcclxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcclxuICBpbXBvcnRzOiBbXHJcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcclxuICAgIEx1Y2lkZUFuZ3VsYXJNb2R1bGUsXHJcclxuICAgIFVpQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSxcclxyXG4gIF0sXHJcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEVycm9yU3RhdGVNYXRjaGVyLCB1c2VDbGFzczogVWlGb3JtRXJyb3JTdGF0ZU1hdGNoZXIgfV0sXHJcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1udW1iZXItZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXHJcbiAgc3R5bGVVcmw6ICcuL2Zvcm0tZmllbGRzLnNjc3MnLFxyXHJcbn0pXHJcclxuZXhwb3J0IGNsYXNzIFVpRm9ybU51bWJlckZpZWxkQ29tcG9uZW50IHtcclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZmllbGRFcnJvclNlcnZpY2UgPSBpbmplY3QoVWlGb3JtRmllbGRFcnJvclNlcnZpY2UpO1xyXHJcblxyXHJcbiAgQElucHV0KCkgZmllbGQ/OiBVaUZvcm1GaWVsZERlc2NyaXB0b3I7XHJcclxuICBASW5wdXQoKSBmb3JtR3JvdXA/OiBGb3JtR3JvdXA7XHJcclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXHJcbiAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xyXHJcblxyXHJcbiAgQElucHV0KCkgY29udHJvbD86IEZvcm1Db250cm9sO1xyXHJcbiAgQElucHV0KCkgbGFiZWw/OiBzdHJpbmc7XHJcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcj86IHN0cmluZztcclxyXG4gIEBJbnB1dCgpIHZhbGlkYXRpb25SdWxlcz86IFVpVmFsaWRhdGlvblJ1bGVbXTtcclxyXG4gIC8qKiBNb2RhbGl0w6AgdmFsdXRhIHN0YW5kYWxvbmUgKGVxdWl2YWxlbnRlIGEgYGZpZWxkLm1ldGFkYXRhLnR5cGUgPT09ICdjdXJyZW5jeSdgKS4gKi9cclxyXG4gIEBJbnB1dCgpIGN1cnJlbmN5TW9kZSA9IGZhbHNlO1xyXHJcbiAgQElucHV0KCkgY3VycmVuY3lTeW1ib2wgPSAnRVVSJztcclxyXG4gIEBJbnB1dCgpIGRlY2ltYWxQbGFjZXMgPSAyO1xyXHJcblxyXHJcbiAgQE91dHB1dCgpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcclxuXHJcclxuICBnZXQgZWZmZWN0aXZlTGFiZWwoKTogc3RyaW5nIHtcclxyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQ/LmxhYmVsID8/IHRoaXMubGFiZWwgPz8gJyc7XHJcclxuICB9XHJcclxuXHJcclxuICBnZXQgZWZmZWN0aXZlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQ/LnBsYWNlaG9sZGVyID8/IHRoaXMucGxhY2Vob2xkZXIgPz8gJyc7XHJcclxuICB9XHJcclxuXHJcclxuICBnZXQgaXNSZWFkb25seSgpOiBib29sZWFuIHtcclxyXG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHkgfHwgdGhpcy5maWVsZD8ucmVhZG9ubHkgPT09IHRydWU7XHJcclxuICB9XHJcclxuXHJcclxuICBnZXQgaXNDdXJyZW5jeSgpOiBib29sZWFuIHtcclxyXG4gICAgaWYgKHRoaXMuZmllbGQ/Lm1ldGFkYXRhPy5bJ3R5cGUnXSA9PT0gJ2N1cnJlbmN5JykgcmV0dXJuIHRydWU7XHJcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbmN5TW9kZTtcclxyXG4gIH1cclxyXG5cclxyXG4gIGdldCBlZmZlY3RpdmVDdXJyZW5jeVN5bWJvbCgpOiBzdHJpbmcge1xyXHJcbiAgICByZXR1cm4gKHRoaXMuZmllbGQ/Lm1ldGFkYXRhPy5bJ2N1cnJlbmN5J10gYXMgc3RyaW5nKSB8fCB0aGlzLmN1cnJlbmN5U3ltYm9sO1xyXHJcbiAgfVxyXHJcblxyXHJcbiAgZ2V0IGVmZmVjdGl2ZURlY2ltYWxQbGFjZXMoKTogbnVtYmVyIHtcclxyXG4gICAgY29uc3QgZnJvbUZpZWxkID0gdGhpcy5maWVsZD8ubWV0YWRhdGE/LlsnZGVjaW1hbHMnXTtcclxyXG4gICAgcmV0dXJuIGZyb21GaWVsZCAhPSBudWxsID8gTnVtYmVyKGZyb21GaWVsZCkgOiB0aGlzLmRlY2ltYWxQbGFjZXM7XHJcclxuICB9XHJcclxuXHJcclxuICBnZXQgZWZmZWN0aXZlUnVsZXMoKTogVWlWYWxpZGF0aW9uUnVsZVtdIHtcclxyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQ/LnZhbGlkYXRpb24gPz8gdGhpcy52YWxpZGF0aW9uUnVsZXMgPz8gW107XHJcclxuICB9XHJcclxuXHJcclxuICBnZXQgZmllbGRDb250cm9sKCk6IEZvcm1Db250cm9sIHwgbnVsbCB7XHJcclxuICAgIGlmICghdGhpcy5maWVsZCB8fCAhdGhpcy5mb3JtR3JvdXApIHJldHVybiBudWxsO1xyXHJcbiAgICBjb25zdCBjID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZmllbGQua2V5KTtcclxyXG4gICAgcmV0dXJuIGMgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCA/IGMgOiBudWxsO1xyXHJcbiAgfVxyXHJcblxyXHJcbiAgcmVzb2x2ZWRFcnJvcnMoY29udHJvbDogRm9ybUNvbnRyb2wgfCBudWxsKTogc3RyaW5nW10ge1xyXHJcbiAgICBpZiAodGhpcy5lcnJvcnMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuZXJyb3JzO1xyXHJcbiAgICByZXR1cm4gdGhpcy5maWVsZEVycm9yU2VydmljZS5nZXRGaWVsZEVycm9ycyhjb250cm9sLCB0aGlzLmVmZmVjdGl2ZVJ1bGVzKTtcclxyXG4gIH1cclxyXG5cclxyXG4gIG9uQmx1cigpOiB2b2lkIHtcclxyXG4gICAgdGhpcy5ibHVycmVkLmVtaXQoKTtcclxyXG4gIH1cclxyXG59XHJcclxuXHIiLCJAaWYgKGZpZWxkICYmIGZvcm1Hcm91cCkge1xyXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cInVpLWZiLWZpZWxkLWN0eFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ1aS1mb3JtLWJ1aWxkZXJfX2Z1bGwtd2lkdGhcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3sgZWZmZWN0aXZlTGFiZWwgfX08L21hdC1sYWJlbD5cclxuICAgICAgQGlmIChpc0N1cnJlbmN5KSB7XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVmZmVjdGl2ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcclxuICAgICAgICAgIHVpQ3VycmVuY3lJbnB1dFxyXG4gICAgICAgICAgW2N1cnJlbmN5U3ltYm9sXT1cImVmZmVjdGl2ZUN1cnJlbmN5U3ltYm9sXCJcclxuICAgICAgICAgIFtkZWNpbWFsUGxhY2VzXT1cImVmZmVjdGl2ZURlY2ltYWxQbGFjZXNcIlxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVmZmVjdGl2ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcclxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAvPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoZmllbGQuaWNvblRvb2x0aXApIHtcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5pY29uVG9vbHRpcC50ZXh0XCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmllbGQuaWNvblRvb2x0aXAudGV4dFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGx1Y2lkZS1pY29uIFtuYW1lXT1cImZpZWxkLmljb25Ub29sdGlwLmljb24gfHwgJ2luZm8nXCIgW3NpemVdPVwiMThcIiAvPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgQGZvciAoZXJyIG9mIHJlc29sdmVkRXJyb3JzKGZpZWxkQ29udHJvbCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdj57eyBlcnIgfX08L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxufSBAZWxzZSBpZiAoY29udHJvbCkge1xyXG4gIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLWZpZWxkLWF0b21cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidWktZm9ybS1idWlsZGVyX19mdWxsLXdpZHRoXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICBAaWYgKGVmZmVjdGl2ZUxhYmVsKSB7XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyBlZmZlY3RpdmVMYWJlbCB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoaXNDdXJyZW5jeSkge1xyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJlZmZlY3RpdmVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICB1aUN1cnJlbmN5SW5wdXRcclxuICAgICAgICAgIFtjdXJyZW5jeVN5bWJvbF09XCJlZmZlY3RpdmVDdXJyZW5jeVN5bWJvbFwiXHJcbiAgICAgICAgICBbZGVjaW1hbFBsYWNlc109XCJlZmZlY3RpdmVEZWNpbWFsUGxhY2VzXCJcclxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAvPlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJlZmZlY3RpdmVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgfVxyXG4gICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgIEBmb3IgKGVyciBvZiByZXNvbHZlZEVycm9ycyhjb250cm9sKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2Pnt7IGVyciB9fTwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1udW1iZXItZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvc3ViLWNvbXBvbmVudHMvZm9ybS1maWVsZHMvZm9ybS1udW1iZXItZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvc3ViLWNvbXBvbmVudHMvZm9ybS1maWVsZHMvZm9ybS1udW1iZXItZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUVaLEtBQUssRUFFTCxNQUFNLEVBRU4saUJBQWlCLEVBRWpCLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWxGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5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LG1CQUFtQixnUEFFbkIsd0JBQXdCOzs0RkFnQmYsMEJBQTBCO2tCQWxDdEMsU0FBUzsrQkFFRSxzQkFBc0IsY0FFcEIsSUFBSSxXQUVQO3dCQUVQLG1CQUFtQjt3QkFFbkIsa0JBQWtCO3dCQUVsQixjQUFjO3dCQUVkLGdCQUFnQjt3QkFFaEIsbUJBQW1CO3dCQUVuQix3QkFBd0I7cUJBRXpCLG1CQUVnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUVoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBRTFCLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLENBQUM7OEJBY3JFLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUlJLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuXHJcbiAgQ29tcG9uZW50LFxyXG5cclxuICBFdmVudEVtaXR0ZXIsXHJcblxyXG4gIElucHV0LFxyXG5cclxuICBPdXRwdXQsXHJcblxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG5cclxuICBpbmplY3QsXHJcblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuXHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5cclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSB9IGZyb20gJ2x1Y2lkZS1hbmd1bGFyJztcclxuXHJcbmltcG9ydCB7IFVpQ3VycmVuY3lJbnB1dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY3VycmVuY3ktaW5wdXQuZGlyZWN0aXZlJztcclxuXHJcbmltcG9ydCB7IFVpRm9ybUVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1lcnJvci1zdGF0ZS5tYXRjaGVyJztcclxuXHJcbmltcG9ydCB7IFVpRm9ybUZpZWxkRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1maWVsZC1lcnJvci5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IFVpRm9ybUZpZWxkRGVzY3JpcHRvciB9IGZyb20gJy4uLy4uL3R5cGVzL2ZpZWxkLnR5cGVzJztcclxuXHJcbmltcG9ydCB7IFVpVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuLi8uLi90eXBlcy92YWxpZGF0aW9uLnR5cGVzJztcclxuXHJcblxyXG5cclxuLyoqXHJcblxyXG4gKiBDYW1wbyBhdG9taWNvIG51bWJlciAvIGN1cnJlbmN5IOKAlCBzdGVzc28gcmVuZGVyaW5nIGRlbCBmb3JtLWJ1aWxkZXIuXHJcblxyXG4gKlxyXG5cclxuICogQHNlbGVjdG9yIHVpLWZvcm0tbnVtYmVyLWZpZWxkXHJcblxyXG4gKi9cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ3VpLWZvcm0tbnVtYmVyLWZpZWxkJyxcclxuXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuXHJcbiAgaW1wb3J0czogW1xyXG5cclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcblxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG5cclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG5cclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcblxyXG4gICAgTHVjaWRlQW5ndWxhck1vZHVsZSxcclxuXHJcbiAgICBVaUN1cnJlbmN5SW5wdXREaXJlY3RpdmUsXHJcblxyXG4gIF0sXHJcblxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG5cclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG5cclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEVycm9yU3RhdGVNYXRjaGVyLCB1c2VDbGFzczogVWlGb3JtRXJyb3JTdGF0ZU1hdGNoZXIgfV0sXHJcblxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLW51bWJlci1maWVsZC5jb21wb25lbnQuaHRtbCcsXHJcblxyXG4gIHN0eWxlVXJsOiAnLi9mb3JtLWZpZWxkcy5zY3NzJyxcclxuXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVWlGb3JtTnVtYmVyRmllbGRDb21wb25lbnQge1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkRXJyb3JTZXJ2aWNlID0gaW5qZWN0KFVpRm9ybUZpZWxkRXJyb3JTZXJ2aWNlKTtcclxuXHJcblxyXG5cclxuICBASW5wdXQoKSBmaWVsZD86IFVpRm9ybUZpZWxkRGVzY3JpcHRvcjtcclxuXHJcbiAgQElucHV0KCkgZm9ybUdyb3VwPzogRm9ybUdyb3VwO1xyXG5cclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuXHJcbiAgQElucHV0KCkgY29udHJvbD86IEZvcm1Db250cm9sO1xyXG5cclxuICBASW5wdXQoKSBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHZhbGlkYXRpb25SdWxlcz86IFVpVmFsaWRhdGlvblJ1bGVbXTtcclxuXHJcbiAgLyoqIE1vZGFsaXTDoCB2YWx1dGEgc3RhbmRhbG9uZSAoZXF1aXZhbGVudGUgYSBgZmllbGQubWV0YWRhdGEudHlwZSA9PT0gJ2N1cnJlbmN5J2ApLiAqL1xyXG5cclxuICBASW5wdXQoKSBjdXJyZW5jeU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY3VycmVuY3lTeW1ib2wgPSAnRVVSJztcclxuXHJcbiAgQElucHV0KCkgZGVjaW1hbFBsYWNlcyA9IDI7XHJcblxyXG5cclxuXHJcbiAgQE91dHB1dCgpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG5cclxuXHJcbiAgZ2V0IGVmZmVjdGl2ZUxhYmVsKCk6IHN0cmluZyB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuZmllbGQ/LmxhYmVsID8/IHRoaXMubGFiZWwgPz8gJyc7XHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuICBnZXQgZWZmZWN0aXZlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5maWVsZD8ucGxhY2Vob2xkZXIgPz8gdGhpcy5wbGFjZWhvbGRlciA/PyAnJztcclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZmllbGQ/LnJlYWRvbmx5ID09PSB0cnVlO1xyXG5cclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0IGlzQ3VycmVuY3koKTogYm9vbGVhbiB7XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGQ/Lm1ldGFkYXRhPy5bJ3R5cGUnXSA9PT0gJ2N1cnJlbmN5JykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3VycmVuY3lNb2RlO1xyXG5cclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0IGVmZmVjdGl2ZUN1cnJlbmN5U3ltYm9sKCk6IHN0cmluZyB7XHJcblxyXG4gICAgcmV0dXJuICh0aGlzLmZpZWxkPy5tZXRhZGF0YT8uWydjdXJyZW5jeSddIGFzIHN0cmluZykgfHwgdGhpcy5jdXJyZW5jeVN5bWJvbDtcclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldCBlZmZlY3RpdmVEZWNpbWFsUGxhY2VzKCk6IG51bWJlciB7XHJcblxyXG4gICAgY29uc3QgZnJvbUZpZWxkID0gdGhpcy5maWVsZD8ubWV0YWRhdGE/LlsnZGVjaW1hbHMnXTtcclxuXHJcbiAgICByZXR1cm4gZnJvbUZpZWxkICE9IG51bGwgPyBOdW1iZXIoZnJvbUZpZWxkKSA6IHRoaXMuZGVjaW1hbFBsYWNlcztcclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldCBlZmZlY3RpdmVSdWxlcygpOiBVaVZhbGlkYXRpb25SdWxlW10ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZpZWxkPy52YWxpZGF0aW9uID8/IHRoaXMudmFsaWRhdGlvblJ1bGVzID8/IFtdO1xyXG5cclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0IGZpZWxkQ29udHJvbCgpOiBGb3JtQ29udHJvbCB8IG51bGwge1xyXG5cclxuICAgIGlmICghdGhpcy5maWVsZCB8fCAhdGhpcy5mb3JtR3JvdXApIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGMgPSB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5maWVsZC5rZXkpO1xyXG5cclxuICAgIHJldHVybiBjIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgPyBjIDogbnVsbDtcclxuXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHJlc29sdmVkRXJyb3JzKGNvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCk6IHN0cmluZ1tdIHtcclxuXHJcbiAgICBpZiAodGhpcy5lcnJvcnMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuZXJyb3JzO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZpZWxkRXJyb3JTZXJ2aWNlLmdldEZpZWxkRXJyb3JzKGNvbnRyb2wsIHRoaXMuZWZmZWN0aXZlUnVsZXMpO1xyXG5cclxuICB9XHJcblxyXG5cclxuXHJcbiAgb25CbHVyKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuYmx1cnJlZC5lbWl0KCk7XHJcblxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG4iLCJAaWYgKGZpZWxkICYmIGZvcm1Hcm91cCkge1xyXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cInVpLWZiLWZpZWxkLWN0eFwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ1aS1mb3JtLWJ1aWxkZXJfX2Z1bGwtd2lkdGhcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3sgZWZmZWN0aXZlTGFiZWwgfX08L21hdC1sYWJlbD5cclxuICAgICAgQGlmIChpc0N1cnJlbmN5KSB7XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVmZmVjdGl2ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcclxuICAgICAgICAgIHVpQ3VycmVuY3lJbnB1dFxyXG4gICAgICAgICAgW2N1cnJlbmN5U3ltYm9sXT1cImVmZmVjdGl2ZUN1cnJlbmN5U3ltYm9sXCJcclxuICAgICAgICAgIFtkZWNpbWFsUGxhY2VzXT1cImVmZmVjdGl2ZURlY2ltYWxQbGFjZXNcIlxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5rZXlcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVmZmVjdGl2ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcclxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAvPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoZmllbGQuaWNvblRvb2x0aXApIHtcclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC5pY29uVG9vbHRpcC50ZXh0XCJcclxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmllbGQuaWNvblRvb2x0aXAudGV4dFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGx1Y2lkZS1pY29uIFtuYW1lXT1cImZpZWxkLmljb25Ub29sdGlwLmljb24gfHwgJ2luZm8nXCIgW3NpemVdPVwiMThcIiAvPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICAgIDxtYXQtZXJyb3I+XHJcbiAgICAgICAgQGZvciAoZXJyIG9mIHJlc29sdmVkRXJyb3JzKGZpZWxkQ29udHJvbCk7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdj57eyBlcnIgfX08L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxufSBAZWxzZSBpZiAoY29udHJvbCkge1xyXG4gIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLWZpZWxkLWF0b21cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidWktZm9ybS1idWlsZGVyX19mdWxsLXdpZHRoXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxyXG4gICAgICBAaWYgKGVmZmVjdGl2ZUxhYmVsKSB7XHJcbiAgICAgICAgPG1hdC1sYWJlbD57eyBlZmZlY3RpdmVMYWJlbCB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZiAoaXNDdXJyZW5jeSkge1xyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJlZmZlY3RpdmVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICB1aUN1cnJlbmN5SW5wdXRcclxuICAgICAgICAgIFtjdXJyZW5jeVN5bWJvbF09XCJlZmZlY3RpdmVDdXJyZW5jeVN5bWJvbFwiXHJcbiAgICAgICAgICBbZGVjaW1hbFBsYWNlc109XCJlZmZlY3RpdmVEZWNpbWFsUGxhY2VzXCJcclxuICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAvPlxyXG4gICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJlZmZlY3RpdmVQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgfVxyXG4gICAgICA8bWF0LWVycm9yPlxyXG4gICAgICAgIEBmb3IgKGVyciBvZiByZXNvbHZlZEVycm9ycyhjb250cm9sKTsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICA8ZGl2Pnt7IGVyciB9fTwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==