ng-configcat-publicapi-ui 2.3.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +15 -15
  2. package/{esm2015/lib/_models/index.js → esm2020/lib/_models/index.mjs} +3 -3
  3. package/esm2020/lib/_models/settingValuesModel.mjs +2 -0
  4. package/{esm2015/lib/_models/updateSettingValuesModel.js → esm2020/lib/_models/updateSettingValuesModel.mjs} +2 -2
  5. package/esm2020/lib/_services/form-helper.mjs +21 -0
  6. package/{esm2015/lib/_services/index.js → esm2020/lib/_services/index.mjs} +2 -2
  7. package/esm2020/lib/_services/public-api.service.mjs +68 -0
  8. package/esm2020/lib/_services/setting-list-form-helper.mjs +152 -0
  9. package/esm2020/lib/authorization/authorization.component.mjs +50 -0
  10. package/esm2020/lib/base/base.component.mjs +45 -0
  11. package/esm2020/lib/configuration.mjs +13 -0
  12. package/esm2020/lib/dialogs/concurrent-dialog/concurrent-dialog.component.mjs +25 -0
  13. package/esm2020/lib/dialogs/expand-dialog/expand-dialog.component.mjs +77 -0
  14. package/esm2020/lib/dialogs/reason-dialog/reason-dialog.component.mjs +36 -0
  15. package/esm2020/lib/dialogs/save-snackbar/save-snackbar.component.mjs +14 -0
  16. package/esm2020/lib/ng-configcat-publicapi-ui.module.mjs +160 -0
  17. package/esm2020/lib/selects/config-select/config-select.component.mjs +56 -0
  18. package/esm2020/lib/selects/environment-select/environment-select.component.mjs +43 -0
  19. package/esm2020/lib/selects/product-select/product-select.component.mjs +36 -0
  20. package/esm2020/lib/selects/setting-select/setting-select.component.mjs +43 -0
  21. package/esm2020/lib/setting-item/setting-item.component.mjs +129 -0
  22. package/esm2020/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.mjs +81 -0
  23. package/esm2020/lib/setting-list/setting/rollout-rules/rollout-rules.component.mjs +295 -0
  24. package/esm2020/lib/setting-list/setting/setting.component.mjs +137 -0
  25. package/esm2020/lib/setting-list/setting/value/value.component.mjs +32 -0
  26. package/esm2020/lib/setting-list/setting-list.component.mjs +200 -0
  27. package/esm2020/ng-configcat-publicapi-ui.mjs +5 -0
  28. package/{esm2015/public-api.js → esm2020/public-api.mjs} +12 -12
  29. package/fesm2015/ng-configcat-publicapi-ui.mjs +1588 -0
  30. package/fesm2015/ng-configcat-publicapi-ui.mjs.map +1 -0
  31. package/fesm2020/ng-configcat-publicapi-ui.mjs +1569 -0
  32. package/fesm2020/ng-configcat-publicapi-ui.mjs.map +1 -0
  33. package/lib/_models/index.d.ts +2 -2
  34. package/lib/_models/settingValuesModel.d.ts +11 -11
  35. package/lib/_models/updateSettingValuesModel.d.ts +7 -7
  36. package/lib/_services/form-helper.d.ts +4 -4
  37. package/lib/_services/index.d.ts +1 -1
  38. package/lib/_services/public-api.service.d.ts +19 -15
  39. package/lib/_services/setting-list-form-helper.d.ts +17 -14
  40. package/lib/authorization/authorization.component.d.ts +18 -15
  41. package/lib/base/base.component.d.ts +17 -13
  42. package/lib/configuration.d.ts +8 -5
  43. package/lib/dialogs/concurrent-dialog/concurrent-dialog.component.d.ts +12 -9
  44. package/lib/dialogs/expand-dialog/expand-dialog.component.d.ts +24 -20
  45. package/lib/dialogs/reason-dialog/reason-dialog.component.d.ts +15 -12
  46. package/lib/dialogs/save-snackbar/save-snackbar.component.d.ts +8 -5
  47. package/lib/ng-configcat-publicapi-ui.module.d.ts +44 -6
  48. package/lib/selects/config-select/config-select.component.d.ts +17 -14
  49. package/lib/selects/environment-select/environment-select.component.d.ts +17 -14
  50. package/lib/selects/product-select/product-select.component.d.ts +14 -11
  51. package/lib/selects/setting-select/setting-select.component.d.ts +17 -14
  52. package/lib/setting-item/setting-item.component.d.ts +37 -31
  53. package/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.d.ts +27 -22
  54. package/lib/setting-list/setting/rollout-rules/rollout-rules.component.d.ts +60 -46
  55. package/lib/setting-list/setting/setting.component.d.ts +43 -37
  56. package/lib/setting-list/setting/value/value.component.d.ts +19 -16
  57. package/lib/setting-list/setting-list.component.d.ts +50 -42
  58. package/ng-configcat-publicapi-ui.d.ts +5 -18
  59. package/package.json +26 -21
  60. package/public-api.d.ts +8 -8
  61. package/bundles/ng-configcat-publicapi-ui.umd.js +0 -1826
  62. package/bundles/ng-configcat-publicapi-ui.umd.js.map +0 -1
  63. package/esm2015/lib/_models/settingValuesModel.js +0 -2
  64. package/esm2015/lib/_services/form-helper.js +0 -21
  65. package/esm2015/lib/_services/public-api.service.js +0 -71
  66. package/esm2015/lib/_services/setting-list-form-helper.js +0 -128
  67. package/esm2015/lib/authorization/authorization.component.js +0 -49
  68. package/esm2015/lib/base/base.component.js +0 -40
  69. package/esm2015/lib/configuration.js +0 -10
  70. package/esm2015/lib/dialogs/concurrent-dialog/concurrent-dialog.component.js +0 -26
  71. package/esm2015/lib/dialogs/expand-dialog/expand-dialog.component.js +0 -70
  72. package/esm2015/lib/dialogs/reason-dialog/reason-dialog.component.js +0 -35
  73. package/esm2015/lib/dialogs/save-snackbar/save-snackbar.component.js +0 -15
  74. package/esm2015/lib/ng-configcat-publicapi-ui.module.js +0 -100
  75. package/esm2015/lib/selects/config-select/config-select.component.js +0 -48
  76. package/esm2015/lib/selects/environment-select/environment-select.component.js +0 -40
  77. package/esm2015/lib/selects/product-select/product-select.component.js +0 -34
  78. package/esm2015/lib/selects/setting-select/setting-select.component.js +0 -40
  79. package/esm2015/lib/setting-item/setting-item.component.js +0 -106
  80. package/esm2015/lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component.js +0 -69
  81. package/esm2015/lib/setting-list/setting/rollout-rules/rollout-rules.component.js +0 -260
  82. package/esm2015/lib/setting-list/setting/setting.component.js +0 -112
  83. package/esm2015/lib/setting-list/setting/value/value.component.js +0 -31
  84. package/esm2015/lib/setting-list/setting-list.component.js +0 -179
  85. package/esm2015/ng-configcat-publicapi-ui.js +0 -19
  86. package/fesm2015/ng-configcat-publicapi-ui.js +0 -1415
  87. package/fesm2015/ng-configcat-publicapi-ui.js.map +0 -1
  88. package/ng-configcat-publicapi-ui.metadata.json +0 -1
