@bizdoc/core 1.16.9 → 1.16.10
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/assets/system/{Microsoft_Azure.svg → Azure.svg} +0 -0
- package/assets/system/QAD.svg +12 -358
- package/assets/system/priority.svg +19 -0
- package/esm2020/lib/admin/configuration-designer/cube-axes-filter.component.mjs +2 -2
- package/esm2020/lib/admin/configuration-designer/declarations.mjs +108 -0
- package/esm2020/lib/admin/configuration-designer/designer-element.component.mjs +120 -223
- package/esm2020/lib/admin/configuration-designer/designer.base.mjs +23 -82
- package/esm2020/lib/admin/configuration-designer/designer.component.mjs +5 -3
- package/esm2020/lib/admin/configuration-designer/elements/action.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/analysis-view.component.mjs +13 -12
- package/esm2020/lib/admin/configuration-designer/elements/analysis-widget.component.mjs +13 -12
- package/esm2020/lib/admin/configuration-designer/elements/cube.component.mjs +89 -75
- package/esm2020/lib/admin/configuration-designer/elements/documents-widget.component.mjs +4 -3
- package/esm2020/lib/admin/configuration-designer/elements/folder.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/form.component.mjs +6 -5
- package/esm2020/lib/admin/configuration-designer/elements/guide.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/report.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/return-to-role-action.component.mjs +1 -1
- package/esm2020/lib/admin/configuration-designer/elements/role.component.mjs +6 -12
- package/esm2020/lib/admin/configuration-designer/elements/rule.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/state.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/tasks-report.component.mjs +1 -1
- package/esm2020/lib/admin/configuration-designer/elements/type.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/utility.component.mjs +5 -11
- package/esm2020/lib/admin/configuration-designer/elements/view.component.mjs +3 -3
- package/esm2020/lib/admin/configuration-designer/elements/widget.component.mjs +3 -3
- package/esm2020/lib/core/translations.mjs +10 -4
- package/esm2020/lib/system.module.mjs +6 -6
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/bizdoc-core.mjs +468 -521
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +463 -508
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/admin/configuration-designer/cube-axes-filter.component.d.ts +1 -1
- package/lib/admin/configuration-designer/declarations.d.ts +203 -0
- package/lib/admin/configuration-designer/designer-element.component.d.ts +45 -65
- package/lib/admin/configuration-designer/designer.base.d.ts +5 -197
- package/lib/admin/configuration-designer/designer.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/analysis-view.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/analysis-widget.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/cube.component.d.ts +30 -26
- package/lib/admin/configuration-designer/elements/documents-widget.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/folder.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/form.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/report.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/return-to-role-action.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/role.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/rule.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/tasks-report.component.d.ts +2 -1
- package/lib/admin/configuration-designer/elements/view.component.d.ts +1 -1
- package/lib/admin/configuration-designer/elements/widget.component.d.ts +3 -2
- package/lib/core/translations.d.ts +9 -3
- package/lib/system.module.d.ts +16 -16
- package/package.json +1 -1
- package/public-api.d.ts +2 -2
@@ -1,136 +1,117 @@
|
|
1
|
-
import { Component, ContentChild,
|
1
|
+
import { Component, ContentChild, Directive, EventEmitter, Inject, Input, Optional, Output } from "@angular/core";
|
2
2
|
import { FormGroup, Validators } from "@angular/forms";
|
3
3
|
import { Subject, takeUntil } from "rxjs";
|
4
|
+
import { DesignerRef, programName, FAMILY_SVG } from "./declarations";
|
4
5
|
import { LayoutComponent } from "../../core/layout/layout.component";
|
5
|
-
import {
|
6
|
+
import { ComponentPortal } from "@angular/cdk/portal";
|
6
7
|
import * as i0 from "@angular/core";
|
7
|
-
import * as i1 from "../../core/
|
8
|
-
import * as i2 from "@angular/
|
9
|
-
import * as i3 from "../../core/
|
10
|
-
import * as i4 from "
|
11
|
-
import * as i5 from "@angular/
|
12
|
-
import * as i6 from "@angular/
|
13
|
-
import * as i7 from "@angular/
|
14
|
-
import * as i8 from "
|
15
|
-
import * as i9 from "@angular/material/
|
16
|
-
import * as i10 from "@angular/material/
|
17
|
-
import * as i11 from "@angular/material/
|
18
|
-
import * as i12 from "@angular/material/
|
8
|
+
import * as i1 from "../../core/slots/pane-ref";
|
9
|
+
import * as i2 from "@angular/forms";
|
10
|
+
import * as i3 from "../../core/component-factory-resolver";
|
11
|
+
import * as i4 from "../system.service";
|
12
|
+
import * as i5 from "@angular/common";
|
13
|
+
import * as i6 from "@angular/cdk/portal";
|
14
|
+
import * as i7 from "@angular/material/list";
|
15
|
+
import * as i8 from "@angular/material/toolbar";
|
16
|
+
import * as i9 from "@angular/material/form-field";
|
17
|
+
import * as i10 from "@angular/material/button";
|
18
|
+
import * as i11 from "@angular/material/input";
|
19
|
+
import * as i12 from "@angular/material/icon";
|
19
20
|
import * as i13 from "../core/ace.input";
|
20
|
-
import * as i14 from "../../core/pipes/
|
21
|
-
import * as i15 from "../../core/
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
this.
|
26
|
-
this.svg = FAMILY_SVG;
|
27
|
-
this.model = _ref.model;
|
28
|
-
}
|
29
|
-
ngOnInit() {
|
30
|
-
if (this.model.template) {
|
31
|
-
const factory = this._cfr.resolve(this.model.template);
|
32
|
-
const cRef = this._econtainer.createComponent(factory, 0);
|
33
|
-
cRef.instance.model = this.model;
|
34
|
-
cRef.instance.mode = 'widget';
|
35
|
-
}
|
36
|
-
else if (this.model.arguments?.length) {
|
37
|
-
}
|
21
|
+
import * as i14 from "../../core/pipes/sanitize-html.pipe";
|
22
|
+
import * as i15 from "../../core/pipes/translate.pipe";
|
23
|
+
import * as i16 from "./declarations";
|
24
|
+
export class EditContentDirective {
|
25
|
+
constructor(templateRef) {
|
26
|
+
this.templateRef = templateRef;
|
38
27
|
}
|
39
28
|
}
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
<ng-container #econtainer></ng-container>
|
45
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SanitizeHtmlPipe, name: "sanitizeHtml" }] });
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementInfoComponent, decorators: [{
|
47
|
-
type: Component,
|
29
|
+
EditContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EditContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
30
|
+
EditContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: EditContentDirective, selector: "[bizdocEditContent]", ngImport: i0 });
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: EditContentDirective, decorators: [{
|
32
|
+
type: Directive,
|
48
33
|
args: [{
|
49
|
-
selector: '
|
50
|
-
<div [innerHTML]="(svg[model.family]|sanitizeHtml)||model.family" *ngIf="model.family"></div>
|
51
|
-
<ng-content></ng-content>
|
52
|
-
<ng-container #econtainer></ng-container>
|
53
|
-
`
|
34
|
+
selector: '[bizdocEditContent]'
|
54
35
|
}]
|
55
|
-
}], ctorParameters: function () { return [{ type:
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
type: ViewChild,
|
60
|
-
args: ['econtainer', { static: true, read: ViewContainerRef }]
|
61
|
-
}], _arguments: [{
|
62
|
-
type: ViewChild,
|
63
|
-
args: ['arguments', { static: true, read: ViewContainerRef }]
|
64
|
-
}] } });
|
65
|
-
export class DesignerElementAddComponent {
|
66
|
-
constructor(_ref, _injector, _cfr) {
|
67
|
-
this._ref = _ref;
|
68
|
-
this._injector = _injector;
|
69
|
-
this._cfr = _cfr;
|
70
|
-
this.form = new FormGroup({});
|
71
|
-
this.complete = new EventEmitter();
|
36
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
37
|
+
export class WidgetContentDirective {
|
38
|
+
constructor(templateRef) {
|
39
|
+
this.templateRef = templateRef;
|
72
40
|
}
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
}
|
41
|
+
}
|
42
|
+
WidgetContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
43
|
+
WidgetContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: WidgetContentDirective, selector: "[bizdocContent]", ngImport: i0 });
|
44
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetContentDirective, decorators: [{
|
45
|
+
type: Directive,
|
46
|
+
args: [{
|
47
|
+
selector: '[bizdocContent]'
|
48
|
+
}]
|
49
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
50
|
+
export class AddContentDirective {
|
51
|
+
constructor(templateRef) {
|
52
|
+
this.templateRef = templateRef;
|
82
53
|
}
|
83
54
|
}
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
<div class="row">
|
89
|
-
<span class="divider"></span>
|
90
|
-
<button mat-icon-button [disabled]="!form.valid" (click)="complete.emit()"><mat-icon>play_circle_outline</mat-icon></button>
|
91
|
-
</div>`, isInline: true, dependencies: [{ kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
92
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerElementAddComponent, decorators: [{
|
93
|
-
type: Component,
|
55
|
+
AddContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddContentDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
56
|
+
AddContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.6", type: AddContentDirective, selector: "[bizdocAddContent]", ngImport: i0 });
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AddContentDirective, decorators: [{
|
58
|
+
type: Directive,
|
94
59
|
args: [{
|
95
|
-
selector: '
|
96
|
-
template: `
|
97
|
-
<ng-content></ng-content>
|
98
|
-
<ng-container #econtainer></ng-container>
|
99
|
-
<div class="row">
|
100
|
-
<span class="divider"></span>
|
101
|
-
<button mat-icon-button [disabled]="!form.valid" (click)="complete.emit()"><mat-icon>play_circle_outline</mat-icon></button>
|
102
|
-
</div>`
|
60
|
+
selector: '[bizdocAddContent]'
|
103
61
|
}]
|
104
|
-
}], ctorParameters: function () { return [{ type:
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
}], complete: [{
|
110
|
-
type: Output
|
111
|
-
}], _econtainer: [{
|
112
|
-
type: ViewChild,
|
113
|
-
args: ['econtainer', { static: true, read: ViewContainerRef }]
|
114
|
-
}] } });
|
115
|
-
export class DesignerElementPhaseComponent {
|
116
|
-
constructor(_ref, _fb, _injector, _cfr, _componentFactoryResolver, _service, _element) {
|
62
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
63
|
+
/**
|
64
|
+
*/
|
65
|
+
export class DesignerItemComponent {
|
66
|
+
constructor(_ref, _element, _pane, _fb, _cfr, _service) {
|
117
67
|
this._ref = _ref;
|
68
|
+
this._element = _element;
|
69
|
+
this._pane = _pane;
|
118
70
|
this._fb = _fb;
|
119
|
-
this._injector = _injector;
|
120
71
|
this._cfr = _cfr;
|
121
|
-
this._componentFactoryResolver = _componentFactoryResolver;
|
122
72
|
this._service = _service;
|
123
|
-
this.
|
73
|
+
this.svg = FAMILY_SVG;
|
74
|
+
this.form = new FormGroup({});
|
75
|
+
//@Input() state: string;
|
76
|
+
this.onContinue = new EventEmitter();
|
124
77
|
this.onSave = new EventEmitter();
|
125
78
|
this._destroy = new Subject();
|
126
|
-
this.model = _ref.model;
|
127
79
|
this.mode = _ref.mode;
|
80
|
+
this.model = _ref.model;
|
81
|
+
}
|
82
|
+
attached(componentRef) {
|
83
|
+
const { instance } = componentRef;
|
84
|
+
if (this.model.template) {
|
85
|
+
this._options = instance;
|
86
|
+
instance.model = this.model;
|
87
|
+
if (this.mode === 'add' && !this._options.onContinue) {
|
88
|
+
this.mode = 'edit';
|
89
|
+
this.form.markAsDirty();
|
90
|
+
this.onContinue.emit();
|
91
|
+
}
|
92
|
+
this._options.mode = this.mode;
|
93
|
+
}
|
94
|
+
else {
|
95
|
+
instance.fields = this.model.arguments;
|
96
|
+
instance.formulate();
|
97
|
+
}
|
98
|
+
this.mode !== 'widget' &&
|
99
|
+
this.form.addControl('options', instance.form, { emitEvent: false });
|
128
100
|
}
|
129
101
|
ngOnInit() {
|
130
|
-
if (this.
|
131
|
-
|
132
|
-
|
133
|
-
|
102
|
+
if (this.model.template) {
|
103
|
+
const comp = this._cfr.component(this.model.template);
|
104
|
+
this.options = new ComponentPortal(comp);
|
105
|
+
}
|
106
|
+
else if (this.mode !== 'widget' && this.model.arguments?.length)
|
107
|
+
this.options = new ComponentPortal(LayoutComponent);
|
108
|
+
switch (this.mode) {
|
109
|
+
case 'add':
|
110
|
+
case 'edit':
|
111
|
+
this._addForm();
|
112
|
+
}
|
113
|
+
}
|
114
|
+
_addForm() {
|
134
115
|
const name = this._fb.control(null, Validators.required), title = this._fb.control(null, Validators.required);
|
135
116
|
this.model.resource && title.disable();
|
136
117
|
if (this.model.draft)
|
@@ -154,46 +135,32 @@ export class DesignerElementPhaseComponent {
|
|
154
135
|
})));
|
155
136
|
});
|
156
137
|
}
|
157
|
-
if (this.model.template) {
|
158
|
-
const factory = this._cfr.resolve(this.model.template);
|
159
|
-
const cRef = this._econtainer.createComponent(factory, 0, this._injector);
|
160
|
-
const instance = cRef.instance;
|
161
|
-
instance.model = this.model;
|
162
|
-
instance.mode = this._ref.mode;
|
163
|
-
this.form.addControl('options', instance.form, { emitEvent: false });
|
164
|
-
}
|
165
|
-
else if (this.model.arguments?.length) {
|
166
|
-
const factory = this._componentFactoryResolver.resolveComponentFactory(LayoutComponent);
|
167
|
-
const cRef = this._arguments.createComponent(factory);
|
168
|
-
const instance = cRef.instance;
|
169
|
-
instance.fields = this.model.arguments;
|
170
|
-
instance.formulate();
|
171
|
-
this.form.addControl('options', instance.form, { emitEvent: false });
|
172
|
-
}
|
173
|
-
this.form.patchValue(this.model, { emitEvent: false });
|
174
138
|
this.form.statusChanges.pipe(takeUntil(this._destroy)).subscribe(s => {
|
175
|
-
this.valid = s === 'VALID';
|
176
|
-
this.dirty = true;
|
177
139
|
});
|
178
|
-
this.
|
179
|
-
}
|
180
|
-
refresh() {
|
181
|
-
this.mode = 'edit';
|
182
|
-
this.form.patchValue(this.model);
|
140
|
+
this.form.patchValue(this.model, { emitEvent: !this.model.draft });
|
183
141
|
}
|
184
142
|
ngAfterViewInit() {
|
185
|
-
|
143
|
+
if (this.mode !== 'widget') {
|
144
|
+
setTimeout(() => this._element.nativeElement.querySelector('input')?.focus());
|
145
|
+
}
|
186
146
|
}
|
187
147
|
unlock(evt) {
|
188
148
|
if (evt.srcElement.tagName !== 'A')
|
189
149
|
return;
|
190
150
|
this.model.resource = null;
|
191
151
|
this.form.get('title').enable();
|
192
|
-
this._ref.
|
152
|
+
this._ref._unlock$.next(false);
|
153
|
+
}
|
154
|
+
continue() {
|
155
|
+
this._ref._state$.next(null);
|
156
|
+
this._options.onContinue && this._options.onContinue();
|
157
|
+
this.onContinue.emit();
|
158
|
+
this.mode = 'edit';
|
193
159
|
}
|
194
160
|
save() {
|
195
161
|
Object.assign(this.model, this.form.value);
|
196
162
|
this.onSave.emit(this.model);
|
163
|
+
this._pane.close();
|
197
164
|
}
|
198
165
|
/**
|
199
166
|
* Ctrl-s save
|
@@ -201,7 +168,7 @@ export class DesignerElementPhaseComponent {
|
|
201
168
|
*/
|
202
169
|
handleKeyboardEvent(event) {
|
203
170
|
if (event.ctrlKey && (event.which === 83 || event.which === 115)) {
|
204
|
-
this.valid && this.save();
|
171
|
+
this.form.valid && this.save();
|
205
172
|
event.preventDefault();
|
206
173
|
}
|
207
174
|
}
|
@@ -210,99 +177,29 @@ export class DesignerElementPhaseComponent {
|
|
210
177
|
this._destroy?.complete();
|
211
178
|
}
|
212
179
|
}
|
213
|
-
|
214
|
-
|
215
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type:
|
180
|
+
DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, deps: [{ token: DesignerRef }, { token: i0.ElementRef }, { token: i1.PaneRef, optional: true }, { token: i2.FormBuilder }, { token: i3.BizDocComponentFactoryResolver }, { token: i4.SystemService }], target: i0.ɵɵFactoryTarget.Component });
|
181
|
+
DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { form: "form" }, outputs: { onContinue: "continue", onSave: "save" }, queries: [{ propertyName: "editContent", first: true, predicate: EditContentDirective, descendants: true }, { propertyName: "widgetContent", first: true, predicate: WidgetContentDirective, descendants: true }], ngImport: i0, template: "<ng-conatiner [ngSwitch]=\"mode\">\r\n <ng-container *ngSwitchCase=\"'add'\">\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"!form.valid\" (click)=\"continue()\">{{'Continue'|translate}} <mat-icon>double_arrow</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'edit'\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.valid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\"\r\n (document:keydown)=\"handleKeyboardEvent($event)\">\r\n <!--<ng-container #econtainer></ng-container>-->\r\n <div class=\"row\" *ngIf=\"form.contains('name')\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n \r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </div>\r\n\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n\r\n <ng-container *ngIf=\"form.contains('privileges')\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n </form>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n <ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n </ng-container>\r\n</ng-conatiner>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}.actions{margin:8px}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i6.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: i7.MatSelectionList, selector: "mat-selection-list", inputs: ["disableRipple", "color", "compareWith", "disabled", "multiple"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i7.MatListOption, selector: "mat-list-option", inputs: ["disableRipple", "checkboxPosition", "color", "value", "disabled", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i13.AceInput, selector: "bizdoc-ace-input", inputs: ["params", "placeholder", "required", "disabled", "value"] }, { kind: "pipe", type: i14.SanitizeHtmlPipe, name: "sanitizeHtml" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }] });
|
182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, decorators: [{
|
216
183
|
type: Component,
|
217
|
-
args: [{ selector: 'bizdoc-designer-element
|
218
|
-
}], ctorParameters: function () { return [{ type:
|
184
|
+
args: [{ selector: 'bizdoc-designer-element', template: "<ng-conatiner [ngSwitch]=\"mode\">\r\n <ng-container *ngSwitchCase=\"'add'\">\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n <div class=\"row actions\">\r\n <span class=\"divider\"></span>\r\n <button mat-stroked-button [disabled]=\"!form.valid\" (click)=\"continue()\">{{'Continue'|translate}} <mat-icon>double_arrow</mat-icon></button>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'edit'\">\r\n <mat-toolbar>\r\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.valid || !form.dirty\"><mat-icon>save</mat-icon></button>\r\n </mat-toolbar>\r\n <p class=\"help\">{{model.help}}</p>\r\n <form autocomplete=\"off\" [formGroup]=\"form\" class=\"column\"\r\n (document:keydown)=\"handleKeyboardEvent($event)\">\r\n <!--<ng-container #econtainer></ng-container>-->\r\n <div class=\"row\" *ngIf=\"form.contains('name')\">\r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Title'|translate}}</mat-label>\r\n <input matInput formControlName=\"title\" required #title />\r\n </mat-form-field>\r\n \r\n <mat-form-field class=\"flex\">\r\n <mat-label>{{'Name'|translate}}</mat-label>\r\n <input matInput formControlName=\"name\" required />\r\n </mat-form-field>\r\n </div>\r\n\r\n <p *ngIf=\"model.resource\" class=\"message\" (click)=\"unlock($event)\" [innerHTML]=\"'Unlock'|translate\"></p>\r\n\r\n <ng-container [ngTemplateOutlet]=\"editContent?.templateRef\"></ng-container>\r\n\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n\r\n <ng-container *ngIf=\"form.contains('privileges')\" formGroupName=\"privileges\">\r\n <h2 class=\"mat-title\">{{'Privileges'|translate}}</h2>\r\n <mat-selection-list formControlName=\"roles\" *ngIf=\"roles\">\r\n <mat-list-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-list-option>\r\n </mat-selection-list>\r\n <mat-form-field>\r\n <bizdoc-ace-input [placeholder]=\"'Condition'|translate\" formControlName=\"rule\"></bizdoc-ace-input>\r\n <mat-hint> {{ 'ProgrammableExpression'|translate }}</mat-hint>\r\n </mat-form-field>\r\n </ng-container>\r\n </form>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <div [innerHTML]=\"(svg[model.family]|sanitizeHtml)||model.family\" *ngIf=\"model.family\"></div>\r\n <ng-container [ngTemplateOutlet]=\"widgetContent?.templateRef\"></ng-container>\r\n <ng-container *ngIf=\"options\" (attached)=\"attached($event)\" [cdkPortalOutlet]=\"options\"></ng-container>\r\n </ng-container>\r\n</ng-conatiner>\r\n", styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}.actions{margin:8px}\n"] }]
|
185
|
+
}], ctorParameters: function () { return [{ type: i16.DesignerRef, decorators: [{
|
219
186
|
type: Inject,
|
220
187
|
args: [DesignerRef]
|
221
|
-
}] }, { type:
|
222
|
-
|
223
|
-
|
188
|
+
}] }, { type: i0.ElementRef }, { type: i1.PaneRef, decorators: [{
|
189
|
+
type: Optional
|
190
|
+
}] }, { type: i2.FormBuilder }, { type: i3.BizDocComponentFactoryResolver }, { type: i4.SystemService }]; }, propDecorators: { form: [{
|
224
191
|
type: Input
|
192
|
+
}], onContinue: [{
|
193
|
+
type: Output,
|
194
|
+
args: ['continue']
|
225
195
|
}], onSave: [{
|
226
196
|
type: Output,
|
227
197
|
args: ['save']
|
228
|
-
}],
|
229
|
-
type: ViewChild,
|
230
|
-
args: ['econtainer', { static: true, read: ViewContainerRef }]
|
231
|
-
}], _arguments: [{
|
232
|
-
type: ViewChild,
|
233
|
-
args: ['arguments', { static: true, read: ViewContainerRef }]
|
234
|
-
}], handleKeyboardEvent: [{
|
235
|
-
type: HostListener,
|
236
|
-
args: ['document:keydown', ['$event']]
|
237
|
-
}] } });
|
238
|
-
/**
|
239
|
-
*/
|
240
|
-
export class DesignerItemComponent {
|
241
|
-
constructor(_ref, _pane) {
|
242
|
-
this._ref = _ref;
|
243
|
-
this._pane = _pane;
|
244
|
-
this.save = new EventEmitter();
|
245
|
-
this.mode = _ref.mode;
|
246
|
-
this.model = _ref.model;
|
247
|
-
}
|
248
|
-
ngOnChanges() {
|
249
|
-
//if (this.state) this.phase = this.phases?.find(p => p.state === this.state);
|
250
|
-
//else this.phase = this.phases?.first;
|
251
|
-
}
|
252
|
-
ngAfterContentInit() {
|
253
|
-
if (this.mode !== 'widget') {
|
254
|
-
this.phases?.forEach(p => p.onSave.subscribe(e => {
|
255
|
-
this.save.emit(e);
|
256
|
-
this._pane.close();
|
257
|
-
}));
|
258
|
-
this.add?.complete.subscribe(() => {
|
259
|
-
this._ref.mode = this.mode = 'edit';
|
260
|
-
this._ref._state$.next(null);
|
261
|
-
this.phases.first.refresh();
|
262
|
-
});
|
263
|
-
}
|
264
|
-
}
|
265
|
-
}
|
266
|
-
DesignerItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, deps: [{ token: DesignerRef }, { token: i15.PaneRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
267
|
-
DesignerItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DesignerItemComponent, selector: "bizdoc-designer-element", inputs: { state: "state" }, outputs: { save: "save" }, queries: [{ propertyName: "info", first: true, predicate: DesignerElementInfoComponent, descendants: true }, { propertyName: "add", first: true, predicate: DesignerElementAddComponent, descendants: true }, { propertyName: "phases", predicate: DesignerElementPhaseComponent }], usesOnChanges: true, ngImport: i0, template: `
|
268
|
-
<ng-content select="bizdoc-designer-element-widget"
|
269
|
-
*ngIf="mode==='widget'; else addedit"></ng-content>
|
270
|
-
<ng-template #addedit>
|
271
|
-
<ng-content select="bizdoc-designer-element-add"
|
272
|
-
*ngIf="mode === 'add' && add; else edit"></ng-content>
|
273
|
-
</ng-template>
|
274
|
-
<ng-template #edit>
|
275
|
-
<ng-content select="bizdoc-designer-element-edit"></ng-content>
|
276
|
-
</ng-template>`, isInline: true, styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
277
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DesignerItemComponent, decorators: [{
|
278
|
-
type: Component,
|
279
|
-
args: [{ selector: 'bizdoc-designer-element', template: `
|
280
|
-
<ng-content select="bizdoc-designer-element-widget"
|
281
|
-
*ngIf="mode==='widget'; else addedit"></ng-content>
|
282
|
-
<ng-template #addedit>
|
283
|
-
<ng-content select="bizdoc-designer-element-add"
|
284
|
-
*ngIf="mode === 'add' && add; else edit"></ng-content>
|
285
|
-
</ng-template>
|
286
|
-
<ng-template #edit>
|
287
|
-
<ng-content select="bizdoc-designer-element-edit"></ng-content>
|
288
|
-
</ng-template>`, styles: [":host{flex:1}::ng-deep form{padding:8px}::ng-deep .flex{flex:1}p.message{margin:5px}\n"] }]
|
289
|
-
}], ctorParameters: function () { return [{ type: i4.DesignerRef, decorators: [{
|
290
|
-
type: Inject,
|
291
|
-
args: [DesignerRef]
|
292
|
-
}] }, { type: i15.PaneRef, decorators: [{
|
293
|
-
type: Optional
|
294
|
-
}] }]; }, propDecorators: { info: [{
|
198
|
+
}], editContent: [{
|
295
199
|
type: ContentChild,
|
296
|
-
args: [
|
297
|
-
}],
|
200
|
+
args: [EditContentDirective]
|
201
|
+
}], widgetContent: [{
|
298
202
|
type: ContentChild,
|
299
|
-
args: [
|
300
|
-
}], phases: [{
|
301
|
-
type: ContentChildren,
|
302
|
-
args: [DesignerElementPhaseComponent]
|
303
|
-
}], state: [{
|
304
|
-
type: Input
|
305
|
-
}], save: [{
|
306
|
-
type: Output
|
203
|
+
args: [WidgetContentDirective]
|
307
204
|
}] } });
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBNEIsWUFBWSxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQTBCLFNBQVMsRUFBZ0IsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM1IsT0FBTyxFQUFlLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFJckUsT0FBTyxFQUFFLFdBQVcsRUFBZ0IsV0FBVyxFQUFjLFVBQVUsRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRM0gsTUFBTSxPQUFPLDRCQUE0QjtJQUt2QyxZQUNVLElBQW9DLEVBQ2YsSUFBc0I7UUFEM0MsU0FBSSxHQUFKLElBQUksQ0FBZ0M7UUFDZixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQU5yRCxRQUFHLEdBQUcsVUFBVSxDQUFDO1FBUWYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBcUIsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFD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QXFCLGtCQVlqQixXQUFXO3NHQVpmLHFCQUFxQix3SkFDYiw0QkFBNEIsc0VBQzVCLDJCQUEyQiw0REFDeEIsNkJBQTZCLGtEQWZwQzs7Ozs7Ozs7O21CQVNPOzJGQUdYLHFCQUFxQjtrQkFmNUIsU0FBUzsrQkFDRSx5QkFBeUIsWUFFekI7Ozs7Ozs7OzttQkFTTzs7MEJBZWQsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs0Q0FaaUMsSUFBSTtzQkFBL0MsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBQ0MsR0FBRztzQkFBN0MsWUFBWTt1QkFBQywyQkFBMkI7Z0JBQ08sTUFBTTtzQkFBckQsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBQ3JDLEtBQUs7c0JBQWIsS0FBSztnQkFDYSxJQUFJO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvY29tcG9uZW50LWZhY3RvcnktcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUvbGF5b3V0L2xheW91dC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2xvdHMvcGFuZS1yZWZcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gXCIuLi9zeXN0ZW0uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEZXNpZ25lclJlZiwgRWxlbWVudE1vZGVsLCBwcm9ncmFtTmFtZSwgRGVzaWduTW9kZSwgRkFNSUxZX1NWRywgRGVzaWduZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSBcIi4vZGVzaWduZXIuYmFzZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudC13aWRnZXQnLCB0ZW1wbGF0ZTogYFxyXG4gIDxkaXYgW2lubmVySFRNTF09XCIoc3ZnW21vZGVsLmZhbWlseV18c2FuaXRpemVIdG1sKXx8bW9kZWwuZmFtaWx5XCIgKm5nSWY9XCJtb2RlbC5mYW1pbHlcIj48L2Rpdj5cclxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48bmctY29udGFpbmVyICNlY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG5gIH0pXHJcbmV4cG9ydCBjbGFzcyBEZXNpZ25lckVsZW1lbnRJbmZvQ29tcG9uZW50IHtcclxuICBzdmcgPSBGQU1JTFlfU1ZHO1xyXG4gIG1vZGVsOiBFbGVtZW50TW9kZWw8YW55PjtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgQFZpZXdDaGlsZCgnYXJndW1lbnRzJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2FyZ3VtZW50czogVmlld0NvbnRhaW5lclJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NmcjogQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICkge1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCk7XHJcbiAgICAgIGNSZWYuaW5zdGFuY2UubW9kZWwgPSB0aGlzLm1vZGVsO1xyXG4gICAgICBjUmVmLmluc3RhbmNlLm1vZGUgPSAnd2lkZ2V0JztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtYWRkJyxcclxuICB0ZW1wbGF0ZTogYFxyXG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbjxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFtkaXNhYmxlZF09XCIhZm9ybS52YWxpZFwiIChjbGljayk9XCJjb21wbGV0ZS5lbWl0KClcIj48bWF0LWljb24+cGxheV9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+PC9idXR0b24+XHJcbjwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbmVyRWxlbWVudEFkZENvbXBvbmVudCB7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBjb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAVmlld0NoaWxkKCdlY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgX2Vjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KERlc2lnbmVyUmVmKSBwcml2YXRlIF9yZWY6IERlc2lnbmVyUmVmPGFueT4sXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9jZnI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICApIHsgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCh0aGlzLl9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsKS50ZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmUoKHRoaXMuX3JlZi5tb2RlbCBhcyBFbGVtZW50TW9kZWwpLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICAgIGluc3RhbmNlLm1vZGVsID0gdGhpcy5fcmVmLm1vZGVsO1xyXG4gICAgICBpbnN0YW5jZS5tb2RlID0gJ2FkZCc7XHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgaW5zdGFuY2UuZm9ybSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1kZXNpZ25lci1lbGVtZW50LWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERlc2lnbmVyRWxlbWVudFBoYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBzdGF0ZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgQE91dHB1dCgnc2F2ZScpIHJlYWRvbmx5IG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvL0BWaWV3Q2hpbGQoJ1tiaXpkb2NDb250ZW50XScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBUZW1wbGF0ZVJlZiB9KSBfdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZWNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIF9lY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2FyZ3VtZW50cycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIF9hcmd1bWVudHM6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIHJvbGVzOiBSb2xlW107XHJcbiAgdmFsaWQ6IGJvb2xlYW47XHJcbiAgZGlydHk6IGJvb2xlYW47XHJcbiAgICBtb2RlOiBEZXNpZ25Nb2RlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pikge1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gICAgdGhpcy5tb2RlID0gX3JlZi5tb2RlO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICd3aWRnZXQnKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnYWRkJykgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSAmJiB0aXRsZS5kaXNhYmxlKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlbC5kcmFmdCkgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ6IHN0cmluZykgPT5cclxuICAgICAgdCAmJiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKVxyXG4gICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnbmFtZScsIG5hbWUpO1xyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ3RpdGxlJywgdGl0bGUpO1xyXG4gICAgaWYgKHRoaXMubW9kZWwucHJpdmlsZWdlcykge1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgncHJpdmlsZWdlcycsXHJcbiAgICAgICAgdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgcnVsZTogbnVsbCxcclxuICAgICAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihudWxsKSxcclxuICAgICAgICB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLnJvbGVzKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSByLmNvbmNhdCgodGhpcy5fcmVmLmRlc2lnbmVyLnJvbGVzIGFzIEVsZW1lbnRNb2RlbFtdKS5cclxuICAgICAgICAgIGZpbHRlcihyID0+ICFyLmRpc2FibGVkKS5cclxuICAgICAgICAgIG1hcChyID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcclxuICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiByLmRhdGFUeXBlXHJcbiAgICAgICAgICB9KSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGVsLnRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9jZnIucmVzb2x2ZSh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IGNSZWYgPSB0aGlzLl9lY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oZmFjdG9yeSwgMCwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNSZWYuaW5zdGFuY2U7XHJcbiAgICAgIGluc3RhbmNlLm1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgaW5zdGFuY2UubW9kZSA9IHRoaXMuX3JlZi5tb2RlO1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIGluc3RhbmNlLmZvcm0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMYXlvdXRDb21wb25lbnQpO1xyXG4gICAgICBjb25zdCBjUmVmID0gdGhpcy5fYXJndW1lbnRzLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcclxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjUmVmLmluc3RhbmNlO1xyXG4gICAgICBpbnN0YW5jZS5maWVsZHMgPSB0aGlzLm1vZGVsLmFyZ3VtZW50cztcclxuICAgICAgaW5zdGFuY2UuZm9ybXVsYXRlKCk7XHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgaW5zdGFuY2UuZm9ybSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICAgIHRoaXMudmFsaWQgPSBzID09PSAnVkFMSUQnO1xyXG4gICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWxpZCA9IHRoaXMuZm9ybS52YWxpZDtcclxuICB9XHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMubW9kZSA9ICdlZGl0JztcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpKTtcclxuICB9XHJcbiAgdW5sb2NrKGV2dDogRXZlbnQpIHtcclxuICAgIGlmICgoZXZ0LnNyY0VsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWUgIT09ICdBJykgcmV0dXJuO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSA9IG51bGw7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCd0aXRsZScpLmVuYWJsZSgpO1xyXG4gICAgdGhpcy5fcmVmLl9sb2NrJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnZhbGlkICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3k/LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLWVsZW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtd2lkZ2V0XCJcclxuICAgICAgKm5nSWY9XCJtb2RlPT09J3dpZGdldCc7IGVsc2UgYWRkZWRpdFwiPjwvbmctY29udGVudD5cclxuICAgIDxuZy10ZW1wbGF0ZSAjYWRkZWRpdD5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtYWRkXCJcclxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICdhZGQnICYmIGFkZDsgZWxzZSBlZGl0XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAjZWRpdD5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYml6ZG9jLWRlc2lnbmVyLWVsZW1lbnQtZWRpdFwiPjwvbmctY29udGVudD5cclxuICAgIDwvbmctdGVtcGxhdGU+YFxyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQge1xyXG4gIEBDb250ZW50Q2hpbGQoRGVzaWduZXJFbGVtZW50SW5mb0NvbXBvbmVudCkgaW5mbzogRGVzaWduZXJFbGVtZW50SW5mb0NvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkKERlc2lnbmVyRWxlbWVudEFkZENvbXBvbmVudCkgYWRkOiBEZXNpZ25lckVsZW1lbnRBZGRDb21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihEZXNpZ25lckVsZW1lbnRQaGFzZUNvbXBvbmVudCkgcGhhc2VzOiBRdWVyeUxpc3Q8RGVzaWduZXJFbGVtZW50UGhhc2VDb21wb25lbnQ+O1xyXG4gIEBJbnB1dCgpIHN0YXRlOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgbW9kZTogRGVzaWduTW9kZTtcclxuICB2YWxpZDogYm9vbGVhbjtcclxuICBkaXJ0eTogYm9vbGVhbjtcclxuICBtb2RlbDogRWxlbWVudE1vZGVsPGFueT47XHJcbiAgcGhhc2U6IERlc2lnbmVyRWxlbWVudFBoYXNlQ29tcG9uZW50O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcGFuZTogUGFuZVJlZixcclxuICApIHtcclxuICAgIHRoaXMubW9kZSA9IF9yZWYubW9kZTtcclxuICAgIHRoaXMubW9kZWwgPSBfcmVmLm1vZGVsIGFzIEVsZW1lbnRNb2RlbDtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAvL2lmICh0aGlzLnN0YXRlKSB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXM/LmZpbmQocCA9PiBwLnN0YXRlID09PSB0aGlzLnN0YXRlKTtcclxuICAgIC8vZWxzZSB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXM/LmZpcnN0O1xyXG4gIH1cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnd2lkZ2V0Jykge1xyXG4gICAgICB0aGlzLnBoYXNlcz8uZm9yRWFjaChwID0+IHAub25TYXZlLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgICB0aGlzLnNhdmUuZW1pdChlKTtcclxuICAgICAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgICAgIH0pKTtcclxuICAgICAgdGhpcy5hZGQ/LmNvbXBsZXRlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fcmVmLm1vZGUgPSB0aGlzLm1vZGUgPSAnZWRpdCc7XHJcbiAgICAgICAgdGhpcy5fcmVmLl9zdGF0ZSQubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnBoYXNlcy5maXJzdC5yZWZyZXNoKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhdmFsaWQgfHwgIWRpcnR5XCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG48L21hdC10b29sYmFyPlxyXG48cCBjbGFzcz1cImhlbHBcIj57e21vZGVsLmhlbHB9fTwvcD5cclxuPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2VkaXQnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7J1RpdGxlJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiIHJlcXVpcmVkICN0aXRsZSAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAmbmJzcDtcclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8cCAqbmdJZj1cIm1vZGVsLnJlc291cmNlXCIgY2xhc3M9XCJtZXNzYWdlXCIgKGNsaWNrKT1cInVubG9jaygkZXZlbnQpXCIgW2lubmVySFRNTF09XCInVW5sb2NrJ3x0cmFuc2xhdGVcIj48L3A+XHJcblxyXG4gICAgPCEtLTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJfdGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj4tLT5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAjZWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPGRpdiAjYXJndW1lbnRzPjwvZGl2PlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5jb250cm9scy5wcml2aWxlZ2VzXCIgZm9ybUdyb3VwTmFtZT1cInByaXZpbGVnZXNcIj5cclxuICAgIDxoMiBjbGFzcz1cIm1hdC10aXRsZVwiPnt7J1ByaXZpbGVnZXMnfHRyYW5zbGF0ZX19PC9oMj5cclxuICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgZm9ybUNvbnRyb2xOYW1lPVwicm9sZXNcIiAqbmdJZj1cInJvbGVzXCI+XHJcbiAgICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbdmFsdWVdPVwici5uYW1lXCI+e3tyLnRpdGxlfX08L21hdC1saXN0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdGlvbi1saXN0PlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0NvbmRpdGlvbid8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwicnVsZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgPG1hdC1oaW50PiB7eyAnUHJvZ3JhbW1hYmxlRXhwcmVzc2lvbid8dHJhbnNsYXRlIH19PC9tYXQtaGludD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZm9ybT5cclxuIl19
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24tZGVzaWduZXIvZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLFNBQVMsRUFBMEMsWUFBWSxFQUFtQixTQUFTLEVBQWMsWUFBWSxFQUFnQixNQUFNLEVBQVksS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFxRSxNQUFNLGVBQWUsQ0FBQztBQUN2VSxPQUFPLEVBQWUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSTFDLE9BQU8sRUFBRSxXQUFXLEVBQWdCLFdBQVcsRUFBYyxVQUFVLEVBQTRCLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBbUIsZUFBZSxFQUFVLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU0vRSxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQW1CLFdBQWlDO1FBQWpDLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtJQUFJLENBQUM7O2lIQUQ5QyxvQkFBb0I7cUdBQXBCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQUhoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDOztBQU9ELE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsWUFB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QUMsRUFBRTtZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7a0hBNUhLLHFCQUFxQixrQkFlakIsV0FBVztzR0FmZixxQkFBcUIsdUxBT2Isb0JBQW9CLGdGQUNwQixzQkFBc0IsZ0RDOUN0Qywrd0ZBb0RBOzJGRGRRLHFCQUFxQjtrQkFONUIsU0FBUzsrQkFDRSx5QkFBeUI7OzBCQW9CaEMsTUFBTTsyQkFBQyxXQUFXOzswQkFFbEIsUUFBUTsrSUFmRixJQUFJO3NCQUFaLEtBQUs7Z0JBRXVCLFVBQVU7c0JBQXRDLE1BQU07dUJBQUMsVUFBVTtnQkFDTyxNQUFNO3NCQUE5QixNQUFNO3VCQUFDLE1BQU07Z0JBRXNCLFdBQVc7c0JBQTlDLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUNJLGFBQWE7c0JBQWxELFlBQVk7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBDb21wb25lbnRSZWYsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9jb21wb25lbnQtZmFjdG9yeS1yZXNvbHZlclwiO1xyXG5pbXBvcnQgeyBTeXN0ZW1TZXJ2aWNlIH0gZnJvbSBcIi4uL3N5c3RlbS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiLi4vLi4vY29yZS9tb2RlbHNcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJSZWYsIEVsZW1lbnRNb2RlbCwgcHJvZ3JhbU5hbWUsIERlc2lnbk1vZGUsIEZBTUlMWV9TVkcsIERlc2lnbmVyRWxlbWVudENvbXBvbmVudCB9IGZyb20gXCIuL2RlY2xhcmF0aW9uc1wiO1xyXG5pbXBvcnQgeyBMYXlvdXRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXQsIENvbXBvbmVudFBvcnRhbCwgUG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcclxuaW1wb3J0IHsgUGFuZVJlZiB9IGZyb20gXCIuLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tiaXpkb2NFZGl0Q29udGVudF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0Q29udGVudERpcmVjdGl2ZSB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPikgeyB9XHJcbn1cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbYml6ZG9jQ29udGVudF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXaWRnZXRDb250ZW50RGlyZWN0aXZlIHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+KSB7IH1cclxufVxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tiaXpkb2NBZGRDb250ZW50XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZENvbnRlbnREaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8dW5rbm93bj4pIHsgfVxyXG59XHJcblxyXG4vKipcclxuKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtZGVzaWduZXItZWxlbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICdkZXNpZ25lci1lbGVtZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnZGVzaWduZXItZWxlbWVudC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnRcclxuICBjbGFzcyBEZXNpZ25lckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHJlYWRvbmx5IHN2ZyA9IEZBTUlMWV9TVkc7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgLy9ASW5wdXQoKSBzdGF0ZTogc3RyaW5nO1xyXG4gIEBPdXRwdXQoJ2NvbnRpbnVlJykgcmVhZG9ubHkgb25Db250aW51ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCdzYXZlJykgcmVhZG9ubHkgb25TYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50TW9kZWw+KCk7XHJcbiAgcm9sZXM6IFJvbGVbXTtcclxuICBAQ29udGVudENoaWxkKEVkaXRDb250ZW50RGlyZWN0aXZlKSBlZGl0Q29udGVudDogRWRpdENvbnRlbnREaXJlY3RpdmU7XHJcbiAgQENvbnRlbnRDaGlsZChXaWRnZXRDb250ZW50RGlyZWN0aXZlKSB3aWRnZXRDb250ZW50OiBXaWRnZXRDb250ZW50RGlyZWN0aXZlO1xyXG4gIG9wdGlvbnM6IFBvcnRhbDxhbnk+O1xyXG4gIG1vZGU6IERlc2lnbk1vZGU7XHJcbiAgbW9kZWw6IEVsZW1lbnRNb2RlbDxhbnk+O1xyXG4gIHByaXZhdGUgX29wdGlvbnM6IERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxhbnk+O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChEZXNpZ25lclJlZikgcHJpdmF0ZSBfcmVmOiBEZXNpZ25lclJlZjxhbnk+LFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9wYW5lOiBQYW5lUmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfY2ZyOiBCaXpEb2NDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy5tb2RlID0gX3JlZi5tb2RlO1xyXG4gICAgdGhpcy5tb2RlbCA9IF9yZWYubW9kZWwgYXMgRWxlbWVudE1vZGVsO1xyXG4gIH1cclxuICBhdHRhY2hlZChjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4gfCBDb21wb25lbnRSZWY8TGF5b3V0Q29tcG9uZW50Pikge1xyXG4gICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gY29tcG9uZW50UmVmO1xyXG4gICAgaWYgKHRoaXMubW9kZWwudGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5fb3B0aW9ucyA9IGluc3RhbmNlIGFzIERlc2lnbmVyRWxlbWVudENvbXBvbmVudDxhbnk+O1xyXG4gICAgICBpbnN0YW5jZS5tb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdhZGQnICYmICF0aGlzLl9vcHRpb25zLm9uQ29udGludWUpIHtcclxuICAgICAgICB0aGlzLm1vZGUgPSAnZWRpdCc7XHJcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgdGhpcy5vbkNvbnRpbnVlLmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9vcHRpb25zLm1vZGUgPSB0aGlzLm1vZGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgKGluc3RhbmNlIGFzIExheW91dENvbXBvbmVudCkuZmllbGRzID0gdGhpcy5tb2RlbC5hcmd1bWVudHM7XHJcbiAgICAgIChpbnN0YW5jZSBhcyBMYXlvdXRDb21wb25lbnQpLmZvcm11bGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RlICE9PSAnd2lkZ2V0JyAmJlxyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIGluc3RhbmNlLmZvcm0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbC50ZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBjb21wID0gdGhpcy5fY2ZyLmNvbXBvbmVudCh0aGlzLm1vZGVsLnRlbXBsYXRlKTtcclxuICAgICAgdGhpcy5vcHRpb25zID0gbmV3IENvbXBvbmVudFBvcnRhbDxEZXNpZ25lckVsZW1lbnRDb21wb25lbnQ8YW55Pj4oY29tcCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm1vZGUgIT09ICd3aWRnZXQnICYmIHRoaXMubW9kZWwuYXJndW1lbnRzPy5sZW5ndGgpXHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IG5ldyBDb21wb25lbnRQb3J0YWwoTGF5b3V0Q29tcG9uZW50KTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlICdhZGQnOlxyXG4gICAgICBjYXNlICdlZGl0JzpcclxuICAgICAgICB0aGlzLl9hZGRGb3JtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FkZEZvcm0oKSB7XHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5fZmIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgdGl0bGUgPSB0aGlzLl9mYi5jb250cm9sKG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgdGhpcy5tb2RlbC5yZXNvdXJjZSAmJiB0aXRsZS5kaXNhYmxlKCk7XHJcbiAgICBpZiAodGhpcy5tb2RlbC5kcmFmdCkgdGl0bGUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoKHQ6IHN0cmluZykgPT5cclxuICAgICAgdCAmJiBuYW1lLnNldFZhbHVlKHByb2dyYW1OYW1lKHQpKVxyXG4gICAgKTtcclxuICAgIGVsc2VcclxuICAgICAgbmFtZS5kaXNhYmxlKCk7XHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgnbmFtZScsIG5hbWUpO1xyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woJ3RpdGxlJywgdGl0bGUpO1xyXG4gICAgaWYgKHRoaXMubW9kZWwucHJpdmlsZWdlcykge1xyXG4gICAgICB0aGlzLmZvcm0uYWRkQ29udHJvbCgncHJpdmlsZWdlcycsXHJcbiAgICAgICAgdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgcnVsZTogbnVsbCxcclxuICAgICAgICAgIHJvbGVzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdPihudWxsKSxcclxuICAgICAgICB9KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLl9zZXJ2aWNlLnJvbGVzKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSByLmNvbmNhdCgodGhpcy5fcmVmLmRlc2lnbmVyLnJvbGVzIGFzIEVsZW1lbnRNb2RlbFtdKS5cclxuICAgICAgICAgIGZpbHRlcihyID0+ICFyLmRpc2FibGVkKS5cclxuICAgICAgICAgIG1hcChyID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcclxuICAgICAgICAgICAgdGl0bGU6IHIudGl0bGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiByLmRhdGFUeXBlXHJcbiAgICAgICAgICB9KSkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUocyA9PiB7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMubW9kZWwsIHsgZW1pdEV2ZW50OiAhdGhpcy5tb2RlbC5kcmFmdCB9KTtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMubW9kZSAhPT0gJ3dpZGdldCcpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVubG9jayhldnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAoKGV2dC5zcmNFbGVtZW50IGFzIEhUTUxFbGVtZW50KS50YWdOYW1lICE9PSAnQScpIHJldHVybjtcclxuICAgIHRoaXMubW9kZWwucmVzb3VyY2UgPSBudWxsO1xyXG4gICAgdGhpcy5mb3JtLmdldCgndGl0bGUnKS5lbmFibGUoKTtcclxuICAgIHRoaXMuX3JlZi5fdW5sb2NrJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcbiAgY29udGludWUoKSB7XHJcbiAgICB0aGlzLl9yZWYuX3N0YXRlJC5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5fb3B0aW9ucy5vbkNvbnRpbnVlICYmIHRoaXMuX29wdGlvbnMub25Db250aW51ZSgpO1xyXG4gICAgdGhpcy5vbkNvbnRpbnVlLmVtaXQoKTtcclxuICAgIHRoaXMubW9kZSA9ICdlZGl0JztcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5tb2RlbCwgdGhpcy5mb3JtLnZhbHVlKTtcclxuICAgIHRoaXMub25TYXZlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB0aGlzLl9wYW5lLmNsb3NlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEN0cmwtcyBzYXZlXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLmZvcm0udmFsaWQgJiYgdGhpcy5zYXZlKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveT8ubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveT8uY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPG5nLWNvbmF0aW5lciBbbmdTd2l0Y2hdPVwibW9kZVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhZGQnXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc1wiIChhdHRhY2hlZCk9XCJhdHRhY2hlZCgkZXZlbnQpXCIgW2Nka1BvcnRhbE91dGxldF09XCJvcHRpb25zXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGFjdGlvbnNcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWRcIiAoY2xpY2spPVwiY29udGludWUoKVwiPnt7J0NvbnRpbnVlJ3x0cmFuc2xhdGV9fSZuYnNwOzxtYXQtaWNvbj5kb3VibGVfYXJyb3c8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2VkaXQnXCI+XHJcbiAgICA8bWF0LXRvb2xiYXI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWQgfHwgIWZvcm0uZGlydHlcIj48bWF0LWljb24+c2F2ZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L21hdC10b29sYmFyPlxyXG4gICAgPHAgY2xhc3M9XCJoZWxwXCI+e3ttb2RlbC5oZWxwfX08L3A+XHJcbiAgICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImNvbHVtblwiXHJcbiAgICAgICAgICAoZG9jdW1lbnQ6a2V5ZG93bik9XCJoYW5kbGVLZXlib2FyZEV2ZW50KCRldmVudClcIj5cclxuICAgICAgPCEtLTxuZy1jb250YWluZXIgI2Vjb250YWluZXI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZvcm0uY29udGFpbnMoJ25hbWUnKVwiPlxyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snVGl0bGUnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiByZXF1aXJlZCAjdGl0bGUgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICZuYnNwO1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+e3snTmFtZSd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxwICpuZ0lmPVwibW9kZWwucmVzb3VyY2VcIiBjbGFzcz1cIm1lc3NhZ2VcIiAoY2xpY2spPVwidW5sb2NrKCRldmVudClcIiBbaW5uZXJIVE1MXT1cIidVbmxvY2snfHRyYW5zbGF0ZVwiPjwvcD5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZWRpdENvbnRlbnQ/LnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uc1wiIChhdHRhY2hlZCk9XCJhdHRhY2hlZCgkZXZlbnQpXCIgW2Nka1BvcnRhbE91dGxldF09XCJvcHRpb25zXCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybS5jb250YWlucygncHJpdmlsZWdlcycpXCIgZm9ybUdyb3VwTmFtZT1cInByaXZpbGVnZXNcIj5cclxuICAgICAgICA8aDIgY2xhc3M9XCJtYXQtdGl0bGVcIj57eydQcml2aWxlZ2VzJ3x0cmFuc2xhdGV9fTwvaDI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdCBmb3JtQ29udHJvbE5hbWU9XCJyb2xlc1wiICpuZ0lmPVwicm9sZXNcIj5cclxuICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb24gKm5nRm9yPVwibGV0IHIgb2Ygcm9sZXNcIiBbdmFsdWVdPVwici5uYW1lXCI+e3tyLnRpdGxlfX08L21hdC1saXN0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8Yml6ZG9jLWFjZS1pbnB1dCBbcGxhY2Vob2xkZXJdPVwiJ0NvbmRpdGlvbid8dHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwicnVsZVwiPjwvYml6ZG9jLWFjZS1pbnB1dD5cclxuICAgICAgICAgIDxtYXQtaGludD4ge3sgJ1Byb2dyYW1tYWJsZUV4cHJlc3Npb24nfHRyYW5zbGF0ZSB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgPGRpdiBbaW5uZXJIVE1MXT1cIihzdmdbbW9kZWwuZmFtaWx5XXxzYW5pdGl6ZUh0bWwpfHxtb2RlbC5mYW1pbHlcIiAqbmdJZj1cIm1vZGVsLmZhbWlseVwiPjwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ3aWRnZXRDb250ZW50Py50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnNcIiAoYXR0YWNoZWQpPVwiYXR0YWNoZWQoJGV2ZW50KVwiIFtjZGtQb3J0YWxPdXRsZXRdPVwib3B0aW9uc1wiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbmF0aW5lcj5cclxuIl19
|