@dsivd/prestations-ng 16.2.1-beta.1 → 16.2.1-beta.2
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/CHANGELOG.md +5 -0
- package/UPGRADING_V16.md +3 -55
- package/dsivd-prestations-ng-v16.2.1-beta.2.tgz +0 -0
- package/esm2020/foehn-input/foehn-input-number.component.mjs +8 -3
- package/esm2020/foehn-input-date/foehn-input-date.component.mjs +1 -1
- package/esm2020/foehn-input-time/foehn-input-time.component.mjs +1 -1
- package/esm2020/foehn-nav13/foehn-input-nav13.component.mjs +3 -3
- package/fesm2015/dsivd-prestations-ng.mjs +11 -6
- package/fesm2015/dsivd-prestations-ng.mjs.map +1 -1
- package/fesm2020/dsivd-prestations-ng.mjs +11 -6
- package/fesm2020/dsivd-prestations-ng.mjs.map +1 -1
- package/foehn-input/foehn-input-number.component.d.ts +2 -1
- package/package.json +1 -1
- package/dsivd-prestations-ng-v16.2.1-beta.1.tgz +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -31,6 +31,11 @@ A change is considered **breaking** if you have to change your code or update yo
|
|
|
31
31
|
|
|
32
32
|
## [16.2.1]
|
|
33
33
|
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
- [foehn-input-number](projects/prestations-ng/src/foehn-input/foehn-input-number.component.ts)
|
|
37
|
+
- add `@Input() allowLeadingZero = false` to specify if we allow leading `0` such as NAVS13 numbers
|
|
38
|
+
|
|
34
39
|
### Updated
|
|
35
40
|
|
|
36
41
|
- [breadcrumb-event.service.ts](projects/prestations-ng/src/foehn-breadcrumb/breadcrumb-event.service.ts)
|
package/UPGRADING_V16.md
CHANGED
|
@@ -15,23 +15,15 @@ Follow [our migration guide](ESLINT_MIGRATION_GUIDE.md) to migrate your project
|
|
|
15
15
|
|
|
16
16
|
##### If you are using our `slave-apps`
|
|
17
17
|
|
|
18
|
-
Be sure to update your `slave-apps` git repository and
|
|
18
|
+
Be sure to update your `slave-apps` git repository and source your bashrc (or whatever env file you're using) so you will be using node16 by default, verify by executing :
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
21
|
+
node -v
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
which should switch your node version to 16+
|
|
25
|
-
|
|
26
24
|
##### If you are NOT using our `slave-apps`
|
|
27
25
|
|
|
28
|
-
Be sure to use a node version 16
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
node --version
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
which should print out a version 16+ otherwise, install a node 16+
|
|
26
|
+
Be sure to use a node version 16+ and use the same command as above.
|
|
35
27
|
|
|
36
28
|
#### In your project
|
|
37
29
|
|
|
@@ -45,47 +37,6 @@ Update your `package.json` to specify node engine
|
|
|
45
37
|
}
|
|
46
38
|
```
|
|
47
39
|
|
|
48
|
-
#### In your build
|
|
49
|
-
|
|
50
|
-
- Open your `jenkins` folder and update your jenkins files.
|
|
51
|
-
- Define a variable if it does not already exist and add `nodeVersion: 16` then pass it on to the build.
|
|
52
|
-
|
|
53
|
-
##### UT folder
|
|
54
|
-
|
|
55
|
-
```groovy
|
|
56
|
-
def args = [
|
|
57
|
-
nodeVersion: 16
|
|
58
|
-
]
|
|
59
|
-
|
|
60
|
-
stage('Build pipeline') {
|
|
61
|
-
buildPipeline(args)
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
##### devex > snap folder
|
|
66
|
-
|
|
67
|
-
```groovy
|
|
68
|
-
def buildArgs = [
|
|
69
|
-
nodeVersion : 16
|
|
70
|
-
]
|
|
71
|
-
|
|
72
|
-
stage('Snap2Devex Skeleton') {
|
|
73
|
-
snap2Devex(buildArgs)
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
##### devex > stable folder
|
|
78
|
-
|
|
79
|
-
```groovy
|
|
80
|
-
def args = [
|
|
81
|
-
nodeVersion : 16
|
|
82
|
-
]
|
|
83
|
-
|
|
84
|
-
stage('Stable2Devex') {
|
|
85
|
-
stable2Devex(args)
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
40
|
### Updating Angular
|
|
90
41
|
|
|
91
42
|
`prestations-ng` **v16+** now supports **Angular v15**. You can follow the Angular update guide
|
|
@@ -399,7 +350,6 @@ Remove `chromium-headless` label attribute on your args.
|
|
|
399
350
|
|
|
400
351
|
```diff
|
|
401
352
|
def args = [
|
|
402
|
-
nodeVersion: 16,
|
|
403
353
|
- label: 'chromium-headless'
|
|
404
354
|
]
|
|
405
355
|
```
|
|
@@ -408,7 +358,6 @@ def args = [
|
|
|
408
358
|
|
|
409
359
|
```diff
|
|
410
360
|
def buildArgs = [
|
|
411
|
-
nodeVersion : 16,
|
|
412
361
|
- label: 'chromium-headless'
|
|
413
362
|
]
|
|
414
363
|
```
|
|
@@ -417,7 +366,6 @@ def buildArgs = [
|
|
|
417
366
|
|
|
418
367
|
```diff
|
|
419
368
|
def args = [
|
|
420
|
-
nodeVersion : 16,
|
|
421
369
|
- label: 'chromium-headless'
|
|
422
370
|
]
|
|
423
371
|
```
|
|
Binary file
|
|
@@ -23,6 +23,7 @@ export class FoehnInputNumberComponent extends FoehnInputStringComponent {
|
|
|
23
23
|
this.hideStandardHelpText = false;
|
|
24
24
|
this.maxDecimalCount = 2;
|
|
25
25
|
this.allowFreeInput = false;
|
|
26
|
+
this.allowLeadingZero = false;
|
|
26
27
|
}
|
|
27
28
|
get model() {
|
|
28
29
|
// If the setter is overridden, it's critical to override the getter too.
|
|
@@ -154,7 +155,9 @@ export class FoehnInputNumberComponent extends FoehnInputStringComponent {
|
|
|
154
155
|
const noCommaString = this.replaceCommaWithDot(value);
|
|
155
156
|
const cleanDecimals = this.cleanDecimals(noCommaString);
|
|
156
157
|
const cleanNonNumericCharacters = this.removeNonNumericCharacters(cleanDecimals);
|
|
157
|
-
const cleanNumber = this.
|
|
158
|
+
const cleanNumber = !this.allowLeadingZero
|
|
159
|
+
? this.removeLeadingZero(cleanNonNumericCharacters, this.allowDecimal)
|
|
160
|
+
: cleanNonNumericCharacters;
|
|
158
161
|
if (cleanNumber && cleanNumber.length) {
|
|
159
162
|
return cleanNumber.substring(0, this.getMaxLength());
|
|
160
163
|
}
|
|
@@ -281,7 +284,7 @@ export class FoehnInputNumberComponent extends FoehnInputStringComponent {
|
|
|
281
284
|
}
|
|
282
285
|
}
|
|
283
286
|
FoehnInputNumberComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FoehnInputNumberComponent, deps: [{ token: i1.CurrencyHelper }, { token: i2.SdkDictionaryService }], target: i0.ɵɵFactoryTarget.Component });
|
|
284
|
-
FoehnInputNumberComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FoehnInputNumberComponent, selector: "foehn-input-number", inputs: { hideStandardHelpText: "hideStandardHelpText", allowDecimal: "allowDecimal", allowNegative: "allowNegative", maxDecimalCount: "maxDecimalCount", allowFreeInput: "allowFreeInput", model: "model" }, providers: [
|
|
287
|
+
FoehnInputNumberComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FoehnInputNumberComponent, selector: "foehn-input-number", inputs: { hideStandardHelpText: "hideStandardHelpText", allowDecimal: "allowDecimal", allowNegative: "allowNegative", maxDecimalCount: "maxDecimalCount", allowFreeInput: "allowFreeInput", allowLeadingZero: "allowLeadingZero", model: "model" }, providers: [
|
|
285
288
|
{
|
|
286
289
|
provide: FoehnInputComponent,
|
|
287
290
|
useExisting: forwardRef(() => FoehnInputNumberComponent),
|
|
@@ -307,7 +310,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
307
310
|
type: Input
|
|
308
311
|
}], allowFreeInput: [{
|
|
309
312
|
type: Input
|
|
313
|
+
}], allowLeadingZero: [{
|
|
314
|
+
type: Input
|
|
310
315
|
}], model: [{
|
|
311
316
|
type: Input
|
|
312
317
|
}] } });
|
|
313
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJUixNQUFNLGVBQWUsQ0FBQztBQUV2QiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNILHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ3RCLE1BQU0sNENBQTRDLENBQUM7QUFDcEQsT0FBTyxFQUVILGtCQUFrQixFQUNyQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDSCw2QkFBNkIsRUFDN0IsMENBQTBDLEVBQzFDLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIsb0NBQW9DLEVBQ3BDLHdCQUF3QixFQUN4QixlQUFlLEVBQ2xCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFFekIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQVcsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztBQWNyRSxNQUFNLE9BQU8seUJBQ1QsU0FBUSx5QkFBeUI7SUFtQmpDLFlBQ1ksY0FBOEIsRUFDOUIsaUJBQXVDO1FBRS9DLEtBQUssRUFBRSxDQUFDO1FBSEEsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBc0I7UUFsQm5ELHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQVM3QixvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUdwQixtQkFBYyxHQUFHLEtBQUssQ0FBQztJQVN2QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wseUVBQXlFO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDSSxLQUFLLENBQUMsS0FBYTtRQUNuQiwwRkFBMEY7UUFDMUYsNkZBQTZGO1FBQzdGLDhGQUE4RjtRQUM5RixvR0FBb0c7UUFDcEcsaUVBQWlFO1FBQ2pFLGlEQUFpRDtRQUNqRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBRW5CLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQzVCLENBQUMsQ0FBQyxvQkFBb0I7WUFDdEIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDO1FBRTlCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUM7YUFDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEtBQUssTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sa0JBQWtCLEdBQ3BCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxLQUFLLE9BQU8sQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDO1FBRXZFLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztTQUN4RDtRQUVELElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixPQUFPO1NBQ1Y7UUFDRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBRWpFLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RCLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDOUIsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDNUI7U0FDSjthQUFNO1lBQ0gsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELFdBQVc7Z0JBQ1AsYUFBYSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVE7b0JBQzlDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUNqQiwwQ0FBMEMsRUFDMUMsRUFBRSxDQUNMO29CQUNILENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDeEIsd0RBQXdEO1lBQ3hELHlCQUF5QjtZQUN6QixJQUNJLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDdkQsQ0FBQyxVQUFVLEVBQ2I7Z0JBQ0UsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDNUI7U0FDSjtRQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFakMsa0dBQWtHO1FBQ2xHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLEtBQWE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxLQUFhO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUM5QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sa0JBQWtCLENBQUMsYUFBc0IsS0FBSztRQUNsRCxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN6Qyw2QkFBNkI7WUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxVQUFVO29CQUNkLENBQUMsQ0FBQyxvQ0FBb0M7b0JBQ3RDLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQzthQUNwRDtZQUNELGdCQUFnQjtZQUNoQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxVQUFVO29CQUNkLENBQUMsQ0FBQyx1QkFBdUI7b0JBQ3pCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQzthQUN2QztZQUNELGlCQUFpQjtZQUNqQixPQUFPLENBQUMsVUFBVTtnQkFDZCxDQUFDLENBQUMsd0JBQXdCO2dCQUMxQixDQUFDLENBQUMsOEJBQThCLENBQUM7U0FDeEM7UUFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQ2pFLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLGtCQUFrQixDQUFDO1lBQ3pELENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLEtBQWE7UUFDNUMsT0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUNyQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xELENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEIsQ0FBQztJQUVPLGFBQWEsQ0FDakIsS0FBYSxFQUNiLFlBQW9CLGtCQUFrQjtRQUV0QyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDNUQsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDdkMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFhO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUM3RCxhQUFhLENBQ2hCLENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQ3RDLHlCQUF5QixFQUN6QixJQUFJLENBQUMsWUFBWSxDQUNwQixDQUFDO1FBRUYsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRTtZQUNuQyxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUVPLHVCQUF1QixDQUFDLFdBQW1CO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLGdFQUFnRTtZQUNoRSxPQUFPO1NBQ1Y7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7UUFDN0QsSUFBSSxjQUFjLEtBQUssV0FBVyxFQUFFO1lBQ2hDLGtHQUFrRztZQUNsRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1NBQ3ZEO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzVCLHVHQUF1RztRQUN2Ryx5R0FBeUc7UUFDekcsWUFBWTtRQUNaLE1BQU0sVUFBVSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9DLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDckMsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFO29CQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsT0FBTyxDQUFDO2lCQUNsRDtxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztpQkFDdEI7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUM5Qyw2Q0FBNkMsRUFDN0M7b0JBQ0ksUUFBUSxFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xELFFBQVEsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUNyRCxDQUNKLENBQUM7YUFDTDtZQUNELE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxPQUFPLENBQUM7U0FDbEQ7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVk7WUFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRXJCLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUMxQjthQUFNO1lBQ0gsV0FBVyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixXQUFXLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2FBQ3pEO1NBQ0o7UUFFRCxJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVixXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUMxQjthQUFNO1lBQ0gsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhO2dCQUM1QixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNWLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhO29CQUM3QixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQzdDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3JEO1NBQ0o7UUFFRCxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQzlDLDZDQUE2QyxFQUM3QztZQUNJLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUN2QyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7U0FDMUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFzQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsT0FBTyxxQkFBcUIsQ0FDeEIsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUNqQixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxjQUFjLENBQ3RCLENBQUM7U0FDTDtRQUNELE9BQU8sd0JBQXdCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLGlCQUFpQixDQUNyQixLQUFhLEVBQ2IsZUFBd0IsS0FBSztRQUU3QixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUN2QyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsa0VBQWtFO1FBQ2xFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCwrR0FBK0c7UUFDL0csSUFBSSxZQUFZLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNyRCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELG9EQUFvRDtRQUNwRCxJQUNJLENBQUMsWUFBWTtZQUNiLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ25CLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNsQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFDNUI7WUFDRSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDckMsd0NBQXdDO1lBQ3hDLElBQ0ksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDcEIsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUNsQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQy9CO2dCQUNFLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM3QjtZQUVELDBDQUEwQztZQUMxQyxJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUNuQixLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQ2xCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFDL0I7Z0JBQ0UsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOztzSEFuV1EseUJBQXlCOzBHQUF6Qix5QkFBeUIsMlBBUnZCO1FBQ1A7WUFDSSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7WUFDeEQsS0FBSyxFQUFFLElBQUk7U0FDZDtLQUNKLHNFQy9DTCxpd0ZBaUZBOzJGRGhDYSx5QkFBeUI7a0JBWnJDLFNBQVM7K0JBQ0ksb0JBQW9CLGFBR25CO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDBCQUEwQixDQUFDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjt3SUFNRCxvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sY0FBYztzQkFEYixLQUFLO2dCQWtCRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHtcbiAgICBmb3JtYXREZWNpbWFsQ3VycmVuY3ksXG4gICAgZm9ybWF0Tm9uRGVjaW1hbEN1cnJlbmN5LFxuICAgIGZvcm1hdE51bWJlckFzR2l2ZW5cbn0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jdXJyZW5jeS1mb3JtYXR0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gICAgQ3VycmVuY3lIZWxwZXIsXG4gICAgREVDSU1BTFNfU0VQQVJBVE9SXG59IGZyb20gJy4uL3Nkay1jdXJyZW5jeS9jdXJyZW5jeS5oZWxwZXInO1xuaW1wb3J0IHsgU2RrRGljdGlvbmFyeVNlcnZpY2UgfSBmcm9tICcuLi9zZGstZGljdGlvbmFyeS9zZGstZGljdGlvbmFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvZWhuSW5wdXRDb21wb25lbnQgfSBmcm9tICcuL2ZvZWhuLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb2VobklucHV0U3RyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9mb2Vobi1pbnB1dC1zdHJpbmcuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgQ0xFQU5fREVDSU1BTF9OVU1CRVJTX1BBVFRFUk4sXG4gICAgQ0xFQU5fTkVHQVRJVkVfQU5EX0RFQ0lNQUxfTlVNQkVSU19QQVRURVJOLFxuICAgIENMRUFOX05FR0FUSVZFX05VTUJFUlNfUEFUVEVSTixcbiAgICBDTEVBTl9OVU1CRVJTX1BBVFRFUk4sXG4gICAgREVDSU1BTF9OVU1CRVJTX1BBVFRFUk4sXG4gICAgSFRNTF9ERUNJTUFMX1BBVFRFUk4sXG4gICAgSFRNTF9OT19ERUNJTUFMX1BBVFRFUk4sXG4gICAgTkVHQVRJVkVfQU5EX0RFQ0lNQUxfTlVNQkVSU19QQVRURVJOLFxuICAgIE5FR0FUSVZFX05VTUJFUlNfUEFUVEVSTixcbiAgICBOVU1CRVJTX1BBVFRFUk5cbn0gZnJvbSAnLi9wYXR0ZXJuLmNvbnN0JztcblxuY29uc3QgaXNEZWZpbmVkID0gKHZhbHVlOiBudW1iZXIpOiBib29sZWFuID0+IHZhbHVlID09PSAwIHx8ICEhdmFsdWU7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4taW5wdXQtbnVtYmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9laG4taW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZvZWhuLWlucHV0LmNvbXBvbmVudC5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRm9laG5JbnB1dENvbXBvbmVudCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvZWhuSW5wdXROdW1iZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5JbnB1dE51bWJlckNvbXBvbmVudFxuICAgIGV4dGVuZHMgRm9laG5JbnB1dFN0cmluZ0NvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZVN0YW5kYXJkSGVscFRleHQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dEZWNpbWFsOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBhbGxvd05lZ2F0aXZlOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBtYXhEZWNpbWFsQ291bnQgPSAyO1xuXG4gICAgQElucHV0KClcbiAgICBhbGxvd0ZyZWVJbnB1dCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBpbml0aWFsSGVscFRleHQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGN1cnJlbmN5SGVscGVyOiBDdXJyZW5jeUhlbHBlcixcbiAgICAgICAgcHJpdmF0ZSBkaWN0aW9uYXJ5U2VydmljZTogU2RrRGljdGlvbmFyeVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBnZXQgbW9kZWwoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gSWYgdGhlIHNldHRlciBpcyBvdmVycmlkZGVuLCBpdCdzIGNyaXRpY2FsIHRvIG92ZXJyaWRlIHRoZSBnZXR0ZXIgdG9vLlxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbF87XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgbW9kZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgdHJpZ2dlciB0aGUgY29tcG9uZW50J3MgdmVyc2lvbiBvZiB1cGRhdGVOZ01vZGVsIHN0cmFpdCBhd2F5IGFzIHRoaXMgbWlnaHRcbiAgICAgICAgLy8gYmUgY2FsbGVkIGJlZm9yZSBhbGxvd0RlY2ltYWwgb3IgYWxsb3dOZWdhdGl2ZSBhcmUgcHJvcGVybHkgc2V0IChiZWZvcmUgdGhlIGluaXQgbGlmZWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQpLiBUaGlzIGlzIGNyaXRpY2FsIHRvIG5vdCByZS1mb3JtYXQgdGhlIGlucHV0IGJlZm9yZSB0aGUgT25Jbml0LCBvdGhlcndpc2VcbiAgICAgICAgLy8gd2UgbWlnaHQgZW5kIHVwIHdpdGggaW52YWxpZCB2YWx1ZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuIHRoaXMudXBkYXRlTmdNb2RlbCBpcyBjYWxsZWQgaW1wbGljaXRseVxuICAgICAgICAvLyBhcyBzdXBlci51cGRhdGVOZ01vZGVsIHdpbGwgZW1pdCBhIGNoYW5nZSBvbiB0aGlzLm1vZGVsQ2hhbmdlLlxuICAgICAgICAvLyBGSVhNRSB0aGlzIGlzIGEgaGFjayBhbmQgc2hvdWxkIGJlIHJlZmFjdG9yZWQuXG4gICAgICAgIHN1cGVyLnVwZGF0ZU5nTW9kZWwodmFsdWUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMudHlwZSA9ICd0ZXh0JztcblxuICAgICAgICAvLyBQYXR0ZXJuIHVzZWQgb25seSBmb3IgbnVtcGFkIHRyaWdnZXIgb24gbW9iaWxlIHBob25lc1xuICAgICAgICB0aGlzLnBhdHRlcm4gPSB0aGlzLmFsbG93RGVjaW1hbFxuICAgICAgICAgICAgPyBIVE1MX0RFQ0lNQUxfUEFUVEVSTlxuICAgICAgICAgICAgOiBIVE1MX05PX0RFQ0lNQUxfUEFUVEVSTjtcblxuICAgICAgICB0aGlzLm1heGxlbmd0aCA9ICEhdGhpcy5tYXhsZW5ndGggPyB0aGlzLm1heGxlbmd0aCA6IDk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzID0gT2JqZWN0LmtleXMoY2hhbmdlcylcbiAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrICE9PSAnbW9kZWwnKVxuICAgICAgICAgICAgLm1hcChrID0+IGNoYW5nZXNba10pXG4gICAgICAgICAgICAuZmluZChjaGFuZ2UgPT4gY2hhbmdlLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlLnByZXZpb3VzVmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IGhlbHBUZXh0SGFzQ2hhbmdlZCA9XG4gICAgICAgICAgICBjaGFuZ2VzLmhlbHBUZXh0Py5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuaGVscFRleHQ/LnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgaWYgKGhlbHBUZXh0SGFzQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsSGVscFRleHQgPSBjaGFuZ2VzLmhlbHBUZXh0LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLm1hbmFnZUhlbHBUZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dGcmVlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRNYXhMZW5ndGgoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVOZ01vZGVsKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VG9FbXB0eSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNEZWxldGluZyA9IHZhbHVlLnRvU3RyaW5nKCk/Lmxlbmd0aCA8IHRoaXMubW9kZWw/Lmxlbmd0aDtcblxuICAgICAgICBsZXQgY2xlYW5OdW1iZXI7XG4gICAgICAgIGlmICghdGhpcy5hbGxvd0ZyZWVJbnB1dCkge1xuICAgICAgICAgICAgY2xlYW5OdW1iZXIgPSB0aGlzLmdldENsZWFuTnVtYmVyKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgY29uc3QgaXNNb2RlbFZhbGlkID0gdGhpcy5pc01vZGVsVmFsaWQoY2xlYW5OdW1iZXIpO1xuICAgICAgICAgICAgaWYgKCFpc01vZGVsVmFsaWQgJiYgIWlzRGVsZXRpbmcpIHtcbiAgICAgICAgICAgICAgICBjbGVhbk51bWJlciA9IHRoaXMubW9kZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBub0NvbW1hU3RyaW5nID0gdGhpcy5yZXBsYWNlQ29tbWFXaXRoRG90KHZhbHVlKTtcbiAgICAgICAgICAgIGNsZWFuTnVtYmVyID1cbiAgICAgICAgICAgICAgICBub0NvbW1hU3RyaW5nICYmIHR5cGVvZiBub0NvbW1hU3RyaW5nID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICA/IG5vQ29tbWFTdHJpbmcucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQU5fTkVHQVRJVkVfQU5EX0RFQ0lNQUxfTlVNQkVSU19QQVRURVJOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBub0NvbW1hU3RyaW5nO1xuICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBpdCBpcyBhIG51bWJlciBpbiBhbnkgb2YgaXRzIHBvc3NpYmxlIGZvcm1cbiAgICAgICAgICAgIC8vIHRvIGF2b2lkIC0zLjE0LTIzLS01MzRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhTkVHQVRJVkVfQU5EX0RFQ0lNQUxfTlVNQkVSU19QQVRURVJOLnRlc3QoY2xlYW5OdW1iZXIpICYmXG4gICAgICAgICAgICAgICAgIWlzRGVsZXRpbmdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNsZWFuTnVtYmVyID0gdGhpcy5tb2RlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnVwZGF0ZU5nTW9kZWwoY2xlYW5OdW1iZXIpO1xuXG4gICAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIEhUTUwgaW5wdXQgdmFsdWUgYmVjYXVzZSB3ZSBsZXQgdXNlciBpbnB1dCB3aGF0IGhlIHdhbnRzIGFuZCB0aGVuIHdlIGNsZWFuIG1vZGVsXG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRFbGVtZW50VmFsdWUoY2xlYW5OdW1iZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIHVzZWQgZm9yIHBvc3QtZm9ybWF0dGluZyBieSBkaXJlY3RpdmVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIG9mIG1vZGVsXG4gICAgICovXG4gICAgZm9yY2VVcGRhdGVOZ01vZGVsKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb2RlbF8gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dEVsZW1lbnRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1N0cmluZ0FWYWxpZE51bWJlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbGlkYXRpb25SZWdleCgpLnRlc3QodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNb2RlbFZhbGlkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTdHJpbmdBVmFsaWROdW1iZXIodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsaWRhdGlvblJlZ2V4KGlzRm9yQ2xlYW46IGJvb2xlYW4gPSBmYWxzZSk6IFJlZ0V4cCB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93RGVjaW1hbCB8fCB0aGlzLmFsbG93TmVnYXRpdmUpIHtcbiAgICAgICAgICAgIC8vIEFsbG93IGRlY2ltYWwgYW5kIG5lZ2F0aXZlXG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwgJiYgdGhpcy5hbGxvd05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc0ZvckNsZWFuXG4gICAgICAgICAgICAgICAgICAgID8gTkVHQVRJVkVfQU5EX0RFQ0lNQUxfTlVNQkVSU19QQVRURVJOXG4gICAgICAgICAgICAgICAgICAgIDogQ0xFQU5fTkVHQVRJVkVfQU5EX0RFQ0lNQUxfTlVNQkVSU19QQVRURVJOO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQWxsb3cgZGVjaW1hbFxuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFpc0ZvckNsZWFuXG4gICAgICAgICAgICAgICAgICAgID8gREVDSU1BTF9OVU1CRVJTX1BBVFRFUk5cbiAgICAgICAgICAgICAgICAgICAgOiBDTEVBTl9ERUNJTUFMX05VTUJFUlNfUEFUVEVSTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFsbG93IG5lZ2F0aXZlXG4gICAgICAgICAgICByZXR1cm4gIWlzRm9yQ2xlYW5cbiAgICAgICAgICAgICAgICA/IE5FR0FUSVZFX05VTUJFUlNfUEFUVEVSTlxuICAgICAgICAgICAgICAgIDogQ0xFQU5fTkVHQVRJVkVfTlVNQkVSU19QQVRURVJOO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNGb3JDbGVhbiA/IE5VTUJFUlNfUEFUVEVSTiA6IENMRUFOX05VTUJFUlNfUEFUVEVSTjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcGxhY2VDb21tYVdpdGhEb3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgnLCcsICdnJyksIERFQ0lNQUxTX1NFUEFSQVRPUilcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVOb25OdW1lcmljQ2hhcmFjdGVycyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gdmFsdWUucmVwbGFjZSh0aGlzLmdldFZhbGlkYXRpb25SZWdleCh0cnVlKSwgJycpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW5EZWNpbWFscyhcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgc2VwYXJhdG9yOiBzdHJpbmcgPSBERUNJTUFMU19TRVBBUkFUT1JcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICF0aGlzLmFsbG93RGVjaW1hbCB8fCAhdmFsdWUuaW5jbHVkZXMoc2VwYXJhdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW2ludGcsIGRlY10gPSB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBjbGVhbkRlYyA9IGRlYy5zdWJzdHJpbmcoMCwgdGhpcy5tYXhEZWNpbWFsQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBpbnRnICsgc2VwYXJhdG9yICsgY2xlYW5EZWM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDbGVhbk51bWJlcih2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgbm9Db21tYVN0cmluZyA9IHRoaXMucmVwbGFjZUNvbW1hV2l0aERvdCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGNsZWFuRGVjaW1hbHMgPSB0aGlzLmNsZWFuRGVjaW1hbHMobm9Db21tYVN0cmluZyk7XG4gICAgICAgIGNvbnN0IGNsZWFuTm9uTnVtZXJpY0NoYXJhY3RlcnMgPSB0aGlzLnJlbW92ZU5vbk51bWVyaWNDaGFyYWN0ZXJzKFxuICAgICAgICAgICAgY2xlYW5EZWNpbWFsc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBjbGVhbk51bWJlciA9IHRoaXMucmVtb3ZlTGVhZGluZ1plcm8oXG4gICAgICAgICAgICBjbGVhbk5vbk51bWVyaWNDaGFyYWN0ZXJzLFxuICAgICAgICAgICAgdGhpcy5hbGxvd0RlY2ltYWxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoY2xlYW5OdW1iZXIgJiYgY2xlYW5OdW1iZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xlYW5OdW1iZXIuc3Vic3RyaW5nKDAsIHRoaXMuZ2V0TWF4TGVuZ3RoKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsZWFuTnVtYmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRFbGVtZW50VmFsdWUoY2xlYW5OdW1iZXI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBObyBuZWVkIHRvIHVwZGF0ZSB0aGUgbmF0aXZlIGVsZW1lbnQgaWYgaXQgZG9lc24ndCB5ZXQgZXhpc3QuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dEVsZW1WYWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIGlmIChpbnB1dEVsZW1WYWx1ZSAhPT0gY2xlYW5OdW1iZXIpIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gdXBkYXRlIEhUTUwgaW5wdXQgdmFsdWUgYmVjYXVzZSB3ZSBsZXQgdXNlciBpbnB1dCB3aGF0IGhlIHdhbnRzIGFuZCB0aGVuIHdlIGNsZWFuIG1vZGVsXG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gY2xlYW5OdW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRvRW1wdHkodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBFbXB0eSBtZWFucyBudWxsLCBvdGhlcndpc2UgdGhlIGJhY2tlbmQgZG9lc24ndCBoYW5kbGUgbnVtYmVycyBwcm9wZXJseS4gV2UgaGF2ZSB0byBrZWVwICd1bmRlZmluZWQnXG4gICAgICAgIC8vIGlmICd1bmRlZmluZWQnIG90aGVyd2lzZSBBbmd1bGFyIGNvbXBsYWlucyBhYm91dCB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIGJlaW5nIGNoYW5nZWQgd2l0aG91dCB1cGRhdGluZ1xuICAgICAgICAvLyB0aGUgdmlldy5cbiAgICAgICAgY29uc3QgZW1wdHlWYWx1ZSA9IHZhbHVlID09PSAnJyA/IG51bGwgOiB2YWx1ZTtcbiAgICAgICAgc3VwZXIudXBkYXRlTmdNb2RlbChlbXB0eVZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbnB1dEVsZW1lbnRWYWx1ZShlbXB0eVZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hbmFnZUhlbHBUZXh0KCk6IHZvaWQge1xuICAgICAgICBpZiAoISF0aGlzLmhpZGVTdGFuZGFyZEhlbHBUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmhlbHBUZXh0ID0gdGhpcy5pbml0aWFsSGVscFRleHQ7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYWxsb3dGcmVlSW5wdXQpIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5taW4pICYmIGlzRGVmaW5lZCh0aGlzLm1heCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLmluaXRpYWxIZWxwVGV4dD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVscFRleHQgPSBgJHt0aGlzLmluaXRpYWxIZWxwVGV4dH08YnIvPmA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwVGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmhlbHBUZXh0ICs9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICAgICAgICAgJ2ZvZWhuLWlucHV0LW51bWJlci5zdGFuZGFyZC1oZWxwLXRleHQubGFiZWwnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5WYWx1ZTogZm9ybWF0TnVtYmVyQXNHaXZlbih0aGlzLm1pbi50b1N0cmluZygpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFZhbHVlOiBmb3JtYXROdW1iZXJBc0dpdmVuKHRoaXMubWF4LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEhdGhpcy5pbml0aWFsSGVscFRleHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5oZWxwVGV4dCA9IGAke3RoaXMuaW5pdGlhbEhlbHBUZXh0fTxici8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGVscFRleHQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1heEludGVnZXJDb3VudCA9IHRoaXMuYWxsb3dEZWNpbWFsXG4gICAgICAgICAgICA/IHRoaXMubWF4bGVuZ3RoIC0gdGhpcy5tYXhEZWNpbWFsQ291bnQgLSAxXG4gICAgICAgICAgICA6IHRoaXMubWF4bGVuZ3RoO1xuXG4gICAgICAgIGxldCBtYXhBc1N0cmluZztcbiAgICAgICAgaWYgKCEhdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIG1heEFzU3RyaW5nID0gdGhpcy5tYXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtYXhBc1N0cmluZyA9ICc5Jy5yZXBlYXQobWF4SW50ZWdlckNvdW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAgICAgICAgIG1heEFzU3RyaW5nICs9IGAuJHsnOScucmVwZWF0KHRoaXMubWF4RGVjaW1hbENvdW50KX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1pbkFzU3RyaW5nO1xuICAgICAgICBpZiAodGhpcy5taW4pIHtcbiAgICAgICAgICAgIG1pbkFzU3RyaW5nID0gdGhpcy5taW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5Bc1N0cmluZyA9IHRoaXMuYWxsb3dOZWdhdGl2ZVxuICAgICAgICAgICAgICAgID8gYC0keyc5Jy5yZXBlYXQobWF4SW50ZWdlckNvdW50IC0gMSl9YFxuICAgICAgICAgICAgICAgIDogJzAnO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgbWluQXNTdHJpbmcgKz0gdGhpcy5hbGxvd05lZ2F0aXZlXG4gICAgICAgICAgICAgICAgICAgID8gYC4keyc5Jy5yZXBlYXQodGhpcy5tYXhEZWNpbWFsQ291bnQgfHwgMCl9YFxuICAgICAgICAgICAgICAgICAgICA6IGAuJHsnMCcucmVwZWF0KHRoaXMubWF4RGVjaW1hbENvdW50IHx8IDApfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhlbHBUZXh0ICs9IHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0S2V5U3luYyhcbiAgICAgICAgICAgICdmb2Vobi1pbnB1dC1udW1iZXIuc3RhbmRhcmQtaGVscC10ZXh0LmxhYmVsJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZTogdGhpcy5mb3JtYXRWYWx1ZShtaW5Bc1N0cmluZyksXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IHRoaXMuZm9ybWF0VmFsdWUobWF4QXNTdHJpbmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0RGVjaW1hbEN1cnJlbmN5KFxuICAgICAgICAgICAgICAgIHZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWF4RGVjaW1hbENvdW50LFxuICAgICAgICAgICAgICAgIHRoaXMubWF4bGVuZ3RoLFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dGcmVlSW5wdXRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE5vbkRlY2ltYWxDdXJyZW5jeSh2YWx1ZT8udG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVMZWFkaW5nWmVybyhcbiAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgYWxsb3dEZWNpbWFsOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBzdHJpbmcge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXZlciBjbGVhbiBmaXJzdCBjaGFyYWN0ZXIgYmVjYXVzZSBpdCBjb3VsZCBiZSBvbmx5IFwiMFwiIG9yIFwiLVwiXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBkZWNpbWFsIHZhbHVlcywgd2UgY2FuJ3QgcmVtb3ZlIFwiMFwiIGZyb20gXCIwLlwiIG9yIFwiLTAuXCIgYmVjYXVzZSB3ZSBjYW4ndCBwcmVkaWN0IHdoYXQgY29tZXMgYWZ0ZXIgdGhlIGRvdFxuICAgICAgICBpZiAoYWxsb3dEZWNpbWFsICYmICh2YWx1ZSA9PT0gJzAuJyB8fCB2YWx1ZSA9PT0gJy0wLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgXCIwXCIgZnJvbSBcIi0wXCIgZm9yIGZvcmJpZGRlbiBkZWNpbWFsIHZhbHVlc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhYWxsb3dEZWNpbWFsICYmXG4gICAgICAgICAgICB2YWx1ZS5pbmNsdWRlcygnLScpICYmXG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgIHZhbHVlLnN1YnN0cmluZygxKSA9PT0gJzAnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFuIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXJcbiAgICAgICAgaWYgKCF2YWx1ZS5pbmNsdWRlcyhERUNJTUFMU19TRVBBUkFUT1IpKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgXCIwXCIgZnJvbSBcIjAxXCIsIFwiMDJcIi4uLiBudW1iZXJzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXZhbHVlLmluY2x1ZGVzKCctJykgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgICAgICB2YWx1ZS5zdWJzdHJpbmcoMCwgMSkgPT09ICcwJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmVtb3ZlIFwiMFwiIGZyb20gXCItMDFcIiwgXCItMDJcIi4uLiBudW1iZXJzXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdmFsdWUuaW5jbHVkZXMoJy0nKSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMyAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnN1YnN0cmluZygxLCAyKSA9PT0gJzAnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIDEpICsgdmFsdWUuc3Vic3RyaW5nKDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXAgY2xlYXJhYmxlLWlucHV0LWZvcm0tZ3JvdXBcIlxuICAgIFtjbGFzcy5oYXMtZGFuZ2VyXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICBbY2xhc3MudmQtZm9ybS1ncm91cC1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoJ0NvbnRhaW5lcicpXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgICAgICpuZ0lmPVwibGFiZWwgJiYgdHlwZSAhPT0gJ2hpZGRlbidcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXNMYWJlbFNyT25seSA/ICdzci1vbmx5JyA6IGxhYmVsU3R5bGVNb2RpZmllclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibGFiZWxcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJlcXVpcmVkICYmICFoaWRlTm90UmVxdWlyZWRFeHRyYUxhYmVsXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdmb2Vobi1pbnB1dC5vcHRpb25hbCcgfCBmcm9tRGljdGlvbmFyeSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIDxmb2Vobi1oZWxwLW1vZGFsXG4gICAgICAgICAgICBjbGFzcz1cInJlbW92ZVBhZGRpbmdCdXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCIhIWhlbHBNb2RhbFwiXG4gICAgICAgICAgICBbbW9kYWxDb250ZW50XT1cImhlbHBNb2RhbFwiXG4gICAgICAgID48L2ZvZWhuLWhlbHAtbW9kYWw+XG4gICAgPC9kaXY+XG5cbiAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydHMgW2NvbXBvbmVudF09XCJ0aGlzXCI+PC9mb2Vobi12YWxpZGF0aW9uLWFsZXJ0cz5cblxuICAgIDxzbWFsbFxuICAgICAgICAqbmdJZj1cImhlbHBUZXh0ICYmIHR5cGUgIT09ICdoaWRkZW4nXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnSGVscCdcIlxuICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwiaGVscFRleHRcIlxuICAgID48L3NtYWxsPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPGlucHV0XG4gICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IGhhc0luaGVyaXRFcnJvckZyb21QYXJlbnQoKVwiXG4gICAgICAgIFtjbGFzcy5jbGVhcmFibGUtaW5wdXRdPVwiZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1wiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgW25hbWVdPVwibmFtZSB8fCBsYWJlbFwiXG4gICAgICAgIFthdHRyLm1heGxlbmd0aF09XCJnZXRNYXhMZW5ndGgoKVwiXG4gICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJnZXRBdXRvQ29tcGxldGUoKVwiXG4gICAgICAgIFthdHRyLmF1dG9jYXBpdGFsaXplXT1cImF1dG9jYXBpdGFsaXplXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLnR5cGVdPVwidHlwZVwiXG4gICAgICAgIFthdHRyLnBhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgICAgIFthdHRyLm1pbl09XCJtaW5cIlxuICAgICAgICBbYXR0ci5tYXhdPVwibWF4XCJcbiAgICAgICAgW2F0dHIuaWRdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdldERlc2NyaWJlZEJ5KClcIlxuICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KCkgfHwgbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWQgfHwgbnVsbFwiXG4gICAgICAgIFtuZ01vZGVsXT1cIm1vZGVsXCJcbiAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZU5nTW9kZWwoJGV2ZW50KVwiXG4gICAgICAgIChpbnB1dCk9XCJoYW5kbGVDaGFuZ2UoZW50cnlDb21wb25lbnQudmFsdWUpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxuICAgICAgICAjZW50cnlDb21wb25lbnRcbiAgICAvPlxuXG4gICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2lkXT1cImJ1aWxkQ2hpbGRJZCgpICsgJ0NsZWFyQnV0dG9uJ1wiXG4gICAgICAgICpuZ0lmPVwiZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1wiXG4gICAgICAgIGNsYXNzPVwiY2xlYXJhYmxlLWlucHV0LWNsZWFyLWJ1dHRvbiBidG5cIlxuICAgICAgICAoY2xpY2spPVwib25DbGVhcigpXCJcbiAgICA+XG4gICAgICAgIDxmb2Vobi1pY29uLXRpbWVzXG4gICAgICAgICAgICBjbGFzcz1cImNsZWFyYWJsZS1pbnB1dC1jbGVhci1idXR0b24taWNvblwiXG4gICAgICAgICAgICB0aXRsZT1cIlLDqWluaXRpYWxpc2VyIGxlIGNoYW1wc1wiXG4gICAgICAgID48L2ZvZWhuLWljb24tdGltZXM+XG4gICAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJUixNQUFNLGVBQWUsQ0FBQztBQUV2QiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNILHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ3RCLE1BQU0sNENBQTRDLENBQUM7QUFDcEQsT0FBTyxFQUVILGtCQUFrQixFQUNyQixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDSCw2QkFBNkIsRUFDN0IsMENBQTBDLEVBQzFDLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQix1QkFBdUIsRUFDdkIsb0NBQW9DLEVBQ3BDLHdCQUF3QixFQUN4QixlQUFlLEVBQ2xCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFFekIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQVcsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztBQWNyRSxNQUFNLE9BQU8seUJBQ1QsU0FBUSx5QkFBeUI7SUFzQmpDLFlBQ1ksY0FBOEIsRUFDOUIsaUJBQXVDO1FBRS9DLEtBQUssRUFBRSxDQUFDO1FBSEEs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SSxvQkFBb0IsYUFHbkI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLG1CQUFtQjs0QkFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUM7NEJBQ3hELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKO3dJQU1ELG9CQUFvQjtzQkFEbkIsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLGVBQWU7c0JBRGQsS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBa0JGLEtBQUs7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWN5Y2xlXG5pbXBvcnQge1xuICAgIGZvcm1hdERlY2ltYWxDdXJyZW5jeSxcbiAgICBmb3JtYXROb25EZWNpbWFsQ3VycmVuY3ksXG4gICAgZm9ybWF0TnVtYmVyQXNHaXZlblxufSBmcm9tICcuLi9kaXJlY3RpdmVzL2N1cnJlbmN5LWZvcm1hdHRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBDdXJyZW5jeUhlbHBlcixcbiAgICBERUNJTUFMU19TRVBBUkFUT1Jcbn0gZnJvbSAnLi4vc2RrLWN1cnJlbmN5L2N1cnJlbmN5LmhlbHBlcic7XG5pbXBvcnQgeyBTZGtEaWN0aW9uYXJ5U2VydmljZSB9IGZyb20gJy4uL3Nkay1kaWN0aW9uYXJ5L3Nkay1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9laG5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4vZm9laG4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvZWhuSW5wdXRTdHJpbmdDb21wb25lbnQgfSBmcm9tICcuL2ZvZWhuLWlucHV0LXN0cmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBDTEVBTl9ERUNJTUFMX05VTUJFUlNfUEFUVEVSTixcbiAgICBDTEVBTl9ORUdBVElWRV9BTkRfREVDSU1BTF9OVU1CRVJTX1BBVFRFUk4sXG4gICAgQ0xFQU5fTkVHQVRJVkVfTlVNQkVSU19QQVRURVJOLFxuICAgIENMRUFOX05VTUJFUlNfUEFUVEVSTixcbiAgICBERUNJTUFMX05VTUJFUlNfUEFUVEVSTixcbiAgICBIVE1MX0RFQ0lNQUxfUEFUVEVSTixcbiAgICBIVE1MX05PX0RFQ0lNQUxfUEFUVEVSTixcbiAgICBORUdBVElWRV9BTkRfREVDSU1BTF9OVU1CRVJTX1BBVFRFUk4sXG4gICAgTkVHQVRJVkVfTlVNQkVSU19QQVRURVJOLFxuICAgIE5VTUJFUlNfUEFUVEVSTlxufSBmcm9tICcuL3BhdHRlcm4uY29uc3QnO1xuXG5jb25zdCBpc0RlZmluZWQgPSAodmFsdWU6IG51bWJlcik6IGJvb2xlYW4gPT4gdmFsdWUgPT09IDAgfHwgISF2YWx1ZTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmb2Vobi1pbnB1dC1udW1iZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9laG4taW5wdXQuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGb2VobklucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9laG5JbnB1dE51bWJlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb2VobklucHV0TnVtYmVyQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBGb2VobklucHV0U3RyaW5nQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBoaWRlU3RhbmRhcmRIZWxwVGV4dCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBhbGxvd0RlY2ltYWw6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TmVnYXRpdmU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIG1heERlY2ltYWxDb3VudCA9IDI7XG5cbiAgICBASW5wdXQoKVxuICAgIGFsbG93RnJlZUlucHV0ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIGFsbG93TGVhZGluZ1plcm8gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgaW5pdGlhbEhlbHBUZXh0OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjdXJyZW5jeUhlbHBlcjogQ3VycmVuY3lIZWxwZXIsXG4gICAgICAgIHByaXZhdGUgZGljdGlvbmFyeVNlcnZpY2U6IFNka0RpY3Rpb25hcnlTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgZ2V0IG1vZGVsKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIElmIHRoZSBzZXR0ZXIgaXMgb3ZlcnJpZGRlbiwgaXQncyBjcml0aWNhbCB0byBvdmVycmlkZSB0aGUgZ2V0dGVyIHRvby5cbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWxfO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1vZGVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gVGhpcyBkb2Vzbid0IHRyaWdnZXIgdGhlIGNvbXBvbmVudCdzIHZlcnNpb24gb2YgdXBkYXRlTmdNb2RlbCBzdHJhaXQgYXdheSBhcyB0aGlzIG1pZ2h0XG4gICAgICAgIC8vIGJlIGNhbGxlZCBiZWZvcmUgYWxsb3dEZWNpbWFsIG9yIGFsbG93TmVnYXRpdmUgYXJlIHByb3Blcmx5IHNldCAoYmVmb3JlIHRoZSBpbml0IGxpZmVjeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50KS4gVGhpcyBpcyBjcml0aWNhbCB0byBub3QgcmUtZm9ybWF0IHRoZSBpbnB1dCBiZWZvcmUgdGhlIE9uSW5pdCwgb3RoZXJ3aXNlXG4gICAgICAgIC8vIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGludmFsaWQgdmFsdWUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiB0aGlzLnVwZGF0ZU5nTW9kZWwgaXMgY2FsbGVkIGltcGxpY2l0bHlcbiAgICAgICAgLy8gYXMgc3VwZXIudXBkYXRlTmdNb2RlbCB3aWxsIGVtaXQgYSBjaGFuZ2Ugb24gdGhpcy5tb2RlbENoYW5nZS5cbiAgICAgICAgLy8gRklYTUUgdGhpcyBpcyBhIGhhY2sgYW5kIHNob3VsZCBiZSByZWZhY3RvcmVkLlxuICAgICAgICBzdXBlci51cGRhdGVOZ01vZGVsKHZhbHVlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLnR5cGUgPSAndGV4dCc7XG5cbiAgICAgICAgLy8gUGF0dGVybiB1c2VkIG9ubHkgZm9yIG51bXBhZCB0cmlnZ2VyIG9uIG1vYmlsZSBwaG9uZXNcbiAgICAgICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5hbGxvd0RlY2ltYWxcbiAgICAgICAgICAgID8gSFRNTF9ERUNJTUFMX1BBVFRFUk5cbiAgICAgICAgICAgIDogSFRNTF9OT19ERUNJTUFMX1BBVFRFUk47XG5cbiAgICAgICAgdGhpcy5tYXhsZW5ndGggPSAhIXRoaXMubWF4bGVuZ3RoID8gdGhpcy5tYXhsZW5ndGggOiA5O1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IE9iamVjdC5rZXlzKGNoYW5nZXMpXG4gICAgICAgICAgICAuZmlsdGVyKGsgPT4gayAhPT0gJ21vZGVsJylcbiAgICAgICAgICAgIC5tYXAoayA9PiBjaGFuZ2VzW2tdKVxuICAgICAgICAgICAgLmZpbmQoY2hhbmdlID0+IGNoYW5nZS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZS5wcmV2aW91c1ZhbHVlKTtcblxuICAgICAgICBjb25zdCBoZWxwVGV4dEhhc0NoYW5nZWQgPVxuICAgICAgICAgICAgY2hhbmdlcy5oZWxwVGV4dD8uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmhlbHBUZXh0Py5wcmV2aW91c1ZhbHVlO1xuXG4gICAgICAgIGlmIChoZWxwVGV4dEhhc0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbEhlbHBUZXh0ID0gY2hhbmdlcy5oZWxwVGV4dC5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VIZWxwVGV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93RnJlZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0TWF4TGVuZ3RoKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlTmdNb2RlbCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRvRW1wdHkodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRGVsZXRpbmcgPSB2YWx1ZS50b1N0cmluZygpPy5sZW5ndGggPCB0aGlzLm1vZGVsPy5sZW5ndGg7XG5cbiAgICAgICAgbGV0IGNsZWFuTnVtYmVyO1xuICAgICAgICBpZiAoIXRoaXMuYWxsb3dGcmVlSW5wdXQpIHtcbiAgICAgICAgICAgIGNsZWFuTnVtYmVyID0gdGhpcy5nZXRDbGVhbk51bWJlcih2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTW9kZWxWYWxpZCA9IHRoaXMuaXNNb2RlbFZhbGlkKGNsZWFuTnVtYmVyKTtcbiAgICAgICAgICAgIGlmICghaXNNb2RlbFZhbGlkICYmICFpc0RlbGV0aW5nKSB7XG4gICAgICAgICAgICAgICAgY2xlYW5OdW1iZXIgPSB0aGlzLm1vZGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgbm9Db21tYVN0cmluZyA9IHRoaXMucmVwbGFjZUNvbW1hV2l0aERvdCh2YWx1ZSk7XG4gICAgICAgICAgICBjbGVhbk51bWJlciA9XG4gICAgICAgICAgICAgICAgbm9Db21tYVN0cmluZyAmJiB0eXBlb2Ygbm9Db21tYVN0cmluZyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICAgICAgPyBub0NvbW1hU3RyaW5nLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFOX05FR0FUSVZFX0FORF9ERUNJTUFMX05VTUJFUlNfUEFUVEVSTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogbm9Db21tYVN0cmluZztcbiAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgaXQgaXMgYSBudW1iZXIgaW4gYW55IG9mIGl0cyBwb3NzaWJsZSBmb3JtXG4gICAgICAgICAgICAvLyB0byBhdm9pZCAtMy4xNC0yMy0tNTM0XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIU5FR0FUSVZFX0FORF9ERUNJTUFMX05VTUJFUlNfUEFUVEVSTi50ZXN0KGNsZWFuTnVtYmVyKSAmJlxuICAgICAgICAgICAgICAgICFpc0RlbGV0aW5nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjbGVhbk51bWJlciA9IHRoaXMubW9kZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci51cGRhdGVOZ01vZGVsKGNsZWFuTnVtYmVyKTtcblxuICAgICAgICAvLyBOZWVkIHRvIHVwZGF0ZSBIVE1MIGlucHV0IHZhbHVlIGJlY2F1c2Ugd2UgbGV0IHVzZXIgaW5wdXQgd2hhdCBoZSB3YW50cyBhbmQgdGhlbiB3ZSBjbGVhbiBtb2RlbFxuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0RWxlbWVudFZhbHVlKGNsZWFuTnVtYmVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSB1c2VkIGZvciBwb3N0LWZvcm1hdHRpbmcgYnkgZGlyZWN0aXZlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBvZiBtb2RlbFxuICAgICAqL1xuICAgIGZvcmNlVXBkYXRlTmdNb2RlbCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kZWxfID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTdHJpbmdBVmFsaWROdW1iZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYWxpZGF0aW9uUmVnZXgoKS50ZXN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTW9kZWxWYWxpZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU3RyaW5nQVZhbGlkTnVtYmVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbGlkYXRpb25SZWdleChpc0ZvckNsZWFuOiBib29sZWFuID0gZmFsc2UpOiBSZWdFeHAge1xuICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwgfHwgdGhpcy5hbGxvd05lZ2F0aXZlKSB7XG4gICAgICAgICAgICAvLyBBbGxvdyBkZWNpbWFsIGFuZCBuZWdhdGl2ZVxuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsICYmIHRoaXMuYWxsb3dOZWdhdGl2ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhaXNGb3JDbGVhblxuICAgICAgICAgICAgICAgICAgICA/IE5FR0FUSVZFX0FORF9ERUNJTUFMX05VTUJFUlNfUEFUVEVSTlxuICAgICAgICAgICAgICAgICAgICA6IENMRUFOX05FR0FUSVZFX0FORF9ERUNJTUFMX05VTUJFUlNfUEFUVEVSTjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFsbG93IGRlY2ltYWxcbiAgICAgICAgICAgIGlmICh0aGlzLmFsbG93RGVjaW1hbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhaXNGb3JDbGVhblxuICAgICAgICAgICAgICAgICAgICA/IERFQ0lNQUxfTlVNQkVSU19QQVRURVJOXG4gICAgICAgICAgICAgICAgICAgIDogQ0xFQU5fREVDSU1BTF9OVU1CRVJTX1BBVFRFUk47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBBbGxvdyBuZWdhdGl2ZVxuICAgICAgICAgICAgcmV0dXJuICFpc0ZvckNsZWFuXG4gICAgICAgICAgICAgICAgPyBORUdBVElWRV9OVU1CRVJTX1BBVFRFUk5cbiAgICAgICAgICAgICAgICA6IENMRUFOX05FR0FUSVZFX05VTUJFUlNfUEFUVEVSTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzRm9yQ2xlYW4gPyBOVU1CRVJTX1BBVFRFUk4gOiBDTEVBTl9OVU1CRVJTX1BBVFRFUk47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlQ29tbWFXaXRoRG90KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyB2YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoJywnLCAnZycpLCBERUNJTUFMU19TRVBBUkFUT1IpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlTm9uTnVtZXJpY0NoYXJhY3RlcnModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHZhbHVlLnJlcGxhY2UodGhpcy5nZXRWYWxpZGF0aW9uUmVnZXgodHJ1ZSksICcnKVxuICAgICAgICAgICAgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFuRGVjaW1hbHMoXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgIHNlcGFyYXRvcjogc3RyaW5nID0gREVDSU1BTFNfU0VQQVJBVE9SXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdGhpcy5hbGxvd0RlY2ltYWwgfHwgIXZhbHVlLmluY2x1ZGVzKHNlcGFyYXRvcikpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtpbnRnLCBkZWNdID0gdmFsdWUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICAgICAgY29uc3QgY2xlYW5EZWMgPSBkZWMuc3Vic3RyaW5nKDAsIHRoaXMubWF4RGVjaW1hbENvdW50KTtcblxuICAgICAgICByZXR1cm4gaW50ZyArIHNlcGFyYXRvciArIGNsZWFuRGVjO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2xlYW5OdW1iZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG5vQ29tbWFTdHJpbmcgPSB0aGlzLnJlcGxhY2VDb21tYVdpdGhEb3QodmFsdWUpO1xuICAgICAgICBjb25zdCBjbGVhbkRlY2ltYWxzID0gdGhpcy5jbGVhbkRlY2ltYWxzKG5vQ29tbWFTdHJpbmcpO1xuICAgICAgICBjb25zdCBjbGVhbk5vbk51bWVyaWNDaGFyYWN0ZXJzID0gdGhpcy5yZW1vdmVOb25OdW1lcmljQ2hhcmFjdGVycyhcbiAgICAgICAgICAgIGNsZWFuRGVjaW1hbHNcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2xlYW5OdW1iZXIgPSAhdGhpcy5hbGxvd0xlYWRpbmdaZXJvXG4gICAgICAgICAgICA/IHRoaXMucmVtb3ZlTGVhZGluZ1plcm8oXG4gICAgICAgICAgICAgICAgICBjbGVhbk5vbk51bWVyaWNDaGFyYWN0ZXJzLFxuICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd0RlY2ltYWxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBjbGVhbk5vbk51bWVyaWNDaGFyYWN0ZXJzO1xuXG4gICAgICAgIGlmIChjbGVhbk51bWJlciAmJiBjbGVhbk51bWJlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjbGVhbk51bWJlci5zdWJzdHJpbmcoMCwgdGhpcy5nZXRNYXhMZW5ndGgoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2xlYW5OdW1iZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJbnB1dEVsZW1lbnRWYWx1ZShjbGVhbk51bWJlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gdXBkYXRlIHRoZSBuYXRpdmUgZWxlbWVudCBpZiBpdCBkb2Vzbid0IHlldCBleGlzdC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0RWxlbVZhbHVlID0gdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgICAgaWYgKGlucHV0RWxlbVZhbHVlICE9PSBjbGVhbk51bWJlcikge1xuICAgICAgICAgICAgLy8gTmVlZCB0byB1cGRhdGUgSFRNTCBpbnB1dCB2YWx1ZSBiZWNhdXNlIHdlIGxldCB1c2VyIGlucHV0IHdoYXQgaGUgd2FudHMgYW5kIHRoZW4gd2UgY2xlYW4gbW9kZWxcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjbGVhbk51bWJlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9FbXB0eSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIEVtcHR5IG1lYW5zIG51bGwsIG90aGVyd2lzZSB0aGUgYmFja2VuZCBkb2Vzbid0IGhhbmRsZSBudW1iZXJzIHByb3Blcmx5LiBXZSBoYXZlIHRvIGtlZXAgJ3VuZGVmaW5lZCdcbiAgICAgICAgLy8gaWYgJ3VuZGVmaW5lZCcgb3RoZXJ3aXNlIEFuZ3VsYXIgY29tcGxhaW5zIGFib3V0IHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgYmVpbmcgY2hhbmdlZCB3aXRob3V0IHVwZGF0aW5nXG4gICAgICAgIC8vIHRoZSB2aWV3LlxuICAgICAgICBjb25zdCBlbXB0eVZhbHVlID0gdmFsdWUgPT09ICcnID8gbnVsbCA6IHZhbHVlO1xuICAgICAgICBzdXBlci51cGRhdGVOZ01vZGVsKGVtcHR5VmFsdWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0RWxlbWVudFZhbHVlKGVtcHR5VmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFuYWdlSGVscFRleHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghIXRoaXMuaGlkZVN0YW5kYXJkSGVscFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuaGVscFRleHQgPSB0aGlzLmluaXRpYWxIZWxwVGV4dDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd0ZyZWVJbnB1dCkge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLm1pbikgJiYgaXNEZWZpbmVkKHRoaXMubWF4KSkge1xuICAgICAgICAgICAgICAgIGlmICghIXRoaXMuaW5pdGlhbEhlbHBUZXh0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwVGV4dCA9IGAke3RoaXMuaW5pdGlhbEhlbHBUZXh0fTxici8+YDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlbHBUZXh0ID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGVscFRleHQgKz0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgICAgICAgICAnZm9laG4taW5wdXQtbnVtYmVyLnN0YW5kYXJkLWhlbHAtdGV4dC5sYWJlbCcsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiBmb3JtYXROdW1iZXJBc0dpdmVuKHRoaXMubWluLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IGZvcm1hdE51bWJlckFzR2l2ZW4odGhpcy5tYXgudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISF0aGlzLmluaXRpYWxIZWxwVGV4dD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmhlbHBUZXh0ID0gYCR7dGhpcy5pbml0aWFsSGVscFRleHR9PGJyLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oZWxwVGV4dCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF4SW50ZWdlckNvdW50ID0gdGhpcy5hbGxvd0RlY2ltYWxcbiAgICAgICAgICAgID8gdGhpcy5tYXhsZW5ndGggLSB0aGlzLm1heERlY2ltYWxDb3VudCAtIDFcbiAgICAgICAgICAgIDogdGhpcy5tYXhsZW5ndGg7XG5cbiAgICAgICAgbGV0IG1heEFzU3RyaW5nO1xuICAgICAgICBpZiAoISF0aGlzLm1heCkge1xuICAgICAgICAgICAgbWF4QXNTdHJpbmcgPSB0aGlzLm1heDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1heEFzU3RyaW5nID0gJzknLnJlcGVhdChtYXhJbnRlZ2VyQ291bnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYWxsb3dEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgbWF4QXNTdHJpbmcgKz0gYC4keyc5Jy5yZXBlYXQodGhpcy5tYXhEZWNpbWFsQ291bnQpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluQXNTdHJpbmc7XG4gICAgICAgIGlmICh0aGlzLm1pbikge1xuICAgICAgICAgICAgbWluQXNTdHJpbmcgPSB0aGlzLm1pbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1pbkFzU3RyaW5nID0gdGhpcy5hbGxvd05lZ2F0aXZlXG4gICAgICAgICAgICAgICAgPyBgLSR7JzknLnJlcGVhdChtYXhJbnRlZ2VyQ291bnQgLSAxKX1gXG4gICAgICAgICAgICAgICAgOiAnMCc7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICBtaW5Bc1N0cmluZyArPSB0aGlzLmFsbG93TmVnYXRpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBgLiR7JzknLnJlcGVhdCh0aGlzLm1heERlY2ltYWxDb3VudCB8fCAwKX1gXG4gICAgICAgICAgICAgICAgICAgIDogYC4keycwJy5yZXBlYXQodGhpcy5tYXhEZWNpbWFsQ291bnQgfHwgMCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGVscFRleHQgKz0gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXRLZXlTeW5jKFxuICAgICAgICAgICAgJ2ZvZWhuLWlucHV0LW51bWJlci5zdGFuZGFyZC1oZWxwLXRleHQubGFiZWwnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlOiB0aGlzLmZvcm1hdFZhbHVlKG1pbkFzU3RyaW5nKSxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogdGhpcy5mb3JtYXRWYWx1ZShtYXhBc1N0cmluZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdFZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5hbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXREZWNpbWFsQ3VycmVuY3koXG4gICAgICAgICAgICAgICAgdmFsdWU/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhEZWNpbWFsQ291bnQsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhsZW5ndGgsXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxvd0ZyZWVJbnB1dFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0Tm9uRGVjaW1hbEN1cnJlbmN5KHZhbHVlPy50b1N0cmluZygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUxlYWRpbmdaZXJvKFxuICAgICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgICBhbGxvd0RlY2ltYWw6IGJvb2xlYW4gPSBmYWxzZVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5ldmVyIGNsZWFuIGZpcnN0IGNoYXJhY3RlciBiZWNhdXNlIGl0IGNvdWxkIGJlIG9ubHkgXCIwXCIgb3IgXCItXCJcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGRlY2ltYWwgdmFsdWVzLCB3ZSBjYW4ndCByZW1vdmUgXCIwXCIgZnJvbSBcIjAuXCIgb3IgXCItMC5cIiBiZWNhdXNlIHdlIGNhbid0IHByZWRpY3Qgd2hhdCBjb21lcyBhZnRlciB0aGUgZG90XG4gICAgICAgIGlmIChhbGxvd0RlY2ltYWwgJiYgKHZhbHVlID09PSAnMC4nIHx8IHZhbHVlID09PSAnLTAuJykpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlbW92ZSBcIjBcIiBmcm9tIFwiLTBcIiBmb3IgZm9yYmlkZGVuIGRlY2ltYWwgdmFsdWVzXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFhbGxvd0RlY2ltYWwgJiZcbiAgICAgICAgICAgIHZhbHVlLmluY2x1ZGVzKCctJykgJiZcbiAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgdmFsdWUuc3Vic3RyaW5nKDEpID09PSAnMCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYW4gcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlclxuICAgICAgICBpZiAoIXZhbHVlLmluY2x1ZGVzKERFQ0lNQUxTX1NFUEFSQVRPUikpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBcIjBcIiBmcm9tIFwiMDFcIiwgXCIwMlwiLi4uIG51bWJlcnNcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdmFsdWUuaW5jbHVkZXMoJy0nKSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnN1YnN0cmluZygwLCAxKSA9PT0gJzAnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZW1vdmUgXCIwXCIgZnJvbSBcIi0wMVwiLCBcIi0wMlwiLi4uIG51bWJlcnNcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2YWx1ZS5pbmNsdWRlcygnLScpICYmXG4gICAgICAgICAgICAgICAgdmFsdWUubGVuZ3RoID09PSAzICYmXG4gICAgICAgICAgICAgICAgdmFsdWUuc3Vic3RyaW5nKDEsIDIpID09PSAnMCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgMSkgKyB2YWx1ZS5zdWJzdHJpbmcoMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZm9ybS1ncm91cCBjbGVhcmFibGUtaW5wdXQtZm9ybS1ncm91cFwiXG4gICAgW2NsYXNzLmhhcy1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFtjbGFzcy52ZC1mb3JtLWdyb3VwLWRhbmdlcl09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgnQ29udGFpbmVyJylcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICBbYXR0ci5mb3JdPVwiYnVpbGRDaGlsZElkKClcIlxuICAgICAgICAgICAgKm5nSWY9XCJsYWJlbCAmJiB0eXBlICE9PSAnaGlkZGVuJ1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpc0xhYmVsU3JPbmx5ID8gJ3NyLW9ubHknIDogbGFiZWxTdHlsZU1vZGlmaWVyXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJsYWJlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcmVxdWlyZWQgJiYgIWhpZGVOb3RSZXF1aXJlZEV4dHJhTGFiZWxcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ2ZvZWhuLWlucHV0Lm9wdGlvbmFsJyB8IGZyb21EaWN0aW9uYXJ5IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgPGZvZWhuLWhlbHAtbW9kYWxcbiAgICAgICAgICAgIGNsYXNzPVwicmVtb3ZlUGFkZGluZ0J1dHRvblwiXG4gICAgICAgICAgICAqbmdJZj1cIiEhaGVscE1vZGFsXCJcbiAgICAgICAgICAgIFttb2RhbENvbnRlbnRdPVwiaGVscE1vZGFsXCJcbiAgICAgICAgPjwvZm9laG4taGVscC1tb2RhbD5cbiAgICA8L2Rpdj5cblxuICAgIDxmb2Vobi12YWxpZGF0aW9uLWFsZXJ0cyBbY29tcG9uZW50XT1cInRoaXNcIj48L2ZvZWhuLXZhbGlkYXRpb24tYWxlcnRzPlxuXG4gICAgPHNtYWxsXG4gICAgICAgICpuZ0lmPVwiaGVscFRleHQgJiYgdHlwZSAhPT0gJ2hpZGRlbidcIlxuICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKSArICdIZWxwJ1wiXG4gICAgICAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJoZWxwVGV4dFwiXG4gICAgPjwvc21hbGw+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8aW5wdXRcbiAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KCkgfHwgaGFzSW5oZXJpdEVycm9yRnJvbVBhcmVudCgpXCJcbiAgICAgICAgW2NsYXNzLmNsZWFyYWJsZS1pbnB1dF09XCJkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbbmFtZV09XCJuYW1lIHx8IGxhYmVsXCJcbiAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cImdldE1heExlbmd0aCgpXCJcbiAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImdldEF1dG9Db21wbGV0ZSgpXCJcbiAgICAgICAgW2F0dHIuYXV0b2NhcGl0YWxpemVdPVwiYXV0b2NhcGl0YWxpemVcIlxuICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBudWxsXCJcbiAgICAgICAgW2F0dHIudHlwZV09XCJ0eXBlXCJcbiAgICAgICAgW2F0dHIucGF0dGVybl09XCJwYXR0ZXJuXCJcbiAgICAgICAgW2F0dHIubWluXT1cIm1pblwiXG4gICAgICAgIFthdHRyLm1heF09XCJtYXhcIlxuICAgICAgICBbYXR0ci5pZF09XCJidWlsZENoaWxkSWQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0RGVzY3JpYmVkQnkoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKSB8fCBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZCB8fCBudWxsXCJcbiAgICAgICAgW25nTW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTmdNb2RlbCgkZXZlbnQpXCJcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZUNoYW5nZShlbnRyeUNvbXBvbmVudC52YWx1ZSlcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICNlbnRyeUNvbXBvbmVudFxuICAgIC8+XG5cbiAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBbaWRdPVwiYnVpbGRDaGlsZElkKCkgKyAnQ2xlYXJCdXR0b24nXCJcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jXCJcbiAgICAgICAgY2xhc3M9XCJjbGVhcmFibGUtaW5wdXQtY2xlYXItYnV0dG9uIGJ0blwiXG4gICAgICAgIChjbGljayk9XCJvbkNsZWFyKClcIlxuICAgID5cbiAgICAgICAgPGZvZWhuLWljb24tdGltZXNcbiAgICAgICAgICAgIGNsYXNzPVwiY2xlYXJhYmxlLWlucHV0LWNsZWFyLWJ1dHRvbi1pY29uXCJcbiAgICAgICAgICAgIHRpdGxlPVwiUsOpaW5pdGlhbGlzZXIgbGUgY2hhbXBzXCJcbiAgICAgICAgPjwvZm9laG4taWNvbi10aW1lcz5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|
|
@@ -93,7 +93,7 @@ FoehnDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
93
93
|
useExisting: forwardRef(() => FoehnDateComponent),
|
|
94
94
|
multi: true
|
|
95
95
|
}
|
|
96
|
-
], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_day'\"\n [name]=\"name + '_day'\"\n [label]=\"'foehn-input-date.day.label' | fromDictionary\"\n [(model)]=\"day\"\n (modelChange)=\"updateDate()\"\n [disabled]=\"disabled || disableDay\"\n [maxlength]=\"2\"\n [allowNegative]=\"false\"\n [max]=\"31\"\n [clearButton]=\"displayClearButton() | async\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n #entryComponent\n ></foehn-input-number>\n </div>\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_month'\"\n [name]=\"name + '_month'\"\n [label]=\"'foehn-input-date.month.label' | fromDictionary\"\n [(model)]=\"month\"\n (modelChange)=\"updateDate()\"\n [disabled]=\"disabled || disableMonth\"\n [maxlength]=\"2\"\n [clearButton]=\"displayClearButton() | async\"\n [allowNegative]=\"false\"\n [max]=\"12\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n ></foehn-input-number>\n </div>\n <div\n class=\"vd-form-flex__item vd-form-flex__item--4-char-width\"\n [class.mr-0]=\"shouldDisplayDatePicker()\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_year'\"\n [name]=\"name + '_year'\"\n [label]=\"'foehn-input-date.year.label' | fromDictionary\"\n [(model)]=\"year\"\n (modelChange)=\"updateDate()\"\n [disabled]=\"disabled || disableYear\"\n [allowNegative]=\"false\"\n [maxlength]=\"4\"\n [clearButton]=\"displayClearButton() | async\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n ></foehn-input-number>\n </div>\n <foehn-date-picker-button\n *ngIf=\"shouldDisplayDatePicker()\"\n [id]=\"buildId() + '_datePickerButton'\"\n [(model)]=\"datePickerModel\"\n (modelChange)=\"updateDateFromDatePicker($event)\"\n (userInput)=\"handleDatePickerUserInput($event)\"\n [displaySelectedDate]=\"false\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n class=\"align-self-center\"\n ></foehn-date-picker-button>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "component", type: i3.FoehnDatePickerButtonComponent, selector: "foehn-date-picker-button", inputs: ["id", "name", "minYear", "maxYear", "minDate", "maxDate", "displaySelectedDate", "selectedDateSrOnlyLabelKey", "model"], outputs: ["modelChange", "userInput"] }, { kind: "component", type: i4.FoehnInputNumberComponent, selector: "foehn-input-number", inputs: ["hideStandardHelpText", "allowDecimal", "allowNegative", "maxDecimalCount", "allowFreeInput", "model"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
96
|
+
], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_day'\"\n [name]=\"name + '_day'\"\n [label]=\"'foehn-input-date.day.label' | fromDictionary\"\n [(model)]=\"day\"\n (modelChange)=\"updateDate()\"\n [disabled]=\"disabled || disableDay\"\n [maxlength]=\"2\"\n [allowNegative]=\"false\"\n [max]=\"31\"\n [clearButton]=\"displayClearButton() | async\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n #entryComponent\n ></foehn-input-number>\n </div>\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_month'\"\n [name]=\"name + '_month'\"\n [label]=\"'foehn-input-date.month.label' | fromDictionary\"\n [(model)]=\"month\"\n (modelChange)=\"updateDate()\"\n [disabled]=\"disabled || disableMonth\"\n [maxlength]=\"2\"\n [clearButton]=\"displayClearButton() | async\"\n [allowNegative]=\"false\"\n [max]=\"12\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n ></foehn-input-number>\n </div>\n <div\n class=\"vd-form-flex__item vd-form-flex__item--4-char-width\"\n [class.mr-0]=\"shouldDisplayDatePicker()\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_year'\"\n [name]=\"name + '_year'\"\n [label]=\"'foehn-input-date.year.label' | fromDictionary\"\n [(model)]=\"year\"\n (modelChange)=\"updateDate()\"\n [disabled]=\"disabled || disableYear\"\n [allowNegative]=\"false\"\n [maxlength]=\"4\"\n [clearButton]=\"displayClearButton() | async\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n ></foehn-input-number>\n </div>\n <foehn-date-picker-button\n *ngIf=\"shouldDisplayDatePicker()\"\n [id]=\"buildId() + '_datePickerButton'\"\n [(model)]=\"datePickerModel\"\n (modelChange)=\"updateDateFromDatePicker($event)\"\n (userInput)=\"handleDatePickerUserInput($event)\"\n [displaySelectedDate]=\"false\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n class=\"align-self-center\"\n ></foehn-date-picker-button>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "component", type: i3.FoehnDatePickerButtonComponent, selector: "foehn-date-picker-button", inputs: ["id", "name", "minYear", "maxYear", "minDate", "maxDate", "displaySelectedDate", "selectedDateSrOnlyLabelKey", "model"], outputs: ["modelChange", "userInput"] }, { kind: "component", type: i4.FoehnInputNumberComponent, selector: "foehn-input-number", inputs: ["hideStandardHelpText", "allowDecimal", "allowNegative", "maxDecimalCount", "allowFreeInput", "allowLeadingZero", "model"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
97
97
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FoehnDateComponent, decorators: [{
|
|
98
98
|
type: Component,
|
|
99
99
|
args: [{ selector: 'foehn-input-date', providers: [
|
|
@@ -53,7 +53,7 @@ FoehnTimeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
53
53
|
useExisting: forwardRef(() => FoehnTimeComponent),
|
|
54
54
|
multi: true
|
|
55
55
|
}
|
|
56
|
-
], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_hours'\"\n [name]=\"name + '_hours'\"\n [label]=\"'foehn-input-time.hours.label' | fromDictionary\"\n [maxlength]=\"2\"\n [max]=\"24\"\n [(model)]=\"hour\"\n (focusout)=\"updateTime()\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n #entryComponent\n ></foehn-input-number>\n </div>\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_minutes'\"\n [name]=\"name + '_minutes'\"\n [label]=\"'foehn-input-time.minutes.label' | fromDictionary\"\n [maxlength]=\"2\"\n [max]=\"59\"\n [(model)]=\"minute\"\n (focusout)=\"updateTime()\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n ></foehn-input-number>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "component", type: i3.FoehnInputNumberComponent, selector: "foehn-input-number", inputs: ["hideStandardHelpText", "allowDecimal", "allowNegative", "maxDecimalCount", "allowFreeInput", "model"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
56
|
+
], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend *ngIf=\"!!label\" [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\">\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_hours'\"\n [name]=\"name + '_hours'\"\n [label]=\"'foehn-input-time.hours.label' | fromDictionary\"\n [maxlength]=\"2\"\n [max]=\"24\"\n [(model)]=\"hour\"\n (focusout)=\"updateTime()\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n #entryComponent\n ></foehn-input-number>\n </div>\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <foehn-input-number\n [id]=\"buildId() + '_minutes'\"\n [name]=\"name + '_minutes'\"\n [label]=\"'foehn-input-time.minutes.label' | fromDictionary\"\n [maxlength]=\"2\"\n [max]=\"59\"\n [(model)]=\"minute\"\n (focusout)=\"updateTime()\"\n [required]=\"required\"\n [hideNotRequiredExtraLabel]=\"true\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [isLabelSrOnly]=\"childrenLabelSrOnly\"\n ></foehn-input-number>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "component", type: i3.FoehnInputNumberComponent, selector: "foehn-input-number", inputs: ["hideStandardHelpText", "allowDecimal", "allowNegative", "maxDecimalCount", "allowFreeInput", "allowLeadingZero", "model"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
57
57
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FoehnTimeComponent, decorators: [{
|
|
58
58
|
type: Component,
|
|
59
59
|
args: [{ selector: 'foehn-input-time', providers: [
|
|
@@ -100,7 +100,7 @@ FoehnInputNav13Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0
|
|
|
100
100
|
useExisting: forwardRef(() => FoehnInputNav13Component),
|
|
101
101
|
multi: true
|
|
102
102
|
}
|
|
103
|
-
], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend\n [attr.for]=\"buildChildId()\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--4-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--3-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part1Child'\"\n class=\"sr-only\"\n >\n Code du pays\n </label>\n <small\n [id]=\"buildId() + '_part1ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Etant obligatoirement un num\u00E9ro AVS suisse, ce\n champs est pr\u00E9rempli\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part1'\"\n [id]=\"buildId() + '_part1'\"\n [model]=\"PREFIX_NAVS\"\n [maxlength]=\"3\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n [disabled]=\"true\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part2Child'\"\n class=\"sr-only\"\n >\n Premiers chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part2ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 1234\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part2'\"\n [id]=\"buildId() + '_part2'\"\n [(model)]=\"part2\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n (paste)=\"onPaste($event)\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part3Child'\"\n class=\"sr-only\"\n >\n Deuxi\u00E8mes chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part3ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 5678\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part3'\"\n [id]=\"buildId() + '_part3'\"\n [(model)]=\"part3\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item vd-form-flex__item--3-char-width\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part4Child'\"\n class=\"sr-only\"\n >\n Chiffre al\u00E9atoire et anonyme et num\u00E9ro de contr\u00F4le\n </label>\n <small\n [id]=\"buildId() + '_part4ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir deux chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 97\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part4'\"\n [id]=\"buildId() + '_part4'\"\n [(model)]=\"part4\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"2\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "component", type: i3.FoehnInputNumberComponent, selector: "foehn-input-number", inputs: ["hideStandardHelpText", "allowDecimal", "allowNegative", "maxDecimalCount", "allowFreeInput", "model"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
103
|
+
], usesInheritance: true, ngImport: i0, template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend\n [attr.for]=\"buildChildId()\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--4-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--3-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part1Child'\"\n class=\"sr-only\"\n >\n Code du pays\n </label>\n <small\n [id]=\"buildId() + '_part1ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Etant obligatoirement un num\u00E9ro AVS suisse, ce\n champs est pr\u00E9rempli\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part1'\"\n [id]=\"buildId() + '_part1'\"\n [model]=\"PREFIX_NAVS\"\n [maxlength]=\"3\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n [disabled]=\"true\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part2Child'\"\n class=\"sr-only\"\n >\n Premiers chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part2ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 1234\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part2'\"\n [id]=\"buildId() + '_part2'\"\n [(model)]=\"part2\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n (paste)=\"onPaste($event)\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part3Child'\"\n class=\"sr-only\"\n >\n Deuxi\u00E8mes chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part3ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 5678\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part3'\"\n [id]=\"buildId() + '_part3'\"\n [(model)]=\"part3\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item vd-form-flex__item--3-char-width\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part4Child'\"\n class=\"sr-only\"\n >\n Chiffre al\u00E9atoire et anonyme et num\u00E9ro de contr\u00F4le\n </label>\n <small\n [id]=\"buildId() + '_part4ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir deux chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 97\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part4'\"\n [id]=\"buildId() + '_part4'\"\n [(model)]=\"part4\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"2\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FoehnValidationAlertsComponent, selector: "foehn-validation-alerts", inputs: ["component", "shouldErrorsBeLive"] }, { kind: "component", type: i3.FoehnInputNumberComponent, selector: "foehn-input-number", inputs: ["hideStandardHelpText", "allowDecimal", "allowNegative", "maxDecimalCount", "allowFreeInput", "allowLeadingZero", "model"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.SdkDictionaryPipe, name: "fromDictionary" }] });
|
|
104
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FoehnInputNav13Component, decorators: [{
|
|
105
105
|
type: Component,
|
|
106
106
|
args: [{ selector: 'foehn-input-nav13', providers: [
|
|
@@ -109,6 +109,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
109
109
|
useExisting: forwardRef(() => FoehnInputNav13Component),
|
|
110
110
|
multi: true
|
|
111
111
|
}
|
|
112
|
-
], template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend\n [attr.for]=\"buildChildId()\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--4-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--3-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part1Child'\"\n class=\"sr-only\"\n >\n Code du pays\n </label>\n <small\n [id]=\"buildId() + '_part1ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Etant obligatoirement un num\u00E9ro AVS suisse, ce\n champs est pr\u00E9rempli\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part1'\"\n [id]=\"buildId() + '_part1'\"\n [model]=\"PREFIX_NAVS\"\n [maxlength]=\"3\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n [disabled]=\"true\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part2Child'\"\n class=\"sr-only\"\n >\n Premiers chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part2ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 1234\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part2'\"\n [id]=\"buildId() + '_part2'\"\n [(model)]=\"part2\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n (paste)=\"onPaste($event)\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part3Child'\"\n class=\"sr-only\"\n >\n Deuxi\u00E8mes chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part3ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 5678\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part3'\"\n [id]=\"buildId() + '_part3'\"\n [(model)]=\"part3\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item vd-form-flex__item--3-char-width\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part4Child'\"\n class=\"sr-only\"\n >\n Chiffre al\u00E9atoire et anonyme et num\u00E9ro de contr\u00F4le\n </label>\n <small\n [id]=\"buildId() + '_part4ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir deux chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 97\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part4'\"\n [id]=\"buildId() + '_part4'\"\n [(model)]=\"part4\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"2\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n </div>\n </fieldset>\n</div>\n" }]
|
|
112
|
+
], template: "<div\n class=\"form-group\"\n [class.has-danger]=\"hasErrorsToDisplay()\"\n [class.vd-form-group-danger]=\"hasErrorsToDisplay()\"\n [attr.id]=\"buildId('Container')\"\n tabindex=\"-1\"\n>\n <fieldset\n class=\"mb-3\"\n [attr.aria-describedby]=\"getDescribedBy()\"\n [attr.aria-invalid]=\"hasErrorsToDisplay() || null\"\n >\n <legend\n [attr.for]=\"buildChildId()\"\n [ngClass]=\"isLabelSrOnly ? 'sr-only' : 'vd-p'\"\n >\n <span [innerHTML]=\"label\"></span>\n <span\n *ngIf=\"!required && !hideNotRequiredExtraLabel\"\n aria-hidden=\"true\"\n >\n {{ 'foehn-input.optional' | fromDictionary }}\n </span>\n </legend>\n\n <foehn-validation-alerts [component]=\"this\"></foehn-validation-alerts>\n\n <small\n *ngIf=\"helpText\"\n [attr.id]=\"buildId() + 'Help'\"\n class=\"form-text text-secondary\"\n [innerHTML]=\"helpText\"\n ></small>\n\n <ng-content></ng-content>\n\n <div class=\"vd-form-flex\">\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--4-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--3-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part1Child'\"\n class=\"sr-only\"\n >\n Code du pays\n </label>\n <small\n [id]=\"buildId() + '_part1ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Etant obligatoirement un num\u00E9ro AVS suisse, ce\n champs est pr\u00E9rempli\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part1'\"\n [id]=\"buildId() + '_part1'\"\n [model]=\"PREFIX_NAVS\"\n [maxlength]=\"3\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n [disabled]=\"true\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part2Child'\"\n class=\"sr-only\"\n >\n Premiers chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part2ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 1234\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part2'\"\n [id]=\"buildId() + '_part2'\"\n [(model)]=\"part2\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n (paste)=\"onPaste($event)\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div class=\"vd-form-flex__item vd-form-flex__item--4-char-width\">\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part3Child'\"\n class=\"sr-only\"\n >\n Deuxi\u00E8mes chiffres al\u00E9atoires et anonymes\n </label>\n <small\n [id]=\"buildId() + '_part3ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir quatres chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 5678\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part3'\"\n [id]=\"buildId() + '_part3'\"\n [(model)]=\"part3\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"4\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n\n <div\n [ngClass]=\"{\n 'vd-form-flex__item--3-char-width':\n displayClearButton() | async,\n 'vd-form-flex__item--2-char-width': !(\n displayClearButton() | async\n )\n }\"\n class=\"vd-form-flex__item vd-form-flex__item--3-char-width\"\n >\n <div class=\"form-group\">\n <label\n [attr.for]=\"buildId() + '_part4Child'\"\n class=\"sr-only\"\n >\n Chiffre al\u00E9atoire et anonyme et num\u00E9ro de contr\u00F4le\n </label>\n <small\n [id]=\"buildId() + '_part4ChildHelp'\"\n class=\"form-text text-secondary\"\n >\n <span class=\"sr-only\">\n Saisir deux chiffres :\n <abbr title=\"Exemple\">Ex.</abbr>\n : 97\n </span>\n </small>\n\n <foehn-input-number\n [name]=\"name + '_part4'\"\n [id]=\"buildId() + '_part4'\"\n [(model)]=\"part4\"\n (modelChange)=\"updateNavs()\"\n [maxlength]=\"2\"\n [autocomplete]=\"'off'\"\n [clearButton]=\"displayClearButton() | async\"\n (userInput)=\"handleUserInput()\"\n [isErrorInherited]=\"hasErrorsToDisplay()\"\n [disabled]=\"disabled\"\n [hideStandardHelpText]=\"true\"\n [allowLeadingZero]=\"true\"\n ></foehn-input-number>\n </div>\n </div>\n </div>\n </fieldset>\n</div>\n" }]
|
|
113
113
|
}] });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQtbmF2MTMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLW5hdjEzL2ZvZWhuLWlucHV0LW5hdjEzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1uYXYxMy9mb2Vobi1pbnB1dC1uYXYxMy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7QUFheEYsTUFBTSxPQUFPLHdCQUNULFNBQVEseUJBQXlCO0lBWnJDOztRQWNJLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0tBK0Z2QjtJQTFGRyxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsK0JBQStCLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsa0RBQWtELENBQUM7U0FDbkU7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxJQUFJLE9BQU8sVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVELGVB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QUNmO1lBRUQsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNFLENBQUM7O3FIQWpHUSx3QkFBd0I7eUdBQXhCLHdCQUF3Qiw0Q0FSdEI7UUFDUDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2RCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQ0osaURDZkwsa3dQQWtNQTsyRkRqTGEsd0JBQXdCO2tCQVhwQyxTQUFTOytCQUNJLG1CQUFtQixhQUVsQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRm9laG5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb2VobklucHV0U3RyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQtc3RyaW5nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4taW5wdXQtbmF2MTMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1pbnB1dC1uYXYxMy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2VobklucHV0TmF2MTNDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5JbnB1dE5hdjEzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBGb2VobklucHV0U3RyaW5nQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIFBSRUZJWF9OQVZTID0gJzc1Nic7XG4gICAgcGFydDI6IHN0cmluZztcbiAgICBwYXJ0Mzogc3RyaW5nO1xuICAgIHBhcnQ0OiBzdHJpbmc7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmhlbHBUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmhlbHBUZXh0ID0gJ1BhciBleGVtcGxlLCA3NTYgMTIzNCA1Njc4IDk3JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSAnVm90cmUgbnVtw6lybyA8YWJiciB0aXRsZT1cIk51bcOpcm8gQVZTXCI+QVZTPC9hYmJyPic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVOYXZzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZFZhbHVlID0gdGhpcy5nZXRWYWxpZFZhbHVlKCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbCh2YWxpZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVVzZXJJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsaWRWYWx1ZSA9IHRoaXMuZ2V0VmFsaWRWYWx1ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbGlkVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWxpZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zcGxpdFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFydDIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wYXJ0MyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBhcnQ0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3BsYXlDbGVhckJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIGNsZWFyIGJ1dHRvbiBmb25jdGlvbiBub3Qgd29ycnkgYWJvdXQgdGhlIG1vZGVsIGF0IHRoaXMgc3RhZ2UuXG4gICAgICAgIHJldHVybiBvZih0aGlzLmNsZWFyQnV0dG9uKTtcbiAgICB9XG5cbiAgICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcmV2ZW50UGFzdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXN0ZWRWYWx1ZSA9IGV2ZW50LmNsaXBib2FyZERhdGFcbiAgICAgICAgICAgIC5nZXREYXRhKCd0ZXh0JylcbiAgICAgICAgICAgID8ucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICAgICAgICBjb25zdCBpc1Bhc3RlZFZhbHVlTW9yZVRoYW5PbmVBdnNCbG9jayA9IHBhc3RlZFZhbHVlPy5sZW5ndGggPiA0O1xuXG4gICAgICAgIGlmIChpc1Bhc3RlZFZhbHVlTW9yZVRoYW5PbmVBdnNCbG9jaykge1xuICAgICAgICAgICAgbGV0IHZhbHVlVG9QYXN0ZSA9IHBhc3RlZFZhbHVlO1xuICAgICAgICAgICAgaWYgKCFwYXN0ZWRWYWx1ZS5zdGFydHNXaXRoKHRoaXMuUFJFRklYX05BVlMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVUb1Bhc3RlID0gcGFzdGVkVmFsdWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgICAgICA/IGAke3RoaXMuUFJFRklYX05BVlN9LiR7cGFzdGVkVmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuUFJFRklYX05BVlMgKyBwYXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHZhbHVlVG9QYXN0ZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJJbnB1dCgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3BsaXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEzICYmICF2YWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnQyID0gdmFsdWUuc3Vic3RyaW5nKDMsIDcpO1xuICAgICAgICAgICAgdGhpcy5wYXJ0MyA9IHZhbHVlLnN1YnN0cmluZyg3LCAxMSk7XG4gICAgICAgICAgICB0aGlzLnBhcnQ0ID0gdmFsdWUuc3Vic3RyaW5nKDExLCAxMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdHRlZCA9IHZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB0aGlzLnBhcnQyID0gc3BsaXR0ZWRbMV07XG4gICAgICAgICAgICB0aGlzLnBhcnQzID0gc3BsaXR0ZWRbMl07XG4gICAgICAgICAgICB0aGlzLnBhcnQ0ID0gc3BsaXR0ZWRbM107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbGlkVmFsdWUoKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5wYXJ0MiAmJiAhdGhpcy5wYXJ0MyAmJiAhdGhpcy5wYXJ0NCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWxfICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnQyID0gdGhpcy5wYXJ0MiB8fCAnJztcbiAgICAgICAgdGhpcy5wYXJ0MyA9IHRoaXMucGFydDMgfHwgJyc7XG4gICAgICAgIHRoaXMucGFydDQgPSB0aGlzLnBhcnQ0IHx8ICcnO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5QUkVGSVhfTkFWU30uJHt0aGlzLnBhcnQyfS4ke3RoaXMucGFydDN9LiR7dGhpcy5wYXJ0NH1gO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgIFtjbGFzcy5oYXMtZGFuZ2VyXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICBbY2xhc3MudmQtZm9ybS1ncm91cC1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoJ0NvbnRhaW5lcicpXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbj5cbiAgICA8ZmllbGRzZXRcbiAgICAgICAgY2xhc3M9XCJtYi0zXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJnZXREZXNjcmliZWRCeSgpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IG51bGxcIlxuICAgID5cbiAgICAgICAgPGxlZ2VuZFxuICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImlzTGFiZWxTck9ubHkgPyAnc3Itb25seScgOiAndmQtcCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZXF1aXJlZCAmJiAhaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnZm9laG4taW5wdXQub3B0aW9uYWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgPGZvZWhuLXZhbGlkYXRpb24tYWxlcnRzIFtjb21wb25lbnRdPVwidGhpc1wiPjwvZm9laG4tdmFsaWRhdGlvbi1hbGVydHM+XG5cbiAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoKSArICdIZWxwJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhlbHBUZXh0XCJcbiAgICAgICAgPjwvc21hbGw+XG5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICd2ZC1mb3JtLWZsZXhfX2l0ZW0tLTQtY2hhci13aWR0aCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jLFxuICAgICAgICAgICAgICAgICAgICAndmQtZm9ybS1mbGV4X19pdGVtLS0zLWNoYXItd2lkdGgnOiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhfX2l0ZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkSWQoKSArICdfcGFydDFDaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ29kZSBkdSBwYXlzXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDFDaGlsZEhlbHAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXRhbnQgb2JsaWdhdG9pcmVtZW50IHVuIG51bcOpcm8gQVZTIHN1aXNzZSwgY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFtcHMgZXN0IHByw6lyZW1wbGlcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8Zm9laG4taW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJ19wYXJ0MSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJQUkVGSVhfTkFWU1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCInb2ZmJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwiZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVN0YW5kYXJkSGVscFRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZvZWhuLWlucHV0LW51bWJlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmQtZm9ybS1mbGV4X19pdGVtIHZkLWZvcm0tZmxleF9faXRlbS0tNC1jaGFyLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5mb3JdPVwiYnVpbGRJZCgpICsgJ19wYXJ0MkNoaWxkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNyLW9ubHlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVtaWVycyBjaGlmZnJlcyBhbMOpYXRvaXJlcyBldCBhbm9ueW1lc1xuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJidWlsZElkKCkgKyAnX3BhcnQyQ2hpbGRIZWxwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhaXNpciBxdWF0cmVzIGNoaWZmcmVzIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWJiciB0aXRsZT1cIkV4ZW1wbGVcIj5FeC48L2FiYnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxMjM0XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGZvZWhuLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICdfcGFydDInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJidWlsZElkKCkgKyAnX3BhcnQyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJwYXJ0MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwidXBkYXRlTmF2cygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cIidvZmYnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhckJ1dHRvbl09XCJkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh1c2VySW5wdXQpPVwiaGFuZGxlVXNlcklucHV0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzRXJyb3JJbmhlcml0ZWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTdGFuZGFyZEhlbHBUZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9mb2Vobi1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZkLWZvcm0tZmxleF9faXRlbSB2ZC1mb3JtLWZsZXhfX2l0ZW0tLTQtY2hhci13aWR0aFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkSWQoKSArICdfcGFydDNDaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgRGV1eGnDqG1lcyBjaGlmZnJlcyBhbMOpYXRvaXJlcyBldCBhbm9ueW1lc1xuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJidWlsZElkKCkgKyAnX3BhcnQzQ2hpbGRIZWxwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhaXNpciBxdWF0cmVzIGNoaWZmcmVzIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWJiciB0aXRsZT1cIkV4ZW1wbGVcIj5FeC48L2FiYnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA1Njc4XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG5cbiAgICAgICAgICAgICAgICAgICAgPGZvZWhuLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZSArICdfcGFydDMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJidWlsZElkKCkgKyAnX3BhcnQzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJwYXJ0M1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwidXBkYXRlTmF2cygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cIidvZmYnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGVhckJ1dHRvbl09XCJkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICh1c2VySW5wdXQpPVwiaGFuZGxlVXNlcklucHV0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzRXJyb3JJbmhlcml0ZWRdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlU3RhbmRhcmRIZWxwVGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZm9laG4taW5wdXQtbnVtYmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICd2ZC1mb3JtLWZsZXhfX2l0ZW0tLTMtY2hhci13aWR0aCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jLFxuICAgICAgICAgICAgICAgICAgICAndmQtZm9ybS1mbGV4X19pdGVtLS0yLWNoYXItd2lkdGgnOiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhfX2l0ZW0gdmQtZm9ybS1mbGV4X19pdGVtLS0zLWNoYXItd2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkSWQoKSArICdfcGFydDRDaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hpZmZyZSBhbMOpYXRvaXJlIGV0IGFub255bWUgZXQgbnVtw6lybyBkZSBjb250csO0bGVcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYnVpbGRJZCgpICsgJ19wYXJ0NENoaWxkSGVscCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWlzaXIgZGV1eCBjaGlmZnJlcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFiYnIgdGl0bGU9XCJFeGVtcGxlXCI+RXguPC9hYmJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogOTdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8Zm9laG4taW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJ19wYXJ0NCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInBhcnQ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJ1cGRhdGVOYXZzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiJ29mZidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyQnV0dG9uXT1cImRpc3BsYXlDbGVhckJ1dHRvbigpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNFcnJvckluaGVyaXRlZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTdGFuZGFyZEhlbHBUZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9mb2Vobi1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9maWVsZHNldD5cbjwvZGl2PlxuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4taW5wdXQtbmF2MTMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLW5hdjEzL2ZvZWhuLWlucHV0LW5hdjEzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1uYXYxMy9mb2Vobi1pbnB1dC1uYXYxMy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7QUFheEYsTUFBTSxPQUFPLHdCQUNULFNBQVEseUJBQXlCO0lBWnJDOztRQWNJLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0tBK0Z2QjtJQTFGRyxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsK0JBQStCLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsa0RBQWtELENBQUM7U0FDbkU7SUFDTCxDQUFDO0lBRUQsVUFBVTtRQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxJQUFJLE9BQU8sVUFBVSxLQUFLLFdBQVcsRUFBRTtZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQztJQUVELGVB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QUNmO1lBRUQsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNFLENBQUM7O3FIQWpHUSx3QkFBd0I7eUdBQXhCLHdCQUF3Qiw0Q0FSdEI7UUFDUDtZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztZQUN2RCxLQUFLLEVBQUUsSUFBSTtTQUNkO0tBQ0osaURDZkwsczlQQXNNQTsyRkRyTGEsd0JBQXdCO2tCQVhwQyxTQUFTOytCQUNJLG1CQUFtQixhQUVsQjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRm9laG5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2ZvZWhuLWlucHV0L2ZvZWhuLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb2VobklucHV0U3RyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9laG4taW5wdXQvZm9laG4taW5wdXQtc3RyaW5nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4taW5wdXQtbmF2MTMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1pbnB1dC1uYXYxMy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZvZWhuSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb2VobklucHV0TmF2MTNDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9laG5JbnB1dE5hdjEzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBGb2VobklucHV0U3RyaW5nQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIFBSRUZJWF9OQVZTID0gJzc1Nic7XG4gICAgcGFydDI6IHN0cmluZztcbiAgICBwYXJ0Mzogc3RyaW5nO1xuICAgIHBhcnQ0OiBzdHJpbmc7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgaWYgKCF0aGlzLmhlbHBUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmhlbHBUZXh0ID0gJ1BhciBleGVtcGxlLCA3NTYgMTIzNCA1Njc4IDk3JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMubGFiZWwgPSAnVm90cmUgbnVtw6lybyA8YWJiciB0aXRsZT1cIk51bcOpcm8gQVZTXCI+QVZTPC9hYmJyPic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVOYXZzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZFZhbHVlID0gdGhpcy5nZXRWYWxpZFZhbHVlKCk7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsaWRWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmdNb2RlbCh2YWxpZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVVzZXJJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsaWRWYWx1ZSA9IHRoaXMuZ2V0VmFsaWRWYWx1ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHZhbGlkVmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWxpZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zcGxpdFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFydDIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wYXJ0MyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnBhcnQ0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3BsYXlDbGVhckJ1dHRvbigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIGNsZWFyIGJ1dHRvbiBmb25jdGlvbiBub3Qgd29ycnkgYWJvdXQgdGhlIG1vZGVsIGF0IHRoaXMgc3RhZ2UuXG4gICAgICAgIHJldHVybiBvZih0aGlzLmNsZWFyQnV0dG9uKTtcbiAgICB9XG5cbiAgICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wcmV2ZW50UGFzdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXN0ZWRWYWx1ZSA9IGV2ZW50LmNsaXBib2FyZERhdGFcbiAgICAgICAgICAgIC5nZXREYXRhKCd0ZXh0JylcbiAgICAgICAgICAgID8ucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICAgICAgICBjb25zdCBpc1Bhc3RlZFZhbHVlTW9yZVRoYW5PbmVBdnNCbG9jayA9IHBhc3RlZFZhbHVlPy5sZW5ndGggPiA0O1xuXG4gICAgICAgIGlmIChpc1Bhc3RlZFZhbHVlTW9yZVRoYW5PbmVBdnNCbG9jaykge1xuICAgICAgICAgICAgbGV0IHZhbHVlVG9QYXN0ZSA9IHBhc3RlZFZhbHVlO1xuICAgICAgICAgICAgaWYgKCFwYXN0ZWRWYWx1ZS5zdGFydHNXaXRoKHRoaXMuUFJFRklYX05BVlMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVUb1Bhc3RlID0gcGFzdGVkVmFsdWUuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgICAgICA/IGAke3RoaXMuUFJFRklYX05BVlN9LiR7cGFzdGVkVmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuUFJFRklYX05BVlMgKyBwYXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHZhbHVlVG9QYXN0ZSk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJJbnB1dCgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3BsaXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEzICYmICF2YWx1ZS5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnQyID0gdmFsdWUuc3Vic3RyaW5nKDMsIDcpO1xuICAgICAgICAgICAgdGhpcy5wYXJ0MyA9IHZhbHVlLnN1YnN0cmluZyg3LCAxMSk7XG4gICAgICAgICAgICB0aGlzLnBhcnQ0ID0gdmFsdWUuc3Vic3RyaW5nKDExLCAxMyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdHRlZCA9IHZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB0aGlzLnBhcnQyID0gc3BsaXR0ZWRbMV07XG4gICAgICAgICAgICB0aGlzLnBhcnQzID0gc3BsaXR0ZWRbMl07XG4gICAgICAgICAgICB0aGlzLnBhcnQ0ID0gc3BsaXR0ZWRbM107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbGlkVmFsdWUoKTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghdGhpcy5wYXJ0MiAmJiAhdGhpcy5wYXJ0MyAmJiAhdGhpcy5wYXJ0NCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWxfICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnQyID0gdGhpcy5wYXJ0MiB8fCAnJztcbiAgICAgICAgdGhpcy5wYXJ0MyA9IHRoaXMucGFydDMgfHwgJyc7XG4gICAgICAgIHRoaXMucGFydDQgPSB0aGlzLnBhcnQ0IHx8ICcnO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5QUkVGSVhfTkFWU30uJHt0aGlzLnBhcnQyfS4ke3RoaXMucGFydDN9LiR7dGhpcy5wYXJ0NH1gO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXBcIlxuICAgIFtjbGFzcy5oYXMtZGFuZ2VyXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICBbY2xhc3MudmQtZm9ybS1ncm91cC1kYW5nZXJdPVwiaGFzRXJyb3JzVG9EaXNwbGF5KClcIlxuICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoJ0NvbnRhaW5lcicpXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbj5cbiAgICA8ZmllbGRzZXRcbiAgICAgICAgY2xhc3M9XCJtYi0zXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJnZXREZXNjcmliZWRCeSgpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1pbnZhbGlkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpIHx8IG51bGxcIlxuICAgID5cbiAgICAgICAgPGxlZ2VuZFxuICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkQ2hpbGRJZCgpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImlzTGFiZWxTck9ubHkgPyAnc3Itb25seScgOiAndmQtcCdcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFyZXF1aXJlZCAmJiAhaGlkZU5vdFJlcXVpcmVkRXh0cmFMYWJlbFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnZm9laG4taW5wdXQub3B0aW9uYWwnIHwgZnJvbURpY3Rpb25hcnkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgPGZvZWhuLXZhbGlkYXRpb24tYWxlcnRzIFtjb21wb25lbnRdPVwidGhpc1wiPjwvZm9laG4tdmFsaWRhdGlvbi1hbGVydHM+XG5cbiAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAqbmdJZj1cImhlbHBUZXh0XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ1aWxkSWQoKSArICdIZWxwJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LXNlY29uZGFyeVwiXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cImhlbHBUZXh0XCJcbiAgICAgICAgPjwvc21hbGw+XG5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICd2ZC1mb3JtLWZsZXhfX2l0ZW0tLTQtY2hhci13aWR0aCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jLFxuICAgICAgICAgICAgICAgICAgICAndmQtZm9ybS1mbGV4X19pdGVtLS0zLWNoYXItd2lkdGgnOiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhfX2l0ZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkSWQoKSArICdfcGFydDFDaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ29kZSBkdSBwYXlzXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDFDaGlsZEhlbHAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXRhbnQgb2JsaWdhdG9pcmVtZW50IHVuIG51bcOpcm8gQVZTIHN1aXNzZSwgY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFtcHMgZXN0IHByw6lyZW1wbGlcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8Zm9laG4taW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJ19wYXJ0MSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDEnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJQUkVGSVhfTkFWU1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCInb2ZmJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwiZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVN0YW5kYXJkSGVscFRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dMZWFkaW5nWmVyb109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZm9laG4taW5wdXQtbnVtYmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhfX2l0ZW0gdmQtZm9ybS1mbGV4X19pdGVtLS00LWNoYXItd2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmZvcl09XCJidWlsZElkKCkgKyAnX3BhcnQyQ2hpbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Itb25seVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIFByZW1pZXJzIGNoaWZmcmVzIGFsw6lhdG9pcmVzIGV0IGFub255bWVzXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDJDaGlsZEhlbHAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Fpc2lyIHF1YXRyZXMgY2hpZmZyZXMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhYmJyIHRpdGxlPVwiRXhlbXBsZVwiPkV4LjwvYWJicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEyMzRcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8Zm9laG4taW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJ19wYXJ0MidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInBhcnQyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJ1cGRhdGVOYXZzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiJ29mZidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyQnV0dG9uXT1cImRpc3BsYXlDbGVhckJ1dHRvbigpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNFcnJvckluaGVyaXRlZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVN0YW5kYXJkSGVscFRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dMZWFkaW5nWmVyb109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZm9laG4taW5wdXQtbnVtYmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhfX2l0ZW0gdmQtZm9ybS1mbGV4X19pdGVtLS00LWNoYXItd2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmZvcl09XCJidWlsZElkKCkgKyAnX3BhcnQzQ2hpbGQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3Itb25seVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIERldXhpw6htZXMgY2hpZmZyZXMgYWzDqWF0b2lyZXMgZXQgYW5vbnltZXNcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYnVpbGRJZCgpICsgJ19wYXJ0M0NoaWxkSGVscCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWlzaXIgcXVhdHJlcyBjaGlmZnJlcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFiYnIgdGl0bGU9XCJFeGVtcGxlXCI+RXguPC9hYmJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNTY3OFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuXG4gICAgICAgICAgICAgICAgICAgIDxmb2Vobi1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWUgKyAnX3BhcnQzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYnVpbGRJZCgpICsgJ19wYXJ0MydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwicGFydDNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cInVwZGF0ZU5hdnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCInb2ZmJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwiZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAodXNlcklucHV0KT1cImhhbmRsZVVzZXJJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0Vycm9ySW5oZXJpdGVkXT1cImhhc0Vycm9yc1RvRGlzcGxheSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVN0YW5kYXJkSGVscFRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dMZWFkaW5nWmVyb109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZm9laG4taW5wdXQtbnVtYmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICd2ZC1mb3JtLWZsZXhfX2l0ZW0tLTMtY2hhci13aWR0aCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Q2xlYXJCdXR0b24oKSB8IGFzeW5jLFxuICAgICAgICAgICAgICAgICAgICAndmQtZm9ybS1mbGV4X19pdGVtLS0yLWNoYXItd2lkdGgnOiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNsZWFyQnV0dG9uKCkgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZC1mb3JtLWZsZXhfX2l0ZW0gdmQtZm9ybS1mbGV4X19pdGVtLS0zLWNoYXItd2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZm9yXT1cImJ1aWxkSWQoKSArICdfcGFydDRDaGlsZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ2hpZmZyZSBhbMOpYXRvaXJlIGV0IGFub255bWUgZXQgbnVtw6lybyBkZSBjb250csO0bGVcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYnVpbGRJZCgpICsgJ19wYXJ0NENoaWxkSGVscCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYWlzaXIgZGV1eCBjaGlmZnJlcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFiYnIgdGl0bGU9XCJFeGVtcGxlXCI+RXguPC9hYmJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogOTdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cblxuICAgICAgICAgICAgICAgICAgICA8Zm9laG4taW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lICsgJ19wYXJ0NCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImJ1aWxkSWQoKSArICdfcGFydDQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobW9kZWwpXT1cInBhcnQ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb2RlbENoYW5nZSk9XCJ1cGRhdGVOYXZzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiJ29mZidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyQnV0dG9uXT1cImRpc3BsYXlDbGVhckJ1dHRvbigpIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJJbnB1dCk9XCJoYW5kbGVVc2VySW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNFcnJvckluaGVyaXRlZF09XCJoYXNFcnJvcnNUb0Rpc3BsYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTdGFuZGFyZEhlbHBUZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93TGVhZGluZ1plcm9dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L2ZvZWhuLWlucHV0LW51bWJlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuPC9kaXY+XG4iXX0=
|