@alauda-fe/crd-form 0.0.8 → 1.0.1-alpha.0
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/README.md +7 -0
- package/fesm2022/alauda-fe-crd-form.mjs +3088 -0
- package/fesm2022/alauda-fe-crd-form.mjs.map +1 -0
- package/package.json +12 -14
- package/types/alauda-fe-crd-form.d.ts +934 -0
- package/esm2022/alauda-fe-crd-form.mjs +0 -5
- package/esm2022/lib/abstract/base-array.mjs +0 -117
- package/esm2022/lib/crd-form/component.mjs +0 -325
- package/esm2022/lib/crd-form/helper.mjs +0 -32
- package/esm2022/lib/crd-form.module.mjs +0 -115
- package/esm2022/lib/field-controls/expressions/expression-core.mjs +0 -2
- package/esm2022/lib/field-controls/expressions/props-expression.mjs +0 -58
- package/esm2022/lib/field-controls/form-item.component.mjs +0 -215
- package/esm2022/lib/field-controls/index.mjs +0 -8
- package/esm2022/lib/field-controls/module.mjs +0 -143
- package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +0 -80
- package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +0 -112
- package/esm2022/lib/field-controls/operand-field-group.component.mjs +0 -88
- package/esm2022/lib/field-controls/operand-field.component.mjs +0 -877
- package/esm2022/lib/field-controls/widgets/array-table/component.mjs +0 -109
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +0 -116
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +0 -211
- package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +0 -2
- package/esm2022/lib/field-controls/widgets/index.mjs +0 -8
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +0 -169
- package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +0 -40
- package/esm2022/lib/field-controls/widgets/link/component.mjs +0 -68
- package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +0 -521
- package/esm2022/lib/field-controls/widgets/utils.mjs +0 -73
- package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +0 -94
- package/esm2022/lib/field-widgets/htpasswd/component.mjs +0 -40
- package/esm2022/lib/field-widgets/htpasswd/form.mjs +0 -240
- package/esm2022/lib/field-widgets/htpasswd/index.mjs +0 -4
- package/esm2022/lib/field-widgets/htpasswd/module.mjs +0 -54
- package/esm2022/lib/field-widgets/htpasswd/utils.mjs +0 -38
- package/esm2022/lib/field-widgets/index.mjs +0 -2
- package/esm2022/lib/remote-widgets/constants.mjs +0 -4
- package/esm2022/lib/remote-widgets/index.mjs +0 -4
- package/esm2022/lib/remote-widgets/remote-widget.service.mjs +0 -42
- package/esm2022/lib/remote-widgets/token.mjs +0 -7
- package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +0 -139
- package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +0 -189
- package/esm2022/lib/spec-descriptors/index.mjs +0 -4
- package/esm2022/lib/spec-descriptors/util.mjs +0 -13
- package/esm2022/lib/types/index.mjs +0 -89
- package/esm2022/lib/utils/capability.mjs +0 -306
- package/esm2022/lib/utils/constant.mjs +0 -22
- package/esm2022/lib/utils/helper.mjs +0 -196
- package/esm2022/lib/utils/index.mjs +0 -6
- package/esm2022/lib/utils/service-model.mjs +0 -12
- package/esm2022/lib/utils/util.mjs +0 -307
- package/esm2022/public-api.mjs +0 -13
- package/index.d.ts +0 -5
- package/lib/abstract/base-array.d.ts +0 -31
- package/lib/crd-form/component.d.ts +0 -58
- package/lib/crd-form/helper.d.ts +0 -7
- package/lib/crd-form.module.d.ts +0 -15
- package/lib/field-controls/expressions/expression-core.d.ts +0 -6
- package/lib/field-controls/expressions/props-expression.d.ts +0 -36
- package/lib/field-controls/form-item.component.d.ts +0 -19
- package/lib/field-controls/index.d.ts +0 -7
- package/lib/field-controls/module.d.ts +0 -23
- package/lib/field-controls/operand-advanced-field-group.component.d.ts +0 -16
- package/lib/field-controls/operand-array-field-group.component.d.ts +0 -8
- package/lib/field-controls/operand-field-group.component.d.ts +0 -21
- package/lib/field-controls/operand-field.component.d.ts +0 -109
- package/lib/field-controls/widgets/array-table/component.d.ts +0 -8
- package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +0 -26
- package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +0 -45
- package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +0 -11
- package/lib/field-controls/widgets/index.d.ts +0 -7
- package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +0 -35
- package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +0 -3
- package/lib/field-controls/widgets/link/component.d.ts +0 -20
- package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +0 -85
- package/lib/field-controls/widgets/utils.d.ts +0 -17
- package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +0 -36
- package/lib/field-widgets/htpasswd/component.d.ts +0 -9
- package/lib/field-widgets/htpasswd/form.d.ts +0 -34
- package/lib/field-widgets/htpasswd/index.d.ts +0 -3
- package/lib/field-widgets/htpasswd/module.d.ts +0 -13
- package/lib/field-widgets/htpasswd/utils.d.ts +0 -15
- package/lib/field-widgets/index.d.ts +0 -1
- package/lib/remote-widgets/constants.d.ts +0 -3
- package/lib/remote-widgets/index.d.ts +0 -3
- package/lib/remote-widgets/remote-widget.service.d.ts +0 -28
- package/lib/remote-widgets/token.d.ts +0 -3
- package/lib/spec-descriptors/capability/capability.component.d.ts +0 -20
- package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +0 -34
- package/lib/spec-descriptors/index.d.ts +0 -3
- package/lib/spec-descriptors/util.d.ts +0 -4
- package/lib/types/index.d.ts +0 -136
- package/lib/utils/capability.d.ts +0 -62
- package/lib/utils/constant.d.ts +0 -12
- package/lib/utils/helper.d.ts +0 -58
- package/lib/utils/index.d.ts +0 -5
- package/lib/utils/service-model.d.ts +0 -44
- package/lib/utils/util.d.ts +0 -44
- package/public-api.d.ts +0 -9
|
@@ -1,877 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { API_GATEWAY, createActions, isEqual, ObservableInput, publishRef, skipError, startWithCondition, viewActions, yamlReadOptions, yamlWriteOptions, } from '@alauda-fe/common';
|
|
3
|
-
import { HttpClient } from '@angular/common/http';
|
|
4
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Injector, Input, Output,
|
|
5
|
-
// cspell:disable-next-line
|
|
6
|
-
ɵcreateInjector as createInjector, } from '@angular/core';
|
|
7
|
-
import { FormControl, Validators } from '@angular/forms';
|
|
8
|
-
import { decode, encode } from 'ab64';
|
|
9
|
-
import { isImmutable } from 'immutable';
|
|
10
|
-
import { get, identity, map as $map, template } from 'lodash-es';
|
|
11
|
-
import { combineLatest, map, filter, Observable, Subject, debounceTime, distinctUntilChanged, shareReplay, takeUntil, BehaviorSubject, switchMap, of, finalize, isObservable, take, tap, } from 'rxjs';
|
|
12
|
-
import { CrdFormComponent } from '../crd-form/component';
|
|
13
|
-
import { SpecCapability, Validations, } from '../types';
|
|
14
|
-
import { convertBooleanSwitchValue, convertValue, getDefaultValue, getFieldDescription, getFieldDisplayName, getFieldPlaceholder, getFieldType, getFormData, getRadioOptions, normalizePath, } from '../utils';
|
|
15
|
-
import { isArrayField, isArrayFieldTable, isClearable, isCreatable, isGroupField, isMultiple, isAllowCreate, isRemoteField, isRequired, evalInContext, getOperandPath, } from '../utils/helper';
|
|
16
|
-
import { compareWithSubscribedPaths, PropsFieldExpression, } from './expressions/props-expression';
|
|
17
|
-
import { isLink } from './widgets/link/component';
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
import * as i1 from "../crd-form/component";
|
|
20
|
-
import * as i2 from "@angular/common/http";
|
|
21
|
-
const _c0 = (a0, a1) => ({ fieldType: a0, isBasicTypeField: a1 });
|
|
22
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_input_1_Template(rf, ctx) { if (rf & 1) {
|
|
23
|
-
i0.ɵɵelement(0, "input", 21);
|
|
24
|
-
i0.ɵɵpipe(1, "pure");
|
|
25
|
-
i0.ɵɵpipe(2, "translate");
|
|
26
|
-
} if (rf & 2) {
|
|
27
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
28
|
-
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 7, i0.ɵɵpipeBind2(1, 4, ctx_r0.field, ctx_r0.getFieldPlaceholder)));
|
|
29
|
-
} }
|
|
30
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
31
|
-
i0.ɵɵtext(0);
|
|
32
|
-
i0.ɵɵpipe(1, "pure");
|
|
33
|
-
i0.ɵɵpipe(2, "translate");
|
|
34
|
-
} if (rf & 2) {
|
|
35
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
36
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 5, i0.ɵɵpipeBind3(1, 1, ctx_r0.control.value, ctx_r0.convertBooleanSwitchValue, ctx_r0.field.capabilities)));
|
|
37
|
-
} }
|
|
38
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
39
|
-
i0.ɵɵelementContainerStart(0);
|
|
40
|
-
i0.ɵɵelement(1, "aui-switch", 22);
|
|
41
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_ng_template_2_Template, 3, 7, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
|
|
42
|
-
i0.ɵɵelementContainerEnd();
|
|
43
|
-
} if (rf & 2) {
|
|
44
|
-
const switchReadonly_r2 = i0.ɵɵreference(3);
|
|
45
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
46
|
-
i0.ɵɵadvance();
|
|
47
|
-
i0.ɵɵproperty("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", switchReadonly_r2)("formControl", ctx_r0.control);
|
|
48
|
-
} }
|
|
49
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_aui_option_2_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
-
i0.ɵɵelementStart(0, "aui-option", 27);
|
|
51
|
-
i0.ɵɵtext(1);
|
|
52
|
-
i0.ɵɵelementEnd();
|
|
53
|
-
} if (rf & 2) {
|
|
54
|
-
const option_r3 = ctx.$implicit;
|
|
55
|
-
i0.ɵɵproperty("value", option_r3.value)("label", option_r3.label);
|
|
56
|
-
i0.ɵɵadvance();
|
|
57
|
-
i0.ɵɵtextInterpolate1(" ", option_r3.label, " ");
|
|
58
|
-
} }
|
|
59
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
-
i0.ɵɵelementStart(0, "aui-multi-select", 25);
|
|
61
|
-
i0.ɵɵpipe(1, "async");
|
|
62
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_aui_option_2_Template, 2, 3, "aui-option", 26);
|
|
63
|
-
i0.ɵɵpipe(3, "async");
|
|
64
|
-
i0.ɵɵelementStart(4, "aui-option-placeholder");
|
|
65
|
-
i0.ɵɵtext(5);
|
|
66
|
-
i0.ɵɵpipe(6, "translate");
|
|
67
|
-
i0.ɵɵelementEnd()();
|
|
68
|
-
} if (rf & 2) {
|
|
69
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
70
|
-
i0.ɵɵproperty("maxRowCount", 3)("clearable", true)("filterable", true)("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("loading", i0.ɵɵpipeBind1(1, 10, ctx_r0.loading$))("allowCreate", ctx_r0.isAllowCreate);
|
|
71
|
-
i0.ɵɵadvance(2);
|
|
72
|
-
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 12, ctx_r0.dynamicOptions$));
|
|
73
|
-
i0.ɵɵadvance(3);
|
|
74
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 14, "no_data"));
|
|
75
|
-
} }
|
|
76
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_aui_option_2_Template(rf, ctx) { if (rf & 1) {
|
|
77
|
-
i0.ɵɵelementStart(0, "aui-option", 27);
|
|
78
|
-
i0.ɵɵpipe(1, "aclParseJsonTranslate");
|
|
79
|
-
i0.ɵɵtext(2);
|
|
80
|
-
i0.ɵɵpipe(3, "aclParseJsonTranslate");
|
|
81
|
-
i0.ɵɵelementEnd();
|
|
82
|
-
} if (rf & 2) {
|
|
83
|
-
const option_r4 = ctx.$implicit;
|
|
84
|
-
i0.ɵɵproperty("value", option_r4.value)("label", i0.ɵɵpipeBind1(1, 3, option_r4.label));
|
|
85
|
-
i0.ɵɵadvance(2);
|
|
86
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, option_r4.label), " ");
|
|
87
|
-
} }
|
|
88
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
-
i0.ɵɵelementStart(0, "aui-select", 28);
|
|
90
|
-
i0.ɵɵpipe(1, "async");
|
|
91
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_aui_option_2_Template, 4, 7, "aui-option", 26);
|
|
92
|
-
i0.ɵɵpipe(3, "async");
|
|
93
|
-
i0.ɵɵelementStart(4, "aui-option-placeholder");
|
|
94
|
-
i0.ɵɵtext(5);
|
|
95
|
-
i0.ɵɵpipe(6, "translate");
|
|
96
|
-
i0.ɵɵelementEnd()();
|
|
97
|
-
} if (rf & 2) {
|
|
98
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
99
|
-
i0.ɵɵproperty("clearable", true)("filterable", true)("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("loading", i0.ɵɵpipeBind1(1, 9, ctx_r0.loading$))("allowCreate", ctx_r0.isAllowCreate);
|
|
100
|
-
i0.ɵɵadvance(2);
|
|
101
|
-
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 11, ctx_r0.dynamicOptions$));
|
|
102
|
-
i0.ɵɵadvance(3);
|
|
103
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(6, 13, "no_data"));
|
|
104
|
-
} }
|
|
105
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
106
|
-
i0.ɵɵelementContainerStart(0);
|
|
107
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_multi_select_1_Template, 7, 16, "aui-multi-select", 23)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_aui_select_2_Template, 7, 15, "aui-select", 24);
|
|
108
|
-
i0.ɵɵelementContainerEnd();
|
|
109
|
-
} if (rf & 2) {
|
|
110
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
111
|
-
i0.ɵɵadvance();
|
|
112
|
-
i0.ɵɵproperty("ngIf", ctx_r0.isMultiple);
|
|
113
|
-
i0.ɵɵadvance();
|
|
114
|
-
i0.ɵɵproperty("ngIf", !ctx_r0.isMultiple);
|
|
115
|
-
} }
|
|
116
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_aui_radio_button_2_Template(rf, ctx) { if (rf & 1) {
|
|
117
|
-
i0.ɵɵelementStart(0, "aui-radio-button", 31);
|
|
118
|
-
i0.ɵɵtext(1);
|
|
119
|
-
i0.ɵɵpipe(2, "translate");
|
|
120
|
-
i0.ɵɵelementEnd();
|
|
121
|
-
} if (rf & 2) {
|
|
122
|
-
const option_r5 = ctx.$implicit;
|
|
123
|
-
i0.ɵɵproperty("value", option_r5.value);
|
|
124
|
-
i0.ɵɵadvance();
|
|
125
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, option_r5.display), " ");
|
|
126
|
-
} }
|
|
127
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_ng_template_4_Template(rf, ctx) { if (rf & 1) {
|
|
128
|
-
i0.ɵɵtext(0);
|
|
129
|
-
i0.ɵɵpipe(1, "pure");
|
|
130
|
-
i0.ɵɵpipe(2, "pure");
|
|
131
|
-
i0.ɵɵpipe(3, "translate");
|
|
132
|
-
} if (rf & 2) {
|
|
133
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
134
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 8, i0.ɵɵpipeBind3(2, 4, ctx_r0.control.value, ctx_r0.getOptionDisplay, i0.ɵɵpipeBind2(1, 1, ctx_r0.field.capabilities, ctx_r0.getRadioOptions))), " ");
|
|
135
|
-
} }
|
|
136
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
-
i0.ɵɵelementStart(0, "aui-radio-group", 29);
|
|
138
|
-
i0.ɵɵelementContainerStart(1);
|
|
139
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_aui_radio_button_2_Template, 3, 4, "aui-radio-button", 30);
|
|
140
|
-
i0.ɵɵpipe(3, "pure");
|
|
141
|
-
i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_ng_template_4_Template, 4, 10, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
|
|
142
|
-
i0.ɵɵelementContainerEnd();
|
|
143
|
-
i0.ɵɵelementEnd();
|
|
144
|
-
} if (rf & 2) {
|
|
145
|
-
const radioLabel_r6 = i0.ɵɵreference(5);
|
|
146
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
147
|
-
i0.ɵɵproperty("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", radioLabel_r6);
|
|
148
|
-
i0.ɵɵadvance(2);
|
|
149
|
-
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(3, 5, ctx_r0.field.capabilities, ctx_r0.getRadioOptions));
|
|
150
|
-
} }
|
|
151
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
152
|
-
i0.ɵɵelement(0, "acl-crd-resource-requirements", 33);
|
|
153
|
-
} if (rf & 2) {
|
|
154
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
155
|
-
i0.ɵɵproperty("ngModel", ctx_r0.control.value)("readOnly", true);
|
|
156
|
-
} }
|
|
157
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_Template(rf, ctx) { if (rf & 1) {
|
|
158
|
-
i0.ɵɵelementContainerStart(0);
|
|
159
|
-
i0.ɵɵelement(1, "acl-crd-resource-requirements", 32);
|
|
160
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_ng_template_2_Template, 1, 2, "ng-template", null, 5, i0.ɵɵtemplateRefExtractor);
|
|
161
|
-
i0.ɵɵelementContainerEnd();
|
|
162
|
-
} if (rf & 2) {
|
|
163
|
-
const resourceRequirementsReadonly_r7 = i0.ɵɵreference(3);
|
|
164
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
165
|
-
i0.ɵɵadvance();
|
|
166
|
-
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", resourceRequirementsReadonly_r7);
|
|
167
|
-
} }
|
|
168
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
-
i0.ɵɵelement(0, "acl-crd-yaml-editor", 35);
|
|
170
|
-
} if (rf & 2) {
|
|
171
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
172
|
-
i0.ɵɵproperty("ngModel", ctx_r0.control.value)("actionsConfig", ctx_r0.viewActions)("options", ctx_r0.viewOptions);
|
|
173
|
-
} }
|
|
174
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
175
|
-
i0.ɵɵelementContainerStart(0);
|
|
176
|
-
i0.ɵɵelement(1, "acl-crd-yaml-editor", 34);
|
|
177
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_ng_template_2_Template, 1, 3, "ng-template", null, 6, i0.ɵɵtemplateRefExtractor);
|
|
178
|
-
i0.ɵɵelementContainerEnd();
|
|
179
|
-
} if (rf & 2) {
|
|
180
|
-
const yamlReadonly_r8 = i0.ɵɵreference(3);
|
|
181
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
182
|
-
i0.ɵɵadvance();
|
|
183
|
-
i0.ɵɵproperty("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("actionsConfig", ctx_r0.editorActions)("options", ctx_r0.editorOptions)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", yamlReadonly_r8);
|
|
184
|
-
} }
|
|
185
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
-
i0.ɵɵelement(0, "acl-crd-resource-prefix", 37);
|
|
187
|
-
} if (rf & 2) {
|
|
188
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
189
|
-
i0.ɵɵproperty("field", ctx_r0.field)("ngModel", ctx_r0.control.value)("readonly", true);
|
|
190
|
-
} }
|
|
191
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
-
i0.ɵɵelementContainerStart(0);
|
|
193
|
-
i0.ɵɵelement(1, "acl-crd-resource-prefix", 36);
|
|
194
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_ng_template_2_Template, 1, 3, "ng-template", null, 7, i0.ɵɵtemplateRefExtractor);
|
|
195
|
-
i0.ɵɵelementContainerEnd();
|
|
196
|
-
} if (rf & 2) {
|
|
197
|
-
const resourcePrefixReadonly_r9 = i0.ɵɵreference(3);
|
|
198
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
199
|
-
i0.ɵɵadvance();
|
|
200
|
-
i0.ɵɵproperty("formErrors", ctx_r0.control.errors)("field", ctx_r0.field)("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("aclReadonlyFieldTemplate", resourcePrefixReadonly_r9);
|
|
201
|
-
} }
|
|
202
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_8_Template(rf, ctx) { if (rf & 1) {
|
|
203
|
-
i0.ɵɵelementContainerStart(0);
|
|
204
|
-
i0.ɵɵelement(1, "acl-crd-basic-auth-secret", 38);
|
|
205
|
-
i0.ɵɵelementContainerEnd();
|
|
206
|
-
} if (rf & 2) {
|
|
207
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
208
|
-
i0.ɵɵadvance();
|
|
209
|
-
i0.ɵɵproperty("field", ctx_r0.field)("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled);
|
|
210
|
-
} }
|
|
211
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_textarea_9_Template(rf, ctx) { if (rf & 1) {
|
|
212
|
-
i0.ɵɵelement(0, "textarea", 39);
|
|
213
|
-
i0.ɵɵpipe(1, "pure");
|
|
214
|
-
i0.ɵɵpipe(2, "translate");
|
|
215
|
-
} if (rf & 2) {
|
|
216
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
217
|
-
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("aclReadonlyField", ctx_r0.isDisabled)("placeholder", i0.ɵɵpipeBind1(2, 7, i0.ɵɵpipeBind2(1, 4, ctx_r0.field, ctx_r0.getFieldPlaceholder)));
|
|
218
|
-
} }
|
|
219
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_tags_input_10_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
-
i0.ɵɵelement(0, "aui-tags-input", 40);
|
|
221
|
-
i0.ɵɵpipe(1, "pure");
|
|
222
|
-
i0.ɵɵpipe(2, "translate");
|
|
223
|
-
} if (rf & 2) {
|
|
224
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
225
|
-
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 8, i0.ɵɵpipeBind2(1, 5, ctx_r0.field, ctx_r0.getFieldPlaceholder)))("aclReadonlyField", ctx_r0.isDisabled)("clearable", ctx_r0.isClearable);
|
|
226
|
-
} }
|
|
227
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_acl_crd_link_1_Template(rf, ctx) { if (rf & 1) {
|
|
228
|
-
i0.ɵɵelement(0, "acl-crd-link", 42);
|
|
229
|
-
} if (rf & 2) {
|
|
230
|
-
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
231
|
-
i0.ɵɵproperty("field", ctx_r0.field)("formControl", ctx_r0.control);
|
|
232
|
-
} }
|
|
233
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_Template(rf, ctx) { if (rf & 1) {
|
|
234
|
-
i0.ɵɵelementContainerStart(0);
|
|
235
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_acl_crd_link_1_Template, 1, 2, "acl-crd-link", 41);
|
|
236
|
-
i0.ɵɵpipe(2, "pure");
|
|
237
|
-
i0.ɵɵelementContainerEnd();
|
|
238
|
-
} if (rf & 2) {
|
|
239
|
-
i0.ɵɵnextContext();
|
|
240
|
-
const textField_r10 = i0.ɵɵreference(13);
|
|
241
|
-
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
242
|
-
i0.ɵɵadvance();
|
|
243
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.isLink) && ctx_r0.isDisabled)("ngIfElse", textField_r10);
|
|
244
|
-
} }
|
|
245
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_template_12_Template(rf, ctx) { if (rf & 1) {
|
|
246
|
-
i0.ɵɵelement(0, "input", 43);
|
|
247
|
-
i0.ɵɵpipe(1, "pure");
|
|
248
|
-
i0.ɵɵpipe(2, "translate");
|
|
249
|
-
} if (rf & 2) {
|
|
250
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
251
|
-
i0.ɵɵproperty("required", ctx_r0.isRequired)("formControl", ctx_r0.control)("placeholder", i0.ɵɵpipeBind1(2, 7, i0.ɵɵpipeBind2(1, 4, ctx_r0.field, ctx_r0.getFieldPlaceholder)))("aclReadonlyField", ctx_r0.isDisabled);
|
|
252
|
-
} }
|
|
253
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
-
i0.ɵɵelementStart(0, "acl-crd-form-item", 14);
|
|
255
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_input_1_Template, 3, 9, "input", 15)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_2_Template, 4, 3, "ng-container", 16)(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_3_Template, 3, 2, "ng-container", 16)(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_radio_group_4_Template, 6, 8, "aui-radio-group", 17)(5, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_5_Template, 4, 4, "ng-container", 16)(6, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_6_Template, 4, 6, "ng-container", 16)(7, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_7_Template, 4, 6, "ng-container", 16)(8, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_8_Template, 2, 4, "ng-container", 16)(9, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_textarea_9_Template, 3, 9, "textarea", 18)(10, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_aui_tags_input_10_Template, 3, 10, "aui-tags-input", 19)(11, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_container_11_Template, 3, 5, "ng-container", 20)(12, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_ng_template_12_Template, 3, 9, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
|
|
256
|
-
i0.ɵɵelementEnd();
|
|
257
|
-
} if (rf & 2) {
|
|
258
|
-
const meta_r11 = i0.ɵɵnextContext(2).ngIf;
|
|
259
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
260
|
-
i0.ɵɵproperty("ngSwitch", meta_r11.fieldType);
|
|
261
|
-
i0.ɵɵadvance();
|
|
262
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.number);
|
|
263
|
-
i0.ɵɵadvance();
|
|
264
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.booleanSwitch);
|
|
265
|
-
i0.ɵɵadvance();
|
|
266
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.select);
|
|
267
|
-
i0.ɵɵadvance();
|
|
268
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.radio);
|
|
269
|
-
i0.ɵɵadvance();
|
|
270
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.resourceRequirements);
|
|
271
|
-
i0.ɵɵadvance();
|
|
272
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.yaml);
|
|
273
|
-
i0.ɵɵadvance();
|
|
274
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.k8sResourcePrefix);
|
|
275
|
-
i0.ɵɵadvance();
|
|
276
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.basicAuthSecret);
|
|
277
|
-
i0.ɵɵadvance();
|
|
278
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.textarea);
|
|
279
|
-
i0.ɵɵadvance();
|
|
280
|
-
i0.ɵɵproperty("ngSwitchCase", ctx_r0.SpecCapability.tagsInput);
|
|
281
|
-
} }
|
|
282
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
283
|
-
i0.ɵɵelementContainer(0);
|
|
284
|
-
} }
|
|
285
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
286
|
-
i0.ɵɵelementStart(0, "div", 44);
|
|
287
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_ng_container_1_Template, 1, 0, "ng-container", 45);
|
|
288
|
-
i0.ɵɵelementEnd();
|
|
289
|
-
} if (rf & 2) {
|
|
290
|
-
const widget_r12 = ctx.ngIf;
|
|
291
|
-
i0.ɵɵadvance();
|
|
292
|
-
i0.ɵɵproperty("ngComponentOutlet", widget_r12.component);
|
|
293
|
-
} }
|
|
294
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_label_2_Template(rf, ctx) { if (rf & 1) {
|
|
295
|
-
i0.ɵɵelementStart(0, "label", 50);
|
|
296
|
-
i0.ɵɵtext(1);
|
|
297
|
-
i0.ɵɵpipe(2, "translate");
|
|
298
|
-
i0.ɵɵelementEnd();
|
|
299
|
-
} if (rf & 2) {
|
|
300
|
-
const label_r13 = ctx.ngIf;
|
|
301
|
-
i0.ɵɵadvance();
|
|
302
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 1, label_r13));
|
|
303
|
-
} }
|
|
304
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
-
i0.ɵɵelementContainer(0);
|
|
306
|
-
} }
|
|
307
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
308
|
-
i0.ɵɵelementContainerStart(0);
|
|
309
|
-
i0.ɵɵelementStart(1, "aui-form-item", 46);
|
|
310
|
-
i0.ɵɵtemplate(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_label_2_Template, 3, 3, "label", 47);
|
|
311
|
-
i0.ɵɵpipe(3, "pure");
|
|
312
|
-
i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_ng_container_4_Template, 1, 0, "ng-container", 48);
|
|
313
|
-
i0.ɵɵelementStart(5, "div", 49);
|
|
314
|
-
i0.ɵɵtext(6);
|
|
315
|
-
i0.ɵɵpipe(7, "pure");
|
|
316
|
-
i0.ɵɵpipe(8, "translate");
|
|
317
|
-
i0.ɵɵelementEnd()();
|
|
318
|
-
i0.ɵɵelementContainerEnd();
|
|
319
|
-
} if (rf & 2) {
|
|
320
|
-
const remoteModule_r14 = i0.ɵɵnextContext().ngIf;
|
|
321
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
322
|
-
i0.ɵɵadvance();
|
|
323
|
-
i0.ɵɵproperty("emptyAddon", false);
|
|
324
|
-
i0.ɵɵadvance();
|
|
325
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(3, 5, ctx_r0.field, ctx_r0.getFieldDisplayName));
|
|
326
|
-
i0.ɵɵadvance(2);
|
|
327
|
-
i0.ɵɵproperty("ngComponentOutlet", remoteModule_r14.component)("ngComponentOutletInjector", remoteModule_r14.injector);
|
|
328
|
-
i0.ɵɵadvance(2);
|
|
329
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 11, i0.ɵɵpipeBind2(7, 8, ctx_r0.field, ctx_r0.getFieldDescription)), " ");
|
|
330
|
-
} }
|
|
331
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
332
|
-
i0.ɵɵelementContainer(0);
|
|
333
|
-
} }
|
|
334
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
335
|
-
i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_ng_container_0_Template, 1, 0, "ng-container", 48);
|
|
336
|
-
} if (rf & 2) {
|
|
337
|
-
const remoteModule_r14 = i0.ɵɵnextContext().ngIf;
|
|
338
|
-
i0.ɵɵproperty("ngComponentOutlet", remoteModule_r14.component)("ngComponentOutletInjector", remoteModule_r14.injector);
|
|
339
|
-
} }
|
|
340
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
341
|
-
i0.ɵɵelementContainerStart(0);
|
|
342
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_container_1_Template, 9, 13, "ng-container", 11);
|
|
343
|
-
i0.ɵɵpipe(2, "pure");
|
|
344
|
-
i0.ɵɵtemplate(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_ng_template_3_Template, 1, 2, "ng-template", null, 8, i0.ɵɵtemplateRefExtractor);
|
|
345
|
-
i0.ɵɵelementContainerEnd();
|
|
346
|
-
} if (rf & 2) {
|
|
347
|
-
const pureRemote_r15 = i0.ɵɵreference(4);
|
|
348
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
349
|
-
i0.ɵɵadvance();
|
|
350
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.getFieldDisplayName))("ngIfElse", pureRemote_r15);
|
|
351
|
-
} }
|
|
352
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
353
|
-
i0.ɵɵelementContainerStart(0);
|
|
354
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_ng_container_1_Template, 5, 5, "ng-container", 10);
|
|
355
|
-
i0.ɵɵpipe(2, "async");
|
|
356
|
-
i0.ɵɵelementContainerEnd();
|
|
357
|
-
} if (rf & 2) {
|
|
358
|
-
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
359
|
-
i0.ɵɵadvance();
|
|
360
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 1, ctx_r0.remoteModule$));
|
|
361
|
-
} }
|
|
362
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
363
|
-
i0.ɵɵelementContainerStart(0);
|
|
364
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_acl_crd_form_item_1_Template, 14, 11, "acl-crd-form-item", 12);
|
|
365
|
-
i0.ɵɵpipe(2, "pure");
|
|
366
|
-
i0.ɵɵpipe(3, "pure");
|
|
367
|
-
i0.ɵɵtemplate(4, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_div_4_Template, 2, 1, "div", 13);
|
|
368
|
-
i0.ɵɵpipe(5, "pure");
|
|
369
|
-
i0.ɵɵtemplate(6, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_ng_container_6_Template, 3, 3, "ng-container", 10);
|
|
370
|
-
i0.ɵɵpipe(7, "pure");
|
|
371
|
-
i0.ɵɵelementContainerEnd();
|
|
372
|
-
} if (rf & 2) {
|
|
373
|
-
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
374
|
-
i0.ɵɵadvance();
|
|
375
|
-
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind2(2, 3, ctx_r0.field.capabilities, ctx_r0.getWidgets) && !i0.ɵɵpipeBind2(3, 6, ctx_r0.field, ctx_r0.isRemoteField));
|
|
376
|
-
i0.ɵɵadvance(3);
|
|
377
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(5, 9, ctx_r0.field.capabilities, ctx_r0.getWidgets));
|
|
378
|
-
i0.ɵɵadvance(2);
|
|
379
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(7, 12, ctx_r0.field, ctx_r0.isRemoteField));
|
|
380
|
-
} }
|
|
381
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
382
|
-
i0.ɵɵelementContainer(0);
|
|
383
|
-
} }
|
|
384
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_Template(rf, ctx) { if (rf & 1) {
|
|
385
|
-
i0.ɵɵelementStart(0, "acl-crd-form-item", 53);
|
|
386
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_ng_container_1_Template, 1, 0, "ng-container", 54);
|
|
387
|
-
i0.ɵɵelementEnd();
|
|
388
|
-
} if (rf & 2) {
|
|
389
|
-
i0.ɵɵnextContext(5);
|
|
390
|
-
const passwordView_r16 = i0.ɵɵreference(2);
|
|
391
|
-
i0.ɵɵproperty("plain", true);
|
|
392
|
-
i0.ɵɵadvance();
|
|
393
|
-
i0.ɵɵproperty("ngTemplateOutlet", passwordView_r16);
|
|
394
|
-
} }
|
|
395
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_password_input_2_Template(rf, ctx) { if (rf & 1) {
|
|
396
|
-
i0.ɵɵelement(0, "acl-password-input", 55);
|
|
397
|
-
i0.ɵɵpipe(1, "pure");
|
|
398
|
-
i0.ɵɵpipe(2, "translate");
|
|
399
|
-
i0.ɵɵpipe(3, "pure");
|
|
400
|
-
i0.ɵɵpipe(4, "translate");
|
|
401
|
-
i0.ɵɵpipe(5, "pure");
|
|
402
|
-
i0.ɵɵpipe(6, "pure");
|
|
403
|
-
i0.ɵɵpipe(7, "translate");
|
|
404
|
-
} if (rf & 2) {
|
|
405
|
-
const meta_r11 = i0.ɵɵnextContext(3).ngIf;
|
|
406
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
407
|
-
i0.ɵɵproperty("initPassword", ctx_r0.control.value)("label", i0.ɵɵpipeBind1(2, 15, i0.ɵɵpipeBind2(1, 12, ctx_r0.field, ctx_r0.getFieldDisplayName)))("hint", i0.ɵɵpipeBind1(4, 20, i0.ɵɵpipeBind2(3, 17, ctx_r0.field, ctx_r0.getFieldDescription)))("formControl", ctx_r0.control)("required", ctx_r0.isRequired)("readonly", ctx_r0.crdForm.readonly)("isUpdate", !!ctx_r0.control.value && !ctx_r0.control.dirty)("strongPassword", meta_r11.fieldType !== ctx_r0.SpecCapability.externalPassword)("enableConfirm", meta_r11.fieldType === ctx_r0.SpecCapability.confirmPassword)("encoding", i0.ɵɵpipeBind3(5, 22, ctx_r0.field, ctx_r0.getEncoding, "password"))("pattern", ctx_r0.field.validations == null ? null : ctx_r0.field.validations.pattern)("placeholder", i0.ɵɵpipeBind1(7, 29, i0.ɵɵpipeBind2(6, 26, ctx_r0.field, ctx_r0.getFieldPlaceholder)));
|
|
408
|
-
} }
|
|
409
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
410
|
-
i0.ɵɵelementContainerStart(0);
|
|
411
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_crd_form_item_1_Template, 2, 2, "acl-crd-form-item", 51)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_acl_password_input_2_Template, 8, 31, "acl-password-input", 52);
|
|
412
|
-
i0.ɵɵelementContainerEnd();
|
|
413
|
-
} if (rf & 2) {
|
|
414
|
-
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
415
|
-
i0.ɵɵadvance();
|
|
416
|
-
i0.ɵɵproperty("ngIf", ctx_r0.isDisabled);
|
|
417
|
-
i0.ɵɵadvance();
|
|
418
|
-
i0.ɵɵproperty("ngIf", !ctx_r0.isDisabled);
|
|
419
|
-
} }
|
|
420
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
421
|
-
const _r17 = i0.ɵɵgetCurrentView();
|
|
422
|
-
i0.ɵɵelementContainerStart(0);
|
|
423
|
-
i0.ɵɵelementStart(1, "acl-operand-field-group", 56);
|
|
424
|
-
i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template_acl_operand_field_group_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
|
|
425
|
-
i0.ɵɵelementEnd();
|
|
426
|
-
i0.ɵɵelementContainerEnd();
|
|
427
|
-
} if (rf & 2) {
|
|
428
|
-
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
429
|
-
i0.ɵɵadvance();
|
|
430
|
-
i0.ɵɵproperty("fields", ctx_r0.fields)("fieldGroup", ctx_r0.field)("readonly", ctx_r0.isDisabled)("formDataState", ctx_r0.formDataState)("formErrors", ctx_r0.formErrors);
|
|
431
|
-
} }
|
|
432
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template(rf, ctx) { if (rf & 1) {
|
|
433
|
-
const _r18 = i0.ɵɵgetCurrentView();
|
|
434
|
-
i0.ɵɵelementStart(0, "acl-crd-array-table", 58);
|
|
435
|
-
i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template_acl_crd_array_table_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
|
|
436
|
-
i0.ɵɵelementEnd();
|
|
437
|
-
} if (rf & 2) {
|
|
438
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
439
|
-
i0.ɵɵproperty("arrayFieldGroup", ctx_r0.field)("formDataState", ctx_r0.formDataState)("readonly", ctx_r0.isDisabled);
|
|
440
|
-
} }
|
|
441
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
-
const _r19 = i0.ɵɵgetCurrentView();
|
|
443
|
-
i0.ɵɵelementStart(0, "acl-operand-array-field-group", 59);
|
|
444
|
-
i0.ɵɵlistener("valueChange", function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template_acl_operand_array_field_group_valueChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.valueChange.emit($event)); });
|
|
445
|
-
i0.ɵɵelementEnd();
|
|
446
|
-
} if (rf & 2) {
|
|
447
|
-
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
448
|
-
i0.ɵɵproperty("arrayFieldGroup", ctx_r0.field)("readonly", ctx_r0.isDisabled)("formDataState", ctx_r0.formDataState);
|
|
449
|
-
} }
|
|
450
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {
|
|
451
|
-
i0.ɵɵelementContainerStart(0);
|
|
452
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_acl_crd_array_table_1_Template, 1, 3, "acl-crd-array-table", 57);
|
|
453
|
-
i0.ɵɵpipe(2, "pure");
|
|
454
|
-
i0.ɵɵtemplate(3, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_ng_template_3_Template, 1, 3, "ng-template", null, 9, i0.ɵɵtemplateRefExtractor);
|
|
455
|
-
i0.ɵɵelementContainerEnd();
|
|
456
|
-
} if (rf & 2) {
|
|
457
|
-
const defaultArrayFiled_r20 = i0.ɵɵreference(4);
|
|
458
|
-
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
459
|
-
i0.ɵɵadvance();
|
|
460
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind2(2, 2, ctx_r0.field, ctx_r0.isArrayFieldTable))("ngIfElse", defaultArrayFiled_r20);
|
|
461
|
-
} }
|
|
462
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
463
|
-
i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_0_Template, 3, 2, "ng-container", 10)(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_1_Template, 2, 5, "ng-container", 10)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_ng_container_2_Template, 5, 5, "ng-container", 10);
|
|
464
|
-
} if (rf & 2) {
|
|
465
|
-
const meta_r11 = i0.ɵɵnextContext().ngIf;
|
|
466
|
-
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
467
|
-
i0.ɵɵproperty("ngIf", meta_r11.fieldType === ctx_r0.SpecCapability.password || meta_r11.fieldType === ctx_r0.SpecCapability.confirmPassword || meta_r11.fieldType === ctx_r0.SpecCapability.externalPassword);
|
|
468
|
-
i0.ɵɵadvance();
|
|
469
|
-
i0.ɵɵproperty("ngIf", ctx_r0.isGroupField(ctx_r0.field) && (ctx_r0.field.fieldList == null ? null : ctx_r0.field.fieldList.length) > 0);
|
|
470
|
-
i0.ɵɵadvance();
|
|
471
|
-
i0.ɵɵproperty("ngIf", ctx_r0.isArrayField(ctx_r0.field));
|
|
472
|
-
} }
|
|
473
|
-
function OperandFieldComponent_ng_container_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
474
|
-
i0.ɵɵelementContainerStart(0);
|
|
475
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_ng_container_1_Template, 8, 15, "ng-container", 11)(2, OperandFieldComponent_ng_container_0_ng_container_1_ng_template_2_Template, 3, 3, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
|
|
476
|
-
i0.ɵɵelementContainerEnd();
|
|
477
|
-
} if (rf & 2) {
|
|
478
|
-
const meta_r11 = ctx.ngIf;
|
|
479
|
-
const advancedFiled_r21 = i0.ɵɵreference(3);
|
|
480
|
-
i0.ɵɵadvance();
|
|
481
|
-
i0.ɵɵproperty("ngIf", meta_r11.isBasicTypeField)("ngIfElse", advancedFiled_r21);
|
|
482
|
-
} }
|
|
483
|
-
function OperandFieldComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
|
|
484
|
-
i0.ɵɵelementContainerStart(0);
|
|
485
|
-
i0.ɵɵtemplate(1, OperandFieldComponent_ng_container_0_ng_container_1_Template, 4, 2, "ng-container", 10);
|
|
486
|
-
i0.ɵɵpipe(2, "pure");
|
|
487
|
-
i0.ɵɵpipe(3, "pure");
|
|
488
|
-
i0.ɵɵelementContainerEnd();
|
|
489
|
-
} if (rf & 2) {
|
|
490
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
491
|
-
i0.ɵɵadvance();
|
|
492
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction2(7, _c0, i0.ɵɵpipeBind2(2, 1, ctx_r0.field, ctx_r0.getFieldType), i0.ɵɵpipeBind2(3, 4, ctx_r0.field, ctx_r0.isBasicTypeField)));
|
|
493
|
-
} }
|
|
494
|
-
function OperandFieldComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
495
|
-
i0.ɵɵtext(0);
|
|
496
|
-
} if (rf & 2) {
|
|
497
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
498
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.PASSWORD_REVEAL, "\n");
|
|
499
|
-
} }
|
|
500
|
-
export const PASSWORD_REVEAL = '******';
|
|
501
|
-
const ENCODING_MAPPER = {
|
|
502
|
-
base64: {
|
|
503
|
-
decode,
|
|
504
|
-
encode,
|
|
505
|
-
},
|
|
506
|
-
};
|
|
507
|
-
export class OperandFieldComponent {
|
|
508
|
-
get isDisabled() {
|
|
509
|
-
return this.readonly || this.field?.disabled;
|
|
510
|
-
}
|
|
511
|
-
get effectControlDefaultValue() {
|
|
512
|
-
return this.crdForm.effectControlDefaultValue;
|
|
513
|
-
}
|
|
514
|
-
get isRequired() {
|
|
515
|
-
return isRequired(this.field);
|
|
516
|
-
}
|
|
517
|
-
get isCreatable() {
|
|
518
|
-
return isCreatable(this.field);
|
|
519
|
-
}
|
|
520
|
-
get isMultiple() {
|
|
521
|
-
return isMultiple(this.field);
|
|
522
|
-
}
|
|
523
|
-
get isAllowCreate() {
|
|
524
|
-
return isAllowCreate(this.field);
|
|
525
|
-
}
|
|
526
|
-
get isClearable() {
|
|
527
|
-
return isClearable(this.field);
|
|
528
|
-
}
|
|
529
|
-
// 通过hidden属性隐藏不必要的元素,和 aclScrollToFirstInvalid 指令过滤隐藏元素保持一致
|
|
530
|
-
get isHidden() {
|
|
531
|
-
return ((this.hasFieldDependency() && !this.checkFieldDependency(this.field)) ||
|
|
532
|
-
this._hidden);
|
|
533
|
-
}
|
|
534
|
-
set isHidden(hidden) {
|
|
535
|
-
this._hidden = hidden;
|
|
536
|
-
this.cdr.markForCheck();
|
|
537
|
-
}
|
|
538
|
-
get isCustomErrorsMapper() {
|
|
539
|
-
return getFieldType(this.field) === SpecCapability.resourceRequirements;
|
|
540
|
-
}
|
|
541
|
-
constructor(crdForm, injector, http, cdr) {
|
|
542
|
-
this.crdForm = crdForm;
|
|
543
|
-
this.injector = injector;
|
|
544
|
-
this.http = http;
|
|
545
|
-
this.cdr = cdr;
|
|
546
|
-
this.readonly = false;
|
|
547
|
-
this.valueChange = new EventEmitter();
|
|
548
|
-
this.itemRemove = new EventEmitter();
|
|
549
|
-
this.control = new FormControl();
|
|
550
|
-
this.onDestroy$ = new Subject();
|
|
551
|
-
this.getFieldType = getFieldType;
|
|
552
|
-
this.isLink = isLink;
|
|
553
|
-
this.SpecCapability = SpecCapability;
|
|
554
|
-
this.getFieldDisplayName = getFieldDisplayName;
|
|
555
|
-
this.getFieldDescription = getFieldDescription;
|
|
556
|
-
this.getFieldPlaceholder = getFieldPlaceholder;
|
|
557
|
-
this.getRadioOptions = getRadioOptions;
|
|
558
|
-
this.editorOptions = yamlWriteOptions;
|
|
559
|
-
this.editorActions = createActions;
|
|
560
|
-
this.isGroupField = isGroupField;
|
|
561
|
-
this.isArrayField = isArrayField;
|
|
562
|
-
this.isRemoteField = isRemoteField;
|
|
563
|
-
this.isArrayFieldTable = isArrayFieldTable;
|
|
564
|
-
this.convertBooleanSwitchValue = convertBooleanSwitchValue;
|
|
565
|
-
this.loading$ = new BehaviorSubject(false);
|
|
566
|
-
this.PASSWORD_REVEAL = PASSWORD_REVEAL;
|
|
567
|
-
this.isBasicTypeField = (filed) => ![
|
|
568
|
-
SpecCapability.object,
|
|
569
|
-
SpecCapability.array,
|
|
570
|
-
SpecCapability.password,
|
|
571
|
-
SpecCapability.confirmPassword,
|
|
572
|
-
SpecCapability.externalPassword,
|
|
573
|
-
].includes(getFieldType(filed));
|
|
574
|
-
this.viewActions = viewActions;
|
|
575
|
-
this.viewOptions = yamlReadOptions;
|
|
576
|
-
this.remoteModule$ = combineLatest([
|
|
577
|
-
this.field$,
|
|
578
|
-
this.remoteModuleDefinition$,
|
|
579
|
-
]).pipe(map(([field, remoteModuleDefinition]) => {
|
|
580
|
-
const remoteWidget = this.getRemoteWidget(field, remoteModuleDefinition);
|
|
581
|
-
return (remoteWidget && {
|
|
582
|
-
injector: createInjector(remoteModuleDefinition.module, this.injector),
|
|
583
|
-
module: remoteModuleDefinition.module,
|
|
584
|
-
component: remoteWidget.component,
|
|
585
|
-
});
|
|
586
|
-
}), filter(Boolean), takeUntil(this.onDestroy$), shareReplay(1));
|
|
587
|
-
this.getWidgets = (capabilities) => {
|
|
588
|
-
const descriptor = capabilities.find(c => c.startsWith(SpecCapability.widgets));
|
|
589
|
-
return descriptor
|
|
590
|
-
? this.crdForm.widgets?.find(w => w.descriptor === descriptor.split('?=')[0])
|
|
591
|
-
: null;
|
|
592
|
-
};
|
|
593
|
-
this.dynamicOptions$ = this.field$.pipe(switchMap(field => {
|
|
594
|
-
const dynamicExpression = new PropsFieldExpression(field).expressions;
|
|
595
|
-
if (!dynamicExpression.options) {
|
|
596
|
-
return of(this.getSelectOptions(field).map(value => ({
|
|
597
|
-
label: value,
|
|
598
|
-
value,
|
|
599
|
-
})));
|
|
600
|
-
}
|
|
601
|
-
return combineLatest([
|
|
602
|
-
this.crdForm.formContext$,
|
|
603
|
-
this.formDataState$,
|
|
604
|
-
]).pipe(debounceTime(100), distinctUntilChanged((p, n) => compareWithSubscribedPaths(dynamicExpression, p, n)), tap(([formContext, formDataState]) => {
|
|
605
|
-
if (this.crdForm.debug) {
|
|
606
|
-
/* eslint-disable no-console */
|
|
607
|
-
console.log('field: ', field, 'formContext: ', formContext, 'formDataState: ', formDataState.toJS());
|
|
608
|
-
}
|
|
609
|
-
}), switchMap(([formContext, formDataState]) => {
|
|
610
|
-
let result = [];
|
|
611
|
-
const { api, labelPath, valuePath, expression } = dynamicExpression.options;
|
|
612
|
-
const stringExpressionContext = this.getStringExpressionContext(formContext, formDataState);
|
|
613
|
-
if (!api && expression) {
|
|
614
|
-
result = evalInContext(expression, stringExpressionContext);
|
|
615
|
-
}
|
|
616
|
-
else {
|
|
617
|
-
return stringExpressionContext.fetchResourceList(template(api)(stringExpressionContext), (item) => {
|
|
618
|
-
const value = get(item, valuePath, '');
|
|
619
|
-
return {
|
|
620
|
-
label: get(item, labelPath, value),
|
|
621
|
-
value,
|
|
622
|
-
};
|
|
623
|
-
});
|
|
624
|
-
}
|
|
625
|
-
return isObservable(result) ? result : of(result);
|
|
626
|
-
}));
|
|
627
|
-
}), publishRef());
|
|
628
|
-
this.staticDefaultValue$ = this.field$.pipe(switchMap(field => {
|
|
629
|
-
const defaultValueExpression = new PropsFieldExpression(field)
|
|
630
|
-
.expressions;
|
|
631
|
-
if (!defaultValueExpression.default ||
|
|
632
|
-
this.getFieldCurrentValue() !== undefined) {
|
|
633
|
-
return of({
|
|
634
|
-
value: this.getFieldValue(),
|
|
635
|
-
isDynamic: false,
|
|
636
|
-
});
|
|
637
|
-
}
|
|
638
|
-
return combineLatest([
|
|
639
|
-
this.crdForm.formContext$,
|
|
640
|
-
this.formDataState$,
|
|
641
|
-
]).pipe(distinctUntilChanged((p, n) => compareWithSubscribedPaths(defaultValueExpression, p, n)), map(([formContext, formDataState]) => template(defaultValueExpression.default)(this.getStringExpressionContext(formContext, formDataState))), map(value => ({
|
|
642
|
-
value,
|
|
643
|
-
isDynamic: true,
|
|
644
|
-
})));
|
|
645
|
-
}), publishRef());
|
|
646
|
-
this.dynamicHiddenValue$ = this.field$.pipe(switchMap(field => {
|
|
647
|
-
const { expressions } = new PropsFieldExpression(field);
|
|
648
|
-
if (!expressions.hidden) {
|
|
649
|
-
return of(false);
|
|
650
|
-
}
|
|
651
|
-
return combineLatest([
|
|
652
|
-
this.crdForm.formContext$,
|
|
653
|
-
this.formDataState$,
|
|
654
|
-
]).pipe(distinctUntilChanged((p, n) => compareWithSubscribedPaths(expressions, p, n)), map(([formContext, formDataState]) => template(expressions.hidden)(this.getStringExpressionContext(formContext, formDataState)) === 'true'));
|
|
655
|
-
}));
|
|
656
|
-
this.getStringExpressionContext = (formContext, formDataState) => ({
|
|
657
|
-
fetchResourceList: this.fetchResourceList,
|
|
658
|
-
context: formContext || {},
|
|
659
|
-
formData: formDataState.toJS()?.spec || {},
|
|
660
|
-
});
|
|
661
|
-
this.fetchResourceList = (url, callback) => {
|
|
662
|
-
// 例如 '/kubernetes/global/api/v1/namespaces//secrets' 表示 formData.namespace 没有插值
|
|
663
|
-
if (url.includes('//')) {
|
|
664
|
-
return of([]);
|
|
665
|
-
}
|
|
666
|
-
this.loading$.next(true);
|
|
667
|
-
return this.http
|
|
668
|
-
.get(`${API_GATEWAY}${url}`)
|
|
669
|
-
.pipe(map(res => res.items.map(item => callback.call(this, item))), skipError([]), finalize(() => {
|
|
670
|
-
this.loading$.next(false);
|
|
671
|
-
}));
|
|
672
|
-
};
|
|
673
|
-
}
|
|
674
|
-
registerControl() {
|
|
675
|
-
this.crdForm.controlMap.set(getOperandPath(this.field), this.control);
|
|
676
|
-
}
|
|
677
|
-
unRegisterControl() {
|
|
678
|
-
this.crdForm.controlMap.delete(getOperandPath(this.field));
|
|
679
|
-
}
|
|
680
|
-
getRemoteWidget(field, remoteDefinition) {
|
|
681
|
-
const descriptor = field.capabilities.find(c => c.startsWith(SpecCapability.remote));
|
|
682
|
-
return (descriptor &&
|
|
683
|
-
remoteDefinition?.components?.find(w => w.descriptor === descriptor.split('?=')[0]));
|
|
684
|
-
}
|
|
685
|
-
ngOnInit() {
|
|
686
|
-
this.dynamicHiddenValue$.subscribe(value => {
|
|
687
|
-
this.isHidden = value;
|
|
688
|
-
});
|
|
689
|
-
this.registerControl();
|
|
690
|
-
if (this.field.validations) {
|
|
691
|
-
const validators = $map(this.field.validations, (val, rule) => {
|
|
692
|
-
switch (rule) {
|
|
693
|
-
case Validations.maximum: {
|
|
694
|
-
return Validators.max(val);
|
|
695
|
-
}
|
|
696
|
-
case Validations.minimum: {
|
|
697
|
-
return Validators.min(val);
|
|
698
|
-
}
|
|
699
|
-
case Validations.required: {
|
|
700
|
-
return Validators.required;
|
|
701
|
-
}
|
|
702
|
-
case Validations.maxLength: {
|
|
703
|
-
return Validators.maxLength(val);
|
|
704
|
-
}
|
|
705
|
-
case Validations.minLength: {
|
|
706
|
-
return Validators.minLength(val);
|
|
707
|
-
}
|
|
708
|
-
case Validations.pattern: {
|
|
709
|
-
return Validators.pattern(val);
|
|
710
|
-
}
|
|
711
|
-
default: {
|
|
712
|
-
return null;
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
}).filter(v => !!v);
|
|
716
|
-
if (validators.length) {
|
|
717
|
-
this.control.addValidators((this._validators = validators));
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
// 将 valueChanges 的逻辑移动到 ngAfterViewInit 中,主要是为了避免全局 ValidatorsDirective带来的影响,需要等到ValidatorsDirective的ngAfterViewInit之后再订阅control的valueChanges
|
|
722
|
-
ngAfterViewInit() {
|
|
723
|
-
this.control.valueChanges
|
|
724
|
-
.pipe(startWithCondition(this.effectControlDefaultValue, this.control.value), debounceTime(50), distinctUntilChanged(), takeUntil(this.onDestroy$), filter(v =>
|
|
725
|
-
// FIXME: This is hack. yaml value will only be null if format error(because try-catch), the data flow now is from control => formDataState => control(will judge equality),this will make control be empty
|
|
726
|
-
getFieldType(this.field) === SpecCapability.yaml ? v !== null : true))
|
|
727
|
-
.subscribe(value => {
|
|
728
|
-
this.valueChange.emit({
|
|
729
|
-
field: this.field,
|
|
730
|
-
data: value,
|
|
731
|
-
errors: this.control.errors,
|
|
732
|
-
});
|
|
733
|
-
});
|
|
734
|
-
}
|
|
735
|
-
ngOnDestroy() {
|
|
736
|
-
this.onDestroy$.next();
|
|
737
|
-
this.onDestroy$.complete();
|
|
738
|
-
this.unRegisterControl();
|
|
739
|
-
if (this._validators?.length) {
|
|
740
|
-
this.control.removeValidators(this._validators);
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
ngOnChanges({ formDataState }) {
|
|
744
|
-
if (this.field && formDataState?.firstChange) {
|
|
745
|
-
this.staticDefaultValue$
|
|
746
|
-
.pipe(take(1), filter(({ value }) => value !== undefined))
|
|
747
|
-
.subscribe(({ value, isDynamic }) => {
|
|
748
|
-
this.control.setValue(value, { emitEvent: isDynamic });
|
|
749
|
-
});
|
|
750
|
-
}
|
|
751
|
-
else if (formDataState?.currentValue) {
|
|
752
|
-
const currentValue = getFormData(formDataState.currentValue, this.field.path, false);
|
|
753
|
-
const prevValue = getFormData(formDataState.previousValue, this.field.path, false);
|
|
754
|
-
const rawValue = isImmutable(currentValue)
|
|
755
|
-
? currentValue.toJS()
|
|
756
|
-
: currentValue;
|
|
757
|
-
if (!isEqual(rawValue, prevValue) &&
|
|
758
|
-
!isEqual(rawValue, this.control.value)) {
|
|
759
|
-
this.control.setValue(rawValue);
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
getFieldCurrentValue() {
|
|
764
|
-
let value = getFormData(this.formDataState, this.field.path, false);
|
|
765
|
-
// 如果值是 Immutable object 类型,需要转成原始 JS Object
|
|
766
|
-
if (isImmutable(value)) {
|
|
767
|
-
value = value.toJS();
|
|
768
|
-
}
|
|
769
|
-
return value;
|
|
770
|
-
}
|
|
771
|
-
getFieldValue(useDefault = true) {
|
|
772
|
-
const currentValue = this.getFieldCurrentValue();
|
|
773
|
-
if (currentValue === undefined && useDefault) {
|
|
774
|
-
return getDefaultValue(this.field);
|
|
775
|
-
}
|
|
776
|
-
return currentValue;
|
|
777
|
-
}
|
|
778
|
-
getOptionDisplay(value, options) {
|
|
779
|
-
return options.find(item => item.value === value)?.display;
|
|
780
|
-
}
|
|
781
|
-
getSelectOptions(field) {
|
|
782
|
-
return field.capabilities
|
|
783
|
-
.filter(c => c.startsWith(SpecCapability.select))
|
|
784
|
-
.map(c => c.split(SpecCapability.select)?.[1]);
|
|
785
|
-
}
|
|
786
|
-
getEncoding(field, type) {
|
|
787
|
-
const prefix = `urn:alm:descriptor:${type}:encoding:`;
|
|
788
|
-
const capability = field.capabilities.find(it => it.startsWith(prefix));
|
|
789
|
-
let encoding;
|
|
790
|
-
if (capability) {
|
|
791
|
-
encoding = ENCODING_MAPPER[capability.slice(prefix.length)];
|
|
792
|
-
}
|
|
793
|
-
return (encoding || {
|
|
794
|
-
encode: identity,
|
|
795
|
-
decode: identity,
|
|
796
|
-
});
|
|
797
|
-
}
|
|
798
|
-
hasFieldDependency() {
|
|
799
|
-
return this.field.capabilities.some(c => c.startsWith(SpecCapability.fieldDependency));
|
|
800
|
-
}
|
|
801
|
-
checkFieldDependency(field) {
|
|
802
|
-
try {
|
|
803
|
-
const dependencies = field?.capabilities
|
|
804
|
-
.filter(c => c.startsWith(SpecCapability.fieldDependency))
|
|
805
|
-
.map(i => i.split(SpecCapability.fieldDependency)[1]);
|
|
806
|
-
if (!dependencies?.length) {
|
|
807
|
-
return true;
|
|
808
|
-
}
|
|
809
|
-
const parentPaths = dependencies.map(d => d.split(':'));
|
|
810
|
-
const state = parentPaths.every(([path, ...values]) => {
|
|
811
|
-
// Support depend one of values
|
|
812
|
-
const dependencyField = this.fields.find(f => f.path === normalizePath(path));
|
|
813
|
-
const dependencyDefaultValue = getDefaultValue(dependencyField);
|
|
814
|
-
const formStateValue = getFormData(this.formDataState, path);
|
|
815
|
-
const currentValue = formStateValue === null || formStateValue === undefined
|
|
816
|
-
? dependencyDefaultValue
|
|
817
|
-
: formStateValue;
|
|
818
|
-
return values.some(val => convertValue(val, dependencyField.type) === currentValue);
|
|
819
|
-
});
|
|
820
|
-
/**
|
|
821
|
-
* 父 field dependency 不满足时,即隐藏时,本 field 也应当隐藏。
|
|
822
|
-
* 因为在大部分情形下,fieldDependency 与 oneOf 搭配来描述一组关联关系,很少只有 b 仅依赖于 a,当 a 隐藏后,还要根据 a 的默认值要求显示 b 的情况,
|
|
823
|
-
* 对于该情况,可以多加一个配备了额外 fieldDependency 的 Descriptor 来描述 b
|
|
824
|
-
*/
|
|
825
|
-
return (parentPaths.every(([path]) => this.checkFieldDependency(this.fields.find(i => i.path === path))) && state);
|
|
826
|
-
}
|
|
827
|
-
catch (error) {
|
|
828
|
-
console.error(error);
|
|
829
|
-
return false;
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
static { this.ɵfac = function OperandFieldComponent_Factory(t) { return new (t || OperandFieldComponent)(i0.ɵɵdirectiveInject(i1.CrdFormComponent), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i2.HttpClient), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
833
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OperandFieldComponent, selectors: [["acl-operand-field"]], hostVars: 1, hostBindings: function OperandFieldComponent_HostBindings(rf, ctx) { if (rf & 2) {
|
|
834
|
-
i0.ɵɵhostProperty("hidden", ctx.isHidden);
|
|
835
|
-
} }, inputs: { field: "field", remoteModuleDefinition: "remoteModuleDefinition", readonly: "readonly", fields: "fields", formDataState: "formDataState", formErrors: "formErrors" }, outputs: { valueChange: "valueChange", itemRemove: "itemRemove" }, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 1, consts: [["passwordView", ""], ["advancedFiled", ""], ["textField", ""], ["switchReadonly", ""], ["radioLabel", ""], ["resourceRequirementsReadonly", ""], ["yamlReadonly", ""], ["resourcePrefixReadonly", ""], ["pureRemote", ""], ["defaultArrayFiled", ""], [4, "ngIf"], [4, "ngIf", "ngIfElse"], [3, "ngSwitch", 4, "ngIf"], ["class", "tw-flex tw-w-full tw-flex-col", 4, "ngIf"], [3, "ngSwitch"], ["type", "number", "aui-input", "", "auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "placeholder", 4, "ngSwitchCase"], [4, "ngSwitchCase"], ["auiFormItemControl", "", 3, "formControl", "required", "aclReadonlyField", "aclReadonlyFieldTemplate", 4, "ngSwitchCase"], ["auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "aclReadonlyField", "placeholder", 4, "ngSwitchCase"], ["auiFormItemControl", "", "class", "tw-flex-1", 3, "required", "formControl", "placeholder", "aclReadonlyField", "clearable", 4, "ngSwitchCase"], [4, "ngSwitchDefault"], ["type", "number", "aui-input", "", "auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "placeholder"], ["auiFormItemControl", "", 3, "aclReadonlyField", "aclReadonlyFieldTemplate", "formControl"], ["auiFormItemControl", "", 3, "maxRowCount", "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate", 4, "ngIf"], ["auiFormItemControl", "", 3, "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate", 4, "ngIf"], ["auiFormItemControl", "", 3, "maxRowCount", "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate"], [3, "value", "label", 4, "ngFor", "ngForOf"], [3, "value", "label"], ["auiFormItemControl", "", 3, "clearable", "filterable", "formControl", "required", "aclReadonlyField", "loading", "allowCreate"], ["auiFormItemControl", "", 3, "formControl", "required", "aclReadonlyField", "aclReadonlyFieldTemplate"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], ["auiFormItemControl", "", 3, "required", "formControl", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "ngModel", "readOnly"], ["auiFormItemControl", "", 3, "formControl", "required", "actionsConfig", "options", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "ngModel", "actionsConfig", "options"], ["auiFormItemControl", "", 3, "formErrors", "field", "required", "formControl", "aclReadonlyField", "aclReadonlyFieldTemplate"], ["auiFormItemControl", "", 3, "field", "ngModel", "readonly"], ["auiFormItemControl", "", 3, "field", "required", "formControl", "aclReadonlyField"], ["auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "aclReadonlyField", "placeholder"], ["auiFormItemControl", "", 1, "tw-flex-1", 3, "required", "formControl", "placeholder", "aclReadonlyField", "clearable"], ["auiFormItemControl", "", 3, "field", "formControl", 4, "ngIf", "ngIfElse"], ["auiFormItemControl", "", 3, "field", "formControl"], ["type", "text", "auiFormItemControl", "", "aui-input", "", 3, "required", "formControl", "placeholder", "aclReadonlyField"], [1, "tw-flex", "tw-w-full", "tw-flex-col"], [4, "ngComponentOutlet"], [3, "emptyAddon"], ["auiFormItemLabel", "", 4, "ngIf"], [4, "ngComponentOutlet", "ngComponentOutletInjector"], ["auiFormItemHint", ""], ["auiFormItemLabel", ""], [3, "plain", 4, "ngIf"], ["width", "large", 3, "initPassword", "label", "hint", "formControl", "required", "readonly", "isUpdate", "strongPassword", "enableConfirm", "encoding", "pattern", "placeholder", 4, "ngIf"], [3, "plain"], [4, "ngTemplateOutlet"], ["width", "large", 3, "initPassword", "label", "hint", "formControl", "required", "readonly", "isUpdate", "strongPassword", "enableConfirm", "encoding", "pattern", "placeholder"], [3, "valueChange", "fields", "fieldGroup", "readonly", "formDataState", "formErrors"], [3, "arrayFieldGroup", "formDataState", "readonly", "valueChange", 4, "ngIf", "ngIfElse"], [3, "valueChange", "arrayFieldGroup", "formDataState", "readonly"], [3, "valueChange", "arrayFieldGroup", "readonly", "formDataState"]], template: function OperandFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
836
|
-
i0.ɵɵtemplate(0, OperandFieldComponent_ng_container_0_Template, 4, 10, "ng-container", 10)(1, OperandFieldComponent_ng_template_1_Template, 1, 1, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
837
|
-
} if (rf & 2) {
|
|
838
|
-
i0.ɵɵproperty("ngIf", ctx.field);
|
|
839
|
-
} }, styles: ["[_nghost-%COMP%] .input-group[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .aui-form-item__label-wrapper:not(.hasLabel){display:none}"], changeDetection: 0 }); }
|
|
840
|
-
}
|
|
841
|
-
__decorate([
|
|
842
|
-
ObservableInput(),
|
|
843
|
-
__metadata("design:type", Observable)
|
|
844
|
-
], OperandFieldComponent.prototype, "field$", void 0);
|
|
845
|
-
__decorate([
|
|
846
|
-
ObservableInput(),
|
|
847
|
-
__metadata("design:type", Observable)
|
|
848
|
-
], OperandFieldComponent.prototype, "remoteModuleDefinition$", void 0);
|
|
849
|
-
__decorate([
|
|
850
|
-
ObservableInput(),
|
|
851
|
-
__metadata("design:type", Observable)
|
|
852
|
-
], OperandFieldComponent.prototype, "formDataState$", void 0);
|
|
853
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OperandFieldComponent, [{
|
|
854
|
-
type: Component,
|
|
855
|
-
args: [{ selector: 'acl-operand-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"field\">\n <ng-container\n *ngIf=\"{\n fieldType: field | pure: getFieldType,\n isBasicTypeField: field | pure: isBasicTypeField,\n } as meta\"\n >\n <ng-container *ngIf=\"meta.isBasicTypeField; else advancedFiled\">\n <acl-crd-form-item\n *ngIf=\"\n !(field.capabilities | pure: getWidgets) &&\n !(field | pure: isRemoteField)\n \"\n [ngSwitch]=\"meta.fieldType\"\n >\n <input\n *ngSwitchCase=\"SpecCapability.number\"\n type=\"number\"\n aui-input\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n />\n <ng-container *ngSwitchCase=\"SpecCapability.booleanSwitch\">\n <aui-switch\n auiFormItemControl\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"switchReadonly\"\n [formControl]=\"control\"\n ></aui-switch>\n <ng-template #switchReadonly>{{\n control.value\n | pure: convertBooleanSwitchValue : field.capabilities\n | translate\n }}</ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.select\">\n <aui-multi-select\n *ngIf=\"isMultiple\"\n [maxRowCount]=\"3\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label\"\n >\n {{ option.label }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-multi-select>\n\n <aui-select\n *ngIf=\"!isMultiple\"\n auiFormItemControl\n [clearable]=\"true\"\n [filterable]=\"true\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [loading]=\"loading$ | async\"\n [allowCreate]=\"isAllowCreate\"\n >\n <aui-option\n *ngFor=\"let option of dynamicOptions$ | async\"\n [value]=\"option.value\"\n [label]=\"option.label | aclParseJsonTranslate\"\n >\n {{ option.label | aclParseJsonTranslate }}\n </aui-option>\n <aui-option-placeholder>{{\n 'no_data' | translate\n }}</aui-option-placeholder>\n </aui-select>\n </ng-container>\n <aui-radio-group\n *ngSwitchCase=\"SpecCapability.radio\"\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"radioLabel\"\n >\n <ng-container>\n <aui-radio-button\n *ngFor=\"let option of field.capabilities | pure: getRadioOptions\"\n [value]=\"option.value\"\n >\n {{ option.display | translate }}\n </aui-radio-button>\n <ng-template #radioLabel>\n {{\n control.value\n | pure\n : getOptionDisplay\n : (field.capabilities | pure: getRadioOptions)\n | translate\n }}\n </ng-template>\n </ng-container>\n </aui-radio-group>\n <ng-container *ngSwitchCase=\"SpecCapability.resourceRequirements\">\n <acl-crd-resource-requirements\n auiFormItemControl\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourceRequirementsReadonly\"\n ></acl-crd-resource-requirements>\n <ng-template #resourceRequirementsReadonly>\n <acl-crd-resource-requirements\n auiFormItemControl\n [ngModel]=\"control.value\"\n [readOnly]=\"true\"\n ></acl-crd-resource-requirements>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.yaml\">\n <acl-crd-yaml-editor\n auiFormItemControl\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [actionsConfig]=\"editorActions\"\n [options]=\"editorOptions\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"yamlReadonly\"\n ></acl-crd-yaml-editor>\n <ng-template #yamlReadonly>\n <acl-crd-yaml-editor\n auiFormItemControl\n [ngModel]=\"control.value\"\n [actionsConfig]=\"viewActions\"\n [options]=\"viewOptions\"\n ></acl-crd-yaml-editor>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.k8sResourcePrefix\">\n <acl-crd-resource-prefix\n auiFormItemControl\n [formErrors]=\"control.errors\"\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [aclReadonlyFieldTemplate]=\"resourcePrefixReadonly\"\n ></acl-crd-resource-prefix>\n <ng-template #resourcePrefixReadonly>\n <acl-crd-resource-prefix\n auiFormItemControl\n [field]=\"field\"\n [ngModel]=\"control.value\"\n [readonly]=\"true\"\n ></acl-crd-resource-prefix>\n </ng-template>\n </ng-container>\n <ng-container *ngSwitchCase=\"SpecCapability.basicAuthSecret\">\n <acl-crd-basic-auth-secret\n auiFormItemControl\n [field]=\"field\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n ></acl-crd-basic-auth-secret>\n </ng-container>\n <textarea\n *ngSwitchCase=\"SpecCapability.textarea\"\n auiFormItemControl\n aui-input\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [aclReadonlyField]=\"isDisabled\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n ></textarea>\n <aui-tags-input\n *ngSwitchCase=\"SpecCapability.tagsInput\"\n auiFormItemControl\n class=\"tw-flex-1\"\n [required]=\"isRequired\"\n [formControl]=\"control\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n [aclReadonlyField]=\"isDisabled\"\n [clearable]=\"isClearable\"\n ></aui-tags-input>\n <ng-container *ngSwitchDefault>\n <acl-crd-link\n *ngIf=\"(field | pure: isLink) && isDisabled; else textField\"\n auiFormItemControl\n [field]=\"field\"\n [formControl]=\"control\"\n ></acl-crd-link>\n </ng-container>\n <ng-template #textField>\n <input\n type=\"text\"\n auiFormItemControl\n [required]=\"isRequired\"\n aui-input\n [formControl]=\"control\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n [aclReadonlyField]=\"isDisabled\"\n />\n </ng-template>\n </acl-crd-form-item>\n <div\n class=\"tw-flex tw-w-full tw-flex-col\"\n *ngIf=\"field.capabilities | pure: getWidgets as widget\"\n >\n <ng-container *ngComponentOutlet=\"widget.component\"></ng-container>\n </div>\n <ng-container *ngIf=\"field | pure: isRemoteField\">\n <ng-container *ngIf=\"remoteModule$ | async as remoteModule\">\n <ng-container\n *ngIf=\"field | pure: getFieldDisplayName as label; else pureRemote\"\n >\n <aui-form-item [emptyAddon]=\"false\">\n <label\n auiFormItemLabel\n *ngIf=\"field | pure: getFieldDisplayName as label\"\n >{{ label | translate }}</label\n >\n <ng-container\n *ngComponentOutlet=\"\n remoteModule.component;\n injector: remoteModule.injector\n \"\n ></ng-container>\n <div auiFormItemHint>\n {{ field | pure: getFieldDescription | translate }}\n </div>\n </aui-form-item>\n </ng-container>\n <ng-template #pureRemote>\n <ng-container\n *ngComponentOutlet=\"\n remoteModule.component;\n injector: remoteModule.injector\n \"\n ></ng-container\n ></ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n <ng-template #advancedFiled>\n <ng-container\n *ngIf=\"\n meta.fieldType === SpecCapability.password ||\n meta.fieldType === SpecCapability.confirmPassword ||\n meta.fieldType === SpecCapability.externalPassword\n \"\n >\n <acl-crd-form-item\n *ngIf=\"isDisabled\"\n [plain]=\"true\"\n >\n <ng-container *ngTemplateOutlet=\"passwordView\"></ng-container>\n </acl-crd-form-item>\n <acl-password-input\n *ngIf=\"!isDisabled\"\n [initPassword]=\"control.value\"\n [label]=\"field | pure: getFieldDisplayName | translate\"\n [hint]=\"field | pure: getFieldDescription | translate\"\n [formControl]=\"control\"\n [required]=\"isRequired\"\n [readonly]=\"crdForm.readonly\"\n [isUpdate]=\"!!control.value && !control.dirty\"\n [strongPassword]=\"meta.fieldType !== SpecCapability.externalPassword\"\n [enableConfirm]=\"meta.fieldType === SpecCapability.confirmPassword\"\n width=\"large\"\n [encoding]=\"field | pure: getEncoding : 'password'\"\n [pattern]=\"field.validations?.pattern\"\n [placeholder]=\"field | pure: getFieldPlaceholder | translate\"\n ></acl-password-input>\n </ng-container>\n <!-- group field -->\n <ng-container *ngIf=\"isGroupField(field) && field.fieldList?.length > 0\">\n <acl-operand-field-group\n [fields]=\"fields\"\n [fieldGroup]=\"field\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n [formErrors]=\"formErrors\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-field-group>\n </ng-container>\n <!-- array field groups -->\n <!-- array field table -->\n <ng-container *ngIf=\"isArrayField(field)\">\n <acl-crd-array-table\n *ngIf=\"field | pure: isArrayFieldTable; else defaultArrayFiled\"\n [arrayFieldGroup]=\"field\"\n [formDataState]=\"formDataState\"\n [readonly]=\"isDisabled\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-crd-array-table>\n <ng-template #defaultArrayFiled>\n <acl-operand-array-field-group\n [arrayFieldGroup]=\"field\"\n [readonly]=\"isDisabled\"\n [formDataState]=\"formDataState\"\n (valueChange)=\"valueChange.emit($event)\"\n >\n </acl-operand-array-field-group>\n </ng-template>\n </ng-container>\n </ng-template>\n </ng-container>\n</ng-container>\n\n<ng-template #passwordView>\n {{ PASSWORD_REVEAL }}\n</ng-template>\n", styles: [":host .input-group{width:100%}:host ::ng-deep .aui-form-item__label-wrapper:not(.hasLabel){display:none}\n"] }]
|
|
856
|
-
}], () => [{ type: i1.CrdFormComponent }, { type: i0.Injector }, { type: i2.HttpClient }, { type: i0.ChangeDetectorRef }], { field: [{
|
|
857
|
-
type: Input
|
|
858
|
-
}], field$: [], remoteModuleDefinition: [{
|
|
859
|
-
type: Input
|
|
860
|
-
}], remoteModuleDefinition$: [], readonly: [{
|
|
861
|
-
type: Input
|
|
862
|
-
}], fields: [{
|
|
863
|
-
type: Input
|
|
864
|
-
}], formDataState: [{
|
|
865
|
-
type: Input
|
|
866
|
-
}], formDataState$: [], formErrors: [{
|
|
867
|
-
type: Input
|
|
868
|
-
}], valueChange: [{
|
|
869
|
-
type: Output
|
|
870
|
-
}], itemRemove: [{
|
|
871
|
-
type: Output
|
|
872
|
-
}], isHidden: [{
|
|
873
|
-
type: HostBinding,
|
|
874
|
-
args: ['hidden']
|
|
875
|
-
}] }); })();
|
|
876
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(OperandFieldComponent, { className: "OperandFieldComponent", filePath: "lib/field-controls/operand-field.component.ts", lineNumber: 115 }); })();
|
|
877
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmFuZC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyZC1mb3JtL3NyYy9saWIvZmllbGQtY29udHJvbHMvb3BlcmFuZC1maWVsZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBRWIsT0FBTyxFQUVQLGVBQWUsRUFDZixVQUFVLEVBQ1YsU0FBUyxFQUNULGtCQUFrQixFQUdsQixXQUFXLEVBQ1gsZUFBZSxFQUNmLGdCQUFnQixHQUNqQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUlMLE1BQU07QUFFTiwyQkFBMkI7QUFDM0IsZUFBZSxJQUFJLGNBQWMsR0FDbEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsR0FBRyxFQUNILE1BQU0sRUFDTixVQUFVLEVBQ1YsT0FBTyxFQUNQLFlBQVks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SUFEQyxlQUFlLEVBQUU7OEJBQ0QsVUFBVTs2REFBZ0I7aUZBakRoQyxxQkFBcUI7Y0FOakMsU0FBUzsyQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTtpSUFNL0MsS0FBSztrQkFESixLQUFLO1lBSU4sTUFBTSxNQUdOLHNCQUFzQjtrQkFEckIsS0FBSztZQUlOLHVCQUF1QixNQUd2QixRQUFRO2tCQURQLEtBQUs7WUErQkcsTUFBTTtrQkFBZCxLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUVOLGNBQWMsTUFFTCxVQUFVO2tCQUFsQixLQUFLO1lBRUksV0FBVztrQkFBcEIsTUFBTTtZQUNHLFVBQVU7a0JBQW5CLE1BQU07WUFJSCxRQUFRO2tCQURYLFdBQVc7bUJBQUMsUUFBUTs7a0ZBekRWLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFQSV9HQVRFV0FZLFxuICBjcmVhdGVBY3Rpb25zLFxuICBFbmNvZGluZyxcbiAgaXNFcXVhbCxcbiAgS3ViZXJuZXRlc1Jlc291cmNlLFxuICBPYnNlcnZhYmxlSW5wdXQsXG4gIHB1Ymxpc2hSZWYsXG4gIHNraXBFcnJvcixcbiAgc3RhcnRXaXRoQ29uZGl0aW9uLFxuICBTdHJpbmdNYXAsXG4gIFRyYW5zbGF0aW9uLFxuICB2aWV3QWN0aW9ucyxcbiAgeWFtbFJlYWRPcHRpb25zLFxuICB5YW1sV3JpdGVPcHRpb25zLFxufSBmcm9tICdAYWxhdWRhLWZlL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICAvLyBjc3BlbGw6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgybVjcmVhdGVJbmplY3RvciBhcyBjcmVhdGVJbmplY3Rvcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWNvZGUsIGVuY29kZSB9IGZyb20gJ2FiNjQnO1xuaW1wb3J0IHsgaXNJbW11dGFibGUgfSBmcm9tICdpbW11dGFibGUnO1xuaW1wb3J0IHsgZ2V0LCBpZGVudGl0eSwgbWFwIGFzICRtYXAsIHRlbXBsYXRlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgZmlsdGVyLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZVVudGlsLFxuICBCZWhhdmlvclN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgb2YsXG4gIGZpbmFsaXplLFxuICBpc09ic2VydmFibGUsXG4gIHRha2UsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENyZEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9jcmQtZm9ybS9jb21wb25lbnQnO1xuaW1wb3J0IHsgUmVtb3RlV2lkZ2V0TW9kdWxlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3JlbW90ZS13aWRnZXRzJztcbmltcG9ydCB7XG4gIEZpZWxkVmFsdWVDaGFuZ2VFdmVudCxcbiAgRm9ybURhdGFTdGF0ZSxcbiAgRm9ybUVycm9ycyxcbiAgT3BlcmFuZEZpZWxkLFxuICBTcGVjQ2FwYWJpbGl0eSxcbiAgVmFsaWRhdGlvbnMsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7XG4gIGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWUsXG4gIGNvbnZlcnRWYWx1ZSxcbiAgZ2V0RGVmYXVsdFZhbHVlLFxuICBnZXRGaWVsZERlc2NyaXB0aW9uLFxuICBnZXRGaWVsZERpc3BsYXlOYW1lLFxuICBnZXRGaWVsZFBsYWNlaG9sZGVyLFxuICBnZXRGaWVsZFR5cGUsXG4gIGdldEZvcm1EYXRhLFxuICBnZXRSYWRpb09wdGlvbnMsXG4gIG5vcm1hbGl6ZVBhdGgsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGlzQXJyYXlGaWVsZCxcbiAgaXNBcnJheUZpZWxkVGFibGUsXG4gIGlzQ2xlYXJhYmxlLFxuICBpc0NyZWF0YWJsZSxcbiAgaXNHcm91cEZpZWxkLFxuICBpc011bHRpcGxlLFxuICBpc0FsbG93Q3JlYXRlLFxuICBpc1JlbW90ZUZpZWxkLFxuICBpc1JlcXVpcmVkLFxuICBldmFsSW5Db250ZXh0LFxuICBnZXRPcGVyYW5kUGF0aCxcbn0gZnJvbSAnLi4vdXRpbHMvaGVscGVyJztcblxuaW1wb3J0IHtcbiAgY29tcGFyZVdpdGhTdWJzY3JpYmVkUGF0aHMsXG4gIFByb3BzRmllbGRFeHByZXNzaW9uLFxufSBmcm9tICcuL2V4cHJlc3Npb25zL3Byb3BzLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgaXNMaW5rIH0gZnJvbSAnLi93aWRnZXRzL2xpbmsvY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IFBBU1NXT1JEX1JFVkVBTCA9ICcqKioqKionO1xuXG5jb25zdCBFTkNPRElOR19NQVBQRVI6IFJlY29yZDxzdHJpbmcsIEVuY29kaW5nPiA9IHtcbiAgYmFzZTY0OiB7XG4gICAgZGVjb2RlLFxuICAgIGVuY29kZSxcbiAgfSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1vcGVyYW5kLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICdvcGVyYW5kLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ29wZXJhbmQtZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE9wZXJhbmRGaWVsZENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgQElucHV0KClcbiAgZmllbGQ6IE9wZXJhbmRGaWVsZDtcblxuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgZmllbGQkITogT2JzZXJ2YWJsZTxPcGVyYW5kRmllbGQ+O1xuXG4gIEBJbnB1dCgpXG4gIHJlbW90ZU1vZHVsZURlZmluaXRpb246IFJlbW90ZVdpZGdldE1vZHVsZURlZmluaXRpb247XG5cbiAgQE9ic2VydmFibGVJbnB1dCgpXG4gIHJlbW90ZU1vZHVsZURlZmluaXRpb24kITogT2JzZXJ2YWJsZTxSZW1vdGVXaWRnZXRNb2R1bGVEZWZpbml0aW9uPjtcblxuICBASW5wdXQoKVxuICByZWFkb25seSA9IGZhbHNlO1xuXG4gIGdldCBpc0Rpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZmllbGQ/LmRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IGVmZmVjdENvbnRyb2xEZWZhdWx0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JkRm9ybS5lZmZlY3RDb250cm9sRGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIGlzUmVxdWlyZWQodGhpcy5maWVsZCk7XG4gIH1cblxuICBnZXQgaXNDcmVhdGFibGUoKSB7XG4gICAgcmV0dXJuIGlzQ3JlYXRhYmxlKHRoaXMuZmllbGQpO1xuICB9XG5cbiAgZ2V0IGlzTXVsdGlwbGUoKSB7XG4gICAgcmV0dXJuIGlzTXVsdGlwbGUodGhpcy5maWVsZCk7XG4gIH1cblxuICBnZXQgaXNBbGxvd0NyZWF0ZSgpIHtcbiAgICByZXR1cm4gaXNBbGxvd0NyZWF0ZSh0aGlzLmZpZWxkKTtcbiAgfVxuXG4gIGdldCBpc0NsZWFyYWJsZSgpIHtcbiAgICByZXR1cm4gaXNDbGVhcmFibGUodGhpcy5maWVsZCk7XG4gIH1cblxuICBASW5wdXQoKSBmaWVsZHM6IE9wZXJhbmRGaWVsZFtdO1xuICBASW5wdXQoKSBmb3JtRGF0YVN0YXRlOiBGb3JtRGF0YVN0YXRlO1xuICBAT2JzZXJ2YWJsZUlucHV0KClcbiAgZm9ybURhdGFTdGF0ZSQhOiBPYnNlcnZhYmxlPEZvcm1EYXRhU3RhdGU+O1xuXG4gIEBJbnB1dCgpIGZvcm1FcnJvcnM6IEZvcm1FcnJvcnM7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGaWVsZFZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBpdGVtUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIOmAmui/h2hpZGRlbuWxnuaAp+makOiXj+S4jeW/heimgeeahOWFg+e0oO+8jOWSjCBhY2xTY3JvbGxUb0ZpcnN0SW52YWxpZCDmjIfku6Tov4fmu6TpmpDol4/lhYPntKDkv53mjIHkuIDoh7RcbiAgQEhvc3RCaW5kaW5nKCdoaWRkZW4nKVxuICBnZXQgaXNIaWRkZW4oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmhhc0ZpZWxkRGVwZW5kZW5jeSgpICYmICF0aGlzLmNoZWNrRmllbGREZXBlbmRlbmN5KHRoaXMuZmllbGQpKSB8fFxuICAgICAgdGhpcy5faGlkZGVuXG4gICAgKTtcbiAgfVxuXG4gIHNldCBpc0hpZGRlbihoaWRkZW4pIHtcbiAgICB0aGlzLl9oaWRkZW4gPSBoaWRkZW47XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIF9oaWRkZW46IGJvb2xlYW47XG4gIGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0RmllbGRUeXBlID0gZ2V0RmllbGRUeXBlO1xuICBpc0xpbmsgPSBpc0xpbms7XG5cbiAgU3BlY0NhcGFiaWxpdHkgPSBTcGVjQ2FwYWJpbGl0eTtcblxuICBnZXRGaWVsZERpc3BsYXlOYW1lID0gZ2V0RmllbGREaXNwbGF5TmFtZTtcbiAgZ2V0RmllbGREZXNjcmlwdGlvbiA9IGdldEZpZWxkRGVzY3JpcHRpb247XG4gIGdldEZpZWxkUGxhY2Vob2xkZXIgPSBnZXRGaWVsZFBsYWNlaG9sZGVyO1xuICBnZXRSYWRpb09wdGlvbnMgPSBnZXRSYWRpb09wdGlvbnM7XG5cbiAgZWRpdG9yT3B0aW9ucyA9IHlhbWxXcml0ZU9wdGlvbnM7XG4gIGVkaXRvckFjdGlvbnMgPSBjcmVhdGVBY3Rpb25zO1xuXG4gIGlzR3JvdXBGaWVsZCA9IGlzR3JvdXBGaWVsZDtcbiAgaXNBcnJheUZpZWxkID0gaXNBcnJheUZpZWxkO1xuICBpc1JlbW90ZUZpZWxkID0gaXNSZW1vdGVGaWVsZDtcbiAgaXNBcnJheUZpZWxkVGFibGUgPSBpc0FycmF5RmllbGRUYWJsZTtcbiAgY29udmVydEJvb2xlYW5Td2l0Y2hWYWx1ZSA9IGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWU7XG4gIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgZ2V0IGlzQ3VzdG9tRXJyb3JzTWFwcGVyKCkge1xuICAgIHJldHVybiBnZXRGaWVsZFR5cGUodGhpcy5maWVsZCkgPT09IFNwZWNDYXBhYmlsaXR5LnJlc291cmNlUmVxdWlyZW1lbnRzO1xuICB9XG5cbiAgUEFTU1dPUkRfUkVWRUFMID0gUEFTU1dPUkRfUkVWRUFMO1xuXG4gIGlzQmFzaWNUeXBlRmllbGQgPSAoZmlsZWQ6IE9wZXJhbmRGaWVsZCkgPT5cbiAgICAhW1xuICAgICAgU3BlY0NhcGFiaWxpdHkub2JqZWN0LFxuICAgICAgU3BlY0NhcGFiaWxpdHkuYXJyYXksXG4gICAgICBTcGVjQ2FwYWJpbGl0eS5wYXNzd29yZCxcbiAgICAgIFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZCxcbiAgICAgIFNwZWNDYXBhYmlsaXR5LmV4dGVybmFsUGFzc3dvcmQsXG4gICAgXS5pbmNsdWRlcyhnZXRGaWVsZFR5cGUoZmlsZWQpKTtcblxuICB2aWV3QWN0aW9ucyA9IHZpZXdBY3Rpb25zO1xuICB2aWV3T3B0aW9ucyA9IHlhbWxSZWFkT3B0aW9ucztcblxuICBwcml2YXRlIF92YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuXG4gIHJlbW90ZU1vZHVsZSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmZpZWxkJCxcbiAgICB0aGlzLnJlbW90ZU1vZHVsZURlZmluaXRpb24kLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2ZpZWxkLCByZW1vdGVNb2R1bGVEZWZpbml0aW9uXSkgPT4ge1xuICAgICAgY29uc3QgcmVtb3RlV2lkZ2V0ID0gdGhpcy5nZXRSZW1vdGVXaWRnZXQoZmllbGQsIHJlbW90ZU1vZHVsZURlZmluaXRpb24pO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcmVtb3RlV2lkZ2V0ICYmIHtcbiAgICAgICAgICBpbmplY3RvcjogY3JlYXRlSW5qZWN0b3IoXG4gICAgICAgICAgICByZW1vdGVNb2R1bGVEZWZpbml0aW9uLm1vZHVsZSxcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtb2R1bGU6IHJlbW90ZU1vZHVsZURlZmluaXRpb24ubW9kdWxlLFxuICAgICAgICAgIGNvbXBvbmVudDogcmVtb3RlV2lkZ2V0LmNvbXBvbmVudCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBmaWx0ZXIoQm9vbGVhbiksXG4gICAgdGFrZVVudGlsKHRoaXMub25EZXN0cm95JCksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNyZEZvcm06IENyZEZvcm1Db21wb25lbnQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIHJlZ2lzdGVyQ29udHJvbCgpIHtcbiAgICB0aGlzLmNyZEZvcm0uY29udHJvbE1hcC5zZXQoZ2V0T3BlcmFuZFBhdGgodGhpcy5maWVsZCksIHRoaXMuY29udHJvbCk7XG4gIH1cblxuICB1blJlZ2lzdGVyQ29udHJvbCgpIHtcbiAgICB0aGlzLmNyZEZvcm0uY29udHJvbE1hcC5kZWxldGUoZ2V0T3BlcmFuZFBhdGgodGhpcy5maWVsZCkpO1xuICB9XG5cbiAgZ2V0V2lkZ2V0cyA9IChjYXBhYmlsaXRpZXM6IFNwZWNDYXBhYmlsaXR5W10pID0+IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gY2FwYWJpbGl0aWVzLmZpbmQoYyA9PlxuICAgICAgYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LndpZGdldHMpLFxuICAgICk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3JcbiAgICAgID8gdGhpcy5jcmRGb3JtLndpZGdldHM/LmZpbmQoXG4gICAgICAgICAgdyA9PiB3LmRlc2NyaXB0b3IgPT09IGRlc2NyaXB0b3Iuc3BsaXQoJz89JylbMF0sXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcbiAgfTtcblxuICBnZXRSZW1vdGVXaWRnZXQoXG4gICAgZmllbGQ6IE9wZXJhbmRGaWVsZCxcbiAgICByZW1vdGVEZWZpbml0aW9uOiBSZW1vdGVXaWRnZXRNb2R1bGVEZWZpbml0aW9uLFxuICApIHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gZmllbGQuY2FwYWJpbGl0aWVzLmZpbmQoYyA9PlxuICAgICAgYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LnJlbW90ZSksXG4gICAgKTtcbiAgICByZXR1cm4gKFxuICAgICAgZGVzY3JpcHRvciAmJlxuICAgICAgcmVtb3RlRGVmaW5pdGlvbj8uY29tcG9uZW50cz8uZmluZChcbiAgICAgICAgdyA9PiB3LmRlc2NyaXB0b3IgPT09IGRlc2NyaXB0b3Iuc3BsaXQoJz89JylbMF0sXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZHluYW1pY0hpZGRlblZhbHVlJC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5pc0hpZGRlbiA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJDb250cm9sKCk7XG4gICAgaWYgKHRoaXMuZmllbGQudmFsaWRhdGlvbnMpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSAkbWFwKHRoaXMuZmllbGQudmFsaWRhdGlvbnMsICh2YWwsIHJ1bGUpID0+IHtcbiAgICAgICAgc3dpdGNoIChydWxlKSB7XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5tYXhpbXVtOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5tYXgodmFsIGFzIG51bWJlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbnMubWluaW11bToge1xuICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMubWluKHZhbCBhcyBudW1iZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFZhbGlkYXRpb25zLnJlcXVpcmVkOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5yZXF1aXJlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5tYXhMZW5ndGg6IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1heExlbmd0aCh2YWwgYXMgbnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5taW5MZW5ndGg6IHtcbiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0b3JzLm1pbkxlbmd0aCh2YWwgYXMgbnVtYmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBWYWxpZGF0aW9ucy5wYXR0ZXJuOiB7XG4gICAgICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5wYXR0ZXJuKHZhbCBhcyBzdHJpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLmZpbHRlcih2ID0+ICEhdik7XG4gICAgICBpZiAodmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jb250cm9sLmFkZFZhbGlkYXRvcnMoKHRoaXMuX3ZhbGlkYXRvcnMgPSB2YWxpZGF0b3JzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g5bCGIHZhbHVlQ2hhbmdlcyDnmoTpgLvovpHnp7vliqjliLAgbmdBZnRlclZpZXdJbml0IOS4re+8jOS4u+imgeaYr+S4uuS6humBv+WFjeWFqOWxgCBWYWxpZGF0b3JzRGlyZWN0aXZl5bim5p2l55qE5b2x5ZON77yM6ZyA6KaB562J5YiwVmFsaWRhdG9yc0RpcmVjdGl2ZeeahG5nQWZ0ZXJWaWV3SW5pdOS5i+WQjuWGjeiuoumYhWNvbnRyb2znmoR2YWx1ZUNoYW5nZXNcbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGhDb25kaXRpb24odGhpcy5lZmZlY3RDb250cm9sRGVmYXVsdFZhbHVlLCB0aGlzLmNvbnRyb2wudmFsdWUpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoNTApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSxcbiAgICAgICAgZmlsdGVyKHYgPT5cbiAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBoYWNrLiB5YW1sIHZhbHVlIHdpbGwgb25seSBiZSBudWxsIGlmIGZvcm1hdCBlcnJvcihiZWNhdXNlIHRyeS1jYXRjaCksIHRoZSBkYXRhIGZsb3cgbm93IGlzIGZyb20gY29udHJvbCA9PiBmb3JtRGF0YVN0YXRlID0+IGNvbnRyb2wod2lsbCBqdWRnZSBlcXVhbGl0eSnvvIx0aGlzIHdpbGwgbWFrZSBjb250cm9sIGJlIGVtcHR5XG4gICAgICAgICAgZ2V0RmllbGRUeXBlKHRoaXMuZmllbGQpID09PSBTcGVjQ2FwYWJpbGl0eS55YW1sID8gdiAhPT0gbnVsbCA6IHRydWUsXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgICAgICBkYXRhOiB2YWx1ZSxcbiAgICAgICAgICBlcnJvcnM6IHRoaXMuY29udHJvbC5lcnJvcnMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uRGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMudW5SZWdpc3RlckNvbnRyb2woKTtcbiAgICBpZiAodGhpcy5fdmFsaWRhdG9ycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyh7IGZvcm1EYXRhU3RhdGUgfTogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmZpZWxkICYmIGZvcm1EYXRhU3RhdGU/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnN0YXRpY0RlZmF1bHRWYWx1ZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBmaWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeyB2YWx1ZSwgaXNEeW5hbWljIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBpc0R5bmFtaWMgfSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZm9ybURhdGFTdGF0ZT8uY3VycmVudFZhbHVlKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBnZXRGb3JtRGF0YShcbiAgICAgICAgZm9ybURhdGFTdGF0ZS5jdXJyZW50VmFsdWUgYXMgRm9ybURhdGFTdGF0ZSxcbiAgICAgICAgdGhpcy5maWVsZC5wYXRoLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBwcmV2VmFsdWUgPSBnZXRGb3JtRGF0YShcbiAgICAgICAgZm9ybURhdGFTdGF0ZS5wcmV2aW91c1ZhbHVlIGFzIEZvcm1EYXRhU3RhdGUsXG4gICAgICAgIHRoaXMuZmllbGQucGF0aCxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgICAgY29uc3QgcmF3VmFsdWUgPSBpc0ltbXV0YWJsZShjdXJyZW50VmFsdWUpXG4gICAgICAgID8gY3VycmVudFZhbHVlLnRvSlMoKVxuICAgICAgICA6IGN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgIWlzRXF1YWwocmF3VmFsdWUsIHByZXZWYWx1ZSkgJiZcbiAgICAgICAgIWlzRXF1YWwocmF3VmFsdWUsIHRoaXMuY29udHJvbC52YWx1ZSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUocmF3VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZpZWxkQ3VycmVudFZhbHVlKCkge1xuICAgIGxldCB2YWx1ZSA9IGdldEZvcm1EYXRhKHRoaXMuZm9ybURhdGFTdGF0ZSwgdGhpcy5maWVsZC5wYXRoLCBmYWxzZSk7XG5cbiAgICAvLyDlpoLmnpzlgLzmmK8gSW1tdXRhYmxlIG9iamVjdCDnsbvlnovvvIzpnIDopoHovazmiJDljp/lp4sgSlMgT2JqZWN0XG4gICAgaWYgKGlzSW1tdXRhYmxlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b0pTKCkgYXMgRm9ybURhdGFTdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZ2V0RmllbGRWYWx1ZSh1c2VEZWZhdWx0ID0gdHJ1ZSkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRDdXJyZW50VmFsdWUoKTtcblxuICAgIGlmIChjdXJyZW50VmFsdWUgPT09IHVuZGVmaW5lZCAmJiB1c2VEZWZhdWx0KSB7XG4gICAgICByZXR1cm4gZ2V0RGVmYXVsdFZhbHVlKHRoaXMuZmllbGQpO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICB9XG5cbiAgZ2V0T3B0aW9uRGlzcGxheShcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgZGlzcGxheTogVHJhbnNsYXRpb24gfT4sXG4gICkge1xuICAgIHJldHVybiBvcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSk/LmRpc3BsYXk7XG4gIH1cblxuICBnZXRTZWxlY3RPcHRpb25zKGZpZWxkOiBPcGVyYW5kRmllbGQpIHtcbiAgICByZXR1cm4gZmllbGQuY2FwYWJpbGl0aWVzXG4gICAgICAuZmlsdGVyKGMgPT4gYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LnNlbGVjdCkpXG4gICAgICAubWFwKGMgPT4gYy5zcGxpdChTcGVjQ2FwYWJpbGl0eS5zZWxlY3QpPy5bMV0pO1xuICB9XG5cbiAgZ2V0RW5jb2RpbmcoZmllbGQ6IE9wZXJhbmRGaWVsZCwgdHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJlZml4ID0gYHVybjphbG06ZGVzY3JpcHRvcjoke3R5cGV9OmVuY29kaW5nOmA7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9IGZpZWxkLmNhcGFiaWxpdGllcy5maW5kKGl0ID0+IGl0LnN0YXJ0c1dpdGgocHJlZml4KSk7XG4gICAgbGV0IGVuY29kaW5nOiBFbmNvZGluZztcbiAgICBpZiAoY2FwYWJpbGl0eSkge1xuICAgICAgZW5jb2RpbmcgPSBFTkNPRElOR19NQVBQRVJbY2FwYWJpbGl0eS5zbGljZShwcmVmaXgubGVuZ3RoKV07XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBlbmNvZGluZyB8fCB7XG4gICAgICAgIGVuY29kZTogaWRlbnRpdHksXG4gICAgICAgIGRlY29kZTogaWRlbnRpdHksXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRmllbGREZXBlbmRlbmN5KCkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkLmNhcGFiaWxpdGllcy5zb21lKGMgPT5cbiAgICAgIGMuc3RhcnRzV2l0aChTcGVjQ2FwYWJpbGl0eS5maWVsZERlcGVuZGVuY3kpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRmllbGREZXBlbmRlbmN5KGZpZWxkOiBPcGVyYW5kRmllbGQpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gZmllbGQ/LmNhcGFiaWxpdGllc1xuICAgICAgICAuZmlsdGVyKGMgPT4gYy5zdGFydHNXaXRoKFNwZWNDYXBhYmlsaXR5LmZpZWxkRGVwZW5kZW5jeSkpXG4gICAgICAgIC5tYXAoaSA9PiBpLnNwbGl0KFNwZWNDYXBhYmlsaXR5LmZpZWxkRGVwZW5kZW5jeSlbMV0pO1xuICAgICAgaWYgKCFkZXBlbmRlbmNpZXM/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudFBhdGhzID0gZGVwZW5kZW5jaWVzLm1hcChkID0+IGQuc3BsaXQoJzonKSk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHBhcmVudFBhdGhzLmV2ZXJ5KChbcGF0aCwgLi4udmFsdWVzXSkgPT4ge1xuICAgICAgICAvLyBTdXBwb3J0IGRlcGVuZCBvbmUgb2YgdmFsdWVzXG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY3lGaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoXG4gICAgICAgICAgZiA9PiBmLnBhdGggPT09IG5vcm1hbGl6ZVBhdGgocGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVuY3lEZWZhdWx0VmFsdWUgPSBnZXREZWZhdWx0VmFsdWUoZGVwZW5kZW5jeUZpZWxkKTtcbiAgICAgICAgY29uc3QgZm9ybVN0YXRlVmFsdWUgPSBnZXRGb3JtRGF0YSh0aGlzLmZvcm1EYXRhU3RhdGUsIHBhdGgpO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPVxuICAgICAgICAgIGZvcm1TdGF0ZVZhbHVlID09PSBudWxsIHx8IGZvcm1TdGF0ZVZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZGVwZW5kZW5jeURlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgOiBmb3JtU3RhdGVWYWx1ZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5zb21lKFxuICAgICAgICAgIHZhbCA9PiBjb252ZXJ0VmFsdWUodmFsLCBkZXBlbmRlbmN5RmllbGQudHlwZSkgPT09IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIOeItiBmaWVsZCBkZXBlbmRlbmN5IOS4jea7oei2s+aXtu+8jOWNs+makOiXj+aXtu+8jOacrCBmaWVsZCDkuZ/lupTlvZPpmpDol4/jgIJcbiAgICAgICAqIOWboOS4uuWcqOWkp+mDqOWIhuaDheW9ouS4i++8jGZpZWxkRGVwZW5kZW5jeSDkuI4gb25lT2Yg5pCt6YWN5p2l5o+P6L+w5LiA57uE5YWz6IGU5YWz57O777yM5b6I5bCR5Y+q5pyJIGIg5LuF5L6d6LWW5LqOIGHvvIzlvZMgYSDpmpDol4/lkI7vvIzov5jopoHmoLnmja4gYSDnmoTpu5jorqTlgLzopoHmsYLmmL7npLogYiDnmoTmg4XlhrXvvIxcbiAgICAgICAqIOWvueS6juivpeaDheWGte+8jOWPr+S7peWkmuWKoOS4gOS4qumFjeWkh+S6humineWkliBmaWVsZERlcGVuZGVuY3kg55qEIERlc2NyaXB0b3Ig5p2l5o+P6L+wIGJcbiAgICAgICAqL1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcGFyZW50UGF0aHMuZXZlcnkoKFtwYXRoXSkgPT5cbiAgICAgICAgICB0aGlzLmNoZWNrRmllbGREZXBlbmRlbmN5KHRoaXMuZmllbGRzLmZpbmQoaSA9PiBpLnBhdGggPT09IHBhdGgpKSxcbiAgICAgICAgKSAmJiBzdGF0ZVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZHluYW1pY09wdGlvbnMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmZpZWxkJC5waXBlKFxuICAgIHN3aXRjaE1hcChmaWVsZCA9PiB7XG4gICAgICBjb25zdCBkeW5hbWljRXhwcmVzc2lvbiA9IG5ldyBQcm9wc0ZpZWxkRXhwcmVzc2lvbihmaWVsZCkuZXhwcmVzc2lvbnM7XG4gICAgICBpZiAoIWR5bmFtaWNFeHByZXNzaW9uLm9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIG9mKFxuICAgICAgICAgIHRoaXMuZ2V0U2VsZWN0T3B0aW9ucyhmaWVsZCkubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICBsYWJlbDogdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICB9KSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY3JkRm9ybS5mb3JtQ29udGV4dCQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIG4pID0+XG4gICAgICAgICAgY29tcGFyZVdpdGhTdWJzY3JpYmVkUGF0aHMoZHluYW1pY0V4cHJlc3Npb24sIHAsIG4pLFxuICAgICAgICApLFxuICAgICAgICB0YXAoKFtmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZV0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jcmRGb3JtLmRlYnVnKSB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSAgbm8tY29uc29sZSAqL1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdmaWVsZDogJyxcbiAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICdmb3JtQ29udGV4dDogJyxcbiAgICAgICAgICAgICAgZm9ybUNvbnRleHQsXG4gICAgICAgICAgICAgICdmb3JtRGF0YVN0YXRlOiAnLFxuICAgICAgICAgICAgICBmb3JtRGF0YVN0YXRlLnRvSlMoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKChbZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGVdKSA9PiB7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICAgIGNvbnN0IHsgYXBpLCBsYWJlbFBhdGgsIHZhbHVlUGF0aCwgZXhwcmVzc2lvbiB9ID1cbiAgICAgICAgICAgIGR5bmFtaWNFeHByZXNzaW9uLm9wdGlvbnM7XG4gICAgICAgICAgY29uc3Qgc3RyaW5nRXhwcmVzc2lvbkNvbnRleHQgPSB0aGlzLmdldFN0cmluZ0V4cHJlc3Npb25Db250ZXh0KFxuICAgICAgICAgICAgZm9ybUNvbnRleHQsXG4gICAgICAgICAgICBmb3JtRGF0YVN0YXRlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFhcGkgJiYgZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gZXZhbEluQ29udGV4dChleHByZXNzaW9uLCBzdHJpbmdFeHByZXNzaW9uQ29udGV4dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdFeHByZXNzaW9uQ29udGV4dC5mZXRjaFJlc291cmNlTGlzdChcbiAgICAgICAgICAgICAgdGVtcGxhdGUoYXBpKShzdHJpbmdFeHByZXNzaW9uQ29udGV4dCksXG4gICAgICAgICAgICAgIChpdGVtOiBTdHJpbmdNYXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChpdGVtLCB2YWx1ZVBhdGgsICcnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldChpdGVtLCBsYWJlbFBhdGgsIHZhbHVlKSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpc09ic2VydmFibGUocmVzdWx0KSA/IHJlc3VsdCA6IG9mKHJlc3VsdCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KSxcbiAgICBwdWJsaXNoUmVmKCksXG4gICk7XG5cbiAgc3RhdGljRGVmYXVsdFZhbHVlJCA9IHRoaXMuZmllbGQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSBuZXcgUHJvcHNGaWVsZEV4cHJlc3Npb24oZmllbGQpXG4gICAgICAgIC5leHByZXNzaW9ucztcbiAgICAgIGlmIChcbiAgICAgICAgIWRlZmF1bHRWYWx1ZUV4cHJlc3Npb24uZGVmYXVsdCB8fFxuICAgICAgICB0aGlzLmdldEZpZWxkQ3VycmVudFZhbHVlKCkgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvZih7XG4gICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0RmllbGRWYWx1ZSgpLFxuICAgICAgICAgIGlzRHluYW1pYzogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmNyZEZvcm0uZm9ybUNvbnRleHQkLFxuICAgICAgICB0aGlzLmZvcm1EYXRhU3RhdGUkLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIG4pID0+XG4gICAgICAgICAgY29tcGFyZVdpdGhTdWJzY3JpYmVkUGF0aHMoZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiwgcCwgbiksXG4gICAgICAgICksXG4gICAgICAgIG1hcCgoW2Zvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlXSkgPT5cbiAgICAgICAgICB0ZW1wbGF0ZShkZWZhdWx0VmFsdWVFeHByZXNzaW9uLmRlZmF1bHQpKFxuICAgICAgICAgICAgdGhpcy5nZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dChmb3JtQ29udGV4dCwgZm9ybURhdGFTdGF0ZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICAgbWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgaXNEeW5hbWljOiB0cnVlLFxuICAgICAgICB9KSksXG4gICAgICApO1xuICAgIH0pLFxuICAgIHB1Ymxpc2hSZWYoKSxcbiAgKTtcblxuICBkeW5hbWljSGlkZGVuVmFsdWUkID0gdGhpcy5maWVsZCQucGlwZShcbiAgICBzd2l0Y2hNYXAoZmllbGQgPT4ge1xuICAgICAgY29uc3QgeyBleHByZXNzaW9ucyB9ID0gbmV3IFByb3BzRmllbGRFeHByZXNzaW9uKGZpZWxkKTtcbiAgICAgIGlmICghZXhwcmVzc2lvbnMuaGlkZGVuKSB7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY3JkRm9ybS5mb3JtQ29udGV4dCQsXG4gICAgICAgIHRoaXMuZm9ybURhdGFTdGF0ZSQsXG4gICAgICBdKS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgbikgPT5cbiAgICAgICAgICBjb21wYXJlV2l0aFN1YnNjcmliZWRQYXRocyhleHByZXNzaW9ucywgcCwgbiksXG4gICAgICAgICksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoW2Zvcm1Db250ZXh0LCBmb3JtRGF0YVN0YXRlXSkgPT5cbiAgICAgICAgICAgIHRlbXBsYXRlKGV4cHJlc3Npb25zLmhpZGRlbikoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RyaW5nRXhwcmVzc2lvbkNvbnRleHQoZm9ybUNvbnRleHQsIGZvcm1EYXRhU3RhdGUpLFxuICAgICAgICAgICAgKSA9PT0gJ3RydWUnLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcblxuICBnZXRTdHJpbmdFeHByZXNzaW9uQ29udGV4dCA9IChcbiAgICBmb3JtQ29udGV4dDogYW55LFxuICAgIGZvcm1EYXRhU3RhdGU6IEZvcm1EYXRhU3RhdGUsXG4gICkgPT4gKHtcbiAgICBmZXRjaFJlc291cmNlTGlzdDogdGhpcy5mZXRjaFJlc291cmNlTGlzdCxcbiAgICBjb250ZXh0OiBmb3JtQ29udGV4dCB8fCB7fSxcbiAgICBmb3JtRGF0YTogZm9ybURhdGFTdGF0ZS50b0pTKCk/LnNwZWMgfHwge30sXG4gIH0pO1xuXG4gIGZldGNoUmVzb3VyY2VMaXN0ID0gKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAocmVzb3VyY2U6IEt1YmVybmV0ZXNSZXNvdXJjZSkgPT4gdm9pZCxcbiAgKSA9PiB7XG4gICAgLy8g5L6L5aaCICcva3ViZXJuZXRlcy9nbG9iYWwvYXBpL3YxL25hbWVzcGFjZXMvL3NlY3JldHMnIOihqOekuiBmb3JtRGF0YS5uYW1lc3BhY2Ug5rKh5pyJ5o+S5YC8XG4gICAgaWYgKHVybC5pbmNsdWRlcygnLy8nKSkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8eyBpdGVtczogS3ViZXJuZXRlc1Jlc291cmNlW10gfT4oYCR7QVBJX0dBVEVXQVl9JHt1cmx9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcy5pdGVtcy5tYXAoaXRlbSA9PiBjYWxsYmFjay5jYWxsKHRoaXMsIGl0ZW0pKSksXG4gICAgICAgIHNraXBFcnJvcihbXSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH07XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZmllbGRcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwie1xuICAgICAgZmllbGRUeXBlOiBmaWVsZCB8IHB1cmU6IGdldEZpZWxkVHlwZSxcbiAgICAgIGlzQmFzaWNUeXBlRmllbGQ6IGZpZWxkIHwgcHVyZTogaXNCYXNpY1R5cGVGaWVsZCxcbiAgICB9IGFzIG1ldGFcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1ldGEuaXNCYXNpY1R5cGVGaWVsZDsgZWxzZSBhZHZhbmNlZEZpbGVkXCI+XG4gICAgICA8YWNsLWNyZC1mb3JtLWl0ZW1cbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAhKGZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFdpZGdldHMpICYmXG4gICAgICAgICAgIShmaWVsZCB8IHB1cmU6IGlzUmVtb3RlRmllbGQpXG4gICAgICAgIFwiXG4gICAgICAgIFtuZ1N3aXRjaF09XCJtZXRhLmZpZWxkVHlwZVwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5udW1iZXJcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LmJvb2xlYW5Td2l0Y2hcIj5cbiAgICAgICAgICA8YXVpLXN3aXRjaFxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwic3dpdGNoUmVhZG9ubHlcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgID48L2F1aS1zd2l0Y2g+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzd2l0Y2hSZWFkb25seT57e1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICB8IHB1cmU6IGNvbnZlcnRCb29sZWFuU3dpdGNoVmFsdWUgOiBmaWVsZC5jYXBhYmlsaXRpZXNcbiAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS5zZWxlY3RcIj5cbiAgICAgICAgICA8YXVpLW11bHRpLXNlbGVjdFxuICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpcGxlXCJcbiAgICAgICAgICAgIFttYXhSb3dDb3VudF09XCIzXCJcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFthbGxvd0NyZWF0ZV09XCJpc0FsbG93Q3JlYXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLW9wdGlvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGR5bmFtaWNPcHRpb25zJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgIDwvYXVpLW9wdGlvbj5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uLXBsYWNlaG9sZGVyPnt7XG4gICAgICAgICAgICAgICdub19kYXRhJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX08L2F1aS1vcHRpb24tcGxhY2Vob2xkZXI+XG4gICAgICAgICAgPC9hdWktbXVsdGktc2VsZWN0PlxuXG4gICAgICAgICAgPGF1aS1zZWxlY3RcbiAgICAgICAgICAgICpuZ0lmPVwiIWlzTXVsdGlwbGVcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2FsbG93Q3JlYXRlXT1cImlzQWxsb3dDcmVhdGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxhdWktb3B0aW9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZHluYW1pY09wdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIm9wdGlvbi5sYWJlbCB8IGFjbFBhcnNlSnNvblRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB8IGFjbFBhcnNlSnNvblRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hdWktb3B0aW9uPlxuICAgICAgICAgICAgPGF1aS1vcHRpb24tcGxhY2Vob2xkZXI+e3tcbiAgICAgICAgICAgICAgJ25vX2RhdGEnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fTwvYXVpLW9wdGlvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8L2F1aS1zZWxlY3Q+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YXVpLXJhZGlvLWdyb3VwXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIlNwZWNDYXBhYmlsaXR5LnJhZGlvXCJcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkVGVtcGxhdGVdPVwicmFkaW9MYWJlbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGF1aS1yYWRpby1idXR0b25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWVsZC5jYXBhYmlsaXRpZXMgfCBwdXJlOiBnZXRSYWRpb09wdGlvbnNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgb3B0aW9uLmRpc3BsYXkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYXVpLXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmFkaW9MYWJlbD5cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBjb250cm9sLnZhbHVlXG4gICAgICAgICAgICAgICAgICB8IHB1cmVcbiAgICAgICAgICAgICAgICAgICAgOiBnZXRPcHRpb25EaXNwbGF5XG4gICAgICAgICAgICAgICAgICAgIDogKGZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFJhZGlvT3B0aW9ucylcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2F1aS1yYWRpby1ncm91cD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkucmVzb3VyY2VSZXF1aXJlbWVudHNcIj5cbiAgICAgICAgICA8YWNsLWNyZC1yZXNvdXJjZS1yZXF1aXJlbWVudHNcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZFRlbXBsYXRlXT1cInJlc291cmNlUmVxdWlyZW1lbnRzUmVhZG9ubHlcIlxuICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVzb3VyY2VSZXF1aXJlbWVudHNSZWFkb25seT5cbiAgICAgICAgICAgIDxhY2wtY3JkLXJlc291cmNlLXJlcXVpcmVtZW50c1xuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgID48L2FjbC1jcmQtcmVzb3VyY2UtcmVxdWlyZW1lbnRzPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJTcGVjQ2FwYWJpbGl0eS55YW1sXCI+XG4gICAgICAgICAgPGFjbC1jcmQteWFtbC1lZGl0b3JcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgICAgW2FjdGlvbnNDb25maWddPVwiZWRpdG9yQWN0aW9uc1wiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJlZGl0b3JPcHRpb25zXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRUZW1wbGF0ZV09XCJ5YW1sUmVhZG9ubHlcIlxuICAgICAgICAgID48L2FjbC1jcmQteWFtbC1lZGl0b3I+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICN5YW1sUmVhZG9ubHk+XG4gICAgICAgICAgICA8YWNsLWNyZC15YW1sLWVkaXRvclxuICAgICAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICAgIFthY3Rpb25zQ29uZmlnXT1cInZpZXdBY3Rpb25zXCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwidmlld09wdGlvbnNcIlxuICAgICAgICAgICAgPjwvYWNsLWNyZC15YW1sLWVkaXRvcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkuazhzUmVzb3VyY2VQcmVmaXhcIj5cbiAgICAgICAgICA8YWNsLWNyZC1yZXNvdXJjZS1wcmVmaXhcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2Zvcm1FcnJvcnNdPVwiY29udHJvbC5lcnJvcnNcIlxuICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRUZW1wbGF0ZV09XCJyZXNvdXJjZVByZWZpeFJlYWRvbmx5XCJcbiAgICAgICAgICA+PC9hY2wtY3JkLXJlc291cmNlLXByZWZpeD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3Jlc291cmNlUHJlZml4UmVhZG9ubHk+XG4gICAgICAgICAgICA8YWNsLWNyZC1yZXNvdXJjZS1wcmVmaXhcbiAgICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImNvbnRyb2wudmFsdWVcIlxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICA+PC9hY2wtY3JkLXJlc291cmNlLXByZWZpeD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkuYmFzaWNBdXRoU2VjcmV0XCI+XG4gICAgICAgICAgPGFjbC1jcmQtYmFzaWMtYXV0aC1zZWNyZXRcbiAgICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFthY2xSZWFkb25seUZpZWxkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgID48L2FjbC1jcmQtYmFzaWMtYXV0aC1zZWNyZXQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkudGV4dGFyZWFcIlxuICAgICAgICAgIGF1aUZvcm1JdGVtQ29udHJvbFxuICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgIFtyZXF1aXJlZF09XCJpc1JlcXVpcmVkXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8YXVpLXRhZ3MtaW5wdXRcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiU3BlY0NhcGFiaWxpdHkudGFnc0lucHV0XCJcbiAgICAgICAgICBhdWlGb3JtSXRlbUNvbnRyb2xcbiAgICAgICAgICBjbGFzcz1cInR3LWZsZXgtMVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cImlzUmVxdWlyZWRcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQgfCBwdXJlOiBnZXRGaWVsZFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYWNsUmVhZG9ubHlGaWVsZF09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICBbY2xlYXJhYmxlXT1cImlzQ2xlYXJhYmxlXCJcbiAgICAgICAgPjwvYXVpLXRhZ3MtaW5wdXQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICA8YWNsLWNyZC1saW5rXG4gICAgICAgICAgICAqbmdJZj1cIihmaWVsZCB8IHB1cmU6IGlzTGluaykgJiYgaXNEaXNhYmxlZDsgZWxzZSB0ZXh0RmllbGRcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgID48L2FjbC1jcmQtbGluaz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGV4dEZpZWxkPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgYXVpRm9ybUl0ZW1Db250cm9sXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2FjbFJlYWRvbmx5RmllbGRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvYWNsLWNyZC1mb3JtLWl0ZW0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHctZmxleCB0dy13LWZ1bGwgdHctZmxleC1jb2xcIlxuICAgICAgICAqbmdJZj1cImZpZWxkLmNhcGFiaWxpdGllcyB8IHB1cmU6IGdldFdpZGdldHMgYXMgd2lkZ2V0XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJ3aWRnZXQuY29tcG9uZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZCB8IHB1cmU6IGlzUmVtb3RlRmllbGRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlbW90ZU1vZHVsZSQgfCBhc3luYyBhcyByZW1vdGVNb2R1bGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGREaXNwbGF5TmFtZSBhcyBsYWJlbDsgZWxzZSBwdXJlUmVtb3RlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YXVpLWZvcm0taXRlbSBbZW1wdHlBZGRvbl09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBhdWlGb3JtSXRlbUxhYmVsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGlzcGxheU5hbWUgYXMgbGFiZWxcIlxuICAgICAgICAgICAgICAgID57eyBsYWJlbCB8IHRyYW5zbGF0ZSB9fTwvbGFiZWxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICByZW1vdGVNb2R1bGUuY29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgaW5qZWN0b3I6IHJlbW90ZU1vZHVsZS5pbmplY3RvclxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBhdWlGb3JtSXRlbUhpbnQ+XG4gICAgICAgICAgICAgICAge3sgZmllbGQgfCBwdXJlOiBnZXRGaWVsZERlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hdWktZm9ybS1pdGVtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHVyZVJlbW90ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nQ29tcG9uZW50T3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgcmVtb3RlTW9kdWxlLmNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBpbmplY3RvcjogcmVtb3RlTW9kdWxlLmluamVjdG9yXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXJcbiAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2FkdmFuY2VkRmlsZWQ+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LnBhc3N3b3JkIHx8XG4gICAgICAgICAgbWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZCB8fFxuICAgICAgICAgIG1ldGEuZmllbGRUeXBlID09PSBTcGVjQ2FwYWJpbGl0eS5leHRlcm5hbFBhc3N3b3JkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxhY2wtY3JkLWZvcm0taXRlbVxuICAgICAgICAgICpuZ0lmPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhc3N3b3JkVmlld1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2FjbC1jcmQtZm9ybS1pdGVtPlxuICAgICAgICA8YWNsLXBhc3N3b3JkLWlucHV0XG4gICAgICAgICAgKm5nSWY9XCIhaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2luaXRQYXNzd29yZF09XCJjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICBbbGFiZWxdPVwiZmllbGQgfCBwdXJlOiBnZXRGaWVsZERpc3BsYXlOYW1lIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaGludF09XCJmaWVsZCB8IHB1cmU6IGdldEZpZWxkRGVzY3JpcHRpb24gfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNSZXF1aXJlZFwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cImNyZEZvcm0ucmVhZG9ubHlcIlxuICAgICAgICAgIFtpc1VwZGF0ZV09XCIhIWNvbnRyb2wudmFsdWUgJiYgIWNvbnRyb2wuZGlydHlcIlxuICAgICAgICAgIFtzdHJvbmdQYXNzd29yZF09XCJtZXRhLmZpZWxkVHlwZSAhPT0gU3BlY0NhcGFiaWxpdHkuZXh0ZXJuYWxQYXNzd29yZFwiXG4gICAgICAgICAgW2VuYWJsZUNvbmZpcm1dPVwibWV0YS5maWVsZFR5cGUgPT09IFNwZWNDYXBhYmlsaXR5LmNvbmZpcm1QYXNzd29yZFwiXG4gICAgICAgICAgd2lkdGg9XCJsYXJnZVwiXG4gICAgICAgICAgW2VuY29kaW5nXT1cImZpZWxkIHwgcHVyZTogZ2V0RW5jb2RpbmcgOiAncGFzc3dvcmQnXCJcbiAgICAgICAgICBbcGF0dGVybl09XCJmaWVsZC52YWxpZGF0aW9ucz8ucGF0dGVyblwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkIHwgcHVyZTogZ2V0RmllbGRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L2FjbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBncm91cCBmaWVsZCAgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHcm91cEZpZWxkKGZpZWxkKSAmJiBmaWVsZC5maWVsZExpc3Q/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGFjbC1vcGVyYW5kLWZpZWxkLWdyb3VwXG4gICAgICAgICAgW2ZpZWxkc109XCJmaWVsZHNcIlxuICAgICAgICAgIFtmaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgICAgW2Zvcm1EYXRhU3RhdGVdPVwiZm9ybURhdGFTdGF0ZVwiXG4gICAgICAgICAgW2Zvcm1FcnJvcnNdPVwiZm9ybUVycm9yc1wiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9hY2wtb3BlcmFuZC1maWVsZC1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPCEtLSBhcnJheSBmaWVsZCBncm91cHMgLS0+XG4gICAgICA8IS0tIGFycmF5IGZpZWxkIHRhYmxlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQXJyYXlGaWVsZChmaWVsZClcIj5cbiAgICAgICAgPGFjbC1jcmQtYXJyYXktdGFibGVcbiAgICAgICAgICAqbmdJZj1cImZpZWxkIHwgcHVyZTogaXNBcnJheUZpZWxkVGFibGU7IGVsc2UgZGVmYXVsdEFycmF5RmlsZWRcIlxuICAgICAgICAgIFthcnJheUZpZWxkR3JvdXBdPVwiZmllbGRcIlxuICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FjbC1jcmQtYXJyYXktdGFibGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFycmF5RmlsZWQ+XG4gICAgICAgICAgPGFjbC1vcGVyYW5kLWFycmF5LWZpZWxkLWdyb3VwXG4gICAgICAgICAgICBbYXJyYXlGaWVsZEdyb3VwXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtmb3JtRGF0YVN0YXRlXT1cImZvcm1EYXRhU3RhdGVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYWNsLW9wZXJhbmQtYXJyYXktZmllbGQtZ3JvdXA+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3Bhc3N3b3JkVmlldz5cbiAge3sgUEFTU1dPUkRfUkVWRUFMIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|