tnx-shared 5.3.265 → 5.3.267

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.
@@ -937,7 +937,7 @@ export class DropdownComponent extends ComponentBase {
937
937
  DropdownComponent.decorators = [
938
938
  { type: Component, args: [{
939
939
  selector: 'dropdown',
940
- template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"tooltip\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\"\n [class.server-load]=\"control.isServerLoad\">\n <span class=\"server-load-info\" [pTooltip]=\"control.serverLoadMessage\" tooltipPosition=\"top\"></span>\n <p-dropdown *ngIf=\"!control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filterPlaceholder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [placeholder]=\"control.placeholder\"\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\n [disabled]=\"checkDisabled(control)\" [autoZIndex]=\"true\" [showClear]=\"control.showClear\"\n [showTransitionOptions]=\"showTransitionOptions\" [autoDisplayFirst]=\"control.autoDisplayFirst\"\n [virtualScroll]=\"control.virtualScroll\" itemSize=\"30\" [maxItemDisplay]=\"control.maxItemDisplay\"\n [autofocusSelectedItem]=\"autofocusSelectedItem\" [hideTransitionOptions]=\"hideTransitionOptions\"\n [modifyOptionsWhenFilter]=\"modifyOptionWhenFilter\" [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\"\n (onFocus)=\"handleFocus($event)\" (onBlur)=\"handleBlur($event)\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onShow)=\"onShowHandler($event)\" (onHide)=\"onHideHandler($event)\">\n <ng-template *ngIf=\"control.templateSelectedItem\" let-item pTemplate=\"selectedItem\">\n <ng-container\n *ngTemplateOutlet=\"control.templateSelectedItem; context: {$implicit: item, selectedValue: _value}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"control.templateItem\" let-item pTemplate=\"item\">\n <ng-container *ngTemplateOutlet=\"control.templateItem; context: {$implicit: item}\"></ng-container>\n </ng-template>\n </p-dropdown>\n <p-multiSelect *ngIf=\"control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filter]=\"control.filter\" [defaultLabel]=\"control.placeholder\" [placeholder]=\"control.placeholder\"\n [filterPlaceHolder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [panelStyleClass]=\"getPanelClass()\"\n [appendTo]=\"control.appendTo\" [styleClass]=\"'tn-dropdown'\"\n [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\" [disabled]=\"checkDisabled(control)\"\n [autoZIndex]=\"true\" [showTransitionOptions]=\"showTransitionOptions\"\n [hideTransitionOptions]=\"hideTransitionOptions\" [virtualScroll]=\"control.virtualScroll\"\n [maxItemDisplay]=\"control.maxItemDisplay\" [selectedItemsLabel]=\"control.selectedItemsLabel\"\n [maxSelectedLabels]=\"control.maxSelectedLabels\" [modifyOptionsWhenFilter]=\"modifyOptionWhenFilterMultiple\"\n [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onPanelShow)=\"onPanelShowHandler($event)\"\n (onPanelHide)=\"onHideHandler($event)\">\n <ng-template pTemplate=\"selectedItems\" let-value>\n <ng-container *ngIf=\"!value || value.length == 0\">{{control.placeholder}}</ng-container>\n <ng-container *ngIf=\"value && value.length > 0\">\n <span *ngFor=\"let selectedItem of value\" [class]=\"_itemSelectedStyleClass\">\n {{getItemSelectedLabel(selectedItem)}}<span class=\"remove-item\"\n (click)=\"removeItem($event, selectedItem)\"><i class=\"fas fa-times\"></i></span>\n </span>\n </ng-container>\n </ng-template>\n </p-multiSelect>\n <input #inputMask class=\"input-mask hide p-inputtext\" type=\"text\" [disabled]=\"loading\"\n [(ngModel)]=\"valueSearchServer\" (keyup)=\"keyUp.next($event)\" />\n <span #buttonSetting class=\"button-setting hide pi pi-cog\" (click)=\"showFormSetting()\"></span>\n <after-view-checked *ngIf=\"!loading\" (loaded)=\"handleLoaded()\"></after-view-checked>\n <button *ngIf=\"control.quickAdd && (control.cols || control.quickAddTemplate)\" type=\"button\" pButton\n icon=\"pi pi-plus\" class=\"p-button-text p-button-rounded button-quick-add\" pTooltip=\"Th\u00EAm nhanh\"\n tooltipPosition=\"top\" (click)=\"showFormQuickAdd()\"></button>\n</div>\n<tn-dialog *ngIf=\"quickAddDialogModel.showEditForm\" #dialog [header]=\"quickAddDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"quickAddDialogModel.showEditForm = false\">\n <quick-add-form *ngIf=\"control.cols\" #formBase [parentModel]=\"model\" [parentContext]=\"context\"\n [model]=\"quickAddDialogModel.data.formModel\" [control]=\"control\" [baseService]=\"control.baseService\"\n (onSaved)=\"handleSaved()\" (onCancel)=\"handleCancel()\">\n </quick-add-form>\n</tn-dialog>\n<tn-dialog *ngIf=\"settingDialogModel.showEditForm\" #dialog [header]=\"settingDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"settingDialogModel.showEditForm = false\">\n <dropdown-setting-form #formBase [model]=\"settingDialogModel.data.formModel\" (onSaved)=\"handleSavedSetting()\"\n (onCancel)=\"settingDialogModel.showEditForm = false\">\n </dropdown-setting-form>\n</tn-dialog>\n<ng-container *ngTemplateOutlet=\"control.quickAddTemplate; context: {\n handleSaved: handleSaved,\n handleCancel: handleCancel,\n dialogModel: quickAddDialogModel\n}\"></ng-container>",
940
+ template: "<div #el class=\"tn-dropdown\" [pTooltip]=\"control.showTooltip ? tooltip : ''\" tooltipPosition=\"top\" tooltipStyleClass=\"wrap\"\n [class.server-load]=\"control.isServerLoad\">\n <span class=\"server-load-info\" [pTooltip]=\"control.serverLoadMessage\" tooltipPosition=\"top\"></span>\n <p-dropdown *ngIf=\"!control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filterPlaceholder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [placeholder]=\"control.placeholder\"\n [filter]=\"control.filter\" [panelStyleClass]=\"getPanelClass()\" [appendTo]=\"control.appendTo\"\n [styleClass]=\"'tn-dropdown'\" [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\"\n [disabled]=\"checkDisabled(control)\" [autoZIndex]=\"true\" [showClear]=\"control.showClear\"\n [showTransitionOptions]=\"showTransitionOptions\" [autoDisplayFirst]=\"control.autoDisplayFirst\"\n [virtualScroll]=\"control.virtualScroll\" itemSize=\"30\" [maxItemDisplay]=\"control.maxItemDisplay\"\n [autofocusSelectedItem]=\"autofocusSelectedItem\" [hideTransitionOptions]=\"hideTransitionOptions\"\n [modifyOptionsWhenFilter]=\"modifyOptionWhenFilter\" [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\"\n (onFocus)=\"handleFocus($event)\" (onBlur)=\"handleBlur($event)\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onShow)=\"onShowHandler($event)\" (onHide)=\"onHideHandler($event)\">\n <ng-template *ngIf=\"control.templateSelectedItem\" let-item pTemplate=\"selectedItem\">\n <ng-container\n *ngTemplateOutlet=\"control.templateSelectedItem; context: {$implicit: item, selectedValue: _value}\">\n </ng-container>\n </ng-template>\n <ng-template *ngIf=\"control.templateItem\" let-item pTemplate=\"item\">\n <ng-container *ngTemplateOutlet=\"control.templateItem; context: {$implicit: item}\"></ng-container>\n </ng-template>\n </p-dropdown>\n <p-multiSelect *ngIf=\"control.multiple\" optionDisabled=\"inactive\" [options]=\"dataSourceInternal\"\n [filter]=\"control.filter\" [defaultLabel]=\"control.placeholder\" [placeholder]=\"control.placeholder\"\n [filterPlaceHolder]=\"!control.isServerLoad ? control.filterPlaceholder : ''\" [panelStyleClass]=\"getPanelClass()\"\n [appendTo]=\"control.appendTo\" [styleClass]=\"'tn-dropdown'\"\n [emptyFilterMessage]=\"'Kh\u00F4ng t\u00ECm th\u1EA5y k\u1EBFt qu\u1EA3' | translate\" [disabled]=\"checkDisabled(control)\"\n [autoZIndex]=\"true\" [showTransitionOptions]=\"showTransitionOptions\"\n [hideTransitionOptions]=\"hideTransitionOptions\" [virtualScroll]=\"control.virtualScroll\"\n [maxItemDisplay]=\"control.maxItemDisplay\" [selectedItemsLabel]=\"control.selectedItemsLabel\"\n [maxSelectedLabels]=\"control.maxSelectedLabels\" [modifyOptionsWhenFilter]=\"modifyOptionWhenFilterMultiple\"\n [delayFilter]=\"delayFilter\" [(ngModel)]=\"_value\" (onChange)=\"onChangeSelected($event)\"\n (onClick)=\"onDropdownClickHandler($event)\" (onPanelShow)=\"onPanelShowHandler($event)\"\n (onPanelHide)=\"onHideHandler($event)\">\n <ng-template pTemplate=\"selectedItems\" let-value>\n <ng-container *ngIf=\"!value || value.length == 0\">{{control.placeholder}}</ng-container>\n <ng-container *ngIf=\"value && value.length > 0\">\n <span *ngFor=\"let selectedItem of value\" [class]=\"_itemSelectedStyleClass\">\n {{getItemSelectedLabel(selectedItem)}}<span class=\"remove-item\"\n (click)=\"removeItem($event, selectedItem)\"><i class=\"fas fa-times\"></i></span>\n </span>\n </ng-container>\n </ng-template>\n </p-multiSelect>\n <input #inputMask class=\"input-mask hide p-inputtext\" type=\"text\" [disabled]=\"loading\"\n [(ngModel)]=\"valueSearchServer\" (keyup)=\"keyUp.next($event)\" />\n <span #buttonSetting class=\"button-setting hide pi pi-cog\" (click)=\"showFormSetting()\"></span>\n <after-view-checked *ngIf=\"!loading\" (loaded)=\"handleLoaded()\"></after-view-checked>\n <button *ngIf=\"control.quickAdd && (control.cols || control.quickAddTemplate)\" type=\"button\" pButton\n icon=\"pi pi-plus\" class=\"p-button-text p-button-rounded button-quick-add\" pTooltip=\"Th\u00EAm nhanh\"\n tooltipPosition=\"top\" (click)=\"showFormQuickAdd()\"></button>\n</div>\n<tn-dialog *ngIf=\"quickAddDialogModel.showEditForm\" #dialog [header]=\"quickAddDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"quickAddDialogModel.showEditForm = false\">\n <quick-add-form *ngIf=\"control.cols\" #formBase [parentModel]=\"model\" [parentContext]=\"context\"\n [model]=\"quickAddDialogModel.data.formModel\" [control]=\"control\" [baseService]=\"control.baseService\"\n (onSaved)=\"handleSaved()\" (onCancel)=\"handleCancel()\">\n </quick-add-form>\n</tn-dialog>\n<tn-dialog *ngIf=\"settingDialogModel.showEditForm\" #dialog [header]=\"settingDialogModel.header | translate\"\n [popupSize]=\"control.popupSize\" (onHide)=\"settingDialogModel.showEditForm = false\">\n <dropdown-setting-form #formBase [model]=\"settingDialogModel.data.formModel\" (onSaved)=\"handleSavedSetting()\"\n (onCancel)=\"settingDialogModel.showEditForm = false\">\n </dropdown-setting-form>\n</tn-dialog>\n<ng-container *ngTemplateOutlet=\"control.quickAddTemplate; context: {\n handleSaved: handleSaved,\n handleCancel: handleCancel,\n dialogModel: quickAddDialogModel\n}\"></ng-container>",
941
941
  providers: [ComponentContextService],
942
942
  styles: [".tn-dropdown{display:flex}.tn-dropdown p-dropdown,.tn-dropdown p-multiSelect{flex:1 1;width:100%}.tn-dropdown>.button-quick-add{flex:0 0 auto}.tn-dropdown .server-load-info{display:none}.tn-dropdown.server-load{position:relative}.tn-dropdown.server-load .server-load-info{display:block;position:absolute;top:0;left:0;width:6px;height:6px}.tn-dropdown.server-load .server-load-info:before{content:\"\";display:block;position:absolute;top:-6px;left:-6px;z-index:1;transform:rotate(45deg);border:6px solid transparent;border-right-color:green}.input-mask{position:absolute;z-index:1;width:100%;padding-left:12px;padding-right:32px;box-sizing:border-box;border:1px solid transparent;outline:none;background:transparent;border-radius:3px}.input-mask.hide{display:none}.input-mask:focus{box-shadow:0 0 0 .2rem #a6d5fa;border-color:#2196f3}.button-setting{position:absolute;width:30px;height:30px;top:1px;right:1px;display:flex;align-items:center;justify-content:center;z-index:1;cursor:pointer;background:#fff;border-radius:3px}.button-setting.hide{display:none}.custom-select-item{display:inline-flex;align-items:center;background:#d2eefb;border-radius:3px;padding:3px 5px;margin:0 0 0 3px;border:1px solid #a9d8ff}.custom-select-item>span{font-size:12px;color:#555;margin-left:3px}.custom-select-item>span i{font-size:10px}.custom-select-item.min{padding:1px 5px;margin-left:2px}.custom-select-item:first-child{margin-left:0}::ng-deep .tn-dropdown.ui-state-disabled .custom-select-item{background:#e1e1e1;border-color:#d4d4d4}::ng-deep .tn-dropdown.ui-state-disabled .custom-select-item>span{display:none}::ng-deep .ui-multiselect-filter-container .input-mask{padding:.2em;height:22px;width:calc(100% - 2px);box-sizing:border-box;text-indent:1.5em;left:1px;top:1px}::ng-deep .ui-multiselect-filter-container .input-mask:focus{left:1px;width:calc(100% - 2px)}"]
943
943
  },] }
@@ -979,4 +979,4 @@ DropdownComponent.propDecorators = {
979
979
  valueChange: [{ type: Output }],
980
980
  adjustValue: [{ type: Output }]
981
981
  };
982
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBbUIsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFB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QzdJLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFJO1FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7OztZQTNnQ0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixpbkxBQXdDO2dCQUV4QyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQXZCUSxxQkFBcUI7WUFQMUIsUUFBUTtZQW1CSCxXQUFXOzs7aUJBYWYsU0FBUyxTQUFDLElBQUk7b0JBQ2QsU0FBUyxTQUFDLFdBQVc7NEJBQ3JCLFNBQVMsU0FBQyxlQUFlO3VCQUN6QixTQUFTLFNBQUMsUUFBUTswQkFDbEIsU0FBUyxTQUFDLFdBQVc7d0JBRXJCLEtBQUs7OENBTUwsS0FBSztxQkFFTCxLQUFLO3NCQU1MLEtBQUs7MkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3lCQUVMLEtBQUs7b0JBV0wsS0FBSzttQkFhTCxLQUFLO3FDQUlMLEtBQUs7cUJBS0wsTUFBTTt3QkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNO3FCQUNOLE1BQU07K0JBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07aUNBQ04sTUFBTTswQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZHJvcGRvd24nO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgRGlhbG9nTW9kZWwsIERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRm9ybUNvbnRyb2xCYXNlLCBPcGVyYXRvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBLZXlTdG9yYWdlRHJvcGRvd25TZXR0aW5nIH0gZnJvbSAnLi9tb2RlbHMvY29uc3QnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ2VsJykgZWw6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRNYXNrJykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnYnV0dG9uU2V0dGluZycpIGJ1dHRvblNldHRpbmc6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChEcm9wZG93bikgZHJvcGRvd246IERyb3Bkb3duO1xuICAgIEBWaWV3Q2hpbGQoTXVsdGlTZWxlY3QpIG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdDtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93Q2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2hvd0NsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2hvd0NsZWFyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpbHRlciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSgpO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRMYWJlbCA9ICcnO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBhbnkgPSAnYm9keSc7XG5cbiAgICBASW5wdXQoKSBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogYW55W10pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaCh0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCAxKTtcbiAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXR1cm5WYWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpcmUgZXZlbnQgxJFp4buBdSBjaOG7iW5oIHZhbHVlIHThu6sgW3ZhbHVlOiBndWlkXSA9PiB7W2ZpZWxkVmFsdWVdOiBbdmFsdWU6IGd1aWRdLCAuLi5bMSBz4buRIHRyxrDhu51uZyBraMOhYyBu4buvYSB0cm9uZyBkYXRhc291cmNlXX1cbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGF0YTogYW55ID0ge307XG5cbiAgICBkZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzID0gJ2N1c3RvbS1zZWxlY3QtaXRlbSc7XG4gICAgX2l0ZW1TZWxlY3RlZFN0eWxlQ2xhc3MgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3M7XG4gICAgQElucHV0KCkgc2V0IGl0ZW1TZWxlY3RlZFN0eWxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XG5cbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25FeHBhbmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRHJvcGRvd25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TaG93U21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25IaWRlU21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YVNvdXJjZUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBhZGp1c3RWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgX3VuU3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgIGRhdGFTb3VyY2VTZWxlY3RlZCA9IFtdO1xuICAgIHNlbGVjdGVkVmFsdWVCZWZvcmU6IGFueTtcbiAgICBfdmFsdWU6IGFueTtcbiAgICBfcmV0dXJuVmFsdWU6IGFueTtcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICB0b29sdGlwOiBzdHJpbmc7XG4gICAgaGlkZVRyYW5zaXRpb25PcHRpb25zID0gJzE5NW1zIGVhc2UtaW4nO1xuICAgIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcyMjVtcyBlYXNlLW91dCc7XG5cbiAgICBpbnB1dEVsbTogYW55O1xuICAgIGF1dG9mb2N1c1NlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XG4gICAgZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2g6IEZ1bmN0aW9uO1xuICAgIHZhbHVlU2VhcmNoU2VydmVyID0gJyc7XG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIF9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG5cbiAgICBxdWlja0FkZERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHt9KTtcbiAgICBzZXR0aW5nRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdD4bqldSBow6xuaCBkcm9wZG93bidcbiAgICB9KTtcblxuICAgIGZsYXNoQ2FjaGVQYXJlbnQ6IGFueVtdID0gW107XG4gICAgZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdID0gW107XG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XG4gICAgZGVsYXlGaWx0ZXI6IG51bWJlciA9IDEwMDtcbiAgICBzY3JvbGxDb250YWluZXI6IGFueTtcbiAgICB0aW1lb3V0U2Nyb2xsOiBhbnk7XG4gICAgZmlyc3RTY3JvbGw6IGFueSA9IHRydWU7XG4gICAgbG9hZGluZyA9IGZhbHNlO1xuICAgIHBhZ2U6IG51bWJlciA9IDE7XG4gICAgdG90YWxQYWdlOiBudW1iZXIgPSAyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnF1aWNrQWRkKSB7XG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuaGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5jb250cm9sLmxhYmVsfWA7XG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwucG9wdXBTaXplID0gdGhpcy5jb250cm9sLnBvcHVwU2l6ZTtcbiAgICAgICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5kYXRhID0ge1xuICAgICAgICAgICAgICAgIGZvcm1Nb2RlbDogbmV3IENydWRGb3JtRGF0YSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZml0UGFuZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzV3JhcENvbnRlbnQgPSAnLS13cmFwLWNvbnRlbnQnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wucGFuZWxDbGFzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5wYW5lbENsYXNzID0gY2xhc3NXcmFwQ29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5wYW5lbENsYXNzICs9IGAgJHtjbGFzc1dyYXBDb250ZW50fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID09IG51bGwgJiYgdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wucGxhY2Vob2xkZXIgPSAnQ2jGsGEgY2jhu41uIGLhuqNuIGdoaSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXhJdGVtRGlzcGxheSA9IDk5OTk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWx0ZXJGdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmxvYWRPbkluaXQgJiYgIXRoaXMuY29udHJvbC5pc0xhenlMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRyYW5zaXRpb25PcHRpb25zID0gdGhpcy5zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXhJdGVtRGlzcGxheSA9IDk5OTk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5vbkluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5vbkluaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fdW5TdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBzZXREZWZhdWx0U2V0dGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1RyZWUgfHwgdGhpcy5jb250cm9sLmlzVHJlZUJhc2VNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5kZWxheUZpbHRlciA9IDIwMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uX3ByZWZpeCArIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCAmJiAhdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwID0gdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERlbGF5U2VhcmNoVGltZSgpIHtcbiAgICAgICAgY29uc3QganNEcm9wZG93blNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShLZXlTdG9yYWdlRHJvcGRvd25TZXR0aW5nKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDUwMDtcbiAgICAgICAgaWYgKGpzRHJvcGRvd25TZXR0aW5nKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duU2V0dGluZyA9IEpTT04ucGFyc2UoanNEcm9wZG93blNldHRpbmcpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRyb3Bkb3duU2V0dGluZy5kZWxheVNlYXJjaFRpbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdCB8fCBpc05hTihyZXN1bHQpIHx8IHJlc3VsdCA8IDIwMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gMjAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZmxhc2hDYWNoZVBhcmVudC5zb21lKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtUGFyZW50ID0gdGhpcy5kcm9wZG93bk9wdGlvbnMuZmluZChxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpO1xuICAgICAgICBpZiAoaXRlbVBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQWRkID0ge1xuICAgICAgICAgICAgICAgIC4uLml0ZW1QYXJlbnQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuY29udHJvbC5kaXNhYmxlZFBhcmVudEl0ZW1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHQucHVzaChpdGVtQWRkKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4RXhpc3QgPSB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuZmluZEluZGV4KHEgPT4gcS52YWx1ZS5fbGV2ZWwgPT0gaXRlbUFkZC52YWx1ZS5fbGV2ZWwpO1xuICAgICAgICAgICAgaWYgKGluZGV4RXhpc3QgPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudFtpbmRleEV4aXN0XSA9IGl0ZW1BZGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQucHVzaChpdGVtQWRkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTOG6pXkgdGjDqm0gYuG6o24gZ2hpIGNoYSBj4bunYSBi4bqjbiBnaGkgY2hhXG4gICAgICAgICAgICBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShpdGVtUGFyZW50KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxQYXJlbnQocmVzdWx0LCBwYXJlbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhbHJlYWR5SGFzUGFyZW50KG9wdGlvbnM6IGFueVtdLCBpbmRleFN0YXJ0OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpIHtcbiAgICAgICAgd2hpbGUgKGluZGV4U3RhcnQgPiAtMSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNbaW5kZXhTdGFydF0udmFsdWUuaWQgPT0gcGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnNbaW5kZXhTdGFydF0udmFsdWUubGV2ZWwgPT0gbGV2ZWwgJiYgdGhpcy5nZXRQYXJlbnRJZEZyb21JdGVtKG9wdGlvbnNbaW5kZXhTdGFydF0pICE9IHBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhc2hDYWNoZVBhcmVudC5zb21lKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleFN0YXJ0LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50SWRGcm9tSXRlbShpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xuICAgIH1cblxuICAgIG1vZGlmeU9wdGlvbldoZW5GaWx0ZXIgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuZHJvcGRvd24uX29wdGlvbnM7XG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIG1vZGlmeU9wdGlvbldoZW5GaWx0ZXJNdWx0aXBsZSA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25PcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdC5fb3B0aW9ucztcbiAgICAgICAgdGhpcy5fbW9kaWZ5T3B0aW9uV2hlbkZpbHRlcihvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucykge1xuICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2ldKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgY8OhYyBi4bqjbiBnaGkgcGjDrWEgdHLGsOG7m2MgeGVtIMSRw6MgY8OzIGLhuqNuIGdoaSBjaGEgY2jGsGEgKENobyDEkeG6v24gZ2hpIGfhurdwIGLhuqNuIGdoaSBjw7luZyBsZXZlbCBuaMawbmcga2jDoWMgcGFyZW50SWQpXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUGFyZW50ID0gdGhpcy5hbHJlYWR5SGFzUGFyZW50KG9wdGlvbnMsIGkgLSAxLCBwYXJlbnRJZCwgb3B0aW9uc1tpXS5sZXZlbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxQYXJlbnQocGFyZW50cywgcGFyZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNwbGljZShpLCAwLCAuLi5wYXJlbnRzLnJldmVyc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IHBhcmVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlRmlsdGVyRnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZGlzYWJsZURpc3BsYXlGaWVsZFNlcnZlclNlYXJjaCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQucHVzaCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VydmVyU2VhcmNoID0gdmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkWzBdLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VydmVyU2VhcmNoID0gdmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmlsdGVycy5wdXNoKHsgZmllbGQ6IGZpZWxkU2VhcmNoLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgdmFsdWU6IHRtcFZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGEoZmlsdGVyUGFyZW50cz86IEZpbHRlcltdKSB7XG4gICAgICAgIGlmICghZmlsdGVyUGFyZW50cykgZmlsdGVyUGFyZW50cyA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlckZyb21QYXJlbnRzID0gZmlsdGVyUGFyZW50cztcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHBhZ2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLmF1dG9mb2N1c1NlbGVjdGVkSXRlbSA9IHRydWU7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSkgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgaWYgKHBhZ2UgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvZm9jdXNTZWxlY3RlZEl0ZW0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bikgdGhpcy5kcm9wZG93bi5zZWxlY3RlZE9wdGlvblVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGjDqm0gZGF0YXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHRtcERhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlSW50ZXJuYWxdO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRGF0YVNvdXJjZSh0bXBEYXRhU291cmNlLCBkYXRhU291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wRGF0YVNvdXJjZS5sZW5ndGggPT0gdGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFOZXh0UGFnZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IHRtcERhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdG1wRGF0YVNvdXJjZSA9IFsuLi5kYXRhU291cmNlXTtcbiAgICAgICAgICAgIGlmICgodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICYmIHRoaXMuX3ZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgICAgICB8fCAoIXRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCAmJiB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZVNlYXJjaFNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmREYXRhU291cmNlKHRtcERhdGFTb3VyY2UsIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gdG1wRGF0YVNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSAmJiB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2Rpc2FibGVGaWVsZE5vdFVzZSddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFN1RHVuZyA9IHRoaXMuY29udHJvbC5iYXNlU2VydmljZVsnZmllbGRTdUR1bmcnXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goaXRlbSA9PiBpdGVtLmluYWN0aXZlID0gIWl0ZW0udmFsdWVbZmllbGRTdUR1bmddKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGF0YVNvdXJjZShkZXN0U291cmNlOiBhbnlbXSwgZGF0YVNvdXJjZTogYW55W10sIGRpcmVjdGlvbjogbnVtYmVyID0gMSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkZXN0U291cmNlLmZpbmRJbmRleChxID0+IHEudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkTWFQaGFuQ2FwXSA+IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRNYVBoYW5DYXBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSBi4bqjbiBnaGkgY3Xhu5FpIGPDuW5nIGzDoCBuw7MgdGjDrCBrIGluc2VydFxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdFNvdXJjZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBkZXN0U291cmNlW2Rlc3RTb3VyY2UubGVuZ3RoIC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnVuc2hpZnQoc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE7hur91IGLhuqNuIGdoaSBuZ2F5IHRyxrDhu5tjIHbhu4sgdHLDrSBj4bqnbiBpbnNlcnQgbMOgIGLhuqNuIGdoaSBoaeG7h24gdOG6oWkgdGjDrCBrIGluc2VydFxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdFNvdXJjZVtpbmRleCAtIDFdLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSA9PSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2VbaW5kZXggLSAxXS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2Uuc3BsaWNlKGluZGV4LCAwLCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkZXN0U291cmNlLmZpbmRJbmRleChxID0+IHEudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnVuc2hpZnQoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja0FuZEZpcmVFdmVudChmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQodGhpcy5jb250cm9sLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gW107XG4gICAgICAgICAgICBpZiAoIW9sZFZhbHVlKSBvbGRWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgaWYgKG9sZFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVTZWxlY3RlZE11bHRpcGxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gMFxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gW3RoaXMuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZS5sZW5ndGggIT0gdGhpcy5fdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fY29tbW9uU2VydmljZS5pc1NhbWVBcnJheShvbGRWYWx1ZSwgdGhpcy5fdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWUyV2F5QmluZGluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWVTZWxlY3RlZFNpbmdsZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09IG51bGxcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wubm90SW5DcnVkRm9ybVxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5hdXRvRGlzcGxheUZpcnN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBMxrB1IMO9IGlmIOG7nyBkxrDhu5tpIGtow7RuZyDEkcaw4bujYyDEkeG7lWkgdGjDoG5oIG9sZFZhbHVlICE9IHRoaXMuX3ZhbHVlXG4gICAgICAgICAgICAgICAgLy8gVsOsIGdpw6EgdHLhu4sgY+G7p2EgdGhpcy5fdmFsdWUgc+G6vSDEkcaw4bujYyBjb3JyZWN0aW5nIOG7nyB0csOqbiAoaWQgPT4gb2JqZWN0KSBuw6puIHNvIHPDoW5oIHPhur0ga2jDoWMgbmhhdVxuICAgICAgICAgICAgICAgIGlmICgob2xkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICB8fCAob2xkVmFsdWUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsdWUgIT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGVja1JlYWR5KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0U2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIGxldCBsZW5ndGggPSAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuX3ZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy5fdmFsdWUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLl92YWx1ZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBkYXRhU291cmNlIH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnMsIDEsIGxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCA9IGRhdGFTb3VyY2U7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlSW50ZXJuYWwgJiYgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZUludGVybmFsLCAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZVNlbGVjdGVkTXVsdGlwbGUoKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gW107XG4gICAgICAgIGNvbnN0IHRtcFZhbHVlID0gWy4uLnRoaXMuX3ZhbHVlXTtcbiAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZUZyb21EYXRhU291cmNlKG5ld1ZhbHVlLCB0bXBWYWx1ZSwgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwpO1xuICAgICAgICB0aGlzLmFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWUsIHRtcFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCk7XG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWU6IGFueVtdLCBjdXJyZW50VmFsdWU6IGFueVtdLCBkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgfHwgIWRhdGFTb3VyY2UubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBjdXJyZW50VmFsdWVbaV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtKVxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaChpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkanVzdFZhbHVlU2VsZWN0ZWRTaW5nbGUoKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKG9sZFZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5maW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCk7XG4gICAgICAgIHRoaXMuZmluZEl0ZW1Gcm9tRGF0YVNvdXJjZShvbGRWYWx1ZSwgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEl0ZW1Gcm9tRGF0YVNvdXJjZShvbGRWYWx1ZTogYW55LCBkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgfHwgIWRhdGFTb3VyY2UubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIG9sZFZhbHVlKVxuICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja1JlYWR5KCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm9uQWRqdXN0ZWRWYWx1ZVxuICAgICAgICAgICAgJiYgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZVxuICAgICAgICAgICAgJiYgKCghdGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAhPSBudWxsICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDApKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZUFkanVzdFZhbHVlRXZlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTogU2VsZWN0SXRlbSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlU3RydWN0dXJlRmxhdE9iamVjdChpdGVtKTtcbiAgICB9XG5cbiAgICByZVN0cnVjdHVyZUZsYXRPYmplY3QoaXRlbSkge1xuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0ge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0SXRlbVZhbHVlKGl0ZW0sIHRoaXMuY29udHJvbCksXG4gICAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB8fCBpdGVtLl9HZW5lcmF0ZWRCeUJhc2UgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuZ2V0SXRlbUxhYmVsKGl0ZW0sIHRoaXMuY29udHJvbCk7XG4gICAgICAgIGlmICh0ZW1wLmxhYmVsID09PSBudWxsIHx8IHRlbXAubGFiZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGVtcC5sYWJlbCA9ICdLaMO0bmcgeMOhYyDEkeG7i25oJztcbiAgICAgICAgfVxuICAgICAgICB0ZW1wLnZhbHVlLl9kcm9wZG93bnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlRmllbGQ7XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbVZhbHVlKGl0ZW0sIGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xuICAgICAgICByZXR1cm4gY29udHJvbC5mdW5jR2V0VmFsdWUgPyBjb250cm9sLmZ1bmNHZXRWYWx1ZShpdGVtKSA6IGl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtTGFiZWwoaXRlbSwgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmIChjb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtW2NvbnRyb2wuZGlzcGxheUZpZWxkXSB8fCBpdGVtWydsYWJlbCddO1xuICAgIH1cblxuICAgIHJlc2V0Q29udHJvbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XG4gICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyRGF0YXNvdXJjZSgpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcbiAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGEocGFnZTogbnVtYmVyID0gMSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKHBhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YVNvdXJjZShwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZSB8fCAxO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gYXdhaXQgdGhpcy5maWx0ZXJQcm9jZXNzKHRoaXMuZmlsdGVyRnJvbVBhcmVudHMpO1xuICAgICAgICBpZiAoZmlsdGVycyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoW10sIHBhZ2UpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkYXRhU291cmNlLCByYXdEYXRhU291cmNlLCB0b3RhbFBhZ2UgfSA9IGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVycywgcGFnZSk7XG4gICAgICAgIHRoaXMudG90YWxQYWdlID0gdG90YWxQYWdlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCBwYWdlKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE7hur91IGRyb3Bkb3duIGsgbuG6sW0gdHJvbmcgY3J1ZCBmb3JtIHRow6wgY+G6pXUgaMOsbmggZmlyZUNhbGxCYWNrSW5zaWRlID0gdHJ1ZSAobeG6t2MgxJHhu4tuaCkgxJHhu4MgZmlyZSB0cuG7sWMgdGnhur9wIHThu6sgdHJvbmcgY29tcG9uZW50XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZmlyZUNhbGxCYWNrSW5zaWRlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2goPGFueT57XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJhd0RhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGVsbTogdGhpc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VMb2FkZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIGVsbTogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnM6IEZpbHRlcltdLCBwYWdlOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gbnVsbCkge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IG51bGw7XG4gICAgICAgIGxldCB0b3RhbFBhZ2UgPSAxO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlWydmaWVsZFNvcnQnXSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNvcnRzID0gW3RoaXMubmV3U29ydCh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2ZpZWxkU29ydCddKV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGRTdUR1bmcgPSB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2ZpZWxkU3VEdW5nJ107XG4gICAgICAgIGlmIChmaWVsZFN1RHVuZykge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNvcnRzLnNwbGljZSgwLCAwLCB0aGlzLm5ld1NvcnQoZmllbGRTdUR1bmcsIC0xKSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZmllbGRQbHVzICs9IGAsJHtmaWVsZFN1RHVuZ31gO1xuXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsID0gKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZFN1RHVuZ10gPyBpdGVtW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGRdIDogYCR7aXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXX0gKEtow7RuZyBz4butIGThu6VuZylgO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuX2NydWRTZXJ2aWNlLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyh0aGlzLmNvbnRyb2wpO1xuICAgICAgICBkcm9wZG93bk9wdGlvbnMucGFnZSA9IHBhZ2U7XG4gICAgICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5ncm91cENvZGUsIG51bGwsIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSB8fCB0aGlzLmNvbnRyb2wuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZmllbGRUcmVlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVQYXJlbnRSb290LFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhU291cmNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIHRvdGFsUGFnZSA9IE1hdGguY2VpbChyZXNwb25zZS50b3RhbFJlY29yZCAvIGRyb3Bkb3duT3B0aW9ucy5wYWdlU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShkYXRhU291cmNlLCBkcm9wZG93bk9wdGlvbnMucmVmRmllbGRzKTtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlKSBkYXRhU291cmNlID0gW107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRhdGFTb3VyY2U6IHJlc3VsdCwgcmF3RGF0YVNvdXJjZTogZGF0YVNvdXJjZSwgdG90YWxQYWdlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJQcm9jZXNzKGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSkge1xuICAgICAgICBsZXQgZmlsdGVycyA9IFsuLi5maWx0ZXJGcm9tUGFyZW50c107XG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcikge1xuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkgZmlsdGVycyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICBnZXRQYW5lbENsYXNzKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFwcGVuZFRvID09ICdib2R5Jykge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29udHJvbC5wYW5lbENsYXNzfSBwLWZpeGVkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sLnBhbmVsQ2xhc3M7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XG4gICAgICAgIHRoaXMuX3JldHVyblZhbHVlID0gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5fdmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja0luaXRlZENvbnRyb2woKSB7XG4gICAgICAgIC8vIE7hur91IGNoxrBhIGNo4bqheSBxdWEgaW5pdCB0aMOsIGsgZmlyZSBldmVudCBnw6wgY+G6o1xuICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRyb2wuX2NvbXBvbmVudDtcbiAgICB9XG5cbiAgICBhZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlUmV0dXJuKTtcbiAgICB9XG5cbiAgICBmaXJlQ2hhbmdlZEV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodmFsdWVSZXR1cm4pO1xuICAgIH1cblxuICAgIGZpcmVBZGp1c3RWYWx1ZUV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuYWRqdXN0VmFsdWUubmV4dCh2YWx1ZVJldHVybik7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VTZWxlY3RlZChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50Lml0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBzZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGF0YVNvdXJjZUludGVybmFsLm1hcChxID0+IHEudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUcsaw4budbmcgaOG7o3AgdW5zZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdERlc2NlbmRhbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZHMgPSBbZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXV07XG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgaXRlbSDEkcaw4bujYyBjaOG7jW4gPT4gQ2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uLCBjaMOhdVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUucHVzaChzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gaXRlbSDEkWFuZyBi4buLIGLhu48gY2jhu41uID0+IGjhu6d5IGNo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdENoaWxkSXRlbSkge1xuICAgICAgICAgICAgICAgIC8vIE7hur91IGl0ZW0gxJHGsOG7o2MgY2jhu41uID0+IENo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIGl0ZW0gxJFhbmcgYuG7iyBi4buPIGNo4buNbiA9PiBo4buneSBjaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQgPT0gZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSXRlbShldnQsIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHNlbGVjdGVkSXRlbSk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25DbGlja0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Ecm9wZG93bkNsaWNrLm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKCRldmVudCkge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpJyAmJiAkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndWktZHJvcGRvd24tY2xlYXItaWNvbicpKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcucC1kcm9wZG93bi1pdGVtcy13cmFwcGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLmRyb3Bkb3duLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLl9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KTtcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBvblBhbmVsU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLnAtbXVsdGlzZWxlY3QtaXRlbXMtd3JhcHBlcicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdElucHV0ID0gdGhpcy5tdWx0aVNlbGVjdC5maWx0ZXJJbnB1dENoaWxkLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpO1xuICAgICAgICB0aGlzLm9uU2hvd1NtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIGhhbmRsZVNjcm9sbCA9IChldnQpID0+IHtcbiAgICAgICAgaWYgKGV2dC5zcmNFbGVtZW50LnNjcm9sbFRvcCA+IDBcbiAgICAgICAgICAgICYmICF0aGlzLmZpcnN0U2Nyb2xsXG4gICAgICAgICAgICAmJiBldnQuc3JjRWxlbWVudC5vZmZzZXRIZWlnaHQgKyBldnQuc3JjRWxlbWVudC5zY3JvbGxUb3AgPj0gZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dFNjcm9sbCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFNjcm9sbCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRTY3JvbGwgPSBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YU5leHRQYWdlKCk7XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0RGF0YU5leHRQYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnBhZ2UrKztcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSh0aGlzLnBhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKTtcbiAgICAgICAgdGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpO1xuICAgICAgICAvLyBkZWZhdWx0SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCBkZWZhdWx0SW5wdXQpO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uSGlkZUhhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25IaWRlLmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSAhPSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhRW1pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChkYXRhRW1pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cihldnQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdChldnQpO1xuICAgIH1cblxuICAgIHNob3dGb3JtUXVpY2tBZGQoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICAgICAgbGV0IGluaXREYXRhID0gdGhpcy5jb250cm9sLmluaXREYXRhO1xuICAgICAgICBpZiAodHlwZW9mIGluaXREYXRhICE9ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpbml0RGF0YSA9ICg8RnVuY3Rpb24+KHRoaXMuY29udHJvbC5pbml0RGF0YSkpKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybU1vZGVsLmRhdGEgPSB7IC4uLmluaXREYXRhIH07XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuZGF0YS5mb3JtTW9kZWwgPSBmb3JtTW9kZWw7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEsgc+G7rWEgdGjDoG5oIGZ1bmN0aW9uLCBwaOG6o2kgxJHhu4MgYXJyb3cgZnVuY3Rpb25cbiAgICBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgLy8gSyBz4butYSB0aMOgbmggZnVuY3Rpb24sIHBo4bqjaSDEkeG7gyBhcnJvdyBmdW5jdGlvblxuICAgIGhhbmRsZVNhdmVkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICB9O1xuXG4gICAgc2hvd0Zvcm1TZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBmb3JtTW9kZWwgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1Nb2RlbC5kYXRhID0ge307XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnNldHRpbmdEaWFsb2dNb2RlbC5kYXRhLmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5zZXR0aW5nRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVTYXZlZFNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ0RpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpIHtcbiAgICAgICAgY29uc3QgZGVsYXlTZWFyY2hUaW1lID0gdGhpcy5nZXREZWxheVNlYXJjaFRpbWUoKTtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5rZXlVcC5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpLFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKGRlbGF5U2VhcmNoVGltZSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKVxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoZWNrRGlzYWJsZWQoY29udHJvbDogRm9ybUNvbnRyb2xCYXNlKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kYXRhLl9zdGF0dXMgJiYgdGhpcy5kYXRhLl9zdGF0dXNbY29udHJvbC5maWVsZF0gJiYgdGhpcy5kYXRhLl9zdGF0dXNbY29udHJvbC5maWVsZF0uZGlzYWJsZWQgPT09IHRydWUpIHx8IGNvbnRyb2wuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgZ2V0SXRlbVNlbGVjdGVkTGFiZWwoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcbiAgICB9XG59XG4iXX0=
982
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBbUIsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVMzRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQTZHaEQsWUFDWSxzQkFBNkMsRUFDckQsUUFBa0IsRUFDbEIsWUFBeUI7UUFFekIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSlIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF1QjtRQWpHaEQsb0NBQStCLEdBQUcsS0FBSyxDQUFDO1FBUXhDLFlBQU8sR0FBMEIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzdELGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGFBQVEsR0FBUSxNQUFNLENBQUM7UUEwQnZCLFNBQUksR0FBUSxFQUFFLENBQUM7UUFFeEIsOEJBQXlCLEdBQUcsb0JBQW9CLENBQUM7UUFDakQsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1FBTS9DLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN2RCxlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDeEQsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3RELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMxQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzNDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0MsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM3QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhELG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUNyQyx1QkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsRUFBRSxDQUFDO1FBSXhCLG9CQUFlLEdBQWtCLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1FBRWhELDBCQUFxQixHQUFHLGVBQWUsQ0FBQztRQUN4QywwQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUd6QywwQkFBcUIsR0FBWSxJQUFJLENBQUM7UUFFdEMsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQUVyQyx5QkFBb0IsR0FBRyxLQUFLLENBQUM7UUFFN0Isd0JBQW1CLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUMsdUJBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDakMsTUFBTSxFQUFFLG1CQUFtQjtTQUM5QixDQUFDLENBQUM7UUFFSCxxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFDN0Isc0JBQWlCLEdBQWEsRUFBRSxDQUFDO1FBQ2pDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGdCQUFXLEdBQVcsR0FBRyxDQUFDO1FBRzFCLGdCQUFXLEdBQVEsSUFBSSxDQUFDO1FBQ3hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBNEp0QiwyQkFBc0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDOUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQztRQUVGLG1DQUE4QixHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNqRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDO1FBc25CRixpQkFBWSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDO21CQUN6QixDQUFDLElBQUksQ0FBQyxXQUFXO21CQUNqQixHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQzlGO2dCQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixJQUFJLElBQUksQ0FBQyxhQUFhO29CQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzNCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNYO2lCQUNJO2dCQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzVCO1FBQ0wsQ0FBQyxDQUFDO1FBa0VGLCtDQUErQztRQUMvQyxpQkFBWSxHQUFHLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNsRCxDQUFDLENBQUM7UUFFRiwrQ0FBK0M7UUFDL0MsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDO0lBMzJCRixDQUFDO0lBNUdELElBQWEsU0FBUyxDQUFDLEtBQWM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUNsQztJQUNMLENBQUM7SUFJRCxJQUFhLE1BQU0sQ0FBQyxLQUFjO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBTUQsSUFBYSxVQUFVLENBQUMsS0FBWTtRQUNoQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxLQUFLLEVBQUU7WUFDUCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNyRDtTQUNKO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxLQUFLLENBQUMsS0FBVTtRQUN6QixJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksS0FBSyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQzthQUNwQjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUN2QjtZQUNELDRIQUE0SDtZQUM1SCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFNRCxJQUFhLHNCQUFzQixDQUFDLEtBQWE7UUFDN0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixJQUFJLEtBQUssRUFBRSxDQUFDO0lBRWhGLENBQUM7SUE2REQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUM1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHO2dCQUM1QixTQUFTLEVBQUUsSUFBSSxZQUFZLEVBQUU7YUFDaEMsQ0FBQztTQUNMO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN2QixNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7YUFDOUM7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3JEO1NBQ0o7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDbkMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7U0FDSjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7U0FDaEU7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxZQUFZLGlCQUFpQixFQUFFO1lBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztTQUN0QztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGlCQUFpQjtRQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7WUFDckQsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRTtvQkFDL0IsT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUM7YUFDTDtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFO29CQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMzQyxDQUFDLENBQUM7YUFDTDtTQUNKO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7U0FDNUQ7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtZQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksS0FBSyxJQUFJLElBQUk7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQy9CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQzNEO2dCQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDO1NBQ0w7YUFDSTtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDMUUsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLElBQUksaUJBQWlCLEVBQUU7WUFDbkIsSUFBSTtnQkFDQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3RELE1BQU0sR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDO2FBQzVDO1lBQ0QsT0FBTyxHQUFHLEVBQUU7YUFFWDtTQUNKO1FBQ0QsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUMxQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUN6QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRTtZQUN6RCxPQUFPO1NBQ1Y7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxDQUFDO1FBQzFFLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtZQUNwQixNQUFNLE9BQU8sbUNBQ04sVUFBVSxLQUNiLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixHQUM1QyxDQUFDO1lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUMvQztpQkFDSTtnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZDO1lBRUQsdUNBQXVDO1lBQ3ZDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDaEQsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN2QztTQUNKO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQWMsRUFBRSxVQUFrQixFQUFFLFFBQWdCLEVBQUUsS0FBYTtRQUNoRixPQUFPLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNwQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFFBQVEsRUFBRTtnQkFDMUMsT0FBTyxJQUFJLENBQUM7YUFDZjtpQkFDSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFO2dCQUM1RyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsQ0FBQzthQUNsRTtZQUNELFVBQVUsRUFBRSxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLG1CQUFtQixDQUFDLElBQUk7UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQVlELHVCQUF1QixDQUFDLE9BQU87UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO2dCQUNoRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ25CLHNIQUFzSDtnQkFDdEgsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ3JDLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO3dCQUMzQyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztxQkFDdkI7aUJBQ0o7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsRUFBRTtZQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzNFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQzVEO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDckMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUMvRixDQUFDLENBQUM7U0FDTjthQUNJO1lBQ0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQztvQkFDdEIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7aUJBQ2QsQ0FBQyxDQUFDO2dCQUNILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQ2hELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztpQkFDNUY7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDbEIsQ0FBQyxDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLGFBQXdCO1FBQzVCLElBQUksQ0FBQyxhQUFhO1lBQUUsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8saUJBQWlCLENBQUMsVUFBaUIsRUFBRSxJQUFZO1FBQ3JELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVU7WUFBRSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDM0IsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLElBQUksSUFBSSxDQUFDLFFBQVE7b0JBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7Z0JBQy9ELHlCQUF5QjtnQkFDekIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtvQkFDeEQsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7aUJBQ2pDO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxhQUFhLENBQUM7Z0JBQ3hDLE9BQU87YUFDVjtZQUNELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzttQkFDekQsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFDNUM7Z0JBQ0UsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtvQkFDM0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztvQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTt3QkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDckU7aUJBQ0o7YUFDSjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2FBQ3BDO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQztTQUMzQzthQUNJO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2FBQ3BDO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDNUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDckY7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsVUFBaUIsRUFBRSxVQUFpQixFQUFFLFlBQW9CLENBQUM7UUFDaEYsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNyQixVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN4QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUMxSCxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRTtvQkFDYixnREFBZ0Q7b0JBQ2hELElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDOzJCQUNsQixVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQzlHLE9BQU87cUJBQ1Y7b0JBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDM0I7cUJBQ0ksSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO29CQUNqQixVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM5QjtxQkFDSTtvQkFDRCw0RUFBNEU7b0JBQzVFLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQy9GLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFOzRCQUNsQixVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7eUJBQzFDO3dCQUNELE9BQU87cUJBQ1Y7b0JBQ0QsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUN2QztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFDSTtZQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ILElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUNiLElBQUksU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUNqQixVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUM5Qjt5QkFDSTt3QkFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUMzQjtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBaUIsS0FBSztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzVCLElBQUksS0FBSyxFQUFFO2dCQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdkIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRO2dCQUFFLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDN0IsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckIsUUFBUSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2FBQzlDO1lBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7bUJBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTttQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDbEM7Z0JBQ0UsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pEO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7Z0JBRXZCLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQzNCO3FCQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUM5RCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztpQkFDakM7YUFDSjtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSTttQkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhO21CQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUNsQztnQkFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDbEQ7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUMzQiwrREFBK0Q7Z0JBQy9ELCtGQUErRjtnQkFDL0YsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7dUJBQ3RDLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUM5QztvQkFDRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDM0I7cUJBQ0ksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQ2pDO2FBQ0o7U0FDSjtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUssZ0JBQWdCOztZQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUMzQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDZixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUN2QixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDcEUsQ0FBQztpQkFDTDtxQkFDSTtvQkFDRCxPQUFPLENBQUMsSUFBSSxDQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQ3ZFLENBQUM7aUJBQ0w7Z0JBQ0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7Z0JBQ3JDLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7b0JBQzNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7aUJBQ3BDO2dCQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QixDQUFDO0tBQUE7SUFFTyx3QkFBd0I7UUFDNUIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLHlCQUF5QixDQUFDLFFBQWUsRUFBRSxZQUFtQixFQUFFLFVBQWlCO1FBQ3JGLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO2dCQUMzQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO3VCQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQ2hGO29CQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMxQixZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxFQUFFLENBQUM7b0JBQ0osTUFBTTtpQkFDVDthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8seUJBQXlCO1FBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsS0FBSyxTQUFTO1lBQUUsT0FBTztRQUN4RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFFBQWEsRUFBRSxVQUFpQjtRQUMzRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQzlDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7bUJBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDNUU7Z0JBQ0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN6QixNQUFNO2FBQ1Q7U0FDSjtJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWU7ZUFDekIsSUFBSSxDQUFDLG9CQUFvQjtlQUN6QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQzttQkFDNUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNsRjtZQUNFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQUk7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQUk7UUFDdEIsTUFBTSxJQUFJLEdBQWU7WUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7U0FDbEUsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQThCO1FBQ3JELE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3BFLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQThCO1FBQ3JELElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN0QixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVhLFFBQVEsQ0FBQyxPQUFlLENBQUM7O1lBQ25DLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUM7S0FBQTtJQUVhLGNBQWMsQ0FBQyxJQUFZOztZQUNyQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pFLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsT0FBTzthQUNWO1lBQ0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25HLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDaEM7WUFDRCw0SEFBNEg7WUFDNUgsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO2dCQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7b0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQU07d0JBQ2pDLElBQUksRUFBRSxhQUFhO3dCQUNuQixHQUFHLEVBQUUsSUFBSTtxQkFDWixDQUFDLENBQUM7aUJBQ047YUFDSjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29CQUN6QixVQUFVO29CQUNWLGFBQWE7b0JBQ2IsR0FBRyxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDO0tBQUE7SUFFYSx1QkFBdUIsQ0FBQyxPQUFpQixFQUFFLE9BQWUsQ0FBQyxFQUFFLFdBQW1CLElBQUk7O1lBQzlGLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM5RTtZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzVELElBQUksV0FBVyxFQUFFO2dCQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFFNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDakMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDdEgsQ0FBQyxDQUFDO2FBQ0w7WUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5RSxlQUFlLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLFFBQVEsRUFBRTtnQkFDVixlQUFlLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzthQUN2QztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLFlBQVksaUJBQWlCLEVBQUU7Z0JBQ3ZELFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FDekQsQ0FBQzthQUNMO2lCQUNJO2dCQUNELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtvQkFDckQsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQ3BFLE9BQU8sRUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQzVCLGVBQWUsQ0FDbEIsQ0FBQztpQkFDTDtxQkFDSTtvQkFDRCxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FDaEUsT0FBTyxFQUFFLGVBQWUsQ0FDM0IsQ0FBQztpQkFDTDtnQkFDRCxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDM0IsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDMUU7WUFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsVUFBVTtnQkFBRSxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRTtnQkFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNqRDtZQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7UUFDeEUsQ0FBQztLQUFBO0lBRWEsYUFBYSxDQUFDLGlCQUEyQjs7WUFDbkQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7WUFDckMsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUVoRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUMzQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztpQkFDdEU7YUFDSjtZQUVELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLEtBQUssS0FBSyxLQUFLO29CQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDdkM7WUFFRCxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDO0tBQUE7SUFFRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLEVBQUU7WUFDakMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxVQUFVLENBQUM7U0FDL0M7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtnQkFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUM1RDtxQkFDSTtvQkFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztpQkFDdkI7YUFDSjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN2QjtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsZ0RBQWdEO1FBQ2hELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUNsQix3QkFBd0I7Z0JBQ3hCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0Q7Z0JBQ0QsMEJBQTBCO3FCQUNyQjtvQkFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztpQkFDcEI7YUFDSjtpQkFDSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELHdEQUF3RDtnQkFDeEQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDdEQsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzRCQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQ0FDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOzZCQUNsQzs0QkFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzt5QkFDbkU7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ047cUJBQ0ksRUFBRSx3REFBd0Q7b0JBQzNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDdEQsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFOzRCQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ2hELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dDQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzs2QkFDaEM7NEJBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7eUJBQ25FO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7aUJBQ0ksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtnQkFDbkMsa0RBQWtEO2dCQUNsRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7NEJBQ3RELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dDQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7NkJBQ2xDO3lCQUNKO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNOO3FCQUNJLEVBQUUsd0RBQXdEO29CQUMzRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3RELElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTs0QkFDdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUNoRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtnQ0FDWixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7NkJBQ2hDO3lCQUNKO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNOO2FBQ0o7U0FDSjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFLFlBQVk7UUFDeEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN2QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQixHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FBRztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQU07UUFDVixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsRUFBRTtZQUMzRyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQUc7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNiLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLEdBQUc7U0FDYixDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztTQUM1RTtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDOUY7YUFDSTtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7U0FDM0Y7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFHO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsR0FBRztTQUNiLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1NBQ2xGO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRzthQUNJO1lBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztRQUNyRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBa0JPLGVBQWU7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQ3hELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxZQUFZO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRCxnQ0FBZ0M7UUFDaEMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEYsWUFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFHO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxHQUFHO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN6QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQzVFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN2QyxPQUFPO2lCQUNWO2dCQUNELE1BQU0sUUFBUSxHQUFHO29CQUNiLFNBQVMsRUFBRSxJQUFJO29CQUNmLEtBQUssRUFBRSxHQUFHO2lCQUNiLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN4QztZQUNELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQzFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN6RTtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBRztRQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBRztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ3JDLElBQUksT0FBTyxRQUFRLElBQUksUUFBUSxFQUFFO1lBQzdCLFFBQVEsR0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFFLEVBQUUsQ0FBQztTQUNwRDtRQUNELFNBQVMsQ0FBQyxJQUFJLHFCQUFRLFFBQVEsQ0FBRSxDQUFDO1FBQ2pDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNwQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDcEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDakQsQ0FBQztJQWFELGVBQWU7UUFDWCxNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzdDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCx3QkFBd0I7UUFDcEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDbEQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUMvQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLENBQUMsRUFDdEQsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUM3QixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUNsQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQXdCO1FBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQzdJLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFJO1FBQ3JCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7OztZQTNnQ0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxVQUFVO2dCQUNwQiw0b0xBQXdDO2dCQUV4QyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQXZCUSxxQkFBcUI7WUFQMUIsUUFBUTtZQW1CSCxXQUFXOzs7aUJBYWYsU0FBUyxTQUFDLElBQUk7b0JBQ2QsU0FBUyxTQUFDLFdBQVc7NEJBQ3JCLFNBQVMsU0FBQyxlQUFlO3VCQUN6QixTQUFTLFNBQUMsUUFBUTswQkFDbEIsU0FBUyxTQUFDLFdBQVc7d0JBRXJCLEtBQUs7OENBTUwsS0FBSztxQkFFTCxLQUFLO3NCQU1MLEtBQUs7MkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3lCQUVMLEtBQUs7b0JBV0wsS0FBSzttQkFhTCxLQUFLO3FDQUlMLEtBQUs7cUJBS0wsTUFBTTt3QkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNO3FCQUNOLE1BQU07K0JBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07aUNBQ04sTUFBTTswQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZHJvcGRvd24nO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgRGlhbG9nTW9kZWwsIERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRm9ybUNvbnRyb2xCYXNlLCBPcGVyYXRvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBLZXlTdG9yYWdlRHJvcGRvd25TZXR0aW5nIH0gZnJvbSAnLi9tb2RlbHMvY29uc3QnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ2VsJykgZWw6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRNYXNrJykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnYnV0dG9uU2V0dGluZycpIGJ1dHRvblNldHRpbmc6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChEcm9wZG93bikgZHJvcGRvd246IERyb3Bkb3duO1xuICAgIEBWaWV3Q2hpbGQoTXVsdGlTZWxlY3QpIG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdDtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93Q2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2hvd0NsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2hvd0NsZWFyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpbHRlciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSgpO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRMYWJlbCA9ICcnO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBhbnkgPSAnYm9keSc7XG5cbiAgICBASW5wdXQoKSBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogYW55W10pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaCh0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCAxKTtcbiAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXR1cm5WYWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpcmUgZXZlbnQgxJFp4buBdSBjaOG7iW5oIHZhbHVlIHThu6sgW3ZhbHVlOiBndWlkXSA9PiB7W2ZpZWxkVmFsdWVdOiBbdmFsdWU6IGd1aWRdLCAuLi5bMSBz4buRIHRyxrDhu51uZyBraMOhYyBu4buvYSB0cm9uZyBkYXRhc291cmNlXX1cbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGF0YTogYW55ID0ge307XG5cbiAgICBkZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzID0gJ2N1c3RvbS1zZWxlY3QtaXRlbSc7XG4gICAgX2l0ZW1TZWxlY3RlZFN0eWxlQ2xhc3MgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3M7XG4gICAgQElucHV0KCkgc2V0IGl0ZW1TZWxlY3RlZFN0eWxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XG5cbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25FeHBhbmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRHJvcGRvd25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TaG93U21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25IaWRlU21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YVNvdXJjZUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBhZGp1c3RWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgX3VuU3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgIGRhdGFTb3VyY2VTZWxlY3RlZCA9IFtdO1xuICAgIHNlbGVjdGVkVmFsdWVCZWZvcmU6IGFueTtcbiAgICBfdmFsdWU6IGFueTtcbiAgICBfcmV0dXJuVmFsdWU6IGFueTtcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICB0b29sdGlwOiBzdHJpbmc7XG4gICAgaGlkZVRyYW5zaXRpb25PcHRpb25zID0gJzE5NW1zIGVhc2UtaW4nO1xuICAgIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcyMjVtcyBlYXNlLW91dCc7XG5cbiAgICBpbnB1dEVsbTogYW55O1xuICAgIGF1dG9mb2N1c1NlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XG4gICAgZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2g6IEZ1bmN0aW9uO1xuICAgIHZhbHVlU2VhcmNoU2VydmVyID0gJyc7XG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIF9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG5cbiAgICBxdWlja0FkZERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHt9KTtcbiAgICBzZXR0aW5nRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdD4bqldSBow6xuaCBkcm9wZG93bidcbiAgICB9KTtcblxuICAgIGZsYXNoQ2FjaGVQYXJlbnQ6IGFueVtdID0gW107XG4gICAgZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdID0gW107XG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XG4gICAgZGVsYXlGaWx0ZXI6IG51bWJlciA9IDEwMDtcbiAgICBzY3JvbGxDb250YWluZXI6IGFueTtcbiAgICB0aW1lb3V0U2Nyb2xsOiBhbnk7XG4gICAgZmlyc3RTY3JvbGw6IGFueSA9IHRydWU7XG4gICAgbG9hZGluZyA9IGZhbHNlO1xuICAgIHBhZ2U6IG51bWJlciA9IDE7XG4gICAgdG90YWxQYWdlOiBudW1iZXIgPSAyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnF1aWNrQWRkKSB7XG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuaGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5jb250cm9sLmxhYmVsfWA7XG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwucG9wdXBTaXplID0gdGhpcy5jb250cm9sLnBvcHVwU2l6ZTtcbiAgICAgICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5kYXRhID0ge1xuICAgICAgICAgICAgICAgIGZvcm1Nb2RlbDogbmV3IENydWRGb3JtRGF0YSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZml0UGFuZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzV3JhcENvbnRlbnQgPSAnLS13cmFwLWNvbnRlbnQnO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wucGFuZWxDbGFzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5wYW5lbENsYXNzID0gY2xhc3NXcmFwQ29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5wYW5lbENsYXNzICs9IGAgJHtjbGFzc1dyYXBDb250ZW50fWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250cm9sLl9jb21wb25lbnQgPSB0aGlzO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBsYWNlaG9sZGVyID09IG51bGwgJiYgdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wucGxhY2Vob2xkZXIgPSAnQ2jGsGEgY2jhu41uIGLhuqNuIGdoaSc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREZWZhdWx0U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXhJdGVtRGlzcGxheSA9IDk5OTk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWx0ZXJGdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmxvYWRPbkluaXQgJiYgIXRoaXMuY29udHJvbC5pc0xhenlMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRyYW5zaXRpb25PcHRpb25zID0gdGhpcy5zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5tYXhJdGVtRGlzcGxheSA9IDk5OTk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5vbkluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5vbkluaXQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fdW5TdWJzY3JpYmVBbGwuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBzZXREZWZhdWx0U2V0dGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1RyZWUgfHwgdGhpcy5jb250cm9sLmlzVHJlZUJhc2VNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5kZWxheUZpbHRlciA9IDIwMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uX3ByZWZpeCArIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwgPSBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCAmJiAhdGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwID0gdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERlbGF5U2VhcmNoVGltZSgpIHtcbiAgICAgICAgY29uc3QganNEcm9wZG93blNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShLZXlTdG9yYWdlRHJvcGRvd25TZXR0aW5nKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDUwMDtcbiAgICAgICAgaWYgKGpzRHJvcGRvd25TZXR0aW5nKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3Bkb3duU2V0dGluZyA9IEpTT04ucGFyc2UoanNEcm9wZG93blNldHRpbmcpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRyb3Bkb3duU2V0dGluZy5kZWxheVNlYXJjaFRpbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdCB8fCBpc05hTihyZXN1bHQpIHx8IHJlc3VsdCA8IDIwMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gMjAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZmxhc2hDYWNoZVBhcmVudC5zb21lKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtUGFyZW50ID0gdGhpcy5kcm9wZG93bk9wdGlvbnMuZmluZChxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpO1xuICAgICAgICBpZiAoaXRlbVBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtQWRkID0ge1xuICAgICAgICAgICAgICAgIC4uLml0ZW1QYXJlbnQsXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuY29udHJvbC5kaXNhYmxlZFBhcmVudEl0ZW1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXN1bHQucHVzaChpdGVtQWRkKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4RXhpc3QgPSB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuZmluZEluZGV4KHEgPT4gcS52YWx1ZS5fbGV2ZWwgPT0gaXRlbUFkZC52YWx1ZS5fbGV2ZWwpO1xuICAgICAgICAgICAgaWYgKGluZGV4RXhpc3QgPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhc2hDYWNoZVBhcmVudFtpbmRleEV4aXN0XSA9IGl0ZW1BZGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQucHVzaChpdGVtQWRkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTOG6pXkgdGjDqm0gYuG6o24gZ2hpIGNoYSBj4bunYSBi4bqjbiBnaGkgY2hhXG4gICAgICAgICAgICBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShpdGVtUGFyZW50KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxQYXJlbnQocmVzdWx0LCBwYXJlbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhbHJlYWR5SGFzUGFyZW50KG9wdGlvbnM6IGFueVtdLCBpbmRleFN0YXJ0OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpIHtcbiAgICAgICAgd2hpbGUgKGluZGV4U3RhcnQgPiAtMSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNbaW5kZXhTdGFydF0udmFsdWUuaWQgPT0gcGFyZW50SWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnNbaW5kZXhTdGFydF0udmFsdWUubGV2ZWwgPT0gbGV2ZWwgJiYgdGhpcy5nZXRQYXJlbnRJZEZyb21JdGVtKG9wdGlvbnNbaW5kZXhTdGFydF0pICE9IHBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhc2hDYWNoZVBhcmVudC5zb21lKHEgPT4gcS52YWx1ZS5pZCA9PSBwYXJlbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleFN0YXJ0LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50SWRGcm9tSXRlbShpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xuICAgIH1cblxuICAgIG1vZGlmeU9wdGlvbldoZW5GaWx0ZXIgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuZHJvcGRvd24uX29wdGlvbnM7XG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIG1vZGlmeU9wdGlvbldoZW5GaWx0ZXJNdWx0aXBsZSA9IChvcHRpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25PcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdC5fb3B0aW9ucztcbiAgICAgICAgdGhpcy5fbW9kaWZ5T3B0aW9uV2hlbkZpbHRlcihvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucykge1xuICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2ldKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSB0aGlzLmd1aWRFbXB0eSAmJiBwYXJlbnRJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgY8OhYyBi4bqjbiBnaGkgcGjDrWEgdHLGsOG7m2MgeGVtIMSRw6MgY8OzIGLhuqNuIGdoaSBjaGEgY2jGsGEgKENobyDEkeG6v24gZ2hpIGfhurdwIGLhuqNuIGdoaSBjw7luZyBsZXZlbCBuaMawbmcga2jDoWMgcGFyZW50SWQpXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUGFyZW50ID0gdGhpcy5hbHJlYWR5SGFzUGFyZW50KG9wdGlvbnMsIGkgLSAxLCBwYXJlbnRJZCwgb3B0aW9uc1tpXS5sZXZlbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbGxQYXJlbnQocGFyZW50cywgcGFyZW50SWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNwbGljZShpLCAwLCAuLi5wYXJlbnRzLnJldmVyc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IHBhcmVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlRmlsdGVyRnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZGlzYWJsZURpc3BsYXlGaWVsZFNlcnZlclNlYXJjaCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQucHVzaCh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VydmVyU2VhcmNoID0gdmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkWzBdLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VydmVyU2VhcmNoID0gdmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBWYWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmlsdGVycy5wdXNoKHsgZmllbGQ6IGZpZWxkU2VhcmNoLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgdmFsdWU6IHRtcFZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGEoZmlsdGVyUGFyZW50cz86IEZpbHRlcltdKSB7XG4gICAgICAgIGlmICghZmlsdGVyUGFyZW50cykgZmlsdGVyUGFyZW50cyA9IFtdO1xuICAgICAgICB0aGlzLmZpbHRlckZyb21QYXJlbnRzID0gZmlsdGVyUGFyZW50cztcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHBhZ2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLmF1dG9mb2N1c1NlbGVjdGVkSXRlbSA9IHRydWU7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSkgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgaWYgKHBhZ2UgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvZm9jdXNTZWxlY3RlZEl0ZW0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bikgdGhpcy5kcm9wZG93bi5zZWxlY3RlZE9wdGlvblVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBBcHBlbmQgdGjDqm0gZGF0YXNvdXJjZVxuICAgICAgICAgICAgICAgIGNvbnN0IHRtcERhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlSW50ZXJuYWxdO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRGF0YVNvdXJjZSh0bXBEYXRhU291cmNlLCBkYXRhU291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wRGF0YVNvdXJjZS5sZW5ndGggPT0gdGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFOZXh0UGFnZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IHRtcERhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdG1wRGF0YVNvdXJjZSA9IFsuLi5kYXRhU291cmNlXTtcbiAgICAgICAgICAgIGlmICgodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICYmIHRoaXMuX3ZhbHVlLmxlbmd0aClcbiAgICAgICAgICAgICAgICB8fCAoIXRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCAmJiB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZVNlYXJjaFNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmREYXRhU291cmNlKHRtcERhdGFTb3VyY2UsIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gdG1wRGF0YVNvdXJjZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSAmJiB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2Rpc2FibGVGaWVsZE5vdFVzZSddKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFN1RHVuZyA9IHRoaXMuY29udHJvbC5iYXNlU2VydmljZVsnZmllbGRTdUR1bmcnXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goaXRlbSA9PiBpdGVtLmluYWN0aXZlID0gIWl0ZW0udmFsdWVbZmllbGRTdUR1bmddKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGF0YVNvdXJjZShkZXN0U291cmNlOiBhbnlbXSwgZGF0YVNvdXJjZTogYW55W10sIGRpcmVjdGlvbjogbnVtYmVyID0gMSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkZXN0U291cmNlLmZpbmRJbmRleChxID0+IHEudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkTWFQaGFuQ2FwXSA+IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRNYVBoYW5DYXBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSBi4bqjbiBnaGkgY3Xhu5FpIGPDuW5nIGzDoCBuw7MgdGjDrCBrIGluc2VydFxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdFNvdXJjZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBkZXN0U291cmNlW2Rlc3RTb3VyY2UubGVuZ3RoIC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnB1c2goc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnVuc2hpZnQoc291cmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE7hur91IGLhuqNuIGdoaSBuZ2F5IHRyxrDhu5tjIHbhu4sgdHLDrSBj4bqnbiBpbnNlcnQgbMOgIGLhuqNuIGdoaSBoaeG7h24gdOG6oWkgdGjDrCBrIGluc2VydFxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdFNvdXJjZVtpbmRleCAtIDFdLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSA9PSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2VbaW5kZXggLSAxXS5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2Uuc3BsaWNlKGluZGV4LCAwLCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkZXN0U291cmNlLmZpbmRJbmRleChxID0+IHEudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0U291cmNlLnVuc2hpZnQoc291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja0FuZEZpcmVFdmVudChmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGZvcmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQodGhpcy5jb250cm9sLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gW107XG4gICAgICAgICAgICBpZiAoIW9sZFZhbHVlKSBvbGRWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgaWYgKG9sZFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VmFsdWVTZWxlY3RlZE11bHRpcGxlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gMFxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gW3RoaXMuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdWYWx1ZTtcblxuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZS5sZW5ndGggIT0gdGhpcy5fdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fY29tbW9uU2VydmljZS5pc1NhbWVBcnJheShvbGRWYWx1ZSwgdGhpcy5fdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWUyV2F5QmluZGluZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRqdXN0VmFsdWVTZWxlY3RlZFNpbmdsZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlID09IG51bGxcbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wubm90SW5DcnVkRm9ybVxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5hdXRvRGlzcGxheUZpcnN0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBMxrB1IMO9IGlmIOG7nyBkxrDhu5tpIGtow7RuZyDEkcaw4bujYyDEkeG7lWkgdGjDoG5oIG9sZFZhbHVlICE9IHRoaXMuX3ZhbHVlXG4gICAgICAgICAgICAgICAgLy8gVsOsIGdpw6EgdHLhu4sgY+G7p2EgdGhpcy5fdmFsdWUgc+G6vSDEkcaw4bujYyBjb3JyZWN0aW5nIOG7nyB0csOqbiAoaWQgPT4gb2JqZWN0KSBuw6puIHNvIHPDoW5oIHPhur0ga2jDoWMgbmhhdVxuICAgICAgICAgICAgICAgIGlmICgob2xkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLl92YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICB8fCAob2xkVmFsdWUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsdWUgIT0gb2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGVja1JlYWR5KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0U2VsZWN0ZWRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIGxldCBsZW5ndGggPSAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuX3ZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy5fdmFsdWUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLl92YWx1ZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBkYXRhU291cmNlIH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnMsIDEsIGxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCA9IGRhdGFTb3VyY2U7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlSW50ZXJuYWwgJiYgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZUludGVybmFsLCAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZVNlbGVjdGVkTXVsdGlwbGUoKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gW107XG4gICAgICAgIGNvbnN0IHRtcFZhbHVlID0gWy4uLnRoaXMuX3ZhbHVlXTtcbiAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZUZyb21EYXRhU291cmNlKG5ld1ZhbHVlLCB0bXBWYWx1ZSwgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwpO1xuICAgICAgICB0aGlzLmFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWUsIHRtcFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCk7XG4gICAgICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWU6IGFueVtdLCBjdXJyZW50VmFsdWU6IGFueVtdLCBkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgfHwgIWRhdGFTb3VyY2UubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBjdXJyZW50VmFsdWVbaV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtKVxuICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgc2VsZWN0ZWRJdGVtW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUucHVzaChpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkanVzdFZhbHVlU2VsZWN0ZWRTaW5nbGUoKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKG9sZFZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5maW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCk7XG4gICAgICAgIHRoaXMuZmluZEl0ZW1Gcm9tRGF0YVNvdXJjZShvbGRWYWx1ZSwgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEl0ZW1Gcm9tRGF0YVNvdXJjZShvbGRWYWx1ZTogYW55LCBkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgfHwgIWRhdGFTb3VyY2UubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIG9sZFZhbHVlKVxuICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBvbGRWYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjaGVja1JlYWR5KCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm9uQWRqdXN0ZWRWYWx1ZVxuICAgICAgICAgICAgJiYgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZVxuICAgICAgICAgICAgJiYgKCghdGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAhPSBudWxsICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA+IDApKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZUFkanVzdFZhbHVlRXZlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTogU2VsZWN0SXRlbSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlU3RydWN0dXJlRmxhdE9iamVjdChpdGVtKTtcbiAgICB9XG5cbiAgICByZVN0cnVjdHVyZUZsYXRPYmplY3QoaXRlbSkge1xuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0ge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0SXRlbVZhbHVlKGl0ZW0sIHRoaXMuY29udHJvbCksXG4gICAgICAgICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB8fCBpdGVtLl9HZW5lcmF0ZWRCeUJhc2UgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuZ2V0SXRlbUxhYmVsKGl0ZW0sIHRoaXMuY29udHJvbCk7XG4gICAgICAgIGlmICh0ZW1wLmxhYmVsID09PSBudWxsIHx8IHRlbXAubGFiZWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGVtcC5sYWJlbCA9ICdLaMO0bmcgeMOhYyDEkeG7i25oJztcbiAgICAgICAgfVxuICAgICAgICB0ZW1wLnZhbHVlLl9kcm9wZG93bnZhbHVlID0gdGhpcy5jb250cm9sLnZhbHVlRmllbGQ7XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbVZhbHVlKGl0ZW0sIGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xuICAgICAgICByZXR1cm4gY29udHJvbC5mdW5jR2V0VmFsdWUgPyBjb250cm9sLmZ1bmNHZXRWYWx1ZShpdGVtKSA6IGl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtTGFiZWwoaXRlbSwgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgIGlmIChjb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtW2NvbnRyb2wuZGlzcGxheUZpZWxkXSB8fCBpdGVtWydsYWJlbCddO1xuICAgIH1cblxuICAgIHJlc2V0Q29udHJvbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsID0gW107XG4gICAgICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFyRGF0YXNvdXJjZSgpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcbiAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGEocGFnZTogbnVtYmVyID0gMSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKHBhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YVNvdXJjZShwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZSB8fCAxO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gYXdhaXQgdGhpcy5maWx0ZXJQcm9jZXNzKHRoaXMuZmlsdGVyRnJvbVBhcmVudHMpO1xuICAgICAgICBpZiAoZmlsdGVycyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoW10sIHBhZ2UpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBkYXRhU291cmNlLCByYXdEYXRhU291cmNlLCB0b3RhbFBhZ2UgfSA9IGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVycywgcGFnZSk7XG4gICAgICAgIHRoaXMudG90YWxQYWdlID0gdG90YWxQYWdlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCBwYWdlKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQW5kRmlyZUV2ZW50KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE7hur91IGRyb3Bkb3duIGsgbuG6sW0gdHJvbmcgY3J1ZCBmb3JtIHRow6wgY+G6pXUgaMOsbmggZmlyZUNhbGxCYWNrSW5zaWRlID0gdHJ1ZSAobeG6t2MgxJHhu4tuaCkgxJHhu4MgZmlyZSB0cuG7sWMgdGnhur9wIHThu6sgdHJvbmcgY29tcG9uZW50XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZmlyZUNhbGxCYWNrSW5zaWRlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2goPGFueT57XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHJhd0RhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGVsbTogdGhpc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFTb3VyY2VMb2FkZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIGVsbTogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnM6IEZpbHRlcltdLCBwYWdlOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gbnVsbCkge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IG51bGw7XG4gICAgICAgIGxldCB0b3RhbFBhZ2UgPSAxO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlWydmaWVsZFNvcnQnXSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNvcnRzID0gW3RoaXMubmV3U29ydCh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2ZpZWxkU29ydCddKV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGRTdUR1bmcgPSB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2ZpZWxkU3VEdW5nJ107XG4gICAgICAgIGlmIChmaWVsZFN1RHVuZykge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNvcnRzLnNwbGljZSgwLCAwLCB0aGlzLm5ld1NvcnQoZmllbGRTdUR1bmcsIC0xKSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZmllbGRQbHVzICs9IGAsJHtmaWVsZFN1RHVuZ31gO1xuXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsID0gKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVtmaWVsZFN1RHVuZ10gPyBpdGVtW3RoaXMuY29udHJvbC5kaXNwbGF5RmllbGRdIDogYCR7aXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXX0gKEtow7RuZyBz4butIGThu6VuZylgO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuX2NydWRTZXJ2aWNlLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyh0aGlzLmNvbnRyb2wpO1xuICAgICAgICBkcm9wZG93bk9wdGlvbnMucGFnZSA9IHBhZ2U7XG4gICAgICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbC5ncm91cENvZGUsIG51bGwsIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSB8fCB0aGlzLmNvbnRyb2wuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZmllbGRUcmVlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVQYXJlbnRSb290LFxuICAgICAgICAgICAgICAgICAgICBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsIGRyb3Bkb3duT3B0aW9uc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhU291cmNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIHRvdGFsUGFnZSA9IE1hdGguY2VpbChyZXNwb25zZS50b3RhbFJlY29yZCAvIGRyb3Bkb3duT3B0aW9ucy5wYWdlU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShkYXRhU291cmNlLCBkcm9wZG93bk9wdGlvbnMucmVmRmllbGRzKTtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlKSBkYXRhU291cmNlID0gW107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRhdGFTb3VyY2U6IHJlc3VsdCwgcmF3RGF0YVNvdXJjZTogZGF0YVNvdXJjZSwgdG90YWxQYWdlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaWx0ZXJQcm9jZXNzKGZpbHRlckZyb21QYXJlbnRzOiBGaWx0ZXJbXSkge1xuICAgICAgICBsZXQgZmlsdGVycyA9IFsuLi5maWx0ZXJGcm9tUGFyZW50c107XG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcikge1xuICAgICAgICAgICAgY29uc3QgYWxsb3cgPSBhd2FpdCB0aGlzLmNvbnRyb2wubW9kaWZ5RmlsdGVyKGZpbHRlcnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFsbG93ID09PSBmYWxzZSkgZmlsdGVycyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICBnZXRQYW5lbENsYXNzKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFwcGVuZFRvID09ICdib2R5Jykge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuY29udHJvbC5wYW5lbENsYXNzfSBwLWZpeGVkYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sLnBhbmVsQ2xhc3M7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XG4gICAgICAgIHRoaXMuX3JldHVyblZhbHVlID0gdGhpcy5mdW5jUmV0dXJuVmFsdWUodGhpcy5fdmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja0luaXRlZENvbnRyb2woKSB7XG4gICAgICAgIC8vIE7hur91IGNoxrBhIGNo4bqheSBxdWEgaW5pdCB0aMOsIGsgZmlyZSBldmVudCBnw6wgY+G6o1xuICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRyb2wuX2NvbXBvbmVudDtcbiAgICB9XG5cbiAgICBhZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlUmV0dXJuKTtcbiAgICB9XG5cbiAgICBmaXJlQ2hhbmdlZEV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodmFsdWVSZXR1cm4pO1xuICAgIH1cblxuICAgIGZpcmVBZGp1c3RWYWx1ZUV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuYWRqdXN0VmFsdWUubmV4dCh2YWx1ZVJldHVybik7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VTZWxlY3RlZChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50Lml0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBzZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGF0YVNvdXJjZUludGVybmFsLm1hcChxID0+IHEudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUcsaw4budbmcgaOG7o3AgdW5zZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdERlc2NlbmRhbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZHMgPSBbZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXV07XG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgaXRlbSDEkcaw4bujYyBjaOG7jW4gPT4gQ2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uLCBjaMOhdVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUucHVzaChzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gaXRlbSDEkWFuZyBi4buLIGLhu48gY2jhu41uID0+IGjhu6d5IGNo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdENoaWxkSXRlbSkge1xuICAgICAgICAgICAgICAgIC8vIE7hur91IGl0ZW0gxJHGsOG7o2MgY2jhu41uID0+IENo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIGl0ZW0gxJFhbmcgYuG7iyBi4buPIGNo4buNbiA9PiBo4buneSBjaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQgPT0gZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSXRlbShldnQsIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHNlbGVjdGVkSXRlbSk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25DbGlja0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Ecm9wZG93bkNsaWNrLm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKCRldmVudCkge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpJyAmJiAkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndWktZHJvcGRvd24tY2xlYXItaWNvbicpKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcucC1kcm9wZG93bi1pdGVtcy13cmFwcGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLmRyb3Bkb3duLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLl9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KTtcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBvblBhbmVsU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLnAtbXVsdGlzZWxlY3QtaXRlbXMtd3JhcHBlcicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdElucHV0ID0gdGhpcy5tdWx0aVNlbGVjdC5maWx0ZXJJbnB1dENoaWxkLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpO1xuICAgICAgICB0aGlzLm9uU2hvd1NtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIGhhbmRsZVNjcm9sbCA9IChldnQpID0+IHtcbiAgICAgICAgaWYgKGV2dC5zcmNFbGVtZW50LnNjcm9sbFRvcCA+IDBcbiAgICAgICAgICAgICYmICF0aGlzLmZpcnN0U2Nyb2xsXG4gICAgICAgICAgICAmJiBldnQuc3JjRWxlbWVudC5vZmZzZXRIZWlnaHQgKyBldnQuc3JjRWxlbWVudC5zY3JvbGxUb3AgPj0gZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dFNjcm9sbCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFNjcm9sbCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRTY3JvbGwgPSBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YU5leHRQYWdlKCk7XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0RGF0YU5leHRQYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnBhZ2UrKztcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSh0aGlzLnBhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKTtcbiAgICAgICAgdGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpO1xuICAgICAgICAvLyBkZWZhdWx0SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCBkZWZhdWx0SW5wdXQpO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uSGlkZUhhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25IaWRlLmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSAhPSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhRW1pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChkYXRhRW1pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cihldnQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdChldnQpO1xuICAgIH1cblxuICAgIHNob3dGb3JtUXVpY2tBZGQoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICAgICAgbGV0IGluaXREYXRhID0gdGhpcy5jb250cm9sLmluaXREYXRhO1xuICAgICAgICBpZiAodHlwZW9mIGluaXREYXRhICE9ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpbml0RGF0YSA9ICg8RnVuY3Rpb24+KHRoaXMuY29udHJvbC5pbml0RGF0YSkpKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybU1vZGVsLmRhdGEgPSB7IC4uLmluaXREYXRhIH07XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuZGF0YS5mb3JtTW9kZWwgPSBmb3JtTW9kZWw7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEsgc+G7rWEgdGjDoG5oIGZ1bmN0aW9uLCBwaOG6o2kgxJHhu4MgYXJyb3cgZnVuY3Rpb25cbiAgICBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgLy8gSyBz4butYSB0aMOgbmggZnVuY3Rpb24sIHBo4bqjaSDEkeG7gyBhcnJvdyBmdW5jdGlvblxuICAgIGhhbmRsZVNhdmVkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICB9O1xuXG4gICAgc2hvd0Zvcm1TZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBmb3JtTW9kZWwgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1Nb2RlbC5kYXRhID0ge307XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnNldHRpbmdEaWFsb2dNb2RlbC5kYXRhLmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5zZXR0aW5nRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVTYXZlZFNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ0RpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpIHtcbiAgICAgICAgY29uc3QgZGVsYXlTZWFyY2hUaW1lID0gdGhpcy5nZXREZWxheVNlYXJjaFRpbWUoKTtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5rZXlVcC5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpLFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKGRlbGF5U2VhcmNoVGltZSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKVxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoZWNrRGlzYWJsZWQoY29udHJvbDogRm9ybUNvbnRyb2xCYXNlKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kYXRhLl9zdGF0dXMgJiYgdGhpcy5kYXRhLl9zdGF0dXNbY29udHJvbC5maWVsZF0gJiYgdGhpcy5kYXRhLl9zdGF0dXNbY29udHJvbC5maWVsZF0uZGlzYWJsZWQgPT09IHRydWUpIHx8IGNvbnRyb2wuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgZ2V0SXRlbVNlbGVjdGVkTGFiZWwoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcbiAgICB9XG59XG4iXX0=
@@ -137,7 +137,7 @@ export class HtmlPreviewComponent {
137
137
  HtmlPreviewComponent.decorators = [
138
138
  { type: Component, args: [{
139
139
  selector: 'html-preview',
140
- template: "<div class=\"preview-box\" [ngClass]=\"{ 'disabled-box': control.disabled }\" id=\"math-preview-box-{{id}}\" [ngStyle]=\"{'height': control.disabled ? 'auto' : control.height + 'px'}\">\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\">\n <div #mathContent id=\"mathPreview-{{id}}\"></div>\n </tn-custom-scrollbar>\n</div>",
140
+ template: "<div class=\"preview-box\" [ngClass]=\"{ 'disabled-box': control.disabled }\" id=\"math-preview-box-{{id}}\" [ngStyle]=\"{'height': control.disabled ? 'auto' : control.height + 'px', 'min-height': control.height + 'px'}\">\n <tn-custom-scrollbar [showScrollHorizontal]=\"true\">\n <div #mathContent id=\"mathPreview-{{id}}\"></div>\n </tn-custom-scrollbar>\n</div>",
141
141
  providers: [
142
142
  ComponentContextService,
143
143
  {
@@ -158,4 +158,4 @@ HtmlPreviewComponent.propDecorators = {
158
158
  control: [{ type: Input }],
159
159
  onChanged: [{ type: Output }]
160
160
  };
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2h0bWwtcHJldmlldy9odG1sLXByZXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQVksS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQWU5RCxNQUFNLE9BQU8sb0JBQW9CO0lBWTdCLFlBQ1csRUFBaUIsRUFDaEIsY0FBNkI7UUFEOUIsT0FBRSxHQUFGLEVBQUUsQ0FBZTtRQUNoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQVpoQyxZQUFPLEdBQTZCLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUNsRSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUc5QyxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBSXJCLE9BQUUsR0FBUSxFQUFFLENBQUM7UUFNVCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxnQ0FBZ0M7SUFDaEMsNkJBQTZCO0lBQzdCLFFBQVE7SUFDUixJQUFJO0lBRUosVUFBVSxDQUFDLEdB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YztnQkFDeEIsZ1dBQTRDO2dCQUU1QyxTQUFTLEVBQUU7b0JBQ1AsdUJBQXVCO29CQUN2Qjt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO3dCQUNuRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtpQkFDSjs7YUFDSjs7O1lBZFEsYUFBYTtZQURiLGFBQWE7OzswQkFpQmpCLFNBQVMsU0FBQyxhQUFhO3NCQUN2QixLQUFLO3dCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItY29uc3QgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3RvciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgSHRtbFByZXZpZXdDb250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdodG1sLXByZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9odG1sLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2h0bWwtcHJldmlldy5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBIdG1sUHJldmlld0NvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSHRtbFByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBAVmlld0NoaWxkKCdtYXRoQ29udGVudCcpIG1hdGhDb250ZW50O1xuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEh0bWxQcmV2aWV3Q29udHJvbFNjaGVtYSA9IG5ldyBIdG1sUHJldmlld0NvbnRyb2xTY2hlbWEoKTtcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBtYXRoSmF4T2JqZWN0O1xuICAgIGNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuXG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uO1xuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XG4gICAgaWQ6IGFueSA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBnczogR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgfVxuXG4gICAgLy8gbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vICAgICBpZiAoY2hhbmdlc1snY29udGVudCddKSB7XG4gICAgLy8gICAgICAgICB0aGlzLnJlbmRlck1hdGgoKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gb2JqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJNYXRoKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHJlbmRlck1hdGgoKSB7XG4gICAgICAgIHRoaXMubWF0aEpheE9iamVjdCA9IHRoaXMuZ3MubmF0aXZlR2xvYmFsKClbJ01hdGhKYXgnXTtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGhKYXhPYmplY3QgJiYgIXRoaXMubWF0aENvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICR0aGlzID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IGF1dG9TY3JvbGxCb3R0b20gPSAhISR0aGlzLmNvbnRyb2w/LmF1dG9TY3JvbGxCb3R0b207XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSAkdGhpcy5tYXRoQ29udGVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAkdGhpcy5jb250ZW50Py50cmltKCkgfHwgJyc7XG4gICAgICAgICAgICBpZiAoISR0aGlzLmNvbnRyb2wuaXNIdG1sKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gY29udGVudDtcbiAgICAgICAgICAgIGlmICgkdGhpcy5tYXRoSmF4T2JqZWN0LnRleFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgJHRoaXMubWF0aEpheE9iamVjdC50ZXhSZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCR0aGlzLm1hdGhKYXhPYmplY3QudHlwZXNldENsZWFyKSB7XG4gICAgICAgICAgICAgICAgJHRoaXMubWF0aEpheE9iamVjdC50eXBlc2V0Q2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkdGhpcy5tYXRoSmF4T2JqZWN0LnR5cGVzZXRQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgJHRoaXMubWF0aEpheE9iamVjdC50eXBlc2V0UHJvbWlzZShbb3V0cHV0XSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlcnIubWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIHNvbWV0aGluZyBhZnRlciB0eXBlc2V0XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvU2Nyb2xsQm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjbWF0aC1wcmV2aWV3LWJveC0keyR0aGlzLmlkfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwcy0tYWN0aXZlLXknKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtYXRoUHJldmlldy0keyR0aGlzLmlkfWApPy5pbm5lckhUTUw/LnRyaW0oKSA/PyAnJztcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy5vbkNoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJHRoaXMubWF0aEpheE9iamVjdC5zdGFydHVwLmRlZmF1bHRQYWdlUmVhZHkgPyAkdGhpcy5tYXRoSmF4T2JqZWN0LnN0YXJ0dXAuZGVmYXVsdFBhZ2VSZWFkeSgpIDogJHRoaXMubWF0aEpheE9iamVjdC5zdGFydHVwLmRlZmF1bHRQYWdlUmVhZHk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRNYXRoQ29uZmlnKCkge1xuICAgICAgICBjb25zdCB3ZDogYW55ID0gdGhpcy5ncy5uYXRpdmVHbG9iYWwoKTtcbiAgICAgICAgd2QuTWF0aEpheCA9IHtcbiAgICAgICAgICAgICdsb2FkZXInOiB7IGxvYWQ6IFsnaW5wdXQvYXNjaWltYXRoJywgJ291dHB1dC9jaHRtbCcsICd1aS9tZW51JywgJ291dHB1dC9zdmcnLCAnW21tbF0vbW1sMyddIH0sXG4gICAgICAgICAgICAndGV4Jzoge1xuICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcXFwoJywgJ1xcXFwpJ11dLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NFc2NhcGVzOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3N0YXJ0dXAnOiB7XG4gICAgICAgICAgICAgICAgcGFnZVJlYWR5OiAoKSA9PiB0aGlzLnJlbmRlck1hdGgoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzdmcnOiB7XG4gICAgICAgICAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgICAgICAgICAgbWluU2NhbGU6IC41XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ29wdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlTWVudTogISF0aGlzLmNvbnRyb2w/LnVzZU1hdGhKYXhNZW51LCAvLyBzZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgbWVudVxuICAgICAgICAgICAgICAgIG1lbnVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhIaW50czogdHJ1ZSwgLy8gcHV0IFRlWC1yZWxhdGVkIGF0dHJpYnV0ZXMgb24gTWF0aE1MXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY3M6IGZhbHNlLCAvLyBwdXQgb3JpZ2luYWwgZm9ybWF0IGluIDxzZW1hbnRpYz4gdGFnIGluIE1hdGhNTFxuICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogJ0RvdWJsZS1DbGljaycsIC8vIG9yICdDbGljaycgb3IgJ0RvdWJsZUNsaWNrJyBhcyB6b29tIHRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpzY2FsZTogJzIwMCUnLCAvLyB6b29tIHNjYWxpbmcgZmFjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcjogdGhpcy5jb250cm9sPy5tYXRoSmF4VHlwZSA/IHRoaXMuY29udHJvbC5tYXRoSmF4VHlwZSA6ICdDSFRNTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogMSwgLy8gc2NhbGluZyBmYWN0b3IgZm9yIGFsbCBtYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBpblRhYk9yZGVyOiB0cnVlLCAvLyB0cnVlIGlmIHRhYmJpbmcgaW5jbHVkZXMgbWF0aFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3Npc3RpdmVNbWw6IHRydWUsIC8vIHRydWUgaWYgaGlkZGVuIGFzc2lzdGl2ZSBNYXRoTUwgc2hvdWxkIGJlIGdlbmVyYXRlZCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiBmYWxzZSwgLy8gdHJ1ZSBpZiBjb21wbGV4IG1hdGggc2hvdWxkIGJlIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBsb3JlcjogZmFsc2UsIC8vIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gZXhwbG9yZXIgc2hvdWxkIGJlIGFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlWDogWydUZVgnLCAnTGFUZVgnLCAnYXBwbGljYXRpb24veC10ZXgnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJNYXRoOiBbJ1N0YXJNYXRoIDUuMCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgTWFwbGU6IFsnTWFwbGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRNYXRoTUw6IFsnTWF0aE1MLUNvbnRlbnQnLCAnYXBwbGljYXRpb24vbWF0aG1sLWNvbnRlbnQreG1sJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuTWF0aDogWydPcGVuTWF0aCddXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sPy5tYXRoSmF4VHlwZSA9PSAnU1ZHJykge1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9ICdhc3NldHMvdmVuZG9yL21hdGhqYXgvdGV4LW1tbC1zdmcuanMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9ICdhc3NldHMvdmVuZG9yL21hdGhqYXgvdGV4LW1tbC1jaHRtbC5qcyc7XG4gICAgICAgIH1cbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnaWQnLCAnTWF0aEpheC1zY3JpcHQnKTtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvYWRNYXRoQ29uZmlnKCk7XG4gICAgfVxufVxuIl19
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2h0bWwtcHJldmlldy9odG1sLXByZXZpZXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQVksS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQWU5RCxNQUFNLE9BQU8sb0JBQW9CO0lBWTdCLFlBQ1csRUFBaUIsRUFDaEIsY0FBNkI7UUFEOUIsT0FBRSxHQUFGLEVBQUUsQ0FBZTtRQUNoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQVpoQyxZQUFPLEdBQTZCLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQUNsRSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUc5QyxZQUFPLEdBQVcsRUFBRSxDQUFDO1FBSXJCLE9BQUUsR0FBUSxFQUFFLENBQUM7UUFNVCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxnQ0FBZ0M7SUFDaEMsNkJBQTZCO0lBQzdCLFFBQVE7SUFDUixJQUFJO0lBRUosVUFBVSxDQUFDLEdB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YztnQkFDeEIscVlBQTRDO2dCQUU1QyxTQUFTLEVBQUU7b0JBQ1AsdUJBQXVCO29CQUN2Qjt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO3dCQUNuRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtpQkFDSjs7YUFDSjs7O1lBZFEsYUFBYTtZQURiLGFBQWE7OzswQkFpQmpCLFNBQVMsU0FBQyxhQUFhO3NCQUN2QixLQUFLO3dCQUNMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItY29uc3QgKi9cbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbmplY3RvciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgSHRtbFByZXZpZXdDb250cm9sU2NoZW1hIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdodG1sLXByZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9odG1sLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2h0bWwtcHJldmlldy5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBIdG1sUHJldmlld0NvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSHRtbFByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBAVmlld0NoaWxkKCdtYXRoQ29udGVudCcpIG1hdGhDb250ZW50O1xuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEh0bWxQcmV2aWV3Q29udHJvbFNjaGVtYSA9IG5ldyBIdG1sUHJldmlld0NvbnRyb2xTY2hlbWEoKTtcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBtYXRoSmF4T2JqZWN0O1xuICAgIGNvbnRlbnQ6IHN0cmluZyA9ICcnO1xuXG4gICAgb25DaGFuZ2U6IEZ1bmN0aW9uO1xuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XG4gICAgaWQ6IGFueSA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBnczogR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgfVxuXG4gICAgLy8gbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vICAgICBpZiAoY2hhbmdlc1snY29udGVudCddKSB7XG4gICAgLy8gICAgICAgICB0aGlzLnJlbmRlck1hdGgoKTtcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cblxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9iaikge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gb2JqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJNYXRoKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIHJlbmRlck1hdGgoKSB7XG4gICAgICAgIHRoaXMubWF0aEpheE9iamVjdCA9IHRoaXMuZ3MubmF0aXZlR2xvYmFsKClbJ01hdGhKYXgnXTtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGhKYXhPYmplY3QgJiYgIXRoaXMubWF0aENvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICR0aGlzID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IGF1dG9TY3JvbGxCb3R0b20gPSAhISR0aGlzLmNvbnRyb2w/LmF1dG9TY3JvbGxCb3R0b207XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSAkdGhpcy5tYXRoQ29udGVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSAkdGhpcy5jb250ZW50Py50cmltKCkgfHwgJyc7XG4gICAgICAgICAgICBpZiAoISR0aGlzLmNvbnRyb2wuaXNIdG1sKSB7XG4gICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gY29udGVudDtcbiAgICAgICAgICAgIGlmICgkdGhpcy5tYXRoSmF4T2JqZWN0LnRleFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgJHRoaXMubWF0aEpheE9iamVjdC50ZXhSZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCR0aGlzLm1hdGhKYXhPYmplY3QudHlwZXNldENsZWFyKSB7XG4gICAgICAgICAgICAgICAgJHRoaXMubWF0aEpheE9iamVjdC50eXBlc2V0Q2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgkdGhpcy5tYXRoSmF4T2JqZWN0LnR5cGVzZXRQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgJHRoaXMubWF0aEpheE9iamVjdC50eXBlc2V0UHJvbWlzZShbb3V0cHV0XSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlcnIubWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvIHNvbWV0aGluZyBhZnRlciB0eXBlc2V0XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvU2Nyb2xsQm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjbWF0aC1wcmV2aWV3LWJveC0keyR0aGlzLmlkfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IGJveC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwcy0tYWN0aXZlLXknKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBtYXRoUHJldmlldy0keyR0aGlzLmlkfWApPy5pbm5lckhUTUw/LnRyaW0oKSA/PyAnJztcbiAgICAgICAgICAgICAgICAgICAgJHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy5vbkNoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJHRoaXMubWF0aEpheE9iamVjdC5zdGFydHVwLmRlZmF1bHRQYWdlUmVhZHkgPyAkdGhpcy5tYXRoSmF4T2JqZWN0LnN0YXJ0dXAuZGVmYXVsdFBhZ2VSZWFkeSgpIDogJHRoaXMubWF0aEpheE9iamVjdC5zdGFydHVwLmRlZmF1bHRQYWdlUmVhZHk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRNYXRoQ29uZmlnKCkge1xuICAgICAgICBjb25zdCB3ZDogYW55ID0gdGhpcy5ncy5uYXRpdmVHbG9iYWwoKTtcbiAgICAgICAgd2QuTWF0aEpheCA9IHtcbiAgICAgICAgICAgICdsb2FkZXInOiB7IGxvYWQ6IFsnaW5wdXQvYXNjaWltYXRoJywgJ291dHB1dC9jaHRtbCcsICd1aS9tZW51JywgJ291dHB1dC9zdmcnLCAnW21tbF0vbW1sMyddIH0sXG4gICAgICAgICAgICAndGV4Jzoge1xuICAgICAgICAgICAgICAgIGlubGluZU1hdGg6IFtbJyQnLCAnJCddLCBbJ1xcXFwoJywgJ1xcXFwpJ11dLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NFc2NhcGVzOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3N0YXJ0dXAnOiB7XG4gICAgICAgICAgICAgICAgcGFnZVJlYWR5OiAoKSA9PiB0aGlzLnJlbmRlck1hdGgoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdzdmcnOiB7XG4gICAgICAgICAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgICAgICAgICAgbWluU2NhbGU6IC41XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ29wdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlTWVudTogISF0aGlzLmNvbnRyb2w/LnVzZU1hdGhKYXhNZW51LCAvLyBzZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgbWVudVxuICAgICAgICAgICAgICAgIG1lbnVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXhIaW50czogdHJ1ZSwgLy8gcHV0IFRlWC1yZWxhdGVkIGF0dHJpYnV0ZXMgb24gTWF0aE1MXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW1hbnRpY3M6IGZhbHNlLCAvLyBwdXQgb3JpZ2luYWwgZm9ybWF0IGluIDxzZW1hbnRpYz4gdGFnIGluIE1hdGhNTFxuICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogJ0RvdWJsZS1DbGljaycsIC8vIG9yICdDbGljaycgb3IgJ0RvdWJsZUNsaWNrJyBhcyB6b29tIHRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpzY2FsZTogJzIwMCUnLCAvLyB6b29tIHNjYWxpbmcgZmFjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlcjogdGhpcy5jb250cm9sPy5tYXRoSmF4VHlwZSA/IHRoaXMuY29udHJvbC5tYXRoSmF4VHlwZSA6ICdDSFRNTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogMSwgLy8gc2NhbGluZyBmYWN0b3IgZm9yIGFsbCBtYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICBpblRhYk9yZGVyOiB0cnVlLCAvLyB0cnVlIGlmIHRhYmJpbmcgaW5jbHVkZXMgbWF0aFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3Npc3RpdmVNbWw6IHRydWUsIC8vIHRydWUgaWYgaGlkZGVuIGFzc2lzdGl2ZSBNYXRoTUwgc2hvdWxkIGJlIGdlbmVyYXRlZCBmb3Igc2NyZWVuIHJlYWRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiBmYWxzZSwgLy8gdHJ1ZSBpZiBjb21wbGV4IG1hdGggc2hvdWxkIGJlIGNvbGxhcHNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBsb3JlcjogZmFsc2UsIC8vIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gZXhwbG9yZXIgc2hvdWxkIGJlIGFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlWDogWydUZVgnLCAnTGFUZVgnLCAnYXBwbGljYXRpb24veC10ZXgnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJNYXRoOiBbJ1N0YXJNYXRoIDUuMCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgTWFwbGU6IFsnTWFwbGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRNYXRoTUw6IFsnTWF0aE1MLUNvbnRlbnQnLCAnYXBwbGljYXRpb24vbWF0aG1sLWNvbnRlbnQreG1sJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVuTWF0aDogWydPcGVuTWF0aCddXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sPy5tYXRoSmF4VHlwZSA9PSAnU1ZHJykge1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9ICdhc3NldHMvdmVuZG9yL21hdGhqYXgvdGV4LW1tbC1zdmcuanMnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9ICdhc3NldHMvdmVuZG9yL21hdGhqYXgvdGV4LW1tbC1jaHRtbC5qcyc7XG4gICAgICAgIH1cbiAgICAgICAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnaWQnLCAnTWF0aEpheC1zY3JpcHQnKTtcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvYWRNYXRoQ29uZmlnKCk7XG4gICAgfVxufVxuIl19