@cqa-lib/cqa-ui 1.1.145 → 1.1.146
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.
- package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +5 -3
- package/esm2020/lib/execution-screen/step-renderer/step-renderer.component.mjs +75 -5
- package/fesm2015/cqa-lib-cqa-ui.mjs +86 -13
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +84 -12
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/execution-screen/step-group/step-group.component.d.ts +5 -1
- package/lib/execution-screen/step-renderer/step-renderer.component.d.ts +6 -1
- package/package.json +1 -1
|
@@ -458,6 +458,18 @@ export class StepRendererComponent {
|
|
|
458
458
|
instance.step = currentStep;
|
|
459
459
|
hasChanges = true;
|
|
460
460
|
}
|
|
461
|
+
// Update selfHealAnalysis using handler if available
|
|
462
|
+
if (this.getSelfHealAnalysisHandler && currentStep) {
|
|
463
|
+
const selfHealAnalysis = this.getSelfHealAnalysisHandler(currentStep);
|
|
464
|
+
const previousSelfHealAnalysis = instance.selfHealAnalysis;
|
|
465
|
+
if (this.hasValueChanged(selfHealAnalysis, previousSelfHealAnalysis)) {
|
|
466
|
+
instance.selfHealAnalysis = selfHealAnalysis;
|
|
467
|
+
if (instance.config) {
|
|
468
|
+
instance.config.selfHealAnalysis = selfHealAnalysis;
|
|
469
|
+
}
|
|
470
|
+
hasChanges = true;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
461
473
|
// Trigger change detection on the component instance if there were changes
|
|
462
474
|
// This ensures only the nested step updates without affecting parent steps
|
|
463
475
|
if (hasChanges) {
|
|
@@ -634,6 +646,10 @@ export class StepRendererComponent {
|
|
|
634
646
|
if (needsRecreation) {
|
|
635
647
|
this.container.clear();
|
|
636
648
|
// Clear stored instance when recreating
|
|
649
|
+
const oldInstance = StepRendererComponent.componentInstances.get(this.container);
|
|
650
|
+
if (oldInstance) {
|
|
651
|
+
StepRendererComponent.subscribedEventEmitters.delete(oldInstance);
|
|
652
|
+
}
|
|
637
653
|
StepRendererComponent.componentInstances.delete(this.container);
|
|
638
654
|
StepRendererComponent.componentRefs.delete(this.container);
|
|
639
655
|
this.lastStepId = currentStepId;
|
|
@@ -667,6 +683,34 @@ export class StepRendererComponent {
|
|
|
667
683
|
instance.config.filePath = instance.filePath;
|
|
668
684
|
}
|
|
669
685
|
}
|
|
686
|
+
// Update selfHealAnalysis using handler if available
|
|
687
|
+
if (this.getSelfHealAnalysisHandler && this.step) {
|
|
688
|
+
const selfHealAnalysis = this.getSelfHealAnalysisHandler(this.step);
|
|
689
|
+
instance.selfHealAnalysis = selfHealAnalysis;
|
|
690
|
+
if (instance.config) {
|
|
691
|
+
instance.config.selfHealAnalysis = selfHealAnalysis;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
// Ensure event subscriptions are still active for selfHealAction
|
|
695
|
+
if (instance.selfHealAction && this.onSelfHealActionHandler) {
|
|
696
|
+
// Track subscriptions to avoid duplicates
|
|
697
|
+
let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);
|
|
698
|
+
if (!subscribedEvents) {
|
|
699
|
+
subscribedEvents = new Set();
|
|
700
|
+
StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);
|
|
701
|
+
}
|
|
702
|
+
if (!subscribedEvents.has('selfHealAction')) {
|
|
703
|
+
instance.selfHealAction.subscribe((event) => {
|
|
704
|
+
this.onSelfHealActionHandler?.(event);
|
|
705
|
+
});
|
|
706
|
+
subscribedEvents.add('selfHealAction');
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
// Update handler references
|
|
710
|
+
if (this.onSelfHealActionHandler)
|
|
711
|
+
instance.onSelfHealActionHandler = this.onSelfHealActionHandler;
|
|
712
|
+
if (this.getSelfHealLoadingStatesHandler)
|
|
713
|
+
instance.getSelfHealLoadingStatesHandler = this.getSelfHealLoadingStatesHandler;
|
|
670
714
|
// Update key for change detection
|
|
671
715
|
this.previousStepKey = this.getStepKey(this.step);
|
|
672
716
|
// Component already exists and is ready, emit immediately
|
|
@@ -889,9 +933,18 @@ export class StepRendererComponent {
|
|
|
889
933
|
});
|
|
890
934
|
}
|
|
891
935
|
if (instance.selfHealAction && this.onSelfHealActionHandler) {
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
936
|
+
// Track subscriptions to avoid duplicates
|
|
937
|
+
let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);
|
|
938
|
+
if (!subscribedEvents) {
|
|
939
|
+
subscribedEvents = new Set();
|
|
940
|
+
StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);
|
|
941
|
+
}
|
|
942
|
+
if (!subscribedEvents.has('selfHealAction')) {
|
|
943
|
+
instance.selfHealAction.subscribe((event) => {
|
|
944
|
+
this.onSelfHealActionHandler?.(event);
|
|
945
|
+
});
|
|
946
|
+
subscribedEvents.add('selfHealAction');
|
|
947
|
+
}
|
|
895
948
|
}
|
|
896
949
|
// Note: onJsonPathCopiedHandler is set as input property (line 825), so we don't need to subscribe to jsonPathCopied event
|
|
897
950
|
// The API step component calls the handler directly, avoiding duplicate calls
|
|
@@ -967,6 +1020,8 @@ export class StepRendererComponent {
|
|
|
967
1020
|
instance.onViewFullLogsHandler = this.onViewFullLogsHandler;
|
|
968
1021
|
if (this.onSelfHealActionHandler)
|
|
969
1022
|
instance.onSelfHealActionHandler = this.onSelfHealActionHandler;
|
|
1023
|
+
if (this.getSelfHealLoadingStatesHandler)
|
|
1024
|
+
instance.getSelfHealLoadingStatesHandler = this.getSelfHealLoadingStatesHandler;
|
|
970
1025
|
if (this.onConditionBranchClickHandler)
|
|
971
1026
|
instance.onConditionBranchClickHandler = this.onConditionBranchClickHandler;
|
|
972
1027
|
if (this.onStepClickHandler)
|
|
@@ -1018,6 +1073,14 @@ export class StepRendererComponent {
|
|
|
1018
1073
|
}
|
|
1019
1074
|
}
|
|
1020
1075
|
}
|
|
1076
|
+
// Set selfHealAnalysis using handler if available
|
|
1077
|
+
if (this.getSelfHealAnalysisHandler && this.step) {
|
|
1078
|
+
const selfHealAnalysis = this.getSelfHealAnalysisHandler(this.step);
|
|
1079
|
+
instance.selfHealAnalysis = selfHealAnalysis;
|
|
1080
|
+
if (instance.config) {
|
|
1081
|
+
instance.config.selfHealAnalysis = selfHealAnalysis;
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1021
1084
|
// Also set config for backward compatibility with components that still use config input
|
|
1022
1085
|
if ('config' in instance) {
|
|
1023
1086
|
if (effectiveType === 'file-download') {
|
|
@@ -1033,6 +1096,10 @@ export class StepRendererComponent {
|
|
|
1033
1096
|
else {
|
|
1034
1097
|
instance.config = this.step;
|
|
1035
1098
|
}
|
|
1099
|
+
// Ensure selfHealAnalysis is included in config
|
|
1100
|
+
if (instance.selfHealAnalysis !== undefined) {
|
|
1101
|
+
instance.config.selfHealAnalysis = instance.selfHealAnalysis;
|
|
1102
|
+
}
|
|
1036
1103
|
}
|
|
1037
1104
|
// Store key for change detection
|
|
1038
1105
|
this.previousStepKey = this.getStepKey(this.step);
|
|
@@ -1115,8 +1182,9 @@ export class StepRendererComponent {
|
|
|
1115
1182
|
// Use WeakMap to track component instances without storing them as class properties
|
|
1116
1183
|
StepRendererComponent.componentInstances = new WeakMap();
|
|
1117
1184
|
StepRendererComponent.componentRefs = new WeakMap();
|
|
1185
|
+
StepRendererComponent.subscribedEventEmitters = new WeakMap(); // Track which EventEmitters have been subscribed to
|
|
1118
1186
|
StepRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepRendererComponent, deps: [{ token: STEP_COMPONENT_MAP }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1119
|
-
StepRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepRendererComponent, selector: "cqa-step-renderer", inputs: { step: "step", onExpandHandler: "onExpandHandler", getConditionBranchesHandler: "getConditionBranchesHandler", isStepLoadingHandler: "isStepLoadingHandler", isStepExpandedHandler: "isStepExpandedHandler", convertMsToSecondsHandler: "convertMsToSecondsHandler", formatFailureDetailsHandler: "formatFailureDetailsHandler", getSelfHealAnalysisHandler: "getSelfHealAnalysisHandler", onMakeCurrentBaselineHandler: "onMakeCurrentBaselineHandler", onUploadBaselineHandler: "onUploadBaselineHandler", onAnalyzeHandler: "onAnalyzeHandler", onViewFullLogsHandler: "onViewFullLogsHandler", onSelfHealActionHandler: "onSelfHealActionHandler", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", selectedIterationId: "selectedIterationId", getLoopIterationsHandler: "getLoopIterationsHandler", getApiAssertionsHandler: "getApiAssertionsHandler", formatActionsHandler: "formatActionsHandler", onViewAllIterationsHandler: "onViewAllIterationsHandler", onConditionBranchClickHandler: "onConditionBranchClickHandler", onStepClickHandler: "onStepClickHandler", onJsonPathCopiedHandler: "onJsonPathCopiedHandler", onDownloadHandler: "onDownloadHandler", onFilePathCopiedHandler: "onFilePathCopiedHandler", onTextCopiedHandler: "onTextCopiedHandler", downloadingStepId: "downloadingStepId", isLive: "isLive", stepNumber: "stepNumber" }, outputs: { componentReady: "componentReady" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: '<ng-container #container></ng-container>', isInline: true });
|
|
1187
|
+
StepRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepRendererComponent, selector: "cqa-step-renderer", inputs: { step: "step", onExpandHandler: "onExpandHandler", getConditionBranchesHandler: "getConditionBranchesHandler", isStepLoadingHandler: "isStepLoadingHandler", isStepExpandedHandler: "isStepExpandedHandler", convertMsToSecondsHandler: "convertMsToSecondsHandler", formatFailureDetailsHandler: "formatFailureDetailsHandler", getSelfHealAnalysisHandler: "getSelfHealAnalysisHandler", onMakeCurrentBaselineHandler: "onMakeCurrentBaselineHandler", onUploadBaselineHandler: "onUploadBaselineHandler", onAnalyzeHandler: "onAnalyzeHandler", onViewFullLogsHandler: "onViewFullLogsHandler", onSelfHealActionHandler: "onSelfHealActionHandler", getSelfHealLoadingStatesHandler: "getSelfHealLoadingStatesHandler", isUploadingBaseline: "isUploadingBaseline", isMakingCurrentBaseline: "isMakingCurrentBaseline", selectedIterationId: "selectedIterationId", getLoopIterationsHandler: "getLoopIterationsHandler", getApiAssertionsHandler: "getApiAssertionsHandler", formatActionsHandler: "formatActionsHandler", onViewAllIterationsHandler: "onViewAllIterationsHandler", onConditionBranchClickHandler: "onConditionBranchClickHandler", onStepClickHandler: "onStepClickHandler", onJsonPathCopiedHandler: "onJsonPathCopiedHandler", onDownloadHandler: "onDownloadHandler", onFilePathCopiedHandler: "onFilePathCopiedHandler", onTextCopiedHandler: "onTextCopiedHandler", downloadingStepId: "downloadingStepId", isLive: "isLive", stepNumber: "stepNumber" }, outputs: { componentReady: "componentReady" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: '<ng-container #container></ng-container>', isInline: true });
|
|
1120
1188
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepRendererComponent, decorators: [{
|
|
1121
1189
|
type: Component,
|
|
1122
1190
|
args: [{
|
|
@@ -1152,6 +1220,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
1152
1220
|
type: Input
|
|
1153
1221
|
}], onSelfHealActionHandler: [{
|
|
1154
1222
|
type: Input
|
|
1223
|
+
}], getSelfHealLoadingStatesHandler: [{
|
|
1224
|
+
type: Input
|
|
1155
1225
|
}], isUploadingBaseline: [{
|
|
1156
1226
|
type: Input
|
|
1157
1227
|
}], isMakingCurrentBaseline: [{
|
|
@@ -1190,4 +1260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
1190
1260
|
}], componentReady: [{
|
|
1191
1261
|
type: Output
|
|
1192
1262
|
}] } });
|
|
1193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vc3RlcC1yZW5kZXJlci9zdGVwLXJlbmRlcmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBMEQsTUFBTSxFQUFFLGlCQUFpQixFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVyTSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFNUQ7Ozs7R0FJRztBQUtILE1BQU0sT0FBTyxxQkFBcUI7SUFnRGhDLFlBQ3NDLFlBQW9DLEVBQ2hFLEdBQXNCO1FBRE0saUJBQVksR0FBWixZQUFZLENBQXdCO1FBQ2hFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBdkJ2QixzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1FBRXhDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFdkIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDLENBQUMsMENBQTBDO1FBYXZGLGVBQVUsR0FBMkIsSUFBSSxDQUFDO1FBQzFDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxvQkFBZSxHQUFXLEVBQUUsQ0FBQztJQUtqQyxDQUFDO0lBbEJMLHFHQUFxRztJQUM3RixvQkFBb0IsQ0FBQyxJQUE0QztRQUN2RSxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxHQUFJLElBQVksQ0FBQyxZQUFZLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssa0JBQWtCO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDckQsT0FBUSxJQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBY0QsV0FBVyxDQUFD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SztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQzhDLFNBQVM7c0JBQTVELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUN6QyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBUeXBlLCBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBJbmplY3QsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV4ZWN1dGlvblN0ZXBDb25maWcgfSBmcm9tICcuLi9leGVjdXRpb24tc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgU1RFUF9DT01QT05FTlRfTUFQIH0gZnJvbSAnLi4vc3RlcC1yZWdpc3RyeS50b2tlbic7XG5cbi8qKlxuICogQ29tcG9uZW50IHRoYXQgcmVuZGVycyB0aGUgYXBwcm9wcmlhdGUgc3RlcCBjb21wb25lbnQgYmFzZWQgb24gdGhlIHN0ZXAgdHlwZS5cbiAqIFVzZXMgZHluYW1pYyBjb21wb25lbnQgbG9hZGluZyBhbmQgYW4gaW5qZWN0aW9uIHRva2VuIHRvIGJyZWFrIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICogYmV0d2VlbiBzdGVwIGNvbXBvbmVudHMgaW4gQW5ndWxhciBJdnkgcGFydGlhbCBjb21waWxhdGlvbiBtb2RlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1yZW5kZXJlcicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPidcbn0pXG5leHBvcnQgY2xhc3MgU3RlcFJlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIHtcbiAgQElucHV0KCkgc3RlcCE6IEV4ZWN1dGlvblN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIG9uRXhwYW5kSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiB2b2lkO1xuICBASW5wdXQoKSBnZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBpc1N0ZXBMb2FkaW5nSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBpc1N0ZXBFeHBhbmRlZEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcj86IChkdXJhdGlvbjogbnVtYmVyKSA9PiBudW1iZXI7XG4gIEBJbnB1dCgpIGZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnk7XG4gIEBJbnB1dCgpIGdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueTtcbiAgQElucHV0KCkgb25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlcj86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblVwbG9hZEJhc2VsaW5lSGFuZGxlcj86IChldmVudDogYW55KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkFuYWx5emVIYW5kbGVyPzogKCkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25WaWV3RnVsbExvZ3NIYW5kbGVyPzogKCkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25TZWxmSGVhbEFjdGlvbkhhbmRsZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgaXNVcGxvYWRpbmdCYXNlbGluZT86IGFueTtcbiAgQElucHV0KCkgaXNNYWtpbmdDdXJyZW50QmFzZWxpbmU/OiBhbnk7XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlcmF0aW9uSWQ/OiBhbnk7XG4gIEBJbnB1dCgpIGdldExvb3BJdGVyYXRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgZ2V0QXBpQXNzZXJ0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIGZvcm1hdEFjdGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBvblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkNvbmRpdGlvbkJyYW5jaENsaWNrSGFuZGxlcj86IChzdGVwOiBhbnksIGJyYW5jaDogYW55KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblN0ZXBDbGlja0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZywgZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6ICdyZXF1ZXN0Qm9keScgfCAncmVzcG9uc2VCb2R5JyB8ICdyZXF1ZXN0SGVhZGVycycgfCAncmVzcG9uc2VIZWFkZXJzJyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkRvd25sb2FkSGFuZGxlcj86IChldmVudDogeyBmaWxlTmFtZTogc3RyaW5nOyBmaWxlUGF0aD86IHN0cmluZzsgZmlsZVR5cGU6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uRmlsZVBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IGZpbGVQYXRoOiBzdHJpbmc7IHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvblRleHRDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHRleHQ6IHN0cmluZzsgdGVzdFN0ZXBSZXN1bHRJZDogc3RyaW5nIH0pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGRvd25sb2FkaW5nU3RlcElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gIEBJbnB1dCgpIGlzTGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyPzogc3RyaW5nO1xuICBAT3V0cHV0KCkgY29tcG9uZW50UmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7IC8vIEVtaXQgd2hlbiBjb21wb25lbnQgaXMgbG9hZGVkIGFuZCByZWFkeVxuXG4gIC8qKiBFZmZlY3RpdmUgdHlwZSBmb3IgY29tcG9uZW50IGxvb2t1cDogJ2ZpbGUtZG93bmxvYWQnIHdoZW4gdGVzdFN0ZXBUeXBlID09PSAnZ2VuZXJhdGVEb2N1bWVudCcuICovXG4gIHByaXZhdGUgZ2V0RWZmZWN0aXZlU3RlcFR5cGUoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghc3RlcCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IHQgPSAoc3RlcCBhcyBhbnkpLnRlc3RTdGVwVHlwZTtcbiAgICBpZiAodCA9PT0gJ2dlbmVyYXRlRG9jdW1lbnQnKSByZXR1cm4gJ2ZpbGUtZG93bmxvYWQnO1xuICAgIHJldHVybiAoc3RlcCBhcyBhbnkpLnR5cGUgfHwgJyc7XG4gIH1cblxuICAvLyBVc2UgV2Vha01hcCB0byB0cmFjayBjb21wb25lbnQgaW5zdGFuY2VzIHdpdGhvdXQgc3RvcmluZyB0aGVtIGFzIGNsYXNzIHByb3BlcnRpZXNcbiAgcHJpdmF0ZSBzdGF0aWMgY29tcG9uZW50SW5zdGFuY2VzID0gbmV3IFdlYWtNYXA8Vmlld0NvbnRhaW5lclJlZiwgYW55PigpO1xuICBwcml2YXRlIHN0YXRpYyBjb21wb25lbnRSZWZzID0gbmV3IFdlYWtNYXA8Vmlld0NvbnRhaW5lclJlZiwgQ29tcG9uZW50UmVmPGFueT4+KCk7XG4gIHByaXZhdGUgbGFzdFN0ZXBJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbGFzdFN0ZXBUeXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcmV2aW91c1N0ZXBLZXk6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoU1RFUF9DT01QT05FTlRfTUFQKSBwcml2YXRlIGNvbXBvbmVudE1hcDogTWFwPHN0cmluZywgVHlwZTxhbnk+PixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lciB8fCAhdGhpcy5zdGVwKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50U3RlcCA9IGNoYW5nZXNbJ3N0ZXAnXT8uY3VycmVudFZhbHVlIHx8IHRoaXMuc3RlcDtcbiAgICBjb25zdCBwcmV2aW91c1N0ZXAgPSBjaGFuZ2VzWydzdGVwJ10/LnByZXZpb3VzVmFsdWU7XG5cbiAgICAvLyBDaGVjayBpZiBzZWxlY3RlZEl0ZXJhdGlvbklkIGlucHV0IGNoYW5nZWQgKGZvciBsb29wIHN0ZXBzKVxuICAgIC8vICYmIFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ZXAudHlwZSA9PT0gJ2xvb3AnICYmIFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIubGVuZ3RoID4gMDtcblxuICAgIC8vIElmIHNlbGVjdGVkSXRlcmF0aW9uSWQgY2hhbmdlZCBmb3IgYSBsb29wIHN0ZXAsIHVwZGF0ZSBpdCBkaXJlY3RseVxuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10gJiYgY2hhbmdlc1snc2VsZWN0ZWRJdGVyYXRpb25JZCddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snc2VsZWN0ZWRJdGVyYXRpb25JZCddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudEluc3RhbmNlcy5nZXQodGhpcy5jb250YWluZXIpO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuZ2V0KHRoaXMuY29udGFpbmVyKTtcblxuICAgICAgaWYgKGluc3RhbmNlICYmIGNvbXBvbmVudFJlZikge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10uY3VycmVudFZhbHVlO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gY2hhbmdlc1snc2VsZWN0ZWRJdGVyYXRpb25JZCddLnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBzZWxlY3RlZEl0ZXJhdGlvbklkIHdoZW4gaW5wdXQgY2hhbmdlcyBmcm9tIHBhcmVudFxuICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZCA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuc2VsZWN0ZWRJdGVyYXRpb25JZCA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUcnkgdG8gdXBkYXRlIHNlbGVjdGVkSXRlcmF0aW9uIGlmIGl0ZXJhdGlvbnMgYXJlIGF2YWlsYWJsZVxuICAgICAgICAgIHRoaXMudXBkYXRlTG9vcFN0ZXBTZWxlY3RlZEl0ZXJhdGlvbihpbnN0YW5jZSwgY3VycmVudFZhbHVlKTtcblxuICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgbG9vcC1zdGVwIGNvbXBvbmVudFxuICAgICAgICAgIGlmIChjb21wb25lbnRSZWYuaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlQ2RyID0gY29tcG9uZW50UmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZiwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VDZHIpIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VDZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgIGluc3RhbmNlQ2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBzdGVwTnVtYmVyIGlucHV0IGNoYW5nZWQsIHVwZGF0ZSBuZXN0ZWQgY29tcG9uZW50IGluc3RhbmNlc1xuICAgIGlmIChjaGFuZ2VzWydzdGVwTnVtYmVyJ10gJiYgY2hhbmdlc1snc3RlcE51bWJlciddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snc3RlcE51bWJlciddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudEluc3RhbmNlcy5nZXQodGhpcy5jb250YWluZXIpO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuZ2V0KHRoaXMuY29udGFpbmVyKTtcblxuICAgICAgaWYgKGluc3RhbmNlICYmIGNvbXBvbmVudFJlZikge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzWydzdGVwTnVtYmVyJ10uY3VycmVudFZhbHVlO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gY2hhbmdlc1snc3RlcE51bWJlciddLnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBzdGVwTnVtYmVyIHdoZW4gaW5wdXQgY2hhbmdlcyBmcm9tIHBhcmVudFxuICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9PSBwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc3RlcE51bWJlciA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuc3RlcE51bWJlciA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgICAgICAgIGlmIChjb21wb25lbnRSZWYuaW5qZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlQ2RyID0gY29tcG9uZW50UmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZiwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VDZHIpIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VDZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgIGluc3RhbmNlQ2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBpc1VwbG9hZGluZ0Jhc2VsaW5lIG9yIGlzTWFraW5nQ3VycmVudEJhc2VsaW5lIGNoYW5nZWQsIHVwZGF0ZSBuZXN0ZWQgY29tcG9uZW50IGluc3RhbmNlc1xuICAgIGlmIChjaGFuZ2VzWydpc1VwbG9hZGluZ0Jhc2VsaW5lJ10gfHwgY2hhbmdlc1snaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUnXSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5nZXQodGhpcy5jb250YWluZXIpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgY29tcG9uZW50UmVmKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBpc1VwbG9hZGluZ0Jhc2VsaW5lIGlmIGl0IGNoYW5nZWRcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2lzVXBsb2FkaW5nQmFzZWxpbmUnXSkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzVXBsb2FkaW5nQmFzZWxpbmUgPSB0aGlzLmlzVXBsb2FkaW5nQmFzZWxpbmU7XG4gICAgICAgICAgLy8gQWxzbyB1cGRhdGUgaW4gY29uZmlnIGlmIGl0IGV4aXN0c1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5pc1VwbG9hZGluZ0Jhc2VsaW5lID0gdGhpcy5pc1VwbG9hZGluZ0Jhc2VsaW5lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBpc01ha2luZ0N1cnJlbnRCYXNlbGluZSBpZiBpdCBjaGFuZ2VkXG4gICAgICAgIGlmIChjaGFuZ2VzWydpc01ha2luZ0N1cnJlbnRCYXNlbGluZSddKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUgPSB0aGlzLmlzTWFraW5nQ3VycmVudEJhc2VsaW5lO1xuICAgICAgICAgIC8vIEFsc28gdXBkYXRlIGluIGNvbmZpZyBpZiBpdCBleGlzdHNcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUgPSB0aGlzLmlzTWFraW5nQ3VycmVudEJhc2VsaW5lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICAgIGlmIChjb21wb25lbnRSZWYuaW5qZWN0b3IpIHtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZUNkciA9IGNvbXBvbmVudFJlZi5pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYsIG51bGwpO1xuICAgICAgICAgIGlmIChpbnN0YW5jZUNkcikge1xuICAgICAgICAgICAgaW5zdGFuY2VDZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICBpbnN0YW5jZUNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZG93bmxvYWRpbmdTdGVwSWQgY2hhbmdlZCwgdXBkYXRlIGZpbGUtZG93bmxvYWQgaW5zdGFuY2UgaXNEb3dubG9hZGluZ1xuICAgIGlmIChjaGFuZ2VzWydkb3dubG9hZGluZ1N0ZXBJZCddKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuZ2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRSZWZzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBpZiAoaW5zdGFuY2UgJiYgY29tcG9uZW50UmVmICYmIHRoaXMuZ2V0RWZmZWN0aXZlU3RlcFR5cGUoY3VycmVudFN0ZXApID09PSAnZmlsZS1kb3dubG9hZCcpIHtcbiAgICAgICAgY29uc3QgdGlkID0gKGN1cnJlbnRTdGVwIGFzIGFueSkudGVzdFN0ZXBSZXN1bHRJZDtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNEb3dubG9hZGluZyA9ICEhdGlkICYmIHRoaXMuZG93bmxvYWRpbmdTdGVwSWQgPT09IHRpZDtcbiAgICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbmplY3Rvcikge1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlQ2RyID0gY29tcG9uZW50UmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZiwgbnVsbCk7XG4gICAgICAgICAgaWYgKGluc3RhbmNlQ2RyKSB7XG4gICAgICAgICAgICBpbnN0YW5jZUNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIGluc3RhbmNlQ2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgc3RlcCBpZGVudGlmaWVycyAodXNlIGVmZmVjdGl2ZSB0eXBlOiBnZW5lcmF0ZURvY3VtZW50IC0+IGZpbGUtZG93bmxvYWQpXG4gICAgY29uc3QgY3VycmVudFN0ZXBJZCA9IGN1cnJlbnRTdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgY3VycmVudFN0ZXAuaWQ7XG4gICAgY29uc3QgY3VycmVudFN0ZXBUeXBlID0gdGhpcy5nZXRFZmZlY3RpdmVTdGVwVHlwZShjdXJyZW50U3RlcCkgfHwgKGN1cnJlbnRTdGVwIGFzIGFueSkudHlwZTtcblxuICAgIC8vIFVzZSBzdG9yZWQgbGFzdFN0ZXBJZCBhbmQgbGFzdFN0ZXBUeXBlIHRvIHByb3Blcmx5IGRldGVjdCBjaGFuZ2VzXG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZW4gc3RlcCBvYmplY3QgcmVmZXJlbmNlIGRvZXNuJ3QgY2hhbmdlIGJ1dCBwcm9wZXJ0aWVzIGRvXG4gICAgLy8gT25seSBjaGVjayBmb3IgYWN0dWFsIElEL3R5cGUgY2hhbmdlcywgbm90IGp1c3QgcmVmZXJlbmNlIGNoYW5nZXNcbiAgICAvLyBjb25zdCBzdGVwVHlwZUNoYW5nZWQgPSAhcHJldmlvdXNTdGVwIHx8IGN1cnJlbnRTdGVwVHlwZSAhPT0gKHByZXZpb3VzU3RlcC50eXBlIHx8IHRoaXMubGFzdFN0ZXBUeXBlKTtcbiAgICAvLyBjb25zdCBzdGVwSWRDaGFuZ2VkID0gIXByZXZpb3VzU3RlcCB8fCBjdXJyZW50U3RlcElkICE9PSAocHJldmlvdXNTdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgcHJldmlvdXNTdGVwLmlkIHx8IHRoaXMubGFzdFN0ZXBJZCk7XG4gICAgY29uc3Qgc3RlcFR5cGVDaGFuZ2VkID0gY3VycmVudFN0ZXBUeXBlICE9PSB0aGlzLmxhc3RTdGVwVHlwZTtcbiAgICBjb25zdCBzdGVwSWRDaGFuZ2VkID0gY3VycmVudFN0ZXBJZCAhPT0gdGhpcy5sYXN0U3RlcElkO1xuICAgIFxuICAgIC8vIE9ubHkgbG9hZCBjb21wb25lbnQgaWYgc3RlcCBJRCBvciB0eXBlIGFjdHVhbGx5IGNoYW5nZWRcbiAgICAvLyBUaGlzIHByZXZlbnRzIHVubmVjZXNzYXJ5IHJlbG9hZHMgd2hlbiBvbmx5IG5lc3RlZCBwcm9wZXJ0aWVzIGNoYW5nZVxuICAgIGlmIChzdGVwVHlwZUNoYW5nZWQgfHwgc3RlcElkQ2hhbmdlZCkge1xuICAgICAgdGhpcy5sYXN0U3RlcElkID0gY3VycmVudFN0ZXBJZDtcbiAgICAgIHRoaXMubGFzdFN0ZXBUeXBlID0gY3VycmVudFN0ZXBUeXBlO1xuICAgICAgaWYgKHRoaXMuY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgbmVzdGVkIGRhdGEgY2hhbmdlZCAoY2hpbGRyZW4sIG5lc3RlZFN0ZXBzLCBzdGVwcywgZXhwYW5kZWQpLCBcbiAgICAvLyB1cGRhdGUgcHJvcGVydGllcyB3aXRob3V0IHJlY3JlYXRpbmcgY29tcG9uZW50IHRvIHByZXZlbnQgYmxpbmtpbmdcbiAgICAvLyBUaGlzIHByZXZlbnRzIHBhcmVudCBzdGVwcyBmcm9tIGJsaW5raW5nIHdoZW4gbmVzdGVkIHN0ZXBzIGV4cGFuZFxuICAgIGNvbnN0IG9ubHlOZXN0ZWREYXRhQ2hhbmdlZCA9IHByZXZpb3VzU3RlcCAmJiAoXG4gICAgICAoY3VycmVudFN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcyAhPT0gKHByZXZpb3VzU3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzIHx8XG4gICAgICAoY3VycmVudFN0ZXAgYXMgYW55KS5jaGlsZHJlbiAhPT0gKHByZXZpb3VzU3RlcCBhcyBhbnkpLmNoaWxkcmVuIHx8XG4gICAgICAoY3VycmVudFN0ZXAgYXMgYW55KS5zdGVwcyAhPT0gKHByZXZpb3VzU3RlcCBhcyBhbnkpLnN0ZXBzIHx8XG4gICAgICAoY3VycmVudFN0ZXAgYXMgYW55KS5leHBhbmRlZCAhPT0gKHByZXZpb3VzU3RlcCBhcyBhbnkpLmV4cGFuZGVkIHx8XG4gICAgICAoY3VycmVudFN0ZXAgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQgIT09IChwcmV2aW91c1N0ZXAgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQgfHxcbiAgICAgIChjdXJyZW50U3RlcCBhcyBhbnkpLmJyYW5jaGVzICE9PSAocHJldmlvdXNTdGVwIGFzIGFueSkuYnJhbmNoZXMgfHxcbiAgICAgICgoY3VycmVudFN0ZXAgYXMgYW55KS5jb25maWcgJiYgKGN1cnJlbnRTdGVwIGFzIGFueSkuY29uZmlnLmV4cGFuZGVkICE9PSAocHJldmlvdXNTdGVwIGFzIGFueSkuY29uZmlnPy5leHBhbmRlZClcbiAgICApO1xuXG4gICAgLy8gVXBkYXRlIHByb3BlcnRpZXMgd2l0aG91dCByZWNyZWF0aW5nIGNvbXBvbmVudCB0byBwcmV2ZW50IGJsaW5raW5nXG4gICAgaWYgKG9ubHlOZXN0ZWREYXRhQ2hhbmdlZCAmJiB0aGlzLmNvbnRhaW5lci5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBHZXQgdGhlIHN0b3JlZCBjb21wb25lbnQgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudEluc3RhbmNlcy5nZXQodGhpcy5jb250YWluZXIpO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuZ2V0KHRoaXMuY29udGFpbmVyKTtcblxuICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIC8vIFVzZSBjb21wcmVoZW5zaXZlIHVwZGF0ZSBtZXRob2QgZnJvbSBvcmlnaW5hbFxuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudEluc3RhbmNlKGN1cnJlbnRTdGVwLCBwcmV2aW91c1N0ZXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvciBvdGhlciBjaGFuZ2VzLCB1c2UgY29tcHJlaGVuc2l2ZSB1cGRhdGUgaWYgY29tcG9uZW50IGV4aXN0c1xuICAgIGlmICh0aGlzLmNvbnRhaW5lci5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuZ2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRSZWZzLmdldCh0aGlzLmNvbnRhaW5lcik7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAmJiBwcmV2aW91c1N0ZXAgJiYgY3VycmVudFN0ZXAgJiZcbiAgICAgICAgcHJldmlvdXNTdGVwLnR5cGUgPT09IGN1cnJlbnRTdGVwLnR5cGUgJiZcbiAgICAgICAgKHByZXZpb3VzU3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IHByZXZpb3VzU3RlcC5pZCkgPT09IChjdXJyZW50U3RlcC50ZXN0U3RlcFJlc3VsdElkIHx8IGN1cnJlbnRTdGVwLmlkKSkge1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY29tcG9uZW50IGluc3RhbmNlIHdpdGggbmV3IHN0ZXAgcHJvcGVydGllc1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudEluc3RhbmNlKGN1cnJlbnRTdGVwLCBwcmV2aW91c1N0ZXApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSBsb2FkIGNvbXBvbmVudCBpZiBjb250YWluZXIgaXMgZW1wdHkgKGNvbXBvbmVudCBkb2Vzbid0IGV4aXN0IHlldClcbiAgICAvLyBUaGlzIHByZXZlbnRzIHVubmVjZXNzYXJ5IHJlbG9hZHNcbiAgICBpZiAodGhpcy5jb250YWluZXIgJiYgdGhpcy5jb250YWluZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmxvYWRDb21wb25lbnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbXBvbmVudEluc3RhbmNlKGN1cnJlbnRTdGVwOiBhbnksIHByZXZpb3VzU3RlcDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuZ2V0KHRoaXMuY29udGFpbmVyKTtcblxuICAgIGlmICghaW5zdGFuY2UgfHwgIWNvbXBvbmVudFJlZiB8fCAhdGhpcy5jb250YWluZXIpIHJldHVybjtcblxuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICAvLyBMaXN0IG9mIHByb3BlcnRpZXMgdGhhdCBjb21tb25seSBjaGFuZ2UgYW5kIG5lZWQgdG8gYmUgdXBkYXRlZFxuICAgIGNvbnN0IGltcG9ydGFudFByb3BlcnRpZXMgPSBbJ3N0YXR1cycsICdkdXJhdGlvbicsICdleHBhbmRlZCcsICdzdWJTdGVwcycsICdjaGlsZHJlbicsICduZXN0ZWRTdGVwcycsICdzdGVwcycsXG4gICAgICAnZXhlY3V0aW9uRGF0YScsICdhY3Rpb24nLCAndGl0bGUnLCAncmVzdWx0JywgJ21ldGhvZCcsICdlbmRwb2ludCcsICdzdGF0dXNDb2RlJywgJ2JyYW5jaGVzJyxcbiAgICAgICdyZXNwb25zZVRpbWUnLCAnYWN0aW9ucycsICdwcm9tcHQnLCAnb3B0aW1pemVkUnVuJywgJ2FjdGlvbkNvdW50JywgJ2l0ZXJhdGlvbnMnLCAnc2VsZWN0ZWRJdGVyYXRpb25JZCcsICdzdGVwTnVtYmVyJyxcbiAgICAgICdpc1VwbG9hZGluZ0Jhc2VsaW5lJywgJ2lzTWFraW5nQ3VycmVudEJhc2VsaW5lJywgJ3NlbGVjdGVkVGFiSW5wdXQnLCAnc3RlcERlbGV0ZWQnXTtcblxuICAgIC8vIFVwZGF0ZSBpbXBvcnRhbnQgcHJvcGVydGllc1xuICAgIGltcG9ydGFudFByb3BlcnRpZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gRm9yIHNlbGVjdGVkSXRlcmF0aW9uSWQgb24gbG9vcCBzdGVwcywgcHJpb3JpdGl6ZSB0aGUgaW5wdXQgdmFsdWUgb3ZlciBzdGVwIHZhbHVlXG4gICAgICBpZiAoa2V5ID09PSAnc2VsZWN0ZWRJdGVyYXRpb25JZCcgJiYgY3VycmVudFN0ZXAudHlwZSA9PT0gJ2xvb3AnICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IChpbnN0YW5jZSBhcyBhbnkpW2tleV07XG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlQ2hhbmdlZChjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWdba2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVHJ5IHRvIHVwZGF0ZSBzZWxlY3RlZEl0ZXJhdGlvbiBpZiBpdGVyYXRpb25zIGFyZSBhdmFpbGFibGVcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxvb3BTdGVwU2VsZWN0ZWRJdGVyYXRpb24oaW5zdGFuY2UsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaXRlcmF0aW9ucycgJiYgY3VycmVudFN0ZXAudHlwZSA9PT0gJ2xvb3AnKSB7XG4gICAgICAgIC8vIFdoZW4gaXRlcmF0aW9ucyBhcmUgdXBkYXRlZCwgY2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgc2VsZWN0ZWRJdGVyYXRpb25cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gKGN1cnJlbnRTdGVwIGFzIGFueSlba2V5XTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IChwcmV2aW91c1N0ZXAgYXMgYW55KVtrZXldO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlQ2hhbmdlZChjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWdba2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAvLyBBZnRlciBpdGVyYXRpb25zIGFyZSB1cGRhdGVkLCB0cnkgdG8gdXBkYXRlIHNlbGVjdGVkSXRlcmF0aW9uIGlmIHNlbGVjdGVkSXRlcmF0aW9uSWQgaXMgc2V0XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVyYXRpb25JZCA9IChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgfHwgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvb3BTdGVwU2VsZWN0ZWRJdGVyYXRpb24oaW5zdGFuY2UsIHNlbGVjdGVkSXRlcmF0aW9uSWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpc1VwbG9hZGluZ0Jhc2VsaW5lJyB8fCBrZXkgPT09ICdpc01ha2luZ0N1cnJlbnRCYXNlbGluZScpIHtcbiAgICAgICAgLy8gRm9yIGxvYWRpbmcgc3RhdGUgb2JqZWN0cywgYWx3YXlzIHVzZSB0aGUgaW5wdXQgdmFsdWUgKHRoZXkncmUgcGFzc2VkIGZyb20gcGFyZW50KVxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBrZXkgPT09ICdpc1VwbG9hZGluZ0Jhc2VsaW5lJyA/IHRoaXMuaXNVcGxvYWRpbmdCYXNlbGluZSA6IHRoaXMuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmU7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSAoaW5zdGFuY2UgYXMgYW55KVtrZXldO1xuXG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgaWYgdGhlIHJlZmVyZW5jZSBjaGFuZ2VkIChuZXcgb2JqZWN0IGNyZWF0ZWQpXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZ1trZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzdGVwTnVtYmVyJyAmJiB0aGlzLnN0ZXBOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBGb3Igc3RlcE51bWJlciwgcHJpb3JpdGl6ZSB0aGUgaW5wdXQgdmFsdWUgb3ZlciBzdGVwIHZhbHVlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc3RlcE51bWJlcjtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IChpbnN0YW5jZSBhcyBhbnkpW2tleV07XG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlQ2hhbmdlZChjdXJyZW50VmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWdba2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYWN0aW9uJyAmJiBjdXJyZW50U3RlcC50eXBlID09PSAnYWktYWdlbnQnKSB7XG4gICAgICAgIC8vIEZvciBhaS1hZ2VudCBzdGVwcywgZW5zdXJlIHRpdGxlIGFuZCBwcm9tcHQgYXJlIHNldCBmcm9tIGFjdGlvblxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSAoY3VycmVudFN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gKHByZXZpb3VzU3RlcCBhcyBhbnkpW2tleV07XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAvLyBVcGRhdGUgYWN0aW9uXG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIEFsc28gdXBkYXRlIHRpdGxlIGFuZCBwcm9tcHQgZnJvbSBhY3Rpb24gaWYgdGhleSdyZSBub3Qgc2V0IG9yIGVtcHR5XG4gICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2UgYXMgYW55KS50aXRsZSB8fCAhKGluc3RhbmNlIGFzIGFueSkudGl0bGUudHJpbSgpKSB7XG4gICAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnRpdGxlID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLnRpdGxlID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLnByb21wdCB8fCAhKGluc3RhbmNlIGFzIGFueSkucHJvbXB0LnRyaW0oKSkge1xuICAgICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5wcm9tcHQgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcucHJvbXB0ID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSAoY3VycmVudFN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gKHByZXZpb3VzU3RlcCBhcyBhbnkpW2tleV07XG5cbiAgICAgICAgLy8gVXNlIGRlZXAgY29tcGFyaXNvbiBmb3Igb2JqZWN0cy9hcnJheXMsIHNoYWxsb3cgZm9yIHByaW1pdGl2ZXNcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBbHNvIHVwZGF0ZSBhbGwgb3RoZXIgcHJvcGVydGllc1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnRTdGVwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAndHlwZScgJiYgIWltcG9ydGFudFByb3BlcnRpZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSAoY3VycmVudFN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gKHByZXZpb3VzU3RlcCBhcyBhbnkpW2tleV07XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgc3BlY2lhbCBwcm9wZXJ0aWVzIHRoYXQgbWlnaHQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nXG4gICAgaWYgKGN1cnJlbnRTdGVwLnR5cGUgPT09ICdsb29wJyAmJiAoY3VycmVudFN0ZXAgYXMgYW55KS5jaGlsZHJlbiAmJiAhKGN1cnJlbnRTdGVwIGFzIGFueSkubmVzdGVkU3RlcHMpIHtcbiAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyAhPT0gKGN1cnJlbnRTdGVwIGFzIGFueSkuY2hpbGRyZW4pIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkubmVzdGVkU3RlcHMgPSAoY3VycmVudFN0ZXAgYXMgYW55KS5jaGlsZHJlbjtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5uZXN0ZWRTdGVwcyA9IChjdXJyZW50U3RlcCBhcyBhbnkpLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjdXJyZW50U3RlcC50eXBlID09PSAnc3RlcC1ncm91cCcgJiYgKGN1cnJlbnRTdGVwIGFzIGFueSkuY2hpbGRyZW4gJiYgIShjdXJyZW50U3RlcCBhcyBhbnkpLnN0ZXBzKSB7XG4gICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuc3RlcHMgIT09IChjdXJyZW50U3RlcCBhcyBhbnkpLmNoaWxkcmVuKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnN0ZXBzID0gKGN1cnJlbnRTdGVwIGFzIGFueSkuY2hpbGRyZW47XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuc3RlcHMgPSAoY3VycmVudFN0ZXAgYXMgYW55KS5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBjb25kaXRpb24tc3RlcDogZW5zdXJlIGJyYW5jaGVzIGlzIHByb3Blcmx5IHVwZGF0ZWRcbiAgICAvLyBVc2UgZGVlcCBjb21wYXJpc29uIHRvIGRldGVjdCBjaGFuZ2VzIGluIG5lc3RlZCBzdWJTdGVwc1xuICAgIGlmIChjdXJyZW50U3RlcC50eXBlID09PSAnY29uZGl0aW9uJyAmJiAoY3VycmVudFN0ZXAgYXMgYW55KS5icmFuY2hlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50QnJhbmNoZXMgPSAoY3VycmVudFN0ZXAgYXMgYW55KS5icmFuY2hlcyB8fCBbXTtcbiAgICAgIGNvbnN0IHByZXZpb3VzQnJhbmNoZXMgPSAocHJldmlvdXNTdGVwIGFzIGFueSkuYnJhbmNoZXMgfHwgW107XG5cbiAgICAgIC8vIFVzZSBkZWVwIGNvbXBhcmlzb24gdG8gZGV0ZWN0IG5lc3RlZCBzdWJTdGVwcyBjaGFuZ2VzXG4gICAgICBpZiAodGhpcy5oYXNCcmFuY2hlc0NoYW5nZWQoY3VycmVudEJyYW5jaGVzLCBwcmV2aW91c0JyYW5jaGVzKSkge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIGVuc3VyZSBjaGFuZ2UgZGV0ZWN0aW9uIHRyaWdnZXJzXG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzID0gWy4uLmN1cnJlbnRCcmFuY2hlcy5tYXAoKGJyYW5jaDogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLmJyYW5jaCxcbiAgICAgICAgICBzdWJTdGVwczogYnJhbmNoLnN1YlN0ZXBzID8gWy4uLmJyYW5jaC5zdWJTdGVwc10gOiBbXVxuICAgICAgICB9KSldO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmJyYW5jaGVzID0gKGluc3RhbmNlIGFzIGFueSkuYnJhbmNoZXM7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgY29uZGl0aW9uLXN0ZXA6IGVuc3VyZSBuZXN0ZWRTdGVwcyBpcyBwcm9wZXJseSB1cGRhdGVkXG4gICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgd2hlbiBjaGlsZHJlbiBhcmUgbG9hZGVkIGZyb20gdGhlIEFQSSBvciB3aGVuIHN3aXRjaGluZyBicmFuY2hlc1xuICAgIGlmIChjdXJyZW50U3RlcC50eXBlID09PSAnY29uZGl0aW9uJyAmJiAoY3VycmVudFN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50TmVzdGVkU3RlcHMgPSAoY3VycmVudFN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcyB8fCBbXTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTmVzdGVkU3RlcHMgPSAocHJldmlvdXNTdGVwIGFzIGFueSkubmVzdGVkU3RlcHMgfHwgW107XG4gICAgICBjb25zb2xlLmxvZygn8J+UhCBzdGVwLXJlbmRlcmVyOiBjdXJyZW50TmVzdGVkU3RlcHMnLCBjdXJyZW50TmVzdGVkU3RlcHMpO1xuICAgICAgY29uc29sZS5sb2coJ/CflIQgc3RlcC1yZW5kZXJlcjogcHJldmlvdXNOZXN0ZWRTdGVwcycsIHByZXZpb3VzTmVzdGVkU3RlcHMpO1xuICAgICAgLy8gVXNlIGRlZXAgY29tcGFyaXNvbiB0byBkZXRlY3QgY29udGVudCBjaGFuZ2VzLCBub3QganVzdCByZWZlcmVuY2UgY2hhbmdlc1xuICAgICAgLy8gVGhpcyBpcyBjcml0aWNhbCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIElGIGFuZCBFTFNFX0lGIGJyYW5jaGVzXG4gICAgICBpZiAodGhpcy5oYXNOZXN0ZWRTdGVwc0NoYW5nZWQoY3VycmVudE5lc3RlZFN0ZXBzLCBwcmV2aW91c05lc3RlZFN0ZXBzKSkge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIHRvIGVuc3VyZSBjaGFuZ2UgZGV0ZWN0aW9uIHRyaWdnZXJzXG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzID0gWy4uLmN1cnJlbnROZXN0ZWRTdGVwc107XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcubmVzdGVkU3RlcHMgPSBbLi4uY3VycmVudE5lc3RlZFN0ZXBzXTtcbiAgICAgICAgfVxuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgY29uc29sZS5sb2coJ/CflIQgc3RlcC1yZW5kZXJlcjogbmVzdGVkU3RlcHMgdXBkYXRlZCBmb3IgY29uZGl0aW9uLXN0ZXAnLCB7XG4gICAgICAgICAgc3RlcElkOiBjdXJyZW50U3RlcC5pZCxcbiAgICAgICAgICBwcmV2aW91c0NvdW50OiBwcmV2aW91c05lc3RlZFN0ZXBzLmxlbmd0aCxcbiAgICAgICAgICBjdXJyZW50Q291bnQ6IGN1cnJlbnROZXN0ZWRTdGVwcy5sZW5ndGhcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgZmlsZS1kb3dubG9hZCAoaW5jbHVkaW5nIGdlbmVyYXRlRG9jdW1lbnQpOiBzeW5jIGZyb20gZ2VuZXJhdGVEb2N1bWVudFJlc3VsdFxuICAgIGlmICh0aGlzLmdldEVmZmVjdGl2ZVN0ZXBUeXBlKGN1cnJlbnRTdGVwKSA9PT0gJ2ZpbGUtZG93bmxvYWQnKSB7XG4gICAgICBjb25zdCBnZCA9IChjdXJyZW50U3RlcCBhcyBhbnkpLmV4ZWN1dGVkUmVzdWx0Py5nZW5lcmF0ZURvY3VtZW50UmVzdWx0O1xuICAgICAgY29uc3QgcHJldkdkID0gKHByZXZpb3VzU3RlcCBhcyBhbnkpLmV4ZWN1dGVkUmVzdWx0Py5nZW5lcmF0ZURvY3VtZW50UmVzdWx0O1xuICAgICAgaWYgKGdkICE9PSBwcmV2R2QgfHwgZ2Q/LmZpbGVOYW1lICE9PSBwcmV2R2Q/LmZpbGVOYW1lIHx8IGdkPy5maWxlVHlwZSAhPT0gcHJldkdkPy5maWxlVHlwZSB8fCBnZD8uczNGaWxlTmFtZSAhPT0gcHJldkdkPy5zM0ZpbGVOYW1lKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lID0gZ2Q/LmZpbGVOYW1lID8/IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lID8/ICcnO1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5maWxlVHlwZSA9IGdkPy5maWxlVHlwZSA/PyAoaW5zdGFuY2UgYXMgYW55KS5maWxlVHlwZSA/PyAnJztcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGggPSBnZD8uczNGaWxlTmFtZSA/PyAoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aDtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlTmFtZSA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlVHlwZSA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlUGF0aCA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVQYXRoO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdGlkID0gKGN1cnJlbnRTdGVwIGFzIGFueSkudGVzdFN0ZXBSZXN1bHRJZDtcbiAgICAgIGNvbnN0IG5leHREb3dubG9hZGluZyA9ICEhdGlkICYmIHRoaXMuZG93bmxvYWRpbmdTdGVwSWQgPT09IHRpZDtcbiAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5pc0Rvd25sb2FkaW5nICE9PSBuZXh0RG93bmxvYWRpbmcpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNEb3dubG9hZGluZyA9IG5leHREb3dubG9hZGluZztcbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgbG9vcC1zdGVwOiBlbnN1cmUgc2VsZWN0ZWRJdGVyYXRpb25JZCBmcm9tIGlucHV0IGlzIHVzZWRcbiAgICBpZiAoY3VycmVudFN0ZXAudHlwZSA9PT0gJ2xvb3AnICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb25JZCA9IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgIGNvbnN0IGluc3RhbmNlU2VsZWN0ZWRJdGVyYXRpb25JZCA9IChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSB2YWx1ZXMgdG8gaGFuZGxlIG51bGwvdW5kZWZpbmVkIGNvbnNpc3RlbnRseVxuICAgICAgY29uc3Qgbm9ybWFsaXplVmFsdWUgPSAodmFsOiBhbnkpID0+IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKHZhbCk7XG4gICAgICBjb25zdCBjdXJyZW50Tm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKGN1cnJlbnRTZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlTm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKGluc3RhbmNlU2VsZWN0ZWRJdGVyYXRpb25JZCk7XG5cbiAgICAgIGlmIChjdXJyZW50Tm9ybWFsaXplZCAhPT0gaW5zdGFuY2VOb3JtYWxpemVkKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5zZWxlY3RlZEl0ZXJhdGlvbklkID0gY3VycmVudFNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgbG9vcC1zdGVwOiBlbnN1cmUgc2VsZWN0ZWRJdGVyYXRpb25JZCBmcm9tIGlucHV0IGlzIHVzZWRcbiAgICBpZiAoY3VycmVudFN0ZXAudHlwZSA9PT0gJ2xvb3AnICYmIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb25JZCA9IHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgIGNvbnN0IGluc3RhbmNlU2VsZWN0ZWRJdGVyYXRpb25JZCA9IChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSB2YWx1ZXMgdG8gaGFuZGxlIG51bGwvdW5kZWZpbmVkIGNvbnNpc3RlbnRseVxuICAgICAgY29uc3Qgbm9ybWFsaXplVmFsdWUgPSAodmFsOiBhbnkpID0+IHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCA/ICcnIDogU3RyaW5nKHZhbCk7XG4gICAgICBjb25zdCBjdXJyZW50Tm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKGN1cnJlbnRTZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlTm9ybWFsaXplZCA9IG5vcm1hbGl6ZVZhbHVlKGluc3RhbmNlU2VsZWN0ZWRJdGVyYXRpb25JZCk7XG5cbiAgICAgIGlmIChjdXJyZW50Tm9ybWFsaXplZCAhPT0gaW5zdGFuY2VOb3JtYWxpemVkKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5zZWxlY3RlZEl0ZXJhdGlvbklkID0gY3VycmVudFNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGV4cGFuZGVkIHN0YXRlXG4gICAgaWYgKHRoaXMuaXNTdGVwRXhwYW5kZWRIYW5kbGVyICYmIGN1cnJlbnRTdGVwKSB7XG4gICAgICBjb25zdCBleHBhbmRlZFN0YXRlID0gdGhpcy5pc1N0ZXBFeHBhbmRlZEhhbmRsZXIoY3VycmVudFN0ZXApO1xuICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmV4cGFuZGVkICE9PSBleHBhbmRlZFN0YXRlKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmV4cGFuZGVkID0gZXhwYW5kZWRTdGF0ZTtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5leHBhbmRlZCA9IGV4cGFuZGVkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoY3VycmVudFN0ZXAgYXMgYW55KS5leHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuZXhwYW5kZWQgIT09IChjdXJyZW50U3RlcCBhcyBhbnkpLmV4cGFuZGVkKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmV4cGFuZGVkID0gKGN1cnJlbnRTdGVwIGFzIGFueSkuZXhwYW5kZWQ7XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZXhwYW5kZWQgPSAoY3VycmVudFN0ZXAgYXMgYW55KS5leHBhbmRlZDtcbiAgICAgICAgfVxuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY29uZmlnIHJlZmVyZW5jZSAtIGVuc3VyZSBhbGwgcHJvcGVydGllcyBpbmNsdWRpbmcgYnJhbmNoZXMgYXJlIGluY2x1ZGVkXG4gICAgaWYgKCdjb25maWcnIGluIGluc3RhbmNlKSB7XG4gICAgICAvLyBVcGRhdGUgY29uZmlnIHdpdGggY3VycmVudCBzdGVwIHRvIGVuc3VyZSBhbGwgcHJvcGVydGllcyBpbmNsdWRpbmcgYnJhbmNoZXMgYXJlIHN5bmNlZFxuICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnID0geyAuLi4oaW5zdGFuY2UgYXMgYW55KS5jb25maWcsIC4uLmN1cnJlbnRTdGVwIH07XG4gICAgICAvLyBFeHBsaWNpdGx5IGVuc3VyZSBicmFuY2hlcyBpcyB1cGRhdGVkIGZvciBjb25kaXRpb24tc3RlcCAoaW4gY2FzZSBpdCB3YXMgbmVzdGVkKVxuICAgICAgLy8gVXNlIHRoZSBhbHJlYWR5IHVwZGF0ZWQgYnJhbmNoZXMgZnJvbSBpbnN0YW5jZSB0byBtYWludGFpbiByZWZlcmVuY2UgY29uc2lzdGVuY3lcbiAgICAgIGlmIChjdXJyZW50U3RlcC50eXBlID09PSAnY29uZGl0aW9uJyAmJiAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5icmFuY2hlcyA9IChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzdGVwIHByb3BlcnR5IGlmIGl0IGV4aXN0cyBvbiB0aGUgaW5zdGFuY2VcbiAgICBpZiAoJ3N0ZXAnIGluIGluc3RhbmNlKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5zdGVwID0gY3VycmVudFN0ZXA7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSBpZiB0aGVyZSB3ZXJlIGNoYW5nZXNcbiAgICAvLyBUaGlzIGVuc3VyZXMgb25seSB0aGUgbmVzdGVkIHN0ZXAgdXBkYXRlcyB3aXRob3V0IGFmZmVjdGluZyBwYXJlbnQgc3RlcHNcbiAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbmplY3Rvcikge1xuICAgICAgICBjb25zdCBpbnN0YW5jZUNkciA9IGNvbXBvbmVudFJlZi5pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYsIG51bGwpO1xuICAgICAgICBpZiAoaW5zdGFuY2VDZHIpIHtcbiAgICAgICAgICBpbnN0YW5jZUNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICBpbnN0YW5jZUNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKGluc3RhbmNlIGFzIGFueSkuY2RyKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGVsc2UgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIC8vIERvbid0IGNhbGwgbWFya0ZvckNoZWNrIG9uIHRoaXMgY29tcG9uZW50IHRvIGF2b2lkIHRyaWdnZXJpbmcgcGFyZW50IHJlLXJlbmRlcnNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIG1ldGhvZCB0byB1cGRhdGUgbG9vcC1zdGVwIHNlbGVjdGVkSXRlcmF0aW9uIHdoZW4gc2VsZWN0ZWRJdGVyYXRpb25JZCBjaGFuZ2VzXG4gICAqIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBpdGVyYXRpb25zIG1pZ2h0IG5vdCBiZSBsb2FkZWQgeWV0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUxvb3BTdGVwU2VsZWN0ZWRJdGVyYXRpb24oaW5zdGFuY2U6IGFueSwgc2VsZWN0ZWRJdGVyYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKCFpbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXRlcmF0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLml0ZXJhdGlvbnMgfHwgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnPy5pdGVyYXRpb25zIHx8IFtdO1xuXG4gICAgaWYgKGl0ZXJhdGlvbnMgJiYgaXRlcmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVyYXRpb25JZCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGl0ZXJhdGlvbnMuZmluZCgoaXRlcjogYW55KSA9PiBpdGVyLmlkID09PSBzZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb24gPSBmb3VuZDtcbiAgICAgICAgICAvLyBTeW5jIHVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkIHdpdGggdGhlIGlucHV0IHZhbHVlXG4gICAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnVzZXJTZWxlY3RlZEl0ZXJhdGlvbklkID0gc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgbm90IGZvdW5kLCBzZWxlY3QgZGVmYXVsdFxuICAgICAgICAgIGlmICh0eXBlb2YgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgcHJvdmlkZWQsIHNlbGVjdCBkZWZhdWx0XG4gICAgICAgIGlmICh0eXBlb2YgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdERlZmF1bHRJdGVyYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiBpdGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlIHlldCwgdGhlIHNlbGVjdGVkSXRlcmF0aW9uSWQgaXMgYWxyZWFkeSBzZXRcbiAgICAvLyBhbmQgd2lsbCBiZSB1c2VkIHdoZW4gaXRlcmF0aW9ucyBiZWNvbWUgYXZhaWxhYmxlIChoYW5kbGVkIGluIHVwZGF0ZUNvbXBvbmVudEluc3RhbmNlIGFuZCBuZ0RvQ2hlY2spXG4gIH1cblxuICBwcml2YXRlIGhhc1ZhbHVlQ2hhbmdlZChjdXJyZW50OiBhbnksIHByZXZpb3VzOiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBTaGFsbG93IGNvbXBhcmlzb24gZm9yIHByaW1pdGl2ZXNcbiAgICBpZiAoY3VycmVudCA9PT0gcHJldmlvdXMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIEhhbmRsZSBudWxsL3VuZGVmaW5lZFxuICAgIGlmIChjdXJyZW50ID09IG51bGwgfHwgcHJldmlvdXMgPT0gbnVsbCkgcmV0dXJuIGN1cnJlbnQgIT09IHByZXZpb3VzO1xuXG4gICAgLy8gRm9yIGFycmF5cywgY2hlY2sgbGVuZ3RoIGFuZCByZWZlcmVuY2VcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSB8fCBBcnJheS5pc0FycmF5KHByZXZpb3VzKSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudCkgIT09IEFycmF5LmlzQXJyYXkocHJldmlvdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gcHJldmlvdXMubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBjdXJyZW50ICE9PSBwcmV2aW91czsgLy8gUmVmZXJlbmNlIGNoZWNrXG4gICAgfVxuXG4gICAgLy8gRm9yIG9iamVjdHMsIGRvIHNoYWxsb3cgY29tcGFyaXNvbiAoY2hlY2sgcmVmZXJlbmNlKVxuICAgIGlmICh0eXBlb2YgY3VycmVudCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHByZXZpb3VzID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIGN1cnJlbnQgIT09IHByZXZpb3VzOyAvLyBSZWZlcmVuY2UgY2hlY2tcbiAgICB9XG5cbiAgICAvLyBGb3IgcHJpbWl0aXZlc1xuICAgIHJldHVybiBjdXJyZW50ICE9PSBwcmV2aW91cztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWVwIGNvbXBhcmlzb24gZm9yIGJyYW5jaGVzIGFycmF5IHRvIGRldGVjdCBjaGFuZ2VzIGluIG5lc3RlZCBzdWJTdGVwc1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNCcmFuY2hlc0NoYW5nZWQoY3VycmVudDogYW55W10sIHByZXZpb3VzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghY3VycmVudCAmJiAhcHJldmlvdXMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWN1cnJlbnQgfHwgIXByZXZpb3VzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY3VycmVudC5sZW5ndGggIT09IHByZXZpb3VzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGN1cnJlbnQgPT09IHByZXZpb3VzKSByZXR1cm4gZmFsc2U7IC8vIFNhbWUgcmVmZXJlbmNlXG5cbiAgICAvLyBDb21wYXJlIGVhY2ggYnJhbmNoIGFuZCBpdHMgc3ViU3RlcHNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRCcmFuY2ggPSBjdXJyZW50W2ldO1xuICAgICAgY29uc3QgcHJldmlvdXNCcmFuY2ggPSBwcmV2aW91c1tpXTtcblxuICAgICAgaWYgKCFwcmV2aW91c0JyYW5jaCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIENoZWNrIGlmIGJyYW5jaCBwcm9wZXJ0aWVzIGNoYW5nZWRcbiAgICAgIGlmIChjdXJyZW50QnJhbmNoLnR5cGUgIT09IHByZXZpb3VzQnJhbmNoLnR5cGUgfHxcbiAgICAgICAgY3VycmVudEJyYW5jaC5sYWJlbCAhPT0gcHJldmlvdXNCcmFuY2gubGFiZWwgfHxcbiAgICAgICAgY3VycmVudEJyYW5jaC5leGVjdXRlZCAhPT0gcHJldmlvdXNCcmFuY2guZXhlY3V0ZWQgfHxcbiAgICAgICAgY3VycmVudEJyYW5jaC5jb25kaXRpb25UeXBlICE9PSBwcmV2aW91c0JyYW5jaC5jb25kaXRpb25UeXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBzdWJTdGVwcyBhcnJheSBjaGFuZ2VkIChsZW5ndGggb3IgcmVmZXJlbmNlKVxuICAgICAgY29uc3QgY3VycmVudFN1YlN0ZXBzID0gY3VycmVudEJyYW5jaC5zdWJTdGVwcyB8fCBbXTtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3ViU3RlcHMgPSBwcmV2aW91c0JyYW5jaC5zdWJTdGVwcyB8fCBbXTtcblxuICAgICAgaWYgKGN1cnJlbnRTdWJTdGVwcy5sZW5ndGggIT09IHByZXZpb3VzU3ViU3RlcHMubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChjdXJyZW50U3ViU3RlcHMgIT09IHByZXZpb3VzU3ViU3RlcHMpIHJldHVybiB0cnVlOyAvLyBSZWZlcmVuY2UgY2hlY2tcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGVlcCBjb21wYXJpc29uIGZvciBuZXN0ZWRTdGVwcyBhcnJheSB0byBkZXRlY3QgY29udGVudCBjaGFuZ2VzXG4gICAqIFRoaXMgaXMgaW1wb3J0YW50IGZvciBjb25kaXRpb24gc3RlcHMgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBicmFuY2hlc1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNOZXN0ZWRTdGVwc0NoYW5nZWQoY3VycmVudDogYW55W10sIHByZXZpb3VzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghY3VycmVudCAmJiAhcHJldmlvdXMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIWN1cnJlbnQgfHwgIXByZXZpb3VzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY3VycmVudC5sZW5ndGggIT09IHByZXZpb3VzLmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGN1cnJlbnQgPT09IHByZXZpb3VzKSByZXR1cm4gZmFsc2U7IC8vIFNhbWUgcmVmZXJlbmNlXG5cbiAgICAvLyBDb21wYXJlIGVhY2ggc3RlcCBieSBJRCB0byBkZXRlY3QgY29udGVudCBjaGFuZ2VzXG4gICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIHdoZXJlIGFycmF5IGxlbmd0aCBpcyBzYW1lIGJ1dCBjb250ZW50IGRpZmZlcnMgKGUuZy4sIHN3aXRjaGluZyBicmFuY2hlcylcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gY3VycmVudFtpXTtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RlcCA9IHByZXZpb3VzW2ldO1xuXG4gICAgICBpZiAoIXByZXZpb3VzU3RlcCkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIENvbXBhcmUgc3RlcCBJRHMgLSBpZiBJRHMgZGlmZmVyLCBjb250ZW50IGhhcyBjaGFuZ2VkXG4gICAgICBjb25zdCBjdXJyZW50U3RlcElkID0gY3VycmVudFN0ZXAuaWQgfHwgY3VycmVudFN0ZXAudGVzdFN0ZXBSZXN1bHRJZDtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RlcElkID0gcHJldmlvdXNTdGVwLmlkIHx8IHByZXZpb3VzU3RlcC50ZXN0U3RlcFJlc3VsdElkO1xuXG4gICAgICBpZiAoY3VycmVudFN0ZXBJZCAhPT0gcHJldmlvdXNTdGVwSWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEFsc28gY2hlY2sgaWYgdGhlIHN0ZXAgdHlwZSBjaGFuZ2VkIChpbXBvcnRhbnQgZm9yIGJyYW5jaCBzd2l0Y2hpbmcpXG4gICAgICBpZiAoY3VycmVudFN0ZXAudHlwZSAhPT0gcHJldmlvdXNTdGVwLnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRlc3RTdGVwVHlwZSBjaGFuZ2VkIChJRiB2cyBFTFNFX0lGIHZzIEVMU0UpXG4gICAgICBpZiAoY3VycmVudFN0ZXAudGVzdFN0ZXBUeXBlICE9PSBwcmV2aW91c1N0ZXAudGVzdFN0ZXBUeXBlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgdXBkYXRlIHRva2VuIGlmIHByZXNlbnQgKHVzZWQgdG8gZm9yY2UgcmUtcmVuZGVyKVxuICAgICAgaWYgKGN1cnJlbnRTdGVwLl91cGRhdGVUb2tlbiAmJiBjdXJyZW50U3RlcC5fdXBkYXRlVG9rZW4gIT09IHByZXZpb3VzU3RlcC5fdXBkYXRlVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdGVwS2V5KHN0ZXA6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFzdGVwKSByZXR1cm4gJyc7XG4gICAgLy8gQ3JlYXRlIGEga2V5IGZyb20gaW1wb3J0YW50IHByb3BlcnRpZXMgdGhhdCBjaGFuZ2VcbiAgICAvLyBJbmNsdWRlIGV4ZWN1dGlvbkRhdGEuc3RlcFN0YXR1cyBmb3IgbGl2ZSBleGVjdXRpb24gc2NlbmFyaW9zXG4gICAgY29uc3QgZXhlY3V0aW9uU3RhdHVzID0gc3RlcC5leGVjdXRpb25EYXRhPy5zdGVwU3RhdHVzIHx8IHN0ZXAuc3RhdHVzIHx8ICcnO1xuICAgIC8vIEluY2x1ZGUgYnJhbmNoZXMgbGVuZ3RoIGZvciBjb25kaXRpb24tc3RlcCBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgY29uc3QgYnJhbmNoZXNMZW5ndGggPSAoc3RlcC5icmFuY2hlcyB8fCBbXSkubGVuZ3RoO1xuICAgIC8vIEluY2x1ZGUgdG90YWwgc3ViU3RlcHMgY291bnQgYWNyb3NzIGFsbCBicmFuY2hlcyBmb3IgbmVzdGVkIGNoYW5nZSBkZXRlY3Rpb25cbiAgICBjb25zdCB0b3RhbFN1YlN0ZXBzID0gKHN0ZXAuYnJhbmNoZXMgfHwgW10pLnJlZHVjZSgoc3VtOiBudW1iZXIsIGJyYW5jaDogYW55KSA9PiB7XG4gICAgICByZXR1cm4gc3VtICsgKGJyYW5jaC5zdWJTdGVwcz8ubGVuZ3RoIHx8IDApO1xuICAgIH0sIDApO1xuICAgIHJldHVybiBgJHtzdGVwLmlkIHx8ICcnfV8ke2V4ZWN1dGlvblN0YXR1c31fJHtzdGVwLnN0YXR1cyB8fCAnJ31fJHtzdGVwLmR1cmF0aW9uIHx8ICcnfV8ke3N0ZXAuZXhwYW5kZWQgfHwgZmFsc2V9XyR7KHN0ZXAuY2hpbGRyZW4gfHwgW10pLmxlbmd0aH1fJHsoc3RlcC5uZXN0ZWRTdGVwcyB8fCBbXSkubGVuZ3RofV8keyhzdGVwLnN0ZXBzIHx8IFtdKS5sZW5ndGh9XyR7YnJhbmNoZXNMZW5ndGh9XyR7dG90YWxTdWJTdGVwc31fJHtzdGVwLnN0ZXBOdW1iZXIgfHwgJyd9XyR7c3RlcC5zdGVwRGVsZXRlZCB8fCBmYWxzZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29tcG9uZW50KCkge1xuICAgIFxuICAgIGlmICghdGhpcy5jb250YWluZXIgfHwgIXRoaXMuc3RlcCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVudFN0ZXBJZCA9ICh0aGlzLnN0ZXAgYXMgYW55KS50ZXN0U3RlcFJlc3VsdElkIHx8IHRoaXMuc3RlcC5pZDtcbiAgICBjb25zdCBjdXJyZW50U3RlcFR5cGUgPSB0aGlzLmdldEVmZmVjdGl2ZVN0ZXBUeXBlKHRoaXMuc3RlcCkgfHwgKHRoaXMuc3RlcCBhcyBhbnkpLnR5cGU7XG5cbiAgICAvLyBPbmx5IGNsZWFyIGFuZCByZWNyZWF0ZSBpZiBzdGVwIElEIG9yIHR5cGUgYWN0dWFsbHkgY2hhbmdlZFxuICAgIGNvbnN0IG5lZWRzUmVjcmVhdGlvbiA9IHRoaXMubGFzdFN0ZXBJZCAhPT0gY3VycmVudFN0ZXBJZCB8fCB0aGlzLmxhc3RTdGVwVHlwZSAhPT0gY3VycmVudFN0ZXBUeXBlO1xuXG4gICAgaWYgKG5lZWRzUmVjcmVhdGlvbikge1xuICAgICAgdGhpcy5jb250YWluZXIuY2xlYXIoKTtcbiAgICAgIC8vIENsZWFyIHN0b3JlZCBpbnN0YW5jZSB3aGVuIHJlY3JlYXRpbmdcbiAgICAgIFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuZGVsZXRlKHRoaXMuY29udGFpbmVyKTtcbiAgICAgIFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRSZWZzLmRlbGV0ZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICB0aGlzLmxhc3RTdGVwSWQgPSBjdXJyZW50U3RlcElkO1xuICAgICAgdGhpcy5sYXN0U3RlcFR5cGUgPSBjdXJyZW50U3RlcFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHNhbWUgc3RlcCwganVzdCB1cGRhdGUgcHJvcGVydGllcyB3aXRob3V0IGNsZWFyaW5nXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuZ2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAvLyBVcGRhdGUgYWxsIHByb3BlcnRpZXNcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5zdGVwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gJ3R5cGUnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gKHRoaXMuc3RlcCBhcyBhbnkpW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZyA9IHsgLi4uKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLCAuLi50aGlzLnN0ZXAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTeW5jIGZpbGUtZG93bmxvYWQgKGdlbmVyYXRlRG9jdW1lbnQpIHByb3BzIGZyb20gZ2VuZXJhdGVEb2N1bWVudFJlc3VsdFxuICAgICAgICBjb25zdCBlZmZlY3RpdmVUeXBlRm9yVXBkYXRlID0gdGhpcy5nZXRFZmZlY3RpdmVTdGVwVHlwZSh0aGlzLnN0ZXApIHx8ICh0aGlzLnN0ZXAgYXMgYW55KS50eXBlO1xuICAgICAgICBpZiAoZWZmZWN0aXZlVHlwZUZvclVwZGF0ZSA9PT0gJ2ZpbGUtZG93bmxvYWQnKSB7XG4gICAgICAgICAgY29uc3QgZ2QgPSAodGhpcy5zdGVwIGFzIGFueSkuZXhlY3V0ZWRSZXN1bHQ/LmdlbmVyYXRlRG9jdW1lbnRSZXN1bHQ7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZU5hbWUgPSBnZD8uZmlsZU5hbWUgPz8gKGluc3RhbmNlIGFzIGFueSkuZmlsZU5hbWUgPz8gJyc7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZVR5cGUgPSBnZD8uZmlsZVR5cGUgPz8gKGluc3RhbmNlIGFzIGFueSkuZmlsZVR5cGUgPz8gJyc7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGggPSBnZD8uczNGaWxlTmFtZSA/PyAoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aDtcbiAgICAgICAgICBjb25zdCB0aWQgPSAodGhpcy5zdGVwIGFzIGFueSkudGVzdFN0ZXBSZXN1bHRJZDtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0Rvd25sb2FkaW5nID0gISF0aWQgJiYgdGhpcy5kb3dubG9hZGluZ1N0ZXBJZCA9PT0gdGlkO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlTmFtZSA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lO1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmZpbGVUeXBlID0gKGluc3RhbmNlIGFzIGFueSkuZmlsZVR5cGU7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZmlsZVBhdGggPSAoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIGtleSBmb3IgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLnByZXZpb3VzU3RlcEtleSA9IHRoaXMuZ2V0U3RlcEtleSh0aGlzLnN0ZXApO1xuICAgICAgICAvLyBDb21wb25lbnQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIHJlYWR5LCBlbWl0IGltbWVkaWF0ZWx5XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkuZW1pdCgpO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVmZmVjdGl2ZVR5cGUgPSB0aGlzLmdldEVmZmVjdGl2ZVN0ZXBUeXBlKHRoaXMuc3RlcCkgfHwgKHRoaXMuc3RlcCBhcyBhbnkpLnR5cGU7XG4gICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMuY29tcG9uZW50TWFwLmdldChlZmZlY3RpdmVUeXBlKTtcblxuICAgIGlmIChjb21wb25lbnRUeXBlKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcblxuICAgICAgLy8gU3RvcmUgY29tcG9uZW50IGluc3RhbmNlIGFuZCByZWYgaW4gV2Vha01hcCBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgIFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuc2V0KHRoaXMuY29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgICBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5zZXQodGhpcy5jb250YWluZXIsIGNvbXBvbmVudFJlZik7XG5cbiAgICAgIC8vIFN0b3JlIGNvbXBvbmVudCByZWZlcmVuY2UgZm9yIGNsZWFudXBcbiAgICAgIChjb21wb25lbnRSZWYgYXMgYW55KS5fY29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuXG4gICAgICAvLyBTcHJlYWQgY29uZmlnIHByb3BlcnRpZXMgYXMgaW5kaXZpZHVhbCBpbnB1dHMgZm9yIGNvbXBvbmVudHMgdGhhdCB1c2UgaW5kaXZpZHVhbCBpbnB1dHNcbiAgICAgIC8vIFRoaXMgc3VwcG9ydHMgYm90aCBwYXR0ZXJuczogY29tcG9uZW50cyB0aGF0IGFjY2VwdCBjb25maWcgZGlyZWN0bHkgYW5kIHRob3NlIHRoYXQgdXNlIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN0ZXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ3R5cGUnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9ICh0aGlzLnN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgbG9vcC1zdGVwOiBtYXAgY2hpbGRyZW4gdG8gbmVzdGVkU3RlcHMgaWYgbmVzdGVkU3RlcHMgaXMgbm90IHByZXNlbnRcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2xvb3AnICYmICh0aGlzLnN0ZXAgYXMgYW55KS5jaGlsZHJlbiAmJiAhKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzID0gKHRoaXMuc3RlcCBhcyBhbnkpLmNoaWxkcmVuO1xuICAgICAgfVxuXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBsb29wLXN0ZXA6IHNldCBsb29wVHlwZSBiYXNlZCBvbiBhY3Rpb25OYW1lIG9yIHRlc3RTdGVwVHlwZVxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgLy8gU2V0IGxvb3BUeXBlIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLmxvb3BUeXBlKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uTmFtZSA9ICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb25OYW1lO1xuICAgICAgICAgIGNvbnN0IHRlc3RTdGVwVHlwZSA9ICh0aGlzLnN0ZXAgYXMgYW55KS50ZXN0U3RlcFR5cGU7XG4gICAgICAgICAgaWYgKGFjdGlvbk5hbWUgPT09ICdGT1JfTE9PUCcgfHwgdGVzdFN0ZXBUeXBlID09PSAnRk9SX0xPT1AnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5sb29wVHlwZSA9ICdmb3InO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uTmFtZSA9PT0gJ1dISUxFX0xPT1AnIHx8IHRlc3RTdGVwVHlwZSA9PT0gJ1dISUxFX0xPT1AnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5sb29wVHlwZSA9ICd3aGlsZSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSB0aXRsZSBpcyBzZXQgZnJvbSBhY3Rpb24gaWYgdGl0bGUgaXMgbm90IHByZXNlbnQgb3IgZW1wdHlcbiAgICAgICAgaWYgKCghKGluc3RhbmNlIGFzIGFueSkudGl0bGUgfHwgIShpbnN0YW5jZSBhcyBhbnkpLnRpdGxlLnRyaW0oKSkgJiYgKHRoaXMuc3RlcCBhcyBhbnkpLmFjdGlvbikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnRpdGxlID0gKHRoaXMuc3RlcCBhcyBhbnkpLmFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBsb29wLXN0ZXA6IGluaXRpYWxpemUgaXRlcmF0aW9ucyBpZiBub3QgcHJlc2VudFxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnbG9vcCcgJiYgIShpbnN0YW5jZSBhcyBhbnkpLml0ZXJhdGlvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCIgY2hhbmdlc1snc2VsZWN0ZWRJdGVyYXRpb25JZCddIHN0ZXBcIiwgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkLCAoaW5zdGFuY2UgYXMgYW55KS5pdGVyYXRpb25zKVxuICAgICAgICAvLyBVc2UgaGFuZGxlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB0cnkgdG8gaW5pdGlhbGl6ZSBmcm9tIHN0ZXAuZXhlY3V0ZWRSZXN1bHQuc3RlcFJlc3VsdFxuICAgICAgICBpZiAodGhpcy5nZXRMb29wSXRlcmF0aW9uc0hhbmRsZXIpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5pdGVyYXRpb25zID0gdGhpcy5nZXRMb29wSXRlcmF0aW9uc0hhbmRsZXIodGhpcy5zdGVwKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5zdGVwIGFzIGFueSkuZXhlY3V0ZWRSZXN1bHQ/LnN0ZXBSZXN1bHQgJiYgQXJyYXkuaXNBcnJheSgodGhpcy5zdGVwIGFzIGFueSkuZXhlY3V0ZWRSZXN1bHQuc3RlcFJlc3VsdCkpIHtcbiAgICAgICAgICAvLyBJbml0aWFsaXplIGl0ZXJhdGlvbnMgZGlyZWN0bHkgZnJvbSBzdGVwUmVzdWx0XG4gICAgICAgICAgY29uc3QgaXRlcmF0aW9uczogYW55W10gPSBbXTtcbiAgICAgICAgICAodGhpcy5zdGVwIGFzIGFueSkuZXhlY3V0ZWRSZXN1bHQuc3RlcFJlc3VsdC5mb3JFYWNoKChpdGVyYXRpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlcmF0aW9uSW5kZXggPSBpdGVyYXRpb24uaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpdGVyYXRpb24uaW5kZXggIT09IG51bGwgPyBpdGVyYXRpb24uaW5kZXggOiBpdGVyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIGxldCBzdGF0dXM6ICdzdWNjZXNzJyB8ICdmYWlsZWQnIHwgJ3BlbmRpbmcnIHwgJ3J1bm5pbmcnID0gJ3BlbmRpbmcnO1xuICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdHVzTG93ZXIgPSBpdGVyYXRpb24uc3RhdHVzLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIGlmIChzdGF0dXNMb3dlciA9PT0gJ3N1Y2Nlc3MnIHx8IHN0YXR1c0xvd2VyID09PSAncGFzc2VkJykge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdzdWNjZXNzJztcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXNMb3dlciA9PT0gJ2ZhaWx1cmUnIHx8IHN0YXR1c0xvd2VyID09PSAnZmFpbGVkJykge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdmYWlsZWQnO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1c0xvd2VyID09PSAncnVubmluZycgfHwgc3RhdHVzTG93ZXIgPT09ICdpbl9wcm9ncmVzcycpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSAncnVubmluZyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBgaXRlci0ke2l0ZXJhdGlvbkluZGV4fWAsXG4gICAgICAgICAgICAgIGxhYmVsOiBgaXRlciAke2l0ZXJhdGlvbkluZGV4fWAsXG4gICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLFxuICAgICAgICAgICAgICBzdWJTdGVwczogW10sXG4gICAgICAgICAgICAgIGluZGV4OiBpdGVyYXRpb25JbmRleFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgbG9vcC1zdGVwOiBzZXQgZGVmYXVsdEl0ZXJhdGlvbiBhbmQgc2VsZWN0ZWRJdGVyYXRpb25JZFxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCIgY2hhbmdlc1snc2VsZWN0ZWRJdGVyYXRpb25JZCddIHN0ZXAgMlwiLCB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQsIChpbnN0YW5jZSBhcyBhbnkpLml0ZXJhdGlvbnMpXG4gICAgICAgIC8vIFNldCBkZWZhdWx0SXRlcmF0aW9uIHRvICdsYXN0JyBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgaWYgKCEoaW5zdGFuY2UgYXMgYW55KS5kZWZhdWx0SXRlcmF0aW9uKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZGVmYXVsdEl0ZXJhdGlvbiA9ICdsYXN0JztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBzZWxlY3RlZEl0ZXJhdGlvbklkIC0gcHJpb3JpdGl6ZSBpbnB1dCB2YWx1ZSwgdGhlbiBzdGVwIHZhbHVlLCB0aGVuIGxhc3QgaXRlcmF0aW9uXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSAodGhpcy5zdGVwIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZXQgc2VsZWN0ZWRJdGVyYXRpb25JZCB0byBsYXN0IGl0ZXJhdGlvbiBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgICBjb25zdCBpdGVyYXRpb25zID0gKGluc3RhbmNlIGFzIGFueSkuaXRlcmF0aW9ucztcbiAgICAgICAgICBpZiAoaXRlcmF0aW9ucyAmJiBBcnJheS5pc0FycmF5KGl0ZXJhdGlvbnMpICYmIGl0ZXJhdGlvbnMubGVuZ3RoID4gMCAmJiAhKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZXJhdGlvbiA9IGl0ZXJhdGlvbnNbaXRlcmF0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSBsYXN0SXRlcmF0aW9uLmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBzdGVwLWdyb3VwOiBtYXAgY2hpbGRyZW4gdG8gc3RlcHMgaWYgc3RlcHMgaXMgbm90IHByZXNlbnRcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ3N0ZXAtZ3JvdXAnICYmICh0aGlzLnN0ZXAgYXMgYW55KS5jaGlsZHJlbiAmJiAhKHRoaXMuc3RlcCBhcyBhbnkpLnN0ZXBzKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnN0ZXBzID0gKHRoaXMuc3RlcCBhcyBhbnkpLmNoaWxkcmVuO1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5ncm91cE5hbWUgPSAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uO1xuICAgICAgfVxuXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBmaWxlLWRvd25sb2FkIChpbmNsdWRpbmcgZ2VuZXJhdGVEb2N1bWVudCk6IHNldCBwcm9wcyBmcm9tIGdlbmVyYXRlRG9jdW1lbnRSZXN1bHQgYW5kIHdpcmUgaGFuZGxlcnNcbiAgICAgIGlmIChlZmZlY3RpdmVUeXBlID09PSAnZmlsZS1kb3dubG9hZCcpIHtcbiAgICAgICAgY29uc3QgZ2QgPSAodGhpcy5zdGVwIGFzIGFueSkuZXhlY3V0ZWRSZXN1bHQ/LmdlbmVyYXRlRG9jdW1lbnRSZXN1bHQ7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lID0gZ2Q/LmZpbGVOYW1lID8/IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lID8/ICcnO1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5maWxlVHlwZSA9IGdkPy5maWxlVHlwZSA/PyAoaW5zdGFuY2UgYXMgYW55KS5maWxlVHlwZSA/PyAnJztcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGggPSBnZD8uczNGaWxlTmFtZSA/PyAoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aDtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZG93bmxvYWRlZCA9IChpbnN0YW5jZSBhcyBhbnkpLmRvd25sb2FkZWQgPz8gZmFsc2U7XG4gICAgICAgIGNvbnN0IHRpZCA9ICh0aGlzLnN0ZXAgYXMgYW55KS50ZXN0U3RlcFJlc3VsdElkO1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0Rvd25sb2FkaW5nID0gISF0aWQgJiYgdGhpcy5kb3dubG9hZGluZ1N0ZXBJZCA9PT0gdGlkO1xuICAgICAgICBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLnRpdGxlICYmICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb24pIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS50aXRsZSA9ICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlTmFtZSA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlVHlwZSA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlUGF0aCA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVQYXRoO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5kb3dubG9hZGVkID0gKGluc3RhbmNlIGFzIGFueSkuZG93bmxvYWRlZDtcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkudGl0bGUpIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy50aXRsZSA9IChpbnN0YW5jZSBhcyBhbnkpLnRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5kb3dubG9hZCAmJiB0aGlzLm9uRG93bmxvYWRIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZG93bmxvYWQuc3Vic2NyaWJlKChldjogYW55KSA9PiB0aGlzLm9uRG93bmxvYWRIYW5kbGVyIShldikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aENvcGllZCAmJiB0aGlzLm9uRmlsZVBhdGhDb3BpZWRIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGhDb3BpZWQuc3Vic2NyaWJlKChldjogYW55KSA9PiB0aGlzLm9uRmlsZVBhdGhDb3BpZWRIYW5kbGVyIShldikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS50ZXh0Q29waWVkICYmIHRoaXMub25UZXh0Q29waWVkSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnRleHRDb3BpZWQuc3Vic2NyaWJlKChldjogYW55KSA9PiB0aGlzLm9uVGV4dENvcGllZEhhbmRsZXIhKGV2KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgY29uZGl0aW9uLXN0ZXA6IHNldCBicmFuY2hlcyBhbmQgY29uZGl0aW9uVGV4dFxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICAvLyBTZXQgYnJhbmNoZXMgLSBwcmlvcml0aXplIHN0ZXAuYnJhbmNoZXMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGhhbmRsZXJcbiAgICAgICAgaWYgKCh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcyAmJiBBcnJheS5pc0FycmF5KCh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcykpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgZGVlcCBjb3B5IHRvIGVuc3VyZSBwcm9wZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzID0gKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzLm1hcCgoYnJhbmNoOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5icmFuY2gsXG4gICAgICAgICAgICBzdWJTdGVwczogYnJhbmNoLnN1YlN0ZXBzID8gWy4uLmJyYW5jaC5zdWJTdGVwc10gOiBbXVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIGlmICghKGluc3RhbmNlIGFzIGFueSkuYnJhbmNoZXMgJiYgdGhpcy5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXIpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyQnJhbmNoZXMgPSB0aGlzLmdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcih0aGlzLnN0ZXApO1xuICAgICAgICAgIC8vIENyZWF0ZSBkZWVwIGNvcHkgdG8gZW5zdXJlIHByb3BlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuYnJhbmNoZXMgPSBoYW5kbGVyQnJhbmNoZXMubWFwKChicmFuY2g6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmJyYW5jaCxcbiAgICAgICAgICAgIHN1YlN0ZXBzOiBicmFuY2guc3ViU3RlcHMgPyBbLi4uYnJhbmNoLnN1YlN0ZXBzXSA6IFtdXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBjb25kaXRpb25UZXh0IGZyb20gYWN0aW9uIGlmIGNvbmRpdGlvblRleHQgaXMgbm90IHByZXNlbnRcbiAgICAgICAgaWYgKCEoaW5zdGFuY2UgYXMgYW55KS5jb25kaXRpb25UZXh0ICYmICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb24pIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25kaXRpb25UZXh0ID0gKHRoaXMuc3RlcCBhcyBhbnkpLmFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgaXNMb2FkaW5nIHVzaW5nIGhhbmRsZXIgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICh0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNMb2FkaW5nID0gdGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcih0aGlzLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFBhc3MgYWN0aXZlQnJhbmNoU3RlcElkIGlmIHByZXNlbnRcbiAgICAgICAgaWYgKCh0aGlzLnN0ZXAgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFjdGl2ZUJyYW5jaFN0ZXBJZCA9ICh0aGlzLnN0ZXAgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgYWktYWdlbnQtc3RlcDogZW5zdXJlIHRpdGxlIGFuZCBwcm9tcHQgYXJlIHNldCBmcm9tIGFjdGlvblxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnYWktYWdlbnQnKSB7XG4gICAgICAgIC8vIFNldCB0aXRsZSBmcm9tIGFjdGlvbiBpZiB0aXRsZSBpcyBub3QgcHJlc2VudCBvciBlbXB0eVxuICAgICAgICBpZiAoKCEoaW5zdGFuY2UgYXMgYW55KS50aXRsZSB8fCAhKGluc3RhbmNlIGFzIGFueSkudGl0bGUudHJpbSgpKSAmJiAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkudGl0bGUgPSAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBwcm9tcHQgZnJvbSBhY3Rpb24gaWYgcHJvbXB0IGlzIG5vdCBwcmVzZW50IG9yIGVtcHR5XG4gICAgICAgIGlmICgoIShpbnN0YW5jZSBhcyBhbnkpLnByb21wdCB8fCAhKGluc3RhbmNlIGFzIGFueSkucHJvbXB0LnRyaW0oKSkgJiYgKHRoaXMuc3RlcCBhcyBhbnkpLmFjdGlvbikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnByb21wdCA9ICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIGFjdGlvbnMgYXJyYXkgaXMgc2V0IGlmIG5vdCBwcmVzZW50XG4gICAgICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuYWN0aW9ucyAmJiB0aGlzLmZvcm1hdEFjdGlvbnNIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWN0aW9ucyA9IHRoaXMuZm9ybWF0QWN0aW9uc0hhbmRsZXIodGhpcy5zdGVwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgYWN0aW9uQ291bnQgaWYgbm90IHByZXNlbnRcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmFjdGlvbkNvdW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25zID0gKGluc3RhbmNlIGFzIGFueSkuYWN0aW9ucyB8fCBbXTtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5hY3Rpb25Db3VudCA9IGFjdGlvbnMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNldCBzZWxlY3RlZFRhYklucHV0IGlmIG5vdCBwcmVzZW50XG4gICAgICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRUYWJJbnB1dCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkVGFiSW5wdXQgPSAnYWN0aW9uLXRyYWNlJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXaXJlIHVwIGNvbW1vbiBldmVudCBlbWl0dGVycyBmb3IgYXBpLCBhaS1hZ2VudCwgbG9vcCwgY29uZGl0aW9uLCBhbmQgYmFzaWMgc3RlcHNcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2FwaScgfHwgdGhpcy5zdGVwLnR5cGUgPT09ICdhaS1hZ2VudCcgfHwgdGhpcy5zdGVwLnR5cGUgPT09ICdsb29wJyB8fCB0aGlzLnN0ZXAudHlwZSA9PT0gJ2NvbmRpdGlvbicgfHwgdGhpcy5zdGVwLnR5cGUgPT09ICdiYXNpYycpIHtcbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGNvbW1vbiBvdXRwdXQgZXZlbnRzIGFuZCBjYWxsIGhhbmRsZXJzXG4gICAgICAgIC8vIEV2ZW50RW1pdHRlcnMgYXJlIFN1YmplY3RzLCBzbyB3ZSBjYW4gc3Vic2NyaWJlIHRvIHRoZW1cbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLm1ha2VDdXJyZW50QmFzZWxpbmUgJiYgdGhpcy5vbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkubWFrZUN1cnJlbnRCYXNlbGluZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlcj8uKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkudXBsb2FkQmFzZWxpbmUgJiYgdGhpcy5vblVwbG9hZEJhc2VsaW5lSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnVwbG9hZEJhc2VsaW5lLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblVwbG9hZEJhc2VsaW5lSGFuZGxlcj8uKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuYW5hbHl6ZSAmJiB0aGlzLm9uQW5hbHl6ZUhhbmRsZXIpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5hbmFseXplLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQW5hbHl6ZUhhbmRsZXI/LigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS52aWV3RnVsbExvZ3MgJiYgdGhpcy5vblZpZXdGdWxsTG9nc0hhbmRsZXIpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS52aWV3RnVsbExvZ3Muc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25WaWV3RnVsbExvZ3NIYW5kbGVyPy4oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuc2VsZkhlYWxBY3Rpb24gJiYgdGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGZIZWFsQWN0aW9uLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcj8uKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBvbkpzb25QYXRoQ29waWVkSGFuZGxlciBpcyBzZXQgYXMgaW5wdXQgcHJvcGVydHkgKGxpbmUgODI1KSwgc28gd2UgZG9uJ3QgbmVlZCB0byBzdWJzY3JpYmUgdG8ganNvblBhdGhDb3BpZWQgZXZlbnRcbiAgICAgICAgLy8gVGhlIEFQSSBzdGVwIGNvbXBvbmVudCBjYWxscyB0aGUgaGFuZGxlciBkaXJlY3RseSwgYXZvaWRpbmcgZHVwbGljYXRlIGNhbGxzXG4gICAgICB9XG5cbiAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGxvb3Atc3RlcDogd2lyZSB1cCBvblZpZXdBbGxJdGVyYXRpb25zIGV2ZW50XG4gICAgICBpZiAodGhpcy5zdGVwLnR5cGUgPT09ICdsb29wJykge1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkub25WaWV3QWxsSXRlcmF0aW9ucyAmJiB0aGlzLm9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkub25WaWV3QWxsSXRlcmF0aW9ucy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcj8uKHRoaXMuc3RlcCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgY29uZGl0aW9uLXN0ZXA6IHdpcmUgdXAgb25FeHBhbmQgZXZlbnRcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2NvbmRpdGlvbicpIHtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLm9uRXhwYW5kICYmIHRoaXMub25FeHBhbmRIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkub25FeHBhbmQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIENhbGwgb25FeHBhbmRIYW5kbGVyIHdpdGggdGhlIHN0ZXAgY29uZmlnXG4gICAgICAgICAgICB0aGlzLm9uRXhwYW5kSGFuZGxlcj8uKHRoaXMuc3RlcCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2lyZSB1cCBvbkJyYW5jaENsaWNrRXZlbnQgZm9yIG5lc3RlZCBjb25kaXRpb24gc3RlcHNcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLm9uQnJhbmNoQ2xpY2tFdmVudCAmJiB0aGlzLm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkub25CcmFuY2hDbGlja0V2ZW50LnN1YnNjcmliZSgoYnJhbmNoOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db25kaXRpb25CcmFuY2hDbGlja0hhbmRsZXI/Lih0aGlzLnN0ZXAsIGJyYW5jaCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGV4cGFuZGVkIHByb3BlcnR5IGlzIHBhc3NlZCBjb3JyZWN0bHlcbiAgICAgIC8vIFVzZSBpc1N0ZXBFeHBhbmRlZEhhbmRsZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIHN0ZXAuZXhwYW5kZWQgb3Igc3RlcC5jb25maWcuZXhwYW5kZWRcbiAgICAgIGlmICh0aGlzLmlzU3RlcEV4cGFuZGVkSGFuZGxlciAmJiB0aGlzLnN0ZXApIHtcbiAgICAgICAgY29uc3QgZXhwYW5kZWRTdGF0ZSA9IHRoaXMuaXNTdGVwRXhwYW5kZWRIYW5kbGVyKHRoaXMuc3RlcCk7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmV4cGFuZGVkID0gZXhwYW5kZWRTdGF0ZTtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5leHBhbmRlZCA9IGV4cGFuZGVkU3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZXhwYW5kZWQgPSAodGhpcy5zdGVwIGFzIGFueSkuZXhwYW5kZWQ7XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZXhwYW5kZWQgPSAodGhpcy5zdGVwIGFzIGFueSkuZXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUGFzcyBoYW5kbGVyIGZ1bmN0aW9ucyB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICBpZiAodGhpcy5vbkV4cGFuZEhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uRXhwYW5kSGFuZGxlciA9IHRoaXMub25FeHBhbmRIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXIgPSB0aGlzLmdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5pc1N0ZXBMb2FkaW5nSGFuZGxlciA9IHRoaXMuaXNTdGVwTG9hZGluZ0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5pc1N0ZXBFeHBhbmRlZEhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLmlzU3RlcEV4cGFuZGVkSGFuZGxlciA9IHRoaXMuaXNTdGVwRXhwYW5kZWRIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuY29udmVydE1zVG9TZWNvbmRzSGFuZGxlciA9IHRoaXMuY29udmVydE1zVG9TZWNvbmRzSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyID0gdGhpcy5mb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5nZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIgPSB0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5nZXRMb29wSXRlcmF0aW9uc0hhbmRsZXIgPSB0aGlzLmdldExvb3BJdGVyYXRpb25zSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmdldEFwaUFzc2VydGlvbnNIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5nZXRBcGlBc3NlcnRpb25zSGFuZGxlciA9IHRoaXMuZ2V0QXBpQXNzZXJ0aW9uc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5mb3JtYXRBY3Rpb25zSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuZm9ybWF0QWN0aW9uc0hhbmRsZXIgPSB0aGlzLmZvcm1hdEFjdGlvbnNIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25WaWV3QWxsSXRlcmF0aW9uc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyID0gdGhpcy5vblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXIgPSB0aGlzLm9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vblVwbG9hZEJhc2VsaW5lSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25VcGxvYWRCYXNlbGluZUhhbmRsZXIgPSB0aGlzLm9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25BbmFseXplSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25BbmFseXplSGFuZGxlciA9IHRoaXMub25BbmFseXplSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uVmlld0Z1bGxMb2dzSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25WaWV3RnVsbExvZ3NIYW5kbGVyID0gdGhpcy5vblZpZXdGdWxsTG9nc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25TZWxmSGVhbEFjdGlvbkhhbmRsZXIgPSB0aGlzLm9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25Db25kaXRpb25CcmFuY2hDbGlja0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyID0gdGhpcy5vbkNvbmRpdGlvbkJyYW5jaENsaWNrSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uU3RlcENsaWNrSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25TdGVwQ2xpY2tIYW5kbGVyID0gdGhpcy5vblN0ZXBDbGlja0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vbkpzb25QYXRoQ29waWVkSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25Kc29uUGF0aENvcGllZEhhbmRsZXIgPSB0aGlzLm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25Eb3dubG9hZEhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uRG93bmxvYWRIYW5kbGVyID0gdGhpcy5vbkRvd25sb2FkSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uRmlsZVBhdGhDb3BpZWRIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vbkZpbGVQYXRoQ29waWVkSGFuZGxlciA9IHRoaXMub25GaWxlUGF0aENvcGllZEhhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vblRleHRDb3BpZWRIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vblRleHRDb3BpZWRIYW5kbGVyID0gdGhpcy5vblRleHRDb3BpZWRIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuaXNVcGxvYWRpbmdCYXNlbGluZSAhPT0gdW5kZWZpbmVkKSAoaW5zdGFuY2UgYXMgYW55KS5pc1VwbG9hZGluZ0Jhc2VsaW5lID0gdGhpcy5pc1VwbG9hZGluZ0Jhc2VsaW5lO1xuICAgICAgaWYgKHRoaXMuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUgIT09IHVuZGVmaW5lZCkgKGluc3RhbmNlIGFzIGFueSkuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUgPSB0aGlzLmlzTWFraW5nQ3VycmVudEJhc2VsaW5lO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCAhPT0gdW5kZWZpbmVkKSAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbklkID0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgaWYgKHRoaXMuaXNMaXZlICE9PSB1bmRlZmluZWQpIChpbnN0YW5jZSBhcyBhbnkpLmlzTGl2ZSA9IHRoaXMuaXNMaXZlO1xuICAgICAgLy8gUGFzcyBzdGVwTnVtYmVyIGlucHV0IGlmIHByb3ZpZGVkLCBvdGhlcndpc2UgdXNlIHN0ZXAncyBzdGVwTnVtYmVyXG4gICAgICBpZiAodGhpcy5zdGVwTnVtYmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc3RlcE51bWJlciA9IHRoaXMuc3RlcE51bWJlcjtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5zdGVwTnVtYmVyID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBQYXNzIHRoZSBzdGVwIG9iamVjdCBzbyB0b2dnbGVIZWFkZXIgY2FuIHVzZSBpdFxuICAgICAgaWYgKHRoaXMuc3RlcCkgKGluc3RhbmNlIGFzIGFueSkuc3RlcCA9IHRoaXMuc3RlcDtcblxuICAgICAgLy8gVXBkYXRlIGNvbmRpdGlvbi1zdGVwIHNwZWNpZmljIHByb3BlcnRpZXMgZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2NvbmRpdGlvbicpIHtcbiAgICAgICAgLy8gVXBkYXRlIGFjdGl2ZUJyYW5jaFN0ZXBJZCBpZiBpdCBjaGFuZ2VkXG4gICAgICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkuYWN0aXZlQnJhbmNoU3RlcElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQgPSAodGhpcy5zdGVwIGFzIGFueSkuYWN0aXZlQnJhbmNoU3RlcElkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGJyYW5jaGVzIGlmIHRoZXkgY2hhbmdlZFxuICAgICAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcztcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuYnJhbmNoZXMgPSAodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIG5lc3RlZFN0ZXBzIGlmIHRoZXkgY2hhbmdlZFxuICAgICAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcztcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcubmVzdGVkU3RlcHMgPSAodGhpcy5zdGVwIGFzIGFueSkubmVzdGVkU3RlcHM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgLy8gQWxzbyBzZXQgY29uZmlnIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggY29tcG9uZW50cyB0aGF0IHN0aWxsIHVzZSBjb25maWcgaW5wdXRcbiAgICAgIGlmICgnY29uZmlnJyBpbiBpbnN0YW5jZSkge1xuICAgICAgICBpZiAoZWZmZWN0aXZlVHlwZSA9PT0gJ2ZpbGUtZG93bmxvYWQnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnID0ge1xuICAgICAgICAgICAgLi4udGhpcy5zdGVwLFxuICAgICAgICAgICAgdHlwZTogJ2ZpbGUtZG93bmxvYWQnLFxuICAgICAgICAgICAgZmlsZU5hbWU6IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lLFxuICAgICAgICAgICAgZmlsZVR5cGU6IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlLFxuICAgICAgICAgICAgZmlsZVBhdGg6IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVQYXRoLFxuICAgICAgICAgICAgZG93bmxvYWRlZDogKGluc3RhbmNlIGFzIGFueSkuZG93bmxvYWRlZFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnID0gdGhpcy5zdGVwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIGtleSBmb3IgY2hhbmdlIGRldGVjdGlvblxuICAgICAgdGhpcy5wcmV2aW91c1N0ZXBLZXkgPSB0aGlzLmdldFN0ZXBLZXkodGhpcy5zdGVwKTtcblxuICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIHRoZSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICAgIGlmIChjb21wb25lbnRSZWYuaW5qZWN0b3IpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2VDZHIgPSBjb21wb25lbnRSZWYuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKTtcbiAgICAgICAgaWYgKGluc3RhbmNlQ2RyKSB7XG4gICAgICAgICAgaW5zdGFuY2VDZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW1pdCByZWFkeSBldmVudCBhZnRlciBjb21wb25lbnQgaXMgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWRcbiAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSB0aGUgY29tcG9uZW50IGlzIGZ1bGx5IHJlbmRlcmVkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWFkeS5lbWl0KCk7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgLy8gVXNlIG5nRG9DaGVjayB0byBkZXRlY3QgY2hhbmdlcyBpbiBuZXN0ZWQgcHJvcGVydGllcyB0aGF0IG5nT25DaGFuZ2VzIG1pZ2h0IG1pc3NcbiAgICBjb25zdCBpbnN0YW5jZSA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuZ2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5nZXQodGhpcy5jb250YWluZXIpO1xuXG4gICAgaWYgKGluc3RhbmNlICYmIGNvbXBvbmVudFJlZiAmJiB0aGlzLnN0ZXApIHtcbiAgICAgIC8vIENoZWNrIGlmIGl0ZXJhdGlvbnMgYXJlIG5vdyBhdmFpbGFibGUgYW5kIHdlIG5lZWQgdG8gdXBkYXRlIHNlbGVjdGVkSXRlcmF0aW9uXG4gICAgICBpZiAodGhpcy5zdGVwLnR5cGUgPT09ICdsb29wJyAmJiB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQpIHtcbiAgICAgICAgY29uc3QgaXRlcmF0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLml0ZXJhdGlvbnMgfHwgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnPy5pdGVyYXRpb25zIHx8IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZXJhdGlvbklkID0gKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZCB8fCB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZEl0ZXJhdGlvbiA9IChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uO1xuXG4gICAgICAgIC8vIElmIGl0ZXJhdGlvbnMgYXJlIGF2YWlsYWJsZSwgc2VsZWN0ZWRJdGVyYXRpb25JZCBpcyBzZXQsIGJ1dCBzZWxlY3RlZEl0ZXJhdGlvbiBpcyBub3Qgc2V0IG9yIGRvZXNuJ3QgbWF0Y2hcbiAgICAgICAgaWYgKGl0ZXJhdGlvbnMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgICAgY29uc3Qgc2hvdWxkQmVTZWxlY3RlZCA9IGl0ZXJhdGlvbnMuZmluZCgoaXRlcjogYW55KSA9PiBpdGVyLmlkID09PSBzZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgICAgICBpZiAoc2hvdWxkQmVTZWxlY3RlZCAmJiBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb24/LmlkICE9PSBzZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvb3BTdGVwU2VsZWN0ZWRJdGVyYXRpb24oaW5zdGFuY2UsIHNlbGVjdGVkSXRlcmF0aW9uSWQpO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbmplY3Rvcikge1xuICAgICAgICAgICAgICBjb25zdCBpbnN0YW5jZUNkciA9IGNvbXBvbmVudFJlZi5pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYsIG51bGwpO1xuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VDZHIpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudEtleSA9IHRoaXMuZ2V0U3RlcEtleSh0aGlzLnN0ZXApO1xuXG4gICAgICAvLyBJZiBzdGVwIHByb3BlcnRpZXMgY2hhbmdlZCAoZXZlbiBpZiByZWZlcmVuY2UgZGlkbid0KSwgdXBkYXRlIHRoZSBpbnN0YW5jZVxuICAgICAgaWYgKGN1cnJlbnRLZXkgIT09IHRoaXMucHJldmlvdXNTdGVwS2V5KSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdGhlIHByZXZpb3VzIHN0ZXAgdG8gY29tcGFyZSwgc28gd2UnbGwgdXBkYXRlIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgLy8gQ3JlYXRlIGEgbWluaW1hbCBwcmV2aW91cyBzdGVwIGZyb20gdGhlIGluc3RhbmNlJ3MgY3VycmVudCBzdGF0ZVxuICAgICAgICBjb25zdCBwcmV2aW91c1N0ZXA6IGFueSA9IHtcbiAgICAgICAgICBpZDogKGluc3RhbmNlIGFzIGFueSkuaWQsXG4gICAgICAgICAgdHlwZTogKGluc3RhbmNlIGFzIGFueSkudHlwZSxcbiAgICAgICAgICBzdGF0dXM6IChpbnN0YW5jZSBhcyBhbnkpLnN0YXR1cyxcbiAgICAgICAgICBkdXJhdGlvbjogKGluc3RhbmNlIGFzIGFueSkuZHVyYXRpb24sXG4gICAgICAgICAgZXhwYW5kZWQ6IChpbnN0YW5jZSBhcyBhbnkpLmV4cGFuZGVkLFxuICAgICAgICAgIGNoaWxkcmVuOiAoaW5zdGFuY2UgYXMgYW55KS5jaGlsZHJlbixcbiAgICAgICAgICBuZXN0ZWRTdGVwczogKGluc3RhbmNlIGFzIGFueSkubmVzdGVkU3RlcHMsXG4gICAgICAgICAgc3RlcHM6IChpbnN0YW5jZSBhcyBhbnkpLnN0ZXBzLFxuICAgICAgICAgIGV4ZWN1dGlvbkRhdGE6IChpbnN0YW5jZSBhcyBhbnkpLmV4ZWN1dGlvbkRhdGEsXG4gICAgICAgICAgYWN0aW9uOiAoaW5zdGFuY2UgYXMgYW55KS5hY3Rpb24sXG4gICAgICAgICAgdGl0bGU6IChpbnN0YW5jZSBhcyBhbnkpLnRpdGxlLFxuICAgICAgICAgIHJlc3VsdDogKGluc3RhbmNlIGFzIGFueSkucmVzdWx0LFxuICAgICAgICAgIG1ldGhvZDogKGluc3RhbmNlIGFzIGFueSkubWV0aG9kLFxuICAgICAgICAgIGVuZHBvaW50OiAoaW5zdGFuY2UgYXMgYW55KS5lbmRwb2ludCxcbiAgICAgICAgICBzdGF0dXNDb2RlOiAoaW5zdGFuY2UgYXMgYW55KS5zdGF0dXNDb2RlLFxuICAgICAgICAgIHJlc3BvbnNlVGltZTogKGluc3RhbmNlIGFzIGFueSkucmVzcG9uc2VUaW1lLFxuICAgICAgICAgIGFjdGlvbnM6IChpbnN0YW5jZSBhcyBhbnkpLmFjdGlvbnMsXG4gICAgICAgICAgcHJvbXB0OiAoaW5zdGFuY2UgYXMgYW55KS5wcm9tcHQsXG4gICAgICAgICAgb3B0aW1pemVkUnVuOiAoaW5zdGFuY2UgYXMgYW55KS5vcHRpbWl6ZWRSdW4sXG4gICAgICAgICAgYWN0aW9uQ291bnQ6IChpbnN0YW5jZSBhcyBhbnkpLmFjdGlvbkNvdW50LFxuICAgICAgICAgIGl0ZXJhdGlvbnM6IChpbnN0YW5jZSBhcyBhbnkpLml0ZXJhdGlvbnMsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVyYXRpb25JZDogKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZCxcbiAgICAgICAgICBicmFuY2hlczogKGluc3RhbmNlIGFzIGFueSkuYnJhbmNoZXMsXG4gICAgICAgICAgc3RlcE51bWJlcjogKGluc3RhbmNlIGFzIGFueSkuc3RlcE51bWJlcixcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudEluc3RhbmNlKHRoaXMuc3RlcCwgcHJldmlvdXNTdGVwKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1N0ZXBLZXkgPSBjdXJyZW50S2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxufSJdfQ==
|
|
1263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2V4ZWN1dGlvbi1zY3JlZW4vc3RlcC1yZW5kZXJlci9zdGVwLXJlbmRlcmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBMEQsTUFBTSxFQUFFLGlCQUFpQixFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVyTSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFNUQ7Ozs7R0FJRztBQUtILE1BQU0sT0FBTyxxQkFBcUI7SUFrRGhDLFlBQ3NDLFlBQW9DLEVBQ2hFLEdBQXNCO1FBRE0saUJBQVksR0FBWixZQUFZLENBQXdCO1FBQ2hFLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEJ2QixzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1FBRXhDLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFdkIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDLENBQUMsMENBQTBDO1FBY3ZGLGVBQVUsR0FBMkIsSUFBSSxDQUFDO1FBQzFDLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUNuQyxvQkFBZSxHQUFXLEVBQUUsQ0FBQztJQUtqQyxDQUFDO0lBbkJMLHFHQUFxRztJQUM3RixvQkFBb0IsQ0FBQyxJQUE0QztRQUN2RSxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxHQUFJLElBQVksQ0FBQyxZQUFZLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssa0JBQWtCO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDckQsT0FBUSxJQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBZUQsV0FBVyxDQUFD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ZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVHlwZSwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjaywgSW5qZWN0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFeGVjdXRpb25TdGVwQ29uZmlnIH0gZnJvbSAnLi4vZXhlY3V0aW9uLXN0ZXAubW9kZWxzJztcbmltcG9ydCB7IFNURVBfQ09NUE9ORU5UX01BUCB9IGZyb20gJy4uL3N0ZXAtcmVnaXN0cnkudG9rZW4nO1xuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIGFwcHJvcHJpYXRlIHN0ZXAgY29tcG9uZW50IGJhc2VkIG9uIHRoZSBzdGVwIHR5cGUuXG4gKiBVc2VzIGR5bmFtaWMgY29tcG9uZW50IGxvYWRpbmcgYW5kIGFuIGluamVjdGlvbiB0b2tlbiB0byBicmVhayBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAqIGJldHdlZW4gc3RlcCBjb21wb25lbnRzIGluIEFuZ3VsYXIgSXZ5IHBhcnRpYWwgY29tcGlsYXRpb24gbW9kZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZTogJzxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj4nXG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG4gIEBJbnB1dCgpIHN0ZXAhOiBFeGVjdXRpb25TdGVwQ29uZmlnO1xuICBASW5wdXQoKSBvbkV4cGFuZEhhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgQElucHV0KCkgZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueTtcbiAgQElucHV0KCkgaXNTdGVwTG9hZGluZ0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgaXNTdGVwRXhwYW5kZWRIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXI/OiAoZHVyYXRpb246IG51bWJlcikgPT4gbnVtYmVyO1xuICBASW5wdXQoKSBmb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55O1xuICBASW5wdXQoKSBnZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnk7XG4gIEBJbnB1dCgpIG9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25VcGxvYWRCYXNlbGluZUhhbmRsZXI/OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25BbmFseXplSGFuZGxlcj86ICgpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uVmlld0Z1bGxMb2dzSGFuZGxlcj86ICgpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyPzogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXI/OiAoKSA9PiB7IGlzTG9hZGluZ0FjY2VwdDogYm9vbGVhbjsgaXNMb2FkaW5nTW9kaWZ5QWNjZXB0OiBib29sZWFuIH07XG4gIEBJbnB1dCgpIGlzVXBsb2FkaW5nQmFzZWxpbmU/OiBhbnk7XG4gIEBJbnB1dCgpIGlzTWFraW5nQ3VycmVudEJhc2VsaW5lPzogYW55O1xuICBASW5wdXQoKSBzZWxlY3RlZEl0ZXJhdGlvbklkPzogYW55O1xuICBASW5wdXQoKSBnZXRMb29wSXRlcmF0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gYW55W107XG4gIEBJbnB1dCgpIGdldEFwaUFzc2VydGlvbnNIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcpID0+IGFueVtdO1xuICBASW5wdXQoKSBmb3JtYXRBY3Rpb25zSGFuZGxlcj86IChzdGVwOiBFeGVjdXRpb25TdGVwQ29uZmlnKSA9PiBhbnlbXTtcbiAgQElucHV0KCkgb25WaWV3QWxsSXRlcmF0aW9uc0hhbmRsZXI/OiAoc3RlcDogRXhlY3V0aW9uU3RlcENvbmZpZykgPT4gdm9pZDtcbiAgQElucHV0KCkgb25Db25kaXRpb25CcmFuY2hDbGlja0hhbmRsZXI/OiAoc3RlcDogYW55LCBicmFuY2g6IGFueSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25TdGVwQ2xpY2tIYW5kbGVyPzogKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcsIGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHBhdGg6IHN0cmluZzsgc291cmNlOiAncmVxdWVzdEJvZHknIHwgJ3Jlc3BvbnNlQm9keScgfCAncmVxdWVzdEhlYWRlcnMnIHwgJ3Jlc3BvbnNlSGVhZGVycycgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25Eb3dubG9hZEhhbmRsZXI/OiAoZXZlbnQ6IHsgZmlsZU5hbWU6IHN0cmluZzsgZmlsZVBhdGg/OiBzdHJpbmc7IGZpbGVUeXBlOiBzdHJpbmc7IHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBvbkZpbGVQYXRoQ29waWVkSGFuZGxlcj86IChldmVudDogeyBmaWxlUGF0aDogc3RyaW5nOyB0ZXN0U3RlcFJlc3VsdElkOiBzdHJpbmcgfSkgPT4gdm9pZDtcbiAgQElucHV0KCkgb25UZXh0Q29waWVkSGFuZGxlcj86IChldmVudDogeyB0ZXh0OiBzdHJpbmc7IHRlc3RTdGVwUmVzdWx0SWQ6IHN0cmluZyB9KSA9PiB2b2lkO1xuICBASW5wdXQoKSBkb3dubG9hZGluZ1N0ZXBJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBjb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBASW5wdXQoKSBpc0xpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3RlcE51bWJlcj86IHN0cmluZztcbiAgQE91dHB1dCgpIGNvbXBvbmVudFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpOyAvLyBFbWl0IHdoZW4gY29tcG9uZW50IGlzIGxvYWRlZCBhbmQgcmVhZHlcblxuICAvKiogRWZmZWN0aXZlIHR5cGUgZm9yIGNvbXBvbmVudCBsb29rdXA6ICdmaWxlLWRvd25sb2FkJyB3aGVuIHRlc3RTdGVwVHlwZSA9PT0gJ2dlbmVyYXRlRG9jdW1lbnQnLiAqL1xuICBwcml2YXRlIGdldEVmZmVjdGl2ZVN0ZXBUeXBlKHN0ZXA6IEV4ZWN1dGlvblN0ZXBDb25maWcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIXN0ZXApIHJldHVybiAnJztcbiAgICBjb25zdCB0ID0gKHN0ZXAgYXMgYW55KS50ZXN0U3RlcFR5cGU7XG4gICAgaWYgKHQgPT09ICdnZW5lcmF0ZURvY3VtZW50JykgcmV0dXJuICdmaWxlLWRvd25sb2FkJztcbiAgICByZXR1cm4gKHN0ZXAgYXMgYW55KS50eXBlIHx8ICcnO1xuICB9XG5cbiAgLy8gVXNlIFdlYWtNYXAgdG8gdHJhY2sgY29tcG9uZW50IGluc3RhbmNlcyB3aXRob3V0IHN0b3JpbmcgdGhlbSBhcyBjbGFzcyBwcm9wZXJ0aWVzXG4gIHByaXZhdGUgc3RhdGljIGNvbXBvbmVudEluc3RhbmNlcyA9IG5ldyBXZWFrTWFwPFZpZXdDb250YWluZXJSZWYsIGFueT4oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgY29tcG9uZW50UmVmcyA9IG5ldyBXZWFrTWFwPFZpZXdDb250YWluZXJSZWYsIENvbXBvbmVudFJlZjxhbnk+PigpO1xuICBwcml2YXRlIHN0YXRpYyBzdWJzY3JpYmVkRXZlbnRFbWl0dGVycyA9IG5ldyBXZWFrTWFwPGFueSwgU2V0PHN0cmluZz4+KCk7IC8vIFRyYWNrIHdoaWNoIEV2ZW50RW1pdHRlcnMgaGF2ZSBiZWVuIHN1YnNjcmliZWQgdG9cbiAgcHJpdmF0ZSBsYXN0U3RlcElkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0U3RlcFR5cGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHByZXZpb3VzU3RlcEtleTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChTVEVQX0NPTVBPTkVOVF9NQVApIHByaXZhdGUgY29tcG9uZW50TWFwOiBNYXA8c3RyaW5nLCBUeXBlPGFueT4+LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyIHx8ICF0aGlzLnN0ZXApIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gY2hhbmdlc1snc3RlcCddPy5jdXJyZW50VmFsdWUgfHwgdGhpcy5zdGVwO1xuICAgIGNvbnN0IHByZXZpb3VzU3RlcCA9IGNoYW5nZXNbJ3N0ZXAnXT8ucHJldmlvdXNWYWx1ZTtcblxuICAgIC8vIENoZWNrIGlmIHNlbGVjdGVkSXRlcmF0aW9uSWQgaW5wdXQgY2hhbmdlZCAoZm9yIGxvb3Agc3RlcHMpXG4gICAgLy8gJiYgXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RlcC50eXBlID09PSAnbG9vcCcgJiYgXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5sZW5ndGggPiAwO1xuXG4gICAgLy8gSWYgc2VsZWN0ZWRJdGVyYXRpb25JZCBjaGFuZ2VkIGZvciBhIGxvb3Agc3RlcCwgdXBkYXRlIGl0IGRpcmVjdGx5XG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXSAmJiBjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5nZXQodGhpcy5jb250YWluZXIpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgY29tcG9uZW50UmVmKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBjaGFuZ2VzWydzZWxlY3RlZEl0ZXJhdGlvbklkJ10ucHJldmlvdXNWYWx1ZTtcblxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHNlbGVjdGVkSXRlcmF0aW9uSWQgd2hlbiBpbnB1dCBjaGFuZ2VzIGZyb20gcGFyZW50XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbklkID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5zZWxlY3RlZEl0ZXJhdGlvbklkID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRyeSB0byB1cGRhdGUgc2VsZWN0ZWRJdGVyYXRpb24gaWYgaXRlcmF0aW9ucyBhcmUgYXZhaWxhYmxlXG4gICAgICAgICAgdGhpcy51cGRhdGVMb29wU3RlcFNlbGVjdGVkSXRlcmF0aW9uKGluc3RhbmNlLCBjdXJyZW50VmFsdWUpO1xuXG4gICAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIHRoZSBsb29wLXN0ZXAgY29tcG9uZW50XG4gICAgICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbmplY3Rvcikge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VDZHIgPSBjb21wb25lbnRSZWYuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZUNkcikge1xuICAgICAgICAgICAgICBpbnN0YW5jZUNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgaW5zdGFuY2VDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHN0ZXBOdW1iZXIgaW5wdXQgY2hhbmdlZCwgdXBkYXRlIG5lc3RlZCBjb21wb25lbnQgaW5zdGFuY2VzXG4gICAgaWYgKGNoYW5nZXNbJ3N0ZXBOdW1iZXInXSAmJiBjaGFuZ2VzWydzdGVwTnVtYmVyJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydzdGVwTnVtYmVyJ10ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5nZXQodGhpcy5jb250YWluZXIpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgY29tcG9uZW50UmVmKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNoYW5nZXNbJ3N0ZXBOdW1iZXInXS5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBjaGFuZ2VzWydzdGVwTnVtYmVyJ10ucHJldmlvdXNWYWx1ZTtcblxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHN0ZXBOdW1iZXIgd2hlbiBpbnB1dCBjaGFuZ2VzIGZyb20gcGFyZW50XG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zdGVwTnVtYmVyID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5zdGVwTnVtYmVyID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbmplY3Rvcikge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VDZHIgPSBjb21wb25lbnRSZWYuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZUNkcikge1xuICAgICAgICAgICAgICBpbnN0YW5jZUNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgaW5zdGFuY2VDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGlzVXBsb2FkaW5nQmFzZWxpbmUgb3IgaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUgY2hhbmdlZCwgdXBkYXRlIG5lc3RlZCBjb21wb25lbnQgaW5zdGFuY2VzXG4gICAgaWYgKGNoYW5nZXNbJ2lzVXBsb2FkaW5nQmFzZWxpbmUnXSB8fCBjaGFuZ2VzWydpc01ha2luZ0N1cnJlbnRCYXNlbGluZSddKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuZ2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRSZWZzLmdldCh0aGlzLmNvbnRhaW5lcik7XG5cbiAgICAgIGlmIChpbnN0YW5jZSAmJiBjb21wb25lbnRSZWYpIHtcbiAgICAgICAgLy8gVXBkYXRlIGlzVXBsb2FkaW5nQmFzZWxpbmUgaWYgaXQgY2hhbmdlZFxuICAgICAgICBpZiAoY2hhbmdlc1snaXNVcGxvYWRpbmdCYXNlbGluZSddKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNVcGxvYWRpbmdCYXNlbGluZSA9IHRoaXMuaXNVcGxvYWRpbmdCYXNlbGluZTtcbiAgICAgICAgICAvLyBBbHNvIHVwZGF0ZSBpbiBjb25maWcgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmlzVXBsb2FkaW5nQmFzZWxpbmUgPSB0aGlzLmlzVXBsb2FkaW5nQmFzZWxpbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGlzTWFraW5nQ3VycmVudEJhc2VsaW5lIGlmIGl0IGNoYW5nZWRcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2lzTWFraW5nQ3VycmVudEJhc2VsaW5lJ10pIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc01ha2luZ0N1cnJlbnRCYXNlbGluZSA9IHRoaXMuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmU7XG4gICAgICAgICAgLy8gQWxzbyB1cGRhdGUgaW4gY29uZmlnIGlmIGl0IGV4aXN0c1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5pc01ha2luZ0N1cnJlbnRCYXNlbGluZSA9IHRoaXMuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIG9uIHRoZSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICAgICAgaWYgKGNvbXBvbmVudFJlZi5pbmplY3Rvcikge1xuICAgICAgICAgIGNvbnN0IGluc3RhbmNlQ2RyID0gY29tcG9uZW50UmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZiwgbnVsbCk7XG4gICAgICAgICAgaWYgKGluc3RhbmNlQ2RyKSB7XG4gICAgICAgICAgICBpbnN0YW5jZUNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIGluc3RhbmNlQ2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBkb3dubG9hZGluZ1N0ZXBJZCBjaGFuZ2VkLCB1cGRhdGUgZmlsZS1kb3dubG9hZCBpbnN0YW5jZSBpc0Rvd25sb2FkaW5nXG4gICAgaWYgKGNoYW5nZXNbJ2Rvd25sb2FkaW5nU3RlcElkJ10pIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudEluc3RhbmNlcy5nZXQodGhpcy5jb250YWluZXIpO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuZ2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgIGlmIChpbnN0YW5jZSAmJiBjb21wb25lbnRSZWYgJiYgdGhpcy5nZXRFZmZlY3RpdmVTdGVwVHlwZShjdXJyZW50U3RlcCkgPT09ICdmaWxlLWRvd25sb2FkJykge1xuICAgICAgICBjb25zdCB0aWQgPSAoY3VycmVudFN0ZXAgYXMgYW55KS50ZXN0U3RlcFJlc3VsdElkO1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0Rvd25sb2FkaW5nID0gISF0aWQgJiYgdGhpcy5kb3dubG9hZGluZ1N0ZXBJZCA9PT0gdGlkO1xuICAgICAgICBpZiAoY29tcG9uZW50UmVmLmluamVjdG9yKSB7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2VDZHIgPSBjb21wb25lbnRSZWYuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKTtcbiAgICAgICAgICBpZiAoaW5zdGFuY2VDZHIpIHtcbiAgICAgICAgICAgIGluc3RhbmNlQ2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgaW5zdGFuY2VDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCBzdGVwIGlkZW50aWZpZXJzICh1c2UgZWZmZWN0aXZlIHR5cGU6IGdlbmVyYXRlRG9jdW1lbnQgLT4gZmlsZS1kb3dubG9hZClcbiAgICBjb25zdCBjdXJyZW50U3RlcElkID0gY3VycmVudFN0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBjdXJyZW50U3RlcC5pZDtcbiAgICBjb25zdCBjdXJyZW50U3RlcFR5cGUgPSB0aGlzLmdldEVmZmVjdGl2ZVN0ZXBUeXBlKGN1cnJlbnRTdGVwKSB8fCAoY3VycmVudFN0ZXAgYXMgYW55KS50eXBlO1xuXG4gICAgLy8gVXNlIHN0b3JlZCBsYXN0U3RlcElkIGFuZCBsYXN0U3RlcFR5cGUgdG8gcHJvcGVybHkgZGV0ZWN0IGNoYW5nZXNcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBzdGVwIG9iamVjdCByZWZlcmVuY2UgZG9lc24ndCBjaGFuZ2UgYnV0IHByb3BlcnRpZXMgZG9cbiAgICAvLyBPbmx5IGNoZWNrIGZvciBhY3R1YWwgSUQvdHlwZSBjaGFuZ2VzLCBub3QganVzdCByZWZlcmVuY2UgY2hhbmdlc1xuICAgIC8vIGNvbnN0IHN0ZXBUeXBlQ2hhbmdlZCA9ICFwcmV2aW91c1N0ZXAgfHwgY3VycmVudFN0ZXBUeXBlICE9PSAocHJldmlvdXNTdGVwLnR5cGUgfHwgdGhpcy5sYXN0U3RlcFR5cGUpO1xuICAgIC8vIGNvbnN0IHN0ZXBJZENoYW5nZWQgPSAhcHJldmlvdXNTdGVwIHx8IGN1cnJlbnRTdGVwSWQgIT09IChwcmV2aW91c1N0ZXAudGVzdFN0ZXBSZXN1bHRJZCB8fCBwcmV2aW91c1N0ZXAuaWQgfHwgdGhpcy5sYXN0U3RlcElkKTtcbiAgICBjb25zdCBzdGVwVHlwZUNoYW5nZWQgPSBjdXJyZW50U3RlcFR5cGUgIT09IHRoaXMubGFzdFN0ZXBUeXBlO1xuICAgIGNvbnN0IHN0ZXBJZENoYW5nZWQgPSBjdXJyZW50U3RlcElkICE9PSB0aGlzLmxhc3RTdGVwSWQ7XG4gICAgXG4gICAgLy8gT25seSBsb2FkIGNvbXBvbmVudCBpZiBzdGVwIElEIG9yIHR5cGUgYWN0dWFsbHkgY2hhbmdlZFxuICAgIC8vIFRoaXMgcHJldmVudHMgdW5uZWNlc3NhcnkgcmVsb2FkcyB3aGVuIG9ubHkgbmVzdGVkIHByb3BlcnRpZXMgY2hhbmdlXG4gICAgaWYgKHN0ZXBUeXBlQ2hhbmdlZCB8fCBzdGVwSWRDaGFuZ2VkKSB7XG4gICAgICB0aGlzLmxhc3RTdGVwSWQgPSBjdXJyZW50U3RlcElkO1xuICAgICAgdGhpcy5sYXN0U3RlcFR5cGUgPSBjdXJyZW50U3RlcFR5cGU7XG4gICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5sb2FkQ29tcG9uZW50KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBuZXN0ZWQgZGF0YSBjaGFuZ2VkIChjaGlsZHJlbiwgbmVzdGVkU3RlcHMsIHN0ZXBzLCBleHBhbmRlZCksIFxuICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzIHdpdGhvdXQgcmVjcmVhdGluZyBjb21wb25lbnQgdG8gcHJldmVudCBibGlua2luZ1xuICAgIC8vIFRoaXMgcHJldmVudHMgcGFyZW50IHN0ZXBzIGZyb20gYmxpbmtpbmcgd2hlbiBuZXN0ZWQgc3RlcHMgZXhwYW5kXG4gICAgY29uc3Qgb25seU5lc3RlZERhdGFDaGFuZ2VkID0gcHJldmlvdXNTdGVwICYmIChcbiAgICAgIChjdXJyZW50U3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzICE9PSAocHJldmlvdXNTdGVwIGFzIGFueSkubmVzdGVkU3RlcHMgfHxcbiAgICAgIChjdXJyZW50U3RlcCBhcyBhbnkpLmNoaWxkcmVuICE9PSAocHJldmlvdXNTdGVwIGFzIGFueSkuY2hpbGRyZW4gfHxcbiAgICAgIChjdXJyZW50U3RlcCBhcyBhbnkpLnN0ZXBzICE9PSAocHJldmlvdXNTdGVwIGFzIGFueSkuc3RlcHMgfHxcbiAgICAgIChjdXJyZW50U3RlcCBhcyBhbnkpLmV4cGFuZGVkICE9PSAocHJldmlvdXNTdGVwIGFzIGFueSkuZXhwYW5kZWQgfHxcbiAgICAgIChjdXJyZW50U3RlcCBhcyBhbnkpLmFjdGl2ZUJyYW5jaFN0ZXBJZCAhPT0gKHByZXZpb3VzU3RlcCBhcyBhbnkpLmFjdGl2ZUJyYW5jaFN0ZXBJZCB8fFxuICAgICAgKGN1cnJlbnRTdGVwIGFzIGFueSkuYnJhbmNoZXMgIT09IChwcmV2aW91c1N0ZXAgYXMgYW55KS5icmFuY2hlcyB8fFxuICAgICAgKChjdXJyZW50U3RlcCBhcyBhbnkpLmNvbmZpZyAmJiAoY3VycmVudFN0ZXAgYXMgYW55KS5jb25maWcuZXhwYW5kZWQgIT09IChwcmV2aW91c1N0ZXAgYXMgYW55KS5jb25maWc/LmV4cGFuZGVkKVxuICAgICk7XG5cbiAgICAvLyBVcGRhdGUgcHJvcGVydGllcyB3aXRob3V0IHJlY3JlYXRpbmcgY29tcG9uZW50IHRvIHByZXZlbnQgYmxpbmtpbmdcbiAgICBpZiAob25seU5lc3RlZERhdGFDaGFuZ2VkICYmIHRoaXMuY29udGFpbmVyLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEdldCB0aGUgc3RvcmVkIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5nZXQodGhpcy5jb250YWluZXIpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgLy8gVXNlIGNvbXByZWhlbnNpdmUgdXBkYXRlIG1ldGhvZCBmcm9tIG9yaWdpbmFsXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50SW5zdGFuY2UoY3VycmVudFN0ZXAsIHByZXZpb3VzU3RlcCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG90aGVyIGNoYW5nZXMsIHVzZSBjb21wcmVoZW5zaXZlIHVwZGF0ZSBpZiBjb21wb25lbnQgZXhpc3RzXG4gICAgaWYgKHRoaXMuY29udGFpbmVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudEluc3RhbmNlcy5nZXQodGhpcy5jb250YWluZXIpO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuZ2V0KHRoaXMuY29udGFpbmVyKTtcblxuICAgICAgaWYgKGluc3RhbmNlICYmIHByZXZpb3VzU3RlcCAmJiBjdXJyZW50U3RlcCAmJlxuICAgICAgICBwcmV2aW91c1N0ZXAudHlwZSA9PT0gY3VycmVudFN0ZXAudHlwZSAmJlxuICAgICAgICAocHJldmlvdXNTdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgcHJldmlvdXNTdGVwLmlkKSA9PT0gKGN1cnJlbnRTdGVwLnRlc3RTdGVwUmVzdWx0SWQgfHwgY3VycmVudFN0ZXAuaWQpKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjb21wb25lbnQgaW5zdGFuY2Ugd2l0aCBuZXcgc3RlcCBwcm9wZXJ0aWVzXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50SW5zdGFuY2UoY3VycmVudFN0ZXAsIHByZXZpb3VzU3RlcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPbmx5IGxvYWQgY29tcG9uZW50IGlmIGNvbnRhaW5lciBpcyBlbXB0eSAoY29tcG9uZW50IGRvZXNuJ3QgZXhpc3QgeWV0KVxuICAgIC8vIFRoaXMgcHJldmVudHMgdW5uZWNlc3NhcnkgcmVsb2Fkc1xuICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiB0aGlzLmNvbnRhaW5lci5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubG9hZENvbXBvbmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRDb21wb25lbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29tcG9uZW50SW5zdGFuY2UoY3VycmVudFN0ZXA6IGFueSwgcHJldmlvdXNTdGVwOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5jb21wb25lbnRJbnN0YW5jZXMuZ2V0KHRoaXMuY29udGFpbmVyKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5nZXQodGhpcy5jb250YWluZXIpO1xuXG4gICAgaWYgKCFpbnN0YW5jZSB8fCAhY29tcG9uZW50UmVmIHx8ICF0aGlzLmNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIC8vIExpc3Qgb2YgcHJvcGVydGllcyB0aGF0IGNvbW1vbmx5IGNoYW5nZSBhbmQgbmVlZCB0byBiZSB1cGRhdGVkXG4gICAgY29uc3QgaW1wb3J0YW50UHJvcGVydGllcyA9IFsnc3RhdHVzJywgJ2R1cmF0aW9uJywgJ2V4cGFuZGVkJywgJ3N1YlN0ZXBzJywgJ2NoaWxkcmVuJywgJ25lc3RlZFN0ZXBzJywgJ3N0ZXBzJyxcbiAgICAgICdleGVjdXRpb25EYXRhJywgJ2FjdGlvbicsICd0aXRsZScsICdyZXN1bHQnLCAnbWV0aG9kJywgJ2VuZHBvaW50JywgJ3N0YXR1c0NvZGUnLCAnYnJhbmNoZXMnLFxuICAgICAgJ3Jlc3BvbnNlVGltZScsICdhY3Rpb25zJywgJ3Byb21wdCcsICdvcHRpbWl6ZWRSdW4nLCAnYWN0aW9uQ291bnQnLCAnaXRlcmF0aW9ucycsICdzZWxlY3RlZEl0ZXJhdGlvbklkJywgJ3N0ZXBOdW1iZXInLFxuICAgICAgJ2lzVXBsb2FkaW5nQmFzZWxpbmUnLCAnaXNNYWtpbmdDdXJyZW50QmFzZWxpbmUnLCAnc2VsZWN0ZWRUYWJJbnB1dCcsICdzdGVwRGVsZXRlZCddO1xuXG4gICAgLy8gVXBkYXRlIGltcG9ydGFudCBwcm9wZXJ0aWVzXG4gICAgaW1wb3J0YW50UHJvcGVydGllcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAvLyBGb3Igc2VsZWN0ZWRJdGVyYXRpb25JZCBvbiBsb29wIHN0ZXBzLCBwcmlvcml0aXplIHRoZSBpbnB1dCB2YWx1ZSBvdmVyIHN0ZXAgdmFsdWVcbiAgICAgIGlmIChrZXkgPT09ICdzZWxlY3RlZEl0ZXJhdGlvbklkJyAmJiBjdXJyZW50U3RlcC50eXBlID09PSAnbG9vcCcgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gKGluc3RhbmNlIGFzIGFueSlba2V5XTtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZ1trZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUcnkgdG8gdXBkYXRlIHNlbGVjdGVkSXRlcmF0aW9uIGlmIGl0ZXJhdGlvbnMgYXJlIGF2YWlsYWJsZVxuICAgICAgICAgIHRoaXMudXBkYXRlTG9vcFN0ZXBTZWxlY3RlZEl0ZXJhdGlvbihpbnN0YW5jZSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpdGVyYXRpb25zJyAmJiBjdXJyZW50U3RlcC50eXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgLy8gV2hlbiBpdGVyYXRpb25zIGFyZSB1cGRhdGVkLCBjaGVjayBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSBzZWxlY3RlZEl0ZXJhdGlvblxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSAoY3VycmVudFN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gKHByZXZpb3VzU3RlcCBhcyBhbnkpW2tleV07XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZ1trZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgIC8vIEFmdGVyIGl0ZXJhdGlvbnMgYXJlIHVwZGF0ZWQsIHRyeSB0byB1cGRhdGUgc2VsZWN0ZWRJdGVyYXRpb24gaWYgc2VsZWN0ZWRJdGVyYXRpb25JZCBpcyBzZXRcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZXJhdGlvbklkID0gKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZCB8fCB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlcmF0aW9uSWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9vcFN0ZXBTZWxlY3RlZEl0ZXJhdGlvbihpbnN0YW5jZSwgc2VsZWN0ZWRJdGVyYXRpb25JZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2lzVXBsb2FkaW5nQmFzZWxpbmUnIHx8IGtleSA9PT0gJ2lzTWFraW5nQ3VycmVudEJhc2VsaW5lJykge1xuICAgICAgICAvLyBGb3IgbG9hZGluZyBzdGF0ZSBvYmplY3RzLCBhbHdheXMgdXNlIHRoZSBpbnB1dCB2YWx1ZSAodGhleSdyZSBwYXNzZWQgZnJvbSBwYXJlbnQpXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGtleSA9PT0gJ2lzVXBsb2FkaW5nQmFzZWxpbmUnID8gdGhpcy5pc1VwbG9hZGluZ0Jhc2VsaW5lIDogdGhpcy5pc01ha2luZ0N1cnJlbnRCYXNlbGluZTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IChpbnN0YW5jZSBhcyBhbnkpW2tleV07XG5cbiAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBpZiB0aGUgcmVmZXJlbmNlIGNoYW5nZWQgKG5ldyBvYmplY3QgY3JlYXRlZClcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gcHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnW2tleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3N0ZXBOdW1iZXInICYmIHRoaXMuc3RlcE51bWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIEZvciBzdGVwTnVtYmVyLCBwcmlvcml0aXplIHRoZSBpbnB1dCB2YWx1ZSBvdmVyIHN0ZXAgdmFsdWVcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gKGluc3RhbmNlIGFzIGFueSlba2V5XTtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKGN1cnJlbnRWYWx1ZSwgcHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZ1trZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhY3Rpb24nICYmIGN1cnJlbnRTdGVwLnR5cGUgPT09ICdhaS1hZ2VudCcpIHtcbiAgICAgICAgLy8gRm9yIGFpLWFnZW50IHN0ZXBzLCBlbnN1cmUgdGl0bGUgYW5kIHByb21wdCBhcmUgc2V0IGZyb20gYWN0aW9uXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IChjdXJyZW50U3RlcCBhcyBhbnkpW2tleV07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSAocHJldmlvdXNTdGVwIGFzIGFueSlba2V5XTtcblxuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZUNoYW5nZWQoY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgIC8vIFVwZGF0ZSBhY3Rpb25cbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgLy8gQWxzbyB1cGRhdGUgdGl0bGUgYW5kIHByb21wdCBmcm9tIGFjdGlvbiBpZiB0aGV5J3JlIG5vdCBzZXQgb3IgZW1wdHlcbiAgICAgICAgICBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLnRpdGxlIHx8ICEoaW5zdGFuY2UgYXMgYW55KS50aXRsZS50cmltKCkpIHtcbiAgICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkudGl0bGUgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcudGl0bGUgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkucHJvbXB0IHx8ICEoaW5zdGFuY2UgYXMgYW55KS5wcm9tcHQudHJpbSgpKSB7XG4gICAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnByb21wdCA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5wcm9tcHQgPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IChjdXJyZW50U3RlcCBhcyBhbnkpW2tleV07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSAocHJldmlvdXNTdGVwIGFzIGFueSlba2V5XTtcblxuICAgICAgICAvLyBVc2UgZGVlcCBjb21wYXJpc29uIGZvciBvYmplY3RzL2FycmF5cywgc2hhbGxvdyBmb3IgcHJpbWl0aXZlc1xuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZUNoYW5nZWQoY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFsc28gdXBkYXRlIGFsbCBvdGhlciBwcm9wZXJ0aWVzXG4gICAgT2JqZWN0LmtleXMoY3VycmVudFN0ZXApLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChrZXkgIT09ICd0eXBlJyAmJiAhaW1wb3J0YW50UHJvcGVydGllcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IChjdXJyZW50U3RlcCBhcyBhbnkpW2tleV07XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSAocHJldmlvdXNTdGVwIGFzIGFueSlba2V5XTtcblxuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZUNoYW5nZWQoY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSBzcGVjaWFsIHByb3BlcnRpZXMgdGhhdCBtaWdodCBuZWVkIHNwZWNpYWwgaGFuZGxpbmdcbiAgICBpZiAoY3VycmVudFN0ZXAudHlwZSA9PT0gJ2xvb3AnICYmIChjdXJyZW50U3RlcCBhcyBhbnkpLmNoaWxkcmVuICYmICEoY3VycmVudFN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcykge1xuICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzICE9PSAoY3VycmVudFN0ZXAgYXMgYW55KS5jaGlsZHJlbikge1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyA9IChjdXJyZW50U3RlcCBhcyBhbnkpLmNoaWxkcmVuO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLm5lc3RlZFN0ZXBzID0gKGN1cnJlbnRTdGVwIGFzIGFueSkuY2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRTdGVwLnR5cGUgPT09ICdzdGVwLWdyb3VwJyAmJiAoY3VycmVudFN0ZXAgYXMgYW55KS5jaGlsZHJlbiAmJiAhKGN1cnJlbnRTdGVwIGFzIGFueSkuc3RlcHMpIHtcbiAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5zdGVwcyAhPT0gKGN1cnJlbnRTdGVwIGFzIGFueSkuY2hpbGRyZW4pIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc3RlcHMgPSAoY3VycmVudFN0ZXAgYXMgYW55KS5jaGlsZHJlbjtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5zdGVwcyA9IChjdXJyZW50U3RlcCBhcyBhbnkpLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGNvbmRpdGlvbi1zdGVwOiBlbnN1cmUgYnJhbmNoZXMgaXMgcHJvcGVybHkgdXBkYXRlZFxuICAgIC8vIFVzZSBkZWVwIGNvbXBhcmlzb24gdG8gZGV0ZWN0IGNoYW5nZXMgaW4gbmVzdGVkIHN1YlN0ZXBzXG4gICAgaWYgKGN1cnJlbnRTdGVwLnR5cGUgPT09ICdjb25kaXRpb24nICYmIChjdXJyZW50U3RlcCBhcyBhbnkpLmJyYW5jaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRCcmFuY2hlcyA9IChjdXJyZW50U3RlcCBhcyBhbnkpLmJyYW5jaGVzIHx8IFtdO1xuICAgICAgY29uc3QgcHJldmlvdXNCcmFuY2hlcyA9IChwcmV2aW91c1N0ZXAgYXMgYW55KS5icmFuY2hlcyB8fCBbXTtcblxuICAgICAgLy8gVXNlIGRlZXAgY29tcGFyaXNvbiB0byBkZXRlY3QgbmVzdGVkIHN1YlN0ZXBzIGNoYW5nZXNcbiAgICAgIGlmICh0aGlzLmhhc0JyYW5jaGVzQ2hhbmdlZChjdXJyZW50QnJhbmNoZXMsIHByZXZpb3VzQnJhbmNoZXMpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSByZWZlcmVuY2UgdG8gZW5zdXJlIGNoYW5nZSBkZXRlY3Rpb24gdHJpZ2dlcnNcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuYnJhbmNoZXMgPSBbLi4uY3VycmVudEJyYW5jaGVzLm1hcCgoYnJhbmNoOiBhbnkpID0+ICh7XG4gICAgICAgICAgLi4uYnJhbmNoLFxuICAgICAgICAgIHN1YlN0ZXBzOiBicmFuY2guc3ViU3RlcHMgPyBbLi4uYnJhbmNoLnN1YlN0ZXBzXSA6IFtdXG4gICAgICAgIH0pKV07XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuYnJhbmNoZXMgPSAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcztcbiAgICAgICAgfVxuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBjb25kaXRpb24tc3RlcDogZW5zdXJlIG5lc3RlZFN0ZXBzIGlzIHByb3Blcmx5IHVwZGF0ZWRcbiAgICAvLyBUaGlzIGlzIGltcG9ydGFudCB3aGVuIGNoaWxkcmVuIGFyZSBsb2FkZWQgZnJvbSB0aGUgQVBJIG9yIHdoZW4gc3dpdGNoaW5nIGJyYW5jaGVzXG4gICAgaWYgKGN1cnJlbnRTdGVwLnR5cGUgPT09ICdjb25kaXRpb24nICYmIChjdXJyZW50U3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnROZXN0ZWRTdGVwcyA9IChjdXJyZW50U3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzIHx8IFtdO1xuICAgICAgY29uc3QgcHJldmlvdXNOZXN0ZWRTdGVwcyA9IChwcmV2aW91c1N0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcyB8fCBbXTtcbiAgICAgIGNvbnNvbGUubG9nKCfwn5SEIHN0ZXAtcmVuZGVyZXI6IGN1cnJlbnROZXN0ZWRTdGVwcycsIGN1cnJlbnROZXN0ZWRTdGVwcyk7XG4gICAgICBjb25zb2xlLmxvZygn8J+UhCBzdGVwLXJlbmRlcmVyOiBwcmV2aW91c05lc3RlZFN0ZXBzJywgcHJldmlvdXNOZXN0ZWRTdGVwcyk7XG4gICAgICAvLyBVc2UgZGVlcCBjb21wYXJpc29uIHRvIGRldGVjdCBjb250ZW50IGNoYW5nZXMsIG5vdCBqdXN0IHJlZmVyZW5jZSBjaGFuZ2VzXG4gICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gSUYgYW5kIEVMU0VfSUYgYnJhbmNoZXNcbiAgICAgIGlmICh0aGlzLmhhc05lc3RlZFN0ZXBzQ2hhbmdlZChjdXJyZW50TmVzdGVkU3RlcHMsIHByZXZpb3VzTmVzdGVkU3RlcHMpKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSByZWZlcmVuY2UgdG8gZW5zdXJlIGNoYW5nZSBkZXRlY3Rpb24gdHJpZ2dlcnNcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkubmVzdGVkU3RlcHMgPSBbLi4uY3VycmVudE5lc3RlZFN0ZXBzXTtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5uZXN0ZWRTdGVwcyA9IFsuLi5jdXJyZW50TmVzdGVkU3RlcHNdO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICBjb25zb2xlLmxvZygn8J+UhCBzdGVwLXJlbmRlcmVyOiBuZXN0ZWRTdGVwcyB1cGRhdGVkIGZvciBjb25kaXRpb24tc3RlcCcsIHtcbiAgICAgICAgICBzdGVwSWQ6IGN1cnJlbnRTdGVwLmlkLFxuICAgICAgICAgIHByZXZpb3VzQ291bnQ6IHByZXZpb3VzTmVzdGVkU3RlcHMubGVuZ3RoLFxuICAgICAgICAgIGN1cnJlbnRDb3VudDogY3VycmVudE5lc3RlZFN0ZXBzLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBmaWxlLWRvd25sb2FkIChpbmNsdWRpbmcgZ2VuZXJhdGVEb2N1bWVudCk6IHN5bmMgZnJvbSBnZW5lcmF0ZURvY3VtZW50UmVzdWx0XG4gICAgaWYgKHRoaXMuZ2V0RWZmZWN0aXZlU3RlcFR5cGUoY3VycmVudFN0ZXApID09PSAnZmlsZS1kb3dubG9hZCcpIHtcbiAgICAgIGNvbnN0IGdkID0gKGN1cnJlbnRTdGVwIGFzIGFueSkuZXhlY3V0ZWRSZXN1bHQ/LmdlbmVyYXRlRG9jdW1lbnRSZXN1bHQ7XG4gICAgICBjb25zdCBwcmV2R2QgPSAocHJldmlvdXNTdGVwIGFzIGFueSkuZXhlY3V0ZWRSZXN1bHQ/LmdlbmVyYXRlRG9jdW1lbnRSZXN1bHQ7XG4gICAgICBpZiAoZ2QgIT09IHByZXZHZCB8fCBnZD8uZmlsZU5hbWUgIT09IHByZXZHZD8uZmlsZU5hbWUgfHwgZ2Q/LmZpbGVUeXBlICE9PSBwcmV2R2Q/LmZpbGVUeXBlIHx8IGdkPy5zM0ZpbGVOYW1lICE9PSBwcmV2R2Q/LnMzRmlsZU5hbWUpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZU5hbWUgPSBnZD8uZmlsZU5hbWUgPz8gKGluc3RhbmNlIGFzIGFueSkuZmlsZU5hbWUgPz8gJyc7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlID0gZ2Q/LmZpbGVUeXBlID8/IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlID8/ICcnO1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aCA9IGdkPy5zM0ZpbGVOYW1lID8/IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVQYXRoO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmZpbGVOYW1lID0gKGluc3RhbmNlIGFzIGFueSkuZmlsZU5hbWU7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmZpbGVUeXBlID0gKGluc3RhbmNlIGFzIGFueSkuZmlsZVR5cGU7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmZpbGVQYXRoID0gKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0aWQgPSAoY3VycmVudFN0ZXAgYXMgYW55KS50ZXN0U3RlcFJlc3VsdElkO1xuICAgICAgY29uc3QgbmV4dERvd25sb2FkaW5nID0gISF0aWQgJiYgdGhpcy5kb3dubG9hZGluZ1N0ZXBJZCA9PT0gdGlkO1xuICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmlzRG93bmxvYWRpbmcgIT09IG5leHREb3dubG9hZGluZykge1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5pc0Rvd25sb2FkaW5nID0gbmV4dERvd25sb2FkaW5nO1xuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBsb29wLXN0ZXA6IGVuc3VyZSBzZWxlY3RlZEl0ZXJhdGlvbklkIGZyb20gaW5wdXQgaXMgdXNlZFxuICAgIGlmIChjdXJyZW50U3RlcC50eXBlID09PSAnbG9vcCcgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZEl0ZXJhdGlvbklkID0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgY29uc3QgaW5zdGFuY2VTZWxlY3RlZEl0ZXJhdGlvbklkID0gKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZDtcblxuICAgICAgLy8gTm9ybWFsaXplIHZhbHVlcyB0byBoYW5kbGUgbnVsbC91bmRlZmluZWQgY29uc2lzdGVudGx5XG4gICAgICBjb25zdCBub3JtYWxpemVWYWx1ZSA9ICh2YWw6IGFueSkgPT4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcodmFsKTtcbiAgICAgIGNvbnN0IGN1cnJlbnROb3JtYWxpemVkID0gbm9ybWFsaXplVmFsdWUoY3VycmVudFNlbGVjdGVkSXRlcmF0aW9uSWQpO1xuICAgICAgY29uc3QgaW5zdGFuY2VOb3JtYWxpemVkID0gbm9ybWFsaXplVmFsdWUoaW5zdGFuY2VTZWxlY3RlZEl0ZXJhdGlvbklkKTtcblxuICAgICAgaWYgKGN1cnJlbnROb3JtYWxpemVkICE9PSBpbnN0YW5jZU5vcm1hbGl6ZWQpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZCA9IGN1cnJlbnRTZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgfVxuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBsb29wLXN0ZXA6IGVuc3VyZSBzZWxlY3RlZEl0ZXJhdGlvbklkIGZyb20gaW5wdXQgaXMgdXNlZFxuICAgIGlmIChjdXJyZW50U3RlcC50eXBlID09PSAnbG9vcCcgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZEl0ZXJhdGlvbklkID0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgY29uc3QgaW5zdGFuY2VTZWxlY3RlZEl0ZXJhdGlvbklkID0gKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZDtcblxuICAgICAgLy8gTm9ybWFsaXplIHZhbHVlcyB0byBoYW5kbGUgbnVsbC91bmRlZmluZWQgY29uc2lzdGVudGx5XG4gICAgICBjb25zdCBub3JtYWxpemVWYWx1ZSA9ICh2YWw6IGFueSkgPT4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcodmFsKTtcbiAgICAgIGNvbnN0IGN1cnJlbnROb3JtYWxpemVkID0gbm9ybWFsaXplVmFsdWUoY3VycmVudFNlbGVjdGVkSXRlcmF0aW9uSWQpO1xuICAgICAgY29uc3QgaW5zdGFuY2VOb3JtYWxpemVkID0gbm9ybWFsaXplVmFsdWUoaW5zdGFuY2VTZWxlY3RlZEl0ZXJhdGlvbklkKTtcblxuICAgICAgaWYgKGN1cnJlbnROb3JtYWxpemVkICE9PSBpbnN0YW5jZU5vcm1hbGl6ZWQpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0ZWRJdGVyYXRpb25JZCA9IGN1cnJlbnRTZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb25JZDtcbiAgICAgICAgfVxuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgZXhwYW5kZWQgc3RhdGVcbiAgICBpZiAodGhpcy5pc1N0ZXBFeHBhbmRlZEhhbmRsZXIgJiYgY3VycmVudFN0ZXApIHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkU3RhdGUgPSB0aGlzLmlzU3RlcEV4cGFuZGVkSGFuZGxlcihjdXJyZW50U3RlcCk7XG4gICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuZXhwYW5kZWQgIT09IGV4cGFuZGVkU3RhdGUpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZXhwYW5kZWQgPSBleHBhbmRlZFN0YXRlO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmV4cGFuZGVkID0gZXhwYW5kZWRTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChjdXJyZW50U3RlcCBhcyBhbnkpLmV4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5leHBhbmRlZCAhPT0gKGN1cnJlbnRTdGVwIGFzIGFueSkuZXhwYW5kZWQpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZXhwYW5kZWQgPSAoY3VycmVudFN0ZXAgYXMgYW55KS5leHBhbmRlZDtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5leHBhbmRlZCA9IChjdXJyZW50U3RlcCBhcyBhbnkpLmV4cGFuZGVkO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb25maWcgcmVmZXJlbmNlIC0gZW5zdXJlIGFsbCBwcm9wZXJ0aWVzIGluY2x1ZGluZyBicmFuY2hlcyBhcmUgaW5jbHVkZWRcbiAgICBpZiAoJ2NvbmZpZycgaW4gaW5zdGFuY2UpIHtcbiAgICAgIC8vIFVwZGF0ZSBjb25maWcgd2l0aCBjdXJyZW50IHN0ZXAgdG8gZW5zdXJlIGFsbCBwcm9wZXJ0aWVzIGluY2x1ZGluZyBicmFuY2hlcyBhcmUgc3luY2VkXG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcgPSB7IC4uLihpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZywgLi4uY3VycmVudFN0ZXAgfTtcbiAgICAgIC8vIEV4cGxpY2l0bHkgZW5zdXJlIGJyYW5jaGVzIGlzIHVwZGF0ZWQgZm9yIGNvbmRpdGlvbi1zdGVwIChpbiBjYXNlIGl0IHdhcyBuZXN0ZWQpXG4gICAgICAvLyBVc2UgdGhlIGFscmVhZHkgdXBkYXRlZCBicmFuY2hlcyBmcm9tIGluc3RhbmNlIHRvIG1haW50YWluIHJlZmVyZW5jZSBjb25zaXN0ZW5jeVxuICAgICAgaWYgKGN1cnJlbnRTdGVwLnR5cGUgPT09ICdjb25kaXRpb24nICYmIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmJyYW5jaGVzID0gKGluc3RhbmNlIGFzIGFueSkuYnJhbmNoZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHN0ZXAgcHJvcGVydHkgaWYgaXQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZVxuICAgIGlmICgnc3RlcCcgaW4gaW5zdGFuY2UpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnN0ZXAgPSBjdXJyZW50U3RlcDtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzZWxmSGVhbEFuYWx5c2lzIHVzaW5nIGhhbmRsZXIgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIgJiYgY3VycmVudFN0ZXApIHtcbiAgICAgIGNvbnN0IHNlbGZIZWFsQW5hbHlzaXMgPSB0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyKGN1cnJlbnRTdGVwKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzU2VsZkhlYWxBbmFseXNpcyA9IChpbnN0YW5jZSBhcyBhbnkpLnNlbGZIZWFsQW5hbHlzaXM7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlQ2hhbmdlZChzZWxmSGVhbEFuYWx5c2lzLCBwcmV2aW91c1NlbGZIZWFsQW5hbHlzaXMpKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGZIZWFsQW5hbHlzaXMgPSBzZWxmSGVhbEFuYWx5c2lzO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLnNlbGZIZWFsQW5hbHlzaXMgPSBzZWxmSGVhbEFuYWx5c2lzO1xuICAgICAgICB9XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlIGlmIHRoZXJlIHdlcmUgY2hhbmdlc1xuICAgIC8vIFRoaXMgZW5zdXJlcyBvbmx5IHRoZSBuZXN0ZWQgc3RlcCB1cGRhdGVzIHdpdGhvdXQgYWZmZWN0aW5nIHBhcmVudCBzdGVwc1xuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICBpZiAoY29tcG9uZW50UmVmLmluamVjdG9yKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlQ2RyID0gY29tcG9uZW50UmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZiwgbnVsbCk7XG4gICAgICAgIGlmIChpbnN0YW5jZUNkcikge1xuICAgICAgICAgIGluc3RhbmNlQ2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIGluc3RhbmNlQ2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jZHIpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAoKGluc3RhbmNlIGFzIGFueSkuY2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICAgLy8gRG9uJ3QgY2FsbCBtYXJrRm9yQ2hlY2sgb24gdGhpcyBjb21wb25lbnQgdG8gYXZvaWQgdHJpZ2dlcmluZyBwYXJlbnQgcmUtcmVuZGVyc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIHVwZGF0ZSBsb29wLXN0ZXAgc2VsZWN0ZWRJdGVyYXRpb24gd2hlbiBzZWxlY3RlZEl0ZXJhdGlvbklkIGNoYW5nZXNcbiAgICogVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGl0ZXJhdGlvbnMgbWlnaHQgbm90IGJlIGxvYWRlZCB5ZXRcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTG9vcFN0ZXBTZWxlY3RlZEl0ZXJhdGlvbihpbnN0YW5jZTogYW55LCBzZWxlY3RlZEl0ZXJhdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoIWluc3RhbmNlKSByZXR1cm47XG5cbiAgICBjb25zdCBpdGVyYXRpb25zID0gKGluc3RhbmNlIGFzIGFueSkuaXRlcmF0aW9ucyB8fCAoaW5zdGFuY2UgYXMgYW55KS5jb25maWc/Lml0ZXJhdGlvbnMgfHwgW107XG5cbiAgICBpZiAoaXRlcmF0aW9ucyAmJiBpdGVyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChzZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gaXRlcmF0aW9ucy5maW5kKChpdGVyOiBhbnkpID0+IGl0ZXIuaWQgPT09IHNlbGVjdGVkSXRlcmF0aW9uSWQpO1xuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbiA9IGZvdW5kO1xuICAgICAgICAgIC8vIFN5bmMgdXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgd2l0aCB0aGUgaW5wdXQgdmFsdWVcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkudXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkudXNlclNlbGVjdGVkSXRlcmF0aW9uSWQgPSBzZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBub3QgZm91bmQsIHNlbGVjdCBkZWZhdWx0XG4gICAgICAgICAgaWYgKHR5cGVvZiAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3REZWZhdWx0SXRlcmF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3REZWZhdWx0SXRlcmF0aW9uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBubyB2YWx1ZSBwcm92aWRlZCwgc2VsZWN0IGRlZmF1bHRcbiAgICAgICAgaWYgKHR5cGVvZiAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3REZWZhdWx0SXRlcmF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZWN0RGVmYXVsdEl0ZXJhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIGl0ZXJhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgeWV0LCB0aGUgc2VsZWN0ZWRJdGVyYXRpb25JZCBpcyBhbHJlYWR5IHNldFxuICAgIC8vIGFuZCB3aWxsIGJlIHVzZWQgd2hlbiBpdGVyYXRpb25zIGJlY29tZSBhdmFpbGFibGUgKGhhbmRsZWQgaW4gdXBkYXRlQ29tcG9uZW50SW5zdGFuY2UgYW5kIG5nRG9DaGVjaylcbiAgfVxuXG4gIHByaXZhdGUgaGFzVmFsdWVDaGFuZ2VkKGN1cnJlbnQ6IGFueSwgcHJldmlvdXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFNoYWxsb3cgY29tcGFyaXNvbiBmb3IgcHJpbWl0aXZlc1xuICAgIGlmIChjdXJyZW50ID09PSBwcmV2aW91cykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gSGFuZGxlIG51bGwvdW5kZWZpbmVkXG4gICAgaWYgKGN1cnJlbnQgPT0gbnVsbCB8fCBwcmV2aW91cyA9PSBudWxsKSByZXR1cm4gY3VycmVudCAhPT0gcHJldmlvdXM7XG5cbiAgICAvLyBGb3IgYXJyYXlzLCBjaGVjayBsZW5ndGggYW5kIHJlZmVyZW5jZVxuICAgIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpIHx8IEFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSAhPT0gQXJyYXkuaXNBcnJheShwcmV2aW91cykpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBwcmV2aW91cy5sZW5ndGgpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGN1cnJlbnQgIT09IHByZXZpb3VzOyAvLyBSZWZlcmVuY2UgY2hlY2tcbiAgICB9XG5cbiAgICAvLyBGb3Igb2JqZWN0cywgZG8gc2hhbGxvdyBjb21wYXJpc29uIChjaGVjayByZWZlcmVuY2UpXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJldmlvdXMgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gY3VycmVudCAhPT0gcHJldmlvdXM7IC8vIFJlZmVyZW5jZSBjaGVja1xuICAgIH1cblxuICAgIC8vIEZvciBwcmltaXRpdmVzXG4gICAgcmV0dXJuIGN1cnJlbnQgIT09IHByZXZpb3VzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZXAgY29tcGFyaXNvbiBmb3IgYnJhbmNoZXMgYXJyYXkgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gbmVzdGVkIHN1YlN0ZXBzXG4gICAqL1xuICBwcml2YXRlIGhhc0JyYW5jaGVzQ2hhbmdlZChjdXJyZW50OiBhbnlbXSwgcHJldmlvdXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjdXJyZW50ICYmICFwcmV2aW91cykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghY3VycmVudCB8fCAhcHJldmlvdXMpIHJldHVybiB0cnVlO1xuICAgIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gcHJldmlvdXMubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY3VycmVudCA9PT0gcHJldmlvdXMpIHJldHVybiBmYWxzZTsgLy8gU2FtZSByZWZlcmVuY2VcblxuICAgIC8vIENvbXBhcmUgZWFjaCBicmFuY2ggYW5kIGl0cyBzdWJTdGVwc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudEJyYW5jaCA9IGN1cnJlbnRbaV07XG4gICAgICBjb25zdCBwcmV2aW91c0JyYW5jaCA9IHByZXZpb3VzW2ldO1xuXG4gICAgICBpZiAoIXByZXZpb3VzQnJhbmNoKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gQ2hlY2sgaWYgYnJhbmNoIHByb3BlcnRpZXMgY2hhbmdlZFxuICAgICAgaWYgKGN1cnJlbnRCcmFuY2gudHlwZSAhPT0gcHJldmlvdXNCcmFuY2gudHlwZSB8fFxuICAgICAgICBjdXJyZW50QnJhbmNoLmxhYmVsICE9PSBwcmV2aW91c0JyYW5jaC5sYWJlbCB8fFxuICAgICAgICBjdXJyZW50QnJhbmNoLmV4ZWN1dGVkICE9PSBwcmV2aW91c0JyYW5jaC5leGVjdXRlZCB8fFxuICAgICAgICBjdXJyZW50QnJhbmNoLmNvbmRpdGlvblR5cGUgIT09IHByZXZpb3VzQnJhbmNoLmNvbmRpdGlvblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHN1YlN0ZXBzIGFycmF5IGNoYW5nZWQgKGxlbmd0aCBvciByZWZlcmVuY2UpXG4gICAgICBjb25zdCBjdXJyZW50U3ViU3RlcHMgPSBjdXJyZW50QnJhbmNoLnN1YlN0ZXBzIHx8IFtdO1xuICAgICAgY29uc3QgcHJldmlvdXNTdWJTdGVwcyA9IHByZXZpb3VzQnJhbmNoLnN1YlN0ZXBzIHx8IFtdO1xuXG4gICAgICBpZiAoY3VycmVudFN1YlN0ZXBzLmxlbmd0aCAhPT0gcHJldmlvdXNTdWJTdGVwcy5sZW5ndGgpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGN1cnJlbnRTdWJTdGVwcyAhPT0gcHJldmlvdXNTdWJTdGVwcykgcmV0dXJuIHRydWU7IC8vIFJlZmVyZW5jZSBjaGVja1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWVwIGNvbXBhcmlzb24gZm9yIG5lc3RlZFN0ZXBzIGFycmF5IHRvIGRldGVjdCBjb250ZW50IGNoYW5nZXNcbiAgICogVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGNvbmRpdGlvbiBzdGVwcyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJyYW5jaGVzXG4gICAqL1xuICBwcml2YXRlIGhhc05lc3RlZFN0ZXBzQ2hhbmdlZChjdXJyZW50OiBhbnlbXSwgcHJldmlvdXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjdXJyZW50ICYmICFwcmV2aW91cykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghY3VycmVudCB8fCAhcHJldmlvdXMpIHJldHVybiB0cnVlO1xuICAgIGlmIChjdXJyZW50Lmxlbmd0aCAhPT0gcHJldmlvdXMubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY3VycmVudCA9PT0gcHJldmlvdXMpIHJldHVybiBmYWxzZTsgLy8gU2FtZSByZWZlcmVuY2VcblxuICAgIC8vIENvbXBhcmUgZWFjaCBzdGVwIGJ5IElEIHRvIGRldGVjdCBjb250ZW50IGNoYW5nZXNcbiAgICAvLyBUaGlzIGhhbmRsZXMgY2FzZXMgd2hlcmUgYXJyYXkgbGVuZ3RoIGlzIHNhbWUgYnV0IGNvbnRlbnQgZGlmZmVycyAoZS5nLiwgc3dpdGNoaW5nIGJyYW5jaGVzKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSBjdXJyZW50W2ldO1xuICAgICAgY29uc3QgcHJldmlvdXNTdGVwID0gcHJldmlvdXNbaV07XG5cbiAgICAgIGlmICghcHJldmlvdXNTdGVwKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gQ29tcGFyZSBzdGVwIElEcyAtIGlmIElEcyBkaWZmZXIsIGNvbnRlbnQgaGFzIGNoYW5nZWRcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGVwSWQgPSBjdXJyZW50U3RlcC5pZCB8fCBjdXJyZW50U3RlcC50ZXN0U3RlcFJlc3VsdElkO1xuICAgICAgY29uc3QgcHJldmlvdXNTdGVwSWQgPSBwcmV2aW91c1N0ZXAuaWQgfHwgcHJldmlvdXNTdGVwLnRlc3RTdGVwUmVzdWx0SWQ7XG5cbiAgICAgIGlmIChjdXJyZW50U3RlcElkICE9PSBwcmV2aW91c1N0ZXBJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQWxzbyBjaGVjayBpZiB0aGUgc3RlcCB0eXBlIGNoYW5nZWQgKGltcG9ydGFudCBmb3IgYnJhbmNoIHN3aXRjaGluZylcbiAgICAgIGlmIChjdXJyZW50U3RlcC50eXBlICE9PSBwcmV2aW91c1N0ZXAudHlwZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdGVzdFN0ZXBUeXBlIGNoYW5nZWQgKElGIHZzIEVMU0VfSUYgdnMgRUxTRSlcbiAgICAgIGlmIChjdXJyZW50U3RlcC50ZXN0U3RlcFR5cGUgIT09IHByZXZpb3VzU3RlcC50ZXN0U3RlcFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciB1cGRhdGUgdG9rZW4gaWYgcHJlc2VudCAodXNlZCB0byBmb3JjZSByZS1yZW5kZXIpXG4gICAgICBpZiAoY3VycmVudFN0ZXAuX3VwZGF0ZVRva2VuICYmIGN1cnJlbnRTdGVwLl91cGRhdGVUb2tlbiAhPT0gcHJldmlvdXNTdGVwLl91cGRhdGVUb2tlbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldFN0ZXBLZXkoc3RlcDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIXN0ZXApIHJldHVybiAnJztcbiAgICAvLyBDcmVhdGUgYSBrZXkgZnJvbSBpbXBvcnRhbnQgcHJvcGVydGllcyB0aGF0IGNoYW5nZVxuICAgIC8vIEluY2x1ZGUgZXhlY3V0aW9uRGF0YS5zdGVwU3RhdHVzIGZvciBsaXZlIGV4ZWN1dGlvbiBzY2VuYXJpb3NcbiAgICBjb25zdCBleGVjdXRpb25TdGF0dXMgPSBzdGVwLmV4ZWN1dGlvbkRhdGE/LnN0ZXBTdGF0dXMgfHwgc3RlcC5zdGF0dXMgfHwgJyc7XG4gICAgLy8gSW5jbHVkZSBicmFuY2hlcyBsZW5ndGggZm9yIGNvbmRpdGlvbi1zdGVwIGNoYW5nZSBkZXRlY3Rpb25cbiAgICBjb25zdCBicmFuY2hlc0xlbmd0aCA9IChzdGVwLmJyYW5jaGVzIHx8IFtdKS5sZW5ndGg7XG4gICAgLy8gSW5jbHVkZSB0b3RhbCBzdWJTdGVwcyBjb3VudCBhY3Jvc3MgYWxsIGJyYW5jaGVzIGZvciBuZXN0ZWQgY2hhbmdlIGRldGVjdGlvblxuICAgIGNvbnN0IHRvdGFsU3ViU3RlcHMgPSAoc3RlcC5icmFuY2hlcyB8fCBbXSkucmVkdWNlKChzdW06IG51bWJlciwgYnJhbmNoOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBzdW0gKyAoYnJhbmNoLnN1YlN0ZXBzPy5sZW5ndGggfHwgMCk7XG4gICAgfSwgMCk7XG4gICAgcmV0dXJuIGAke3N0ZXAuaWQgfHwgJyd9XyR7ZXhlY3V0aW9uU3RhdHVzfV8ke3N0ZXAuc3RhdHVzIHx8ICcnfV8ke3N0ZXAuZHVyYXRpb24gfHwgJyd9XyR7c3RlcC5leHBhbmRlZCB8fCBmYWxzZX1fJHsoc3RlcC5jaGlsZHJlbiB8fCBbXSkubGVuZ3RofV8keyhzdGVwLm5lc3RlZFN0ZXBzIHx8IFtdKS5sZW5ndGh9XyR7KHN0ZXAuc3RlcHMgfHwgW10pLmxlbmd0aH1fJHticmFuY2hlc0xlbmd0aH1fJHt0b3RhbFN1YlN0ZXBzfV8ke3N0ZXAuc3RlcE51bWJlciB8fCAnJ31fJHtzdGVwLnN0ZXBEZWxldGVkIHx8IGZhbHNlfWA7XG4gIH1cblxuICBwcml2YXRlIGxvYWRDb21wb25lbnQoKSB7XG4gICAgXG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lciB8fCAhdGhpcy5zdGVwKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50U3RlcElkID0gKHRoaXMuc3RlcCBhcyBhbnkpLnRlc3RTdGVwUmVzdWx0SWQgfHwgdGhpcy5zdGVwLmlkO1xuICAgIGNvbnN0IGN1cnJlbnRTdGVwVHlwZSA9IHRoaXMuZ2V0RWZmZWN0aXZlU3RlcFR5cGUodGhpcy5zdGVwKSB8fCAodGhpcy5zdGVwIGFzIGFueSkudHlwZTtcblxuICAgIC8vIE9ubHkgY2xlYXIgYW5kIHJlY3JlYXRlIGlmIHN0ZXAgSUQgb3IgdHlwZSBhY3R1YWxseSBjaGFuZ2VkXG4gICAgY29uc3QgbmVlZHNSZWNyZWF0aW9uID0gdGhpcy5sYXN0U3RlcElkICE9PSBjdXJyZW50U3RlcElkIHx8IHRoaXMubGFzdFN0ZXBUeXBlICE9PSBjdXJyZW50U3RlcFR5cGU7XG5cbiAgICBpZiAobmVlZHNSZWNyZWF0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5jbGVhcigpO1xuICAgICAgLy8gQ2xlYXIgc3RvcmVkIGluc3RhbmNlIHdoZW4gcmVjcmVhdGluZ1xuICAgICAgY29uc3Qgb2xkSW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBpZiAob2xkSW5zdGFuY2UpIHtcbiAgICAgICAgU3RlcFJlbmRlcmVyQ29tcG9uZW50LnN1YnNjcmliZWRFdmVudEVtaXR0ZXJzLmRlbGV0ZShvbGRJbnN0YW5jZSk7XG4gICAgICB9XG4gICAgICBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmRlbGV0ZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50UmVmcy5kZWxldGUodGhpcy5jb250YWluZXIpO1xuICAgICAgdGhpcy5sYXN0U3RlcElkID0gY3VycmVudFN0ZXBJZDtcbiAgICAgIHRoaXMubGFzdFN0ZXBUeXBlID0gY3VycmVudFN0ZXBUeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBzYW1lIHN0ZXAsIGp1c3QgdXBkYXRlIHByb3BlcnRpZXMgd2l0aG91dCBjbGVhcmluZ1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgLy8gVXBkYXRlIGFsbCBwcm9wZXJ0aWVzXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3RlcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgIT09ICd0eXBlJykge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9ICh0aGlzLnN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcgPSB7IC4uLihpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZywgLi4udGhpcy5zdGVwIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3luYyBmaWxlLWRvd25sb2FkIChnZW5lcmF0ZURvY3VtZW50KSBwcm9wcyBmcm9tIGdlbmVyYXRlRG9jdW1lbnRSZXN1bHRcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlVHlwZUZvclVwZGF0ZSA9IHRoaXMuZ2V0RWZmZWN0aXZlU3RlcFR5cGUodGhpcy5zdGVwKSB8fCAodGhpcy5zdGVwIGFzIGFueSkudHlwZTtcbiAgICAgICAgaWYgKGVmZmVjdGl2ZVR5cGVGb3JVcGRhdGUgPT09ICdmaWxlLWRvd25sb2FkJykge1xuICAgICAgICAgIGNvbnN0IGdkID0gKHRoaXMuc3RlcCBhcyBhbnkpLmV4ZWN1dGVkUmVzdWx0Py5nZW5lcmF0ZURvY3VtZW50UmVzdWx0O1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lID0gZ2Q/LmZpbGVOYW1lID8/IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVOYW1lID8/ICcnO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlID0gZ2Q/LmZpbGVUeXBlID8/IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlID8/ICcnO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVQYXRoID0gZ2Q/LnMzRmlsZU5hbWUgPz8gKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGg7XG4gICAgICAgICAgY29uc3QgdGlkID0gKHRoaXMuc3RlcCBhcyBhbnkpLnRlc3RTdGVwUmVzdWx0SWQ7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNEb3dubG9hZGluZyA9ICEhdGlkICYmIHRoaXMuZG93bmxvYWRpbmdTdGVwSWQgPT09IHRpZDtcbiAgICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZmlsZU5hbWUgPSAoaW5zdGFuY2UgYXMgYW55KS5maWxlTmFtZTtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5maWxlVHlwZSA9IChpbnN0YW5jZSBhcyBhbnkpLmZpbGVUeXBlO1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmZpbGVQYXRoID0gKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFVwZGF0ZSBzZWxmSGVhbEFuYWx5c2lzIHVzaW5nIGhhbmRsZXIgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICh0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyICYmIHRoaXMuc3RlcCkge1xuICAgICAgICAgIGNvbnN0IHNlbGZIZWFsQW5hbHlzaXMgPSB0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyKHRoaXMuc3RlcCk7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZkhlYWxBbmFseXNpcyA9IHNlbGZIZWFsQW5hbHlzaXM7XG4gICAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZykge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLnNlbGZIZWFsQW5hbHlzaXMgPSBzZWxmSGVhbEFuYWx5c2lzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgZXZlbnQgc3Vic2NyaXB0aW9ucyBhcmUgc3RpbGwgYWN0aXZlIGZvciBzZWxmSGVhbEFjdGlvblxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuc2VsZkhlYWxBY3Rpb24gJiYgdGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcikge1xuICAgICAgICAgIC8vIFRyYWNrIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgZHVwbGljYXRlc1xuICAgICAgICAgIGxldCBzdWJzY3JpYmVkRXZlbnRzID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LnN1YnNjcmliZWRFdmVudEVtaXR0ZXJzLmdldChpbnN0YW5jZSk7XG4gICAgICAgICAgaWYgKCFzdWJzY3JpYmVkRXZlbnRzKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVkRXZlbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICBTdGVwUmVuZGVyZXJDb21wb25lbnQuc3Vic2NyaWJlZEV2ZW50RW1pdHRlcnMuc2V0KGluc3RhbmNlLCBzdWJzY3JpYmVkRXZlbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzdWJzY3JpYmVkRXZlbnRzLmhhcygnc2VsZkhlYWxBY3Rpb24nKSkge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2VsZkhlYWxBY3Rpb24uc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMub25TZWxmSGVhbEFjdGlvbkhhbmRsZXI/LihldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1YnNjcmliZWRFdmVudHMuYWRkKCdzZWxmSGVhbEFjdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBVcGRhdGUgaGFuZGxlciByZWZlcmVuY2VzXG4gICAgICAgIGlmICh0aGlzLm9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vblNlbGZIZWFsQWN0aW9uSGFuZGxlciA9IHRoaXMub25TZWxmSGVhbEFjdGlvbkhhbmRsZXI7XG4gICAgICAgIGlmICh0aGlzLmdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLmdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPSB0aGlzLmdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXI7XG4gICAgICAgIC8vIFVwZGF0ZSBrZXkgZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgICAgdGhpcy5wcmV2aW91c1N0ZXBLZXkgPSB0aGlzLmdldFN0ZXBLZXkodGhpcy5zdGVwKTtcbiAgICAgICAgLy8gQ29tcG9uZW50IGFscmVhZHkgZXhpc3RzIGFuZCBpcyByZWFkeSwgZW1pdCBpbW1lZGlhdGVseVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5LmVtaXQoKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlZmZlY3RpdmVUeXBlID0gdGhpcy5nZXRFZmZlY3RpdmVTdGVwVHlwZSh0aGlzLnN0ZXApIHx8ICh0aGlzLnN0ZXAgYXMgYW55KS50eXBlO1xuICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSB0aGlzLmNvbXBvbmVudE1hcC5nZXQoZWZmZWN0aXZlVHlwZSk7XG5cbiAgICBpZiAoY29tcG9uZW50VHlwZSkge1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICAgIC8vIFN0b3JlIGNvbXBvbmVudCBpbnN0YW5jZSBhbmQgcmVmIGluIFdlYWtNYXAgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLnNldCh0aGlzLmNvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgICAgU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuc2V0KHRoaXMuY29udGFpbmVyLCBjb21wb25lbnRSZWYpO1xuXG4gICAgICAvLyBTdG9yZSBjb21wb25lbnQgcmVmZXJlbmNlIGZvciBjbGVhbnVwXG4gICAgICAoY29tcG9uZW50UmVmIGFzIGFueSkuX2NvbXBvbmVudFJlZiA9IGNvbXBvbmVudFJlZjtcblxuICAgICAgLy8gU3ByZWFkIGNvbmZpZyBwcm9wZXJ0aWVzIGFzIGluZGl2aWR1YWwgaW5wdXRzIGZvciBjb21wb25lbnRzIHRoYXQgdXNlIGluZGl2aWR1YWwgaW5wdXRzXG4gICAgICAvLyBUaGlzIHN1cHBvcnRzIGJvdGggcGF0dGVybnM6IGNvbXBvbmVudHMgdGhhdCBhY2NlcHQgY29uZmlnIGRpcmVjdGx5IGFuZCB0aG9zZSB0aGF0IHVzZSBpbmRpdmlkdWFsIGlucHV0c1xuICAgICAgT2JqZWN0LmtleXModGhpcy5zdGVwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChrZXkgIT09ICd0eXBlJykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSAodGhpcy5zdGVwIGFzIGFueSlba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGxvb3Atc3RlcDogbWFwIGNoaWxkcmVuIHRvIG5lc3RlZFN0ZXBzIGlmIG5lc3RlZFN0ZXBzIGlzIG5vdCBwcmVzZW50XG4gICAgICBpZiAodGhpcy5zdGVwLnR5cGUgPT09ICdsb29wJyAmJiAodGhpcy5zdGVwIGFzIGFueSkuY2hpbGRyZW4gJiYgISh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcykge1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5jaGlsZHJlbjtcbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgbG9vcC1zdGVwOiBzZXQgbG9vcFR5cGUgYmFzZWQgb24gYWN0aW9uTmFtZSBvciB0ZXN0U3RlcFR5cGVcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2xvb3AnKSB7XG4gICAgICAgIC8vIFNldCBsb29wVHlwZSBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgaWYgKCEoaW5zdGFuY2UgYXMgYW55KS5sb29wVHlwZSkge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uTmFtZTtcbiAgICAgICAgICBjb25zdCB0ZXN0U3RlcFR5cGUgPSAodGhpcy5zdGVwIGFzIGFueSkudGVzdFN0ZXBUeXBlO1xuICAgICAgICAgIGlmIChhY3Rpb25OYW1lID09PSAnRk9SX0xPT1AnIHx8IHRlc3RTdGVwVHlwZSA9PT0gJ0ZPUl9MT09QJykge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkubG9vcFR5cGUgPSAnZm9yJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbk5hbWUgPT09ICdXSElMRV9MT09QJyB8fCB0ZXN0U3RlcFR5cGUgPT09ICdXSElMRV9MT09QJykge1xuICAgICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkubG9vcFR5cGUgPSAnd2hpbGUnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgdGl0bGUgaXMgc2V0IGZyb20gYWN0aW9uIGlmIHRpdGxlIGlzIG5vdCBwcmVzZW50IG9yIGVtcHR5XG4gICAgICAgIGlmICgoIShpbnN0YW5jZSBhcyBhbnkpLnRpdGxlIHx8ICEoaW5zdGFuY2UgYXMgYW55KS50aXRsZS50cmltKCkpICYmICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb24pIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS50aXRsZSA9ICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgbG9vcC1zdGVwOiBpbml0aWFsaXplIGl0ZXJhdGlvbnMgaWYgbm90IHByZXNlbnRcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2xvb3AnICYmICEoaW5zdGFuY2UgYXMgYW55KS5pdGVyYXRpb25zKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiIGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXSBzdGVwXCIsIHRoaXMuc2VsZWN0ZWRJdGVyYXRpb25JZCwgKGluc3RhbmNlIGFzIGFueSkuaXRlcmF0aW9ucylcbiAgICAgICAgLy8gVXNlIGhhbmRsZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdHJ5IHRvIGluaXRpYWxpemUgZnJvbSBzdGVwLmV4ZWN1dGVkUmVzdWx0LnN0ZXBSZXN1bHRcbiAgICAgICAgaWYgKHRoaXMuZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXRlcmF0aW9ucyA9IHRoaXMuZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyKHRoaXMuc3RlcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLmV4ZWN1dGVkUmVzdWx0Py5zdGVwUmVzdWx0ICYmIEFycmF5LmlzQXJyYXkoKHRoaXMuc3RlcCBhcyBhbnkpLmV4ZWN1dGVkUmVzdWx0LnN0ZXBSZXN1bHQpKSB7XG4gICAgICAgICAgLy8gSW5pdGlhbGl6ZSBpdGVyYXRpb25zIGRpcmVjdGx5IGZyb20gc3RlcFJlc3VsdFxuICAgICAgICAgIGNvbnN0IGl0ZXJhdGlvbnM6IGFueVtdID0gW107XG4gICAgICAgICAgKHRoaXMuc3RlcCBhcyBhbnkpLmV4ZWN1dGVkUmVzdWx0LnN0ZXBSZXN1bHQuZm9yRWFjaCgoaXRlcmF0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZXJhdGlvbkluZGV4ID0gaXRlcmF0aW9uLmluZGV4ICE9PSB1bmRlZmluZWQgJiYgaXRlcmF0aW9uLmluZGV4ICE9PSBudWxsID8gaXRlcmF0aW9uLmluZGV4IDogaXRlcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICBsZXQgc3RhdHVzOiAnc3VjY2VzcycgfCAnZmFpbGVkJyB8ICdwZW5kaW5nJyB8ICdydW5uaW5nJyA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgIGlmIChpdGVyYXRpb24uc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXR1c0xvd2VyID0gaXRlcmF0aW9uLnN0YXR1cy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBpZiAoc3RhdHVzTG93ZXIgPT09ICdzdWNjZXNzJyB8fCBzdGF0dXNMb3dlciA9PT0gJ3Bhc3NlZCcpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzTG93ZXIgPT09ICdmYWlsdXJlJyB8fCBzdGF0dXNMb3dlciA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXNMb3dlciA9PT0gJ3J1bm5pbmcnIHx8IHN0YXR1c0xvd2VyID09PSAnaW5fcHJvZ3Jlc3MnKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gJ3J1bm5pbmcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVyYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgICBpZDogYGl0ZXItJHtpdGVyYXRpb25JbmRleH1gLFxuICAgICAgICAgICAgICBsYWJlbDogYGl0ZXIgJHtpdGVyYXRpb25JbmRleH1gLFxuICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgICAgICAgc3ViU3RlcHM6IFtdLFxuICAgICAgICAgICAgICBpbmRleDogaXRlcmF0aW9uSW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLml0ZXJhdGlvbnMgPSBpdGVyYXRpb25zO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGxvb3Atc3RlcDogc2V0IGRlZmF1bHRJdGVyYXRpb24gYW5kIHNlbGVjdGVkSXRlcmF0aW9uSWRcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2xvb3AnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiIGNoYW5nZXNbJ3NlbGVjdGVkSXRlcmF0aW9uSWQnXSBzdGVwIDJcIiwgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkLCAoaW5zdGFuY2UgYXMgYW55KS5pdGVyYXRpb25zKVxuICAgICAgICAvLyBTZXQgZGVmYXVsdEl0ZXJhdGlvbiB0byAnbGFzdCcgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuZGVmYXVsdEl0ZXJhdGlvbikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmRlZmF1bHRJdGVyYXRpb24gPSAnbGFzdCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgc2VsZWN0ZWRJdGVyYXRpb25JZCAtIHByaW9yaXRpemUgaW5wdXQgdmFsdWUsIHRoZW4gc3RlcCB2YWx1ZSwgdGhlbiBsYXN0IGl0ZXJhdGlvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbklkID0gdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLnN0ZXAgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbklkID0gKHRoaXMuc3RlcCBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2V0IHNlbGVjdGVkSXRlcmF0aW9uSWQgdG8gbGFzdCBpdGVyYXRpb24gaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgICAgY29uc3QgaXRlcmF0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLml0ZXJhdGlvbnM7XG4gICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgJiYgQXJyYXkuaXNBcnJheShpdGVyYXRpb25zKSAmJiBpdGVyYXRpb25zLmxlbmd0aCA+IDAgJiYgIShpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb24gPSBpdGVyYXRpb25zW2l0ZXJhdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbklkID0gbGFzdEl0ZXJhdGlvbi5pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3Igc3RlcC1ncm91cDogbWFwIGNoaWxkcmVuIHRvIHN0ZXBzIGlmIHN0ZXBzIGlzIG5vdCBwcmVzZW50XG4gICAgICBpZiAodGhpcy5zdGVwLnR5cGUgPT09ICdzdGVwLWdyb3VwJyAmJiAodGhpcy5zdGVwIGFzIGFueSkuY2hpbGRyZW4gJiYgISh0aGlzLnN0ZXAgYXMgYW55KS5zdGVwcykge1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5jaGlsZHJlbjtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZ3JvdXBOYW1lID0gKHRoaXMuc3RlcCBhcyBhbnkpLmFjdGlvbjtcbiAgICAgIH1cblxuICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgZmlsZS1kb3dubG9hZCAoaW5jbHVkaW5nIGdlbmVyYXRlRG9jdW1lbnQpOiBzZXQgcHJvcHMgZnJvbSBnZW5lcmF0ZURvY3VtZW50UmVzdWx0IGFuZCB3aXJlIGhhbmRsZXJzXG4gICAgICBpZiAoZWZmZWN0aXZlVHlwZSA9PT0gJ2ZpbGUtZG93bmxvYWQnKSB7XG4gICAgICAgIGNvbnN0IGdkID0gKHRoaXMuc3RlcCBhcyBhbnkpLmV4ZWN1dGVkUmVzdWx0Py5nZW5lcmF0ZURvY3VtZW50UmVzdWx0O1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5maWxlTmFtZSA9IGdkPy5maWxlTmFtZSA/PyAoaW5zdGFuY2UgYXMgYW55KS5maWxlTmFtZSA/PyAnJztcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuZmlsZVR5cGUgPSBnZD8uZmlsZVR5cGUgPz8gKGluc3RhbmNlIGFzIGFueSkuZmlsZVR5cGUgPz8gJyc7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVQYXRoID0gZ2Q/LnMzRmlsZU5hbWUgPz8gKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGg7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmRvd25sb2FkZWQgPSAoaW5zdGFuY2UgYXMgYW55KS5kb3dubG9hZGVkID8/IGZhbHNlO1xuICAgICAgICBjb25zdCB0aWQgPSAodGhpcy5zdGVwIGFzIGFueSkudGVzdFN0ZXBSZXN1bHRJZDtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuaXNEb3dubG9hZGluZyA9ICEhdGlkICYmIHRoaXMuZG93bmxvYWRpbmdTdGVwSWQgPT09IHRpZDtcbiAgICAgICAgaWYgKCEoaW5zdGFuY2UgYXMgYW55KS50aXRsZSAmJiAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkudGl0bGUgPSAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZmlsZU5hbWUgPSAoaW5zdGFuY2UgYXMgYW55KS5maWxlTmFtZTtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZmlsZVR5cGUgPSAoaW5zdGFuY2UgYXMgYW55KS5maWxlVHlwZTtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZmlsZVBhdGggPSAoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aDtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZG93bmxvYWRlZCA9IChpbnN0YW5jZSBhcyBhbnkpLmRvd25sb2FkZWQ7XG4gICAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLnRpdGxlKSAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcudGl0bGUgPSAoaW5zdGFuY2UgYXMgYW55KS50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuZG93bmxvYWQgJiYgdGhpcy5vbkRvd25sb2FkSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmRvd25sb2FkLnN1YnNjcmliZSgoZXY6IGFueSkgPT4gdGhpcy5vbkRvd25sb2FkSGFuZGxlciEoZXYpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuZmlsZVBhdGhDb3BpZWQgJiYgdGhpcy5vbkZpbGVQYXRoQ29waWVkSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmZpbGVQYXRoQ29waWVkLnN1YnNjcmliZSgoZXY6IGFueSkgPT4gdGhpcy5vbkZpbGVQYXRoQ29waWVkSGFuZGxlciEoZXYpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkudGV4dENvcGllZCAmJiB0aGlzLm9uVGV4dENvcGllZEhhbmRsZXIpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS50ZXh0Q29waWVkLnN1YnNjcmliZSgoZXY6IGFueSkgPT4gdGhpcy5vblRleHRDb3BpZWRIYW5kbGVyIShldikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGNvbmRpdGlvbi1zdGVwOiBzZXQgYnJhbmNoZXMgYW5kIGNvbmRpdGlvblRleHRcbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2NvbmRpdGlvbicpIHtcbiAgICAgICAgLy8gU2V0IGJyYW5jaGVzIC0gcHJpb3JpdGl6ZSBzdGVwLmJyYW5jaGVzIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBoYW5kbGVyXG4gICAgICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXMgJiYgQXJyYXkuaXNBcnJheSgodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXMpKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGRlZXAgY29weSB0byBlbnN1cmUgcHJvcGVyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcy5tYXAoKGJyYW5jaDogYW55KSA9PiAoe1xuICAgICAgICAgICAgLi4uYnJhbmNoLFxuICAgICAgICAgICAgc3ViU3RlcHM6IGJyYW5jaC5zdWJTdGVwcyA/IFsuLi5icmFuY2guc3ViU3RlcHNdIDogW11cbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzICYmIHRoaXMuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyKSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlckJyYW5jaGVzID0gdGhpcy5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXIodGhpcy5zdGVwKTtcbiAgICAgICAgICAvLyBDcmVhdGUgZGVlcCBjb3B5IHRvIGVuc3VyZSBwcm9wZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzID0gaGFuZGxlckJyYW5jaGVzLm1hcCgoYnJhbmNoOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5icmFuY2gsXG4gICAgICAgICAgICBzdWJTdGVwczogYnJhbmNoLnN1YlN0ZXBzID8gWy4uLmJyYW5jaC5zdWJTdGVwc10gOiBbXVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgY29uZGl0aW9uVGV4dCBmcm9tIGFjdGlvbiBpZiBjb25kaXRpb25UZXh0IGlzIG5vdCBwcmVzZW50XG4gICAgICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuY29uZGl0aW9uVGV4dCAmJiAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZGl0aW9uVGV4dCA9ICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IGlzTG9hZGluZyB1c2luZyBoYW5kbGVyIGlmIGF2YWlsYWJsZVxuICAgICAgICBpZiAodGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzTG9hZGluZyA9IHRoaXMuaXNTdGVwTG9hZGluZ0hhbmRsZXIodGhpcy5zdGVwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQYXNzIGFjdGl2ZUJyYW5jaFN0ZXBJZCBpZiBwcmVzZW50XG4gICAgICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkuYWN0aXZlQnJhbmNoU3RlcElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQgPSAodGhpcy5zdGVwIGFzIGFueSkuYWN0aXZlQnJhbmNoU3RlcElkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGFpLWFnZW50LXN0ZXA6IGVuc3VyZSB0aXRsZSBhbmQgcHJvbXB0IGFyZSBzZXQgZnJvbSBhY3Rpb25cbiAgICAgIGlmICh0aGlzLnN0ZXAudHlwZSA9PT0gJ2FpLWFnZW50Jykge1xuICAgICAgICAvLyBTZXQgdGl0bGUgZnJvbSBhY3Rpb24gaWYgdGl0bGUgaXMgbm90IHByZXNlbnQgb3IgZW1wdHlcbiAgICAgICAgaWYgKCghKGluc3RhbmNlIGFzIGFueSkudGl0bGUgfHwgIShpbnN0YW5jZSBhcyBhbnkpLnRpdGxlLnRyaW0oKSkgJiYgKHRoaXMuc3RlcCBhcyBhbnkpLmFjdGlvbikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnRpdGxlID0gKHRoaXMuc3RlcCBhcyBhbnkpLmFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgcHJvbXB0IGZyb20gYWN0aW9uIGlmIHByb21wdCBpcyBub3QgcHJlc2VudCBvciBlbXB0eVxuICAgICAgICBpZiAoKCEoaW5zdGFuY2UgYXMgYW55KS5wcm9tcHQgfHwgIShpbnN0YW5jZSBhcyBhbnkpLnByb21wdC50cmltKCkpICYmICh0aGlzLnN0ZXAgYXMgYW55KS5hY3Rpb24pIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5wcm9tcHQgPSAodGhpcy5zdGVwIGFzIGFueSkuYWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVuc3VyZSBhY3Rpb25zIGFycmF5IGlzIHNldCBpZiBub3QgcHJlc2VudFxuICAgICAgICBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLmFjdGlvbnMgJiYgdGhpcy5mb3JtYXRBY3Rpb25zSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFjdGlvbnMgPSB0aGlzLmZvcm1hdEFjdGlvbnNIYW5kbGVyKHRoaXMuc3RlcCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IGFjdGlvbkNvdW50IGlmIG5vdCBwcmVzZW50XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5hY3Rpb25Db3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3QgYWN0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLmFjdGlvbnMgfHwgW107XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuYWN0aW9uQ291bnQgPSBhY3Rpb25zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZXQgc2VsZWN0ZWRUYWJJbnB1dCBpZiBub3QgcHJlc2VudFxuICAgICAgICBpZiAoIShpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkVGFiSW5wdXQpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZFRhYklucHV0ID0gJ2FjdGlvbi10cmFjZSc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gV2lyZSB1cCBjb21tb24gZXZlbnQgZW1pdHRlcnMgZm9yIGFwaSwgYWktYWdlbnQsIGxvb3AsIGNvbmRpdGlvbiwgYW5kIGJhc2ljIHN0ZXBzXG4gICAgICBpZiAodGhpcy5zdGVwLnR5cGUgPT09ICdhcGknIHx8IHRoaXMuc3RlcC50eXBlID09PSAnYWktYWdlbnQnIHx8IHRoaXMuc3RlcC50eXBlID09PSAnbG9vcCcgfHwgdGhpcy5zdGVwLnR5cGUgPT09ICdjb25kaXRpb24nIHx8IHRoaXMuc3RlcC50eXBlID09PSAnYmFzaWMnKSB7XG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBjb21tb24gb3V0cHV0IGV2ZW50cyBhbmQgY2FsbCBoYW5kbGVyc1xuICAgICAgICAvLyBFdmVudEVtaXR0ZXJzIGFyZSBTdWJqZWN0cywgc28gd2UgY2FuIHN1YnNjcmliZSB0byB0aGVtXG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5tYWtlQ3VycmVudEJhc2VsaW5lICYmIHRoaXMub25NYWtlQ3VycmVudEJhc2VsaW5lSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm1ha2VDdXJyZW50QmFzZWxpbmUuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uTWFrZUN1cnJlbnRCYXNlbGluZUhhbmRsZXI/LihldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLnVwbG9hZEJhc2VsaW5lICYmIHRoaXMub25VcGxvYWRCYXNlbGluZUhhbmRsZXIpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS51cGxvYWRCYXNlbGluZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25VcGxvYWRCYXNlbGluZUhhbmRsZXI/LihldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLmFuYWx5emUgJiYgdGhpcy5vbkFuYWx5emVIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuYW5hbHl6ZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkFuYWx5emVIYW5kbGVyPy4oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkudmlld0Z1bGxMb2dzICYmIHRoaXMub25WaWV3RnVsbExvZ3NIYW5kbGVyKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkudmlld0Z1bGxMb2dzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uVmlld0Z1bGxMb2dzSGFuZGxlcj8uKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLnNlbGZIZWFsQWN0aW9uICYmIHRoaXMub25TZWxmSGVhbEFjdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgICAvLyBUcmFjayBzdWJzY3JpcHRpb25zIHRvIGF2b2lkIGR1cGxpY2F0ZXNcbiAgICAgICAgICBsZXQgc3Vic2NyaWJlZEV2ZW50cyA9IFN0ZXBSZW5kZXJlckNvbXBvbmVudC5zdWJzY3JpYmVkRXZlbnRFbWl0dGVycy5nZXQoaW5zdGFuY2UpO1xuICAgICAgICAgIGlmICghc3Vic2NyaWJlZEV2ZW50cykge1xuICAgICAgICAgICAgc3Vic2NyaWJlZEV2ZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICAgICAgU3RlcFJlbmRlcmVyQ29tcG9uZW50LnN1YnNjcmliZWRFdmVudEVtaXR0ZXJzLnNldChpbnN0YW5jZSwgc3Vic2NyaWJlZEV2ZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghc3Vic2NyaWJlZEV2ZW50cy5oYXMoJ3NlbGZIZWFsQWN0aW9uJykpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGZIZWFsQWN0aW9uLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyPy4oZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVkRXZlbnRzLmFkZCgnc2VsZkhlYWxBY3Rpb24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogb25Kc29uUGF0aENvcGllZEhhbmRsZXIgaXMgc2V0IGFzIGlucHV0IHByb3BlcnR5IChsaW5lIDgyNSksIHNvIHdlIGRvbid0IG5lZWQgdG8gc3Vic2NyaWJlIHRvIGpzb25QYXRoQ29waWVkIGV2ZW50XG4gICAgICAgIC8vIFRoZSBBUEkgc3RlcCBjb21wb25lbnQgY2FsbHMgdGhlIGhhbmRsZXIgZGlyZWN0bHksIGF2b2lkaW5nIGR1cGxpY2F0ZSBjYWxsc1xuICAgICAgfVxuXG4gICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBsb29wLXN0ZXA6IHdpcmUgdXAgb25WaWV3QWxsSXRlcmF0aW9ucyBldmVudFxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnbG9vcCcpIHtcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLm9uVmlld0FsbEl0ZXJhdGlvbnMgJiYgdGhpcy5vblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm9uVmlld0FsbEl0ZXJhdGlvbnMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25WaWV3QWxsSXRlcmF0aW9uc0hhbmRsZXI/Lih0aGlzLnN0ZXApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGNvbmRpdGlvbi1zdGVwOiB3aXJlIHVwIG9uRXhwYW5kIGV2ZW50XG4gICAgICBpZiAodGhpcy5zdGVwLnR5cGUgPT09ICdjb25kaXRpb24nKSB7XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5vbkV4cGFuZCAmJiB0aGlzLm9uRXhwYW5kSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm9uRXhwYW5kLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBDYWxsIG9uRXhwYW5kSGFuZGxlciB3aXRoIHRoZSBzdGVwIGNvbmZpZ1xuICAgICAgICAgICAgdGhpcy5vbkV4cGFuZEhhbmRsZXI/Lih0aGlzLnN0ZXApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdpcmUgdXAgb25CcmFuY2hDbGlja0V2ZW50IGZvciBuZXN0ZWQgY29uZGl0aW9uIHN0ZXBzXG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5vbkJyYW5jaENsaWNrRXZlbnQgJiYgdGhpcy5vbkNvbmRpdGlvbkJyYW5jaENsaWNrSGFuZGxlcikge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm9uQnJhbmNoQ2xpY2tFdmVudC5zdWJzY3JpYmUoKGJyYW5jaDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyPy4odGhpcy5zdGVwLCBicmFuY2gpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBleHBhbmRlZCBwcm9wZXJ0eSBpcyBwYXNzZWQgY29ycmVjdGx5XG4gICAgICAvLyBVc2UgaXNTdGVwRXhwYW5kZWRIYW5kbGVyIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBzdGVwLmV4cGFuZGVkIG9yIHN0ZXAuY29uZmlnLmV4cGFuZGVkXG4gICAgICBpZiAodGhpcy5pc1N0ZXBFeHBhbmRlZEhhbmRsZXIgJiYgdGhpcy5zdGVwKSB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkU3RhdGUgPSB0aGlzLmlzU3RlcEV4cGFuZGVkSGFuZGxlcih0aGlzLnN0ZXApO1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5leHBhbmRlZCA9IGV4cGFuZGVkU3RhdGU7XG4gICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5jb25maWcuZXhwYW5kZWQgPSBleHBhbmRlZFN0YXRlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCh0aGlzLnN0ZXAgYXMgYW55KS5leHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmV4cGFuZGVkID0gKHRoaXMuc3RlcCBhcyBhbnkpLmV4cGFuZGVkO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLmV4cGFuZGVkID0gKHRoaXMuc3RlcCBhcyBhbnkpLmV4cGFuZGVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFBhc3MgaGFuZGxlciBmdW5jdGlvbnMgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgICAgaWYgKHRoaXMub25FeHBhbmRIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vbkV4cGFuZEhhbmRsZXIgPSB0aGlzLm9uRXhwYW5kSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmdldENvbmRpdGlvbkJyYW5jaGVzSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuZ2V0Q29uZGl0aW9uQnJhbmNoZXNIYW5kbGVyID0gdGhpcy5nZXRDb25kaXRpb25CcmFuY2hlc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5pc1N0ZXBMb2FkaW5nSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuaXNTdGVwTG9hZGluZ0hhbmRsZXIgPSB0aGlzLmlzU3RlcExvYWRpbmdIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuaXNTdGVwRXhwYW5kZWRIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5pc1N0ZXBFeHBhbmRlZEhhbmRsZXIgPSB0aGlzLmlzU3RlcEV4cGFuZGVkSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLmNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXIgPSB0aGlzLmNvbnZlcnRNc1RvU2Vjb25kc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5mb3JtYXRGYWlsdXJlRGV0YWlsc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLmZvcm1hdEZhaWx1cmVEZXRhaWxzSGFuZGxlciA9IHRoaXMuZm9ybWF0RmFpbHVyZURldGFpbHNIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyID0gdGhpcy5nZXRTZWxmSGVhbEFuYWx5c2lzSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmdldExvb3BJdGVyYXRpb25zSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuZ2V0TG9vcEl0ZXJhdGlvbnNIYW5kbGVyID0gdGhpcy5nZXRMb29wSXRlcmF0aW9uc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5nZXRBcGlBc3NlcnRpb25zSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkuZ2V0QXBpQXNzZXJ0aW9uc0hhbmRsZXIgPSB0aGlzLmdldEFwaUFzc2VydGlvbnNIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMuZm9ybWF0QWN0aW9uc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLmZvcm1hdEFjdGlvbnNIYW5kbGVyID0gdGhpcy5mb3JtYXRBY3Rpb25zSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uVmlld0FsbEl0ZXJhdGlvbnNIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vblZpZXdBbGxJdGVyYXRpb25zSGFuZGxlciA9IHRoaXMub25WaWV3QWxsSXRlcmF0aW9uc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyID0gdGhpcy5vbk1ha2VDdXJyZW50QmFzZWxpbmVIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25VcGxvYWRCYXNlbGluZUhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uVXBsb2FkQmFzZWxpbmVIYW5kbGVyID0gdGhpcy5vblVwbG9hZEJhc2VsaW5lSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uQW5hbHl6ZUhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uQW5hbHl6ZUhhbmRsZXIgPSB0aGlzLm9uQW5hbHl6ZUhhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vblZpZXdGdWxsTG9nc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uVmlld0Z1bGxMb2dzSGFuZGxlciA9IHRoaXMub25WaWV3RnVsbExvZ3NIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25TZWxmSGVhbEFjdGlvbkhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uU2VsZkhlYWxBY3Rpb25IYW5kbGVyID0gdGhpcy5vblNlbGZIZWFsQWN0aW9uSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLmdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLmdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXIgPSB0aGlzLmdldFNlbGZIZWFsTG9hZGluZ1N0YXRlc0hhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vbkNvbmRpdGlvbkJyYW5jaENsaWNrSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25Db25kaXRpb25CcmFuY2hDbGlja0hhbmRsZXIgPSB0aGlzLm9uQ29uZGl0aW9uQnJhbmNoQ2xpY2tIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25TdGVwQ2xpY2tIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vblN0ZXBDbGlja0hhbmRsZXIgPSB0aGlzLm9uU3RlcENsaWNrSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyKSAoaW5zdGFuY2UgYXMgYW55KS5vbkpzb25QYXRoQ29waWVkSGFuZGxlciA9IHRoaXMub25Kc29uUGF0aENvcGllZEhhbmRsZXI7XG4gICAgICBpZiAodGhpcy5vbkRvd25sb2FkSGFuZGxlcikgKGluc3RhbmNlIGFzIGFueSkub25Eb3dubG9hZEhhbmRsZXIgPSB0aGlzLm9uRG93bmxvYWRIYW5kbGVyO1xuICAgICAgaWYgKHRoaXMub25GaWxlUGF0aENvcGllZEhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uRmlsZVBhdGhDb3BpZWRIYW5kbGVyID0gdGhpcy5vbkZpbGVQYXRoQ29waWVkSGFuZGxlcjtcbiAgICAgIGlmICh0aGlzLm9uVGV4dENvcGllZEhhbmRsZXIpIChpbnN0YW5jZSBhcyBhbnkpLm9uVGV4dENvcGllZEhhbmRsZXIgPSB0aGlzLm9uVGV4dENvcGllZEhhbmRsZXI7XG4gICAgICBpZiAodGhpcy5pc1VwbG9hZGluZ0Jhc2VsaW5lICE9PSB1bmRlZmluZWQpIChpbnN0YW5jZSBhcyBhbnkpLmlzVXBsb2FkaW5nQmFzZWxpbmUgPSB0aGlzLmlzVXBsb2FkaW5nQmFzZWxpbmU7XG4gICAgICBpZiAodGhpcy5pc01ha2luZ0N1cnJlbnRCYXNlbGluZSAhPT0gdW5kZWZpbmVkKSAoaW5zdGFuY2UgYXMgYW55KS5pc01ha2luZ0N1cnJlbnRCYXNlbGluZSA9IHRoaXMuaXNNYWtpbmdDdXJyZW50QmFzZWxpbmU7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkICE9PSB1bmRlZmluZWQpIChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgPSB0aGlzLnNlbGVjdGVkSXRlcmF0aW9uSWQ7XG4gICAgICBpZiAodGhpcy5pc0xpdmUgIT09IHVuZGVmaW5lZCkgKGluc3RhbmNlIGFzIGFueSkuaXNMaXZlID0gdGhpcy5pc0xpdmU7XG4gICAgICAvLyBQYXNzIHN0ZXBOdW1iZXIgaW5wdXQgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSB1c2Ugc3RlcCdzIHN0ZXBOdW1iZXJcbiAgICAgIGlmICh0aGlzLnN0ZXBOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KS5zdGVwTnVtYmVyID0gdGhpcy5zdGVwTnVtYmVyO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLnN0ZXBOdW1iZXIgPSB0aGlzLnN0ZXBOdW1iZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFBhc3MgdGhlIHN0ZXAgb2JqZWN0IHNvIHRvZ2dsZUhlYWRlciBjYW4gdXNlIGl0XG4gICAgICBpZiAodGhpcy5zdGVwKSAoaW5zdGFuY2UgYXMgYW55KS5zdGVwID0gdGhpcy5zdGVwO1xuXG4gICAgICAvLyBVcGRhdGUgY29uZGl0aW9uLXN0ZXAgc3BlY2lmaWMgcHJvcGVydGllcyBmb3IgY2hhbmdlIGRldGVjdGlvblxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnY29uZGl0aW9uJykge1xuICAgICAgICAvLyBVcGRhdGUgYWN0aXZlQnJhbmNoU3RlcElkIGlmIGl0IGNoYW5nZWRcbiAgICAgICAgaWYgKCh0aGlzLnN0ZXAgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmFjdGl2ZUJyYW5jaFN0ZXBJZCA9ICh0aGlzLnN0ZXAgYXMgYW55KS5hY3RpdmVCcmFuY2hTdGVwSWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgYnJhbmNoZXMgaWYgdGhleSBjaGFuZ2VkXG4gICAgICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzID0gKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5icmFuY2hlcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVcGRhdGUgbmVzdGVkU3RlcHMgaWYgdGhleSBjaGFuZ2VkXG4gICAgICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkubmVzdGVkU3RlcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzID0gKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzO1xuICAgICAgICAgIGlmICgoaW5zdGFuY2UgYXMgYW55KS5jb25maWcpIHtcbiAgICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5uZXN0ZWRTdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG4gICAgICAvLyBTZXQgc2VsZkhlYWxBbmFseXNpcyB1c2luZyBoYW5kbGVyIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKHRoaXMuZ2V0U2VsZkhlYWxBbmFseXNpc0hhbmRsZXIgJiYgdGhpcy5zdGVwKSB7XG4gICAgICAgIGNvbnN0IHNlbGZIZWFsQW5hbHlzaXMgPSB0aGlzLmdldFNlbGZIZWFsQW5hbHlzaXNIYW5kbGVyKHRoaXMuc3RlcCk7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLnNlbGZIZWFsQW5hbHlzaXMgPSBzZWxmSGVhbEFuYWx5c2lzO1xuICAgICAgICBpZiAoKGluc3RhbmNlIGFzIGFueSkuY29uZmlnKSB7XG4gICAgICAgICAgKGluc3RhbmNlIGFzIGFueSkuY29uZmlnLnNlbGZIZWFsQW5hbHlzaXMgPSBzZWxmSGVhbEFuYWx5c2lzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFsc28gc2V0IGNvbmZpZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGNvbXBvbmVudHMgdGhhdCBzdGlsbCB1c2UgY29uZmlnIGlucHV0XG4gICAgICBpZiAoJ2NvbmZpZycgaW4gaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGVmZmVjdGl2ZVR5cGUgPT09ICdmaWxlLWRvd25sb2FkJykge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuc3RlcCxcbiAgICAgICAgICAgIHR5cGU6ICdmaWxlLWRvd25sb2FkJyxcbiAgICAgICAgICAgIGZpbGVOYW1lOiAoaW5zdGFuY2UgYXMgYW55KS5maWxlTmFtZSxcbiAgICAgICAgICAgIGZpbGVUeXBlOiAoaW5zdGFuY2UgYXMgYW55KS5maWxlVHlwZSxcbiAgICAgICAgICAgIGZpbGVQYXRoOiAoaW5zdGFuY2UgYXMgYW55KS5maWxlUGF0aCxcbiAgICAgICAgICAgIGRvd25sb2FkZWQ6IChpbnN0YW5jZSBhcyBhbnkpLmRvd25sb2FkZWRcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZyA9IHRoaXMuc3RlcDtcbiAgICAgICAgfVxuICAgICAgICAvLyBFbnN1cmUgc2VsZkhlYWxBbmFseXNpcyBpcyBpbmNsdWRlZCBpbiBjb25maWdcbiAgICAgICAgaWYgKChpbnN0YW5jZSBhcyBhbnkpLnNlbGZIZWFsQW5hbHlzaXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZy5zZWxmSGVhbEFuYWx5c2lzID0gKGluc3RhbmNlIGFzIGFueSkuc2VsZkhlYWxBbmFseXNpcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSBrZXkgZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgIHRoaXMucHJldmlvdXNTdGVwS2V5ID0gdGhpcy5nZXRTdGVwS2V5KHRoaXMuc3RlcCk7XG5cbiAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICBpZiAoY29tcG9uZW50UmVmLmluamVjdG9yKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlQ2RyID0gY29tcG9uZW50UmVmLmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZiwgbnVsbCk7XG4gICAgICAgIGlmIChpbnN0YW5jZUNkcikge1xuICAgICAgICAgIGluc3RhbmNlQ2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEVtaXQgcmVhZHkgZXZlbnQgYWZ0ZXIgY29tcG9uZW50IGlzIGNyZWF0ZWQgYW5kIGluaXRpYWxpemVkXG4gICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgdGhlIGNvbXBvbmVudCBpcyBmdWxseSByZW5kZXJlZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkuZW1pdCgpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIFVzZSBuZ0RvQ2hlY2sgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gbmVzdGVkIHByb3BlcnRpZXMgdGhhdCBuZ09uQ2hhbmdlcyBtaWdodCBtaXNzXG4gICAgY29uc3QgaW5zdGFuY2UgPSBTdGVwUmVuZGVyZXJDb21wb25lbnQuY29tcG9uZW50SW5zdGFuY2VzLmdldCh0aGlzLmNvbnRhaW5lcik7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gU3RlcFJlbmRlcmVyQ29tcG9uZW50LmNvbXBvbmVudFJlZnMuZ2V0KHRoaXMuY29udGFpbmVyKTtcblxuICAgIGlmIChpbnN0YW5jZSAmJiBjb21wb25lbnRSZWYgJiYgdGhpcy5zdGVwKSB7XG4gICAgICAvLyBDaGVjayBpZiBpdGVyYXRpb25zIGFyZSBub3cgYXZhaWxhYmxlIGFuZCB3ZSBuZWVkIHRvIHVwZGF0ZSBzZWxlY3RlZEl0ZXJhdGlvblxuICAgICAgaWYgKHRoaXMuc3RlcC50eXBlID09PSAnbG9vcCcgJiYgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdGlvbnMgPSAoaW5zdGFuY2UgYXMgYW55KS5pdGVyYXRpb25zIHx8IChpbnN0YW5jZSBhcyBhbnkpLmNvbmZpZz8uaXRlcmF0aW9ucyB8fCBbXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVyYXRpb25JZCA9IChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQgfHwgdGhpcy5zZWxlY3RlZEl0ZXJhdGlvbklkO1xuICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWRJdGVyYXRpb24gPSAoaW5zdGFuY2UgYXMgYW55KS5zZWxlY3RlZEl0ZXJhdGlvbjtcblxuICAgICAgICAvLyBJZiBpdGVyYXRpb25zIGFyZSBhdmFpbGFibGUsIHNlbGVjdGVkSXRlcmF0aW9uSWQgaXMgc2V0LCBidXQgc2VsZWN0ZWRJdGVyYXRpb24gaXMgbm90IHNldCBvciBkb2Vzbid0IG1hdGNoXG4gICAgICAgIGlmIChpdGVyYXRpb25zLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRJdGVyYXRpb25JZCkge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEJlU2VsZWN0ZWQgPSBpdGVyYXRpb25zLmZpbmQoKGl0ZXI6IGFueSkgPT4gaXRlci5pZCA9PT0gc2VsZWN0ZWRJdGVyYXRpb25JZCk7XG4gICAgICAgICAgaWYgKHNob3VsZEJlU2VsZWN0ZWQgJiYgY3VycmVudFNlbGVjdGVkSXRlcmF0aW9uPy5pZCAhPT0gc2VsZWN0ZWRJdGVyYXRpb25JZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb29wU3RlcFNlbGVjdGVkSXRlcmF0aW9uKGluc3RhbmNlLCBzZWxlY3RlZEl0ZXJhdGlvbklkKTtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRSZWYuaW5qZWN0b3IpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VDZHIgPSBjb21wb25lbnRSZWYuaW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmLCBudWxsKTtcbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlQ2RyKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRLZXkgPSB0aGlzLmdldFN0ZXBLZXkodGhpcy5zdGVwKTtcblxuICAgICAgLy8gSWYgc3RlcCBwcm9wZXJ0aWVzIGNoYW5nZWQgKGV2ZW4gaWYgcmVmZXJlbmNlIGRpZG4ndCksIHVwZGF0ZSB0aGUgaW5zdGFuY2VcbiAgICAgIGlmIChjdXJyZW50S2V5ICE9PSB0aGlzLnByZXZpb3VzU3RlcEtleSkge1xuICAgICAgICAvLyBXZSBuZWVkIHRoZSBwcmV2aW91cyBzdGVwIHRvIGNvbXBhcmUsIHNvIHdlJ2xsIHVwZGF0ZSBiYXNlZCBvbiBjdXJyZW50IHN0YXRlXG4gICAgICAgIC8vIENyZWF0ZSBhIG1pbmltYWwgcHJldmlvdXMgc3RlcCBmcm9tIHRoZSBpbnN0YW5jZSdzIGN1cnJlbnQgc3RhdGVcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGVwOiBhbnkgPSB7XG4gICAgICAgICAgaWQ6IChpbnN0YW5jZSBhcyBhbnkpLmlkLFxuICAgICAgICAgIHR5cGU6IChpbnN0YW5jZSBhcyBhbnkpLnR5cGUsXG4gICAgICAgICAgc3RhdHVzOiAoaW5zdGFuY2UgYXMgYW55KS5zdGF0dXMsXG4gICAgICAgICAgZHVyYXRpb246IChpbnN0YW5jZSBhcyBhbnkpLmR1cmF0aW9uLFxuICAgICAgICAgIGV4cGFuZGVkOiAoaW5zdGFuY2UgYXMgYW55KS5leHBhbmRlZCxcbiAgICAgICAgICBjaGlsZHJlbjogKGluc3RhbmNlIGFzIGFueSkuY2hpbGRyZW4sXG4gICAgICAgICAgbmVzdGVkU3RlcHM6IChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzLFxuICAgICAgICAgIHN0ZXBzOiAoaW5zdGFuY2UgYXMgYW55KS5zdGVwcyxcbiAgICAgICAgICBleGVjdXRpb25EYXRhOiAoaW5zdGFuY2UgYXMgYW55KS5leGVjdXRpb25EYXRhLFxuICAgICAgICAgIGFjdGlvbjogKGluc3RhbmNlIGFzIGFueSkuYWN0aW9uLFxuICAgICAgICAgIHRpdGxlOiAoaW5zdGFuY2UgYXMgYW55KS50aXRsZSxcbiAgICAgICAgICByZXN1bHQ6IChpbnN0YW5jZSBhcyBhbnkpLnJlc3VsdCxcbiAgICAgICAgICBtZXRob2Q6IChpbnN0YW5jZSBhcyBhbnkpLm1ldGhvZCxcbiAgICAgICAgICBlbmRwb2ludDogKGluc3RhbmNlIGFzIGFueSkuZW5kcG9pbnQsXG4gICAgICAgICAgc3RhdHVzQ29kZTogKGluc3RhbmNlIGFzIGFueSkuc3RhdHVzQ29kZSxcbiAgICAgICAgICByZXNwb25zZVRpbWU6IChpbnN0YW5jZSBhcyBhbnkpLnJlc3BvbnNlVGltZSxcbiAgICAgICAgICBhY3Rpb25zOiAoaW5zdGFuY2UgYXMgYW55KS5hY3Rpb25zLFxuICAgICAgICAgIHByb21wdDogKGluc3RhbmNlIGFzIGFueSkucHJvbXB0LFxuICAgICAgICAgIG9wdGltaXplZFJ1bjogKGluc3RhbmNlIGFzIGFueSkub3B0aW1pemVkUnVuLFxuICAgICAgICAgIGFjdGlvbkNvdW50OiAoaW5zdGFuY2UgYXMgYW55KS5hY3Rpb25Db3VudCxcbiAgICAgICAgICBpdGVyYXRpb25zOiAoaW5zdGFuY2UgYXMgYW55KS5pdGVyYXRpb25zLFxuICAgICAgICAgIHNlbGVjdGVkSXRlcmF0aW9uSWQ6IChpbnN0YW5jZSBhcyBhbnkpLnNlbGVjdGVkSXRlcmF0aW9uSWQsXG4gICAgICAgICAgYnJhbmNoZXM6IChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzLFxuICAgICAgICAgIHN0ZXBOdW1iZXI6IChpbnN0YW5jZSBhcyBhbnkpLnN0ZXBOdW1iZXIsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRJbnN0YW5jZSh0aGlzLnN0ZXAsIHByZXZpb3VzU3RlcCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNTdGVwS2V5ID0gY3VycmVudEtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iXX0=
|