@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.
Files changed (99) hide show
  1. package/README.md +7 -0
  2. package/fesm2022/alauda-fe-crd-form.mjs +3088 -0
  3. package/fesm2022/alauda-fe-crd-form.mjs.map +1 -0
  4. package/package.json +12 -14
  5. package/types/alauda-fe-crd-form.d.ts +934 -0
  6. package/esm2022/alauda-fe-crd-form.mjs +0 -5
  7. package/esm2022/lib/abstract/base-array.mjs +0 -117
  8. package/esm2022/lib/crd-form/component.mjs +0 -325
  9. package/esm2022/lib/crd-form/helper.mjs +0 -32
  10. package/esm2022/lib/crd-form.module.mjs +0 -115
  11. package/esm2022/lib/field-controls/expressions/expression-core.mjs +0 -2
  12. package/esm2022/lib/field-controls/expressions/props-expression.mjs +0 -58
  13. package/esm2022/lib/field-controls/form-item.component.mjs +0 -215
  14. package/esm2022/lib/field-controls/index.mjs +0 -8
  15. package/esm2022/lib/field-controls/module.mjs +0 -143
  16. package/esm2022/lib/field-controls/operand-advanced-field-group.component.mjs +0 -80
  17. package/esm2022/lib/field-controls/operand-array-field-group.component.mjs +0 -112
  18. package/esm2022/lib/field-controls/operand-field-group.component.mjs +0 -88
  19. package/esm2022/lib/field-controls/operand-field.component.mjs +0 -877
  20. package/esm2022/lib/field-controls/widgets/array-table/component.mjs +0 -109
  21. package/esm2022/lib/field-controls/widgets/basic-auth-secret/component.mjs +0 -116
  22. package/esm2022/lib/field-controls/widgets/basic-auth-secret/create/component.mjs +0 -211
  23. package/esm2022/lib/field-controls/widgets/basic-auth-secret/type.mjs +0 -2
  24. package/esm2022/lib/field-controls/widgets/index.mjs +0 -8
  25. package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/component.mjs +0 -169
  26. package/esm2022/lib/field-controls/widgets/k8s-resource-prefix/util.mjs +0 -40
  27. package/esm2022/lib/field-controls/widgets/link/component.mjs +0 -68
  28. package/esm2022/lib/field-controls/widgets/resource-requirements/resource-requirements.component.mjs +0 -521
  29. package/esm2022/lib/field-controls/widgets/utils.mjs +0 -73
  30. package/esm2022/lib/field-controls/widgets/yaml-editor/yaml-editor.component.mjs +0 -94
  31. package/esm2022/lib/field-widgets/htpasswd/component.mjs +0 -40
  32. package/esm2022/lib/field-widgets/htpasswd/form.mjs +0 -240
  33. package/esm2022/lib/field-widgets/htpasswd/index.mjs +0 -4
  34. package/esm2022/lib/field-widgets/htpasswd/module.mjs +0 -54
  35. package/esm2022/lib/field-widgets/htpasswd/utils.mjs +0 -38
  36. package/esm2022/lib/field-widgets/index.mjs +0 -2
  37. package/esm2022/lib/remote-widgets/constants.mjs +0 -4
  38. package/esm2022/lib/remote-widgets/index.mjs +0 -4
  39. package/esm2022/lib/remote-widgets/remote-widget.service.mjs +0 -42
  40. package/esm2022/lib/remote-widgets/token.mjs +0 -7
  41. package/esm2022/lib/spec-descriptors/capability/capability.component.mjs +0 -139
  42. package/esm2022/lib/spec-descriptors/capability-list/capability-list.component.mjs +0 -189
  43. package/esm2022/lib/spec-descriptors/index.mjs +0 -4
  44. package/esm2022/lib/spec-descriptors/util.mjs +0 -13
  45. package/esm2022/lib/types/index.mjs +0 -89
  46. package/esm2022/lib/utils/capability.mjs +0 -306
  47. package/esm2022/lib/utils/constant.mjs +0 -22
  48. package/esm2022/lib/utils/helper.mjs +0 -196
  49. package/esm2022/lib/utils/index.mjs +0 -6
  50. package/esm2022/lib/utils/service-model.mjs +0 -12
  51. package/esm2022/lib/utils/util.mjs +0 -307
  52. package/esm2022/public-api.mjs +0 -13
  53. package/index.d.ts +0 -5
  54. package/lib/abstract/base-array.d.ts +0 -31
  55. package/lib/crd-form/component.d.ts +0 -58
  56. package/lib/crd-form/helper.d.ts +0 -7
  57. package/lib/crd-form.module.d.ts +0 -15
  58. package/lib/field-controls/expressions/expression-core.d.ts +0 -6
  59. package/lib/field-controls/expressions/props-expression.d.ts +0 -36
  60. package/lib/field-controls/form-item.component.d.ts +0 -19
  61. package/lib/field-controls/index.d.ts +0 -7
  62. package/lib/field-controls/module.d.ts +0 -23
  63. package/lib/field-controls/operand-advanced-field-group.component.d.ts +0 -16
  64. package/lib/field-controls/operand-array-field-group.component.d.ts +0 -8
  65. package/lib/field-controls/operand-field-group.component.d.ts +0 -21
  66. package/lib/field-controls/operand-field.component.d.ts +0 -109
  67. package/lib/field-controls/widgets/array-table/component.d.ts +0 -8
  68. package/lib/field-controls/widgets/basic-auth-secret/component.d.ts +0 -26
  69. package/lib/field-controls/widgets/basic-auth-secret/create/component.d.ts +0 -45
  70. package/lib/field-controls/widgets/basic-auth-secret/type.d.ts +0 -11
  71. package/lib/field-controls/widgets/index.d.ts +0 -7
  72. package/lib/field-controls/widgets/k8s-resource-prefix/component.d.ts +0 -35
  73. package/lib/field-controls/widgets/k8s-resource-prefix/util.d.ts +0 -3
  74. package/lib/field-controls/widgets/link/component.d.ts +0 -20
  75. package/lib/field-controls/widgets/resource-requirements/resource-requirements.component.d.ts +0 -85
  76. package/lib/field-controls/widgets/utils.d.ts +0 -17
  77. package/lib/field-controls/widgets/yaml-editor/yaml-editor.component.d.ts +0 -36
  78. package/lib/field-widgets/htpasswd/component.d.ts +0 -9
  79. package/lib/field-widgets/htpasswd/form.d.ts +0 -34
  80. package/lib/field-widgets/htpasswd/index.d.ts +0 -3
  81. package/lib/field-widgets/htpasswd/module.d.ts +0 -13
  82. package/lib/field-widgets/htpasswd/utils.d.ts +0 -15
  83. package/lib/field-widgets/index.d.ts +0 -1
  84. package/lib/remote-widgets/constants.d.ts +0 -3
  85. package/lib/remote-widgets/index.d.ts +0 -3
  86. package/lib/remote-widgets/remote-widget.service.d.ts +0 -28
  87. package/lib/remote-widgets/token.d.ts +0 -3
  88. package/lib/spec-descriptors/capability/capability.component.d.ts +0 -20
  89. package/lib/spec-descriptors/capability-list/capability-list.component.d.ts +0 -34
  90. package/lib/spec-descriptors/index.d.ts +0 -3
  91. package/lib/spec-descriptors/util.d.ts +0 -4
  92. package/lib/types/index.d.ts +0 -136
  93. package/lib/utils/capability.d.ts +0 -62
  94. package/lib/utils/constant.d.ts +0 -12
  95. package/lib/utils/helper.d.ts +0 -58
  96. package/lib/utils/index.d.ts +0 -5
  97. package/lib/utils/service-model.d.ts +0 -44
  98. package/lib/utils/util.d.ts +0 -44
  99. 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