@pepperi-addons/ngx-lib 0.2.58 → 0.2.59
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/bundles/pepperi-addons-ngx-lib-color.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib.umd.js +100 -82
- package/bundles/pepperi-addons-ngx-lib.umd.js.map +1 -1
- package/core/common/services/color.service.d.ts +3 -3
- package/esm2015/color/public-api.js +1 -2
- package/esm2015/core/common/services/color.service.js +101 -83
- package/fesm2015/pepperi-addons-ngx-lib-color.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.js +100 -82
- package/fesm2015/pepperi-addons-ngx-lib.js.map +1 -1
- package/package.json +1 -1
- package/pepperi-addons-ngx-lib.metadata.json +1 -1
- package/src/core/style/abstracts/mixins.scss +3 -3
|
@@ -18,6 +18,9 @@ export declare class PepColorService {
|
|
|
18
18
|
readonly THREE_DIGIT_HEX_COLOR_WITH_HASH_REGEX: RegExp;
|
|
19
19
|
readonly SIX_DIGIT_HEX_COLOR_REGEX: RegExp;
|
|
20
20
|
readonly SIX_DIGIT_HEX_COLOR_WITH_HASH_REGEX: RegExp;
|
|
21
|
+
private contrast;
|
|
22
|
+
private findClosestAccessibleDarkerColor;
|
|
23
|
+
private findClosestAccessibleLighterColor;
|
|
21
24
|
/**
|
|
22
25
|
* Convert hex string to 6 digits hex string.
|
|
23
26
|
* @param str The string to convert.
|
|
@@ -40,9 +43,6 @@ export declare class PepColorService {
|
|
|
40
43
|
hex2hsl(str: string): IPepHslColor;
|
|
41
44
|
hsl2hex(hsl: IPepHslColor): string;
|
|
42
45
|
relativeLuminance({ r, g, b }: IPepRgbColor): number;
|
|
43
|
-
contrast(str1: string, str2: string): number;
|
|
44
|
-
findClosestAccessibleDarkerColor(adjustableColor: string, otherColor: string, contrastRatio: number): IPepClosestColor;
|
|
45
|
-
findClosestAccessibleLighterColor(adjustableColor: string, otherColor: string, contrastRatio: number): IPepClosestColor;
|
|
46
46
|
findClosestAccessibleColor(adjustableColor: string, otherColor: string, contrastRatio: number): string;
|
|
47
47
|
convertHslToStringHsl(hsl: IPepHslColor): string;
|
|
48
48
|
}
|
|
@@ -3,6 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export * from './color.module';
|
|
5
5
|
export * from './color.model';
|
|
6
|
-
// export * from './color-utils';
|
|
7
6
|
export * from './color.component';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvY29sb3IvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LWxpYi9jb2xvclxuICovXG5leHBvcnQgKiBmcm9tICcuL2NvbG9yLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9yLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3IuY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -8,6 +8,88 @@ export class PepColorService {
|
|
|
8
8
|
this.SIX_DIGIT_HEX_COLOR_REGEX = /^[0-9a-fA-F]{6}$/;
|
|
9
9
|
this.SIX_DIGIT_HEX_COLOR_WITH_HASH_REGEX = /^#[0-9a-fA-F]{6}$/;
|
|
10
10
|
}
|
|
11
|
+
contrast(str1, str2) {
|
|
12
|
+
const L1 = this.relativeLuminance(this.hex2rgb(str1));
|
|
13
|
+
const L2 = this.relativeLuminance(this.hex2rgb(str2));
|
|
14
|
+
if (L1 < L2) {
|
|
15
|
+
return (L2 + 0.05) / (L1 + 0.05);
|
|
16
|
+
}
|
|
17
|
+
return (L1 + 0.05) / (L2 + 0.05);
|
|
18
|
+
}
|
|
19
|
+
findClosestAccessibleDarkerColor(adjustableColor, otherColor, contrastRatio) {
|
|
20
|
+
const { h, s, l } = this.hex2hsl(adjustableColor);
|
|
21
|
+
if (this.contrast(adjustableColor, otherColor) >= contrastRatio) {
|
|
22
|
+
return {
|
|
23
|
+
color: adjustableColor,
|
|
24
|
+
lightness: l,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
let minColor = this.hsl2hex({ h, s, l: 0 });
|
|
28
|
+
if (this.contrast(minColor, otherColor) < contrastRatio) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
let min = 0;
|
|
32
|
+
let max = l;
|
|
33
|
+
let maxColor = this.hsl2hex({ h, s, l });
|
|
34
|
+
let lastMinColor;
|
|
35
|
+
let lastMaxColor;
|
|
36
|
+
let lTemp;
|
|
37
|
+
while (minColor !== lastMinColor || maxColor !== lastMaxColor) {
|
|
38
|
+
lastMinColor = minColor;
|
|
39
|
+
lastMaxColor = maxColor;
|
|
40
|
+
lTemp = (min + max) / 2;
|
|
41
|
+
adjustableColor = this.hsl2hex({ h, s, l: lTemp });
|
|
42
|
+
if (this.contrast(adjustableColor, otherColor) < contrastRatio) {
|
|
43
|
+
max = lTemp;
|
|
44
|
+
maxColor = this.hsl2hex({ h, s, l: lTemp });
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
min = lTemp;
|
|
48
|
+
minColor = this.hsl2hex({ h, s, l: lTemp });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
color: minColor,
|
|
53
|
+
lightness: min,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
findClosestAccessibleLighterColor(adjustableColor, otherColor, contrastRatio) {
|
|
57
|
+
const { h, s, l } = this.hex2hsl(adjustableColor);
|
|
58
|
+
if (this.contrast(adjustableColor, otherColor) >= contrastRatio) {
|
|
59
|
+
return {
|
|
60
|
+
color: adjustableColor,
|
|
61
|
+
lightness: l,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
let maxColor = this.hsl2hex({ h, s, l: 100 });
|
|
65
|
+
if (this.contrast(maxColor, otherColor) < contrastRatio) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
let min = l;
|
|
69
|
+
let max = 100;
|
|
70
|
+
let minColor = this.hsl2hex({ h, s, l });
|
|
71
|
+
let lastMinColor;
|
|
72
|
+
let lastMaxColor;
|
|
73
|
+
let lTemp;
|
|
74
|
+
while (minColor !== lastMinColor || maxColor !== lastMaxColor) {
|
|
75
|
+
lastMinColor = minColor;
|
|
76
|
+
lastMaxColor = maxColor;
|
|
77
|
+
lTemp = (min + max) / 2;
|
|
78
|
+
adjustableColor = this.hsl2hex({ h, s, l: lTemp });
|
|
79
|
+
if (this.contrast(adjustableColor, otherColor) < contrastRatio) {
|
|
80
|
+
min = lTemp;
|
|
81
|
+
minColor = this.hsl2hex({ h, s, l: lTemp });
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
max = lTemp;
|
|
85
|
+
maxColor = this.hsl2hex({ h, s, l: lTemp });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
color: maxColor,
|
|
90
|
+
lightness: max,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
11
93
|
/**
|
|
12
94
|
* Convert hex string to 6 digits hex string.
|
|
13
95
|
* @param str The string to convert.
|
|
@@ -36,6 +118,9 @@ export class PepColorService {
|
|
|
36
118
|
* @param color The rgb color to convert.
|
|
37
119
|
*/
|
|
38
120
|
rgb2sixDigitHex(color) {
|
|
121
|
+
if (!color) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
39
124
|
color.r = color.r.toString(16);
|
|
40
125
|
color.g = color.g.toString(16);
|
|
41
126
|
color.b = color.b.toString(16);
|
|
@@ -55,6 +140,9 @@ export class PepColorService {
|
|
|
55
140
|
* @param str The hex string to convert.
|
|
56
141
|
*/
|
|
57
142
|
hex2rgb(str) {
|
|
143
|
+
if (!str) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
58
146
|
const sixDigitHex = this.hex2sixDigitHex(str);
|
|
59
147
|
if (sixDigitHex === null) {
|
|
60
148
|
return null;
|
|
@@ -66,6 +154,9 @@ export class PepColorService {
|
|
|
66
154
|
};
|
|
67
155
|
}
|
|
68
156
|
rgbString2hsl(str) {
|
|
157
|
+
if (!str) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
69
160
|
const sep = str.indexOf(',') > -1 ? ',' : ' ';
|
|
70
161
|
const rgbArr = str.substr(4).split(')')[0].split(sep);
|
|
71
162
|
const r = rgbArr[0];
|
|
@@ -107,6 +198,9 @@ export class PepColorService {
|
|
|
107
198
|
return { h, s, l };
|
|
108
199
|
}
|
|
109
200
|
hslString2hsl(str) {
|
|
201
|
+
if (!str) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
110
204
|
const sep = str.indexOf(',') > -1 ? ',' : ' ';
|
|
111
205
|
const hslArr = str.substr(4).split(')')[0].split(sep);
|
|
112
206
|
let h = hslArr[0];
|
|
@@ -195,6 +289,9 @@ export class PepColorService {
|
|
|
195
289
|
return { r, g, b };
|
|
196
290
|
}
|
|
197
291
|
hex2hsl(str) {
|
|
292
|
+
if (!str) {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
198
295
|
const sixDigitHex = this.hex2sixDigitHex(str);
|
|
199
296
|
if (sixDigitHex === null) {
|
|
200
297
|
return null;
|
|
@@ -206,6 +303,9 @@ export class PepColorService {
|
|
|
206
303
|
return this.rgb2hsl(rgb);
|
|
207
304
|
}
|
|
208
305
|
hsl2hex(hsl) {
|
|
306
|
+
if (!hsl) {
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
209
309
|
const rgb = this.hsl2rgb(hsl);
|
|
210
310
|
return this.rgb2sixDigitHex(rgb);
|
|
211
311
|
}
|
|
@@ -219,88 +319,6 @@ export class PepColorService {
|
|
|
219
319
|
});
|
|
220
320
|
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
221
321
|
}
|
|
222
|
-
contrast(str1, str2) {
|
|
223
|
-
const L1 = this.relativeLuminance(this.hex2rgb(str1));
|
|
224
|
-
const L2 = this.relativeLuminance(this.hex2rgb(str2));
|
|
225
|
-
if (L1 < L2) {
|
|
226
|
-
return (L2 + 0.05) / (L1 + 0.05);
|
|
227
|
-
}
|
|
228
|
-
return (L1 + 0.05) / (L2 + 0.05);
|
|
229
|
-
}
|
|
230
|
-
findClosestAccessibleDarkerColor(adjustableColor, otherColor, contrastRatio) {
|
|
231
|
-
const { h, s, l } = this.hex2hsl(adjustableColor);
|
|
232
|
-
if (this.contrast(adjustableColor, otherColor) >= contrastRatio) {
|
|
233
|
-
return {
|
|
234
|
-
color: adjustableColor,
|
|
235
|
-
lightness: l,
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
let minColor = this.hsl2hex({ h, s, l: 0 });
|
|
239
|
-
if (this.contrast(minColor, otherColor) < contrastRatio) {
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
let min = 0;
|
|
243
|
-
let max = l;
|
|
244
|
-
let maxColor = this.hsl2hex({ h, s, l });
|
|
245
|
-
let lastMinColor;
|
|
246
|
-
let lastMaxColor;
|
|
247
|
-
let lTemp;
|
|
248
|
-
while (minColor !== lastMinColor || maxColor !== lastMaxColor) {
|
|
249
|
-
lastMinColor = minColor;
|
|
250
|
-
lastMaxColor = maxColor;
|
|
251
|
-
lTemp = (min + max) / 2;
|
|
252
|
-
adjustableColor = this.hsl2hex({ h, s, l: lTemp });
|
|
253
|
-
if (this.contrast(adjustableColor, otherColor) < contrastRatio) {
|
|
254
|
-
max = lTemp;
|
|
255
|
-
maxColor = this.hsl2hex({ h, s, l: lTemp });
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
min = lTemp;
|
|
259
|
-
minColor = this.hsl2hex({ h, s, l: lTemp });
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return {
|
|
263
|
-
color: minColor,
|
|
264
|
-
lightness: min,
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
findClosestAccessibleLighterColor(adjustableColor, otherColor, contrastRatio) {
|
|
268
|
-
const { h, s, l } = this.hex2hsl(adjustableColor);
|
|
269
|
-
if (this.contrast(adjustableColor, otherColor) >= contrastRatio) {
|
|
270
|
-
return {
|
|
271
|
-
color: adjustableColor,
|
|
272
|
-
lightness: l,
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
let maxColor = this.hsl2hex({ h, s, l: 100 });
|
|
276
|
-
if (this.contrast(maxColor, otherColor) < contrastRatio) {
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
let min = l;
|
|
280
|
-
let max = 100;
|
|
281
|
-
let minColor = this.hsl2hex({ h, s, l });
|
|
282
|
-
let lastMinColor;
|
|
283
|
-
let lastMaxColor;
|
|
284
|
-
let lTemp;
|
|
285
|
-
while (minColor !== lastMinColor || maxColor !== lastMaxColor) {
|
|
286
|
-
lastMinColor = minColor;
|
|
287
|
-
lastMaxColor = maxColor;
|
|
288
|
-
lTemp = (min + max) / 2;
|
|
289
|
-
adjustableColor = this.hsl2hex({ h, s, l: lTemp });
|
|
290
|
-
if (this.contrast(adjustableColor, otherColor) < contrastRatio) {
|
|
291
|
-
min = lTemp;
|
|
292
|
-
minColor = this.hsl2hex({ h, s, l: lTemp });
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
max = lTemp;
|
|
296
|
-
maxColor = this.hsl2hex({ h, s, l: lTemp });
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
return {
|
|
300
|
-
color: maxColor,
|
|
301
|
-
lightness: max,
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
322
|
findClosestAccessibleColor(adjustableColor, otherColor, contrastRatio) {
|
|
305
323
|
const closestDarkerColor = this.findClosestAccessibleDarkerColor(adjustableColor, otherColor, contrastRatio);
|
|
306
324
|
const closestLighterColor = this.findClosestAccessibleLighterColor(adjustableColor, otherColor, contrastRatio);
|
|
@@ -336,4 +354,4 @@ PepColorService.decorators = [
|
|
|
336
354
|
providedIn: 'root',
|
|
337
355
|
},] }
|
|
338
356
|
];
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvc3JjL2NvcmUvY29tbW9uL3NlcnZpY2VzL2NvbG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFzQjNDLE1BQU0sT0FBTyxlQUFlO0lBSDVCO1FBSWEsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFDOUIsZ0NBQTJCLEdBQUcsa0JBQWtCLENBQUM7UUFDakQsMENBQXFDLEdBQUcsbUJBQW1CLENBQUM7UUFDNUQsOEJBQXlCLEdBQUcsa0JBQWtCLENBQUM7UUFDL0Msd0NBQW1DLEdBQUcsbUJBQW1CLENBQUM7S0FtYXRFO0lBamFHOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxHQUFXO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDTixPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQyxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDcEI7UUFFRCxJQUFJLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEQsT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFH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UUFDdEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNQLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNUO2FBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNOLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7YUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNOLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDVDthQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNkLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNUO2FBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNOLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7YUFBTTtZQUNILENBQUMsR0FBRyxD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QVUsRUFDVixhQUFhLENBQ2hCLENBQUM7UUFFRixJQUFJLGtCQUFrQixLQUFLLElBQUksRUFBRTtZQUM3QixJQUFJLG1CQUFtQixLQUFLLElBQUksRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUVELE9BQU8sbUJBQW1CLENBQUMsS0FBSyxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxtQkFBbUIsS0FBSyxJQUFJLEVBQUU7WUFDOUIsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7U0FDbkM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU1QyxJQUNJLG1CQUFtQixDQUFDLFNBQVMsR0FBRyxDQUFDO1lBQ2pDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLEVBQ2xDO1lBQ0UsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7U0FDcEM7UUFFRCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBaUI7UUFDbkMsT0FBTyxDQUNILE1BQU07WUFDTixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJO1lBQ0osR0FBRyxDQUFDLENBQUM7WUFDTCxLQUFLO1lBQ0wsR0FBRyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQ1AsQ0FBQztJQUNOLENBQUM7Ozs7WUExYUosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZXBSZ2JDb2xvciB7XG4gICAgcj86IGFueTtcbiAgICBnPzogYW55O1xuICAgIGI/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcEhzbENvbG9yIHtcbiAgICBoPzogYW55O1xuICAgIHM/OiBhbnk7XG4gICAgbD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVwQ2xvc2VzdENvbG9yIHtcbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIGxpZ2h0bmVzczogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBDb2xvclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IEZMT0FUX1JFR0VYID0gL15cXGQrKFxcLlxcZCspPyQvO1xuICAgIHJlYWRvbmx5IFRIUkVFX0RJR0lUX0hFWF9DT0xPUl9SRUdFWCA9IC9eWzAtOWEtZkEtRl17M30kLztcbiAgICByZWFkb25seSBUSFJFRV9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYID0gL14jWzAtOWEtZkEtRl17M30kLztcbiAgICByZWFkb25seSBTSVhfRElHSVRfSEVYX0NPTE9SX1JFR0VYID0gL15bMC05YS1mQS1GXXs2fSQvO1xuICAgIHJlYWRvbmx5IFNJWF9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYID0gL14jWzAtOWEtZkEtRl17Nn0kLztcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgaGV4IHN0cmluZyB0byA2IGRpZ2l0cyBoZXggc3RyaW5nLlxuICAgICAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqL1xuICAgIGhleDJzaXhEaWdpdEhleChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciA9IHN0ci50cmltKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuU0lYX0RJR0lUX0hFWF9DT0xPUl9XSVRIX0hBU0hfUkVHRVgudGVzdChzdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuU0lYX0RJR0lUX0hFWF9DT0xPUl9SRUdFWC50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBzdHI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5USFJFRV9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuICcjJyArIHN0clsxXSArIHN0clsxXSArIHN0clsyXSArIHN0clsyXSArIHN0clszXSArIHN0clszXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLlRIUkVFX0RJR0lUX0hFWF9DT0xPUl9SRUdFWC50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBzdHJbMF0gKyBzdHJbMF0gKyBzdHJbMV0gKyBzdHJbMV0gKyBzdHJbMl0gKyBzdHJbMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IHJnYiBjb2xvciB0byA2IGRpZ2l0cyBoZXggc3RyaW5nLlxuICAgICAqIEBwYXJhbSBjb2xvciBUaGUgcmdiIGNvbG9yIHRvIGNvbnZlcnQuXG4gICAgICovXG4gICAgcmdiMnNpeERpZ2l0SGV4KGNvbG9yOiBJUGVwUmdiQ29sb3IpOiBzdHJpbmcge1xuICAgICAgICBjb2xvci5yID0gY29sb3Iuci50b1N0cmluZygxNik7XG4gICAgICAgIGNvbG9yLmcgPSBjb2xvci5nLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY29sb3IuYiA9IGNvbG9yLmIudG9TdHJpbmcoMTYpO1xuXG4gICAgICAgIGlmIChjb2xvci5yLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29sb3IuciA9ICcwJyArIGNvbG9yLnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3IuZy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbG9yLmcgPSAnMCcgKyBjb2xvci5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbG9yLmIubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb2xvci5iID0gJzAnICsgY29sb3IuYjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnIycgKyBjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBoZXggc3RyaW5nIHRvIHJnYiBjb2xvci5cbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBoZXggc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICovXG4gICAgaGV4MnJnYihzdHI6IHN0cmluZyk6IElQZXBSZ2JDb2xvciB7XG4gICAgICAgIGNvbnN0IHNpeERpZ2l0SGV4ID0gdGhpcy5oZXgyc2l4RGlnaXRIZXgoc3RyKTtcblxuICAgICAgICBpZiAoc2l4RGlnaXRIZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50KHNpeERpZ2l0SGV4LnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICAgICAgICBnOiBwYXJzZUludChzaXhEaWdpdEhleC5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgICAgICAgYjogcGFyc2VJbnQoc2l4RGlnaXRIZXguc2xpY2UoNSwgNyksIDE2KSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZ2JTdHJpbmcyaHNsKHN0cjogc3RyaW5nKTogSVBlcEhzbENvbG9yIHtcbiAgICAgICAgY29uc3Qgc2VwID0gc3RyLmluZGV4T2YoJywnKSA+IC0xID8gJywnIDogJyAnO1xuICAgICAgICBjb25zdCByZ2JBcnIgPSBzdHIuc3Vic3RyKDQpLnNwbGl0KCcpJylbMF0uc3BsaXQoc2VwKTtcblxuICAgICAgICBjb25zdCByID0gcmdiQXJyWzBdO1xuICAgICAgICBjb25zdCBnID0gcmdiQXJyWzFdLnN1YnN0cigwLCByZ2JBcnJbMV0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIGNvbnN0IGIgPSByZ2JBcnJbMl0uc3Vic3RyKDAsIHJnYkFyclsyXS5sZW5ndGgpLnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZ2IyaHNsKHsgciwgZywgYiB9KTtcbiAgICB9XG5cbiAgICByZ2IyaHNsKHsgciwgZywgYiB9OiBJUGVwUmdiQ29sb3IpOiBJUGVwSHNsQ29sb3Ige1xuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuXG4gICAgICAgIC8vIEZpbmQgZ3JlYXRlc3QgYW5kIHNtYWxsZXN0IGNoYW5uZWwgdmFsdWVzXG4gICAgICAgIGNvbnN0IGNtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IGNtYXggLSBjbWluO1xuXG4gICAgICAgIGxldCBoID0gMDtcbiAgICAgICAgbGV0IHMgPSAwO1xuICAgICAgICBsZXQgbCA9IDA7XG5cbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgICBoID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjbWF4ID09PSByKSB7XG4gICAgICAgICAgICBoID0gKChnIC0gYikgLyBkZWx0YSkgJSA2O1xuICAgICAgICB9IGVsc2UgaWYgKGNtYXggPT09IGcpIHtcbiAgICAgICAgICAgIGggPSAoYiAtIHIpIC8gZGVsdGEgKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaCA9IChyIC0gZykgLyBkZWx0YSArIDQ7XG4gICAgICAgIH1cblxuICAgICAgICBoID0gTWF0aC5yb3VuZChoICogNjApO1xuXG4gICAgICAgIGlmIChoIDwgMCkge1xuICAgICAgICAgICAgaCArPSAzNjA7XG4gICAgICAgIH1cblxuICAgICAgICBsID0gKGNtYXggKyBjbWluKSAvIDI7XG4gICAgICAgIHMgPSBkZWx0YSA9PT0gMCA/IDAgOiBkZWx0YSAvICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSk7XG4gICAgICAgIHMgPSArKHMgKiAxMDApLnRvRml4ZWQoMSk7XG4gICAgICAgIGwgPSArKGwgKiAxMDApLnRvRml4ZWQoMSk7XG5cbiAgICAgICAgcmV0dXJuIHsgaCwgcywgbCB9O1xuICAgIH1cblxuICAgIGhzbFN0cmluZzJoc2woc3RyOiBzdHJpbmcpOiBJUGVwSHNsQ29sb3Ige1xuICAgICAgICBjb25zdCBzZXAgPSBzdHIuaW5kZXhPZignLCcpID4gLTEgPyAnLCcgOiAnICc7XG4gICAgICAgIGNvbnN0IGhzbEFyciA9IHN0ci5zdWJzdHIoNCkuc3BsaXQoJyknKVswXS5zcGxpdChzZXApO1xuXG4gICAgICAgIGxldCBoOiBhbnkgPSBoc2xBcnJbMF07XG4gICAgICAgIGxldCBzID0gaHNsQXJyWzFdLnN1YnN0cigwLCBoc2xBcnJbMV0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIGxldCBsID0gaHNsQXJyWzJdLnN1YnN0cigwLCBoc2xBcnJbMl0ubGVuZ3RoKS50cmltKCk7XG5cbiAgICAgICAgLy8gU3RyaXAgbGFiZWwgYW5kIGNvbnZlcnQgdG8gZGVncmVlcyAoaWYgbmVjZXNzYXJ5KVxuICAgICAgICBpZiAoaC5pbmRleE9mKCdkZWcnKSA+IC0xKSB7XG4gICAgICAgICAgICBoID0gaC5zdWJzdHIoMCwgaC5sZW5ndGggLSAzKTtcbiAgICAgICAgfSBlbHNlIGlmIChoLmluZGV4T2YoJ3JhZCcpID4gLTEpIHtcbiAgICAgICAgICAgIGggPSBNYXRoLnJvdW5kKGguc3Vic3RyKDAsIGgubGVuZ3RoIC0gMykgKiAoMTgwIC8gTWF0aC5QSSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGguaW5kZXhPZigndHVybicpID4gLTEpIHtcbiAgICAgICAgICAgIGggPSBNYXRoLnJvdW5kKGguc3Vic3RyKDAsIGgubGVuZ3RoIC0gNCkgKiAzNjApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gS2VlcCBodWUgZnJhY3Rpb24gb2YgMzYwIGlmIGVuZGluZyB1cCBvdmVyXG4gICAgICAgIGlmIChoID49IDM2MCkge1xuICAgICAgICAgICAgaCAlPSAzNjA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlICVcbiAgICAgICAgaWYgKHMuaW5kZXhPZignJScpID4gLTEpIHtcbiAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoLyUvZywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSAlXG4gICAgICAgIGlmIChsLmluZGV4T2YoJyUnKSA+IC0xKSB7XG4gICAgICAgICAgICBsID0gbC5yZXBsYWNlKC8lL2csICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGgsIHMsIGwgfTtcbiAgICB9XG5cbiAgICBoc2wycmdiKHsgaCwgcywgbCB9OiBJUGVwSHNsQ29sb3IpOiBJUGVwUmdiQ29sb3Ige1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgbGV0IGc7XG4gICAgICAgIGxldCBiO1xuXG4gICAgICAgIGlmICghaXNGaW5pdGUoaCkpIHtcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Zpbml0ZShzKSkge1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRmluaXRlKGwpKSB7XG4gICAgICAgICAgICBsID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgICAgICBoID0gNiAtICgtaCAlIDYpO1xuICAgICAgICB9XG5cbiAgICAgICAgaCAlPSA2O1xuXG4gICAgICAgIHMgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBzIC8gMTAwKSk7XG4gICAgICAgIGwgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBsIC8gMTAwKSk7XG5cbiAgICAgICAgY29uc3QgYyA9ICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSkgKiBzO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKGggJSAyKSAtIDEpKTtcblxuICAgICAgICBpZiAoaCA8IDEpIHtcbiAgICAgICAgICAgIHIgPSBjO1xuICAgICAgICAgICAgZyA9IHg7XG4gICAgICAgICAgICBiID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgMikge1xuICAgICAgICAgICAgciA9IHg7XG4gICAgICAgICAgICBnID0gYztcbiAgICAgICAgICAgIGIgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCAzKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGcgPSBjO1xuICAgICAgICAgICAgYiA9IHg7XG4gICAgICAgIH0gZWxzZSBpZiAoaCA8IDQpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgZyA9IHg7XG4gICAgICAgICAgICBiID0gYztcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgNSkge1xuICAgICAgICAgICAgciA9IHg7XG4gICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgIGIgPSBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgciA9IGM7XG4gICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgIGIgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IGwgLSBjIC8gMjtcbiAgICAgICAgciA9IE1hdGgucm91bmQoKHIgKyBtKSAqIDI1NSk7XG4gICAgICAgIGcgPSBNYXRoLnJvdW5kKChnICsgbSkgKiAyNTUpO1xuICAgICAgICBiID0gTWF0aC5yb3VuZCgoYiArIG0pICogMjU1KTtcblxuICAgICAgICByZXR1cm4geyByLCBnLCBiIH07XG4gICAgfVxuXG4gICAgaGV4MmhzbChzdHI6IHN0cmluZyk6IElQZXBIc2xDb2xvciB7XG4gICAgICAgIGNvbnN0IHNpeERpZ2l0SGV4ID0gdGhpcy5oZXgyc2l4RGlnaXRIZXgoc3RyKTtcblxuICAgICAgICBpZiAoc2l4RGlnaXRIZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiID0gdGhpcy5oZXgycmdiKHNpeERpZ2l0SGV4KTtcblxuICAgICAgICBpZiAocmdiID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJnYjJoc2wocmdiKTtcbiAgICB9XG5cbiAgICBoc2wyaGV4KGhzbDogSVBlcEhzbENvbG9yKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcmdiID0gdGhpcy5oc2wycmdiKGhzbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmdiMnNpeERpZ2l0SGV4KHJnYik7XG4gICAgfVxuXG4gICAgcmVsYXRpdmVMdW1pbmFuY2UoeyByLCBnLCBiIH06IElQZXBSZ2JDb2xvcik6IG51bWJlciB7XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyLCBnLCBiXS5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGMgPSBjIC8gMjU1O1xuXG4gICAgICAgICAgICBpZiAoYyA8PSAwLjAzOTI4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KChjICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gICAgfVxuXG4gICAgY29udHJhc3Qoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBMMSA9IHRoaXMucmVsYXRpdmVMdW1pbmFuY2UodGhpcy5oZXgycmdiKHN0cjEpKTtcbiAgICAgICAgY29uc3QgTDIgPSB0aGlzLnJlbGF0aXZlTHVtaW5hbmNlKHRoaXMuaGV4MnJnYihzdHIyKSk7XG5cbiAgICAgICAgaWYgKEwxIDwgTDIpIHtcbiAgICAgICAgICAgIHJldHVybiAoTDIgKyAwLjA1KSAvIChMMSArIDAuMDUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChMMSArIDAuMDUpIC8gKEwyICsgMC4wNSk7XG4gICAgfVxuXG4gICAgZmluZENsb3Nlc3RBY2Nlc3NpYmxlRGFya2VyQ29sb3IoXG4gICAgICAgIGFkanVzdGFibGVDb2xvcjogc3RyaW5nLFxuICAgICAgICBvdGhlckNvbG9yOiBzdHJpbmcsXG4gICAgICAgIGNvbnRyYXN0UmF0aW86IG51bWJlclxuICAgICk6IElQZXBDbG9zZXN0Q29sb3Ige1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwgfSA9IHRoaXMuaGV4MmhzbChhZGp1c3RhYmxlQ29sb3IpO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXN0KGFkanVzdGFibGVDb2xvciwgb3RoZXJDb2xvcikgPj0gY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogYWRqdXN0YWJsZUNvbG9yLFxuICAgICAgICAgICAgICAgIGxpZ2h0bmVzczogbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiAwIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXN0KG1pbkNvbG9yLCBvdGhlckNvbG9yKSA8IGNvbnRyYXN0UmF0aW8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1pbiA9IDA7XG4gICAgICAgIGxldCBtYXggPSBsO1xuICAgICAgICBsZXQgbWF4Q29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsIH0pO1xuICAgICAgICBsZXQgbGFzdE1pbkNvbG9yO1xuICAgICAgICBsZXQgbGFzdE1heENvbG9yO1xuICAgICAgICBsZXQgbFRlbXA7XG5cbiAgICAgICAgd2hpbGUgKG1pbkNvbG9yICE9PSBsYXN0TWluQ29sb3IgfHwgbWF4Q29sb3IgIT09IGxhc3RNYXhDb2xvcikge1xuICAgICAgICAgICAgbGFzdE1pbkNvbG9yID0gbWluQ29sb3I7XG4gICAgICAgICAgICBsYXN0TWF4Q29sb3IgPSBtYXhDb2xvcjtcblxuICAgICAgICAgICAgbFRlbXAgPSAobWluICsgbWF4KSAvIDI7XG4gICAgICAgICAgICBhZGp1c3RhYmxlQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJhc3QoYWRqdXN0YWJsZUNvbG9yLCBvdGhlckNvbG9yKSA8IGNvbnRyYXN0UmF0aW8pIHtcbiAgICAgICAgICAgICAgICBtYXggPSBsVGVtcDtcbiAgICAgICAgICAgICAgICBtYXhDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBsVGVtcDtcbiAgICAgICAgICAgICAgICBtaW5Db2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbG9yOiBtaW5Db2xvcixcbiAgICAgICAgICAgIGxpZ2h0bmVzczogbWluLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZpbmRDbG9zZXN0QWNjZXNzaWJsZUxpZ2h0ZXJDb2xvcihcbiAgICAgICAgYWRqdXN0YWJsZUNvbG9yOiBzdHJpbmcsXG4gICAgICAgIG90aGVyQ29sb3I6IHN0cmluZyxcbiAgICAgICAgY29udHJhc3RSYXRpbzogbnVtYmVyXG4gICAgKTogSVBlcENsb3Nlc3RDb2xvciB7XG4gICAgICAgIGNvbnN0IHsgaCwgcywgbCB9ID0gdGhpcy5oZXgyaHNsKGFkanVzdGFibGVDb2xvcik7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QoYWRqdXN0YWJsZUNvbG9yLCBvdGhlckNvbG9yKSA+PSBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzOiBsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtYXhDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IDEwMCB9KTtcblxuICAgICAgICBpZiAodGhpcy5jb250cmFzdChtYXhDb2xvciwgb3RoZXJDb2xvcikgPCBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW4gPSBsO1xuICAgICAgICBsZXQgbWF4ID0gMTAwO1xuICAgICAgICBsZXQgbWluQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsIH0pO1xuICAgICAgICBsZXQgbGFzdE1pbkNvbG9yO1xuICAgICAgICBsZXQgbGFzdE1heENvbG9yO1xuICAgICAgICBsZXQgbFRlbXA7XG5cbiAgICAgICAgd2hpbGUgKG1pbkNvbG9yICE9PSBsYXN0TWluQ29sb3IgfHwgbWF4Q29sb3IgIT09IGxhc3RNYXhDb2xvcikge1xuICAgICAgICAgICAgbGFzdE1pbkNvbG9yID0gbWluQ29sb3I7XG4gICAgICAgICAgICBsYXN0TWF4Q29sb3IgPSBtYXhDb2xvcjtcblxuICAgICAgICAgICAgbFRlbXAgPSAobWluICsgbWF4KSAvIDI7XG4gICAgICAgICAgICBhZGp1c3RhYmxlQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJhc3QoYWRqdXN0YWJsZUNvbG9yLCBvdGhlckNvbG9yKSA8IGNvbnRyYXN0UmF0aW8pIHtcbiAgICAgICAgICAgICAgICBtaW4gPSBsVGVtcDtcbiAgICAgICAgICAgICAgICBtaW5Db2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtYXggPSBsVGVtcDtcbiAgICAgICAgICAgICAgICBtYXhDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbG9yOiBtYXhDb2xvcixcbiAgICAgICAgICAgIGxpZ2h0bmVzczogbWF4LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZpbmRDbG9zZXN0QWNjZXNzaWJsZUNvbG9yKFxuICAgICAgICBhZGp1c3RhYmxlQ29sb3I6IHN0cmluZyxcbiAgICAgICAgb3RoZXJDb2xvcjogc3RyaW5nLFxuICAgICAgICBjb250cmFzdFJhdGlvOiBudW1iZXJcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjbG9zZXN0RGFya2VyQ29sb3I6IElQZXBDbG9zZXN0Q29sb3IgPSB0aGlzLmZpbmRDbG9zZXN0QWNjZXNzaWJsZURhcmtlckNvbG9yKFxuICAgICAgICAgICAgYWRqdXN0YWJsZUNvbG9yLFxuICAgICAgICAgICAgb3RoZXJDb2xvcixcbiAgICAgICAgICAgIGNvbnRyYXN0UmF0aW9cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2xvc2VzdExpZ2h0ZXJDb2xvcjogSVBlcENsb3Nlc3RDb2xvciA9IHRoaXMuZmluZENsb3Nlc3RBY2Nlc3NpYmxlTGlnaHRlckNvbG9yKFxuICAgICAgICAgICAgYWRqdXN0YWJsZUNvbG9yLFxuICAgICAgICAgICAgb3RoZXJDb2xvcixcbiAgICAgICAgICAgIGNvbnRyYXN0UmF0aW9cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2xvc2VzdERhcmtlckNvbG9yID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY2xvc2VzdExpZ2h0ZXJDb2xvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2xvc2VzdExpZ2h0ZXJDb2xvci5jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9zZXN0TGlnaHRlckNvbG9yID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvc2VzdERhcmtlckNvbG9yLmNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBsIH0gPSB0aGlzLmhleDJoc2woYWRqdXN0YWJsZUNvbG9yKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjbG9zZXN0TGlnaHRlckNvbG9yLmxpZ2h0bmVzcyAtIGwgPFxuICAgICAgICAgICAgbCAtIGNsb3Nlc3REYXJrZXJDb2xvci5saWdodG5lc3NcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvc2VzdExpZ2h0ZXJDb2xvci5jb2xvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjbG9zZXN0RGFya2VyQ29sb3IuY29sb3I7XG4gICAgfVxuXG4gICAgY29udmVydEhzbFRvU3RyaW5nSHNsKGhzbDogSVBlcEhzbENvbG9yKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICdoc2woJyArXG4gICAgICAgICAgICAoaHNsLmggPCAwID8gaHNsLmggKyAzNjAgOiBoc2wuaCkgK1xuICAgICAgICAgICAgJywgJyArXG4gICAgICAgICAgICBoc2wucyArXG4gICAgICAgICAgICAnJSwgJyArXG4gICAgICAgICAgICBoc2wubCArXG4gICAgICAgICAgICAnJSknXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1saWIvc3JjL2NvcmUvY29tbW9uL3NlcnZpY2VzL2NvbG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFzQjNDLE1BQU0sT0FBTyxlQUFlO0lBSDVCO1FBSWEsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFDOUIsZ0NBQTJCLEdBQUcsa0JBQWtCLENBQUM7UUFDakQsMENBQXFDLEdBQUcsbUJBQW1CLENBQUM7UUFDNUQsOEJBQXlCLEdBQUcsa0JBQWtCLENBQUM7UUFDL0Msd0NBQW1DLEdBQUcsbUJBQW1CLENBQUM7S0EyYnRFO0lBemJXLFFBQVEsQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUN2QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFdEQsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ1QsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNwQztRQUVELE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGdDQUFnQyxDQUNwQyxlQUF1QixFQUN2QixVQUFrQixFQUNsQixhQUFxQjtRQUVyQixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUs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QUNOLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLENBQUM7UUFFTixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNUO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNkLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDVDtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7UUFFRCxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVQLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNOLENBQUMsR0FBRyxD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QztZQUNqQyxJQUFJO1lBQ0osR0FBRyxDQUFDLENBQUM7WUFDTCxLQUFLO1lBQ0wsR0FBRyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQ1AsQ0FBQztJQUNOLENBQUM7Ozs7WUFsY0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQZXBSZ2JDb2xvciB7XG4gICAgcj86IGFueTtcbiAgICBnPzogYW55O1xuICAgIGI/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBlcEhzbENvbG9yIHtcbiAgICBoPzogYW55O1xuICAgIHM/OiBhbnk7XG4gICAgbD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGVwQ2xvc2VzdENvbG9yIHtcbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIGxpZ2h0bmVzczogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBDb2xvclNlcnZpY2Uge1xuICAgIHJlYWRvbmx5IEZMT0FUX1JFR0VYID0gL15cXGQrKFxcLlxcZCspPyQvO1xuICAgIHJlYWRvbmx5IFRIUkVFX0RJR0lUX0hFWF9DT0xPUl9SRUdFWCA9IC9eWzAtOWEtZkEtRl17M30kLztcbiAgICByZWFkb25seSBUSFJFRV9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYID0gL14jWzAtOWEtZkEtRl17M30kLztcbiAgICByZWFkb25seSBTSVhfRElHSVRfSEVYX0NPTE9SX1JFR0VYID0gL15bMC05YS1mQS1GXXs2fSQvO1xuICAgIHJlYWRvbmx5IFNJWF9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYID0gL14jWzAtOWEtZkEtRl17Nn0kLztcblxuICAgIHByaXZhdGUgY29udHJhc3Qoc3RyMTogc3RyaW5nLCBzdHIyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBMMSA9IHRoaXMucmVsYXRpdmVMdW1pbmFuY2UodGhpcy5oZXgycmdiKHN0cjEpKTtcbiAgICAgICAgY29uc3QgTDIgPSB0aGlzLnJlbGF0aXZlTHVtaW5hbmNlKHRoaXMuaGV4MnJnYihzdHIyKSk7XG5cbiAgICAgICAgaWYgKEwxIDwgTDIpIHtcbiAgICAgICAgICAgIHJldHVybiAoTDIgKyAwLjA1KSAvIChMMSArIDAuMDUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChMMSArIDAuMDUpIC8gKEwyICsgMC4wNSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQ2xvc2VzdEFjY2Vzc2libGVEYXJrZXJDb2xvcihcbiAgICAgICAgYWRqdXN0YWJsZUNvbG9yOiBzdHJpbmcsXG4gICAgICAgIG90aGVyQ29sb3I6IHN0cmluZyxcbiAgICAgICAgY29udHJhc3RSYXRpbzogbnVtYmVyXG4gICAgKTogSVBlcENsb3Nlc3RDb2xvciB7XG4gICAgICAgIGNvbnN0IHsgaCwgcywgbCB9ID0gdGhpcy5oZXgyaHNsKGFkanVzdGFibGVDb2xvcik7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QoYWRqdXN0YWJsZUNvbG9yLCBvdGhlckNvbG9yKSA+PSBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzOiBsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW5Db2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IDAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QobWluQ29sb3IsIG90aGVyQ29sb3IpIDwgY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluID0gMDtcbiAgICAgICAgbGV0IG1heCA9IGw7XG4gICAgICAgIGxldCBtYXhDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGwgfSk7XG4gICAgICAgIGxldCBsYXN0TWluQ29sb3I7XG4gICAgICAgIGxldCBsYXN0TWF4Q29sb3I7XG4gICAgICAgIGxldCBsVGVtcDtcblxuICAgICAgICB3aGlsZSAobWluQ29sb3IgIT09IGxhc3RNaW5Db2xvciB8fCBtYXhDb2xvciAhPT0gbGFzdE1heENvbG9yKSB7XG4gICAgICAgICAgICBsYXN0TWluQ29sb3IgPSBtaW5Db2xvcjtcbiAgICAgICAgICAgIGxhc3RNYXhDb2xvciA9IG1heENvbG9yO1xuXG4gICAgICAgICAgICBsVGVtcCA9IChtaW4gKyBtYXgpIC8gMjtcbiAgICAgICAgICAgIGFkanVzdGFibGVDb2xvciA9IHRoaXMuaHNsMmhleCh7IGgsIHMsIGw6IGxUZW1wIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cmFzdChhZGp1c3RhYmxlQ29sb3IsIG90aGVyQ29sb3IpIDwgY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgICAgIG1heCA9IGxUZW1wO1xuICAgICAgICAgICAgICAgIG1heENvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogbFRlbXAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1pbiA9IGxUZW1wO1xuICAgICAgICAgICAgICAgIG1pbkNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogbFRlbXAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sb3I6IG1pbkNvbG9yLFxuICAgICAgICAgICAgbGlnaHRuZXNzOiBtaW4sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQ2xvc2VzdEFjY2Vzc2libGVMaWdodGVyQ29sb3IoXG4gICAgICAgIGFkanVzdGFibGVDb2xvcjogc3RyaW5nLFxuICAgICAgICBvdGhlckNvbG9yOiBzdHJpbmcsXG4gICAgICAgIGNvbnRyYXN0UmF0aW86IG51bWJlclxuICAgICk6IElQZXBDbG9zZXN0Q29sb3Ige1xuICAgICAgICBjb25zdCB7IGgsIHMsIGwgfSA9IHRoaXMuaGV4MmhzbChhZGp1c3RhYmxlQ29sb3IpO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyYXN0KGFkanVzdGFibGVDb2xvciwgb3RoZXJDb2xvcikgPj0gY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogYWRqdXN0YWJsZUNvbG9yLFxuICAgICAgICAgICAgICAgIGxpZ2h0bmVzczogbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF4Q29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiAxMDAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJhc3QobWF4Q29sb3IsIG90aGVyQ29sb3IpIDwgY29udHJhc3RSYXRpbykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluID0gbDtcbiAgICAgICAgbGV0IG1heCA9IDEwMDtcbiAgICAgICAgbGV0IG1pbkNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbCB9KTtcbiAgICAgICAgbGV0IGxhc3RNaW5Db2xvcjtcbiAgICAgICAgbGV0IGxhc3RNYXhDb2xvcjtcbiAgICAgICAgbGV0IGxUZW1wO1xuXG4gICAgICAgIHdoaWxlIChtaW5Db2xvciAhPT0gbGFzdE1pbkNvbG9yIHx8IG1heENvbG9yICE9PSBsYXN0TWF4Q29sb3IpIHtcbiAgICAgICAgICAgIGxhc3RNaW5Db2xvciA9IG1pbkNvbG9yO1xuICAgICAgICAgICAgbGFzdE1heENvbG9yID0gbWF4Q29sb3I7XG5cbiAgICAgICAgICAgIGxUZW1wID0gKG1pbiArIG1heCkgLyAyO1xuICAgICAgICAgICAgYWRqdXN0YWJsZUNvbG9yID0gdGhpcy5oc2wyaGV4KHsgaCwgcywgbDogbFRlbXAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyYXN0KGFkanVzdGFibGVDb2xvciwgb3RoZXJDb2xvcikgPCBjb250cmFzdFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgbWluID0gbFRlbXA7XG4gICAgICAgICAgICAgICAgbWluQ29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF4ID0gbFRlbXA7XG4gICAgICAgICAgICAgICAgbWF4Q29sb3IgPSB0aGlzLmhzbDJoZXgoeyBoLCBzLCBsOiBsVGVtcCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2xvcjogbWF4Q29sb3IsXG4gICAgICAgICAgICBsaWdodG5lc3M6IG1heCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGhleCBzdHJpbmcgdG8gNiBkaWdpdHMgaGV4IHN0cmluZy5cbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKi9cbiAgICBoZXgyc2l4RGlnaXRIZXgoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgPSBzdHIudHJpbSgpO1xuXG4gICAgICAgIGlmICh0aGlzLlNJWF9ESUdJVF9IRVhfQ09MT1JfV0lUSF9IQVNIX1JFR0VYLnRlc3Qoc3RyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLlNJWF9ESUdJVF9IRVhfQ09MT1JfUkVHRVgudGVzdChzdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyMnICsgc3RyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuVEhSRUVfRElHSVRfSEVYX0NPTE9SX1dJVEhfSEFTSF9SRUdFWC50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBzdHJbMV0gKyBzdHJbMV0gKyBzdHJbMl0gKyBzdHJbMl0gKyBzdHJbM10gKyBzdHJbM107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5USFJFRV9ESUdJVF9IRVhfQ09MT1JfUkVHRVgudGVzdChzdHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyMnICsgc3RyWzBdICsgc3RyWzBdICsgc3RyWzFdICsgc3RyWzFdICsgc3RyWzJdICsgc3RyWzJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCByZ2IgY29sb3IgdG8gNiBkaWdpdHMgaGV4IHN0cmluZy5cbiAgICAgKiBAcGFyYW0gY29sb3IgVGhlIHJnYiBjb2xvciB0byBjb252ZXJ0LlxuICAgICAqL1xuICAgIHJnYjJzaXhEaWdpdEhleChjb2xvcjogSVBlcFJnYkNvbG9yKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFjb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb2xvci5yID0gY29sb3Iuci50b1N0cmluZygxNik7XG4gICAgICAgIGNvbG9yLmcgPSBjb2xvci5nLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgY29sb3IuYiA9IGNvbG9yLmIudG9TdHJpbmcoMTYpO1xuXG4gICAgICAgIGlmIChjb2xvci5yLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29sb3IuciA9ICcwJyArIGNvbG9yLnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sb3IuZy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbG9yLmcgPSAnMCcgKyBjb2xvci5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbG9yLmIubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb2xvci5iID0gJzAnICsgY29sb3IuYjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnIycgKyBjb2xvci5yICsgY29sb3IuZyArIGNvbG9yLmI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBoZXggc3RyaW5nIHRvIHJnYiBjb2xvci5cbiAgICAgKiBAcGFyYW0gc3RyIFRoZSBoZXggc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICovXG4gICAgaGV4MnJnYihzdHI6IHN0cmluZyk6IElQZXBSZ2JDb2xvciB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpeERpZ2l0SGV4ID0gdGhpcy5oZXgyc2l4RGlnaXRIZXgoc3RyKTtcblxuICAgICAgICBpZiAoc2l4RGlnaXRIZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHBhcnNlSW50KHNpeERpZ2l0SGV4LnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICAgICAgICBnOiBwYXJzZUludChzaXhEaWdpdEhleC5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgICAgICAgYjogcGFyc2VJbnQoc2l4RGlnaXRIZXguc2xpY2UoNSwgNyksIDE2KSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZ2JTdHJpbmcyaHNsKHN0cjogc3RyaW5nKTogSVBlcEhzbENvbG9yIHtcbiAgICAgICAgaWYgKCFzdHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VwID0gc3RyLmluZGV4T2YoJywnKSA+IC0xID8gJywnIDogJyAnO1xuICAgICAgICBjb25zdCByZ2JBcnIgPSBzdHIuc3Vic3RyKDQpLnNwbGl0KCcpJylbMF0uc3BsaXQoc2VwKTtcblxuICAgICAgICBjb25zdCByID0gcmdiQXJyWzBdO1xuICAgICAgICBjb25zdCBnID0gcmdiQXJyWzFdLnN1YnN0cigwLCByZ2JBcnJbMV0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIGNvbnN0IGIgPSByZ2JBcnJbMl0uc3Vic3RyKDAsIHJnYkFyclsyXS5sZW5ndGgpLnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZ2IyaHNsKHsgciwgZywgYiB9KTtcbiAgICB9XG5cbiAgICByZ2IyaHNsKHsgciwgZywgYiB9OiBJUGVwUmdiQ29sb3IpOiBJUGVwSHNsQ29sb3Ige1xuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuXG4gICAgICAgIC8vIEZpbmQgZ3JlYXRlc3QgYW5kIHNtYWxsZXN0IGNoYW5uZWwgdmFsdWVzXG4gICAgICAgIGNvbnN0IGNtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IGNtYXggLSBjbWluO1xuXG4gICAgICAgIGxldCBoID0gMDtcbiAgICAgICAgbGV0IHMgPSAwO1xuICAgICAgICBsZXQgbCA9IDA7XG5cbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgICBoID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjbWF4ID09PSByKSB7XG4gICAgICAgICAgICBoID0gKChnIC0gYikgLyBkZWx0YSkgJSA2O1xuICAgICAgICB9IGVsc2UgaWYgKGNtYXggPT09IGcpIHtcbiAgICAgICAgICAgIGggPSAoYiAtIHIpIC8gZGVsdGEgKyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaCA9IChyIC0gZykgLyBkZWx0YSArIDQ7XG4gICAgICAgIH1cblxuICAgICAgICBoID0gTWF0aC5yb3VuZChoICogNjApO1xuXG4gICAgICAgIGlmIChoIDwgMCkge1xuICAgICAgICAgICAgaCArPSAzNjA7XG4gICAgICAgIH1cblxuICAgICAgICBsID0gKGNtYXggKyBjbWluKSAvIDI7XG4gICAgICAgIHMgPSBkZWx0YSA9PT0gMCA/IDAgOiBkZWx0YSAvICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSk7XG4gICAgICAgIHMgPSArKHMgKiAxMDApLnRvRml4ZWQoMSk7XG4gICAgICAgIGwgPSArKGwgKiAxMDApLnRvRml4ZWQoMSk7XG5cbiAgICAgICAgcmV0dXJuIHsgaCwgcywgbCB9O1xuICAgIH1cblxuICAgIGhzbFN0cmluZzJoc2woc3RyOiBzdHJpbmcpOiBJUGVwSHNsQ29sb3Ige1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXAgPSBzdHIuaW5kZXhPZignLCcpID4gLTEgPyAnLCcgOiAnICc7XG4gICAgICAgIGNvbnN0IGhzbEFyciA9IHN0ci5zdWJzdHIoNCkuc3BsaXQoJyknKVswXS5zcGxpdChzZXApO1xuXG4gICAgICAgIGxldCBoOiBhbnkgPSBoc2xBcnJbMF07XG4gICAgICAgIGxldCBzID0gaHNsQXJyWzFdLnN1YnN0cigwLCBoc2xBcnJbMV0ubGVuZ3RoKS50cmltKCk7XG4gICAgICAgIGxldCBsID0gaHNsQXJyWzJdLnN1YnN0cigwLCBoc2xBcnJbMl0ubGVuZ3RoKS50cmltKCk7XG5cbiAgICAgICAgLy8gU3RyaXAgbGFiZWwgYW5kIGNvbnZlcnQgdG8gZGVncmVlcyAoaWYgbmVjZXNzYXJ5KVxuICAgICAgICBpZiAoaC5pbmRleE9mKCdkZWcnKSA+IC0xKSB7XG4gICAgICAgICAgICBoID0gaC5zdWJzdHIoMCwgaC5sZW5ndGggLSAzKTtcbiAgICAgICAgfSBlbHNlIGlmIChoLmluZGV4T2YoJ3JhZCcpID4gLTEpIHtcbiAgICAgICAgICAgIGggPSBNYXRoLnJvdW5kKGguc3Vic3RyKDAsIGgubGVuZ3RoIC0gMykgKiAoMTgwIC8gTWF0aC5QSSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGguaW5kZXhPZigndHVybicpID4gLTEpIHtcbiAgICAgICAgICAgIGggPSBNYXRoLnJvdW5kKGguc3Vic3RyKDAsIGgubGVuZ3RoIC0gNCkgKiAzNjApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gS2VlcCBodWUgZnJhY3Rpb24gb2YgMzYwIGlmIGVuZGluZyB1cCBvdmVyXG4gICAgICAgIGlmIChoID49IDM2MCkge1xuICAgICAgICAgICAgaCAlPSAzNjA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlICVcbiAgICAgICAgaWYgKHMuaW5kZXhPZignJScpID4gLTEpIHtcbiAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoLyUvZywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSAlXG4gICAgICAgIGlmIChsLmluZGV4T2YoJyUnKSA+IC0xKSB7XG4gICAgICAgICAgICBsID0gbC5yZXBsYWNlKC8lL2csICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGgsIHMsIGwgfTtcbiAgICB9XG5cbiAgICBoc2wycmdiKHsgaCwgcywgbCB9OiBJUGVwSHNsQ29sb3IpOiBJUGVwUmdiQ29sb3Ige1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgbGV0IGc7XG4gICAgICAgIGxldCBiO1xuXG4gICAgICAgIGlmICghaXNGaW5pdGUoaCkpIHtcbiAgICAgICAgICAgIGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Zpbml0ZShzKSkge1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzRmluaXRlKGwpKSB7XG4gICAgICAgICAgICBsID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgICAgICBoID0gNiAtICgtaCAlIDYpO1xuICAgICAgICB9XG5cbiAgICAgICAgaCAlPSA2O1xuXG4gICAgICAgIHMgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBzIC8gMTAwKSk7XG4gICAgICAgIGwgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBsIC8gMTAwKSk7XG5cbiAgICAgICAgY29uc3QgYyA9ICgxIC0gTWF0aC5hYnMoMiAqIGwgLSAxKSkgKiBzO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKGggJSAyKSAtIDEpKTtcblxuICAgICAgICBpZiAoaCA8IDEpIHtcbiAgICAgICAgICAgIHIgPSBjO1xuICAgICAgICAgICAgZyA9IHg7XG4gICAgICAgICAgICBiID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgMikge1xuICAgICAgICAgICAgciA9IHg7XG4gICAgICAgICAgICBnID0gYztcbiAgICAgICAgICAgIGIgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCAzKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGcgPSBjO1xuICAgICAgICAgICAgYiA9IHg7XG4gICAgICAgIH0gZWxzZSBpZiAoaCA8IDQpIHtcbiAgICAgICAgICAgIHIgPSAwO1xuICAgICAgICAgICAgZyA9IHg7XG4gICAgICAgICAgICBiID0gYztcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgNSkge1xuICAgICAgICAgICAgciA9IHg7XG4gICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgIGIgPSBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgciA9IGM7XG4gICAgICAgICAgICBnID0gMDtcbiAgICAgICAgICAgIGIgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IGwgLSBjIC8gMjtcbiAgICAgICAgciA9IE1hdGgucm91bmQoKHIgKyBtKSAqIDI1NSk7XG4gICAgICAgIGcgPSBNYXRoLnJvdW5kKChnICsgbSkgKiAyNTUpO1xuICAgICAgICBiID0gTWF0aC5yb3VuZCgoYiArIG0pICogMjU1KTtcblxuICAgICAgICByZXR1cm4geyByLCBnLCBiIH07XG4gICAgfVxuXG4gICAgaGV4MmhzbChzdHI6IHN0cmluZyk6IElQZXBIc2xDb2xvciB7XG4gICAgICAgIGlmICghc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpeERpZ2l0SGV4ID0gdGhpcy5oZXgyc2l4RGlnaXRIZXgoc3RyKTtcblxuICAgICAgICBpZiAoc2l4RGlnaXRIZXggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiID0gdGhpcy5oZXgycmdiKHNpeERpZ2l0SGV4KTtcblxuICAgICAgICBpZiAocmdiID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJnYjJoc2wocmdiKTtcbiAgICB9XG5cbiAgICBoc2wyaGV4KGhzbDogSVBlcEhzbENvbG9yKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFoc2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmdiID0gdGhpcy5oc2wycmdiKGhzbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmdiMnNpeERpZ2l0SGV4KHJnYik7XG4gICAgfVxuXG4gICAgcmVsYXRpdmVMdW1pbmFuY2UoeyByLCBnLCBiIH06IElQZXBSZ2JDb2xvcik6IG51bWJlciB7XG4gICAgICAgIFtyLCBnLCBiXSA9IFtyLCBnLCBiXS5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIGMgPSBjIC8gMjU1O1xuXG4gICAgICAgICAgICBpZiAoYyA8PSAwLjAzOTI4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIE1hdGgucG93KChjICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gICAgfVxuXG4gICAgZmluZENsb3Nlc3RBY2Nlc3NpYmxlQ29sb3IoXG4gICAgICAgIGFkanVzdGFibGVDb2xvcjogc3RyaW5nLFxuICAgICAgICBvdGhlckNvbG9yOiBzdHJpbmcsXG4gICAgICAgIGNvbnRyYXN0UmF0aW86IG51bWJlclxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsb3Nlc3REYXJrZXJDb2xvcjogSVBlcENsb3Nlc3RDb2xvciA9IHRoaXMuZmluZENsb3Nlc3RBY2Nlc3NpYmxlRGFya2VyQ29sb3IoXG4gICAgICAgICAgICBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICBvdGhlckNvbG9yLFxuICAgICAgICAgICAgY29udHJhc3RSYXRpb1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBjbG9zZXN0TGlnaHRlckNvbG9yOiBJUGVwQ2xvc2VzdENvbG9yID0gdGhpcy5maW5kQ2xvc2VzdEFjY2Vzc2libGVMaWdodGVyQ29sb3IoXG4gICAgICAgICAgICBhZGp1c3RhYmxlQ29sb3IsXG4gICAgICAgICAgICBvdGhlckNvbG9yLFxuICAgICAgICAgICAgY29udHJhc3RSYXRpb1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjbG9zZXN0RGFya2VyQ29sb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChjbG9zZXN0TGlnaHRlckNvbG9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjbG9zZXN0TGlnaHRlckNvbG9yLmNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsb3Nlc3RMaWdodGVyQ29sb3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZXN0RGFya2VyQ29sb3IuY29sb3I7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGwgfSA9IHRoaXMuaGV4MmhzbChhZGp1c3RhYmxlQ29sb3IpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNsb3Nlc3RMaWdodGVyQ29sb3IubGlnaHRuZXNzIC0gbCA8XG4gICAgICAgICAgICBsIC0gY2xvc2VzdERhcmtlckNvbG9yLmxpZ2h0bmVzc1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9zZXN0TGlnaHRlckNvbG9yLmNvbG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsb3Nlc3REYXJrZXJDb2xvci5jb2xvcjtcbiAgICB9XG5cbiAgICBjb252ZXJ0SHNsVG9TdHJpbmdIc2woaHNsOiBJUGVwSHNsQ29sb3IpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJ2hzbCgnICtcbiAgICAgICAgICAgIChoc2wuaCA8IDAgPyBoc2wuaCArIDM2MCA6IGhzbC5oKSArXG4gICAgICAgICAgICAnLCAnICtcbiAgICAgICAgICAgIGhzbC5zICtcbiAgICAgICAgICAgICclLCAnICtcbiAgICAgICAgICAgIGhzbC5sICtcbiAgICAgICAgICAgICclKSdcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pepperi-addons-ngx-lib-color.js","sources":["../../../projects/ngx-lib/color/color-picker.component.ts","../../../projects/ngx-lib/color/color.component.ts","../../../projects/ngx-lib/color/color.module.ts","../../../projects/ngx-lib/color/public-api.ts","../../../projects/ngx-lib/color/pepperi-addons-ngx-lib-color.ts"],"sourcesContent":["import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n// import {\n// hex2hsl,\n// hslString2hsl,\n// rgbString2hsl,\n// IPepHslColor,\n// findClosestAccessibleColor,\n// hsl2hex,\n// convertHslToStringHsl,\n// } from './color-utils';\nimport { PepColorService, IPepHslColor } from '@pepperi-addons/ngx-lib';\n\nimport { PepColorType } from './color.model';\n\nenum PepContrastRatioType {\n AA = 4.5,\n AAA = 7,\n}\n\ninterface IPepColorPickerDialogData {\n value: string;\n type: PepColorType;\n showAAComplient: boolean;\n textColor: string;\n contrastRatio: PepContrastRatioType;\n}\n\n@Component({\n templateUrl: './color-picker.component.html',\n styleUrls: ['./color-picker.component.scss'],\n})\nexport class PepColorPickerComponent implements OnInit {\n static CURRENT_HUE = '--pep-color-picker-current-hue';\n private readonly defaultColor = '#ccc';\n\n checkAAComplient = true;\n\n constructor(\n private colorService: PepColorService,\n private dialogRef: MatDialogRef<PepColorPickerComponent>,\n @Inject(MAT_DIALOG_DATA) public data: IPepColorPickerDialogData\n ) {\n this.data.type = data ? data.type : 'any';\n this.data.showAAComplient = !data\n ? false\n : data.showAAComplient ?? true;\n this.data.textColor = data && data.textColor ? data.textColor : '#fff';\n this.data.contrastRatio =\n data && data.contrastRatio\n ? data.contrastRatio\n : PepContrastRatioType.AA;\n }\n\n private defaultHueBackground = `linear-gradient(to right,\n hsl(0, 100%, 50%) 0%,\n hsl(60, 100%, 50%) 17%,\n hsl(120, 100%, 50%) 33%,\n hsl(180, 100%, 50%) 50%,\n hsl(240, 100%, 50%) 67%,\n hsl(300, 100%, 50%) 83%,\n hsl(360, 100%, 50%) 100%)`;\n\n currentHue = 100;\n currentHueMin = 0;\n currentHueMax = 360;\n currentHueBackground = this.defaultHueBackground;\n\n private defaultSaturationBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 0.01%, 50%) 0%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 100%)`;\n\n currentSaturation = 50;\n currentSaturationMin = 0;\n currentSaturationMax = 100;\n currentSaturationBackground = this.defaultSaturationBackground;\n\n private defaultLightnessBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 100%, 100%) 0%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 50%,\n hsl(var(--pep-color-picker-current-hue), 100%, 0.01%) 100%)`;\n\n currentLightness = 50;\n currentLightnessMin = 0;\n currentLightnessMax = 100;\n currentLightnessBackground = this.defaultLightnessBackground;\n\n complientColor: string;\n isUserChooseAAComplientColor: boolean;\n\n ngOnInit(): void {\n this.initVars();\n this.checkAAComplient = this.data.showAAComplient;\n this.convertValueStringToColor(this.data.value);\n }\n\n initVars(): void {\n if (this.data.type === 'main') {\n this.currentLightnessMax = 10;\n this.currentLightness = 5;\n this.currentHueBackground = this.defaultHueBackground;\n this.currentSaturationBackground = this.defaultSaturationBackground;\n this.currentLightnessBackground = this.defaultLightnessBackground;\n } else if (this.data.type === 'success') {\n this.currentHueMin = 70;\n this.currentHueMax = 150;\n this.currentHue = 100;\n\n this.currentSaturationMin = 50;\n this.currentSaturationMax = 100;\n this.currentSaturation = 50;\n\n this.currentLightnessMin = 10;\n this.currentLightnessMax = 65;\n this.currentLightness = 50;\n\n this.currentHueBackground = `linear-gradient(to right,\n hsl(70, 100%, 50%) 0%,\n hsl(150, 100%, 50%) 100%)`;\n this.currentSaturationBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 50%, 50%) 50%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 100%)`;\n this.currentLightnessBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 100%, 65%) 10%,\n hsl(var(--pep-color-picker-current-hue), 100%, 35%) 35%,\n hsl(var(--pep-color-picker-current-hue), 100%, 10%) 65%)`;\n\n } else if (this.data.type === 'caution') {\n this.currentHueMin = -20;\n this.currentHueMax = 20;\n this.currentHue = 10;\n\n this.currentSaturationMin = 75;\n this.currentSaturationMax = 100;\n this.currentSaturation = 75;\n\n this.currentLightnessMin = 25;\n this.currentLightnessMax = 75;\n this.currentLightness = 50;\n\n this.currentHueBackground = `linear-gradient(to right,\n hsl(340, 100%, 50%) 0%,\n hsl(20, 100%, 50%) 100%)`;\n this.currentSaturationBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 75%, 50%) 75%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 100%)`;\n this.currentLightnessBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 100%, 75%) 25%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 50%,\n hsl(var(--pep-color-picker-current-hue), 100%, 25%) 75%)`;\n }\n }\n\n setCurrentHueInCss(): void {\n document.documentElement.style.setProperty(\n PepColorPickerComponent.CURRENT_HUE,\n this.currentHue.toString()\n );\n }\n\n convertValueStringToColor(color): void {\n if (color.indexOf('hsl') === 0) {\n const hsl = this.colorService.hslString2hsl(color);\n this.convertColorToValueString(hsl);\n } else if (color.indexOf('rgb') === 0) {\n const hsl = this.colorService.rgbString2hsl(color);\n this.convertColorToValueString(hsl);\n } else if (color.indexOf('#') === 0) {\n const hsl = this.colorService.hex2hsl(color);\n this.convertColorToValueString(hsl);\n } else {\n // Handle default.\n const hsl = this.colorService.hex2hsl(this.defaultColor);\n this.convertColorToValueString(hsl);\n }\n\n this.setCurrentHueInCss();\n }\n\n convertColorToValueString(hslColor: IPepHslColor): void {\n // Regular hue\n if (\n hslColor.h >= this.currentHueMin &&\n hslColor.h <= this.currentHueMax\n ) {\n this.currentHue = hslColor.h;\n } else if (\n this.currentHueMin < 0 &&\n hslColor.h >= 0 &&\n hslColor.h <= 360\n ) {\n // For min with - (change to the other side of the circle)\n hslColor.h = hslColor.h - 360;\n\n if (\n hslColor.h >= this.currentHueMin &&\n hslColor.h <= this.currentHueMax\n ) {\n this.currentHue = hslColor.h;\n }\n }\n\n this.currentSaturation =\n hslColor.s >= this.currentSaturationMin &&\n hslColor.s <= this.currentSaturationMax\n ? hslColor.s\n : this.currentSaturation;\n\n this.currentLightness =\n hslColor.l >= this.currentLightnessMin &&\n hslColor.l <= this.currentLightnessMax\n ? hslColor.l\n : this.currentLightness;\n\n // Write the value (if hue is changed to the other side of the circle return it back).\n const hsl = {\n h: this.currentHue,\n s: this.currentSaturation,\n l: this.currentLightness,\n };\n this.data.value = this.colorService.convertHslToStringHsl(hsl);\n\n // Check the contrast ratio - set the closest accessible color to complientColor\n // and update isUserChooseAAComplientColor.\n const adjustableColor = this.colorService.hsl2hex(hsl);\n const closestHex = this.colorService.findClosestAccessibleColor(\n adjustableColor,\n this.data.textColor,\n this.data.contrastRatio\n );\n\n this.isUserChooseAAComplientColor = adjustableColor === closestHex;\n this.complientColor = this.colorService.convertHslToStringHsl(\n this.colorService.hex2hsl(closestHex)\n );\n }\n\n onHueChange(value): void {\n this.convertColorToValueString({ h: value });\n this.setCurrentHueInCss();\n }\n\n onSaturationChange(value): void {\n // this.currentSaturation = event.value;\n this.convertColorToValueString({ s: value });\n }\n\n onLightnessChange(value): void {\n // this.currentLightness = event.value;\n this.convertColorToValueString({\n l:\n this.currentLightnessMax -\n value +\n this.currentLightnessMin,\n });\n }\n\n onColorValueChange(event): void {\n this.convertValueStringToColor(event.value);\n }\n\n onSave(event): void {\n const color = this.checkAAComplient\n ? this.complientColor\n : this.data.value;\n\n // this.notify.emit({ key: this.key, value: color });\n this.dialogRef.close(color);\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Output,\n Renderer2,\n ElementRef,\n EventEmitter,\n OnChanges,\n OnDestroy,\n} from '@angular/core';\nimport {\n PepCustomizationService,\n PepLayoutType,\n PepHorizontalAlignment,\n DEFAULT_HORIZONTAL_ALIGNMENT,\n} from '@pepperi-addons/ngx-lib';\nimport { PepDialogService } from '@pepperi-addons/ngx-lib/dialog';\nimport { PepColorPickerComponent } from './color-picker.component';\nimport { PepColorType } from './color.model';\n\n@Component({\n selector: 'pep-color',\n templateUrl: './color.component.html',\n styleUrls: ['./color.component.scss'],\n})\nexport class PepColorComponent implements OnInit, OnDestroy {\n @Input() key = '';\n @Input() value = '';\n @Input() label = '';\n @Input() disabled = false;\n @Input() xAlignment: PepHorizontalAlignment = DEFAULT_HORIZONTAL_ALIGNMENT;\n @Input() rowSpan = 1;\n @Input() type: PepColorType = 'any';\n\n @Input() showTitle = true;\n @Input() showAAComplient = true;\n @Input() layoutType: PepLayoutType = 'form';\n\n @Output()\n valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n constructor(\n private dialogService: PepDialogService,\n private renderer: Renderer2,\n private element: ElementRef\n ) {}\n\n ngOnInit(): void {\n this.renderer.addClass(\n this.element.nativeElement,\n PepCustomizationService.STAND_ALONE_FIELD_CLASS_NAME\n );\n }\n\n ngOnDestroy(): void {\n //\n }\n\n changeColor(value: any): void {\n this.value = value;\n this.valueChange.emit(value);\n }\n\n chooseColor(): void {\n const dialogRef = this.dialogService.openDialog(\n PepColorPickerComponent,\n {\n value: this.value,\n type: this.type,\n showAAComplient: this.showAAComplient,\n }\n );\n\n dialogRef.afterClosed().subscribe((value) => {\n if (value !== undefined && value !== null) {\n this.changeColor(value);\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSliderModule } from '@angular/material/slider';\n\nimport { PepNgxLibModule } from '@pepperi-addons/ngx-lib';\nimport { PepDialogModule } from '@pepperi-addons/ngx-lib/dialog';\nimport { PepSliderModule } from '@pepperi-addons/ngx-lib/slider';\n\nimport {\n PepIconModule,\n PepIconRegistry,\n pepIconSystemEdit,\n pepIconSystemOk,\n pepIconSystemClose,\n} from '@pepperi-addons/ngx-lib/icon';\nimport { PepFieldTitleModule } from '@pepperi-addons/ngx-lib/field-title';\nimport { PepTextboxModule } from '@pepperi-addons/ngx-lib/textbox';\n\nimport { PepColorComponent } from './color.component';\nimport { PepColorPickerComponent } from './color-picker.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n // Material modules\n MatCommonModule,\n MatButtonModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatDialogModule,\n MatIconModule,\n MatSliderModule,\n // ngx-lib modules\n PepNgxLibModule,\n PepDialogModule,\n PepIconModule,\n PepSliderModule,\n PepFieldTitleModule,\n PepTextboxModule,\n ],\n exports: [PepColorComponent],\n declarations: [PepColorComponent, PepColorPickerComponent],\n entryComponents: [PepColorPickerComponent],\n})\nexport class PepColorModule {\n constructor(private pepIconRegistry: PepIconRegistry) {\n this.pepIconRegistry.registerIcons([\n pepIconSystemEdit,\n pepIconSystemOk,\n pepIconSystemClose,\n ]);\n }\n}\n","/*\n * Public API Surface of ngx-lib/color\n */\nexport * from './color.module';\nexport * from './color.model';\n// export * from './color-utils';\nexport * from './color.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {PepColorPickerComponent as ɵa} from './color-picker.component';"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pepperi-addons-ngx-lib-color.js","sources":["../../../projects/ngx-lib/color/color-picker.component.ts","../../../projects/ngx-lib/color/color.component.ts","../../../projects/ngx-lib/color/color.module.ts","../../../projects/ngx-lib/color/public-api.ts","../../../projects/ngx-lib/color/pepperi-addons-ngx-lib-color.ts"],"sourcesContent":["import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n// import {\n// hex2hsl,\n// hslString2hsl,\n// rgbString2hsl,\n// IPepHslColor,\n// findClosestAccessibleColor,\n// hsl2hex,\n// convertHslToStringHsl,\n// } from './color-utils';\nimport { PepColorService, IPepHslColor } from '@pepperi-addons/ngx-lib';\n\nimport { PepColorType } from './color.model';\n\nenum PepContrastRatioType {\n AA = 4.5,\n AAA = 7,\n}\n\ninterface IPepColorPickerDialogData {\n value: string;\n type: PepColorType;\n showAAComplient: boolean;\n textColor: string;\n contrastRatio: PepContrastRatioType;\n}\n\n@Component({\n templateUrl: './color-picker.component.html',\n styleUrls: ['./color-picker.component.scss'],\n})\nexport class PepColorPickerComponent implements OnInit {\n static CURRENT_HUE = '--pep-color-picker-current-hue';\n private readonly defaultColor = '#ccc';\n\n checkAAComplient = true;\n\n constructor(\n private colorService: PepColorService,\n private dialogRef: MatDialogRef<PepColorPickerComponent>,\n @Inject(MAT_DIALOG_DATA) public data: IPepColorPickerDialogData\n ) {\n this.data.type = data ? data.type : 'any';\n this.data.showAAComplient = !data\n ? false\n : data.showAAComplient ?? true;\n this.data.textColor = data && data.textColor ? data.textColor : '#fff';\n this.data.contrastRatio =\n data && data.contrastRatio\n ? data.contrastRatio\n : PepContrastRatioType.AA;\n }\n\n private defaultHueBackground = `linear-gradient(to right,\n hsl(0, 100%, 50%) 0%,\n hsl(60, 100%, 50%) 17%,\n hsl(120, 100%, 50%) 33%,\n hsl(180, 100%, 50%) 50%,\n hsl(240, 100%, 50%) 67%,\n hsl(300, 100%, 50%) 83%,\n hsl(360, 100%, 50%) 100%)`;\n\n currentHue = 100;\n currentHueMin = 0;\n currentHueMax = 360;\n currentHueBackground = this.defaultHueBackground;\n\n private defaultSaturationBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 0.01%, 50%) 0%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 100%)`;\n\n currentSaturation = 50;\n currentSaturationMin = 0;\n currentSaturationMax = 100;\n currentSaturationBackground = this.defaultSaturationBackground;\n\n private defaultLightnessBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 100%, 100%) 0%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 50%,\n hsl(var(--pep-color-picker-current-hue), 100%, 0.01%) 100%)`;\n\n currentLightness = 50;\n currentLightnessMin = 0;\n currentLightnessMax = 100;\n currentLightnessBackground = this.defaultLightnessBackground;\n\n complientColor: string;\n isUserChooseAAComplientColor: boolean;\n\n ngOnInit(): void {\n this.initVars();\n this.checkAAComplient = this.data.showAAComplient;\n this.convertValueStringToColor(this.data.value);\n }\n\n initVars(): void {\n if (this.data.type === 'main') {\n this.currentLightnessMax = 10;\n this.currentLightness = 5;\n this.currentHueBackground = this.defaultHueBackground;\n this.currentSaturationBackground = this.defaultSaturationBackground;\n this.currentLightnessBackground = this.defaultLightnessBackground;\n } else if (this.data.type === 'success') {\n this.currentHueMin = 70;\n this.currentHueMax = 150;\n this.currentHue = 100;\n\n this.currentSaturationMin = 50;\n this.currentSaturationMax = 100;\n this.currentSaturation = 50;\n\n this.currentLightnessMin = 10;\n this.currentLightnessMax = 65;\n this.currentLightness = 50;\n\n this.currentHueBackground = `linear-gradient(to right,\n hsl(70, 100%, 50%) 0%,\n hsl(150, 100%, 50%) 100%)`;\n this.currentSaturationBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 50%, 50%) 50%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 100%)`;\n this.currentLightnessBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 100%, 65%) 10%,\n hsl(var(--pep-color-picker-current-hue), 100%, 35%) 35%,\n hsl(var(--pep-color-picker-current-hue), 100%, 10%) 65%)`;\n\n } else if (this.data.type === 'caution') {\n this.currentHueMin = -20;\n this.currentHueMax = 20;\n this.currentHue = 10;\n\n this.currentSaturationMin = 75;\n this.currentSaturationMax = 100;\n this.currentSaturation = 75;\n\n this.currentLightnessMin = 25;\n this.currentLightnessMax = 75;\n this.currentLightness = 50;\n\n this.currentHueBackground = `linear-gradient(to right,\n hsl(340, 100%, 50%) 0%,\n hsl(20, 100%, 50%) 100%)`;\n this.currentSaturationBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 75%, 50%) 75%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 100%)`;\n this.currentLightnessBackground = `linear-gradient(to right,\n hsl(var(--pep-color-picker-current-hue), 100%, 75%) 25%,\n hsl(var(--pep-color-picker-current-hue), 100%, 50%) 50%,\n hsl(var(--pep-color-picker-current-hue), 100%, 25%) 75%)`;\n }\n }\n\n setCurrentHueInCss(): void {\n document.documentElement.style.setProperty(\n PepColorPickerComponent.CURRENT_HUE,\n this.currentHue.toString()\n );\n }\n\n convertValueStringToColor(color): void {\n if (color.indexOf('hsl') === 0) {\n const hsl = this.colorService.hslString2hsl(color);\n this.convertColorToValueString(hsl);\n } else if (color.indexOf('rgb') === 0) {\n const hsl = this.colorService.rgbString2hsl(color);\n this.convertColorToValueString(hsl);\n } else if (color.indexOf('#') === 0) {\n const hsl = this.colorService.hex2hsl(color);\n this.convertColorToValueString(hsl);\n } else {\n // Handle default.\n const hsl = this.colorService.hex2hsl(this.defaultColor);\n this.convertColorToValueString(hsl);\n }\n\n this.setCurrentHueInCss();\n }\n\n convertColorToValueString(hslColor: IPepHslColor): void {\n // Regular hue\n if (\n hslColor.h >= this.currentHueMin &&\n hslColor.h <= this.currentHueMax\n ) {\n this.currentHue = hslColor.h;\n } else if (\n this.currentHueMin < 0 &&\n hslColor.h >= 0 &&\n hslColor.h <= 360\n ) {\n // For min with - (change to the other side of the circle)\n hslColor.h = hslColor.h - 360;\n\n if (\n hslColor.h >= this.currentHueMin &&\n hslColor.h <= this.currentHueMax\n ) {\n this.currentHue = hslColor.h;\n }\n }\n\n this.currentSaturation =\n hslColor.s >= this.currentSaturationMin &&\n hslColor.s <= this.currentSaturationMax\n ? hslColor.s\n : this.currentSaturation;\n\n this.currentLightness =\n hslColor.l >= this.currentLightnessMin &&\n hslColor.l <= this.currentLightnessMax\n ? hslColor.l\n : this.currentLightness;\n\n // Write the value (if hue is changed to the other side of the circle return it back).\n const hsl = {\n h: this.currentHue,\n s: this.currentSaturation,\n l: this.currentLightness,\n };\n this.data.value = this.colorService.convertHslToStringHsl(hsl);\n\n // Check the contrast ratio - set the closest accessible color to complientColor\n // and update isUserChooseAAComplientColor.\n const adjustableColor = this.colorService.hsl2hex(hsl);\n const closestHex = this.colorService.findClosestAccessibleColor(\n adjustableColor,\n this.data.textColor,\n this.data.contrastRatio\n );\n\n this.isUserChooseAAComplientColor = adjustableColor === closestHex;\n this.complientColor = this.colorService.convertHslToStringHsl(\n this.colorService.hex2hsl(closestHex)\n );\n }\n\n onHueChange(value): void {\n this.convertColorToValueString({ h: value });\n this.setCurrentHueInCss();\n }\n\n onSaturationChange(value): void {\n // this.currentSaturation = event.value;\n this.convertColorToValueString({ s: value });\n }\n\n onLightnessChange(value): void {\n // this.currentLightness = event.value;\n this.convertColorToValueString({\n l:\n this.currentLightnessMax -\n value +\n this.currentLightnessMin,\n });\n }\n\n onColorValueChange(event): void {\n this.convertValueStringToColor(event.value);\n }\n\n onSave(event): void {\n const color = this.checkAAComplient\n ? this.complientColor\n : this.data.value;\n\n // this.notify.emit({ key: this.key, value: color });\n this.dialogRef.close(color);\n }\n}\n","import {\n Component,\n OnInit,\n Input,\n Output,\n Renderer2,\n ElementRef,\n EventEmitter,\n OnChanges,\n OnDestroy,\n} from '@angular/core';\nimport {\n PepCustomizationService,\n PepLayoutType,\n PepHorizontalAlignment,\n DEFAULT_HORIZONTAL_ALIGNMENT,\n} from '@pepperi-addons/ngx-lib';\nimport { PepDialogService } from '@pepperi-addons/ngx-lib/dialog';\nimport { PepColorPickerComponent } from './color-picker.component';\nimport { PepColorType } from './color.model';\n\n@Component({\n selector: 'pep-color',\n templateUrl: './color.component.html',\n styleUrls: ['./color.component.scss'],\n})\nexport class PepColorComponent implements OnInit, OnDestroy {\n @Input() key = '';\n @Input() value = '';\n @Input() label = '';\n @Input() disabled = false;\n @Input() xAlignment: PepHorizontalAlignment = DEFAULT_HORIZONTAL_ALIGNMENT;\n @Input() rowSpan = 1;\n @Input() type: PepColorType = 'any';\n\n @Input() showTitle = true;\n @Input() showAAComplient = true;\n @Input() layoutType: PepLayoutType = 'form';\n\n @Output()\n valueChange: EventEmitter<string> = new EventEmitter<string>();\n\n constructor(\n private dialogService: PepDialogService,\n private renderer: Renderer2,\n private element: ElementRef\n ) {}\n\n ngOnInit(): void {\n this.renderer.addClass(\n this.element.nativeElement,\n PepCustomizationService.STAND_ALONE_FIELD_CLASS_NAME\n );\n }\n\n ngOnDestroy(): void {\n //\n }\n\n changeColor(value: any): void {\n this.value = value;\n this.valueChange.emit(value);\n }\n\n chooseColor(): void {\n const dialogRef = this.dialogService.openDialog(\n PepColorPickerComponent,\n {\n value: this.value,\n type: this.type,\n showAAComplient: this.showAAComplient,\n }\n );\n\n dialogRef.afterClosed().subscribe((value) => {\n if (value !== undefined && value !== null) {\n this.changeColor(value);\n }\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSliderModule } from '@angular/material/slider';\n\nimport { PepNgxLibModule } from '@pepperi-addons/ngx-lib';\nimport { PepDialogModule } from '@pepperi-addons/ngx-lib/dialog';\nimport { PepSliderModule } from '@pepperi-addons/ngx-lib/slider';\n\nimport {\n PepIconModule,\n PepIconRegistry,\n pepIconSystemEdit,\n pepIconSystemOk,\n pepIconSystemClose,\n} from '@pepperi-addons/ngx-lib/icon';\nimport { PepFieldTitleModule } from '@pepperi-addons/ngx-lib/field-title';\nimport { PepTextboxModule } from '@pepperi-addons/ngx-lib/textbox';\n\nimport { PepColorComponent } from './color.component';\nimport { PepColorPickerComponent } from './color-picker.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n // Material modules\n MatCommonModule,\n MatButtonModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatDialogModule,\n MatIconModule,\n MatSliderModule,\n // ngx-lib modules\n PepNgxLibModule,\n PepDialogModule,\n PepIconModule,\n PepSliderModule,\n PepFieldTitleModule,\n PepTextboxModule,\n ],\n exports: [PepColorComponent],\n declarations: [PepColorComponent, PepColorPickerComponent],\n entryComponents: [PepColorPickerComponent],\n})\nexport class PepColorModule {\n constructor(private pepIconRegistry: PepIconRegistry) {\n this.pepIconRegistry.registerIcons([\n pepIconSystemEdit,\n pepIconSystemOk,\n pepIconSystemClose,\n ]);\n }\n}\n","/*\n * Public API Surface of ngx-lib/color\n */\nexport * from './color.module';\nexport * from './color.model';\nexport * from './color.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {PepColorPickerComponent as ɵa} from './color-picker.component';"],"names":[],"mappings":"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"}
|