@huntsman-cancer-institute/navigation 15.7.5 → 15.7.6
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/components/nav.component.mjs +3 -3
- package/esm2020/components/search-list/search-list-controller.component.mjs +3 -3
- package/fesm2015/huntsman-cancer-institute-navigation.mjs +4 -4
- package/fesm2015/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/fesm2020/huntsman-cancer-institute-navigation.mjs +4 -4
- package/fesm2020/huntsman-cancer-institute-navigation.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1166,7 +1166,7 @@ SearchListControllerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "1
|
|
|
1166
1166
|
</mat-button-toggle-group>
|
|
1167
1167
|
</div>
|
|
1168
1168
|
</div>
|
|
1169
|
-
`, isInline: true, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button:enabled{width:30%;height:2rem;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);margin:0;color:var(--white-lightest);border:1px solid var(--bluewarm-dark)}.search-button:hover{background:linear-gradient(0deg,var(--bluewarm-meddark) 0%,var(--bluewarm-dark) 100%);color:var(--white-lightest);border:1px solid var(--bluewarm-darker)}.search-button:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid var(--greywarm-dark)}.tab-title-class{display:flex;height:50px;background:lightgray}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fas fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-grey-darkest{color:var(--grey-darkest)!important}.textarea-search-box{align-content:center;width:100%;min-height:30px}.multiline-search-button{height:100%;max-width:3rem;min-width:3rem}.filter-sorting-panel{margin-top:30px}.disabled-button{opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.nav-container{display:flex!important;flex-wrap:nowrap}.no-user-select-text{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i6.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i6.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i6.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i6.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i6.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i15.RIRippleEffectDirective, selector: "[riRippleEffect]", inputs: ["hostClass", "rippleClass"] }] });
|
|
1169
|
+
`, isInline: true, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button:enabled{width:30%;height:2rem;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);margin:0;color:var(--white-lightest);border:1px solid var(--bluewarm-dark)}.search-button:hover{background:linear-gradient(0deg,var(--bluewarm-meddark) 0%,var(--bluewarm-dark) 100%);color:var(--white-lightest);border:1px solid var(--bluewarm-darker)}.search-button:disabled{width:30%;opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid var(--greywarm-dark)}.tab-title-class{display:flex;height:50px;background:lightgray}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fas fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-grey-darkest{color:var(--grey-darkest)!important}.textarea-search-box{align-content:center;width:100%;min-height:30px}.multiline-search-button{height:100%;max-width:3rem;min-width:3rem}.filter-sorting-panel{margin-top:30px}.disabled-button{opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.nav-container{display:flex!important;flex-wrap:nowrap}.no-user-select-text{-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i6.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i6.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i6.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i6.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i6.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i8.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i8.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i9.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i11.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i11.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i12.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i13.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i14.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i15.RIRippleEffectDirective, selector: "[riRippleEffect]", inputs: ["hostClass", "rippleClass"] }] });
|
|
1170
1170
|
SearchListControllerComponent = __decorate([
|
|
1171
1171
|
ComponentType("SearchListControllerComponent"),
|
|
1172
1172
|
__metadata("design:paramtypes", [ElementRef,
|
|
@@ -1595,7 +1595,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1595
1595
|
</mat-button-toggle-group>
|
|
1596
1596
|
</div>
|
|
1597
1597
|
</div>
|
|
1598
|
-
`, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button:enabled{width:30%;height:2rem;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);margin:0;color:var(--white-lightest);border:1px solid var(--bluewarm-dark)}.search-button:hover{background:linear-gradient(0deg,var(--bluewarm-meddark) 0%,var(--bluewarm-dark) 100%);color:var(--white-lightest);border:1px solid var(--bluewarm-darker)}.search-button:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid var(--greywarm-dark)}.tab-title-class{display:flex;height:50px;background:lightgray}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fas fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-grey-darkest{color:var(--grey-darkest)!important}.textarea-search-box{align-content:center;width:100%;min-height:30px}.multiline-search-button{height:100%;max-width:3rem;min-width:3rem}.filter-sorting-panel{margin-top:30px}.disabled-button{opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.nav-container{display:flex!important;flex-wrap:nowrap}.no-user-select-text{-webkit-user-select:none;user-select:none}\n"] }]
|
|
1598
|
+
`, styles: ["select{padding:.25em 0 .25em .25em;outline-offset:-1px;border:0;color:#8a9499;font-size:.8rem;background-color:#fff}.search-box{border:none;border-right:.1px solid #5B6266;padding-left:.5rem!important;color:#8a9499;font-size:.8rem}.search-options{border-radius:10px}.search-button:enabled{width:30%;height:2rem;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);margin:0;color:var(--white-lightest);border:1px solid var(--bluewarm-dark)}.search-button:hover{background:linear-gradient(0deg,var(--bluewarm-meddark) 0%,var(--bluewarm-dark) 100%);color:var(--white-lightest);border:1px solid var(--bluewarm-darker)}.search-button:disabled{width:30%;opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.global-search{align-items:center;width:100%;border-radius:2px;border:.04em solid var(--greywarm-dark)}.tab-title-class{display:flex;height:50px;background:lightgray}.tab-pane{width:min-content!important}.search-options.expanded{height:-moz-fit-content;height:fit-content}.backButton .fa-angle-double-left{color:#fff}.svg-inline--fas fa-angle-double-left{color:#fff}.sort-item{display:flex;color:#000}.sort-icon{width:1.5rem}.sort-text:hover{cursor:pointer}.hci-grey-darkest{color:var(--grey-darkest)!important}.textarea-search-box{align-content:center;width:100%;min-height:30px}.multiline-search-button{height:100%;max-width:3rem;min-width:3rem}.filter-sorting-panel{margin-top:30px}.disabled-button{opacity:.5;cursor:not-allowed;box-shadow:none;background:linear-gradient(0deg,var(--bluewarm-dark) 30%,var(--bluewarm-meddark) 100%);border:1px solid var(--bluewarm-dark);color:var(--white-lightest)}.nav-container{display:flex!important;flex-wrap:nowrap}.no-user-select-text{-webkit-user-select:none;user-select:none}\n"] }]
|
|
1599
1599
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i1.NavigationGlobalService }, { type: i2.NavigationService, decorators: [{
|
|
1600
1600
|
type: Optional
|
|
1601
1601
|
}] }, { type: i3.HttpClient }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { showTitle: [{
|
|
@@ -1650,4 +1650,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1650
1650
|
type: HostListener,
|
|
1651
1651
|
args: ["document:click", ["$event", "$event.target"]]
|
|
1652
1652
|
}] } });
|
|
1653
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRDs7OztHQUlHO0FBeWxCSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUF1RTdELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQyxJQUFJ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O2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFnckJQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIGlzRGV2TW9kZSxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQge0hjaUZpbHRlckR0bywgSGNpU29ydER0b30gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2hjaS1uZy1ncmlkLWR0b1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtOYXZDb21wb25lbnR9IGZyb20gXCIuLi9uYXYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uR2xvYmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24tZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciByZW5kZXJzIGFzIGEgaGVhZGVyIHRvIG9uZSBvciBtb3JlIHNlYXJjaCBsaXN0cy4gIE9ubHkgb25lIHNlYXJjaCBsaXN0IGNhbiBiZSBzaG93biBhdCBhIHRpbWUuXHJcbiAqIFRoZSBjb250cm9sbGVyIGZlYXR1cmVzIHRoZSBhYmlsaXR5IHRvIGhhbmRsZSBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcuICBXaXRob3V0IHRoZSBjb250cm9sbGVyLCB0aGUgc2VhcmNoIGxpc3QgY2FuIGV4aXN0LFxyXG4gKiBidXQgaXQgY2FuIG9ubHkgaGFuZGxlIHBhZ2luZyBpbnRlcm5hbGx5LlxyXG4gKi9cclxuQENvbXBvbmVudFR5cGUoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiKVxyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1zZWFyY2gtbGlzdC1jb250cm9sbGVyXCIsXHJcbiAgICBleHBvcnRBczogXCJzZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICBzZWxlY3Qge1xyXG4gICAgICAgICAgcGFkZGluZzogLjI1ZW07XHJcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwZW07XHJcbiAgICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcclxuICAgICAgICAgIGJvcmRlcjogMDtcclxuICAgICAgICAgIGNvbG9yOiAjOEE5NDk5O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5jbG9zZWFibGUge1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1ib3gge1xyXG4gICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAwLjFweCBzb2xpZCAjNUI2MjY2O1xyXG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAuNXJlbSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgY29sb3I6ICM4QTk0OTk7XHJcbiAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtb3B0aW9ucyB7XHJcbiAgICAgICAgICAvKndpZHRoOiA2NXZ3OyovXHJcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogLS0tLS0tLSBCVE4gR1JBRCBCTFVFIDEgU1RZTEVTIC0tLS0tLS0gKi9cclxuICAgICAgICAuc2VhcmNoLWJ1dHRvbjplbmFibGVkIHtcclxuICAgICAgICAgIHdpZHRoOiAzMCU7XHJcbiAgICAgICAgICBoZWlnaHQ6IDJyZW07XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgdmFyKC0tYmx1ZXdhcm0tZGFyaykgMzAlLCB2YXIoLS1ibHVld2FybS1tZWRkYXJrKSAxMDAlKTtcclxuICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYnV0dG9uOmhvdmVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1tZWRkYXJrKSAwJSwgdmFyKC0tYmx1ZXdhcm0tZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFya2VyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYnV0dG9uOmRpc2FibGVkIHtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLWRhcmspIDMwJSwgdmFyKC0tYmx1ZXdhcm0tbWVkZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAxIFNUWUxFUyAtLS0tLS0tICovXHJcblxyXG4gICAgICAgIC5nbG9iYWwtc2VhcmNoIHtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICAgICAgICAgIGJvcmRlcjogMC4wNGVtIHNvbGlkIHZhcigtLWdyZXl3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi10aXRsZS1jbGFzcyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRncmF5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi1wYW5lIHtcclxuICAgICAgICAgIHdpZHRoOiBtaW4tY29udGVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1jb250ZW50LWJvZHkge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5iYXNpYy1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5hZHZhbmNlZC1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtb3B0aW9ucy5leHBhbmRlZCB7XHJcbiAgICAgICAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsYXNzaWZpY2F0aW9uLWhlYWRlciB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ1dHRvbiB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFsaWduQnRuIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtYWxpZ25CdG4ge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kaXZpZGVyIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtc2Nyb2xsIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYmFja0J1dHRvbiAuZmEtYW5nbGUtZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN2Zy1pbmxpbmUtLWZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdCB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pdGVtIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pY29uIHtcclxuICAgICAgICAgIHdpZHRoOiAxLjVyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC10ZXh0OmhvdmVyIHtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5oY2ktZ3JleS1kYXJrZXN0IHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGV4dGFyZWEtc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubXVsdGlsaW5lLXNlYXJjaC1idXR0b24ge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAzcmVtO1xyXG4gICAgICAgICAgbWluLXdpZHRoOiAzcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZpbHRlci1zb3J0aW5nLXBhbmVsIHtcclxuICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLmRpc2FibGVkLWJ1dHRvbiB7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm5hdi1jb250YWluZXIge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubm8tdXNlci1zZWxlY3QtdGV4dHtcclxuICAgICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgYFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RpdGxlXCIgY2xhc3M9XCJkLWZsZXggcGwtMiBoY2ktZ3JleS1kYXJrZXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QmFja0J1dHRvblwiIGNsYXNzPVwibXItYXV0byBtbC0xIGJhY2tCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJiYWNrQnV0dG9uQ2xpY2tlZCgpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWJhY2stYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdFwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt7dGl0bGV9fVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtYXV0byBtci0yXCIgKGNsaWNrKT1cInRvZ2dsZVNob3dPcHRpb25zKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXJcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW9wdGlvbnNcIiBbY2xhc3MuZXhwYW5kZWRdPVwic2hvd09wdGlvbnNcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogKHNlYXJjaE9wdGlvbnNXaWR0aCAhPT0gJycpID8gc2VhcmNoT3B0aW9uc1dpZHRoIDogJ2F1dG8nfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUb2dnbGVPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci1jb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYXJkLWhlYWRlci1idXR0b24gYnRuIGNsb3NlYWJsZVwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXRvZ2dsZS1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgY2FyZC1oZWFkZXItdGV4dD48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGlzYWJsZUxvY2FsRmlsdGVyaW5nOyBlbHNlIGRpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmF2IG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwiYWN0aXZlVGFiXCIgY2xhc3MgPSBcIm5hdi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIxXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIj5CQVNJQyBTRUFSQ0g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmJhc2ljU2VhcmNoSGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBib3VuZEZpbHRlcnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlIGNoZWNrIGlmIHRoZSB0ZXh0YXJlYSBuZWVkZWQgaW4gQmFzaWMgU2VhcmNoLS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAndGV4dGFyZWEnIFwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hcIiBjbGFzcz0gXCJzZWFyY2gtYm94XCIgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyXCI+PC90ZXh0YXJlYT4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYVwiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLWNhbmNlbFwiIFtuZ0NsYXNzXT1cInsncmktYnRuLWNhbmNlbC1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIiBbZGlzYWJsZWRdID1cIiF0aGlzLmNoYW5nZWRcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKGZhbHNlKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1jbGVhci1iYXNpYy1zZWFyY2gtZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicmktYnRuLXNhdmVcIiBbbmdDbGFzc109XCJ7ICdyaS1idG4tc2F2ZS1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkIFwiIChjbGljayk9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1hcHBseS1iYXNpYy1maWx0ZXItc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIyXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkdmFuY2VkU2VhcmNoRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcyA9XCJmbGV4LWdyb3ctMVwiPkFEVkFOQ0VEIFNFQVJDSDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkU2VhcmNoLXNjcm9sbFwiIGlkPVwiYWR2YW5jZWRTZWFyY2gtc2Nyb2xsLXBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWRTZWFyY2gtcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFyYW0gb2YgdGhpcy5hZHZhbmNlZFNlYXJjaDsgaW5kZXggYXMgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydhZHZhbmNlZC1zZWFyY2gnOiAhdGhpcy5oYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyLCAnYWR2YW5jZWQtc2VhcmNoLXNjcm9sbGVkJzogdGhpcy5oYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1jbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3twYXJhbS5oZWFkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFkdmFuY2VkLXNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB0aGlzLnBhcmFtLmZpZWxkczsgaW5kZXggYXMga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdjaGVja2JveCcgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdkcm9wZG93bicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLmZpZWxkLnZhbHVlVVJMO2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB0aGlzLmZpZWxkLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlfcmF3X3ZhbHVlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHRoaXMuZmllbGQudmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nTW9kZWxdPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImZhXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJhZHZhbmNlZC1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLWNhbmNlbFwiIFtuZ0NsYXNzXT1cInsncmktYnRuLWNhbmNlbC1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIiBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZFwiIChjbGljayk9XCJzZXR1cEZpbHRlcnMoZmFsc2UpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWNsZWFyLWFkdmFuY2Utc2VhcmNoLWZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLXNhdmVcIiAgW25nQ2xhc3NdID1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZFwiIChjbGljayk9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWFwcGx5LWFkdmFuY2UtZmlsdGVyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIzXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlYXJjaFNvcnRpbmdPcHRpb25zLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIiA+U09SVElORzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmJhc2ljU2VhcmNoSGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlYXJjaFNvcnRJdGVtIG9mIHNlYXJjaFNvcnRpbmdPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgc29ydC1pdGVtXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdjb2wtNiBzb3J0LWl0ZW0nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1pY29uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LWljb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U2VhcmNoU29ydGluZy52YWx1ZT09c2VhcmNoU29ydEl0ZW0udmFsdWUgJiYgY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzp0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctY2lyY2xlLXVwIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U2VhcmNoU29ydGluZy52YWx1ZT09c2VhcmNoU29ydEl0ZW0udmFsdWUgJiYgIWN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS1kb3duIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtdGV4dCBuby11c2VyLXNlbGVjdC10ZXh0XCIgKGNsaWNrKT1cIm9uU2VhcmNoU29ydENsaWNrZWQoJGV2ZW50LCBzZWFyY2hTb3J0SXRlbSlcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtdGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWFyY2hTb3J0SXRlbS5kaXNwbGF5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8bmF2IG5nYk5hdiAjbmF2MT1cIm5nYk5hdlwiIFsoYWN0aXZlSWQpXT1cImFjdGl2ZVRhYjFcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ25hdicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMVwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCIgKm5nSWY9XCJmaWx0ZXJCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPkZJTFRFUjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbFwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygncm93IHNlYXJjaC1jb250ZW50LWJvZHknKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgYm91bmRGaWx0ZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdjb2wtNicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdpbnB1dCcgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbWF0LWZvcm0tZmllbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ21hdC1mb3JtLWZpZWxkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbWF0LWZvcm0tZmllbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJtbS9kZC95eXl5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYXNcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtbXNnLWhvbGRlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25Sb3dUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcz1cInJpLWJ0bi1jYW5jZWwgcmktYnRuLWNhbmNlbC1kaXJ0eVwiIChjbGljayk9XCJzZXR1cEZpbHRlcnModHJ1ZSlcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItZmlsdGVyLXJlc2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTRVRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItZmlsdGVyLWFwcGx5LWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTFRFUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMlwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCIgKm5nSWY9XCJzb3J0QnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluaz5TT1JUSU5HPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXIgZmlsdGVyLXNvcnRpbmctcGFuZWwnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNvcnRGaWVsZCBvZiBzb3J0QnlBbGxvd2VkRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHNvcnQtaXRlbVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnY29sLTYgc29ydC1pdGVtJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWljb25cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtaWNvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NvcnQoc29ydEZpZWxkKSAmJiBpc1NvcnRBc2Moc29ydEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzppc0ZpcnN0U29ydChzb3J0RmllbGQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS11cCBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NvcnQoc29ydEZpZWxkKSAmJiAhaXNTb3J0QXNjKHNvcnRGaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6aXNGaXJzdFNvcnQoc29ydEZpZWxkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtZG93biBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LXRleHRcIiAoY2xpY2spPVwic2V0U29ydCgkZXZlbnQsIHNvcnRGaWVsZClcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtdGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0RmllbGREaXNwbGF5KHNvcnRGaWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aCBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdjFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWItMSBnbG9iYWwtc2VhcmNoXCIgKm5nSWY9XCJpbnB1dE11bHRpbGluZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF0gPSBcIiFxdWlja1NlYXJjaEVuYWJsZWRcIiBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hcIiBjbGFzcz1cInNlYXJjaC1ib3hcIiAoa2V5dXApPVwiZG9HbG9iYWxTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxTZWFyY2hQbGFjZWhvbGRlclwiIGFyaWEtbGFiZWw9XCJxdWljay1zZWFyY2gtb3B0aW9uc1wiLz5cclxuICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInNob3dRdWlja1NlYXJjaE9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VhcmNoVHlwZVwiIChjaGFuZ2UpPVwic2VsZWN0U2VhcmNoVHlwZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1pZGVudGlmaWVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgYm9yZGVyLXJhZGl1czogMHB4OyBib3JkZXItY29sb3I6IGJsYWNrOyBcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzZWFyY2hUeXBlIG9mIHNlYXJjaFR5cGVBcnJheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAge3tzZWFyY2hUeXBlfX1cclxuICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJwbC0xIHByLTEgc2VhcmNoLWJ1dHRvblwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCIgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ0NsYXNzXSA9IFwieydkaXNhYmxlZC1idXR0b24nOiFxdWlja1NlYXJjaEVuYWJsZWR9XCIgKGNsaWNrKT1cInNlYXJjaEJ1dHRvbkNsaWNrZWQoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1xdWljay1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTEgZ2xvYmFsLXNlYXJjaFwiICpuZ0lmPVwiaW5wdXRNdWx0aWxpbmUgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgPHRleHRhcmVhIGFyaWEtbGFiZWw9XCJnbG9iYWxTZWFyY2hcIiBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtYm94IHRleHRhcmVhLXNlYXJjaC1ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtYm94IHRleHRhcmVhLXNlYXJjaC1ib3gnKVwiICAoa2V5dXApPVwiZG9HbG9iYWxTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxTZWFyY2hQbGFjZWhvbGRlclwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzaG93UXVpY2tTZWFyY2hPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlYXJjaFR5cGVcIiAoY2hhbmdlKT1cInNlbGVjdFNlYXJjaFR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaWRlbnRpZmllclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDBweDsgYm9yZGVyLWNvbG9yOiBibGFjazsgXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VhcmNoVHlwZSBvZiBzZWFyY2hUeXBlQXJyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoVHlwZX19XHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGFyaWEtbGFiZWw9XCJzZWFyY2hCdXR0b25cIiBjbGFzcz1cInBsLTEgcHItMSBzZWFyY2gtYnV0dG9uIG11bHRpbGluZS1zZWFyY2gtYnV0dG9uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtYnV0dG9uIG11bHRpbGluZS1zZWFyY2gtYnV0dG9uJylcIiBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nQ2xhc3NdID0gXCJ7J2Rpc2FibGVkLWJ1dHRvbic6IXF1aWNrU2VhcmNoRW5hYmxlZH1cIiAoY2xpY2spPVwic2VhcmNoQnV0dG9uQ2xpY2tlZCgpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXF1aWNrLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggeC1hdXRvXCIgKm5nSWY9XCJoYXNWYWxpZEZpbHRlcnMoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudmFsaWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoZmlsdGVyKVwiIGNsYXNzPVwiZC1mbGV4IHBpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tmaWx0ZXIuZmllbGR9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcy1jaXJjbGUgZmEteHNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaExpc3RzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImQtZmxleCB4LWhpZGRlbiBsaXN0LXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW25nTW9kZWxdPVwic2VsZWN0ZWRTZWFyY2hMaXN0XCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0U2VsZWN0ZWRTZWFyY2hMaXN0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgKm5nRm9yPVwibGV0IHNlYXJjaExpc3Qgb2Ygc2VhcmNoTGlzdHNcIiBtYXQtcmFpc2VkLWJ1dHRvbi10b2dnbGUgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaExpc3RcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoTGlzdH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgc2hvd1RpdGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpbnB1dE11bHRpbGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaE9wdGlvbnNXaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBmaWVsZHM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgY3VzdG9tU3R5bGVzOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaDogYW55ID0ge307XHJcbiAgQElucHV0KCkgYWR2YW5jZWRTZWFyY2g6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGZpbHRlckJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBxdWlja1NlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBhZHZhbmNlZFNlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzb3J0QnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNvcnRzOiBIY2lTb3J0RHRvW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93UXVpY2tTZWFyY2hPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0FkdmFuY2VkU2VhcmNoT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVTZWxlY3RlZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaEhlYWRlcjogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hWYWxpZGF0b3I6IGFueSB8IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgYnV0dG9uUm93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFNvcnRpbmdPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBAT3V0cHV0KCkgc2VhcmNoTGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgYWN0aXZlVGFiID0gMTtcclxuXHJcbiAgYWN0aXZlVGFiMSA9IDE7XHJcblxyXG4gIGJvdW5kRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICB1cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcblxyXG4gIGZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBhZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBzb3J0c1N1YmplY3Q6IFN1YmplY3Q8SGNpU29ydER0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpU29ydER0b1tdPihbXSk7XHJcblxyXG4gIGdsb2JhbFNlYXJjaDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QmFja0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlYXJjaExpc3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIGJhY2tCdXR0b25TdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhZHZhbmNlZFNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHBlcmZvcm1lZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRCYXNpY1NlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBkaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBmYWxzZTtcclxuICBhZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyID0gZmFsc2U7XHJcblxyXG4gIGFsbG93U2VhcmNoU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaEFsbG93ZWRTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgYWxsb3dUb2dnbGVTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgdG9nZ2xlU2hvd1N1YmplY3QkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY29nV2hlZWxDbGlja2VkU3ViamVjdCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBjaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWxsb3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFsbG93VG9nZ2xlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93VG9nZ2xlT3B0aW9uczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHF1aWNrU2VhcmNoRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHNlYXJjaFNvcnRpbmdTZWxlY3Rpb25DaGFuZ2VTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY3VycmVudFNlYXJjaFNvcnRpbmcgPSB7XCJ2YWx1ZVwiOnVuZGVmaW5lZCwgXCJkaXNwbGF5XCI6dW5kZWZpbmVkLCBcImlzQXNjXCI6dHJ1ZX07XHJcblxyXG4gIGdldEN1c3RvbVN0eWxlcyhzdHlsZXM6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgY3VzdG9tU3R5bGVPYmplY3Q6IGFueSA9IFwiXCI7XHJcbiAgICBmb3IgKGxldCBzdHlsZSBvZiBzdHlsZXMuc3BsaXQoXCIgXCIpKSB7XHJcbiAgICAgIGxldCBzdHlsZU9iamVjdCA9IHRoaXMuY3VzdG9tU3R5bGVzW3N0eWxlXTtcclxuICAgICAgaWYgKHN0eWxlT2JqZWN0KSB7XHJcbiAgICAgICAgY3VzdG9tU3R5bGVPYmplY3QgPSBPYmplY3QuYXNzaWduKHt9LCBjdXN0b21TdHlsZU9iamVjdCwgc3R5bGVPYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1c3RvbVN0eWxlT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBuYXZpZ2F0aW9uR2xvYmFsU2VydmljZTogTmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEJ1dHRvblJvd1RlbXBsYXRlKGJ1dHRvblJvd1RlbXBsYXRlKXtcclxuICAgIHRoaXMuYnV0dG9uUm93VGVtcGxhdGUgPSBidXR0b25Sb3dUZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIGRvR2xvYmFsU2VhcmNoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAoKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkudmFsdWUpLnRyaW0oKTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvLyBTZW5kIGEgbWVzc2FnZSB3aXRoIHNlYXJjaC10ZXh0XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJJbiBTZWFyY2hMaXN0Q29udHJvbGxlciBlbnRlciB3YXMgZGV0ZWN0ZWRcIik7XHJcbiAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gICAgICB0aGlzLnNlYXJjaFN0cmluZ1N1YmplY3QubmV4dCh0aGlzLmdldFNlYXJjaFN0cmluZyhzZWFyY2hTdHJpbmcpKTtcclxuICAgICAgdGhpcy5zZWFyY2hCdXR0b25DbGlja2VkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaCAhPT0gc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFzZWFyY2hTdHJpbmcgfHwgc2VhcmNoU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZCA9IChmaWx0ZXJGaWVsZCkgPyBmaWx0ZXJGaWVsZCArIFwiIG9yIFwiICsgZmllbGQgOiBmaWVsZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nZXRTZWFyY2hTdHJpbmcoc2VhcmNoU3RyaW5nKSwgdW5kZWZpbmVkLCBcIkxcIiwgdHJ1ZSldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQnV0dG9uQ2xpY2tlZCgpIHtcclxuXHJcbiAgICAvLyBWYWxpZGF0aW9uIENoZWNrOiBpZiBpbnZhbGlkLCBkbyBub3Qgc2VhcmNoLlxyXG4gICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yICYmIHRoaXMuaXNJbnZhbGlkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hbGxvd1NlYXJjaFN1YmplY3QkLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICBpZiAodmFsID09PSBcImFsbG93U2VhcmNoXCIpIHtcclxuICAgICAgICB0aGlzLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsID09PSBcInByZXZlbnRTZWFyY2hcIikge1xyXG4gICAgICAgICAgdGhpcy5hbGxvd1NlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoQWxsb3dlZFN1YmplY3QkLm5leHQodGhpcy5hbGxvd1NlYXJjaCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dTZWFyY2gpIHtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmdTdWJqZWN0Lm5leHQodGhpcy5nZXRTZWFyY2hTdHJpbmcodGhpcy5nbG9iYWxTZWFyY2gpKTtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRmllbGQ6IHN0cmluZztcclxuICAgICAgICAgIGlmICh0aGlzLnF1aWNrU2VhcmNoRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nZXRTZWFyY2hTdHJpbmcodGhpcy5nbG9iYWxTZWFyY2gpLCB1bmRlZmluZWQsIFwiTFwiLCB0cnVlKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkU2VhcmNoU3ViamVjdC5uZXh0KFwic2VhcmNoUGVyZm9ybWVkXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkU2VhcmNoTGlzdChzZWxlY3RlZFNlYXJjaExpc3Q6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3QgPSBzZWxlY3RlZFNlYXJjaExpc3Q7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UuZW1pdChzZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2VhcmNoVHlwZSgpIHtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJzZWxlY3RTZWFyY2hUeXBlXCIpO1xyXG4gICAgY29uc29sZS5kZWJ1Zyh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgfVxyXG5cclxuICBhZGRTZWFyY2hMaXN0KHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQuYWRkU2VhcmNoTGlzdDogXCIgKyB0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRpdGxlICYmIHRoaXMuc2VhcmNoTGlzdHMuaW5kZXhPZih0aXRsZSkgPT09IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTGlzdHMucHVzaCh0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoTGlzdHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0ID0gdGl0bGU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVF1aWNrU2VhcmNoKGVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKXtcclxuICAgIHRoaXMucXVpY2tTZWFyY2hFbmFibGVkID0gZW5hYmxlZDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5maWx0ZXJCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMucXVpY2tTZWFyY2hGaWVsZHMgPSBjb25maWcucXVpY2tTZWFyY2hGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWVsZHMgPSBjb25maWcuYWR2YW5jZWRTZWFyY2hGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0QnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzID0gY29uZmlnLnNvcnRCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UXVpY2tTZWFyY2hPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UXVpY2tTZWFyY2hPcHRpb25zID0gY29uZmlnLnNob3dRdWlja1NlYXJjaE9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5pbnB1dE11bHRpbGluZSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRNdWx0aWxpbmUgPSBjb25maWcuaW5wdXRNdWx0aWxpbmU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hPcHRpb25zV2lkdGgpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnNXaWR0aCA9IGNvbmZpZy5zZWFyY2hPcHRpb25zV2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hUeXBlQXJyYXkpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFR5cGVBcnJheSA9IGNvbmZpZy5zZWFyY2hUeXBlQXJyYXk7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5zZWFyY2hUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZUFycmF5W3RoaXMuc2VhcmNoVHlwZUFycmF5LmZpbmRJbmRleCh4ID0+IHggPT09IGNvbmZpZy5zZWFyY2hUeXBlKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlQXJyYXlbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlciA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IGNvbmZpZy5zZWxlY3RlZFNlYXJjaFN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaExpc3RDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UgPSBjb25maWcuc2VhcmNoTGlzdENoYW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dUaXRsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VGl0bGUgPSBjb25maWcuc2hvd1RpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd0JhY2tCdXR0b24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSBjb25maWcuc2hvd0JhY2tCdXR0b247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5iYXNpY1NlYXJjaEhlYWRlciA9IGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlciA9IGNvbmZpZy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdsb2JhbFNlYXJjaFZhbGlkYXRvcikge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yID0gY29uZmlnLmdsb2JhbFNlYXJjaFZhbGlkYXRvcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmN1c3RvbVN0eWxlcykge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tU3R5bGVzID0gY29uZmlnLmN1c3RvbVN0eWxlcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWVsZHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZmllbGRzID0gY29uZmlnLmZpZWxkcztcclxuICAgICAgICBpZiAodGhpcy5maWVsZHMpIHtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZVVSTCAmJiAhZmllbGQudmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSB2YWx1ZSBVUkwgZm9yIHRoZSBmaWVsZCBhbmQgd2lsbCBwb3B1bGF0ZSB0aGUgdmFsdWVzIG5vd1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVVSTChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaCA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaDtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqO1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udmFsdWVVUkwgJiYgIXRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tVVJMKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGNvbmZpZy5zZWFyY2hTb3J0aW5nT3B0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTb3J0aW5nT3B0aW9ucyA9IGNvbmZpZy5zZWFyY2hTb3J0aW5nT3B0aW9ucztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoY29uZmlnLmluaXRpYWxTZWFyY2hTb3J0aW5nU2VsZWN0aW9uKXtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nID0gY29uZmlnLmluaXRpYWxTZWFyY2hTb3J0aW5nU2VsZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDAgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkc1swXSkpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ2Fub3RoZXJTb3J0aW5nIEZpZWxkOicsIHRoaXMuc2VhcmNoU29ydGluZ09wdGlvbnMpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlcnMoKTtcclxuICAgIHN1cGVyLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0cyBhZnRlciBtYWtpbmcgYSBodHRwIGNhbGwgdG8gdGhlIHZhbHVlVVJMIG9mIHRoZSBmaWVsZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IGZpZWxkXHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxyXG4gICAqL1xyXG4gIGdldFZhbHVlc0Zyb21VUkwoZmllbGQ6IGFueSkge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgdXJsID0gZmllbGQudmFsdWVVUkw7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KHVybClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJ2YWx1ZXMgY29taW5nIGJhY2sgZnJvbVwiICsgZmllbGQudmFsdWVVUkwpO1xyXG4gICAgICAgICAgbGV0IHZhbHVlczogYW55W10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcodmFsdWVzKTtcclxuICAgICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmllbGQudmFsdWVzID0gdmFsdWVzO1xyXG4gICAgICAgICAgICAvL1NvcnQgdGhlIHZhbHVlcyBvZiB0aGUgZHJvcCBkb3duIGxpc3RzIGJlZmlucmVcclxuICAgICAgICAgICAgdmFsdWVzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYS5kaXNwbGF5IDwgYi5kaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB2YWx1ZXMgZm9yIFVSTFwiICsgdGhpcy5nZXRGaWVsZERpc3BsYXkoZmllbGQpKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgZGlzcGxheSBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UsIHRyeSBjb252ZXJ0aW5nIGNhbWVsIGNhc2UgdG8gd29yZHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuXHJcblxyXG4gIGdldEZpZWxkRGlzcGxheShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvL3RoaXMuYmFzaWNTZWFyY2guZmllbGRzXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQuZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZC5kaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvL2FkdmFuY2VkU2VhcmNoIGZpZWxkIGRpc3BsYXlcclxuICAgIGxldCBpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWR2YW5jZWRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGo7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZGlzcGxheTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlzcGxheTogc3RyaW5nID0gZmllbGROYW1lLnJlcGxhY2UoLyhbQS1aXSkvZywgXCIgJDFcIik7XHJcbiAgICByZXR1cm4gZGlzcGxheS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGRpc3BsYXkuc2xpY2UoMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgcHJvcGVydHkgb2YgdGhlIGZpZWxkIGlmIGl0IGV4aXN0cy4gRGVmYXVsdHMgdG8gaW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEZpZWxkVHlwZShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvL3RoaXMuYmFzaWNTZWFyY2guZmllbGRzXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQuZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZC50eXBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGk7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgajtcclxuICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS50eXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiaW5wdXRcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBmaWx0ZXJzIGJhc2VkIHVwb24gYXZhaWxhYmxlIGZpZWxkcyBmb3IgZmlsdGVyaW5nLlxyXG4gICAqL1xyXG4gIHNldHVwRmlsdGVycyhhcHBseTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmJvdW5kRmlsdGVycyA9IFtdO1xyXG4gICAgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGZpbHRlckZpZWxkIG9mIHRoaXMuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuYm91bmRGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiTFwiLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgZmlsdGVyRmllbGQgb2YgdGhpcy5hZHZhbmNlZFNlYXJjaEZpZWxkcykge1xyXG4gICAgICB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiTFwiLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5KSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIGF0IGxlYXN0IG9uZSBmaWx0ZXIgaXMgdmFsaWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBoYXNWYWxpZEZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgaWYgKGZpbHRlci52YWxpZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIGZpbHRlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7SGNpRmlsdGVyRHRvfSBmaWx0ZXJcclxuICAgKi9cclxuICBzZXRGaWx0ZXIodmFsdWU6IHN0cmluZywgZmlsdGVyOiBIY2lGaWx0ZXJEdG8pOiB2b2lkIHtcclxuICAgIGZpbHRlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKCF0aGlzLmRpc2FibGVMb2NhbEZpbHRlcmluZykge1xyXG4gICAgICAgIGZvciAobGV0IGZsIG9mIHRoaXMuYm91bmRGaWx0ZXJzKSB7XHJcbiAgICAgICAgICBpZiAoZmwudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB2YWxpZCBmaWx0ZXJzIHRvIHZhbGlkIGFuZCBjYWxsIGRhdGEuXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgIT09IDEzICYmIGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgaWYgKGZpbHRlci52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpbHRlci52YWx1ZSAmJiBmaWx0ZXIudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IFwiXCI7XHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy5ib3VuZEZpbHRlcnMpO1xyXG4gICAgLy9TZXR0aW5nIGEgZmxhZyBvbiBidXR0b25DbGljayBldmVudC5cclxuICAgIGlmIChldmVudCAmJiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZEJhc2ljU2VhcmNoU3ViamVjdC5uZXh0KFwiYmFzaWNTZWFyY2hDbGlja2VkXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdmFsaWQgYWR2YW5jZWQgc2VhcmNoIGZpbHRlcnMgdG8gdmFsaWQgYW5kIGNhbGwgZGF0YS5cclxuICAgKi9cclxuXHJcbiAgYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoZXZlbnQ/OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyA9IFtdO1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgIT09IDEzICYmIGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycykge1xyXG4gICAgICBmaWx0ZXIudmFsaWQgPSAoZmlsdGVyLnZhbHVlICYmIGZpbHRlci52YWx1ZS5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyA9IHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnM7XHJcblxyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzKTtcclxuXHJcbiAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LmtleUNvZGUgPT09IDEzIHx8IGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikpIHtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3QubmV4dChcImFkdmFuY2VkU2VhcmNoQ2xpY2tlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGZpbHRlciBmaWVsZHMgYW5kIG1ha2UgaW52YWxpZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SGNpRmlsdGVyRHRvfSBmaWx0ZXJcclxuICAgKi9cclxuICBjbGVhckZpbHRlcihmaWx0ZXI6IEhjaUZpbHRlckR0byk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvdW5kRmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5ib3VuZEZpbHRlcnNbaV0uZmllbGQgPT09IGZpbHRlci5maWVsZCkge1xyXG4gICAgICAgIHRoaXMuYm91bmRGaWx0ZXJzW2ldLnNldFZhbHVlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZEZpbHRlcnNbaV0uc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMuYm91bmRGaWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoU29ydENsaWNrZWQoJGV2ZW50OiBNb3VzZUV2ZW50LCBzZWFyY2hTb3J0SXRlbTogYW55KXtcclxuICAgIGlmKHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcudmFsdWUgPT09IHNlYXJjaFNvcnRJdGVtLnZhbHVlKXtcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy5pc0FzYyA9ICF0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc2VhcmNoU29ydEl0ZW0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoU29ydGluZ1NlbGVjdGlvbkNoYW5nZVN1YmplY3QkLm5leHQodGhpcy5jdXJyZW50U2VhcmNoU29ydGluZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUT0RPOiBJZiBzb3J0IGluIGdyb3VwLCByZXNldCBncm91cCBkYXRhLCBub3Qgb3ZlcmFsbC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRcclxuICAgKi9cclxuICBzZXRTb3J0KGV2ZW50OiBNb3VzZUV2ZW50LCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb3J0cyAmJiB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnNvcnRzWzBdLmZpZWxkID09PSBmaWVsZCkge1xyXG4gICAgICAvLyBSZWd1bGFyIGJlaGF2aW9yXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydHMgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmN0cmxLZXkgJiYgdGhpcy5zb3J0c1swXS5maWVsZCAhPT0gZmllbGQpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IFtdO1xyXG4gICAgfSBlbHNlIGlmICghZXZlbnQuY3RybEtleSkge1xyXG4gICAgICB0aGlzLnNvcnRzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc29ydHMucHVzaChuZXcgSGNpU29ydER0byhmaWVsZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGV4aXN0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICBpZiAoc29ydC5maWVsZCA9PT0gZmllbGQpIHtcclxuICAgICAgICAgIHNvcnQuYXNjID0gIXNvcnQuYXNjO1xyXG4gICAgICAgICAgZXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8oZmllbGQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0c1N1YmplY3QubmV4dCh0aGlzLnNvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIHVzZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNTb3J0KHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgIGlmIChzb3J0LmZpZWxkID09PSBzb3J0RmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIGFzY2VuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc1NvcnRBc2Moc29ydEZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgaWYgKHNvcnQuZmllbGQgPT09IHNvcnRGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiBzb3J0LmFzYztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIGZpZWxkIGlzIHRoZSBmaXJzdCBzb3J0IGZpZWxkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzRmlyc3RTb3J0KHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnNvcnRzIHx8IHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRzWzBdLmZpZWxkID09PSBzb3J0RmllbGQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG9wdGlvbnMgcG9wb3V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqL1xyXG4gIHRvZ2dsZVNob3dPcHRpb25zKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNvZ1doZWVsQ2xpY2tlZFN1YmplY3QkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsb3dUb2dnbGVTdWJqZWN0JC5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gXCJhbGxvd1RvZ2dsZVwiKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd1RvZ2dsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93VG9nZ2xlT3B0aW9ucyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJwcmV2ZW50VG9nZ2xlXCIpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dUb2dnbGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1RvZ2dsZU9wdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93T3B0aW9ucyAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1vcHRpb25zXCIpLmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgJiYgKCEodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcImJ1dHRvbi5jYXJkLWhlYWRlci1idXR0b24uYnRuLmNsb3NlYWJsZVwiKS5jb250YWlucyhldmVudC50YXJnZXQpKSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHRpdGxlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2VhcmNoLXRpdGxlXCIpO1xyXG5cclxuICAgIGxldCBvcHRpb25zOiBIVE1MRWxlbWVudCA9IHRpdGxlLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLW9wdGlvbnNcIik7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcHRpb25zLCBcImxlZnRcIiwgKHRpdGxlLm9mZnNldExlZnQgKyB0aXRsZS5vZmZzZXRXaWR0aCkgKyBcInB4XCIpO1xyXG4gICAgaWYgKCFvcHRpb25zLmNsb3Nlc3QoXCIuZHJvcGRvd24tbWVudVwiKSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG9wdGlvbnMsIFwidG9wXCIsIHRpdGxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFwicHhcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3b3VsZCBtYXRjaCBhIEhjaUZpbHRlckR0byBieSBjb21wYXJpbmcgYSBwcm92aWRlZCBmaWVsZC1uYW1lXHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGROYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzLmZpbmQoeCA9PiB4LmZpZWxkID09PSBmaWVsZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuZXIgZm9yIGJhY2sgYnV0dG9uXHJcbiAgICovXHJcblxyXG4gIGJhY2tCdXR0b25DbGlja2VkKCkge1xyXG4gICAgdGhpcy5iYWNrQnV0dG9uU3ViamVjdC5uZXh0KHRoaXMuYmFja0J1dHRvblN1YmplY3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBkb2N1bWVudCBjbGlja3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiLCBcIiRldmVudC50YXJnZXRcIl0pXHJcbiAgZG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dUb2dnbGUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGFyZ2V0LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikuaW5jbHVkZXMoXCJjbG9zZWFibGVcIikpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlU2hvd1N1YmplY3QkLm5leHQodGhpcy5zaG93T3B0aW9ucyk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGxldCBpbnZhbGlkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IpIHtcclxuICAgICAgbGV0IHNlYXJjaFN0cmluZyA9IHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHRoaXMuZ2xvYmFsU2VhcmNoKTtcclxuICAgICAgbGV0IGdsb2JhbFNlYXJjaFN0ckxpc3Q6IHN0cmluZ1tdID0gc2VhcmNoU3RyaW5nLnNwbGl0KFwiLFwiKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgaWYoIWdsb2JhbFNlYXJjaFN0ci5tYXRjaCh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvcikpIHtcclxuICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IucmVxdWlyZWQgJiYgZ2xvYmFsU2VhcmNoU3RyTGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UgJiYgIWlzTmFOKE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5taW5SYW5nZSkpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZigoIWdsb2JhbFNlYXJjaFN0ciAmJiBOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpID4gMClcclxuICAgICAgICAgICAgICB8fCAoZ2xvYmFsU2VhcmNoU3RyICYmIGdsb2JhbFNlYXJjaFN0ci5sZW5ndGggPCBOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5tYXhSYW5nZSAmJiAhaXNOYU4oTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1heFJhbmdlKSkpIHtcclxuICAgICAgICAgIGZvciAobGV0IGdsb2JhbFNlYXJjaFN0ciBvZiBnbG9iYWxTZWFyY2hTdHJMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmKGdsb2JhbFNlYXJjaFN0ciAmJiBnbG9iYWxTZWFyY2hTdHIubGVuZ3RoID4gTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1heFJhbmdlKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5wYXR0ZXJuKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFNlYXJjaFN0ci5tYXRjaCh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5wYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFN0cmluZyhzZWFyY2hTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcucmVwbGFjZSgvXFxuL2csIFwiLFwiKTtcclxuICAgIGlmIChzZWFyY2hTdHJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgc3RyTGlzdCA9IHNlYXJjaFN0cmluZy5zcGxpdChcIixcIik7XHJcbiAgICAgIHNlYXJjaFN0cmluZyA9IFwiXCI7XHJcbiAgICAgIGZvciAobGV0IHN0ciBvZiBzdHJMaXN0KSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnRyaW0oKTtcclxuICAgICAgICBzZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcgPyAoc3RyID8gc2VhcmNoU3RyaW5nICsgXCIsXCIgKyBzdHIgOiBzZWFyY2hTdHJpbmcpIDogc3RyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFN0cmluZztcclxuICB9XHJcblxyXG4gIGdldCBoYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGl2UGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkdmFuY2VkU2VhcmNoLXNjcm9sbC1wYW5lbFwiKTtcclxuICAgIHJldHVybiBkaXZQYW5lbC5zY3JvbGxIZWlnaHQgPiBkaXZQYW5lbC5jbGllbnRIZWlnaHQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
1653
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRDs7OztHQUlHO0FBMGxCSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUF1RTdELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQyxJQUFJ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O2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFnckJQLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIGlzRGV2TW9kZSxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFNpbXBsZUNoYW5nZXNcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQge0hjaUZpbHRlckR0bywgSGNpU29ydER0b30gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2hjaS1uZy1ncmlkLWR0b1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtOYXZDb21wb25lbnR9IGZyb20gXCIuLi9uYXYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uR2xvYmFsU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24tZ2xvYmFsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuXHJcbi8qKlxyXG4gKiBUaGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciByZW5kZXJzIGFzIGEgaGVhZGVyIHRvIG9uZSBvciBtb3JlIHNlYXJjaCBsaXN0cy4gIE9ubHkgb25lIHNlYXJjaCBsaXN0IGNhbiBiZSBzaG93biBhdCBhIHRpbWUuXHJcbiAqIFRoZSBjb250cm9sbGVyIGZlYXR1cmVzIHRoZSBhYmlsaXR5IHRvIGhhbmRsZSBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcuICBXaXRob3V0IHRoZSBjb250cm9sbGVyLCB0aGUgc2VhcmNoIGxpc3QgY2FuIGV4aXN0LFxyXG4gKiBidXQgaXQgY2FuIG9ubHkgaGFuZGxlIHBhZ2luZyBpbnRlcm5hbGx5LlxyXG4gKi9cclxuQENvbXBvbmVudFR5cGUoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiKVxyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1zZWFyY2gtbGlzdC1jb250cm9sbGVyXCIsXHJcbiAgICBleHBvcnRBczogXCJzZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICBzZWxlY3Qge1xyXG4gICAgICAgICAgcGFkZGluZzogLjI1ZW07XHJcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwZW07XHJcbiAgICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDtcclxuICAgICAgICAgIGJvcmRlcjogMDtcclxuICAgICAgICAgIGNvbG9yOiAjOEE5NDk5O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5jbG9zZWFibGUge1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1ib3gge1xyXG4gICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAwLjFweCBzb2xpZCAjNUI2MjY2O1xyXG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAuNXJlbSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgY29sb3I6ICM4QTk0OTk7XHJcbiAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtb3B0aW9ucyB7XHJcbiAgICAgICAgICAvKndpZHRoOiA2NXZ3OyovXHJcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogLS0tLS0tLSBCVE4gR1JBRCBCTFVFIDEgU1RZTEVTIC0tLS0tLS0gKi9cclxuICAgICAgICAuc2VhcmNoLWJ1dHRvbjplbmFibGVkIHtcclxuICAgICAgICAgIHdpZHRoOiAzMCU7XHJcbiAgICAgICAgICBoZWlnaHQ6IDJyZW07XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgdmFyKC0tYmx1ZXdhcm0tZGFyaykgMzAlLCB2YXIoLS1ibHVld2FybS1tZWRkYXJrKSAxMDAlKTtcclxuICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYnV0dG9uOmhvdmVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1tZWRkYXJrKSAwJSwgdmFyKC0tYmx1ZXdhcm0tZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFya2VyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYnV0dG9uOmRpc2FibGVkIHtcclxuXHRcdCAgd2lkdGg6IDMwJTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLWRhcmspIDMwJSwgdmFyKC0tYmx1ZXdhcm0tbWVkZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAxIFNUWUxFUyAtLS0tLS0tICovXHJcblxyXG4gICAgICAgIC5nbG9iYWwtc2VhcmNoIHtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICAgICAgICAgIGJvcmRlcjogMC4wNGVtIHNvbGlkIHZhcigtLWdyZXl3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi10aXRsZS1jbGFzcyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRncmF5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi1wYW5lIHtcclxuICAgICAgICAgIHdpZHRoOiBtaW4tY29udGVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1jb250ZW50LWJvZHkge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5iYXNpYy1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5hZHZhbmNlZC1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtb3B0aW9ucy5leHBhbmRlZCB7XHJcbiAgICAgICAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsYXNzaWZpY2F0aW9uLWhlYWRlciB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ1dHRvbiB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFsaWduQnRuIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtYWxpZ25CdG4ge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kaXZpZGVyIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtc2Nyb2xsIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYmFja0J1dHRvbiAuZmEtYW5nbGUtZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN2Zy1pbmxpbmUtLWZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdCB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pdGVtIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pY29uIHtcclxuICAgICAgICAgIHdpZHRoOiAxLjVyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC10ZXh0OmhvdmVyIHtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5oY2ktZ3JleS1kYXJrZXN0IHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGV4dGFyZWEtc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubXVsdGlsaW5lLXNlYXJjaC1idXR0b24ge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAzcmVtO1xyXG4gICAgICAgICAgbWluLXdpZHRoOiAzcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZpbHRlci1zb3J0aW5nLXBhbmVsIHtcclxuICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLmRpc2FibGVkLWJ1dHRvbiB7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm5hdi1jb250YWluZXIge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubm8tdXNlci1zZWxlY3QtdGV4dHtcclxuICAgICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgYFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RpdGxlXCIgY2xhc3M9XCJkLWZsZXggcGwtMiBoY2ktZ3JleS1kYXJrZXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QmFja0J1dHRvblwiIGNsYXNzPVwibXItYXV0byBtbC0xIGJhY2tCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJiYWNrQnV0dG9uQ2xpY2tlZCgpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWJhY2stYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdFwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt7dGl0bGV9fVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtYXV0byBtci0yXCIgKGNsaWNrKT1cInRvZ2dsZVNob3dPcHRpb25zKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXJcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW9wdGlvbnNcIiBbY2xhc3MuZXhwYW5kZWRdPVwic2hvd09wdGlvbnNcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogKHNlYXJjaE9wdGlvbnNXaWR0aCAhPT0gJycpID8gc2VhcmNoT3B0aW9uc1dpZHRoIDogJ2F1dG8nfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUb2dnbGVPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci1jb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYXJkLWhlYWRlci1idXR0b24gYnRuIGNsb3NlYWJsZVwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXRvZ2dsZS1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgY2FyZC1oZWFkZXItdGV4dD48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGlzYWJsZUxvY2FsRmlsdGVyaW5nOyBlbHNlIGRpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmF2IG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwiYWN0aXZlVGFiXCIgY2xhc3MgPSBcIm5hdi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIxXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIj5CQVNJQyBTRUFSQ0g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmJhc2ljU2VhcmNoSGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBib3VuZEZpbHRlcnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlIGNoZWNrIGlmIHRoZSB0ZXh0YXJlYSBuZWVkZWQgaW4gQmFzaWMgU2VhcmNoLS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAndGV4dGFyZWEnIFwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hcIiBjbGFzcz0gXCJzZWFyY2gtYm94XCIgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyXCI+PC90ZXh0YXJlYT4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYVwiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLWNhbmNlbFwiIFtuZ0NsYXNzXT1cInsncmktYnRuLWNhbmNlbC1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIiBbZGlzYWJsZWRdID1cIiF0aGlzLmNoYW5nZWRcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKGZhbHNlKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1jbGVhci1iYXNpYy1zZWFyY2gtZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicmktYnRuLXNhdmVcIiBbbmdDbGFzc109XCJ7ICdyaS1idG4tc2F2ZS1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkIFwiIChjbGljayk9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1hcHBseS1iYXNpYy1maWx0ZXItc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIyXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkdmFuY2VkU2VhcmNoRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcyA9XCJmbGV4LWdyb3ctMVwiPkFEVkFOQ0VEIFNFQVJDSDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkU2VhcmNoLXNjcm9sbFwiIGlkPVwiYWR2YW5jZWRTZWFyY2gtc2Nyb2xsLXBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWRTZWFyY2gtcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFyYW0gb2YgdGhpcy5hZHZhbmNlZFNlYXJjaDsgaW5kZXggYXMgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydhZHZhbmNlZC1zZWFyY2gnOiAhdGhpcy5oYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyLCAnYWR2YW5jZWQtc2VhcmNoLXNjcm9sbGVkJzogdGhpcy5oYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1jbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3twYXJhbS5oZWFkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFkdmFuY2VkLXNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB0aGlzLnBhcmFtLmZpZWxkczsgaW5kZXggYXMga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdjaGVja2JveCcgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdkcm9wZG93bicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLmZpZWxkLnZhbHVlVVJMO2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB0aGlzLmZpZWxkLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlfcmF3X3ZhbHVlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHRoaXMuZmllbGQudmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nTW9kZWxdPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImZhXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJhZHZhbmNlZC1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLWNhbmNlbFwiIFtuZ0NsYXNzXT1cInsncmktYnRuLWNhbmNlbC1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIiBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZFwiIChjbGljayk9XCJzZXR1cEZpbHRlcnMoZmFsc2UpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWNsZWFyLWFkdmFuY2Utc2VhcmNoLWZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLXNhdmVcIiAgW25nQ2xhc3NdID1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZFwiIChjbGljayk9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWFwcGx5LWFkdmFuY2UtZmlsdGVyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIzXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlYXJjaFNvcnRpbmdPcHRpb25zLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIiA+U09SVElORzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmJhc2ljU2VhcmNoSGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlYXJjaFNvcnRJdGVtIG9mIHNlYXJjaFNvcnRpbmdPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgc29ydC1pdGVtXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdjb2wtNiBzb3J0LWl0ZW0nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1pY29uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LWljb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U2VhcmNoU29ydGluZy52YWx1ZT09c2VhcmNoU29ydEl0ZW0udmFsdWUgJiYgY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzp0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctY2lyY2xlLXVwIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U2VhcmNoU29ydGluZy52YWx1ZT09c2VhcmNoU29ydEl0ZW0udmFsdWUgJiYgIWN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS1kb3duIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtdGV4dCBuby11c2VyLXNlbGVjdC10ZXh0XCIgKGNsaWNrKT1cIm9uU2VhcmNoU29ydENsaWNrZWQoJGV2ZW50LCBzZWFyY2hTb3J0SXRlbSlcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtdGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWFyY2hTb3J0SXRlbS5kaXNwbGF5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8bmF2IG5nYk5hdiAjbmF2MT1cIm5nYk5hdlwiIFsoYWN0aXZlSWQpXT1cImFjdGl2ZVRhYjFcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ25hdicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMVwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCIgKm5nSWY9XCJmaWx0ZXJCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPkZJTFRFUjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbFwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygncm93IHNlYXJjaC1jb250ZW50LWJvZHknKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgYm91bmRGaWx0ZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdjb2wtNicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdpbnB1dCcgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbWF0LWZvcm0tZmllbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ21hdC1mb3JtLWZpZWxkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbWF0LWZvcm0tZmllbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJtbS9kZC95eXl5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYXNcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtbXNnLWhvbGRlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25Sb3dUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcz1cInJpLWJ0bi1jYW5jZWwgcmktYnRuLWNhbmNlbC1kaXJ0eVwiIChjbGljayk9XCJzZXR1cEZpbHRlcnModHJ1ZSlcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItZmlsdGVyLXJlc2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTRVRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItZmlsdGVyLWFwcGx5LWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTFRFUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMlwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCIgKm5nSWY9XCJzb3J0QnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluaz5TT1JUSU5HPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXIgZmlsdGVyLXNvcnRpbmctcGFuZWwnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNvcnRGaWVsZCBvZiBzb3J0QnlBbGxvd2VkRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHNvcnQtaXRlbVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnY29sLTYgc29ydC1pdGVtJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWljb25cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtaWNvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NvcnQoc29ydEZpZWxkKSAmJiBpc1NvcnRBc2Moc29ydEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzppc0ZpcnN0U29ydChzb3J0RmllbGQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS11cCBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NvcnQoc29ydEZpZWxkKSAmJiAhaXNTb3J0QXNjKHNvcnRGaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6aXNGaXJzdFNvcnQoc29ydEZpZWxkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtZG93biBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LXRleHRcIiAoY2xpY2spPVwic2V0U29ydCgkZXZlbnQsIHNvcnRGaWVsZClcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtdGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0RmllbGREaXNwbGF5KHNvcnRGaWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aCBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdjFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWItMSBnbG9iYWwtc2VhcmNoXCIgKm5nSWY9XCJpbnB1dE11bHRpbGluZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF0gPSBcIiFxdWlja1NlYXJjaEVuYWJsZWRcIiBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hcIiBjbGFzcz1cInNlYXJjaC1ib3hcIiAoa2V5dXApPVwiZG9HbG9iYWxTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxTZWFyY2hQbGFjZWhvbGRlclwiIGFyaWEtbGFiZWw9XCJxdWljay1zZWFyY2gtb3B0aW9uc1wiLz5cclxuICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInNob3dRdWlja1NlYXJjaE9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VhcmNoVHlwZVwiIChjaGFuZ2UpPVwic2VsZWN0U2VhcmNoVHlwZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1pZGVudGlmaWVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgYm9yZGVyLXJhZGl1czogMHB4OyBib3JkZXItY29sb3I6IGJsYWNrOyBcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzZWFyY2hUeXBlIG9mIHNlYXJjaFR5cGVBcnJheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAge3tzZWFyY2hUeXBlfX1cclxuICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJwbC0xIHByLTEgc2VhcmNoLWJ1dHRvblwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCIgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ0NsYXNzXSA9IFwieydkaXNhYmxlZC1idXR0b24nOiFxdWlja1NlYXJjaEVuYWJsZWR9XCIgKGNsaWNrKT1cInNlYXJjaEJ1dHRvbkNsaWNrZWQoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1xdWljay1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTEgZ2xvYmFsLXNlYXJjaFwiICpuZ0lmPVwiaW5wdXRNdWx0aWxpbmUgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgPHRleHRhcmVhIGFyaWEtbGFiZWw9XCJnbG9iYWxTZWFyY2hcIiBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtYm94IHRleHRhcmVhLXNlYXJjaC1ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtYm94IHRleHRhcmVhLXNlYXJjaC1ib3gnKVwiICAoa2V5dXApPVwiZG9HbG9iYWxTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxTZWFyY2hQbGFjZWhvbGRlclwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzaG93UXVpY2tTZWFyY2hPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlYXJjaFR5cGVcIiAoY2hhbmdlKT1cInNlbGVjdFNlYXJjaFR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaWRlbnRpZmllclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDBweDsgYm9yZGVyLWNvbG9yOiBibGFjazsgXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VhcmNoVHlwZSBvZiBzZWFyY2hUeXBlQXJyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoVHlwZX19XHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGFyaWEtbGFiZWw9XCJzZWFyY2hCdXR0b25cIiBjbGFzcz1cInBsLTEgcHItMSBzZWFyY2gtYnV0dG9uIG11bHRpbGluZS1zZWFyY2gtYnV0dG9uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtYnV0dG9uIG11bHRpbGluZS1zZWFyY2gtYnV0dG9uJylcIiBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nQ2xhc3NdID0gXCJ7J2Rpc2FibGVkLWJ1dHRvbic6IXF1aWNrU2VhcmNoRW5hYmxlZH1cIiAoY2xpY2spPVwic2VhcmNoQnV0dG9uQ2xpY2tlZCgpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXF1aWNrLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggeC1hdXRvXCIgKm5nSWY9XCJoYXNWYWxpZEZpbHRlcnMoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudmFsaWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoZmlsdGVyKVwiIGNsYXNzPVwiZC1mbGV4IHBpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tmaWx0ZXIuZmllbGR9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcy1jaXJjbGUgZmEteHNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaExpc3RzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImQtZmxleCB4LWhpZGRlbiBsaXN0LXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW25nTW9kZWxdPVwic2VsZWN0ZWRTZWFyY2hMaXN0XCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0U2VsZWN0ZWRTZWFyY2hMaXN0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgKm5nRm9yPVwibGV0IHNlYXJjaExpc3Qgb2Ygc2VhcmNoTGlzdHNcIiBtYXQtcmFpc2VkLWJ1dHRvbi10b2dnbGUgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaExpc3RcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoTGlzdH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgc2hvd1RpdGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpbnB1dE11bHRpbGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaE9wdGlvbnNXaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBmaWVsZHM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgY3VzdG9tU3R5bGVzOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaDogYW55ID0ge307XHJcbiAgQElucHV0KCkgYWR2YW5jZWRTZWFyY2g6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGZpbHRlckJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBxdWlja1NlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBhZHZhbmNlZFNlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzb3J0QnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNvcnRzOiBIY2lTb3J0RHRvW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93UXVpY2tTZWFyY2hPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0FkdmFuY2VkU2VhcmNoT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVTZWxlY3RlZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaEhlYWRlcjogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hWYWxpZGF0b3I6IGFueSB8IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgYnV0dG9uUm93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFNvcnRpbmdPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBAT3V0cHV0KCkgc2VhcmNoTGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgYWN0aXZlVGFiID0gMTtcclxuXHJcbiAgYWN0aXZlVGFiMSA9IDE7XHJcblxyXG4gIGJvdW5kRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICB1cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcblxyXG4gIGZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBhZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBzb3J0c1N1YmplY3Q6IFN1YmplY3Q8SGNpU29ydER0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpU29ydER0b1tdPihbXSk7XHJcblxyXG4gIGdsb2JhbFNlYXJjaDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QmFja0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlYXJjaExpc3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIGJhY2tCdXR0b25TdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhZHZhbmNlZFNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHBlcmZvcm1lZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRCYXNpY1NlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBkaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBmYWxzZTtcclxuICBhZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyID0gZmFsc2U7XHJcblxyXG4gIGFsbG93U2VhcmNoU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaEFsbG93ZWRTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgYWxsb3dUb2dnbGVTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgdG9nZ2xlU2hvd1N1YmplY3QkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY29nV2hlZWxDbGlja2VkU3ViamVjdCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBjaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWxsb3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFsbG93VG9nZ2xlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93VG9nZ2xlT3B0aW9uczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHF1aWNrU2VhcmNoRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHNlYXJjaFNvcnRpbmdTZWxlY3Rpb25DaGFuZ2VTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY3VycmVudFNlYXJjaFNvcnRpbmcgPSB7XCJ2YWx1ZVwiOnVuZGVmaW5lZCwgXCJkaXNwbGF5XCI6dW5kZWZpbmVkLCBcImlzQXNjXCI6dHJ1ZX07XHJcblxyXG4gIGdldEN1c3RvbVN0eWxlcyhzdHlsZXM6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgY3VzdG9tU3R5bGVPYmplY3Q6IGFueSA9IFwiXCI7XHJcbiAgICBmb3IgKGxldCBzdHlsZSBvZiBzdHlsZXMuc3BsaXQoXCIgXCIpKSB7XHJcbiAgICAgIGxldCBzdHlsZU9iamVjdCA9IHRoaXMuY3VzdG9tU3R5bGVzW3N0eWxlXTtcclxuICAgICAgaWYgKHN0eWxlT2JqZWN0KSB7XHJcbiAgICAgICAgY3VzdG9tU3R5bGVPYmplY3QgPSBPYmplY3QuYXNzaWduKHt9LCBjdXN0b21TdHlsZU9iamVjdCwgc3R5bGVPYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1c3RvbVN0eWxlT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBuYXZpZ2F0aW9uR2xvYmFsU2VydmljZTogTmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEJ1dHRvblJvd1RlbXBsYXRlKGJ1dHRvblJvd1RlbXBsYXRlKXtcclxuICAgIHRoaXMuYnV0dG9uUm93VGVtcGxhdGUgPSBidXR0b25Sb3dUZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIGRvR2xvYmFsU2VhcmNoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAoKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkudmFsdWUpLnRyaW0oKTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvLyBTZW5kIGEgbWVzc2FnZSB3aXRoIHNlYXJjaC10ZXh0XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJJbiBTZWFyY2hMaXN0Q29udHJvbGxlciBlbnRlciB3YXMgZGV0ZWN0ZWRcIik7XHJcbiAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gICAgICB0aGlzLnNlYXJjaFN0cmluZ1N1YmplY3QubmV4dCh0aGlzLmdldFNlYXJjaFN0cmluZyhzZWFyY2hTdHJpbmcpKTtcclxuICAgICAgdGhpcy5zZWFyY2hCdXR0b25DbGlja2VkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaCAhPT0gc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFzZWFyY2hTdHJpbmcgfHwgc2VhcmNoU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZCA9IChmaWx0ZXJGaWVsZCkgPyBmaWx0ZXJGaWVsZCArIFwiIG9yIFwiICsgZmllbGQgOiBmaWVsZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nZXRTZWFyY2hTdHJpbmcoc2VhcmNoU3RyaW5nKSwgdW5kZWZpbmVkLCBcIkxcIiwgdHJ1ZSldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQnV0dG9uQ2xpY2tlZCgpIHtcclxuXHJcbiAgICAvLyBWYWxpZGF0aW9uIENoZWNrOiBpZiBpbnZhbGlkLCBkbyBub3Qgc2VhcmNoLlxyXG4gICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yICYmIHRoaXMuaXNJbnZhbGlkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hbGxvd1NlYXJjaFN1YmplY3QkLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICBpZiAodmFsID09PSBcImFsbG93U2VhcmNoXCIpIHtcclxuICAgICAgICB0aGlzLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsID09PSBcInByZXZlbnRTZWFyY2hcIikge1xyXG4gICAgICAgICAgdGhpcy5hbGxvd1NlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoQWxsb3dlZFN1YmplY3QkLm5leHQodGhpcy5hbGxvd1NlYXJjaCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dTZWFyY2gpIHtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmdTdWJqZWN0Lm5leHQodGhpcy5nZXRTZWFyY2hTdHJpbmcodGhpcy5nbG9iYWxTZWFyY2gpKTtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRmllbGQ6IHN0cmluZztcclxuICAgICAgICAgIGlmICh0aGlzLnF1aWNrU2VhcmNoRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nZXRTZWFyY2hTdHJpbmcodGhpcy5nbG9iYWxTZWFyY2gpLCB1bmRlZmluZWQsIFwiTFwiLCB0cnVlKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkU2VhcmNoU3ViamVjdC5uZXh0KFwic2VhcmNoUGVyZm9ybWVkXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkU2VhcmNoTGlzdChzZWxlY3RlZFNlYXJjaExpc3Q6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3QgPSBzZWxlY3RlZFNlYXJjaExpc3Q7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UuZW1pdChzZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2VhcmNoVHlwZSgpIHtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJzZWxlY3RTZWFyY2hUeXBlXCIpO1xyXG4gICAgY29uc29sZS5kZWJ1Zyh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgfVxyXG5cclxuICBhZGRTZWFyY2hMaXN0KHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQuYWRkU2VhcmNoTGlzdDogXCIgKyB0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRpdGxlICYmIHRoaXMuc2VhcmNoTGlzdHMuaW5kZXhPZih0aXRsZSkgPT09IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTGlzdHMucHVzaCh0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoTGlzdHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0ID0gdGl0bGU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVF1aWNrU2VhcmNoKGVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKXtcclxuICAgIHRoaXMucXVpY2tTZWFyY2hFbmFibGVkID0gZW5hYmxlZDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5maWx0ZXJCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMucXVpY2tTZWFyY2hGaWVsZHMgPSBjb25maWcucXVpY2tTZWFyY2hGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWVsZHMgPSBjb25maWcuYWR2YW5jZWRTZWFyY2hGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0QnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzID0gY29uZmlnLnNvcnRCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UXVpY2tTZWFyY2hPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UXVpY2tTZWFyY2hPcHRpb25zID0gY29uZmlnLnNob3dRdWlja1NlYXJjaE9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5pbnB1dE11bHRpbGluZSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRNdWx0aWxpbmUgPSBjb25maWcuaW5wdXRNdWx0aWxpbmU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hPcHRpb25zV2lkdGgpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnNXaWR0aCA9IGNvbmZpZy5zZWFyY2hPcHRpb25zV2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hUeXBlQXJyYXkpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFR5cGVBcnJheSA9IGNvbmZpZy5zZWFyY2hUeXBlQXJyYXk7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5zZWFyY2hUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZUFycmF5W3RoaXMuc2VhcmNoVHlwZUFycmF5LmZpbmRJbmRleCh4ID0+IHggPT09IGNvbmZpZy5zZWFyY2hUeXBlKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlQXJyYXlbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlciA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IGNvbmZpZy5zZWxlY3RlZFNlYXJjaFN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaExpc3RDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UgPSBjb25maWcuc2VhcmNoTGlzdENoYW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dUaXRsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VGl0bGUgPSBjb25maWcuc2hvd1RpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd0JhY2tCdXR0b24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSBjb25maWcuc2hvd0JhY2tCdXR0b247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5iYXNpY1NlYXJjaEhlYWRlciA9IGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlciA9IGNvbmZpZy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdsb2JhbFNlYXJjaFZhbGlkYXRvcikge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yID0gY29uZmlnLmdsb2JhbFNlYXJjaFZhbGlkYXRvcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmN1c3RvbVN0eWxlcykge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tU3R5bGVzID0gY29uZmlnLmN1c3RvbVN0eWxlcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWVsZHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZmllbGRzID0gY29uZmlnLmZpZWxkcztcclxuICAgICAgICBpZiAodGhpcy5maWVsZHMpIHtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZVVSTCAmJiAhZmllbGQudmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSB2YWx1ZSBVUkwgZm9yIHRoZSBmaWVsZCBhbmQgd2lsbCBwb3B1bGF0ZSB0aGUgdmFsdWVzIG5vd1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVVSTChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaCA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaDtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqO1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udmFsdWVVUkwgJiYgIXRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tVVJMKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGNvbmZpZy5zZWFyY2hTb3J0aW5nT3B0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTb3J0aW5nT3B0aW9ucyA9IGNvbmZpZy5zZWFyY2hTb3J0aW5nT3B0aW9ucztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoY29uZmlnLmluaXRpYWxTZWFyY2hTb3J0aW5nU2VsZWN0aW9uKXtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nID0gY29uZmlnLmluaXRpYWxTZWFyY2hTb3J0aW5nU2VsZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDAgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkc1swXSkpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ2Fub3RoZXJTb3J0aW5nIEZpZWxkOicsIHRoaXMuc2VhcmNoU29ydGluZ09wdGlvbnMpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlcnMoKTtcclxuICAgIHN1cGVyLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0cyBhZnRlciBtYWtpbmcgYSBodHRwIGNhbGwgdG8gdGhlIHZhbHVlVVJMIG9mIHRoZSBmaWVsZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IGZpZWxkXHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxyXG4gICAqL1xyXG4gIGdldFZhbHVlc0Zyb21VUkwoZmllbGQ6IGFueSkge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgdXJsID0gZmllbGQudmFsdWVVUkw7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KHVybClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJ2YWx1ZXMgY29taW5nIGJhY2sgZnJvbVwiICsgZmllbGQudmFsdWVVUkwpO1xyXG4gICAgICAgICAgbGV0IHZhbHVlczogYW55W10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcodmFsdWVzKTtcclxuICAgICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmllbGQudmFsdWVzID0gdmFsdWVzO1xyXG4gICAgICAgICAgICAvL1NvcnQgdGhlIHZhbHVlcyBvZiB0aGUgZHJvcCBkb3duIGxpc3RzIGJlZmlucmVcclxuICAgICAgICAgICAgdmFsdWVzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYS5kaXNwbGF5IDwgYi5kaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB2YWx1ZXMgZm9yIFVSTFwiICsgdGhpcy5nZXRGaWVsZERpc3BsYXkoZmllbGQpKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgZGlzcGxheSBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UsIHRyeSBjb252ZXJ0aW5nIGNhbWVsIGNhc2UgdG8gd29yZHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuXHJcblxyXG4gIGdldEZpZWxkRGlzcGxheShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvL3RoaXMuYmFzaWNTZWFyY2guZmllbGRzXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQuZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZC5kaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvL2FkdmFuY2VkU2VhcmNoIGZpZWxkIGRpc3BsYXlcclxuICAgIGxldCBpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWR2YW5jZWRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGo7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZGlzcGxheTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlzcGxheTogc3RyaW5nID0gZmllbGROYW1lLnJlcGxhY2UoLyhbQS1aXSkvZywgXCIgJDFcIik7XHJcbiAgICByZXR1cm4gZGlzcGxheS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGRpc3BsYXkuc2xpY2UoMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgcHJvcGVydHkgb2YgdGhlIGZpZWxkIGlmIGl0IGV4aXN0cy4gRGVmYXVsdHMgdG8gaW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEZpZWxkVHlwZShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvL3RoaXMuYmFzaWNTZWFyY2guZmllbGRzXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQuZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZC50eXBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGk7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgajtcclxuICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS50eXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiaW5wdXRcIjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBmaWx0ZXJzIGJhc2VkIHVwb24gYXZhaWxhYmxlIGZpZWxkcyBmb3IgZmlsdGVyaW5nLlxyXG4gICAqL1xyXG4gIHNldHVwRmlsdGVycyhhcHBseTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmJvdW5kRmlsdGVycyA9IFtdO1xyXG4gICAgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGZpbHRlckZpZWxkIG9mIHRoaXMuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuYm91bmRGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiTFwiLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgZmlsdGVyRmllbGQgb2YgdGhpcy5hZHZhbmNlZFNlYXJjaEZpZWxkcykge1xyXG4gICAgICB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiTFwiLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5KSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIGF0IGxlYXN0IG9uZSBmaWx0ZXIgaXMgdmFsaWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBoYXNWYWxpZEZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgaWYgKGZpbHRlci52YWxpZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIGZpbHRlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7SGNpRmlsdGVyRHRvfSBmaWx0ZXJcclxuICAgKi9cclxuICBzZXRGaWx0ZXIodmFsdWU6IHN0cmluZywgZmlsdGVyOiBIY2lGaWx0ZXJEdG8pOiB2b2lkIHtcclxuICAgIGZpbHRlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKCF0aGlzLmRpc2FibGVMb2NhbEZpbHRlcmluZykge1xyXG4gICAgICAgIGZvciAobGV0IGZsIG9mIHRoaXMuYm91bmRGaWx0ZXJzKSB7XHJcbiAgICAgICAgICBpZiAoZmwudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB2YWxpZCBmaWx0ZXJzIHRvIHZhbGlkIGFuZCBjYWxsIGRhdGEuXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgIT09IDEzICYmIGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgaWYgKGZpbHRlci52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpbHRlci52YWx1ZSAmJiBmaWx0ZXIudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IFwiXCI7XHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy5ib3VuZEZpbHRlcnMpO1xyXG4gICAgLy9TZXR0aW5nIGEgZmxhZyBvbiBidXR0b25DbGljayBldmVudC5cclxuICAgIGlmIChldmVudCAmJiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZEJhc2ljU2VhcmNoU3ViamVjdC5uZXh0KFwiYmFzaWNTZWFyY2hDbGlja2VkXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdmFsaWQgYWR2YW5jZWQgc2VhcmNoIGZpbHRlcnMgdG8gdmFsaWQgYW5kIGNhbGwgZGF0YS5cclxuICAgKi9cclxuXHJcbiAgYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoZXZlbnQ/OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyA9IFtdO1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgIT09IDEzICYmIGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycykge1xyXG4gICAgICBmaWx0ZXIudmFsaWQgPSAoZmlsdGVyLnZhbHVlICYmIGZpbHRlci52YWx1ZS5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyA9IHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnM7XHJcblxyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzKTtcclxuXHJcbiAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LmtleUNvZGUgPT09IDEzIHx8IGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikpIHtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3QubmV4dChcImFkdmFuY2VkU2VhcmNoQ2xpY2tlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGZpbHRlciBmaWVsZHMgYW5kIG1ha2UgaW52YWxpZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SGNpRmlsdGVyRHRvfSBmaWx0ZXJcclxuICAgKi9cclxuICBjbGVhckZpbHRlcihmaWx0ZXI6IEhjaUZpbHRlckR0byk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvdW5kRmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5ib3VuZEZpbHRlcnNbaV0uZmllbGQgPT09IGZpbHRlci5maWVsZCkge1xyXG4gICAgICAgIHRoaXMuYm91bmRGaWx0ZXJzW2ldLnNldFZhbHVlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZEZpbHRlcnNbaV0uc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMuYm91bmRGaWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoU29ydENsaWNrZWQoJGV2ZW50OiBNb3VzZUV2ZW50LCBzZWFyY2hTb3J0SXRlbTogYW55KXtcclxuICAgIGlmKHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcudmFsdWUgPT09IHNlYXJjaFNvcnRJdGVtLnZhbHVlKXtcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy5pc0FzYyA9ICF0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc2VhcmNoU29ydEl0ZW0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoU29ydGluZ1NlbGVjdGlvbkNoYW5nZVN1YmplY3QkLm5leHQodGhpcy5jdXJyZW50U2VhcmNoU29ydGluZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUT0RPOiBJZiBzb3J0IGluIGdyb3VwLCByZXNldCBncm91cCBkYXRhLCBub3Qgb3ZlcmFsbC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRcclxuICAgKi9cclxuICBzZXRTb3J0KGV2ZW50OiBNb3VzZUV2ZW50LCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb3J0cyAmJiB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnNvcnRzWzBdLmZpZWxkID09PSBmaWVsZCkge1xyXG4gICAgICAvLyBSZWd1bGFyIGJlaGF2aW9yXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydHMgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmN0cmxLZXkgJiYgdGhpcy5zb3J0c1swXS5maWVsZCAhPT0gZmllbGQpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IFtdO1xyXG4gICAgfSBlbHNlIGlmICghZXZlbnQuY3RybEtleSkge1xyXG4gICAgICB0aGlzLnNvcnRzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc29ydHMucHVzaChuZXcgSGNpU29ydER0byhmaWVsZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGV4aXN0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICBpZiAoc29ydC5maWVsZCA9PT0gZmllbGQpIHtcclxuICAgICAgICAgIHNvcnQuYXNjID0gIXNvcnQuYXNjO1xyXG4gICAgICAgICAgZXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8oZmllbGQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0c1N1YmplY3QubmV4dCh0aGlzLnNvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIHVzZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNTb3J0KHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgIGlmIChzb3J0LmZpZWxkID09PSBzb3J0RmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIGFzY2VuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc1NvcnRBc2Moc29ydEZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgaWYgKHNvcnQuZmllbGQgPT09IHNvcnRGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiBzb3J0LmFzYztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIGZpZWxkIGlzIHRoZSBmaXJzdCBzb3J0IGZpZWxkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzRmlyc3RTb3J0KHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnNvcnRzIHx8IHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRzWzBdLmZpZWxkID09PSBzb3J0RmllbGQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG9wdGlvbnMgcG9wb3V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqL1xyXG4gIHRvZ2dsZVNob3dPcHRpb25zKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNvZ1doZWVsQ2xpY2tlZFN1YmplY3QkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsb3dUb2dnbGVTdWJqZWN0JC5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gXCJhbGxvd1RvZ2dsZVwiKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd1RvZ2dsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93VG9nZ2xlT3B0aW9ucyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJwcmV2ZW50VG9nZ2xlXCIpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dUb2dnbGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1RvZ2dsZU9wdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93T3B0aW9ucyAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1vcHRpb25zXCIpLmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgJiYgKCEodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcImJ1dHRvbi5jYXJkLWhlYWRlci1idXR0b24uYnRuLmNsb3NlYWJsZVwiKS5jb250YWlucyhldmVudC50YXJnZXQpKSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHRpdGxlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2VhcmNoLXRpdGxlXCIpO1xyXG5cclxuICAgIGxldCBvcHRpb25zOiBIVE1MRWxlbWVudCA9IHRpdGxlLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLW9wdGlvbnNcIik7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcHRpb25zLCBcImxlZnRcIiwgKHRpdGxlLm9mZnNldExlZnQgKyB0aXRsZS5vZmZzZXRXaWR0aCkgKyBcInB4XCIpO1xyXG4gICAgaWYgKCFvcHRpb25zLmNsb3Nlc3QoXCIuZHJvcGRvd24tbWVudVwiKSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG9wdGlvbnMsIFwidG9wXCIsIHRpdGxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFwicHhcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3b3VsZCBtYXRjaCBhIEhjaUZpbHRlckR0byBieSBjb21wYXJpbmcgYSBwcm92aWRlZCBmaWVsZC1uYW1lXHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGROYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzLmZpbmQoeCA9PiB4LmZpZWxkID09PSBmaWVsZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuZXIgZm9yIGJhY2sgYnV0dG9uXHJcbiAgICovXHJcblxyXG4gIGJhY2tCdXR0b25DbGlja2VkKCkge1xyXG4gICAgdGhpcy5iYWNrQnV0dG9uU3ViamVjdC5uZXh0KHRoaXMuYmFja0J1dHRvblN1YmplY3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBkb2N1bWVudCBjbGlja3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiLCBcIiRldmVudC50YXJnZXRcIl0pXHJcbiAgZG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dUb2dnbGUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGFyZ2V0LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikuaW5jbHVkZXMoXCJjbG9zZWFibGVcIikpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlU2hvd1N1YmplY3QkLm5leHQodGhpcy5zaG93T3B0aW9ucyk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGxldCBpbnZhbGlkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IpIHtcclxuICAgICAgbGV0IHNlYXJjaFN0cmluZyA9IHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHRoaXMuZ2xvYmFsU2VhcmNoKTtcclxuICAgICAgbGV0IGdsb2JhbFNlYXJjaFN0ckxpc3Q6IHN0cmluZ1tdID0gc2VhcmNoU3RyaW5nLnNwbGl0KFwiLFwiKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgaWYoIWdsb2JhbFNlYXJjaFN0ci5tYXRjaCh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvcikpIHtcclxuICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IucmVxdWlyZWQgJiYgZ2xvYmFsU2VhcmNoU3RyTGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UgJiYgIWlzTmFOKE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5taW5SYW5nZSkpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZigoIWdsb2JhbFNlYXJjaFN0ciAmJiBOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpID4gMClcclxuICAgICAgICAgICAgICB8fCAoZ2xvYmFsU2VhcmNoU3RyICYmIGdsb2JhbFNlYXJjaFN0ci5sZW5ndGggPCBOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5tYXhSYW5nZSAmJiAhaXNOYU4oTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1heFJhbmdlKSkpIHtcclxuICAgICAgICAgIGZvciAobGV0IGdsb2JhbFNlYXJjaFN0ciBvZiBnbG9iYWxTZWFyY2hTdHJMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmKGdsb2JhbFNlYXJjaFN0ciAmJiBnbG9iYWxTZWFyY2hTdHIubGVuZ3RoID4gTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1heFJhbmdlKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5wYXR0ZXJuKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFNlYXJjaFN0ci5tYXRjaCh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5wYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFN0cmluZyhzZWFyY2hTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcucmVwbGFjZSgvXFxuL2csIFwiLFwiKTtcclxuICAgIGlmIChzZWFyY2hTdHJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgc3RyTGlzdCA9IHNlYXJjaFN0cmluZy5zcGxpdChcIixcIik7XHJcbiAgICAgIHNlYXJjaFN0cmluZyA9IFwiXCI7XHJcbiAgICAgIGZvciAobGV0IHN0ciBvZiBzdHJMaXN0KSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnRyaW0oKTtcclxuICAgICAgICBzZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcgPyAoc3RyID8gc2VhcmNoU3RyaW5nICsgXCIsXCIgKyBzdHIgOiBzZWFyY2hTdHJpbmcpIDogc3RyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFN0cmluZztcclxuICB9XHJcblxyXG4gIGdldCBoYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGl2UGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkdmFuY2VkU2VhcmNoLXNjcm9sbC1wYW5lbFwiKTtcclxuICAgIHJldHVybiBkaXZQYW5lbC5zY3JvbGxIZWlnaHQgPiBkaXZQYW5lbC5jbGllbnRIZWlnaHQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|