@@ -1,179 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { MatSnackBar } from '@angular/material/snack-bar';
3
- import { MatDialog } from '@angular/material/dialog';
4
- import { ReasonDialogComponent } from '../dialogs/reason-dialog/reason-dialog.component';
5
- import { SaveSnackbarComponent } from '../dialogs/save-snackbar/save-snackbar.component';
6
- import { ConcurrentDialogComponent } from '../dialogs/concurrent-dialog/concurrent-dialog.component';
7
- import { SettingListFormHelper } from '../_services/setting-list-form-helper';
8
- export class SettingListComponent {
9
- constructor(formHelper, snackBar, dialog) {
10
- this.formHelper = formHelper;
11
- this.snackBar = snackBar;
12
- this.dialog = dialog;
13
- this.deleteSettingText = 'Delete setting';
14
- this.showEnvironmentName = false;
15
- this.editSettingRequested = new EventEmitter();
16
- this.deleteSettingRequested = new EventEmitter();
17
- this.formValuesChanged = new EventEmitter();
18
- this.loading = true;
19
- this.submitting = false;
20
- this.showRevertQuestion = false;
21
- this.showFeedBackMessage = false;
22
- this.readOnly = false;
23
- }
24
- ngOnInit() {
25
- this.reloadSettingValues();
26
- }
27
- ngOnChanges() {
28
- this.reloadSettingValues();
29
- }
30
- ngOnDestroy() {
31
- if (this.formValuesChangedSubscription) {
32
- this.formValuesChangedSubscription.unsubscribe();
33
- this.formValuesChangedSubscription = null;
34
- }
35
- }
36
- reloadSettingValues() {
37
- this.showFeedBackMessage = false;
38
- this.loading = true;
39
- this.loadSettingValues()
40
- .subscribe(settingValues => {
41
- this.readOnly = settingValues.readOnly;
42
- this.settingValues = settingValues;
43
- this.createFormGroup();
44
- this.loading = false;
45
- }, error => {
46
- this.snackBar.open('Ooops. We could not load your Feature Flags and Settings. Please try again or contact us.', 'Dismiss', { duration: 60000, panelClass: 'red-snackbar' });
47
- });
48
- }
49
- createFormGroup() {
50
- this.formGroup = this.formHelper.createSettingValuesFormGroup(this.settingValues);
51
- this.formValuesChangedSubscription = this.formGroup.valueChanges.subscribe(() => {
52
- this.formValuesChanged.emit();
53
- });
54
- }
55
- settingValuesFormArray() {
56
- return this.formGroup.get('settingValues');
57
- }
58
- submit() {
59
- if (!this.formGroup || !this.formGroup.valid) {
60
- this.showFeedBackMessage = true;
61
- this.formGroup.markAsTouched();
62
- return;
63
- }
64
- this.showFeedBackMessage = false;
65
- this.submitting = true;
66
- const updateSettingValuesModel = {
67
- settingValues: this.formGroup.controls.settingValues.value,
68
- knownLastUpdatedAt: this.settingValues.lastUpdatedAt,
69
- forced: false
70
- };
71
- if (this.settingValues.reasonRequired) {
72
- const dialogRef = this.dialog.open(ReasonDialogComponent, {
73
- width: '450px'
74
- });
75
- dialogRef.afterClosed()
76
- .subscribe(result => {
77
- if (result && result.button === 'save' && result.reason) {
78
- updateSettingValuesModel.reason = result.reason;
79
- this.updateSettingValues(updateSettingValuesModel);
80
- }
81
- else {
82
- this.submitting = false;
83
- }
84
- });
85
- return;
86
- }
87
- this.updateSettingValues(updateSettingValuesModel);
88
- }
89
- updateSettingValues(updateSettingValuesModel) {
90
- this.onSave(updateSettingValuesModel).subscribe(settingValues => {
91
- this.settingValues = settingValues;
92
- this.createFormGroup();
93
- this.submitting = false;
94
- this.snackBar.openFromComponent(SaveSnackbarComponent, { duration: 5000, panelClass: 'green-snackbar' });
95
- }, (error) => {
96
- if (error.status === 400 && error.error
97
- && error.error.KnownLastUpdatedAt && error.error.KnownLastUpdatedAt[0] === 'Concurrent update') {
98
- const dialogRef = this.dialog.open(ConcurrentDialogComponent, {
99
- width: '560px'
100
- });
101
- dialogRef.afterClosed()
102
- .subscribe(result => {
103
- if (result && result.button === 'save') {
104
- updateSettingValuesModel.forced = true;
105
- this.updateSettingValues(updateSettingValuesModel);
106
- }
107
- else {
108
- this.reloadSettingValues();
109
- this.submitting = false;
110
- }
111
- });
112
- return;
113
- }
114
- if (error.status === 400 && error.error && error.error.Reason && error.error.Reason[0] === 'Reason required') {
115
- const dialogRef = this.dialog.open(ReasonDialogComponent, {
116
- width: '450px'
117
- });
118
- dialogRef.afterClosed()
119
- .subscribe(result => {
120
- if (result && result.button === 'save' && result.reason) {
121
- updateSettingValuesModel.reason = result.reason;
122
- this.updateSettingValues(updateSettingValuesModel);
123
- }
124
- else {
125
- this.submitting = false;
126
- }
127
- });
128
- return;
129
- }
130
- this.formGroup.setErrors({ internalServerError: 'Internal server error' });
131
- this.showFeedBackMessage = true;
132
- });
133
- }
134
- handleRevertYes() {
135
- this.showRevertQuestion = false;
136
- this.reloadSettingValues();
137
- }
138
- handleRevertCancel() {
139
- this.showRevertQuestion = false;
140
- }
141
- onEditSettingRequested(setting) {
142
- this.editSettingRequested.emit({
143
- setting: setting.setting,
144
- environment: this.settingValues.environment,
145
- config: this.settingValues.config
146
- });
147
- }
148
- onDeleteSettingRequested(setting) {
149
- this.deleteSettingRequested.emit({
150
- setting: setting.setting,
151
- environment: this.settingValues.environment,
152
- config: this.settingValues.config
153
- });
154
- }
155
- }
156
- SettingListComponent.decorators = [
157
- { type: Component, args: [{
158
- selector: 'configcat-setting-list',
159
- template: "<form [formGroup]=\"formGroup\" (ngSubmit)=\"submit()\" *ngIf=\"!loading\">\r\n <div class=\"wrapper\" *ngFor=\"let settingValueFromGroup of settingValuesFormArray().controls; let i = index\">\r\n <setting [formGroup]=\"settingValueFromGroup\" [readOnly]=\"readOnly\"\r\n [canEditSetting]=\"canEditSetting\" [canDeleteSetting]=\"canDeleteSetting\"\r\n (editSettingRequested)=\"onEditSettingRequested($event)\"\r\n (deleteSettingRequested)=\"onDeleteSettingRequested($event)\" [deleteSettingText]=\"deleteSettingText\"\r\n [showEnvironmentName]=\"showEnvironmentName\">\r\n </setting>\r\n </div>\r\n\r\n <div class=\"save\" *ngIf=\"!readOnly && !submitting && formGroup.dirty\">\r\n <div class=\"feedback\" *ngIf=\"formGroup.touched && formGroup.invalid && showFeedBackMessage\">\r\n <div class=\"error\" *ngIf=\"formGroup.errors && formGroup.errors.internalServerError\">\r\n <span>Something went wrong and we could not save your settings. You can try again or <a\r\n href=\"https://configcat.com/support\" target=\"_blank\" rel=\"noopener noreferrer\">contact us.</a></span>\r\n </div>\r\n <div class=\"error\" *ngIf=\"!formGroup.errors || !formGroup.errors.internalServerError\">\r\n <span>Oh no! A feature flag has invalid or missing data.</span>\r\n </div>\r\n </div>\r\n <button type=\"button\" mat-stroked-button *ngIf=\"!showRevertQuestion\" (click)=\"showRevertQuestion = true\">\r\n <mat-icon>history</mat-icon><span>Revert changes</span>\r\n </button>\r\n <div *ngIf=\"showRevertQuestion\">\r\n <span class=\"revert\">Revert to last saved state?</span>\r\n <button type=\"button\" class=\"yes\" mat-stroked-button (click)=\"handleRevertYes()\">Yes</button>\r\n <button type=\"button\" mat-stroked-button (click)=\"handleRevertCancel()\">No</button>\r\n </div>\r\n <button class=\"save-button\" mat-flat-button color=\"warn\" type=\"submit\" [disabled]=\"submitting\">\r\n <mat-icon>backup</mat-icon> <span> Save & publish changes</span>\r\n </button>\r\n </div>\r\n</form>\r\n",
160
- styles: [".wrapper{background-color:#f3f3f3;border:1px solid rgba(0,0,0,.12);border-radius:4px;margin:1em 0}.show-hide a{cursor:pointer;font-size:.8rem}.save{position:-webkit-sticky;position:sticky;bottom:0;min-height:38px;padding:.5rem .5rem .5rem 0;background-color:#fff;display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;justify-content:flex-end;z-index:1000}.save .save-button{-webkit-animation:shadow-pulse 1s 3;animation:shadow-pulse 1s 3;margin-left:1rem}.save>*{margin:.3em}.save .revert{margin:0 16px;font-size:14px}.save .yes{margin:0 5px}.error{background-color:#a32b2d;color:#fff;padding:5px;font-size:.9em}.error a{color:#fff;text-decoration:underline}@media (max-width: 700px){.save{padding:.5rem 0}}\n"]
161
- },] }
162
- ];
163
- SettingListComponent.ctorParameters = () => [
164
- { type: SettingListFormHelper },
165
- { type: MatSnackBar },
166
- { type: MatDialog }
167
- ];
168
- SettingListComponent.propDecorators = {
169
- canEditSetting: [{ type: Input }],
170
- canDeleteSetting: [{ type: Input }],
171
- onSave: [{ type: Input }],
172
- loadSettingValues: [{ type: Input }],
173
- deleteSettingText: [{ type: Input }],
174
- showEnvironmentName: [{ type: Input }],
175
- editSettingRequested: [{ type: Output }],
176
- deleteSettingRequested: [{ type: Output }],
177
- formValuesChanged: [{ type: Output }]
178
- };
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy1saXN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUF3QixNQUFNLGVBQWUsQ0FBQztBQUlyRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBTzlFLE1BQU0sT0FBTyxvQkFBb0I7SUEwQi9CLFlBQW9CLFVBQWlDLEVBQzNDLFFBQXFCLEVBQ3JCLE1BQWlCO1FBRlAsZUFBVSxHQUFWLFVBQVUsQ0FBdUI7UUFDM0MsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBckJsQixzQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUNyQyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFM0IseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQywyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVDLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJakQsWUFBTyxHQUFHLElBQUksQ0FBQztRQUtmLGVBQVUsR0FBRyxLQUFLLENB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LENBQUM7WUFDM0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELHNCQUFzQixDQUFDLE9BQU87UUFDNUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUM3QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVztZQUMzQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUFPO1FBQzlCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUM7WUFDL0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVc7WUFDM0MsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTTtTQUNsQyxDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUF0TEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx3QkFBd0I7Z0JBQ2xDLHVtRUFBNEM7O2FBRTdDOzs7WUFOUSxxQkFBcUI7WUFMckIsV0FBVztZQUNYLFNBQVM7Ozs2QkFhZixLQUFLOytCQUNMLEtBQUs7cUJBRUwsS0FBSztnQ0FDTCxLQUFLO2dDQUNMLEtBQUs7a0NBQ0wsS0FBSzttQ0FFTCxNQUFNO3FDQUNOLE1BQU07Z0NBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNldHRpbmdWYWx1ZXNNb2RlbCwgVXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsIH0gZnJvbSAnLi4vX21vZGVscyc7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBSZWFzb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9kaWFsb2dzL3JlYXNvbi1kaWFsb2cvcmVhc29uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTYXZlU25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi9kaWFsb2dzL3NhdmUtc25hY2tiYXIvc2F2ZS1zbmFja2Jhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb25jdXJyZW50RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vZGlhbG9ncy9jb25jdXJyZW50LWRpYWxvZy9jb25jdXJyZW50LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZXR0aW5nTGlzdEZvcm1IZWxwZXIgfSBmcm9tICcuLi9fc2VydmljZXMvc2V0dGluZy1saXN0LWZvcm0taGVscGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29uZmlnY2F0LXNldHRpbmctbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NldHRpbmctbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2V0dGluZy1saXN0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGNhbkVkaXRTZXR0aW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNhbkRlbGV0ZVNldHRpbmc6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIG9uU2F2ZTogKHZhbHVlOiBVcGRhdGVTZXR0aW5nVmFsdWVzTW9kZWwpID0+IE9ic2VydmFibGU8U2V0dGluZ1ZhbHVlc01vZGVsPjtcclxuICBASW5wdXQoKSBsb2FkU2V0dGluZ1ZhbHVlczogKCkgPT4gT2JzZXJ2YWJsZTxTZXR0aW5nVmFsdWVzTW9kZWw+O1xyXG4gIEBJbnB1dCgpIGRlbGV0ZVNldHRpbmdUZXh0ID0gJ0RlbGV0ZSBzZXR0aW5nJztcclxuICBASW5wdXQoKSBzaG93RW52aXJvbm1lbnROYW1lID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBlZGl0U2V0dGluZ1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGVsZXRlU2V0dGluZ1JlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZm9ybVZhbHVlc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZvcm1WYWx1ZXNDaGFuZ2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICBzZXR0aW5nVmFsdWVzOiBTZXR0aW5nVmFsdWVzTW9kZWw7XHJcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XHJcblxyXG4gIHN1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICBzaG93UmV2ZXJ0UXVlc3Rpb24gPSBmYWxzZTtcclxuICBzaG93RmVlZEJhY2tNZXNzYWdlID0gZmFsc2U7XHJcbiAgcmVhZE9ubHkgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtSGVscGVyOiBTZXR0aW5nTGlzdEZvcm1IZWxwZXIsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVsb2FkU2V0dGluZ1ZhbHVlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbG9hZFNldHRpbmdWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuZm9ybVZhbHVlc0NoYW5nZWRTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLmZvcm1WYWx1ZXNDaGFuZ2VkU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbG9hZFNldHRpbmdWYWx1ZXMoKSB7XHJcbiAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSBmYWxzZTtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmxvYWRTZXR0aW5nVmFsdWVzKClcclxuICAgICAgLnN1YnNjcmliZShzZXR0aW5nVmFsdWVzID0+IHtcclxuICAgICAgICB0aGlzLnJlYWRPbmx5ID0gc2V0dGluZ1ZhbHVlcy5yZWFkT25seTtcclxuICAgICAgICB0aGlzLnNldHRpbmdWYWx1ZXMgPSBzZXR0aW5nVmFsdWVzO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdPb29wcy4gV2UgY291bGQgbm90IGxvYWQgeW91ciBGZWF0dXJlIEZsYWdzIGFuZCBTZXR0aW5ncy4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjb250YWN0IHVzLicsXHJcbiAgICAgICAgICAgICdEaXNtaXNzJywgeyBkdXJhdGlvbjogNjAwMDAsIHBhbmVsQ2xhc3M6ICdyZWQtc25hY2tiYXInIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1IZWxwZXIuY3JlYXRlU2V0dGluZ1ZhbHVlc0Zvcm1Hcm91cCh0aGlzLnNldHRpbmdWYWx1ZXMpO1xyXG4gICAgdGhpcy5mb3JtVmFsdWVzQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1WYWx1ZXNDaGFuZ2VkLmVtaXQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0dGluZ1ZhbHVlc0Zvcm1BcnJheSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NldHRpbmdWYWx1ZXMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwIHx8ICF0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSBmYWxzZTtcclxuICAgIHRoaXMuc3VibWl0dGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsID0gPFVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbD57XHJcbiAgICAgIHNldHRpbmdWYWx1ZXM6IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzLnNldHRpbmdWYWx1ZXMudmFsdWUsXHJcbiAgICAgIGtub3duTGFzdFVwZGF0ZWRBdDogdGhpcy5zZXR0aW5nVmFsdWVzLmxhc3RVcGRhdGVkQXQsXHJcbiAgICAgIGZvcmNlZDogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc2V0dGluZ1ZhbHVlcy5yZWFzb25SZXF1aXJlZCkge1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFJlYXNvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIHdpZHRoOiAnNDUwcHgnXHJcbiAgICAgIH0pO1xyXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJ1dHRvbiA9PT0gJ3NhdmUnICYmIHJlc3VsdC5yZWFzb24pIHtcclxuXHJcbiAgICAgICAgICAgIHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbC5yZWFzb24gPSByZXN1bHQucmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNldHRpbmdWYWx1ZXModXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbCkge1xyXG4gICAgdGhpcy5vblNhdmUodXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsKS5zdWJzY3JpYmUoc2V0dGluZ1ZhbHVlcyA9PiB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ1ZhbHVlcyA9IHNldHRpbmdWYWx1ZXM7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KFNhdmVTbmFja2JhckNvbXBvbmVudCwgeyBkdXJhdGlvbjogNTAwMCwgcGFuZWxDbGFzczogJ2dyZWVuLXNuYWNrYmFyJyB9KTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDAgJiYgZXJyb3IuZXJyb3JcclxuICAgICAgICAmJiBlcnJvci5lcnJvci5Lbm93bkxhc3RVcGRhdGVkQXQgJiYgZXJyb3IuZXJyb3IuS25vd25MYXN0VXBkYXRlZEF0WzBdID09PSAnQ29uY3VycmVudCB1cGRhdGUnKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25jdXJyZW50RGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICB3aWR0aDogJzU2MHB4J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmJ1dHRvbiA9PT0gJ3NhdmUnKSB7XHJcbiAgICAgICAgICAgICAgdXBkYXRlU2V0dGluZ1ZhbHVlc01vZGVsLmZvcmNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXR0aW5nVmFsdWVzKHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWRTZXR0aW5nVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAwICYmIGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLlJlYXNvbiAmJiBlcnJvci5lcnJvci5SZWFzb25bMF0gPT09ICdSZWFzb24gcmVxdWlyZWQnKSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWFzb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgIHdpZHRoOiAnNDUwcHgnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYnV0dG9uID09PSAnc2F2ZScgJiYgcmVzdWx0LnJlYXNvbikge1xyXG4gICAgICAgICAgICAgIHVwZGF0ZVNldHRpbmdWYWx1ZXNNb2RlbC5yZWFzb24gPSByZXN1bHQucmVhc29uO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlU2V0dGluZ1ZhbHVlcyh1cGRhdGVTZXR0aW5nVmFsdWVzTW9kZWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldEVycm9ycyh7IGludGVybmFsU2VydmVyRXJyb3I6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3InIH0pO1xyXG4gICAgICB0aGlzLnNob3dGZWVkQmFja01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXZlcnRZZXMoKSB7XHJcbiAgICB0aGlzLnNob3dSZXZlcnRRdWVzdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWxvYWRTZXR0aW5nVmFsdWVzKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXZlcnRDYW5jZWwoKSB7XHJcbiAgICB0aGlzLnNob3dSZXZlcnRRdWVzdGlvbiA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25FZGl0U2V0dGluZ1JlcXVlc3RlZChzZXR0aW5nKSB7XHJcbiAgICB0aGlzLmVkaXRTZXR0aW5nUmVxdWVzdGVkLmVtaXQoe1xyXG4gICAgICBzZXR0aW5nOiBzZXR0aW5nLnNldHRpbmcsXHJcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLnNldHRpbmdWYWx1ZXMuZW52aXJvbm1lbnQsXHJcbiAgICAgIGNvbmZpZzogdGhpcy5zZXR0aW5nVmFsdWVzLmNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRlbGV0ZVNldHRpbmdSZXF1ZXN0ZWQoc2V0dGluZykge1xyXG4gICAgdGhpcy5kZWxldGVTZXR0aW5nUmVxdWVzdGVkLmVtaXQoe1xyXG4gICAgICBzZXR0aW5nOiBzZXR0aW5nLnNldHRpbmcsXHJcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLnNldHRpbmdWYWx1ZXMuZW52aXJvbm1lbnQsXHJcbiAgICAgIGNvbmZpZzogdGhpcy5zZXR0aW5nVmFsdWVzLmNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,19 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- export { PublicApiService as ɵd } from './lib/_services';
6
- export { PublicApiService as ɵb } from './lib/_services/public-api.service';
7
- export { SettingListFormHelper as ɵf } from './lib/_services/setting-list-form-helper';
8
- export { BaseComponent as ɵa } from './lib/base/base.component';
9
- export { Configuration as ɵc } from './lib/configuration';
10
- export { ConcurrentDialogComponent as ɵl } from './lib/dialogs/concurrent-dialog/concurrent-dialog.component';
11
- export { ExpandDialogComponent as ɵn } from './lib/dialogs/expand-dialog/expand-dialog.component';
12
- export { ReasonDialogComponent as ɵk } from './lib/dialogs/reason-dialog/reason-dialog.component';
13
- export { SaveSnackbarComponent as ɵm } from './lib/dialogs/save-snackbar/save-snackbar.component';
14
- export { SettingListComponent as ɵe } from './lib/setting-list/setting-list.component';
15
- export { RolloutPercentageItemsComponent as ɵh } from './lib/setting-list/setting/rollout-percentage-items/rollout-percentage-items.component';
16
- export { RolloutRulesComponent as ɵi } from './lib/setting-list/setting/rollout-rules/rollout-rules.component';
17
- export { SettingComponent as ɵg } from './lib/setting-list/setting/setting.component';
18
- export { ValueComponent as ɵj } from './lib/setting-list/setting/value/value.component';
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctY29uZmlnY2F0LXB1YmxpY2FwaS11aS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkvc3JjL25nLWNvbmZpZ2NhdC1wdWJsaWNhcGktdWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxxQkFBcUIsSUFBSSxFQUFFLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUMsYUFBYSxJQUFJLEVBQUUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBQyxhQUFhLElBQUksRUFBRSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFDLHlCQUF5QixJQUFJLEVBQUUsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBQzVHLE9BQU8sRUFBQyxxQkFBcUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUNoRyxPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0scURBQXFELENBQUM7QUFDaEcsT0FBTyxFQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNyRixPQUFPLEVBQUMsK0JBQStCLElBQUksRUFBRSxFQUFDLE1BQU0sd0ZBQXdGLENBQUM7QUFDN0ksT0FBTyxFQUFDLHFCQUFxQixJQUFJLEVBQUUsRUFBQyxNQUFNLGtFQUFrRSxDQUFDO0FBQzdHLE9BQU8sRUFBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNwRixPQUFPLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQyxNQUFNLGtEQUFrRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuXG5leHBvcnQge1B1YmxpY0FwaVNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi9fc2VydmljZXMnO1xuZXhwb3J0IHtQdWJsaWNBcGlTZXJ2aWNlIGFzIMm1Yn0gZnJvbSAnLi9saWIvX3NlcnZpY2VzL3B1YmxpYy1hcGkuc2VydmljZSc7XG5leHBvcnQge1NldHRpbmdMaXN0Rm9ybUhlbHBlciBhcyDJtWZ9IGZyb20gJy4vbGliL19zZXJ2aWNlcy9zZXR0aW5nLWxpc3QtZm9ybS1oZWxwZXInO1xuZXhwb3J0IHtCYXNlQ29tcG9uZW50IGFzIMm1YX0gZnJvbSAnLi9saWIvYmFzZS9iYXNlLmNvbXBvbmVudCc7XG5leHBvcnQge0NvbmZpZ3VyYXRpb24gYXMgybVjfSBmcm9tICcuL2xpYi9jb25maWd1cmF0aW9uJztcbmV4cG9ydCB7Q29uY3VycmVudERpYWxvZ0NvbXBvbmVudCBhcyDJtWx9IGZyb20gJy4vbGliL2RpYWxvZ3MvY29uY3VycmVudC1kaWFsb2cvY29uY3VycmVudC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7RXhwYW5kRGlhbG9nQ29tcG9uZW50IGFzIMm1bn0gZnJvbSAnLi9saWIvZGlhbG9ncy9leHBhbmQtZGlhbG9nL2V4cGFuZC1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7UmVhc29uRGlhbG9nQ29tcG9uZW50IGFzIMm1a30gZnJvbSAnLi9saWIvZGlhbG9ncy9yZWFzb24tZGlhbG9nL3JlYXNvbi1kaWFsb2cuY29tcG9uZW50JztcbmV4cG9ydCB7U2F2ZVNuYWNrYmFyQ29tcG9uZW50IGFzIMm1bX0gZnJvbSAnLi9saWIvZGlhbG9ncy9zYXZlLXNuYWNrYmFyL3NhdmUtc25hY2tiYXIuY29tcG9uZW50JztcbmV4cG9ydCB7U2V0dGluZ0xpc3RDb21wb25lbnQgYXMgybVlfSBmcm9tICcuL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQge1JvbGxvdXRQZXJjZW50YWdlSXRlbXNDb21wb25lbnQgYXMgybVofSBmcm9tICcuL2xpYi9zZXR0aW5nLWxpc3Qvc2V0dGluZy9yb2xsb3V0LXBlcmNlbnRhZ2UtaXRlbXMvcm9sbG91dC1wZXJjZW50YWdlLWl0ZW1zLmNvbXBvbmVudCc7XG5leHBvcnQge1JvbGxvdXRSdWxlc0NvbXBvbmVudCBhcyDJtWl9IGZyb20gJy4vbGliL3NldHRpbmctbGlzdC9zZXR0aW5nL3JvbGxvdXQtcnVsZXMvcm9sbG91dC1ydWxlcy5jb21wb25lbnQnO1xuZXhwb3J0IHtTZXR0aW5nQ29tcG9uZW50IGFzIMm1Z30gZnJvbSAnLi9saWIvc2V0dGluZy1saXN0L3NldHRpbmcvc2V0dGluZy5jb21wb25lbnQnO1xuZXhwb3J0IHtWYWx1ZUNvbXBvbmVudCBhcyDJtWp9IGZyb20gJy4vbGliL3NldHRpbmctbGlzdC9zZXR0aW5nL3ZhbHVlL3ZhbHVlLmNvbXBvbmVudCc7Il19