barsa-sap-ui 2.2.63 → 2.2.64
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/barsa-cartable-form/barsa-cartable-form.component.mjs +1 -1
- package/esm2022/lib/barsa-chat/barsa-chat.component.mjs +2 -2
- package/esm2022/lib/barsa-dynamic-field/barsa-dynamic-field.component.mjs +1 -1
- package/esm2022/lib/barsa-question-answer-form/barsa-question-answer-form.component.mjs +1 -1
- package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +1 -1
- package/esm2022/lib/column-matrix-renderer/column-matrix-renderer.component.mjs +1 -1
- package/esm2022/lib/column-renderer/column-renderer.component.mjs +5 -3
- package/esm2022/lib/layout-control/layout-control.component.mjs +5 -3
- package/esm2022/lib/list-item/list-item.component.mjs +1 -1
- package/esm2022/lib/models/grid-data-provider.mjs +5 -3
- package/esm2022/lib/sap-ui-report-base.component.mjs +2 -2
- package/esm2022/lib/ui-container-with-button/ui-container-with-button.component.mjs +1 -1
- package/esm2022/lib/ui-date-range-ex/ui-date-range-ex.component.mjs +2 -2
- package/esm2022/lib/ui-matrix-view/ui-matrix-view.component.mjs +2 -2
- package/esm2022/lib/ui-mo-info-general-object-ui/ui-mo-info-general-object-ui.component.mjs +1 -1
- package/esm2022/lib/ui-num-int-ui/ui-num-int-ui.component.mjs +3 -3
- package/fesm2022/barsa-sap-ui.mjs +27 -21
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/column-renderer/column-renderer.component.d.ts +2 -1
- package/lib/layout-control/layout-control.component.d.ts +2 -1
- package/lib/models/grid-data-provider.d.ts +2 -1
- package/package.json +1 -1
|
@@ -222,11 +222,11 @@ export class LayoutControlComponent extends LayoutItemBaseComponent {
|
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayoutControlComponent, deps: [{ token: i1.FormPanelService }, { token: i0.ElementRef }, { token: i2.ContentDensityService }, { token: i3.DomSanitizer }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.BbbTranslatePipe }, { token: i1.LayoutService, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
225
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LayoutControlComponent, selector: "bsu-layout-control", inputs: { inlineEdit: "inlineEdit", caption: "caption", focusControl: "focusControl", showLabel: "showLabel", maxLabelWidth: "maxLabelWidth", hasHorizontalText: "hasHorizontalText", contentDensity: "contentDensity", flex: "flex", RefreshLabel: "RefreshLabel", SetVisible: "SetVisible" }, outputs: { events: "events" }, host: { properties: { "class.layout-control": "this.layoutControlClass", "class.row-direction": "this.isRowDirection", "class.row-reverse-direction": "this.isRowReverseDirection", "class.column-direction": "this.isColumnDirection", "class.column-reverse-direction": "this.isColumnReverseDirection", "class.container-field": "this.isContainer", "class.readonlyiswraped": "this.readonlyiswraped", "class.labelnotinrow": "this._labelNotInRow", "style.max-width": "this.maxWidth", "style.min-width": "this.minWidth", "style.min-height": "this.minHeight", "style.height": "this.height", "attr.isCheckbox": "this.isCheckbox", "attr.controlIsReadonly": "this.controlIsReadonly", "attr.isButton": "this.isButton", "attr.issinglepicture": "this.isSinglePicture", "attr.minWidth": "this.attrMinWidth", "attr.ismobile": "this.isMobile", "attr.controlId": "this.attrControlId", "attr.caption": "this.attrCaption" } }, providers: [LayoutService], viewQueries: [{ propertyName: "tempLabelRef", first: true, predicate: ["tempLabelRef"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (!hide) { @if (labelVisible) {\r\n<bsu-ly-label\r\n [attr.labelWidth]=\"labelWidth\"\r\n [attrRtl]\r\n #tempLabelRef\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [config]=\"config\"\r\n [caption]=\"labelCaption\"\r\n [translateCaption]=\"translateCaption\"\r\n [originalWidth]=\"labelWidth\"\r\n [style.min-width]=\"\r\n isCheckbox\r\n ? checkboxWidth\r\n : (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && controlIsReadonly)\r\n ? 'fit-content'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [style.width]=\"\r\n (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && (isCheckbox || controlIsReadonly))\r\n ? 'auto'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [isMandatory]=\"isMandatory\"\r\n [fieldIcon]=\"fieldIcon\"\r\n [attr.autosize]=\"config.CaptionSetting?.AlignMode ? true:null\"\r\n [helpDescription]=\"helpDescription\"\r\n [originalXtype]=\"originalXtype\"\r\n [textVisible]=\"textVisible\"\r\n [isColumn]=\"isColumnDirection || isColumnReverseDirection\"\r\n></bsu-ly-label>\r\n}\r\n<label [attr.visible]=\"labelVisible\" class=\"horizontal-label\" [innerHtml]=\"emptyText\"></label>\r\n<bnrc-field-ui\r\n [attr.xtype]=\"config.FieldUi.originalXtype\"\r\n [attr.fieldWidth]=\"layoutControlWidth\"\r\n [attr.isCheckbox]=\"isCheckbox\"\r\n [attr.isbutton]=\"isButton\"\r\n [style.flex-grow]=\"isCheckbox ? 1 : 0\"\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [customField]=\"config.FieldUi\"\r\n [layoutInfo]=\"config\"\r\n [inlineEdit]=\"inlineEdit\"\r\n [formHeight]=\"(formHeight$ | async)!!\"\r\n [focusControl]=\"focusControl\"\r\n [isSearchPanel]=\"isSearchPanel\"\r\n [style.height]=\"isUlv ? '100%' : 'auto'\"\r\n [attr.isulv]=\"isUlv\"\r\n></bnrc-field-ui>\r\n}\r\n", styles: [":host{width:100%;display:flex}:host[ismobile=true].isUlv{width:100%!important}.form-item-label-container{display:flex;position:relative}.lbl-temp{position:absolute;visibility:hidden}bsu-ly-label{padding:0 5px;margin:auto}bsu-ly-label[autosize=true]{margin:inherit}:host[ismobile=true] bsu-ly-label{margin:inherit}bnrc-field-ui[xtype=\"Ui.CheckBox\"]{padding:0}@media screen and (max-width: 599px){:host{height:auto}:host:not([isbutton=true]){min-width:7rem}bnrc-field-ui:not([isbutton=true]){height:auto!important}}\n"], dependencies: [{ kind: "component", type: i1.FieldUiComponent, selector: "bnrc-field-ui", inputs: ["isSearchPanel", "customField", "componentUi", "layoutInfo", "inlineEdit", "focusControl", "formHeight"] }, { kind: "directive", type: i1.AttrRtlDirective, selector: "[attrRtl]", inputs: ["attrRtl"] }, { kind: "component", type: i4.LyLabelComponent, selector: "bsu-ly-label", inputs: ["originalWidth", "minWidth", "translateCaption", "caption", "captionIcon", "helpDescription", "isColumn", "isMandatory", "fieldIcon", "originalXtype", "textVisible"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
225
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LayoutControlComponent, selector: "bsu-layout-control", inputs: { inlineEdit: "inlineEdit", cellEdit: "cellEdit", caption: "caption", focusControl: "focusControl", showLabel: "showLabel", maxLabelWidth: "maxLabelWidth", hasHorizontalText: "hasHorizontalText", contentDensity: "contentDensity", flex: "flex", RefreshLabel: "RefreshLabel", SetVisible: "SetVisible" }, outputs: { events: "events" }, host: { properties: { "class.layout-control": "this.layoutControlClass", "class.row-direction": "this.isRowDirection", "class.row-reverse-direction": "this.isRowReverseDirection", "class.column-direction": "this.isColumnDirection", "class.column-reverse-direction": "this.isColumnReverseDirection", "class.container-field": "this.isContainer", "class.readonlyiswraped": "this.readonlyiswraped", "class.labelnotinrow": "this._labelNotInRow", "style.max-width": "this.maxWidth", "style.min-width": "this.minWidth", "style.min-height": "this.minHeight", "style.height": "this.height", "attr.isCheckbox": "this.isCheckbox", "attr.controlIsReadonly": "this.controlIsReadonly", "attr.isButton": "this.isButton", "attr.issinglepicture": "this.isSinglePicture", "attr.minWidth": "this.attrMinWidth", "attr.ismobile": "this.isMobile", "attr.controlId": "this.attrControlId", "attr.caption": "this.attrCaption" } }, providers: [LayoutService], viewQueries: [{ propertyName: "tempLabelRef", first: true, predicate: ["tempLabelRef"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (!hide) { @if (labelVisible) {\r\n<bsu-ly-label\r\n [attr.labelWidth]=\"labelWidth\"\r\n [attrRtl]\r\n #tempLabelRef\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [config]=\"config\"\r\n [caption]=\"labelCaption\"\r\n [translateCaption]=\"translateCaption\"\r\n [originalWidth]=\"labelWidth\"\r\n [style.min-width]=\"\r\n isCheckbox\r\n ? checkboxWidth\r\n : (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && controlIsReadonly)\r\n ? 'fit-content'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [style.width]=\"\r\n (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && (isCheckbox || controlIsReadonly))\r\n ? 'auto'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [isMandatory]=\"isMandatory\"\r\n [fieldIcon]=\"fieldIcon\"\r\n [attr.autosize]=\"config.CaptionSetting?.AlignMode ? true:null\"\r\n [helpDescription]=\"helpDescription\"\r\n [originalXtype]=\"originalXtype\"\r\n [textVisible]=\"textVisible\"\r\n [isColumn]=\"isColumnDirection || isColumnReverseDirection\"\r\n></bsu-ly-label>\r\n}\r\n<label [attr.visible]=\"labelVisible\" class=\"horizontal-label\" [innerHtml]=\"emptyText\"></label>\r\n<bnrc-field-ui\r\n [attr.xtype]=\"config.FieldUi.originalXtype\"\r\n [attr.fieldWidth]=\"layoutControlWidth\"\r\n [attr.isCheckbox]=\"isCheckbox\"\r\n [attr.isbutton]=\"isButton\"\r\n [style.flex-grow]=\"isCheckbox ? 1 : 0\"\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [customField]=\"config.FieldUi\"\r\n [layoutInfo]=\"config\"\r\n [inlineEdit]=\"inlineEdit\"\r\n [cellEdit]=\"cellEdit\"\r\n [formHeight]=\"(formHeight$ | async)!!\"\r\n [focusControl]=\"focusControl\"\r\n [isSearchPanel]=\"isSearchPanel\"\r\n [style.height]=\"isUlv ? '100%' : 'auto'\"\r\n [attr.isulv]=\"isUlv\"\r\n></bnrc-field-ui>\r\n}\r\n", styles: [":host{width:100%;display:flex}:host[ismobile=true].isUlv{width:100%!important}.form-item-label-container{display:flex;position:relative}.lbl-temp{position:absolute;visibility:hidden}bsu-ly-label{padding:0 5px;margin:auto}bsu-ly-label[autosize=true]{margin:inherit}:host[ismobile=true] bsu-ly-label{margin:inherit}bnrc-field-ui[xtype=\"Ui.CheckBox\"]{padding:0}@media screen and (max-width: 599px){:host{height:auto}:host:not([isbutton=true]){min-width:7rem}bnrc-field-ui:not([isbutton=true]){height:auto!important}}\n"], dependencies: [{ kind: "component", type: i1.FieldUiComponent, selector: "bnrc-field-ui", inputs: ["isSearchPanel", "customField", "componentUi", "layoutInfo", "inlineEdit", "focusControl", "cellEdit", "formHeight"] }, { kind: "directive", type: i1.AttrRtlDirective, selector: "[attrRtl]", inputs: ["attrRtl"] }, { kind: "component", type: i4.LyLabelComponent, selector: "bsu-ly-label", inputs: ["originalWidth", "minWidth", "translateCaption", "caption", "captionIcon", "helpDescription", "isColumn", "isMandatory", "fieldIcon", "originalXtype", "textVisible"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
226
226
|
}
|
|
227
227
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayoutControlComponent, decorators: [{
|
|
228
228
|
type: Component,
|
|
229
|
-
args: [{ selector: 'bsu-layout-control', providers: [LayoutService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (!hide) { @if (labelVisible) {\r\n<bsu-ly-label\r\n [attr.labelWidth]=\"labelWidth\"\r\n [attrRtl]\r\n #tempLabelRef\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [config]=\"config\"\r\n [caption]=\"labelCaption\"\r\n [translateCaption]=\"translateCaption\"\r\n [originalWidth]=\"labelWidth\"\r\n [style.min-width]=\"\r\n isCheckbox\r\n ? checkboxWidth\r\n : (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && controlIsReadonly)\r\n ? 'fit-content'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [style.width]=\"\r\n (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && (isCheckbox || controlIsReadonly))\r\n ? 'auto'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [isMandatory]=\"isMandatory\"\r\n [fieldIcon]=\"fieldIcon\"\r\n [attr.autosize]=\"config.CaptionSetting?.AlignMode ? true:null\"\r\n [helpDescription]=\"helpDescription\"\r\n [originalXtype]=\"originalXtype\"\r\n [textVisible]=\"textVisible\"\r\n [isColumn]=\"isColumnDirection || isColumnReverseDirection\"\r\n></bsu-ly-label>\r\n}\r\n<label [attr.visible]=\"labelVisible\" class=\"horizontal-label\" [innerHtml]=\"emptyText\"></label>\r\n<bnrc-field-ui\r\n [attr.xtype]=\"config.FieldUi.originalXtype\"\r\n [attr.fieldWidth]=\"layoutControlWidth\"\r\n [attr.isCheckbox]=\"isCheckbox\"\r\n [attr.isbutton]=\"isButton\"\r\n [style.flex-grow]=\"isCheckbox ? 1 : 0\"\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [customField]=\"config.FieldUi\"\r\n [layoutInfo]=\"config\"\r\n [inlineEdit]=\"inlineEdit\"\r\n [formHeight]=\"(formHeight$ | async)!!\"\r\n [focusControl]=\"focusControl\"\r\n [isSearchPanel]=\"isSearchPanel\"\r\n [style.height]=\"isUlv ? '100%' : 'auto'\"\r\n [attr.isulv]=\"isUlv\"\r\n></bnrc-field-ui>\r\n}\r\n", styles: [":host{width:100%;display:flex}:host[ismobile=true].isUlv{width:100%!important}.form-item-label-container{display:flex;position:relative}.lbl-temp{position:absolute;visibility:hidden}bsu-ly-label{padding:0 5px;margin:auto}bsu-ly-label[autosize=true]{margin:inherit}:host[ismobile=true] bsu-ly-label{margin:inherit}bnrc-field-ui[xtype=\"Ui.CheckBox\"]{padding:0}@media screen and (max-width: 599px){:host{height:auto}:host:not([isbutton=true]){min-width:7rem}bnrc-field-ui:not([isbutton=true]){height:auto!important}}\n"] }]
|
|
229
|
+
args: [{ selector: 'bsu-layout-control', providers: [LayoutService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (!hide) { @if (labelVisible) {\r\n<bsu-ly-label\r\n [attr.labelWidth]=\"labelWidth\"\r\n [attrRtl]\r\n #tempLabelRef\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [config]=\"config\"\r\n [caption]=\"labelCaption\"\r\n [translateCaption]=\"translateCaption\"\r\n [originalWidth]=\"labelWidth\"\r\n [style.min-width]=\"\r\n isCheckbox\r\n ? checkboxWidth\r\n : (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && controlIsReadonly)\r\n ? 'fit-content'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [style.width]=\"\r\n (config.CaptionSetting?.AlignMode === 'AutoSize' && !isMobile) || (isMobile && (isCheckbox || controlIsReadonly))\r\n ? 'auto'\r\n : isColumnDirection || isColumnReverseDirection\r\n ? '100%'\r\n : maxLabelWidth + 'px'\r\n \"\r\n [isMandatory]=\"isMandatory\"\r\n [fieldIcon]=\"fieldIcon\"\r\n [attr.autosize]=\"config.CaptionSetting?.AlignMode ? true:null\"\r\n [helpDescription]=\"helpDescription\"\r\n [originalXtype]=\"originalXtype\"\r\n [textVisible]=\"textVisible\"\r\n [isColumn]=\"isColumnDirection || isColumnReverseDirection\"\r\n></bsu-ly-label>\r\n}\r\n<label [attr.visible]=\"labelVisible\" class=\"horizontal-label\" [innerHtml]=\"emptyText\"></label>\r\n<bnrc-field-ui\r\n [attr.xtype]=\"config.FieldUi.originalXtype\"\r\n [attr.fieldWidth]=\"layoutControlWidth\"\r\n [attr.isCheckbox]=\"isCheckbox\"\r\n [attr.isbutton]=\"isButton\"\r\n [style.flex-grow]=\"isCheckbox ? 1 : 0\"\r\n [class.no-padding]=\"config.Padding[0] === 0\"\r\n [customField]=\"config.FieldUi\"\r\n [layoutInfo]=\"config\"\r\n [inlineEdit]=\"inlineEdit\"\r\n [cellEdit]=\"cellEdit\"\r\n [formHeight]=\"(formHeight$ | async)!!\"\r\n [focusControl]=\"focusControl\"\r\n [isSearchPanel]=\"isSearchPanel\"\r\n [style.height]=\"isUlv ? '100%' : 'auto'\"\r\n [attr.isulv]=\"isUlv\"\r\n></bnrc-field-ui>\r\n}\r\n", styles: [":host{width:100%;display:flex}:host[ismobile=true].isUlv{width:100%!important}.form-item-label-container{display:flex;position:relative}.lbl-temp{position:absolute;visibility:hidden}bsu-ly-label{padding:0 5px;margin:auto}bsu-ly-label[autosize=true]{margin:inherit}:host[ismobile=true] bsu-ly-label{margin:inherit}bnrc-field-ui[xtype=\"Ui.CheckBox\"]{padding:0}@media screen and (max-width: 599px){:host{height:auto}:host:not([isbutton=true]){min-width:7rem}bnrc-field-ui:not([isbutton=true]){height:auto!important}}\n"] }]
|
|
230
230
|
}], ctorParameters: () => [{ type: i1.FormPanelService }, { type: i0.ElementRef }, { type: i2.ContentDensityService }, { type: i3.DomSanitizer }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.BbbTranslatePipe }, { type: i1.LayoutService, decorators: [{
|
|
231
231
|
type: SkipSelf
|
|
232
232
|
}] }], propDecorators: { tempLabelRef: [{
|
|
@@ -294,6 +294,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
294
294
|
args: ['attr.caption']
|
|
295
295
|
}], inlineEdit: [{
|
|
296
296
|
type: Input
|
|
297
|
+
}], cellEdit: [{
|
|
298
|
+
type: Input
|
|
297
299
|
}], caption: [{
|
|
298
300
|
type: Input
|
|
299
301
|
}], focusControl: [{
|
|
@@ -315,4 +317,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
315
317
|
}], SetVisible: [{
|
|
316
318
|
type: Input
|
|
317
319
|
}] } });
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWNvbnRyb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBTXZCLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFDSCxRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFFYixpQkFBaUIsRUFFakIsV0FBVyxFQUNYLGFBQWEsRUFDaEIsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQVU5QixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsdUJBQXVCO0lBc0QvRCxZQUNjLGdCQUFrQyxFQUNyQyxFQUFjLEVBQ3JCLHNCQUE2QyxFQUNuQyxZQUEwQixFQUMxQixJQUF1QixFQUN2QixPQUFlLEVBQ2YsVUFBcUIsRUFDckIsYUFBK0IsRUFDbkIsb0JBQW1DO1FBRXpELEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQVZwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3JDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFFWCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUNyQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDbkIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFlO1FBM0R4Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFLekIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBSTFCLGNBQVMsR0FBRyxTQUFTLENBQUM7UUFHaEIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBSW5DLGFBQVEsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBV25ELFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBaUMsQ0FBQztRQUVyRSxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBY1osY0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFHakUsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFxTTlCLG9CQUFvQjtRQUNYLGlCQUFZLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0Ysb0JBQW9CO1FBQ1gsZUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIscURBQXFEO2dCQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDO1FBck1FLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3hDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNMLENBQUM7SUFDRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsa0JBQWtCLEdBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUE2QixDQUFDLFdBQVcsQ0FBQztRQUM3RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FDbEQsTUFBTSxFQUNOLG1EQUFtRCxFQUNuRCxLQUFLLENBQ1IsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsS0FBSyxXQUFXLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7UUFDM0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsWUFBWSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzdFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsWUFBWSxLQUFLLFFBQVEsQ0FBQztRQUNqRSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssUUFBUSxDQUFDO1FBRXhGLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXZHLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUNsRSxJQUFJLENBQUMsaUJBQWlCO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVO2dCQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxLQUFLLHVCQUF1QixDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUNqQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEtBQUssd0JBQXdCLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNPLGFBQWE7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3BDLDZDQUE2QztRQUM3QywyQ0FBMkM7UUFDM0MsOENBQThDO1FBQzlDLFFBQVE7UUFDUixXQUFXO1FBQ1gsb0RBQW9EO1FBQ3BELElBQUk7UUFFSixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQztRQUNqRSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEtBQUssa0JBQWtCLENBQUM7UUFDM0UsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakUsSUFBSSxnQkFBZ0IsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUNoRSxJQUFJLENBQUMsYUFBYSxJQUFJLFlBQVksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFDM0QsRUFBRSxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRCxnQkFBZ0IsSUFBSSw0Q0FBNEMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQztRQUNuRSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksWUFBWSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFDRCxjQUFjLENBQUMsYUFBcUI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFNBQVMsS0FBSyxVQUFVO1lBQ3BELENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDMUQsQ0FBQyxDQUFDLE1BQU07WUFDUixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyx3QkFBd0I7Z0JBQ3pELENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV4RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVTtZQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFDcEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFNBQVMsS0FBSyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDbkcsQ0FBQyxDQUFDLGFBQWE7Z0JBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsd0JBQXdCO29CQUN6RCxDQUFDLENBQUMsTUFBTTtvQkFDUixDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELGtCQUFrQixDQUFDLE1BQU07UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDO1FBQ25DLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDYixLQUFLLEdBQUc7Z0JBQ0osWUFBWSxHQUFHLGNBQWMsQ0FBQztnQkFDOUIsTUFBTTtZQUNWLEtBQUssR0FBRztnQkFDSixZQUFZLEdBQUcsY0FBYyxDQUFDO2dCQUM5QixNQUFNO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUMxQyxJQUFJLENBQUMsTUFBTSxFQUNYLGlEQUFpRCxHQUFHLFlBQVksRUFDaEUsTUFBTSxDQUNULENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDRCxvQkFBb0I7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUM7UUFDMUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDeEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLElBQ0ksQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7Z0JBQ25FLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQ2pELENBQUM7Z0JBQ0MsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixDQUFDO1lBQ0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUM7WUFDeEMsSUFBSSxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDcEQsQ0FBQztZQUNELElBQUksT0FBTyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDcEQsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBRTdDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQWdCTyxRQUFRLENBQUMsSUFBYTtRQUMxQixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyx1Q0FBdUM7UUFDMUgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDTCxDQUFDO0lBQ08sUUFBUSxDQUFDLElBQVk7UUFDekIsSUFBSSxPQUFPLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEtBQUssYUFBYTtnQkFDckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLENBQUM7SUFDTCxDQUFDOytHQXRSUSxzQkFBc0I7bUdBQXRCLHNCQUFzQixzdkNBSnBCLENBQUMsYUFBYSxDQUFDLG1IQUtTLFVBQVUseUVDeENqRCx3akVBcURBOzs0RkRkYSxzQkFBc0I7a0JBUmxDLFNBQVM7K0JBQ0ksb0JBQW9CLGFBR25CLENBQUMsYUFBYSxDQUFDLG1CQUNULHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsS0FBSzs7MEJBaUVaLFFBQVE7eUNBN0RiLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUdWLGtCQUFrQjtzQkFBdEQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQ0MsY0FBYztzQkFBakQsV0FBVzt1QkFBQyxxQkFBcUI7Z0JBQ1UscUJBQXFCO3NCQUFoRSxXQUFXO3VCQUFDLDZCQUE2QjtnQkFDSCxpQkFBaUI7c0JBQXZELFdBQVc7dUJBQUMsd0JBQXdCO2dCQUNVLHdCQUF3QjtzQkFBdEUsV0FBVzt1QkFBQyxnQ0FBZ0M7Z0JBQ1AsV0FBVztzQkFBaEQsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBQ0csZ0JBQWdCO3NCQUF0RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFDRCxjQUFjO3NCQUFqRCxXQUFXO3VCQUFDLHFCQUFxQjtnQkFFRixRQUFRO3NCQUF2QyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFDRSxRQUFRO3NCQUF2QyxXQUFXO3VCQUFDLGlCQUFpQjtnQkFDRyxTQUFTO3NCQUF6QyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRixNQUFNO3NCQUFsQyxXQUFXO3VCQUFDLGNBQWM7Z0JBQ0ssVUFBVTtzQkFBekMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBQ1MsaUJBQWlCO3NCQUF2RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFDUCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ1MsZUFBZTtzQkFBbkQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQ0wsWUFBWTtzQkFBekMsV0FBVzt1QkFBQyxlQUFlO2dCQUNFLFFBQVE7c0JBQXJDLFdBQVc7dUJBQUMsZUFBZTtnQkFDRyxhQUFhO3NCQUEzQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDQSxXQUFXO3NCQUF2QyxXQUFXO3VCQUFDLGNBQWM7Z0JBQ2xCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBeU5FLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbnB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBOZ1pvbmUsXHJcbiAgICBSZW5kZXJlcjIsXHJcbiAgICBPbkluaXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgU2tpcFNlbGYsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29udGVudERlbnNpdHksIENvbnRlbnREZW5zaXR5U2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQmFyc2FBcGksXHJcbiAgICBMYXlvdXRJdGVtQmFzZUNvbXBvbmVudCxcclxuICAgIExheW91dFNlcnZpY2UsXHJcbiAgICBGb3JtUGFuZWxTZXJ2aWNlLFxyXG4gICAgZ2V0RGV2aWNlSXNNb2JpbGUsXHJcbiAgICBCYmJUcmFuc2xhdGVQaXBlLFxyXG4gICAgbWVhc3VyZVRleHQsXHJcbiAgICBnZXRMYWJlbFdpZHRoXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JzdS1sYXlvdXQtY29udHJvbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0xheW91dFNlcnZpY2VdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF5b3V0Q29udHJvbENvbXBvbmVudCBleHRlbmRzIExheW91dEl0ZW1CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBMYWJlbFJlZicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gICAgdGVtcExhYmVsUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubGF5b3V0LWNvbnRyb2wnKSBsYXlvdXRDb250cm9sQ2xhc3MgPSB0cnVlO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yb3ctZGlyZWN0aW9uJykgaXNSb3dEaXJlY3Rpb247XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJvdy1yZXZlcnNlLWRpcmVjdGlvbicpIGlzUm93UmV2ZXJzZURpcmVjdGlvbjtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY29sdW1uLWRpcmVjdGlvbicpIGlzQ29sdW1uRGlyZWN0aW9uO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb2x1bW4tcmV2ZXJzZS1kaXJlY3Rpb24nKSBpc0NvbHVtblJldmVyc2VEaXJlY3Rpb247XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbnRhaW5lci1maWVsZCcpIGlzQ29udGFpbmVyID0gdHJ1ZTtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MucmVhZG9ubHlpc3dyYXBlZCcpIHJlYWRvbmx5aXN3cmFwZWQgPSBmYWxzZTtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubGFiZWxub3RpbnJvdycpIF9sYWJlbE5vdEluUm93ID0gZmFsc2U7XHJcbiAgICAvLyBASG9zdEJpbmRpbmcoJ3N0eWxlLnZpc2liaWxpdHknKSB2aXNpYmlsaXR5OiBzdHJpbmc7XHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heC13aWR0aCcpIG1heFdpZHRoO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4td2lkdGgnKSBtaW5XaWR0aDtcclxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWluLWhlaWdodCcpIG1pbkhlaWdodCA9ICcyLjI1cmVtJztcclxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JykgaGVpZ2h0O1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlzQ2hlY2tib3gnKSBpc0NoZWNrYm94O1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmNvbnRyb2xJc1JlYWRvbmx5JykgY29udHJvbElzUmVhZG9ubHkgPSBmYWxzZTtcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pc0J1dHRvbicpIGlzQnV0dG9uO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlzc2luZ2xlcGljdHVyZScpIGlzU2luZ2xlUGljdHVyZTtcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5taW5XaWR0aCcpIGF0dHJNaW5XaWR0aDtcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pc21vYmlsZScpIGlzTW9iaWxlID0gZ2V0RGV2aWNlSXNNb2JpbGUoKTtcclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5jb250cm9sSWQnKSBhdHRyQ29udHJvbElkO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmNhcHRpb24nKSBhdHRyQ2FwdGlvbjtcclxuICAgIEBJbnB1dCgpIGlubGluZUVkaXQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBmb2N1c0NvbnRyb2w6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBzaG93TGFiZWw6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBtYXhMYWJlbFdpZHRoOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBoYXNIb3Jpem9udGFsVGV4dDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eTtcclxuICAgIEBJbnB1dCgpIGZsZXg6IHN0cmluZztcclxuICAgIEBPdXRwdXQoKSBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGl0bGU6IHN0cmluZzsgZGF0YT86IGFueSB9PigpO1xyXG5cclxuICAgIGhpZGUgPSB0cnVlO1xyXG4gICAgbGF5b3V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgICB3cmFwQ29udGVudDogYm9vbGVhbjtcclxuICAgIGxhYmVsV2lkdGg6IG51bWJlcjtcclxuICAgIGxhYmVsQ2FwdGlvbjogc3RyaW5nIHwgU2FmZUh0bWw7XHJcbiAgICBsYWJlbFZpc2libGU/OiBib29sZWFuO1xyXG4gICAgbGF5b3V0U2V0U2l6ZTogYm9vbGVhbjtcclxuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBpc1VsdjogYm9vbGVhbjtcclxuICAgIGlzTWFuZGF0b3J5OiBib29sZWFuO1xyXG4gICAgZmllbGRJY29uOiBzdHJpbmc7XHJcbiAgICBvcmlnaW5hbFh0eXBlOiBzdHJpbmc7XHJcbiAgICB0cmFuc2xhdGVDYXB0aW9uOiBzdHJpbmc7XHJcbiAgICB0ZXh0VmlzaWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuICAgIGVtcHR5VGV4dCA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKCcmIzgyMDM7Jyk7XHJcbiAgICBsYXlvdXRDb250cm9sV2lkdGg6IG51bWJlcjtcclxuICAgIGZvcm1IZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBjaGVja2JveFdpZHRoID0gJ2ZpdC1jb250ZW50JztcclxuICAgIGhlbHBEZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIGZvcm1QYW5lbFNlcnZpY2U6IEZvcm1QYW5lbFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIF9jb250ZW50RGVuc2l0eVNlcnZpY2U6IENvbnRlbnREZW5zaXR5U2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZG9tU2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByb3RlY3RlZCBfbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcm90ZWN0ZWQgX2JiYlRyYW5zbGF0ZTogQmJiVHJhbnNsYXRlUGlwZSxcclxuICAgICAgICBAU2tpcFNlbGYoKSBwcm90ZWN0ZWQgX3BhcmVudExheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKGZvcm1QYW5lbFNlcnZpY2UsIF9jZHIpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnREZW5zaXR5ID09PSAnY29tcGFjdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5taW5IZWlnaHQgPSAnMnJlbSc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgICAgIGNvbnN0IHsgZmxleCwgbWF4TGFiZWxXaWR0aCB9ID0gY2hhbmdlcztcclxuICAgICAgICBpZiAoZmxleCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRGbGV4KGZsZXguY3VycmVudFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heExhYmVsV2lkdGggJiYgIW1heExhYmVsV2lkdGguZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0TGFiZWxXaWR0aChtYXhMYWJlbFdpZHRoLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLmZvcm1IZWlnaHQkID0gdGhpcy5mb3JtUGFuZWxTZXJ2aWNlLmZvcm1IZWlnaHQkO1xyXG4gICAgICAgIHRoaXMuX3NldEZsZXgodGhpcy5mbGV4KTtcclxuXHJcbiAgICAgICAgdGhpcy5sYXlvdXRDb250cm9sV2lkdGggPSAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5jbGllbnRXaWR0aDtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgICBjb25zdCBtaW5IZWlnaHRBdXRvID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgJ0ZpZWxkVWkuU2V0dGluZy5DdXN0b21VaS5QYXJhbWV0ZXJzLk1pbkhlaWdodEF1dG8nLFxyXG4gICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5saW5lRWRpdCB8fCBtaW5IZWlnaHRBdXRvIHx8IHRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5taW5IZWlnaHQgPSAnYXV0byc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb25maWcuRmllbGRVaS5vcmlnaW5hbFh0eXBlID09PSAnVWkuVWx2TWFpblVpJykge1xyXG4gICAgICAgICAgICB0aGlzLmlzVWx2ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2lzVWx2Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXR0ckNhcHRpb24gPSBjb25maWcuQ2FwdGlvbi5yZXBsYWNlKCc6JywgJycpO1xyXG4gICAgICAgIHRoaXMuYXR0ckNvbnRyb2xJZCA9IGNvbmZpZy5Db250cm9sSWQ7XHJcbiAgICAgICAgdGhpcy5pc0J1dHRvbiA9IGNvbmZpZy5GaWVsZFVpLm9yaWdpbmFsWHR5cGUgPT09ICdVaS5CdXR0b24nO1xyXG4gICAgICAgIHRoaXMuX3JlZnJlc2hMYWJlbCgpO1xyXG5cclxuICAgICAgICB0aGlzLmlzUm93RGlyZWN0aW9uID0gY29uZmlnLlRleHRMb2NhdGlvbiA9PT0gJ1JpZ2h0JyB8fCBjb25maWcuVGV4dExvY2F0aW9uID09PSAnRGVmYXVsdCc7XHJcbiAgICAgICAgdGhpcy5pc1Jvd1JldmVyc2VEaXJlY3Rpb24gPSBjb25maWcuVGV4dExvY2F0aW9uID09PSAnTGVmdCc7XHJcbiAgICAgICAgdGhpcy5pc0NvbHVtbkRpcmVjdGlvbiA9IGNvbmZpZy5UZXh0TG9jYXRpb24gPT09ICdUb3AnIHx8IHRoaXMuaXNTZWFyY2hQYW5lbDtcclxuICAgICAgICB0aGlzLmlzQ29sdW1uUmV2ZXJzZURpcmVjdGlvbiA9IGNvbmZpZy5UZXh0TG9jYXRpb24gPT09ICdCb3R0b20nO1xyXG4gICAgICAgIHRoaXMuX2xhYmVsTm90SW5Sb3cgPSBjb25maWcuVGV4dExvY2F0aW9uID09PSAnVG9wJyB8fCBjb25maWcuVGV4dExvY2F0aW9uID09PSAnQm90dG9tJztcclxuXHJcbiAgICAgICAgY29uZmlnLkZpZWxkVWkuTGF5b3V0Q29udHJvbCA9IHRoaXM7XHJcbiAgICAgICAgdGhpcy5oZWxwRGVzY3JpcHRpb24gPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb25maWcuRmllbGRVaSwgJ1NldHRpbmcuSGVscERlc2NyaXB0aW9uJywgJycpO1xyXG5cclxuICAgICAgICB0aGlzLmZpZWxkSWNvbiA9IGNvbmZpZy5GaWVsZFVpLlNldHRpbmcuRmllbGRJY29uO1xyXG4gICAgICAgIHRoaXMuY29udHJvbElzUmVhZG9ubHkgPSBjb25maWcuRmllbGRVaS5TZXR0aW5nLkNvbnRyb2xJc1JlYWRPbmx5O1xyXG4gICAgICAgIHRoaXMuY29udHJvbElzUmVhZG9ubHkgPVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xJc1JlYWRvbmx5IHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5GaWVsZFVpLlNldHRpbmcuSW5uZXJDdHJscj8uSXNSZWFkT25seSB8fFxyXG4gICAgICAgICAgICBjb25maWcuRmllbGRVaS5TZXR0aW5nLklubmVyQ3RybHI/Lnh0eXBlID09PSAnVWwuUmVhZE9ubHlGaWVsZEN0cmxyJztcclxuICAgICAgICB0aGlzLm9yaWdpbmFsWHR5cGUgPSBjb25maWcuRmllbGRVaS5vcmlnaW5hbFh0eXBlO1xyXG4gICAgICAgIHRoaXMudGV4dFZpc2libGUgPSBjb25maWcuVGV4dFZpc2libGU7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbElzUmVhZG9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgeCA9IG1lYXN1cmVUZXh0KGNvbmZpZy5GaWVsZFVpLnZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHggPiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggJiYgdGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkb25seWlzd3JhcGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlnLkZpZWxkVWkub3JpZ2luYWxYdHlwZSA9PT0gJ1VpLlNlYXJjaENvbW1hbmRJbmZvVWknKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxDYXB0aW9uID0gJyYjODIwMzsnO1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudGV4dFZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZXBhcmVNaW5BbmRNYXhTaXplKCk7XHJcbiAgICAgICAgdGhpcy5fc2V0TGFiZWxXaWR0aCh0aGlzLm1heExhYmVsV2lkdGgpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcmVmcmVzaExhYmVsKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsQ2FwdGlvbiA9IGNvbmZpZy5DYXB0aW9uO1xyXG4gICAgICAgIC8vIGlmIChjb25maWcuRmllbGRVaS5TZXR0aW5nPy5Jc01hbmRhdG9yeSkge1xyXG4gICAgICAgIC8vICAgICBpZiAobGFiZWxDYXB0aW9uLmluZGV4T2YoJyonKSA8IDApIHtcclxuICAgICAgICAvLyAgICAgICAgIGxhYmVsQ2FwdGlvbiA9IGxhYmVsQ2FwdGlvbiArICcgKic7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICBsYWJlbENhcHRpb24gPSBsYWJlbENhcHRpb24ucmVwbGFjZSgnKicsICcnKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNDaGVja2JveCA9IGNvbmZpZy5GaWVsZFVpLm9yaWdpbmFsWHR5cGUgPT09ICdVaS5DaGVja0JveCc7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDaGVja2JveCkge1xyXG4gICAgICAgICAgICBjb25zdCB4ID0gbWVhc3VyZVRleHQobGFiZWxDYXB0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHggPCB0aGlzLm1heExhYmVsV2lkdGggJiYgIXRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tib3hXaWR0aCA9IGAke3RoaXMubWF4TGFiZWxXaWR0aH1weGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNTaW5nbGVQaWN0dXJlID0gY29uZmlnLkZpZWxkVWkub3JpZ2luYWxYdHlwZSA9PT0gJ1VpLlNpbmdsZVBpY3R1cmUnO1xyXG4gICAgICAgIGNvbnN0IGNvbG9uTGFiZWwgPSB0aGlzLmZvcm1QYW5lbFNlcnZpY2UuQ29sb25JbkxhYmVsID8gJzonIDogJyc7XHJcbiAgICAgICAgbGV0IHRyYW5zbGF0ZUNhcHRpb24gPSBgJHt0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKGxhYmVsQ2FwdGlvbil9JHtcclxuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaFBhbmVsIHx8IGxhYmVsQ2FwdGlvbiA9PT0gJyZ6d25qOycgPyAnJyA6IGNvbG9uTGFiZWxcclxuICAgICAgICB9YDtcclxuICAgICAgICB0aGlzLmlzTWFuZGF0b3J5ID0gY29uZmlnLkZpZWxkVWkuU2V0dGluZz8uSXNNYW5kYXRvcnk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNNYW5kYXRvcnkpIHtcclxuICAgICAgICAgICAgdHJhbnNsYXRlQ2FwdGlvbiA9IHRyYW5zbGF0ZUNhcHRpb24ucmVwbGFjZSgnKicsICcnKTtcclxuICAgICAgICAgICAgdHJhbnNsYXRlQ2FwdGlvbiArPSBgPHN0cm9uZyBjbGFzcz1cImZpZWxkLW1hbmRhdG9yeVwiPio8L3N0cm9uZz5gO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZUNhcHRpb24gPSB0cmFuc2xhdGVDYXB0aW9uO1xyXG4gICAgICAgIHRoaXMubGFiZWxDYXB0aW9uID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodHJhbnNsYXRlQ2FwdGlvbik7XHJcbiAgICAgICAgdGhpcy5sYWJlbFZpc2libGUgPSBjb25maWcuVGV4dFZpc2libGUgJiYgdGhpcy5zaG93TGFiZWwgIT09IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xXaWR0aCA9IGdldExhYmVsV2lkdGgodGhpcy5jb25maWcpO1xyXG4gICAgICAgIGlmIChjb250cm9sV2lkdGggJiYgY29udHJvbFdpZHRoID4gdGhpcy5tYXhMYWJlbFdpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BhcmVudExheW91dFNlcnZpY2Uuc2V0TWF4V2lkdGgoY29udHJvbFdpZHRoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2V0SGlkZShjb25maWcuRmllbGRVaS5TZXR0aW5nLklzVmlzaWJsZSA9PT0gZmFsc2UgPyB0cnVlIDogZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgX3NldExhYmVsV2lkdGgobWF4TGFiZWxXaWR0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRlbXBMYWJlbFJlZikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZhbCA9XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLkNhcHRpb25TZXR0aW5nPy5BbGlnbk1vZGUgPT09ICdBdXRvU2l6ZScgfHxcclxuICAgICAgICAgICAgKHRoaXMuaXNNb2JpbGUgJiYgKHRoaXMuaXNDaGVja2JveCB8fCB0aGlzLmNvbnRyb2xJc1JlYWRvbmx5KSlcclxuICAgICAgICAgICAgICAgID8gJ2F1dG8nXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXNDb2x1bW5EaXJlY3Rpb24gfHwgdGhpcy5pc0NvbHVtblJldmVyc2VEaXJlY3Rpb25cclxuICAgICAgICAgICAgICAgID8gJzEwMCUnXHJcbiAgICAgICAgICAgICAgICA6IG1heExhYmVsV2lkdGggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLnRlbXBMYWJlbFJlZi5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCB2YWwpO1xyXG5cclxuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IHRoaXMuaXNDaGVja2JveFxyXG4gICAgICAgICAgICA/IHRoaXMuY2hlY2tib3hXaWR0aFxyXG4gICAgICAgICAgICA6IHRoaXMuY29uZmlnLkNhcHRpb25TZXR0aW5nPy5BbGlnbk1vZGUgPT09ICdBdXRvU2l6ZScgfHwgKHRoaXMuaXNNb2JpbGUgJiYgdGhpcy5jb250cm9sSXNSZWFkb25seSlcclxuICAgICAgICAgICAgPyAnZml0LWNvbnRlbnQnXHJcbiAgICAgICAgICAgIDogdGhpcy5pc0NvbHVtbkRpcmVjdGlvbiB8fCB0aGlzLmlzQ29sdW1uUmV2ZXJzZURpcmVjdGlvblxyXG4gICAgICAgICAgICA/ICcxMDAlJ1xyXG4gICAgICAgICAgICA6IG1heExhYmVsV2lkdGggKyAncHgnO1xyXG4gICAgICAgIHRoaXMuX3JlbmRlcmVyMi5zZXRTdHlsZSh0aGlzLnRlbXBMYWJlbFJlZi5uYXRpdmVFbGVtZW50LCAnbWluLXdpZHRoJywgbWluV2lkdGgpO1xyXG4gICAgfVxyXG4gICAgX3Jlc2l6ZVVsdkJ5RGV2aWNlKGRldmljZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1Vsdikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkZXZpY2VIZWlnaHQgPSAnRGVza3RvcEhlaWdodCc7XHJcbiAgICAgICAgc3dpdGNoIChkZXZpY2UpIHtcclxuICAgICAgICAgICAgY2FzZSAncyc6XHJcbiAgICAgICAgICAgICAgICBkZXZpY2VIZWlnaHQgPSAnTW9iaWxlSGVpZ2h0JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdtJzpcclxuICAgICAgICAgICAgICAgIGRldmljZUhlaWdodCA9ICdUYWJsZXRIZWlnaHQnO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxyXG4gICAgICAgICAgICAnRmllbGRVaS5TZXR0aW5nLkNsYXNzTmFtZXMuQ3VzdG9tVWkuUGFyYW1ldGVycy4nICsgZGV2aWNlSGVpZ2h0LFxyXG4gICAgICAgICAgICAnYXV0bydcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBwcmVwYXJlTWluQW5kTWF4U2l6ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgICBjb25zdCBsYXlvdXRJbmZvID0gY29uZmlnO1xyXG4gICAgICAgIGNvbnN0IGlzQnV0dG9uID0gdGhpcy5pc0J1dHRvbjtcclxuICAgICAgICBjb25zdCBpc1NpbmdsZVBpY3R1cmUgPSB0aGlzLmlzU2luZ2xlUGljdHVyZTtcclxuICAgICAgICBjb25zdCBpc0NoZWNrYm94ID0gdGhpcy5pc0NoZWNrYm94O1xyXG4gICAgICAgIGlmICghdGhpcy5pbmxpbmVFZGl0ICYmIGxheW91dEluZm8gJiYgKGlzQnV0dG9uIHx8IGlzQ2hlY2tib3ggfHwgaXNTaW5nbGVQaWN0dXJlKSkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJNaW5XaWR0aCA9IGNvbmZpZy5Cb3VuZHMud2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBleHRyYVZhbCA9IDA7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICgoaXNCdXR0b24gfHwgaXNDaGVja2JveCkgJiYgbGF5b3V0SW5mby5GaWVsZFVpLlNldHRpbmc/LkZpZWxkSWNvbikgfHxcclxuICAgICAgICAgICAgICAgIGxheW91dEluZm8uRmllbGRVaS5TZXR0aW5nLkpzb25FeHRyYVByb3A/LkdseXBoXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZXh0cmFWYWwgPSAxODtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB7IE1heFNpemUsIE1pblNpemUgfSA9IGxheW91dEluZm87XHJcbiAgICAgICAgICAgIGlmIChNYXhTaXplPy53aWR0aCA+IDAgJiYgIXRoaXMuaXNDaGVja2JveCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhXaWR0aCA9IE1heFNpemUud2lkdGggKyBleHRyYVZhbCArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKE1pblNpemU/LndpZHRoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5taW5XaWR0aCA9IE1pblNpemUud2lkdGggKyBleHRyYVZhbCArICdweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWFyY2hQYW5lbCkge1xyXG4gICAgICAgICAgICB0aGlzLmF0dHJNaW5XaWR0aCA9IHRoaXMubWF4TGFiZWxXaWR0aCArIDIwMDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NlYXJjUGFuZWxJblNpZGVDb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1heFdpZHRoID0gJzMyMHB4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1pbldpZHRoID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQElucHV0KCkgUmVmcmVzaExhYmVsID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3JlZnJlc2hMYWJlbCgpO1xyXG4gICAgICAgIHRoaXMuZXZlbnRzLmVtaXQoeyB0aXRsZTogJ3JlZnJlc2hMYWJlbCcsIGRhdGE6IHRoaXMuY29uZmlnIH0pO1xyXG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH07XHJcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgQElucHV0KCkgU2V0VmlzaWJsZSA9ICh2aXNpYmxlLCByZWZyZXNoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLkZpZWxkVWkuU2V0dGluZy5Jc1Zpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgICAgICAgICB0aGlzLl9zZXRIaWRlKCF2aXNpYmxlKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5jb25maWcuRmllbGRVaS5TZXR0aW5nLiRCUnVsZUhpZGUgPSAhdmlzaWJsZTtcclxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBwcml2YXRlIF9zZXRIaWRlKGhpZGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICBoaWRlID0gdGhpcy5jb25maWcuRmllbGRVaS5TZXR0aW5nLkhpZGVTZWFyY2hDb21tYW5kSW5mb1VpID09PSB0cnVlID8gdHJ1ZSA6IGhpZGU7IC8vIGhpZGUgZGVmYXVsdCBidXR0b25zIG9mIHNlYXJjaCBwYW5lbFxyXG4gICAgICAgIHRoaXMuaGlkZSA9IGhpZGU7XHJcbiAgICAgICAgaWYgKGhpZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2hpZGUtZm9ybS1pdGVtJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2hpZGUtZm9ybS1pdGVtJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfc2V0RmxleChmbGV4OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodHlwZW9mIGZsZXggIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc01vYmlsZSB8fCB0aGlzLmNvbmZpZy5GaWVsZFVpLm9yaWdpbmFsWHR5cGUgIT09ICdVaS5UZXh0QXJlYScpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnZmxleCcsIGZsZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJAaWYgKCFoaWRlKSB7IEBpZiAobGFiZWxWaXNpYmxlKSB7XHJcbjxic3UtbHktbGFiZWxcclxuICAgIFthdHRyLmxhYmVsV2lkdGhdPVwibGFiZWxXaWR0aFwiXHJcbiAgICBbYXR0clJ0bF1cclxuICAgICN0ZW1wTGFiZWxSZWZcclxuICAgIFtjbGFzcy5uby1wYWRkaW5nXT1cImNvbmZpZy5QYWRkaW5nWzBdID09PSAwXCJcclxuICAgIFtjb25maWddPVwiY29uZmlnXCJcclxuICAgIFtjYXB0aW9uXT1cImxhYmVsQ2FwdGlvblwiXHJcbiAgICBbdHJhbnNsYXRlQ2FwdGlvbl09XCJ0cmFuc2xhdGVDYXB0aW9uXCJcclxuICAgIFtvcmlnaW5hbFdpZHRoXT1cImxhYmVsV2lkdGhcIlxyXG4gICAgW3N0eWxlLm1pbi13aWR0aF09XCJcclxuICAgICAgICBpc0NoZWNrYm94XHJcbiAgICAgICAgICAgID8gY2hlY2tib3hXaWR0aFxyXG4gICAgICAgICAgICA6IChjb25maWcuQ2FwdGlvblNldHRpbmc/LkFsaWduTW9kZSA9PT0gJ0F1dG9TaXplJyAmJiAhaXNNb2JpbGUpIHx8IChpc01vYmlsZSAmJiBjb250cm9sSXNSZWFkb25seSlcclxuICAgICAgICAgICAgPyAnZml0LWNvbnRlbnQnXHJcbiAgICAgICAgICAgIDogaXNDb2x1bW5EaXJlY3Rpb24gfHwgaXNDb2x1bW5SZXZlcnNlRGlyZWN0aW9uXHJcbiAgICAgICAgICAgID8gJzEwMCUnXHJcbiAgICAgICAgICAgIDogbWF4TGFiZWxXaWR0aCArICdweCdcclxuICAgIFwiXHJcbiAgICBbc3R5bGUud2lkdGhdPVwiXHJcbiAgICAgICAgKGNvbmZpZy5DYXB0aW9uU2V0dGluZz8uQWxpZ25Nb2RlID09PSAnQXV0b1NpemUnICYmICFpc01vYmlsZSkgfHwgKGlzTW9iaWxlICYmIChpc0NoZWNrYm94IHx8IGNvbnRyb2xJc1JlYWRvbmx5KSlcclxuICAgICAgICAgICAgPyAnYXV0bydcclxuICAgICAgICAgICAgOiBpc0NvbHVtbkRpcmVjdGlvbiB8fCBpc0NvbHVtblJldmVyc2VEaXJlY3Rpb25cclxuICAgICAgICAgICAgPyAnMTAwJSdcclxuICAgICAgICAgICAgOiBtYXhMYWJlbFdpZHRoICsgJ3B4J1xyXG4gICAgXCJcclxuICAgIFtpc01hbmRhdG9yeV09XCJpc01hbmRhdG9yeVwiXHJcbiAgICBbZmllbGRJY29uXT1cImZpZWxkSWNvblwiXHJcbiAgICBbYXR0ci5hdXRvc2l6ZV09XCJjb25maWcuQ2FwdGlvblNldHRpbmc/LkFsaWduTW9kZSA/IHRydWU6bnVsbFwiXHJcbiAgICBbaGVscERlc2NyaXB0aW9uXT1cImhlbHBEZXNjcmlwdGlvblwiXHJcbiAgICBbb3JpZ2luYWxYdHlwZV09XCJvcmlnaW5hbFh0eXBlXCJcclxuICAgIFt0ZXh0VmlzaWJsZV09XCJ0ZXh0VmlzaWJsZVwiXHJcbiAgICBbaXNDb2x1bW5dPVwiaXNDb2x1bW5EaXJlY3Rpb24gfHwgaXNDb2x1bW5SZXZlcnNlRGlyZWN0aW9uXCJcclxuPjwvYnN1LWx5LWxhYmVsPlxyXG59XHJcbjxsYWJlbCBbYXR0ci52aXNpYmxlXT1cImxhYmVsVmlzaWJsZVwiIGNsYXNzPVwiaG9yaXpvbnRhbC1sYWJlbFwiIFtpbm5lckh0bWxdPVwiZW1wdHlUZXh0XCI+PC9sYWJlbD5cclxuPGJucmMtZmllbGQtdWlcclxuICAgIFthdHRyLnh0eXBlXT1cImNvbmZpZy5GaWVsZFVpLm9yaWdpbmFsWHR5cGVcIlxyXG4gICAgW2F0dHIuZmllbGRXaWR0aF09XCJsYXlvdXRDb250cm9sV2lkdGhcIlxyXG4gICAgW2F0dHIuaXNDaGVja2JveF09XCJpc0NoZWNrYm94XCJcclxuICAgIFthdHRyLmlzYnV0dG9uXT1cImlzQnV0dG9uXCJcclxuICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiaXNDaGVja2JveCA/IDEgOiAwXCJcclxuICAgIFtjbGFzcy5uby1wYWRkaW5nXT1cImNvbmZpZy5QYWRkaW5nWzBdID09PSAwXCJcclxuICAgIFtjdXN0b21GaWVsZF09XCJjb25maWcuRmllbGRVaVwiXHJcbiAgICBbbGF5b3V0SW5mb109XCJjb25maWdcIlxyXG4gICAgW2lubGluZUVkaXRdPVwiaW5saW5lRWRpdFwiXHJcbiAgICBbZm9ybUhlaWdodF09XCIoZm9ybUhlaWdodCQgfCBhc3luYykhIVwiXHJcbiAgICBbZm9jdXNDb250cm9sXT1cImZvY3VzQ29udHJvbFwiXHJcbiAgICBbaXNTZWFyY2hQYW5lbF09XCJpc1NlYXJjaFBhbmVsXCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiaXNVbHYgPyAnMTAwJScgOiAnYXV0bydcIlxyXG4gICAgW2F0dHIuaXN1bHZdPVwiaXNVbHZcIlxyXG4+PC9ibnJjLWZpZWxkLXVpPlxyXG59XHJcbiJdfQ==
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWNvbnRyb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbGF5b3V0LWNvbnRyb2wvbGF5b3V0LWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBTXZCLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFDSCxRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFFYixpQkFBaUIsRUFFakIsV0FBVyxFQUNYLGFBQWEsRUFDaEIsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQVU5QixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsdUJBQXVCO0lBdUQvRCxZQUNjLGdCQUFrQyxFQUNyQyxFQUFjLEVBQ3JCLHNCQUE2QyxFQUNuQyxZQUEwQixFQUMxQixJQUF1QixFQUN2QixPQUFlLEVBQ2YsVUFBcUIsRUFDckIsYUFBK0IsRUFDbkIsb0JBQW1DO1FBRXpELEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQVZwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3JDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFFWCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUNyQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDbkIs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O3VCQUFDLGNBQWM7Z0JBQ0ssVUFBVTtzQkFBekMsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBQ1MsaUJBQWlCO3NCQUF2RCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFDUCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ1MsZUFBZTtzQkFBbkQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBQ0wsWUFBWTtzQkFBekMsV0FBVzt1QkFBQyxlQUFlO2dCQUNFLFFBQVE7c0JBQXJDLFdBQVc7dUJBQUMsZUFBZTtnQkFDRyxhQUFhO3NCQUEzQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDQSxXQUFXO3NCQUF2QyxXQUFXO3VCQUFDLGNBQWM7Z0JBQ2xCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkF5TkUsWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIElucHV0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIE5nWm9uZSxcclxuICAgIFJlbmRlcmVyMixcclxuICAgIE9uSW5pdCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBTa2lwU2VsZixcclxuICAgIE91dHB1dCxcclxuICAgIEV2ZW50RW1pdHRlclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eSwgQ29udGVudERlbnNpdHlTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBCYXJzYUFwaSxcclxuICAgIExheW91dEl0ZW1CYXNlQ29tcG9uZW50LFxyXG4gICAgTGF5b3V0U2VydmljZSxcclxuICAgIEZvcm1QYW5lbFNlcnZpY2UsXHJcbiAgICBnZXREZXZpY2VJc01vYmlsZSxcclxuICAgIEJiYlRyYW5zbGF0ZVBpcGUsXHJcbiAgICBtZWFzdXJlVGV4dCxcclxuICAgIGdldExhYmVsV2lkdGhcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnN1LWxheW91dC1jb250cm9sJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9sYXlvdXQtY29udHJvbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9sYXlvdXQtY29udHJvbC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbTGF5b3V0U2VydmljZV0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXRDb250cm9sQ29tcG9uZW50IGV4dGVuZHMgTGF5b3V0SXRlbUJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZCgndGVtcExhYmVsUmVmJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcbiAgICB0ZW1wTGFiZWxSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5sYXlvdXQtY29udHJvbCcpIGxheW91dENvbnRyb2xDbGFzcyA9IHRydWU7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnJvdy1kaXJlY3Rpb24nKSBpc1Jvd0RpcmVjdGlvbjtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mucm93LXJldmVyc2UtZGlyZWN0aW9uJykgaXNSb3dSZXZlcnNlRGlyZWN0aW9uO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jb2x1bW4tZGlyZWN0aW9uJykgaXNDb2x1bW5EaXJlY3Rpb247XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbHVtbi1yZXZlcnNlLWRpcmVjdGlvbicpIGlzQ29sdW1uUmV2ZXJzZURpcmVjdGlvbjtcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY29udGFpbmVyLWZpZWxkJykgaXNDb250YWluZXIgPSB0cnVlO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZWFkb25seWlzd3JhcGVkJykgcmVhZG9ubHlpc3dyYXBlZCA9IGZhbHNlO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5sYWJlbG5vdGlucm93JykgX2xhYmVsTm90SW5Sb3cgPSBmYWxzZTtcclxuICAgIC8vIEBIb3N0QmluZGluZygnc3R5bGUudmlzaWJpbGl0eScpIHZpc2liaWxpdHk6IHN0cmluZztcclxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LXdpZHRoJykgbWF4V2lkdGg7XHJcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi13aWR0aCcpIG1pbldpZHRoO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4taGVpZ2h0JykgbWluSGVpZ2h0ID0gJzIuMjVyZW0nO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQnKSBoZWlnaHQ7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaXNDaGVja2JveCcpIGlzQ2hlY2tib3g7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuY29udHJvbElzUmVhZG9ubHknKSBjb250cm9sSXNSZWFkb25seSA9IGZhbHNlO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlzQnV0dG9uJykgaXNCdXR0b247XHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaXNzaW5nbGVwaWN0dXJlJykgaXNTaW5nbGVQaWN0dXJlO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLm1pbldpZHRoJykgYXR0ck1pbldpZHRoO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlzbW9iaWxlJykgaXNNb2JpbGUgPSBnZXREZXZpY2VJc01vYmlsZSgpO1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmNvbnRyb2xJZCcpIGF0dHJDb250cm9sSWQ7XHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuY2FwdGlvbicpIGF0dHJDYXB0aW9uO1xyXG4gICAgQElucHV0KCkgaW5saW5lRWRpdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNlbGxFZGl0OiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgY2FwdGlvbjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZm9jdXNDb250cm9sOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgc2hvd0xhYmVsOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbWF4TGFiZWxXaWR0aDogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgaGFzSG9yaXpvbnRhbFRleHQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHk7XHJcbiAgICBASW5wdXQoKSBmbGV4OiBzdHJpbmc7XHJcbiAgICBAT3V0cHV0KCkgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRpdGxlOiBzdHJpbmc7IGRhdGE/OiBhbnkgfT4oKTtcclxuXHJcbiAgICBoaWRlID0gdHJ1ZTtcclxuICAgIGxheW91dFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICAgd3JhcENvbnRlbnQ6IGJvb2xlYW47XHJcbiAgICBsYWJlbFdpZHRoOiBudW1iZXI7XHJcbiAgICBsYWJlbENhcHRpb246IHN0cmluZyB8IFNhZmVIdG1sO1xyXG4gICAgbGFiZWxWaXNpYmxlPzogYm9vbGVhbjtcclxuICAgIGxheW91dFNldFNpemU6IGJvb2xlYW47XHJcbiAgICBydGwkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgaXNVbHY6IGJvb2xlYW47XHJcbiAgICBpc01hbmRhdG9yeTogYm9vbGVhbjtcclxuICAgIGZpZWxkSWNvbjogc3RyaW5nO1xyXG4gICAgb3JpZ2luYWxYdHlwZTogc3RyaW5nO1xyXG4gICAgdHJhbnNsYXRlQ2FwdGlvbjogc3RyaW5nO1xyXG4gICAgdGV4dFZpc2libGU6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgICBlbXB0eVRleHQgPSB0aGlzLmRvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCgnJiM4MjAzOycpO1xyXG4gICAgbGF5b3V0Q29udHJvbFdpZHRoOiBudW1iZXI7XHJcbiAgICBmb3JtSGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gICAgY2hlY2tib3hXaWR0aCA9ICdmaXQtY29udGVudCc7XHJcbiAgICBoZWxwRGVzY3JpcHRpb246IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBmb3JtUGFuZWxTZXJ2aWNlOiBGb3JtUGFuZWxTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBlbDogRWxlbWVudFJlZixcclxuICAgICAgICBfY29udGVudERlbnNpdHlTZXJ2aWNlOiBDb250ZW50RGVuc2l0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgX25nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByb3RlY3RlZCBfcmVuZGVyZXIyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9iYmJUcmFuc2xhdGU6IEJiYlRyYW5zbGF0ZVBpcGUsXHJcbiAgICAgICAgQFNraXBTZWxmKCkgcHJvdGVjdGVkIF9wYXJlbnRMYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihmb3JtUGFuZWxTZXJ2aWNlLCBfY2RyKTtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50RGVuc2l0eSA9PT0gJ2NvbXBhY3QnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWluSGVpZ2h0ID0gJzJyZW0nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBjb25zdCB7IGZsZXgsIG1heExhYmVsV2lkdGggfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKGZsZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0RmxleChmbGV4LmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhMYWJlbFdpZHRoICYmICFtYXhMYWJlbFdpZHRoLmZpcnN0Q2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldExhYmVsV2lkdGgobWF4TGFiZWxXaWR0aC5jdXJyZW50VmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5mb3JtSGVpZ2h0JCA9IHRoaXMuZm9ybVBhbmVsU2VydmljZS5mb3JtSGVpZ2h0JDtcclxuICAgICAgICB0aGlzLl9zZXRGbGV4KHRoaXMuZmxleCk7XHJcblxyXG4gICAgICAgIHRoaXMubGF5b3V0Q29udHJvbFdpZHRoID0gKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50V2lkdGg7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgY29uc3QgbWluSGVpZ2h0QXV0byA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgICdGaWVsZFVpLlNldHRpbmcuQ3VzdG9tVWkuUGFyYW1ldGVycy5NaW5IZWlnaHRBdXRvJyxcclxuICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLmlubGluZUVkaXQgfHwgbWluSGVpZ2h0QXV0byB8fCB0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWluSGVpZ2h0ID0gJ2F1dG8nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29uZmlnLkZpZWxkVWkub3JpZ2luYWxYdHlwZSA9PT0gJ1VpLlVsdk1haW5VaScpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1VsdiA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdpc1VsdicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF0dHJDYXB0aW9uID0gY29uZmlnLkNhcHRpb24ucmVwbGFjZSgnOicsICcnKTtcclxuICAgICAgICB0aGlzLmF0dHJDb250cm9sSWQgPSBjb25maWcuQ29udHJvbElkO1xyXG4gICAgICAgIHRoaXMuaXNCdXR0b24gPSBjb25maWcuRmllbGRVaS5vcmlnaW5hbFh0eXBlID09PSAnVWkuQnV0dG9uJztcclxuICAgICAgICB0aGlzLl9yZWZyZXNoTGFiZWwoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pc1Jvd0RpcmVjdGlvbiA9IGNvbmZpZy5UZXh0TG9jYXRpb24gPT09ICdSaWdodCcgfHwgY29uZmlnLlRleHRMb2NhdGlvbiA9PT0gJ0RlZmF1bHQnO1xyXG4gICAgICAgIHRoaXMuaXNSb3dSZXZlcnNlRGlyZWN0aW9uID0gY29uZmlnLlRleHRMb2NhdGlvbiA9PT0gJ0xlZnQnO1xyXG4gICAgICAgIHRoaXMuaXNDb2x1bW5EaXJlY3Rpb24gPSBjb25maWcuVGV4dExvY2F0aW9uID09PSAnVG9wJyB8fCB0aGlzLmlzU2VhcmNoUGFuZWw7XHJcbiAgICAgICAgdGhpcy5pc0NvbHVtblJldmVyc2VEaXJlY3Rpb24gPSBjb25maWcuVGV4dExvY2F0aW9uID09PSAnQm90dG9tJztcclxuICAgICAgICB0aGlzLl9sYWJlbE5vdEluUm93ID0gY29uZmlnLlRleHRMb2NhdGlvbiA9PT0gJ1RvcCcgfHwgY29uZmlnLlRleHRMb2NhdGlvbiA9PT0gJ0JvdHRvbSc7XHJcblxyXG4gICAgICAgIGNvbmZpZy5GaWVsZFVpLkxheW91dENvbnRyb2wgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMuaGVscERlc2NyaXB0aW9uID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29uZmlnLkZpZWxkVWksICdTZXR0aW5nLkhlbHBEZXNjcmlwdGlvbicsICcnKTtcclxuXHJcbiAgICAgICAgdGhpcy5maWVsZEljb24gPSBjb25maWcuRmllbGRVaS5TZXR0aW5nLkZpZWxkSWNvbjtcclxuICAgICAgICB0aGlzLmNvbnRyb2xJc1JlYWRvbmx5ID0gY29uZmlnLkZpZWxkVWkuU2V0dGluZy5Db250cm9sSXNSZWFkT25seTtcclxuICAgICAgICB0aGlzLmNvbnRyb2xJc1JlYWRvbmx5ID1cclxuICAgICAgICAgICAgdGhpcy5jb250cm9sSXNSZWFkb25seSB8fFxyXG4gICAgICAgICAgICBjb25maWcuRmllbGRVaS5TZXR0aW5nLklubmVyQ3RybHI/LklzUmVhZE9ubHkgfHxcclxuICAgICAgICAgICAgY29uZmlnLkZpZWxkVWkuU2V0dGluZy5Jbm5lckN0cmxyPy54dHlwZSA9PT0gJ1VsLlJlYWRPbmx5RmllbGRDdHJscic7XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbFh0eXBlID0gY29uZmlnLkZpZWxkVWkub3JpZ2luYWxYdHlwZTtcclxuICAgICAgICB0aGlzLnRleHRWaXNpYmxlID0gY29uZmlnLlRleHRWaXNpYmxlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xJc1JlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHggPSBtZWFzdXJlVGV4dChjb25maWcuRmllbGRVaS52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmICh4ID4gdGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICYmIHRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZG9ubHlpc3dyYXBlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbmZpZy5GaWVsZFVpLm9yaWdpbmFsWHR5cGUgPT09ICdVaS5TZWFyY2hDb21tYW5kSW5mb1VpJykge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsQ2FwdGlvbiA9ICcmIzgyMDM7JztcclxuICAgICAgICAgICAgdGhpcy5sYWJlbFZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnRleHRWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlTWluQW5kTWF4U2l6ZSgpO1xyXG4gICAgICAgIHRoaXMuX3NldExhYmVsV2lkdGgodGhpcy5tYXhMYWJlbFdpZHRoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3JlZnJlc2hMYWJlbCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZztcclxuICAgICAgICBjb25zdCBsYWJlbENhcHRpb24gPSBjb25maWcuQ2FwdGlvbjtcclxuICAgICAgICAvLyBpZiAoY29uZmlnLkZpZWxkVWkuU2V0dGluZz8uSXNNYW5kYXRvcnkpIHtcclxuICAgICAgICAvLyAgICAgaWYgKGxhYmVsQ2FwdGlvbi5pbmRleE9mKCcqJykgPCAwKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBsYWJlbENhcHRpb24gPSBsYWJlbENhcHRpb24gKyAnIConO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgbGFiZWxDYXB0aW9uID0gbGFiZWxDYXB0aW9uLnJlcGxhY2UoJyonLCAnJyk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICB0aGlzLmlzQ2hlY2tib3ggPSBjb25maWcuRmllbGRVaS5vcmlnaW5hbFh0eXBlID09PSAnVWkuQ2hlY2tCb3gnO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ2hlY2tib3gpIHtcclxuICAgICAgICAgICAgY29uc3QgeCA9IG1lYXN1cmVUZXh0KGxhYmVsQ2FwdGlvbik7XHJcbiAgICAgICAgICAgIGlmICh4IDwgdGhpcy5tYXhMYWJlbFdpZHRoICYmICF0aGlzLmlzTW9iaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94V2lkdGggPSBgJHt0aGlzLm1heExhYmVsV2lkdGh9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzU2luZ2xlUGljdHVyZSA9IGNvbmZpZy5GaWVsZFVpLm9yaWdpbmFsWHR5cGUgPT09ICdVaS5TaW5nbGVQaWN0dXJlJztcclxuICAgICAgICBjb25zdCBjb2xvbkxhYmVsID0gdGhpcy5mb3JtUGFuZWxTZXJ2aWNlLkNvbG9uSW5MYWJlbCA/ICc6JyA6ICcnO1xyXG4gICAgICAgIGxldCB0cmFuc2xhdGVDYXB0aW9uID0gYCR7dGhpcy5fYmJiVHJhbnNsYXRlLnRyYW5zZm9ybShsYWJlbENhcHRpb24pfSR7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hQYW5lbCB8fCBsYWJlbENhcHRpb24gPT09ICcmenduajsnID8gJycgOiBjb2xvbkxhYmVsXHJcbiAgICAgICAgfWA7XHJcbiAgICAgICAgdGhpcy5pc01hbmRhdG9yeSA9IGNvbmZpZy5GaWVsZFVpLlNldHRpbmc/LklzTWFuZGF0b3J5O1xyXG4gICAgICAgIGlmICh0aGlzLmlzTWFuZGF0b3J5KSB7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZUNhcHRpb24gPSB0cmFuc2xhdGVDYXB0aW9uLnJlcGxhY2UoJyonLCAnJyk7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0ZUNhcHRpb24gKz0gYDxzdHJvbmcgY2xhc3M9XCJmaWVsZC1tYW5kYXRvcnlcIj4qPC9zdHJvbmc+YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVDYXB0aW9uID0gdHJhbnNsYXRlQ2FwdGlvbjtcclxuICAgICAgICB0aGlzLmxhYmVsQ2FwdGlvbiA9IHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRyYW5zbGF0ZUNhcHRpb24pO1xyXG4gICAgICAgIHRoaXMubGFiZWxWaXNpYmxlID0gY29uZmlnLlRleHRWaXNpYmxlICYmIHRoaXMuc2hvd0xhYmVsICE9PSBmYWxzZTtcclxuICAgICAgICBjb25zdCBjb250cm9sV2lkdGggPSBnZXRMYWJlbFdpZHRoKHRoaXMuY29uZmlnKTtcclxuICAgICAgICBpZiAoY29udHJvbFdpZHRoICYmIGNvbnRyb2xXaWR0aCA+IHRoaXMubWF4TGFiZWxXaWR0aCkge1xyXG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRMYXlvdXRTZXJ2aWNlLnNldE1heFdpZHRoKGNvbnRyb2xXaWR0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NldEhpZGUoY29uZmlnLkZpZWxkVWkuU2V0dGluZy5Jc1Zpc2libGUgPT09IGZhbHNlID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgIH1cclxuICAgIF9zZXRMYWJlbFdpZHRoKG1heExhYmVsV2lkdGg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy50ZW1wTGFiZWxSZWYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWwgPVxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5DYXB0aW9uU2V0dGluZz8uQWxpZ25Nb2RlID09PSAnQXV0b1NpemUnIHx8XHJcbiAgICAgICAgICAgICh0aGlzLmlzTW9iaWxlICYmICh0aGlzLmlzQ2hlY2tib3ggfHwgdGhpcy5jb250cm9sSXNSZWFkb25seSkpXHJcbiAgICAgICAgICAgICAgICA/ICdhdXRvJ1xyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmlzQ29sdW1uRGlyZWN0aW9uIHx8IHRoaXMuaXNDb2x1bW5SZXZlcnNlRGlyZWN0aW9uXHJcbiAgICAgICAgICAgICAgICA/ICcxMDAlJ1xyXG4gICAgICAgICAgICAgICAgOiBtYXhMYWJlbFdpZHRoICsgJ3B4JztcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy50ZW1wTGFiZWxSZWYubmF0aXZlRWxlbWVudCwgJ3dpZHRoJywgdmFsKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWluV2lkdGggPSB0aGlzLmlzQ2hlY2tib3hcclxuICAgICAgICAgICAgPyB0aGlzLmNoZWNrYm94V2lkdGhcclxuICAgICAgICAgICAgOiB0aGlzLmNvbmZpZy5DYXB0aW9uU2V0dGluZz8uQWxpZ25Nb2RlID09PSAnQXV0b1NpemUnIHx8ICh0aGlzLmlzTW9iaWxlICYmIHRoaXMuY29udHJvbElzUmVhZG9ubHkpXHJcbiAgICAgICAgICAgID8gJ2ZpdC1jb250ZW50J1xyXG4gICAgICAgICAgICA6IHRoaXMuaXNDb2x1bW5EaXJlY3Rpb24gfHwgdGhpcy5pc0NvbHVtblJldmVyc2VEaXJlY3Rpb25cclxuICAgICAgICAgICAgPyAnMTAwJSdcclxuICAgICAgICAgICAgOiBtYXhMYWJlbFdpZHRoICsgJ3B4JztcclxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy50ZW1wTGFiZWxSZWYubmF0aXZlRWxlbWVudCwgJ21pbi13aWR0aCcsIG1pbldpZHRoKTtcclxuICAgIH1cclxuICAgIF9yZXNpemVVbHZCeURldmljZShkZXZpY2UpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNVbHYpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZGV2aWNlSGVpZ2h0ID0gJ0Rlc2t0b3BIZWlnaHQnO1xyXG4gICAgICAgIHN3aXRjaCAoZGV2aWNlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxyXG4gICAgICAgICAgICAgICAgZGV2aWNlSGVpZ2h0ID0gJ01vYmlsZUhlaWdodCc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnbSc6XHJcbiAgICAgICAgICAgICAgICBkZXZpY2VIZWlnaHQgPSAnVGFibGV0SGVpZ2h0JztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhlaWdodCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyxcclxuICAgICAgICAgICAgJ0ZpZWxkVWkuU2V0dGluZy5DbGFzc05hbWVzLkN1c3RvbVVpLlBhcmFtZXRlcnMuJyArIGRldmljZUhlaWdodCxcclxuICAgICAgICAgICAgJ2F1dG8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgcHJlcGFyZU1pbkFuZE1heFNpemUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWc7XHJcbiAgICAgICAgY29uc3QgbGF5b3V0SW5mbyA9IGNvbmZpZztcclxuICAgICAgICBjb25zdCBpc0J1dHRvbiA9IHRoaXMuaXNCdXR0b247XHJcbiAgICAgICAgY29uc3QgaXNTaW5nbGVQaWN0dXJlID0gdGhpcy5pc1NpbmdsZVBpY3R1cmU7XHJcbiAgICAgICAgY29uc3QgaXNDaGVja2JveCA9IHRoaXMuaXNDaGVja2JveDtcclxuICAgICAgICBpZiAoIXRoaXMuaW5saW5lRWRpdCAmJiBsYXlvdXRJbmZvICYmIChpc0J1dHRvbiB8fCBpc0NoZWNrYm94IHx8IGlzU2luZ2xlUGljdHVyZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5hdHRyTWluV2lkdGggPSBjb25maWcuQm91bmRzLndpZHRoO1xyXG4gICAgICAgICAgICBsZXQgZXh0cmFWYWwgPSAwO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAoKGlzQnV0dG9uIHx8IGlzQ2hlY2tib3gpICYmIGxheW91dEluZm8uRmllbGRVaS5TZXR0aW5nPy5GaWVsZEljb24pIHx8XHJcbiAgICAgICAgICAgICAgICBsYXlvdXRJbmZvLkZpZWxkVWkuU2V0dGluZy5Kc29uRXh0cmFQcm9wPy5HbHlwaFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGV4dHJhVmFsID0gMTg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgeyBNYXhTaXplLCBNaW5TaXplIH0gPSBsYXlvdXRJbmZvO1xyXG4gICAgICAgICAgICBpZiAoTWF4U2l6ZT8ud2lkdGggPiAwICYmICF0aGlzLmlzQ2hlY2tib3gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4V2lkdGggPSBNYXhTaXplLndpZHRoICsgZXh0cmFWYWwgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChNaW5TaXplPy53aWR0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWluV2lkdGggPSBNaW5TaXplLndpZHRoICsgZXh0cmFWYWwgKyAncHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzU2VhcmNoUGFuZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5hdHRyTWluV2lkdGggPSB0aGlzLm1heExhYmVsV2lkdGggKyAyMDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNTZWFyY1BhbmVsSW5TaWRlQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhXaWR0aCA9ICczMjBweCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5taW5XaWR0aCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIFJlZnJlc2hMYWJlbCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLl9yZWZyZXNoTGFiZWwoKTtcclxuICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KHsgdGl0bGU6ICdyZWZyZXNoTGFiZWwnLCBkYXRhOiB0aGlzLmNvbmZpZyB9KTtcclxuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9O1xyXG4gICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgIEBJbnB1dCgpIFNldFZpc2libGUgPSAodmlzaWJsZSwgcmVmcmVzaCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5GaWVsZFVpLlNldHRpbmcuSXNWaXNpYmxlID0gdmlzaWJsZTtcclxuICAgICAgICAgICAgdGhpcy5fc2V0SGlkZSghdmlzaWJsZSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY29uZmlnLkZpZWxkVWkuU2V0dGluZy4kQlJ1bGVIaWRlID0gIXZpc2libGU7XHJcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgcHJpdmF0ZSBfc2V0SGlkZShoaWRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgaGlkZSA9IHRoaXMuY29uZmlnLkZpZWxkVWkuU2V0dGluZy5IaWRlU2VhcmNoQ29tbWFuZEluZm9VaSA9PT0gdHJ1ZSA/IHRydWUgOiBoaWRlOyAvLyBoaWRlIGRlZmF1bHQgYnV0dG9ucyBvZiBzZWFyY2ggcGFuZWxcclxuICAgICAgICB0aGlzLmhpZGUgPSBoaWRlO1xyXG4gICAgICAgIGlmIChoaWRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdoaWRlLWZvcm0taXRlbScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyMi5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdoaWRlLWZvcm0taXRlbScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldEZsZXgoZmxleDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBmbGV4ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNNb2JpbGUgfHwgdGhpcy5jb25maWcuRmllbGRVaS5vcmlnaW5hbFh0eXBlICE9PSAnVWkuVGV4dEFyZWEnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2ZsZXgnLCBmbGV4KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiQGlmICghaGlkZSkgeyBAaWYgKGxhYmVsVmlzaWJsZSkge1xyXG48YnN1LWx5LWxhYmVsXHJcbiAgICBbYXR0ci5sYWJlbFdpZHRoXT1cImxhYmVsV2lkdGhcIlxyXG4gICAgW2F0dHJSdGxdXHJcbiAgICAjdGVtcExhYmVsUmVmXHJcbiAgICBbY2xhc3Mubm8tcGFkZGluZ109XCJjb25maWcuUGFkZGluZ1swXSA9PT0gMFwiXHJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXHJcbiAgICBbY2FwdGlvbl09XCJsYWJlbENhcHRpb25cIlxyXG4gICAgW3RyYW5zbGF0ZUNhcHRpb25dPVwidHJhbnNsYXRlQ2FwdGlvblwiXHJcbiAgICBbb3JpZ2luYWxXaWR0aF09XCJsYWJlbFdpZHRoXCJcclxuICAgIFtzdHlsZS5taW4td2lkdGhdPVwiXHJcbiAgICAgICAgaXNDaGVja2JveFxyXG4gICAgICAgICAgICA/IGNoZWNrYm94V2lkdGhcclxuICAgICAgICAgICAgOiAoY29uZmlnLkNhcHRpb25TZXR0aW5nPy5BbGlnbk1vZGUgPT09ICdBdXRvU2l6ZScgJiYgIWlzTW9iaWxlKSB8fCAoaXNNb2JpbGUgJiYgY29udHJvbElzUmVhZG9ubHkpXHJcbiAgICAgICAgICAgID8gJ2ZpdC1jb250ZW50J1xyXG4gICAgICAgICAgICA6IGlzQ29sdW1uRGlyZWN0aW9uIHx8IGlzQ29sdW1uUmV2ZXJzZURpcmVjdGlvblxyXG4gICAgICAgICAgICA/ICcxMDAlJ1xyXG4gICAgICAgICAgICA6IG1heExhYmVsV2lkdGggKyAncHgnXHJcbiAgICBcIlxyXG4gICAgW3N0eWxlLndpZHRoXT1cIlxyXG4gICAgICAgIChjb25maWcuQ2FwdGlvblNldHRpbmc/LkFsaWduTW9kZSA9PT0gJ0F1dG9TaXplJyAmJiAhaXNNb2JpbGUpIHx8IChpc01vYmlsZSAmJiAoaXNDaGVja2JveCB8fCBjb250cm9sSXNSZWFkb25seSkpXHJcbiAgICAgICAgICAgID8gJ2F1dG8nXHJcbiAgICAgICAgICAgIDogaXNDb2x1bW5EaXJlY3Rpb24gfHwgaXNDb2x1bW5SZXZlcnNlRGlyZWN0aW9uXHJcbiAgICAgICAgICAgID8gJzEwMCUnXHJcbiAgICAgICAgICAgIDogbWF4TGFiZWxXaWR0aCArICdweCdcclxuICAgIFwiXHJcbiAgICBbaXNNYW5kYXRvcnldPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgW2ZpZWxkSWNvbl09XCJmaWVsZEljb25cIlxyXG4gICAgW2F0dHIuYXV0b3NpemVdPVwiY29uZmlnLkNhcHRpb25TZXR0aW5nPy5BbGlnbk1vZGUgPyB0cnVlOm51bGxcIlxyXG4gICAgW2hlbHBEZXNjcmlwdGlvbl09XCJoZWxwRGVzY3JpcHRpb25cIlxyXG4gICAgW29yaWdpbmFsWHR5cGVdPVwib3JpZ2luYWxYdHlwZVwiXHJcbiAgICBbdGV4dFZpc2libGVdPVwidGV4dFZpc2libGVcIlxyXG4gICAgW2lzQ29sdW1uXT1cImlzQ29sdW1uRGlyZWN0aW9uIHx8IGlzQ29sdW1uUmV2ZXJzZURpcmVjdGlvblwiXHJcbj48L2JzdS1seS1sYWJlbD5cclxufVxyXG48bGFiZWwgW2F0dHIudmlzaWJsZV09XCJsYWJlbFZpc2libGVcIiBjbGFzcz1cImhvcml6b250YWwtbGFiZWxcIiBbaW5uZXJIdG1sXT1cImVtcHR5VGV4dFwiPjwvbGFiZWw+XHJcbjxibnJjLWZpZWxkLXVpXHJcbiAgICBbYXR0ci54dHlwZV09XCJjb25maWcuRmllbGRVaS5vcmlnaW5hbFh0eXBlXCJcclxuICAgIFthdHRyLmZpZWxkV2lkdGhdPVwibGF5b3V0Q29udHJvbFdpZHRoXCJcclxuICAgIFthdHRyLmlzQ2hlY2tib3hdPVwiaXNDaGVja2JveFwiXHJcbiAgICBbYXR0ci5pc2J1dHRvbl09XCJpc0J1dHRvblwiXHJcbiAgICBbc3R5bGUuZmxleC1ncm93XT1cImlzQ2hlY2tib3ggPyAxIDogMFwiXHJcbiAgICBbY2xhc3Mubm8tcGFkZGluZ109XCJjb25maWcuUGFkZGluZ1swXSA9PT0gMFwiXHJcbiAgICBbY3VzdG9tRmllbGRdPVwiY29uZmlnLkZpZWxkVWlcIlxyXG4gICAgW2xheW91dEluZm9dPVwiY29uZmlnXCJcclxuICAgIFtpbmxpbmVFZGl0XT1cImlubGluZUVkaXRcIlxyXG4gICAgW2NlbGxFZGl0XT1cImNlbGxFZGl0XCJcclxuICAgIFtmb3JtSGVpZ2h0XT1cIihmb3JtSGVpZ2h0JCB8IGFzeW5jKSEhXCJcclxuICAgIFtmb2N1c0NvbnRyb2xdPVwiZm9jdXNDb250cm9sXCJcclxuICAgIFtpc1NlYXJjaFBhbmVsXT1cImlzU2VhcmNoUGFuZWxcIlxyXG4gICAgW3N0eWxlLmhlaWdodF09XCJpc1VsdiA/ICcxMDAlJyA6ICdhdXRvJ1wiXHJcbiAgICBbYXR0ci5pc3Vsdl09XCJpc1VsdlwiXHJcbj48L2JucmMtZmllbGQtdWk+XHJcbn1cclxuIl19
|
|
@@ -21,7 +21,7 @@ export class ListItemComponent extends BaseViewItemPropsComponent {
|
|
|
21
21
|
PreventDefaulEvent(e);
|
|
22
22
|
}
|
|
23
23
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ListItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
24
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ListItemComponent, selector: "bsu-list-item", inputs: { setting: "setting", isDisplayType: "isDisplayType" }, usesInheritance: true, ngImport: i0, template: "<ng-container\r\n *ngTemplateOutlet=\"isDisplayType ? displayTemplate : standardTemplate; context: { $implicit: mo }\"\r\n></ng-container>\r\n<ng-template #standardTemplate let-mo>\r\n <li\r\n fd-list-item\r\n class=\"standard-list-row\"\r\n [ngClass]=\"deviceSize\"\r\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\r\n [class.selected]=\"isChecked === true\"\r\n [selected]=\"isChecked === true\"\r\n (dblclick)=\"onRowClick()\"\r\n (click)=\"onRowCheck()\"\r\n >\r\n <a\r\n fd-list-link\r\n [attr.rtl]=\"rtl\"\r\n class=\"li-link\"\r\n [class.checklist]=\"isCheckList\"\r\n #aEl\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [hostEl]=\"aEl\"\r\n >\r\n @if (isCheckList) {\r\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\r\n } @if (setting.IconFont || setting.AvatarField) {\r\n <span fd-list-thumbnail>\r\n <fd-avatar\r\n alterIcon=\"alt|content|backup|default-icon\"\r\n [style.color]=\"setting.IconColor ? setting.IconColor : null\"\r\n [circle]=\"true\"\r\n [image]=\"\r\n setting.AvatarField\r\n ? (mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId)\r\n : ''\r\n \"\r\n [size]=\"avatarSize\"\r\n [transparent]=\"true\"\r\n [glyph]=\"\r\n setting.IconFont ??\r\n (mo.$State === 'New' && !isChecked ? 'favorite' : inlineEditMode && isChecked ? 'edit' : '')\r\n \"\r\n >\r\n </fd-avatar>\r\n </span>\r\n }\r\n <div fd-list-content>\r\n <div fd-list-byline [twoCol]=\"true\">\r\n <div fd-list-title>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.TitleField,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n conditionalFormats: conditionalFormats,\r\n index: 0\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div fd-list-byline [style.padding-left]=\"canView && deviceName === 'desktop' ? '.9rem' : '0'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.StatusField,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n conditionalFormats: conditionalFormats\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n <div fd-list-byline>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.SubtitleField,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n conditionalFormats: conditionalFormats\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n @if (contextMenuItems.length) {\r\n <bsu-ulv-context-menu\r\n [menuItems]=\"contextMenuItems\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [mo]=\"mo\"\r\n (commandClick)=\"onUlvCommand()\"\r\n ></bsu-ulv-context-menu>\r\n } @if (canView && !hideOpenIcon) {\r\n <button (click)=\"onRowClick()\" fdType=\"transparent\" [glyph]=\"navigationArrow\" fd-button></button>\r\n }\r\n </a>\r\n </li>\r\n</ng-template>\r\n<ng-template #displayTemplate let-mo>\r\n @if (!mo.parent || mo.parent?.expanded) {\r\n <li\r\n class=\"display\"\r\n [ngClass]=\"deviceSize\"\r\n fd-list-item\r\n [interactive]=\"false\"\r\n (dblclick)=\"onRowClick()\"\r\n (click)=\"onRowCheck()\"\r\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\r\n >\r\n <a\r\n fd-list-link\r\n [attr.rtl]=\"rtl\"\r\n class=\"li-link\"\r\n style=\"cursor: default\"\r\n [class.checklist]=\"isCheckList\"\r\n #aEl\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [hostEl]=\"aEl\"\r\n style=\"column-gap: 3px\"\r\n >\r\n @if (setting.AvatarField) {\r\n <img\r\n [src]=\"mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId\"\r\n style=\"width: 24px; height: 24px\"\r\n />\r\n } @if (setting.IconFont) {\r\n <i fd-list-icon [glyph]=\"setting.IconFont\" [style.color]=\"setting.IconColor ? setting.IconColor : null\">\r\n </i>\r\n } @if (!setting.IconFont && mo.$State === 'New' && !isChecked) {\r\n <i fd-list-icon glyph=\"favorite\"></i>\r\n } @if (!setting.IconFont && inlineEditMode && isChecked) {\r\n <i fd-list-icon glyph=\"edit\"></i>\r\n } @if (isCheckList) {\r\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\r\n }\r\n <span fd-list-title>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.TitleField,\r\n conditionalFormats: conditionalFormats,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n index: 0\r\n }\r\n \"\r\n ></ng-container>\r\n </span>\r\n <span fd-list-secondary [dir]=\"rtl ? 'ltr' : 'rtl'\" [class.flex1]=\"contextMenuItems.length === 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.CounterField,\r\n conditionalFormats: conditionalFormats,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n index: index\r\n }\r\n \"\r\n ></ng-container>\r\n @if (canView && !hideOpenIcon) {\r\n <button fd-button (click)=\"onRowClick()\" [glyph]=\"navigationArrow\" fdType=\"transparent\"></button>\r\n } @if (contextMenuItems.length) {\r\n <bsu-ulv-context-menu\r\n [menuItems]=\"contextMenuItems\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [mo]=\"mo\"\r\n (commandClick)=\"onUlvCommand()\"\r\n ></bsu-ulv-context-menu>\r\n }\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n</ng-template>\r\n<ng-template\r\n #renderColumn\r\n let-column\r\n let-mo=\"mo\"\r\n let-conditionalFormats=\"conditionalFormats\"\r\n let-index=\"index\"\r\n let-layout94=\"layout94\"\r\n>\r\n @if (column) {\r\n <div\r\n #divEl\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [hostEl]=\"divEl\"\r\n [dbName]=\"column.Name\"\r\n >\r\n <bsu-column-renderer\r\n [mo]=\"mo\"\r\n [column]=\"column\"\r\n [disableEllapsis]=\"true\"\r\n [value]=\"column | columnValue: mo | bbbTranslate\"\r\n [icon]=\"column | columnIcon: mo\"\r\n [editMode]=\"inlineEditMode && allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [index]=\"index\"\r\n [controlUi]=\"column.Caption | controlUi: layout94:column.Name\"\r\n (keyup.control.enter)=\"onEditFormPanelSave($event)\"\r\n (keyup.esc)=\"onEditFormPanelCancel($event)\"\r\n (keydown.Tab)=\"onTabKeyDown($event, index)\"\r\n [formLayoutShowLabel]=\"true\"\r\n ></bsu-column-renderer>\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [":host li.s{height:auto}:host .flex1{flex:1;display:flex;justify-content:start;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "colorIndication", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "readonly", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id", "preventClick"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i6.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i6.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "directive", type: i6.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: i6.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i6.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i6.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i8.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "rightClickEnable", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode", "contextMenuOverflowText", "appendTo"], outputs: ["commandClick"] }, { kind: "component", type: i9.ColumnRendererComponent, selector: "bsu-column-renderer,[colRenderer]", inputs: ["column", "allColumns", "mo", "index", "editMode", "attachmentViewType", "customRowHeight", "controlUi", "formLayoutShowLabel", "isChecked", "isNewInlineMo", "containerDom", "disableEllapsis", "rtl", "isMobile", "fdTextMode", "deviceName", "deviceSize", "value", "icon"] }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i11.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i11.ControlUiPipe, name: "controlUi" }, { kind: "pipe", type: i11.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i11.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ListItemComponent, selector: "bsu-list-item", inputs: { setting: "setting", isDisplayType: "isDisplayType" }, usesInheritance: true, ngImport: i0, template: "<ng-container\r\n *ngTemplateOutlet=\"isDisplayType ? displayTemplate : standardTemplate; context: { $implicit: mo }\"\r\n></ng-container>\r\n<ng-template #standardTemplate let-mo>\r\n <li\r\n fd-list-item\r\n class=\"standard-list-row\"\r\n [ngClass]=\"deviceSize\"\r\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\r\n [class.selected]=\"isChecked === true\"\r\n [selected]=\"isChecked === true\"\r\n (dblclick)=\"onRowClick()\"\r\n (click)=\"onRowCheck()\"\r\n >\r\n <a\r\n fd-list-link\r\n [attr.rtl]=\"rtl\"\r\n class=\"li-link\"\r\n [class.checklist]=\"isCheckList\"\r\n #aEl\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [hostEl]=\"aEl\"\r\n >\r\n @if (isCheckList) {\r\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\r\n } @if (setting.IconFont || setting.AvatarField) {\r\n <span fd-list-thumbnail>\r\n <fd-avatar\r\n alterIcon=\"alt|content|backup|default-icon\"\r\n [style.color]=\"setting.IconColor ? setting.IconColor : null\"\r\n [circle]=\"true\"\r\n [image]=\"\r\n setting.AvatarField\r\n ? (mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId)\r\n : ''\r\n \"\r\n [size]=\"avatarSize\"\r\n [transparent]=\"true\"\r\n [glyph]=\"\r\n setting.IconFont ??\r\n (mo.$State === 'New' && !isChecked ? 'favorite' : inlineEditMode && isChecked ? 'edit' : '')\r\n \"\r\n >\r\n </fd-avatar>\r\n </span>\r\n }\r\n <div fd-list-content>\r\n <div fd-list-byline [twoCol]=\"true\">\r\n <div fd-list-title>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.TitleField,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n conditionalFormats: conditionalFormats,\r\n index: 0\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n <div fd-list-byline [style.padding-left]=\"canView && deviceName === 'desktop' ? '.9rem' : '0'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.StatusField,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n conditionalFormats: conditionalFormats\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n <div fd-list-byline>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.SubtitleField,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n conditionalFormats: conditionalFormats\r\n }\r\n \"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n @if (contextMenuItems.length) {\r\n <bsu-ulv-context-menu\r\n [menuItems]=\"contextMenuItems\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [mo]=\"mo\"\r\n (commandClick)=\"onUlvCommand()\"\r\n ></bsu-ulv-context-menu>\r\n } @if (canView && !hideOpenIcon) {\r\n <button (click)=\"onRowClick()\" fdType=\"transparent\" [glyph]=\"navigationArrow\" fd-button></button>\r\n }\r\n </a>\r\n </li>\r\n</ng-template>\r\n<ng-template #displayTemplate let-mo>\r\n @if (!mo.parent || mo.parent?.expanded) {\r\n <li\r\n class=\"display\"\r\n [ngClass]=\"deviceSize\"\r\n fd-list-item\r\n [interactive]=\"false\"\r\n (dblclick)=\"onRowClick()\"\r\n (click)=\"onRowCheck()\"\r\n [style.padding-right]=\"'calc( 1rem + ' + mo.level * 12 + 'px' + ' )'\"\r\n >\r\n <a\r\n fd-list-link\r\n [attr.rtl]=\"rtl\"\r\n class=\"li-link\"\r\n style=\"cursor: default\"\r\n [class.checklist]=\"isCheckList\"\r\n #aEl\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [hostEl]=\"aEl\"\r\n style=\"column-gap: 3px\"\r\n >\r\n @if (setting.AvatarField) {\r\n <img\r\n [src]=\"mo[setting.AvatarField.Name]?.FileId | picFieldSrc: 'ID':setting.AvatarField.FieldDefId\"\r\n style=\"width: 24px; height: 24px\"\r\n />\r\n } @if (setting.IconFont) {\r\n <i fd-list-icon [glyph]=\"setting.IconFont\" [style.color]=\"setting.IconColor ? setting.IconColor : null\">\r\n </i>\r\n } @if (!setting.IconFont && mo.$State === 'New' && !isChecked) {\r\n <i fd-list-icon glyph=\"favorite\"></i>\r\n } @if (!setting.IconFont && inlineEditMode && isChecked) {\r\n <i fd-list-icon glyph=\"edit\"></i>\r\n } @if (isCheckList) {\r\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (change)=\"onRowCheck2($event)\"></fd-checkbox>\r\n }\r\n <span fd-list-title>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.TitleField,\r\n conditionalFormats: conditionalFormats,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n index: 0\r\n }\r\n \"\r\n ></ng-container>\r\n </span>\r\n <span fd-list-secondary [dir]=\"rtl ? 'ltr' : 'rtl'\" [class.flex1]=\"contextMenuItems.length === 0\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderColumn;\r\n context: {\r\n $implicit: setting.CounterField,\r\n conditionalFormats: conditionalFormats,\r\n layout94: layout$ | async,\r\n mo: mo,\r\n index: index\r\n }\r\n \"\r\n ></ng-container>\r\n @if (canView && !hideOpenIcon) {\r\n <button fd-button (click)=\"onRowClick()\" [glyph]=\"navigationArrow\" fdType=\"transparent\"></button>\r\n } @if (contextMenuItems.length) {\r\n <bsu-ulv-context-menu\r\n [menuItems]=\"contextMenuItems\"\r\n [conditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\r\n [mo]=\"mo\"\r\n (commandClick)=\"onUlvCommand()\"\r\n ></bsu-ulv-context-menu>\r\n }\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n</ng-template>\r\n<ng-template\r\n #renderColumn\r\n let-column\r\n let-mo=\"mo\"\r\n let-conditionalFormats=\"conditionalFormats\"\r\n let-index=\"index\"\r\n let-layout94=\"layout94\"\r\n>\r\n @if (column) {\r\n <div\r\n #divEl\r\n [applyConditionalFormats]=\"conditionalFormats\"\r\n [styleIndex]=\"styleIndex\"\r\n [hostEl]=\"divEl\"\r\n [dbName]=\"column.Name\"\r\n >\r\n <bsu-column-renderer\r\n [mo]=\"mo\"\r\n [column]=\"column\"\r\n [disableEllapsis]=\"true\"\r\n [value]=\"column | columnValue: mo | bbbTranslate\"\r\n [icon]=\"column | columnIcon: mo\"\r\n [editMode]=\"inlineEditMode && allowInlineEdit\"\r\n [rtl]=\"rtl\"\r\n [deviceName]=\"deviceName\"\r\n [deviceSize]=\"deviceSize\"\r\n [index]=\"index\"\r\n [controlUi]=\"column.Caption | controlUi: layout94:column.Name\"\r\n (keyup.control.enter)=\"onEditFormPanelSave($event)\"\r\n (keyup.esc)=\"onEditFormPanelCancel($event)\"\r\n (keydown.Tab)=\"onTabKeyDown($event, index)\"\r\n [formLayoutShowLabel]=\"true\"\r\n ></bsu-column-renderer>\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [":host li.s{height:auto}:host .flex1{flex:1;display:flex;justify-content:start;flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "colorIndication", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "readonly", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id", "preventClick"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i6.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i6.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role", "ariaHidden"] }, { kind: "directive", type: i6.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "directive", type: i6.ListBylineDirective, selector: "[fdListByline], [fd-list-byline]", inputs: ["twoCol", "wrap"] }, { kind: "directive", type: i6.ListContentDirective, selector: "[fdListContent], [fd-list-content]", inputs: ["twoCol"] }, { kind: "directive", type: i6.ListThumbnailDirective, selector: "[fdListThumbnail], [fd-list-thumbnail]" }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i8.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "rightClickEnable", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode", "contextMenuOverflowText", "appendTo"], outputs: ["commandClick"] }, { kind: "component", type: i9.ColumnRendererComponent, selector: "bsu-column-renderer,[colRenderer]", inputs: ["cellEdit", "column", "allColumns", "mo", "index", "editMode", "attachmentViewType", "customRowHeight", "controlUi", "formLayoutShowLabel", "isChecked", "isNewInlineMo", "containerDom", "disableEllapsis", "rtl", "isMobile", "fdTextMode", "deviceName", "deviceSize", "value", "icon"] }, { kind: "directive", type: i10.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i11.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i11.ControlUiPipe, name: "controlUi" }, { kind: "pipe", type: i11.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i11.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
25
|
}
|
|
26
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ListItemComponent, decorators: [{
|
|
27
27
|
type: Component,
|
|
@@ -3,9 +3,11 @@ import { filter, map, tap } from 'rxjs/operators';
|
|
|
3
3
|
import { SortDirection } from 'barsa-novin-ray-core';
|
|
4
4
|
import * as Constants from '../constants';
|
|
5
5
|
export class GridMoDataList {
|
|
6
|
-
constructor(moDataList$, gridSetting$, visibleColumns$, searchTerm$, inlineEditMode$) {
|
|
6
|
+
constructor(moDataList$, gridSetting$, visibleColumns$, searchTerm$, inlineEditMode$, allowInlineEdit$) {
|
|
7
7
|
this.subscriptions = [];
|
|
8
8
|
visibleColumns$.pipe(tap((visibleColumns) => (this.visibleColumns = visibleColumns))).subscribe();
|
|
9
|
+
inlineEditMode$.pipe(tap((inlineEditMode) => (this.inlineEditMode = inlineEditMode))).subscribe();
|
|
10
|
+
allowInlineEdit$.pipe(tap((allowInlineEdit) => (this.allowInlineEdit = allowInlineEdit))).subscribe();
|
|
9
11
|
this.subscriptions.push((this.data$ = combineLatest([
|
|
10
12
|
moDataList$.pipe(tap((items) => (this.items = items))),
|
|
11
13
|
gridSetting$.pipe(tap((gridSetting) => (this.gridSetting = gridSetting)))
|
|
@@ -13,7 +15,7 @@ export class GridMoDataList {
|
|
|
13
15
|
// searchTerm$.pipe(tap((searchTerm) => (this.searchTerm = searchTerm))),
|
|
14
16
|
).pipe(filter(() => !!this.items), map(([items, gridSetting]) => this.searchTerm
|
|
15
17
|
? searchEx(this.searchTerm, this.visibleColumns.map((c) => c.Name), this.items)
|
|
16
|
-
: this.items), map(() => this.gridSetting?.SortSettingList
|
|
18
|
+
: this.items), map(() => this.gridSetting?.SortSettingList && (!this.inlineEditMode || !this.allowInlineEdit || !this.items.find(c => c.$IsChecked))
|
|
17
19
|
? this.items.slice().sort(multilevelSort(this.getSortby()))
|
|
18
20
|
: this.items)
|
|
19
21
|
// map((items) => {
|
|
@@ -116,4 +118,4 @@ const searchEx = (searchTerm, columns, items) => {
|
|
|
116
118
|
.some((value) => value.toLocaleLowerCase().includes(searchText.toLocaleLowerCase()));
|
|
117
119
|
});
|
|
118
120
|
};
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbW9kZWxzL2dyaWQtZGF0YS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBTUgsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sS0FBSyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBRTFDLE1BQU0sT0FBTyxjQUFjO0lBU3ZCLFlBQ0ksV0FBOEMsRUFDOUMsWUFBcUMsRUFDckMsZUFBK0MsRUFDL0MsV0FBK0IsRUFDL0IsZUFBb0M7UUFOeEMsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFRdEIsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQ3ZCO1lBQ0ksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3RELFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUM1RTtRQUNELHlF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QzthQUMxQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN4QyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIENvbGxlY3Rpb25Tb3J0LFxyXG4gICAgVGFibGVTdGF0ZSxcclxuICAgIEdyaWRTZXR0aW5nLFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIFJlcG9ydFZpZXdDb2x1bW4sXHJcbiAgICBTb3J0RGlyZWN0aW9uXHJcbn0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgKiBhcyBDb25zdGFudHMgZnJvbSAnLi4vY29uc3RhbnRzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkTW9EYXRhTGlzdCB7XHJcbiAgICBpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xyXG4gICAgcmVzdWx0SXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcclxuICAgIGdyaWRTZXR0aW5nOiBHcmlkU2V0dGluZztcclxuICAgIHZpc2libGVDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107XHJcbiAgICBzZWFyY2hUZXJtOiBzdHJpbmc7XHJcbiAgICBkYXRhJDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+O1xyXG4gICAgaW5saW5lRWRpdE1vZGU6IGJvb2xlYW47XHJcbiAgICBzdWJzY3JpcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgbW9EYXRhTGlzdCQ6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPixcclxuICAgICAgICBncmlkU2V0dGluZyQ6IE9ic2VydmFibGU8R3JpZFNldHRpbmc+LFxyXG4gICAgICAgIHZpc2libGVDb2x1bW5zJDogT2JzZXJ2YWJsZTxSZXBvcnRWaWV3Q29sdW1uW10+LFxyXG4gICAgICAgIHNlYXJjaFRlcm0kOiBPYnNlcnZhYmxlPHN0cmluZz4sXHJcbiAgICAgICAgaW5saW5lRWRpdE1vZGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+XHJcbiAgICApIHtcclxuICAgICAgICB2aXNpYmxlQ29sdW1ucyQucGlwZSh0YXAoKHZpc2libGVDb2x1bW5zKSA9PiAodGhpcy52aXNpYmxlQ29sdW1ucyA9IHZpc2libGVDb2x1bW5zKSkpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgKHRoaXMuZGF0YSQgPSBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3QkLnBpcGUodGFwKChpdGVtcykgPT4gKHRoaXMuaXRlbXMgPSBpdGVtcykpKSxcclxuICAgICAgICAgICAgICAgICAgICBncmlkU2V0dGluZyQucGlwZSh0YXAoKGdyaWRTZXR0aW5nKSA9PiAodGhpcy5ncmlkU2V0dGluZyA9IGdyaWRTZXR0aW5nKSkpXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAvLyBzZWFyY2hUZXJtJC5waXBlKHRhcCgoc2VhcmNoVGVybSkgPT4gKHRoaXMuc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0pKSksXHJcbiAgICAgICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuaXRlbXMpLFxyXG4gICAgICAgICAgICAgICAgbWFwKChbaXRlbXMsIGdyaWRTZXR0aW5nXSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWFyY2hFeChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLm1hcCgoYykgPT4gYy5OYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLml0ZW1zXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5pdGVtcy5zbGljZSgpLnNvcnQobXVsdGlsZXZlbFNvcnQodGhpcy5nZXRTb3J0YnkoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5pdGVtc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLy8gbWFwKChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLiRWaXNpYmlsaXR5ID0gdHJ1ZSkpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBpdGVtcztcclxuICAgICAgICAgICAgICAgIC8vIH0pLFxyXG4gICAgICAgICAgICAgICAgLy8gdGFwKChpdGVtcykgPT4gKHRoaXMucmVzdWx0SXRlbXMgPSBpdGVtcykpXHJcbiAgICAgICAgICAgICAgICAvLyB0YXAoKGl0ZW1zKSA9PiBjb25zb2xlLmxvZyhpdGVtcykpXHJcbiAgICAgICAgICAgICkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKGMpID0+IGMudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB9XHJcbiAgICBnZXRTb3J0YnkoKTogQ29sbGVjdGlvblNvcnRbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZFNldHRpbmcuU29ydFNldHRpbmdMaXN0Lm1hcCgoYykgPT4gKHtcclxuICAgICAgICAgICAgZmllbGQ6IGMuTmFtZSxcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLmdldFNvcnREaXJlY3Rpb24oYy5Tb3J0RGlyZWN0aW9uKSxcclxuICAgICAgICAgICAgaXNOdW1iZXI6IHRoaXMudmlzaWJsZUNvbHVtbnM/LmZpbmQoKGQpID0+IGQuTmFtZSA9PT0gYy5OYW1lKT8uRmllbGRUeXBlSWQgPT09IDBcclxuICAgICAgICB9KSkuY29uY2F0KHsgZmllbGQ6ICckTmV3SW5saW5lTW8nLCBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb24uREVTQywgaXNOdW1iZXI6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgZ2V0U29ydERpcmVjdGlvbihkaXJlY3Rpb24pOiBTb3J0RGlyZWN0aW9uIHtcclxuICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xyXG4gICAgICAgICAgICBjYXNlICdBU0MnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNvcnREaXJlY3Rpb24uQVNDO1xyXG4gICAgICAgICAgICBjYXNlICdERVNDJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLkRFU0M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkRGF0YVByb3ZpZGVyIHtcclxuICAgIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPSBbXTtcclxuICAgIG1vRGF0YUxpc3QkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT47XHJcbiAgICB0b3RhbEl0ZW1zID0gMDtcclxuICAgIGxhc3RTdGF0ZTogVGFibGVTdGF0ZTtcclxuICAgIGNvbnN0cnVjdG9yKG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBtb0RhdGFMaXN0O1xyXG4gICAgfVxyXG4gICAgZmV0Y2godGFibGVTdGF0ZTogVGFibGVTdGF0ZSk6IE9ic2VydmFibGU8TWV0YW9iamVjdERhdGFNb2RlbFtdPiB7XHJcbiAgICAgICAgdGhpcy5sYXN0U3RhdGUgPSB0YWJsZVN0YXRlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vRGF0YUxpc3QodGFibGVTdGF0ZSk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIGdldE1vRGF0YUxpc3QodGFibGVTdGF0ZTogVGFibGVTdGF0ZSk6IE9ic2VydmFibGU8YW55W10+IHtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5pdGVtcykucGlwZShcclxuICAgICAgICAgICAgbWFwKChpdGVtcykgPT4gKHRhYmxlU3RhdGUuc2VhcmNoSW5wdXQgPyBzZWFyY2godGFibGVTdGF0ZSwgaXRlbXMpIDogaXRlbXMpKSxcclxuICAgICAgICAgICAgbWFwKChpdGVtcykgPT4gKHRhYmxlU3RhdGUuc29ydEJ5ID8gc29ydCh0YWJsZVN0YXRlLCBpdGVtcykgOiBpdGVtcykpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5jb25zdCBzb3J0ID0gKHsgc29ydEJ5IH06IFRhYmxlU3RhdGUsIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9PlxyXG4gICAgc29ydEV4KHNvcnRCeSwgbW9EYXRhTGlzdCk7XHJcblxyXG5jb25zdCBzb3J0RXggPSAoXHJcbiAgICBzb3J0Qnk6IHsgZmllbGQ6IHN0cmluZyB8IG51bGw7IGRpcmVjdGlvbjogc3RyaW5nOyBpc051bWJlcj86IGJvb2xlYW4gfVtdLFxyXG4gICAgbW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdXHJcbik6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IG1vRGF0YUxpc3Quc2xpY2UoKTtcclxuXHJcbiAgICBjb25zdCBuZXdTb3J0QnkgPSBzb3J0QnkuZmlsdGVyKCh7IGZpZWxkIH0pID0+ICEhZmllbGQpO1xyXG5cclxuICAgIGlmIChuZXdTb3J0QnkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpdGVtcy5zb3J0KFxyXG4gICAgICAgIChhLCBiKSA9PlxyXG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG4gICAgICAgICAgICBuZXdTb3J0QnlcclxuICAgICAgICAgICAgICAgIC5tYXAoKHsgZmllbGQsIGRpcmVjdGlvbiwgaXNOdW1iZXIgfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzY01vZGlmaWVyID0gZGlyZWN0aW9uID09PSBTb3J0RGlyZWN0aW9uLkFTQyA/IDEgOiAtMTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29uc3RhbnRzLnNvcnQoYSwgYiwgZmllbGQsIGlzTnVtYmVyKSAqIGFzY01vZGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5maW5kKChyZXN1bHQsIGluZGV4LCBsaXN0KSA9PiByZXN1bHQgIT09IDAgfHwgaW5kZXggPT09IGxpc3QubGVuZ3RoIC0gMSkhXHJcbiAgICApO1xyXG59O1xyXG5mdW5jdGlvbiBjb21iaW5lQ29tcGFyaXNvbkZ1bmN0aW9ucyhjb21wYXJlRnVuY3Rpb25zKSB7XHJcbiAgICByZXR1cm4gKGEsIGIpID0+IHtcclxuICAgICAgICByZXR1cm4gY29tcGFyZUZ1bmN0aW9ucy5yZWR1Y2UoKHJlc3VsdCwgY29tcGFyZUZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFByb2NlZWRzIHRvIHRoZSBuZXh0IGNvbXBhcmlzb24gZnVuY3Rpb24gaWYgdGhlIHByZXZpb3VzIG9uZSByZXR1cm5lZCAwXHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdiZWZvcmUgJywgcmVzdWx0KTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ25leHQgYSAsYiAnLCBhLCBiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCB8fCBjb21wYXJlRnVuY3Rpb24oYSwgYik7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIG11bHRpbGV2ZWxTb3J0KGNyaXRlcmlhOiBDb2xsZWN0aW9uU29ydFtdKSB7XHJcbiAgICBjb25zdCBjb21wYXJlRnVuY3Rpb25zID0gY3JpdGVyaWEubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgZGlyZWN0aW9uLCBpc051bWJlciB9ID0geDtcclxuXHJcbiAgICAgICAgcmV0dXJuIChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFWYWx1ZSA9IGFbZmllbGQgfHwgJyRfeF8nXTsgLy8gb3B0aW9uYWxseSB0cmFuc2Zvcm0gdGhlIHByb3BlcnR5IHZhbHVlXHJcbiAgICAgICAgICAgIGNvbnN0IGJWYWx1ZSA9IGJbZmllbGQgfHwgJyRfeF8nXTsgLy8gd2UgdXNlIGFuIGlkZW50aXR5IGZ1bmN0aW9uIGFzIGRlZmF1bHRcclxuICAgICAgICAgICAgY29uc3QgYXNjTW9kaWZpZXIgPSBkaXJlY3Rpb24gPT09IFNvcnREaXJlY3Rpb24uQVNDID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBDb25zdGFudHMuc29ydChhVmFsdWUsIGJWYWx1ZSwgZmllbGQsIGlzTnVtYmVyKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3NvcnQgcmVzPScsIHJlcyAqIGFzY01vZGlmaWVyLCAnb24gZmllbGQnLCBmaWVsZCwgYVZhbHVlLCBiVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzICogYXNjTW9kaWZpZXI7XHJcbiAgICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjb21iaW5lQ29tcGFyaXNvbkZ1bmN0aW9ucyhjb21wYXJlRnVuY3Rpb25zKTtcclxufVxyXG5cclxuY29uc3Qgc2VhcmNoID0gKHsgc2VhcmNoSW5wdXQsIGNvbHVtbnMgfTogVGFibGVTdGF0ZSwgaXRlbXM6IE1ldGFvYmplY3REYXRhTW9kZWxbXSk6IE1ldGFvYmplY3REYXRhTW9kZWxbXSA9PiB7XHJcbiAgICByZXR1cm4gc2VhcmNoRXgoc2VhcmNoSW5wdXQ/LnRleHQsIGNvbHVtbnMsIGl0ZW1zKTtcclxufTtcclxuY29uc3Qgc2VhcmNoRXggPSAoc2VhcmNoVGVybSwgY29sdW1uczogc3RyaW5nW10sIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT4ge1xyXG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9IHNlYXJjaFRlcm0gfHwgJyc7XHJcbiAgICBjb25zdCBrZXlzVG9TZWFyY2hCeSA9IGNvbHVtbnM7XHJcblxyXG4gICAgaWYgKHNlYXJjaFRleHQudHJpbSgpID09PSAnJyB8fCBrZXlzVG9TZWFyY2hCeS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzRm9yU2VhcmNoID0ga2V5c1RvU2VhcmNoQnkubWFwKChrZXkpID0+IENvbnN0YW50cy5nZXROZXN0ZWRWYWx1ZShrZXksIGl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gdmFsdWVzRm9yU2VhcmNoXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlKVxyXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSk6IHN0cmluZyA9PiB2YWx1ZS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAuc29tZSgodmFsdWUpID0+IHZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XHJcbiAgICB9KTtcclxufTtcclxuIl19
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvbW9kZWxzL2dyaWQtZGF0YS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBTUgsYUFBYSxFQUNoQixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sS0FBSyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBRTFDLE1BQU0sT0FBTyxjQUFjO0lBVXZCLFlBQ0ksV0FBOEMsRUFDOUMsWUFBcUMsRUFDckMsZUFBK0MsRUFDL0MsV0FBK0IsRUFDL0IsZUFBb0MsRUFDcEMsZ0JBQXFDO1FBUHpDLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBU3RCLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xHLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJ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RyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ3BDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUUvQixJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDekIsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RixPQUFPLGVBQWU7YUFDakIsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQzFCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3hDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQ29sbGVjdGlvblNvcnQsXHJcbiAgICBUYWJsZVN0YXRlLFxyXG4gICAgR3JpZFNldHRpbmcsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUmVwb3J0Vmlld0NvbHVtbixcclxuICAgIFNvcnREaXJlY3Rpb25cclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCAqIGFzIENvbnN0YW50cyBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEdyaWRNb0RhdGFMaXN0IHtcclxuICAgIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW107XHJcbiAgICByZXN1bHRJdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xyXG4gICAgZ3JpZFNldHRpbmc6IEdyaWRTZXR0aW5nO1xyXG4gICAgdmlzaWJsZUNvbHVtbnM6IFJlcG9ydFZpZXdDb2x1bW5bXTtcclxuICAgIHNlYXJjaFRlcm06IHN0cmluZztcclxuICAgIGRhdGEkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT47XHJcbiAgICBpbmxpbmVFZGl0TW9kZTogYm9vbGVhbjtcclxuICAgIGFsbG93SW5saW5lRWRpdDogYm9vbGVhbjtcclxuICAgIHN1YnNjcmlwdGlvbnM6IGFueVtdID0gW107XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBtb0RhdGFMaXN0JDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+LFxyXG4gICAgICAgIGdyaWRTZXR0aW5nJDogT2JzZXJ2YWJsZTxHcmlkU2V0dGluZz4sXHJcbiAgICAgICAgdmlzaWJsZUNvbHVtbnMkOiBPYnNlcnZhYmxlPFJlcG9ydFZpZXdDb2x1bW5bXT4sXHJcbiAgICAgICAgc2VhcmNoVGVybSQ6IE9ic2VydmFibGU8c3RyaW5nPixcclxuICAgICAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4sXHJcbiAgICAgICAgYWxsb3dJbmxpbmVFZGl0JDogT2JzZXJ2YWJsZTxib29sZWFuPlxyXG4gICAgKSB7XHJcbiAgICAgICAgdmlzaWJsZUNvbHVtbnMkLnBpcGUodGFwKCh2aXNpYmxlQ29sdW1ucykgPT4gKHRoaXMudmlzaWJsZUNvbHVtbnMgPSB2aXNpYmxlQ29sdW1ucykpKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICBpbmxpbmVFZGl0TW9kZSQucGlwZSh0YXAoKGlubGluZUVkaXRNb2RlKSA9PiAodGhpcy5pbmxpbmVFZGl0TW9kZSA9IGlubGluZUVkaXRNb2RlKSkpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGFsbG93SW5saW5lRWRpdCQucGlwZSh0YXAoKGFsbG93SW5saW5lRWRpdCkgPT4gKHRoaXMuYWxsb3dJbmxpbmVFZGl0ID0gYWxsb3dJbmxpbmVFZGl0KSkpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgKHRoaXMuZGF0YSQgPSBjb21iaW5lTGF0ZXN0KFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIG1vRGF0YUxpc3QkLnBpcGUodGFwKChpdGVtcykgPT4gKHRoaXMuaXRlbXMgPSBpdGVtcykpKSxcclxuICAgICAgICAgICAgICAgICAgICBncmlkU2V0dGluZyQucGlwZSh0YXAoKGdyaWRTZXR0aW5nKSA9PiAodGhpcy5ncmlkU2V0dGluZyA9IGdyaWRTZXR0aW5nKSkpXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAvLyBzZWFyY2hUZXJtJC5waXBlKHRhcCgoc2VhcmNoVGVybSkgPT4gKHRoaXMuc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0pKSksXHJcbiAgICAgICAgICAgICkucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuaXRlbXMpLFxyXG4gICAgICAgICAgICAgICAgbWFwKChbaXRlbXMsIGdyaWRTZXR0aW5nXSkgPT5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWFyY2hFeChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLm1hcCgoYykgPT4gYy5OYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLml0ZW1zXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkU2V0dGluZz8uU29ydFNldHRpbmdMaXN0ICYmICghdGhpcy5pbmxpbmVFZGl0TW9kZSB8fCAhdGhpcy5hbGxvd0lubGluZUVkaXQgfHwgIXRoaXMuaXRlbXMuZmluZChjPT5jLiRJc0NoZWNrZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuaXRlbXMuc2xpY2UoKS5zb3J0KG11bHRpbGV2ZWxTb3J0KHRoaXMuZ2V0U29ydGJ5KCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaXRlbXNcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC8vIG1hcCgoaXRlbXMpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS4kVmlzaWJpbGl0eSA9IHRydWUpKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAvLyB9KSxcclxuICAgICAgICAgICAgICAgIC8vIHRhcCgoaXRlbXMpID0+ICh0aGlzLnJlc3VsdEl0ZW1zID0gaXRlbXMpKVxyXG4gICAgICAgICAgICAgICAgLy8gdGFwKChpdGVtcykgPT4gY29uc29sZS5sb2coaXRlbXMpKVxyXG4gICAgICAgICAgICApKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChjKSA9PiBjLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG4gICAgZ2V0U29ydGJ5KCk6IENvbGxlY3Rpb25Tb3J0W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdyaWRTZXR0aW5nLlNvcnRTZXR0aW5nTGlzdC5tYXAoKGMpID0+ICh7XHJcbiAgICAgICAgICAgIGZpZWxkOiBjLk5hbWUsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5nZXRTb3J0RGlyZWN0aW9uKGMuU29ydERpcmVjdGlvbiksXHJcbiAgICAgICAgICAgIGlzTnVtYmVyOiB0aGlzLnZpc2libGVDb2x1bW5zPy5maW5kKChkKSA9PiBkLk5hbWUgPT09IGMuTmFtZSk/LkZpZWxkVHlwZUlkID09PSAwXHJcbiAgICAgICAgfSkpLmNvbmNhdCh7IGZpZWxkOiAnJE5ld0lubGluZU1vJywgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uLkRFU0MsIGlzTnVtYmVyOiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGdldFNvcnREaXJlY3Rpb24oZGlyZWN0aW9uKTogU29ydERpcmVjdGlvbiB7XHJcbiAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcclxuICAgICAgICAgICAgY2FzZSAnQVNDJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBTb3J0RGlyZWN0aW9uLkFTQztcclxuICAgICAgICAgICAgY2FzZSAnREVTQyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5ERVNDO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU29ydERpcmVjdGlvbi5OT05FO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZERhdGFQcm92aWRlciB7XHJcbiAgICBpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdID0gW107XHJcbiAgICBtb0RhdGFMaXN0JDogT2JzZXJ2YWJsZTxNZXRhb2JqZWN0RGF0YU1vZGVsW10+O1xyXG4gICAgdG90YWxJdGVtcyA9IDA7XHJcbiAgICBsYXN0U3RhdGU6IFRhYmxlU3RhdGU7XHJcbiAgICBjb25zdHJ1Y3Rvcihtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gbW9EYXRhTGlzdDtcclxuICAgIH1cclxuICAgIGZldGNoKHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT4ge1xyXG4gICAgICAgIHRoaXMubGFzdFN0YXRlID0gdGFibGVTdGF0ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb0RhdGFMaXN0KHRhYmxlU3RhdGUpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBnZXRNb0RhdGFMaXN0KHRhYmxlU3RhdGU6IFRhYmxlU3RhdGUpOiBPYnNlcnZhYmxlPGFueVtdPiB7XHJcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuaXRlbXMpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+ICh0YWJsZVN0YXRlLnNlYXJjaElucHV0ID8gc2VhcmNoKHRhYmxlU3RhdGUsIGl0ZW1zKSA6IGl0ZW1zKSksXHJcbiAgICAgICAgICAgIG1hcCgoaXRlbXMpID0+ICh0YWJsZVN0YXRlLnNvcnRCeSA/IHNvcnQodGFibGVTdGF0ZSwgaXRlbXMpIDogaXRlbXMpKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgc29ydCA9ICh7IHNvcnRCeSB9OiBUYWJsZVN0YXRlLCBtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT5cclxuICAgIHNvcnRFeChzb3J0QnksIG1vRGF0YUxpc3QpO1xyXG5cclxuY29uc3Qgc29ydEV4ID0gKFxyXG4gICAgc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmcgfCBudWxsOyBkaXJlY3Rpb246IHN0cmluZzsgaXNOdW1iZXI/OiBib29sZWFuIH1bXSxcclxuICAgIG1vRGF0YUxpc3Q6IE1ldGFvYmplY3REYXRhTW9kZWxbXVxyXG4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSBtb0RhdGFMaXN0LnNsaWNlKCk7XHJcblxyXG4gICAgY29uc3QgbmV3U29ydEJ5ID0gc29ydEJ5LmZpbHRlcigoeyBmaWVsZCB9KSA9PiAhIWZpZWxkKTtcclxuXHJcbiAgICBpZiAobmV3U29ydEJ5Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbXMuc29ydChcclxuICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgKi9cclxuICAgICAgICAgICAgbmV3U29ydEJ5XHJcbiAgICAgICAgICAgICAgICAubWFwKCh7IGZpZWxkLCBkaXJlY3Rpb24sIGlzTnVtYmVyIH0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc2NNb2RpZmllciA9IGRpcmVjdGlvbiA9PT0gU29ydERpcmVjdGlvbi5BU0MgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnN0YW50cy5zb3J0KGEsIGIsIGZpZWxkLCBpc051bWJlcikgKiBhc2NNb2RpZmllcjtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuZmluZCgocmVzdWx0LCBpbmRleCwgbGlzdCkgPT4gcmVzdWx0ICE9PSAwIHx8IGluZGV4ID09PSBsaXN0Lmxlbmd0aCAtIDEpIVxyXG4gICAgKTtcclxufTtcclxuZnVuY3Rpb24gY29tYmluZUNvbXBhcmlzb25GdW5jdGlvbnMoY29tcGFyZUZ1bmN0aW9ucykge1xyXG4gICAgcmV0dXJuIChhLCBiKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVGdW5jdGlvbnMucmVkdWNlKChyZXN1bHQsIGNvbXBhcmVGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAvLyBQcm9jZWVkcyB0byB0aGUgbmV4dCBjb21wYXJpc29uIGZ1bmN0aW9uIGlmIHRoZSBwcmV2aW91cyBvbmUgcmV0dXJuZWQgMFxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYmVmb3JlICcsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXh0IGEgLGIgJywgYSwgYik7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgfHwgY29tcGFyZUZ1bmN0aW9uKGEsIGIpO1xyXG4gICAgICAgIH0sIDApO1xyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiBtdWx0aWxldmVsU29ydChjcml0ZXJpYTogQ29sbGVjdGlvblNvcnRbXSkge1xyXG4gICAgY29uc3QgY29tcGFyZUZ1bmN0aW9ucyA9IGNyaXRlcmlhLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgZmllbGQsIGRpcmVjdGlvbiwgaXNOdW1iZXIgfSA9IHg7XHJcblxyXG4gICAgICAgIHJldHVybiAoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhVmFsdWUgPSBhW2ZpZWxkIHx8ICckX3hfJ107IC8vIG9wdGlvbmFsbHkgdHJhbnNmb3JtIHRoZSBwcm9wZXJ0eSB2YWx1ZVxyXG4gICAgICAgICAgICBjb25zdCBiVmFsdWUgPSBiW2ZpZWxkIHx8ICckX3hfJ107IC8vIHdlIHVzZSBhbiBpZGVudGl0eSBmdW5jdGlvbiBhcyBkZWZhdWx0XHJcbiAgICAgICAgICAgIGNvbnN0IGFzY01vZGlmaWVyID0gZGlyZWN0aW9uID09PSBTb3J0RGlyZWN0aW9uLkFTQyA/IDEgOiAtMTtcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gQ29uc3RhbnRzLnNvcnQoYVZhbHVlLCBiVmFsdWUsIGZpZWxkLCBpc051bWJlcik7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdzb3J0IHJlcz0nLCByZXMgKiBhc2NNb2RpZmllciwgJ29uIGZpZWxkJywgZmllbGQsIGFWYWx1ZSwgYlZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlcyAqIGFzY01vZGlmaWVyO1xyXG4gICAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gY29tYmluZUNvbXBhcmlzb25GdW5jdGlvbnMoY29tcGFyZUZ1bmN0aW9ucyk7XHJcbn1cclxuXHJcbmNvbnN0IHNlYXJjaCA9ICh7IHNlYXJjaElucHV0LCBjb2x1bW5zIH06IFRhYmxlU3RhdGUsIGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gPT4ge1xyXG4gICAgcmV0dXJuIHNlYXJjaEV4KHNlYXJjaElucHV0Py50ZXh0LCBjb2x1bW5zLCBpdGVtcyk7XHJcbn07XHJcbmNvbnN0IHNlYXJjaEV4ID0gKHNlYXJjaFRlcm0sIGNvbHVtbnM6IHN0cmluZ1tdLCBpdGVtczogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogTWV0YW9iamVjdERhdGFNb2RlbFtdID0+IHtcclxuICAgIGNvbnN0IHNlYXJjaFRleHQgPSBzZWFyY2hUZXJtIHx8ICcnO1xyXG4gICAgY29uc3Qga2V5c1RvU2VhcmNoQnkgPSBjb2x1bW5zO1xyXG5cclxuICAgIGlmIChzZWFyY2hUZXh0LnRyaW0oKSA9PT0gJycgfHwga2V5c1RvU2VhcmNoQnkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlc0ZvclNlYXJjaCA9IGtleXNUb1NlYXJjaEJ5Lm1hcCgoa2V5KSA9PiBDb25zdGFudHMuZ2V0TmVzdGVkVmFsdWUoa2V5LCBpdGVtKSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc0ZvclNlYXJjaFxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gISF2YWx1ZSlcclxuICAgICAgICAgICAgLm1hcCgodmFsdWUpOiBzdHJpbmcgPT4gdmFsdWUudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xyXG4gICAgfSk7XHJcbn07XHJcbiJdfQ==
|