@abgov/angular-components 3.0.0-alpha.1 → 3.0.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -7
- package/esm2022/index.mjs +4 -1
- package/esm2022/lib/angular-components.module.mjs +4 -4
- package/esm2022/lib/checked-directive.mjs +7 -6
- package/esm2022/lib/components/accordion/accordion.mjs +91 -0
- package/esm2022/lib/components/badge/badge.mjs +60 -0
- package/esm2022/lib/components/block/block.mjs +58 -0
- package/esm2022/lib/components/button/button.mjs +85 -0
- package/esm2022/lib/components/button-group/button-group.mjs +54 -0
- package/esm2022/lib/components/callout/callout.mjs +77 -0
- package/esm2022/lib/components/card/card.mjs +54 -0
- package/esm2022/lib/components/card-actions/card-actions.mjs +24 -0
- package/esm2022/lib/components/card-content/card-content.mjs +24 -0
- package/esm2022/lib/components/card-image/card-image.mjs +36 -0
- package/esm2022/lib/components/checkbox/checkbox.mjs +147 -0
- package/esm2022/lib/components/chip/chip.mjs +77 -0
- package/esm2022/lib/components/circular-progress/circular-progress.mjs +48 -0
- package/esm2022/lib/components/column-layout/column-layout.mjs +24 -0
- package/esm2022/lib/components/container/container.mjs +86 -0
- package/esm2022/lib/components/date-picker/date-picker.mjs +123 -0
- package/esm2022/lib/components/details/details.mjs +59 -0
- package/esm2022/lib/components/divider/divider.mjs +44 -0
- package/esm2022/lib/components/dropdown/dropdown.mjs +153 -0
- package/esm2022/lib/components/dropdown-item/dropdown-item.mjs +44 -0
- package/esm2022/lib/components/file-upload-card/file-upload-card.mjs +63 -0
- package/esm2022/lib/components/file-upload-input/file-upload-input.mjs +70 -0
- package/esm2022/lib/components/footer/footer.mjs +38 -0
- package/esm2022/lib/components/footer-meta-section/footer-meta-section.mjs +24 -0
- package/esm2022/lib/components/footer-nav-section/footer-nav-section.mjs +39 -0
- package/esm2022/lib/components/form-item/form-item-slot.mjs +24 -0
- package/esm2022/lib/components/form-item/form-item.mjs +76 -0
- package/esm2022/lib/components/form-step/form-step.mjs +28 -0
- package/esm2022/lib/components/form-stepper/form-stepper.mjs +62 -0
- package/esm2022/lib/components/grid/grid.mjs +55 -0
- package/esm2022/lib/components/header/header.mjs +58 -0
- package/esm2022/lib/components/header-menu/header-menu.mjs +38 -0
- package/esm2022/lib/components/hero-banner/hero-banner.mjs +64 -0
- package/esm2022/lib/components/icon/icon.mjs +81 -0
- package/esm2022/lib/components/icon-button/icon-button.mjs +82 -0
- package/esm2022/lib/components/index.mjs +59 -0
- package/esm2022/lib/components/input/input.mjs +232 -0
- package/esm2022/lib/components/microsite-header/microsite-header.mjs +81 -0
- package/esm2022/lib/components/modal/modal.mjs +93 -0
- package/esm2022/lib/components/notification-banner/notification-banner.mjs +53 -0
- package/esm2022/lib/components/pages/pages.mjs +46 -0
- package/esm2022/lib/components/pagination/pagination.mjs +75 -0
- package/esm2022/lib/components/popover/popover.mjs +81 -0
- package/esm2022/lib/components/radio-group/radio-group.mjs +116 -0
- package/esm2022/lib/components/radio-item/radio-item.mjs +94 -0
- package/esm2022/lib/components/side-menu/side-menu.mjs +26 -0
- package/esm2022/lib/components/side-menu-group/side-menu-group.mjs +55 -0
- package/esm2022/lib/components/side-menu-heading/side-menu-heading.mjs +38 -0
- package/esm2022/lib/components/skeleton/skeleton.mjs +64 -0
- package/esm2022/lib/components/spacer/spacer.mjs +36 -0
- package/esm2022/lib/components/tab/tab.mjs +44 -0
- package/esm2022/lib/components/table/table.mjs +69 -0
- package/esm2022/lib/components/table-sort-header/table-sort-header.mjs +37 -0
- package/esm2022/lib/components/tabs/tabs.mjs +47 -0
- package/esm2022/lib/components/textarea/textarea.mjs +153 -0
- package/esm2022/lib/components/tooltip/tooltip.mjs +58 -0
- package/esm2022/lib/public-form-utils.mjs +34 -0
- package/esm2022/lib/validation.mjs +205 -0
- package/esm2022/lib/value-directive.mjs +20 -8
- package/fesm2022/abgov-angular-components.mjs +3813 -18
- package/fesm2022/abgov-angular-components.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/lib/components/accordion/accordion.d.ts +21 -0
- package/lib/components/badge/badge.d.ts +15 -0
- package/lib/components/block/block.d.ts +14 -0
- package/lib/components/button/button.d.ts +21 -0
- package/lib/components/button-group/button-group.d.ts +13 -0
- package/lib/components/callout/callout.d.ts +17 -0
- package/lib/components/card/card.d.ts +13 -0
- package/lib/components/card-actions/card-actions.d.ts +5 -0
- package/lib/components/card-content/card-content.d.ts +5 -0
- package/lib/components/card-image/card-image.d.ts +7 -0
- package/lib/components/checkbox/checkbox.d.ts +35 -0
- package/lib/components/chip/chip.d.ts +20 -0
- package/lib/components/circular-progress/circular-progress.d.ts +12 -0
- package/lib/components/column-layout/column-layout.d.ts +5 -0
- package/lib/components/container/container.d.ts +19 -0
- package/lib/components/date-picker/date-picker.d.ts +33 -0
- package/lib/components/details/details.d.ts +14 -0
- package/lib/components/divider/divider.d.ts +11 -0
- package/lib/components/dropdown/dropdown.d.ts +38 -0
- package/lib/components/dropdown-item/dropdown-item.d.ts +11 -0
- package/lib/components/file-upload-card/file-upload-card.d.ts +17 -0
- package/lib/components/file-upload-input/file-upload-input.d.ts +18 -0
- package/lib/components/footer/footer.d.ts +7 -0
- package/lib/components/footer-meta-section/footer-meta-section.d.ts +8 -0
- package/lib/components/footer-nav-section/footer-nav-section.d.ts +10 -0
- package/lib/components/form-item/form-item-slot.d.ts +6 -0
- package/lib/components/form-item/form-item.d.ts +18 -0
- package/lib/components/form-step/form-step.d.ts +8 -0
- package/lib/components/form-stepper/form-stepper.d.ts +15 -0
- package/lib/components/grid/grid.d.ts +13 -0
- package/lib/components/header/header.d.ts +13 -0
- package/lib/components/header-menu/header-menu.d.ts +9 -0
- package/lib/components/hero-banner/hero-banner.d.ts +14 -0
- package/lib/components/icon/icon.d.ts +19 -0
- package/lib/components/icon-button/icon-button.d.ts +20 -0
- package/lib/components/index.d.ts +58 -0
- package/lib/components/input/input.d.ts +56 -0
- package/lib/components/microsite-header/microsite-header.d.ts +18 -0
- package/lib/components/modal/modal.d.ts +20 -0
- package/lib/components/notification-banner/notification-banner.d.ts +13 -0
- package/lib/components/pages/pages.d.ts +11 -0
- package/lib/components/pagination/pagination.d.ts +18 -0
- package/lib/components/popover/popover.d.ts +18 -0
- package/lib/components/radio-group/radio-group.d.ts +29 -0
- package/lib/components/radio-item/radio-item.d.ts +22 -0
- package/lib/components/side-menu/side-menu.d.ts +6 -0
- package/lib/components/side-menu-group/side-menu-group.d.ts +13 -0
- package/lib/components/side-menu-heading/side-menu-heading.d.ts +10 -0
- package/lib/components/skeleton/skeleton.d.ts +15 -0
- package/lib/components/spacer/spacer.d.ts +9 -0
- package/lib/components/tab/tab.d.ts +9 -0
- package/lib/components/table/table.d.ts +16 -0
- package/lib/components/table-sort-header/table-sort-header.d.ts +8 -0
- package/lib/components/tabs/tabs.d.ts +11 -0
- package/lib/components/textarea/textarea.d.ts +38 -0
- package/lib/components/tooltip/tooltip.d.ts +14 -0
- package/lib/public-form-utils.d.ts +18 -0
- package/lib/validation.d.ts +44 -0
- package/lib/value-directive.d.ts +3 -0
- package/package.json +5 -4
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
2
|
+
export function validate(field, fieldsetEl, fieldsetState, validators) {
|
|
3
|
+
const value = fieldsetState?.[field]?.value;
|
|
4
|
+
for (const validator of validators) {
|
|
5
|
+
const msg = validator(value);
|
|
6
|
+
if (msg) {
|
|
7
|
+
dispatchError(fieldsetEl, field, msg);
|
|
8
|
+
return [false, ""];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return [true, value];
|
|
12
|
+
}
|
|
13
|
+
// TODO: move this into the form-utils file, since it is specific to the public form component
|
|
14
|
+
function dispatchError(el, name, msg) {
|
|
15
|
+
el.dispatchEvent(new CustomEvent("msg", {
|
|
16
|
+
composed: true,
|
|
17
|
+
detail: {
|
|
18
|
+
action: "external::set:error",
|
|
19
|
+
data: {
|
|
20
|
+
name,
|
|
21
|
+
msg,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
export class FormValidator {
|
|
27
|
+
constructor(validators) {
|
|
28
|
+
this.validators = validators || {};
|
|
29
|
+
}
|
|
30
|
+
add(fieldName, ...validators) {
|
|
31
|
+
this.validators[fieldName] = validators;
|
|
32
|
+
}
|
|
33
|
+
validate(data) {
|
|
34
|
+
const errors = {};
|
|
35
|
+
Object.entries(this.validators).forEach(([name, validators]) => {
|
|
36
|
+
const err = validators
|
|
37
|
+
.map((validatorFn) => {
|
|
38
|
+
const errMsg = validatorFn(data[name]);
|
|
39
|
+
return errMsg;
|
|
40
|
+
})
|
|
41
|
+
.find((msg) => !!msg);
|
|
42
|
+
if (err) {
|
|
43
|
+
errors[name] = err;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return errors;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// **********
|
|
50
|
+
// Validators
|
|
51
|
+
// **********
|
|
52
|
+
export function birthDayValidator() {
|
|
53
|
+
return [
|
|
54
|
+
requiredValidator("Day is required"),
|
|
55
|
+
numericValidator({
|
|
56
|
+
min: 1,
|
|
57
|
+
max: 31,
|
|
58
|
+
minMsg: "Day must be between 1 and 31",
|
|
59
|
+
maxMsg: "Day must be between 1 and 31",
|
|
60
|
+
}),
|
|
61
|
+
];
|
|
62
|
+
}
|
|
63
|
+
export function birthMonthValidator() {
|
|
64
|
+
return [
|
|
65
|
+
requiredValidator("Month is required"),
|
|
66
|
+
numericValidator({
|
|
67
|
+
min: 0,
|
|
68
|
+
max: 11,
|
|
69
|
+
minMsg: "Month must be between Jan and Dec",
|
|
70
|
+
maxMsg: "Month must be between Jan and Dec",
|
|
71
|
+
}),
|
|
72
|
+
];
|
|
73
|
+
}
|
|
74
|
+
export function birthYearValidator() {
|
|
75
|
+
const maxYear = new Date().getFullYear();
|
|
76
|
+
return [
|
|
77
|
+
requiredValidator("Year is required"),
|
|
78
|
+
numericValidator({
|
|
79
|
+
min: 1900,
|
|
80
|
+
max: maxYear,
|
|
81
|
+
minMsg: "Year must be greater than 1900",
|
|
82
|
+
maxMsg: `Year must be less than ${maxYear}`,
|
|
83
|
+
}),
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
export function requiredValidator(msg) {
|
|
87
|
+
return (value) => {
|
|
88
|
+
msg = msg || "Required";
|
|
89
|
+
if (typeof value === "number" && !isNaN(value)) {
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
if (value) {
|
|
93
|
+
return "";
|
|
94
|
+
}
|
|
95
|
+
return msg;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export function phoneNumberValidator(msg) {
|
|
99
|
+
const regex = new RegExp(/^\+?[\d-() ]{10,18}$/);
|
|
100
|
+
return regexValidator(regex, msg || "Invalid phone number");
|
|
101
|
+
}
|
|
102
|
+
export function emailValidator(msg) {
|
|
103
|
+
// emailregex.com
|
|
104
|
+
const regex = new RegExp(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
|
|
105
|
+
return regexValidator(regex, msg || "Invalid email address");
|
|
106
|
+
}
|
|
107
|
+
export function SINValidator() {
|
|
108
|
+
return (value) => {
|
|
109
|
+
if (!value)
|
|
110
|
+
return "";
|
|
111
|
+
const checkValue = "121121121".split("").map((c) => parseInt(c));
|
|
112
|
+
const valueStr = value.replace(/\D/g, "");
|
|
113
|
+
if (valueStr.length !== 9)
|
|
114
|
+
return "SIN must contain 9 numbers";
|
|
115
|
+
const checkSum = valueStr
|
|
116
|
+
.split("")
|
|
117
|
+
.map((c) => parseInt(c))
|
|
118
|
+
.map((num, index) => {
|
|
119
|
+
const val = num * checkValue[index];
|
|
120
|
+
if (val < 10) {
|
|
121
|
+
return val;
|
|
122
|
+
}
|
|
123
|
+
return `${val}`
|
|
124
|
+
.split("")
|
|
125
|
+
.map((c) => parseInt(c))
|
|
126
|
+
.reduce((acc, val) => acc * val, 1);
|
|
127
|
+
})
|
|
128
|
+
.reduce((acc, val) => acc + val, 0);
|
|
129
|
+
if (checkSum % 10 === 0) {
|
|
130
|
+
return "";
|
|
131
|
+
}
|
|
132
|
+
return "Invalid SIN";
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
export function postalCodeValidator() {
|
|
136
|
+
return regexValidator(/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i, "Invalid postal code");
|
|
137
|
+
}
|
|
138
|
+
export function regexValidator(regex, msg) {
|
|
139
|
+
return (value) => {
|
|
140
|
+
if (!value) {
|
|
141
|
+
return "";
|
|
142
|
+
}
|
|
143
|
+
if (value.match(regex)) {
|
|
144
|
+
return "";
|
|
145
|
+
}
|
|
146
|
+
return msg;
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export function dateValidator({ invalidMsg, startMsg, endMsg, start, end, }) {
|
|
150
|
+
return (date) => {
|
|
151
|
+
let _date = new Date(0);
|
|
152
|
+
if (typeof date === "string") {
|
|
153
|
+
_date = new Date(date);
|
|
154
|
+
}
|
|
155
|
+
if (date.toDateString) {
|
|
156
|
+
_date = date;
|
|
157
|
+
}
|
|
158
|
+
if (_date.toString() === "Invalid Date" || _date.getTime() === 0) {
|
|
159
|
+
return invalidMsg || "Invalid date";
|
|
160
|
+
}
|
|
161
|
+
if (_date && start && _date < start) {
|
|
162
|
+
return startMsg || `Must be after ${start}`;
|
|
163
|
+
}
|
|
164
|
+
if (_date && end && _date > end) {
|
|
165
|
+
return endMsg || `Must be before ${end}`;
|
|
166
|
+
}
|
|
167
|
+
return "";
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export function numericValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
171
|
+
return (value) => {
|
|
172
|
+
let _value = Number.MAX_VALUE;
|
|
173
|
+
if (typeof value === "string") {
|
|
174
|
+
_value = parseFloat(value);
|
|
175
|
+
}
|
|
176
|
+
if (typeof value === "number") {
|
|
177
|
+
_value = value;
|
|
178
|
+
}
|
|
179
|
+
if (isNaN(_value)) {
|
|
180
|
+
return invalidTypeMsg || "Must be a numeric value";
|
|
181
|
+
}
|
|
182
|
+
if (_value > max) {
|
|
183
|
+
return maxMsg || `Must be less than or equal to ${max}`;
|
|
184
|
+
}
|
|
185
|
+
if (_value < min) {
|
|
186
|
+
return minMsg || `Must be greater than or equal to ${min}`;
|
|
187
|
+
}
|
|
188
|
+
return "";
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export function lengthValidator({ invalidTypeMsg, minMsg, maxMsg, min = -Number.MAX_VALUE, max = Number.MAX_VALUE, }) {
|
|
192
|
+
return (value) => {
|
|
193
|
+
if (typeof value !== "string") {
|
|
194
|
+
return invalidTypeMsg || "Invalid type";
|
|
195
|
+
}
|
|
196
|
+
if (value.length > max) {
|
|
197
|
+
return maxMsg || `Must be less than ${max} characters`;
|
|
198
|
+
}
|
|
199
|
+
if (value.length < min) {
|
|
200
|
+
return minMsg || `Must be greater than ${min} characters`;
|
|
201
|
+
}
|
|
202
|
+
return "";
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci1jb21wb25lbnRzL3NyYy9saWIvdmFsaWRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsS0FBYSxFQUNiLFVBQXVCLEVBQ3ZCLGFBQTRCLEVBQzVCLFVBQTRCO0lBRTVCLE1BQU0sS0FBSyxHQUFHLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUU1QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELDhGQUE4RjtBQUM5RixTQUFTLGFBQWEsQ0FBQyxFQUFlLEVBQUUsSUFBWSxFQUFFLEdBQVc7SUFDL0QsRUFBRSxDQUFDLGFBQWEsQ0FDZCxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDckIsUUFBUSxFQUFFLElBQUk7UUFDZCxNQUFNLEVBQUU7WUFDTixNQUFNLEVBQUUscUJBQXFCO1lBQzdCLElBQUksRUFBRTtnQkFDSixJQUFJO2dCQUNKLEdBQUc7YUFDSjtTQUNGO0tBQ0YsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBWSxVQUE2QztRQUN2RCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELEdBQUcsQ0FBQyxTQUFpQixFQUFFLEdBQUcsVUFBNEI7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDMUMsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUE0QjtRQUNuQyxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBRTFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDN0QsTUFBTSxHQUFHLEdBQUcsVUFBVTtpQkFDbkIsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ25CLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUFFRCxhQUFhO0FBQ2IsYUFBYTtBQUNiLGFBQWE7QUFFYixNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLE9BQU87UUFDTCxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUNwQyxnQkFBZ0IsQ0FBQztZQUNmLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxFQUFFLEVBQUU7WUFDUCxNQUFNLEVBQUUsOEJBQThCO1lBQ3RDLE1BQU0sRUFBRSw4QkFBOEI7U0FDdkMsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPO1FBQ0wsaUJBQWlCLENBQUMsbUJBQW1CLENBQUM7UUFDdEMsZ0JBQWdCLENBQUM7WUFDZixHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsRUFBRSxFQUFFO1lBQ1AsTUFBTSxFQUFFLG1DQUFtQztZQUMzQyxNQUFNLEVBQUUsbUNBQW1DO1NBQzVDLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6QyxPQUFPO1FBQ0wsaUJBQWlCLENBQUMsa0JBQWtCLENBQUM7UUFDckMsZ0JBQWdCLENBQUM7WUFDZixHQUFHLEVBQUUsSUFBSTtZQUNULEdBQUcsRUFBRSxPQUFPO1lBQ1osTUFBTSxFQUFFLGdDQUFnQztZQUN4QyxNQUFNLEVBQUUsMEJBQTBCLE9BQU8sRUFBRTtTQUM1QyxDQUFDO0tBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBWTtJQUM1QyxPQUFPLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsR0FBRyxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUM7UUFFeEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEdBQVk7SUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNqRCxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLHNCQUFzQixDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBWTtJQUN6QyxpQkFBaUI7SUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQ3RCLHNKQUFzSixDQUN2SixDQUFDO0lBQ0YsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWTtJQUMxQixPQUFPLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUksS0FBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXRELElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyw0QkFBNEIsQ0FBQztRQUUvRCxNQUFNLFFBQVEsR0FBRyxRQUFRO2FBQ3RCLEtBQUssQ0FBQyxFQUFFLENBQUM7YUFDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2QixHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDYixPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUM7WUFDRCxPQUFPLEdBQUcsR0FBRyxFQUFFO2lCQUNaLEtBQUssQ0FBQyxFQUFFLENBQUM7aUJBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0QyxJQUFJLFFBQVEsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsT0FBTyxjQUFjLENBQ25CLHNFQUFzRSxFQUN0RSxxQkFBcUIsQ0FDdEIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxHQUFXO0lBQ3ZELE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxJQUFLLEtBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUM7QUFDSixDQUFDO0FBU0QsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUM1QixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsR0FBRyxHQUNrQjtJQUNyQixPQUFPLENBQUMsSUFBYSxFQUFFLEVBQUU7UUFDdkIsSUFBSSxLQUFLLEdBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFOUIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUssSUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2hDLEtBQUssR0FBRyxJQUFZLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLGNBQWMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTyxVQUFVLElBQUksY0FBYyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3BDLE9BQU8sUUFBUSxJQUFJLGlCQUFpQixLQUFLLEVBQUUsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxPQUFPLE1BQU0sSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDM0MsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxFQUMvQixjQUFjLEVBQ2QsTUFBTSxFQUNOLE1BQU0sRUFDTixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUN2QixHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FDRTtJQUN4QixPQUFPLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxNQUFNLEdBQVcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUV0QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNsQixPQUFPLGNBQWMsSUFBSSx5QkFBeUIsQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDakIsT0FBTyxNQUFNLElBQUksaUNBQWlDLEdBQUcsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNqQixPQUFPLE1BQU0sSUFBSSxvQ0FBb0MsR0FBRyxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sVUFBVSxlQUFlLENBQUMsRUFDOUIsY0FBYyxFQUNkLE1BQU0sRUFDTixNQUFNLEVBQ04sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFDdkIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQ0M7SUFDdkIsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxjQUFjLElBQUksY0FBYyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUkscUJBQXFCLEdBQUcsYUFBYSxDQUFDO1FBQ3pELENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDdkIsT0FBTyxNQUFNLElBQUksd0JBQXdCLEdBQUcsYUFBYSxDQUFDO1FBQzVELENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZHNldEl0ZW1TdGF0ZSB9IGZyb20gXCIuL3B1YmxpYy1mb3JtLXV0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIEZpZWxkVmFsaWRhdG9yID0gKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBGaWVsZHNldFN0YXRlID0gUmVjb3JkPHN0cmluZywgRmllbGRzZXRJdGVtU3RhdGU+O1xuXG4vLyBUT0RPOiBtb3ZlIHRoaXMgaW50byB0aGUgZm9ybS11dGlscyBmaWxlLCBzaW5jZSBpdCBpcyBzcGVjaWZpYyB0byB0aGUgcHVibGljIGZvcm0gY29tcG9uZW50XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGUoXG4gIGZpZWxkOiBzdHJpbmcsXG4gIGZpZWxkc2V0RWw6IEhUTUxFbGVtZW50LFxuICBmaWVsZHNldFN0YXRlOiBGaWVsZHNldFN0YXRlLFxuICB2YWxpZGF0b3JzOiBGaWVsZFZhbGlkYXRvcltdLFxuKTogW2Jvb2xlYW4sIHN0cmluZ10ge1xuICBjb25zdCB2YWx1ZSA9IGZpZWxkc2V0U3RhdGU/LltmaWVsZF0/LnZhbHVlO1xuXG4gIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICBjb25zdCBtc2cgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgIGlmIChtc2cpIHtcbiAgICAgIGRpc3BhdGNoRXJyb3IoZmllbGRzZXRFbCwgZmllbGQsIG1zZyk7XG4gICAgICByZXR1cm4gW2ZhbHNlLCBcIlwiXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFt0cnVlLCB2YWx1ZV07XG59XG5cbi8vIFRPRE86IG1vdmUgdGhpcyBpbnRvIHRoZSBmb3JtLXV0aWxzIGZpbGUsIHNpbmNlIGl0IGlzIHNwZWNpZmljIHRvIHRoZSBwdWJsaWMgZm9ybSBjb21wb25lbnRcbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoZWw6IEhUTUxFbGVtZW50LCBuYW1lOiBzdHJpbmcsIG1zZzogc3RyaW5nKSB7XG4gIGVsLmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KFwibXNnXCIsIHtcbiAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIGFjdGlvbjogXCJleHRlcm5hbDo6c2V0OmVycm9yXCIsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIG1zZyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZFZhbGlkYXRvcltdPjtcbiAgY29uc3RydWN0b3IodmFsaWRhdG9ycz86IFJlY29yZDxzdHJpbmcsIEZpZWxkVmFsaWRhdG9yW10+KSB7XG4gICAgdGhpcy52YWxpZGF0b3JzID0gdmFsaWRhdG9ycyB8fCB7fTtcbiAgfVxuXG4gIGFkZChmaWVsZE5hbWU6IHN0cmluZywgLi4udmFsaWRhdG9yczogRmllbGRWYWxpZGF0b3JbXSkge1xuICAgIHRoaXMudmFsaWRhdG9yc1tmaWVsZE5hbWVdID0gdmFsaWRhdG9ycztcbiAgfVxuXG4gIHZhbGlkYXRlKGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdG9ycykuZm9yRWFjaCgoW25hbWUsIHZhbGlkYXRvcnNdKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSB2YWxpZGF0b3JzXG4gICAgICAgIC5tYXAoKHZhbGlkYXRvckZuKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyTXNnID0gdmFsaWRhdG9yRm4oZGF0YVtuYW1lXSk7XG4gICAgICAgICAgcmV0dXJuIGVyck1zZztcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmQoKG1zZykgPT4gISFtc2cpO1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBlcnI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG59XG5cbi8vICoqKioqKioqKipcbi8vIFZhbGlkYXRvcnNcbi8vICoqKioqKioqKipcblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoRGF5VmFsaWRhdG9yKCk6IEZpZWxkVmFsaWRhdG9yW10ge1xuICByZXR1cm4gW1xuICAgIHJlcXVpcmVkVmFsaWRhdG9yKFwiRGF5IGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAxLFxuICAgICAgbWF4OiAzMSxcbiAgICAgIG1pbk1zZzogXCJEYXkgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDMxXCIsXG4gICAgICBtYXhNc2c6IFwiRGF5IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzMVwiLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlydGhNb250aFZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIk1vbnRoIGlzIHJlcXVpcmVkXCIpLFxuICAgIG51bWVyaWNWYWxpZGF0b3Ioe1xuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAxMSxcbiAgICAgIG1pbk1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICAgIG1heE1zZzogXCJNb250aCBtdXN0IGJlIGJldHdlZW4gSmFuIGFuZCBEZWNcIixcbiAgICB9KSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpcnRoWWVhclZhbGlkYXRvcigpOiBGaWVsZFZhbGlkYXRvcltdIHtcbiAgY29uc3QgbWF4WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgcmV0dXJuIFtcbiAgICByZXF1aXJlZFZhbGlkYXRvcihcIlllYXIgaXMgcmVxdWlyZWRcIiksXG4gICAgbnVtZXJpY1ZhbGlkYXRvcih7XG4gICAgICBtaW46IDE5MDAsXG4gICAgICBtYXg6IG1heFllYXIsXG4gICAgICBtaW5Nc2c6IFwiWWVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxOTAwXCIsXG4gICAgICBtYXhNc2c6IGBZZWFyIG11c3QgYmUgbGVzcyB0aGFuICR7bWF4WWVhcn1gLFxuICAgIH0pLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWRWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgbXNnID0gbXNnIHx8IFwiUmVxdWlyZWRcIjtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwaG9uZU51bWJlclZhbGlkYXRvcihtc2c/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXlxcKz9bXFxkLSgpIF17MTAsMTh9JC8pO1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IocmVnZXgsIG1zZyB8fCBcIkludmFsaWQgcGhvbmUgbnVtYmVyXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1haWxWYWxpZGF0b3IobXNnPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICAvLyBlbWFpbHJlZ2V4LmNvbVxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgL14oKFtePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31dKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgKTtcbiAgcmV0dXJuIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4LCBtc2cgfHwgXCJJbnZhbGlkIGVtYWlsIGFkZHJlc3NcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTSU5WYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgY2hlY2tWYWx1ZSA9IFwiMTIxMTIxMTIxXCIuc3BsaXQoXCJcIikubWFwKChjKSA9PiBwYXJzZUludChjKSk7XG4gICAgY29uc3QgdmFsdWVTdHIgPSAodmFsdWUgYXMgc3RyaW5nKS5yZXBsYWNlKC9cXEQvZywgXCJcIik7XG5cbiAgICBpZiAodmFsdWVTdHIubGVuZ3RoICE9PSA5KSByZXR1cm4gXCJTSU4gbXVzdCBjb250YWluIDkgbnVtYmVyc1wiO1xuXG4gICAgY29uc3QgY2hlY2tTdW0gPSB2YWx1ZVN0clxuICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAubWFwKChjKSA9PiBwYXJzZUludChjKSlcbiAgICAgIC5tYXAoKG51bSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gbnVtICogY2hlY2tWYWx1ZVtpbmRleF07XG4gICAgICAgIGlmICh2YWwgPCAxMCkge1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3ZhbH1gXG4gICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgLm1hcCgoYykgPT4gcGFyc2VJbnQoYykpXG4gICAgICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqIHZhbCwgMSk7XG4gICAgICB9KVxuICAgICAgLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XG5cbiAgICBpZiAoY2hlY2tTdW0gJSAxMCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiSW52YWxpZCBTSU5cIjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc3RhbENvZGVWYWxpZGF0b3IoKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gcmVnZXhWYWxpZGF0b3IoXG4gICAgL15bQUJDRUdISi1OUFJTVFZYWV1cXGRbQUJDRUdISi1OUFJTVFYtWl1bIC1dP1xcZFtBQkNFR0hKLU5QUlNUVi1aXVxcZCQvaSxcbiAgICBcIkludmFsaWQgcG9zdGFsIGNvZGVcIixcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2V4VmFsaWRhdG9yKHJlZ2V4OiBSZWdFeHAsIG1zZzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGlmICgodmFsdWUgYXMgc3RyaW5nKS5tYXRjaChyZWdleCkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHJldHVybiBtc2c7XG4gIH07XG59XG5cbmludGVyZmFjZSBEYXRlVmFsaWRhdG9yT3B0aW9ucyB7XG4gIGludmFsaWRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0TXNnPzogc3RyaW5nO1xuICBlbmRNc2c/OiBzdHJpbmc7XG4gIHN0YXJ0PzogRGF0ZTtcbiAgZW5kPzogRGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVmFsaWRhdG9yKHtcbiAgaW52YWxpZE1zZyxcbiAgc3RhcnRNc2csXG4gIGVuZE1zZyxcbiAgc3RhcnQsXG4gIGVuZCxcbn06IERhdGVWYWxpZGF0b3JPcHRpb25zKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKGRhdGU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX2RhdGU6IERhdGUgPSBuZXcgRGF0ZSgwKTtcblxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX2RhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICB9XG4gICAgaWYgKChkYXRlIGFzIERhdGUpLnRvRGF0ZVN0cmluZykge1xuICAgICAgX2RhdGUgPSBkYXRlIGFzIERhdGU7XG4gICAgfVxuXG4gICAgaWYgKF9kYXRlLnRvU3RyaW5nKCkgPT09IFwiSW52YWxpZCBEYXRlXCIgfHwgX2RhdGUuZ2V0VGltZSgpID09PSAwKSB7XG4gICAgICByZXR1cm4gaW52YWxpZE1zZyB8fCBcIkludmFsaWQgZGF0ZVwiO1xuICAgIH1cblxuICAgIGlmIChfZGF0ZSAmJiBzdGFydCAmJiBfZGF0ZSA8IHN0YXJ0KSB7XG4gICAgICByZXR1cm4gc3RhcnRNc2cgfHwgYE11c3QgYmUgYWZ0ZXIgJHtzdGFydH1gO1xuICAgIH1cbiAgICBpZiAoX2RhdGUgJiYgZW5kICYmIF9kYXRlID4gZW5kKSB7XG4gICAgICByZXR1cm4gZW5kTXNnIHx8IGBNdXN0IGJlIGJlZm9yZSAke2VuZH1gO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMge1xuICBpbnZhbGlkVHlwZU1zZz86IHN0cmluZztcbiAgbWluTXNnPzogc3RyaW5nO1xuICBtYXhNc2c/OiBzdHJpbmc7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bWVyaWNWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTnVtZXJpY1ZhbGlkYXRvck9wdGlvbnMpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBsZXQgX3ZhbHVlOiBudW1iZXIgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgX3ZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChpc05hTihfdmFsdWUpKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFR5cGVNc2cgfHwgXCJNdXN0IGJlIGEgbnVtZXJpYyB2YWx1ZVwiO1xuICAgIH1cblxuICAgIGlmIChfdmFsdWUgPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7bWF4fWA7XG4gICAgfVxuICAgIGlmIChfdmFsdWUgPCBtaW4pIHtcbiAgICAgIHJldHVybiBtaW5Nc2cgfHwgYE11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG5cbmludGVyZmFjZSBMZW5ndGhWYWxpZGF0b3JPcHRpb25zIHtcbiAgaW52YWxpZFR5cGVNc2c/OiBzdHJpbmc7XG4gIG1pbk1zZz86IHN0cmluZztcbiAgbWF4TXNnPzogc3RyaW5nO1xuICBtYXg/OiBudW1iZXI7XG4gIG1pbj86IG51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGhWYWxpZGF0b3Ioe1xuICBpbnZhbGlkVHlwZU1zZyxcbiAgbWluTXNnLFxuICBtYXhNc2csXG4gIG1pbiA9IC1OdW1iZXIuTUFYX1ZBTFVFLFxuICBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFLFxufTogTGVuZ3RoVmFsaWRhdG9yT3B0aW9ucyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkVHlwZU1zZyB8fCBcIkludmFsaWQgdHlwZVwiO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPiBtYXgpIHtcbiAgICAgIHJldHVybiBtYXhNc2cgfHwgYE11c3QgYmUgbGVzcyB0aGFuICR7bWF4fSBjaGFyYWN0ZXJzYDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoIDwgbWluKSB7XG4gICAgICByZXR1cm4gbWluTXNnIHx8IGBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAke21pbn0gY2hhcmFjdGVyc2A7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH07XG59XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { forwardRef, Directive, ElementRef, HostListener } from "@angular/core";
|
|
2
2
|
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
// @deprecated: Use the new <goab-input .. /> component
|
|
4
5
|
export class ValueDirective {
|
|
5
6
|
get value() {
|
|
6
7
|
return this._value;
|
|
@@ -20,9 +21,14 @@ export class ValueDirective {
|
|
|
20
21
|
registerOnTouched(fn) {
|
|
21
22
|
this.onTouched = fn;
|
|
22
23
|
}
|
|
24
|
+
setDisabledState(isDisabled) {
|
|
25
|
+
this._disabled = isDisabled;
|
|
26
|
+
this.elementRef.nativeElement.disabled = isDisabled;
|
|
27
|
+
}
|
|
23
28
|
constructor(elementRef) {
|
|
24
29
|
this.elementRef = elementRef;
|
|
25
30
|
this._value = "";
|
|
31
|
+
this._disabled = false;
|
|
26
32
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
27
33
|
this.onChange = () => { };
|
|
28
34
|
this.onTouched = () => { };
|
|
@@ -30,14 +36,17 @@ export class ValueDirective {
|
|
|
30
36
|
listenForValueChange(value) {
|
|
31
37
|
this.value = value;
|
|
32
38
|
}
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
listenForDisabledChange(isDisabled) {
|
|
40
|
+
this.setDisabledState(isDisabled);
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
43
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: ValueDirective, selector: "[goaValue]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)", "disabledChange": "listenForDisabledChange($event.detail.disabled)" } }, providers: [{
|
|
35
44
|
provide: NG_VALUE_ACCESSOR,
|
|
36
45
|
useExisting: forwardRef(() => ValueDirective),
|
|
37
46
|
multi: true,
|
|
38
47
|
}], ngImport: i0 }); }
|
|
39
48
|
}
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueDirective, decorators: [{
|
|
41
50
|
type: Directive,
|
|
42
51
|
args: [{
|
|
43
52
|
selector: "[goaValue]", providers: [{
|
|
@@ -49,13 +58,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
49
58
|
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { listenForValueChange: [{
|
|
50
59
|
type: HostListener,
|
|
51
60
|
args: ["_change", ["$event.detail.value"]]
|
|
61
|
+
}], listenForDisabledChange: [{
|
|
62
|
+
type: HostListener,
|
|
63
|
+
args: ["disabledChange", ["$event.detail.disabled"]]
|
|
52
64
|
}] } });
|
|
53
65
|
export class ValueListDirective {
|
|
54
66
|
get value() {
|
|
55
67
|
return this._value;
|
|
56
68
|
}
|
|
57
69
|
set value(val) {
|
|
58
|
-
if (
|
|
70
|
+
if (val && val !== this._value) {
|
|
59
71
|
this._setValue(val);
|
|
60
72
|
this.elementRef.nativeElement.value = JSON.stringify(val);
|
|
61
73
|
}
|
|
@@ -96,14 +108,14 @@ export class ValueListDirective {
|
|
|
96
108
|
this.onChange(value);
|
|
97
109
|
this.onTouched();
|
|
98
110
|
}
|
|
99
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
100
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
111
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueListDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
112
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: ValueListDirective, selector: "[goaValueList]", host: { listeners: { "_change": "listenForValueChange($event.detail.value)" } }, providers: [{
|
|
101
113
|
provide: NG_VALUE_ACCESSOR,
|
|
102
114
|
useExisting: forwardRef(() => ValueListDirective),
|
|
103
115
|
multi: true,
|
|
104
116
|
}], ngImport: i0 }); }
|
|
105
117
|
}
|
|
106
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ValueListDirective, decorators: [{
|
|
107
119
|
type: Directive,
|
|
108
120
|
args: [{
|
|
109
121
|
selector: "[goaValueList]",
|
|
@@ -117,4 +129,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
117
129
|
type: HostListener,
|
|
118
130
|
args: ["_change", ["$event.detail.value"]]
|
|
119
131
|
}] } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi92YWx1ZS1kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBRXpFLHVEQUF1RDtBQVF2RCxNQUFNLE9BQU8sY0FBYztJQVF6QixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQVc7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFjO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lB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QyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFnQjtRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDOzhHQXJEVSxrQkFBa0I7a0dBQWxCLGtCQUFrQiwwSEFObEIsQ0FBQztnQkFDVixPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2dCQUNqRCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUM7OzJGQUVTLGtCQUFrQjtrQkFSOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUUsQ0FBQzs0QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzs0QkFDakQsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQztpQkFDSDsrRUFtQ0Msb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9yd2FyZFJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbi8vIEBkZXByZWNhdGVkOiBVc2UgdGhlIG5ldyA8Z29hYi1pbnB1dCAuLiAvPiBjb21wb25lbnRcbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZ29hVmFsdWVdXCIsIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBWYWx1ZURpcmVjdGl2ZSksXG4gICAgbXVsdGk6IHRydWUsXG4gIH1dLFxufSlcbmV4cG9ydCBjbGFzcyBWYWx1ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfdmFsdWUgPSBcIlwiO1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgLyogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLyB9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHsgLyogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiAqLyB9O1xuXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWw7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICBASG9zdExpc3RlbmVyKFwiX2NoYW5nZVwiLCBbXCIkZXZlbnQuZGV0YWlsLnZhbHVlXCJdKVxuICBsaXN0ZW5Gb3JWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoXCJkaXNhYmxlZENoYW5nZVwiLCBbXCIkZXZlbnQuZGV0YWlsLmRpc2FibGVkXCJdKVxuICBsaXN0ZW5Gb3JEaXNhYmxlZENoYW5nZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZ29hVmFsdWVMaXN0XVwiLFxuICBwcm92aWRlcnM6IFt7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVmFsdWVMaXN0RGlyZWN0aXZlKSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlTGlzdERpcmVjdGl2ZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJpdmF0ZSBfdmFsdWU/OiBzdHJpbmdbXSA9IFtdO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7IH07XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4geyB9O1xuXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbDogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsICYmIHZhbCAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldFZhbHVlKHZhbCk7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZT86IHN0cmluZ1tdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICBASG9zdExpc3RlbmVyKFwiX2NoYW5nZVwiLCBbXCIkZXZlbnQuZGV0YWlsLnZhbHVlXCJdKVxuICBsaXN0ZW5Gb3JWYWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5fc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy52YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHdlIHN0aWxsIG5lZWQgdG8gdHJpZ2dlciB0aGUgZXZlbnRzIHRvIHByZXZlbnQgYW55IHByZXZpb3VzIHZhbGlkIHZhbHVlIHRvIHJlbWFpbiBzZXQuXG4gICAgICBjb25zdCB2ID0gdmFsdWUubWF0Y2goL15bXFx3XFxzLF0qJC8pID8gdmFsdWUuc3BsaXQoXCIsXCIpIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc2V0VmFsdWUodik7XG4gICAgfVxuICB9XG5cbiAgX3NldFZhbHVlKHZhbHVlPzogc3RyaW5nW10pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cbn1cbiJdfQ==
|