@pepperi-addons/ngx-lib 0.4.1-yaron.1 → 0.4.2-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/chips/chips.component.d.ts +13 -2
- package/chips/chips.component.theme.scss +22 -8
- package/chips/chips.model.d.ts +1 -0
- package/core/common/directives/div-loader.directive.d.ts +21 -0
- package/core/common/directives/public-api.d.ts +1 -0
- package/core/common/model/wapi.model.d.ts +1 -0
- package/core/common/services/addon.service.d.ts +5 -0
- package/core/common/services/data-convertor.service.d.ts +1 -0
- package/core/common/services/utilities.service.d.ts +8 -6
- package/core/customization/customization.model.d.ts +1 -3
- package/date/date.component.d.ts +3 -2
- package/dialog/dialog.model.d.ts +7 -7
- package/dialog/dialog.module.d.ts +7 -9
- package/esm2020/address/address.component.mjs +3 -3
- package/esm2020/chips/chips.component.mjs +45 -13
- package/esm2020/chips/chips.model.mjs +1 -1
- package/esm2020/chips/chips.service.mjs +2 -1
- package/esm2020/color/color-picker.component.mjs +3 -3
- package/esm2020/core/common/directives/div-loader.directive.mjs +61 -0
- package/esm2020/core/common/directives/public-api.mjs +2 -1
- package/esm2020/core/common/model/wapi.model.mjs +2 -1
- package/esm2020/core/common/services/addon.service.mjs +52 -1
- package/esm2020/core/common/services/data-convertor.service.mjs +4 -1
- package/esm2020/core/common/services/utilities.service.mjs +80 -42
- package/esm2020/core/common/services/validator.service.mjs +3 -3
- package/esm2020/core/customization/customization.model.mjs +5 -3
- package/esm2020/core/http/interceptors/loader.interceptor.mjs +2 -2
- package/esm2020/date/date.component.mjs +28 -11
- package/esm2020/dialog/dialog.component.mjs +1 -1
- package/esm2020/dialog/dialog.model.mjs +4 -4
- package/esm2020/dialog/dialog.module.mjs +1 -9
- package/esm2020/field-title/field-title.component.mjs +2 -2
- package/esm2020/form/field-generator.component.mjs +8 -9
- package/esm2020/form/form.component.mjs +16 -6
- package/esm2020/form/form.module.mjs +4 -1
- package/esm2020/form/internal-field-generator.component.mjs +8 -9
- package/esm2020/form/internal-form.component.mjs +4 -4
- package/esm2020/icon/icon-generated-all.model.mjs +10 -4
- package/esm2020/icon/icon-generated.model.mjs +28 -4
- package/esm2020/link/link.component.mjs +19 -33
- package/esm2020/link/public-api.mjs +2 -1
- package/esm2020/list/list-pager.component.mjs +3 -3
- package/esm2020/list/list.component.mjs +55 -25
- package/esm2020/list/virtual-scroller.mjs +21 -13
- package/esm2020/ngx-lib.module.mjs +7 -3
- package/esm2020/profile-data-views-list/profile-data-views-list.component.mjs +1 -1
- package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +7 -5
- package/esm2020/quantity-selector/quantity-selector.component.mjs +89 -45
- package/esm2020/query-builder/common/model/type-map.mjs +2 -2
- package/esm2020/query-builder/query-builder-item/query-builder-item.component.mjs +1 -1
- package/esm2020/remote-loader/addon-block-loader.component.mjs +1 -1
- package/esm2020/remote-loader/remote-loader-element.component.mjs +14 -7
- package/esm2020/rich-html-textarea/rich-html-textarea.component.mjs +3 -3
- package/esm2020/select/select.component.mjs +7 -7
- package/esm2020/select-panel/pepperi-addons-ngx-lib-select-panel.mjs +5 -0
- package/esm2020/select-panel/public-api.mjs +7 -0
- package/esm2020/select-panel/select-panel.component.mjs +159 -0
- package/esm2020/select-panel/select-panel.model.mjs +2 -0
- package/esm2020/select-panel/select-panel.module.mjs +70 -0
- package/esm2020/smart-filters/boolean-filter/boolean-filter.component.mjs +3 -3
- package/esm2020/smart-filters/common/model/base-filter-component.mjs +5 -4
- package/esm2020/smart-filters/date-filter/date-filter.component.mjs +3 -3
- package/esm2020/smart-filters/multi-select-filter/multi-select-filter.component.mjs +1 -1
- package/esm2020/smart-filters/number-filter/number-filter.component.mjs +13 -3
- package/esm2020/smart-filters/text-filter/text-filter.component.mjs +4 -3
- package/esm2020/textarea/textarea.component.mjs +9 -3
- package/esm2020/textbox/textbox-validation.directive.mjs +9 -5
- package/esm2020/textbox/textbox.component.mjs +171 -78
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-address.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-chips.mjs +46 -13
- package/fesm2015/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-color.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-date.mjs +27 -10
- package/fesm2015/pepperi-addons-ngx-lib-date.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs +3 -11
- package/fesm2015/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs +35 -24
- package/fesm2015/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-icon.mjs +37 -7
- package/fesm2015/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-link.mjs +19 -33
- package/fesm2015/pepperi-addons-ngx-lib-link.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs +121 -83
- package/fesm2015/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +96 -50
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs +13 -6
- package/fesm2015/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs +237 -0
- package/fesm2015/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -0
- package/fesm2015/pepperi-addons-ngx-lib-select.mjs +6 -6
- package/fesm2015/pepperi-addons-ngx-lib-select.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +24 -12
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs +8 -2
- package/fesm2015/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +180 -83
- package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.mjs +2994 -2831
- package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-address.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-address.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-chips.mjs +45 -13
- package/fesm2020/pepperi-addons-ngx-lib-chips.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-color.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-color.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-date.mjs +27 -10
- package/fesm2020/pepperi-addons-ngx-lib-date.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs +3 -11
- package/fesm2020/pepperi-addons-ngx-lib-dialog.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-field-title.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs +35 -24
- package/fesm2020/pepperi-addons-ngx-lib-form.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-icon.mjs +37 -7
- package/fesm2020/pepperi-addons-ngx-lib-icon.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-link.mjs +19 -33
- package/fesm2020/pepperi-addons-ngx-lib-link.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs +121 -82
- package/fesm2020/pepperi-addons-ngx-lib-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-profile-data-views-list.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +96 -50
- package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-query-builder.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs +13 -6
- package/fesm2020/pepperi-addons-ngx-lib-remote-loader.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs +2 -2
- package/fesm2020/pepperi-addons-ngx-lib-rich-html-textarea.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs +236 -0
- package/fesm2020/pepperi-addons-ngx-lib-select-panel.mjs.map +1 -0
- package/fesm2020/pepperi-addons-ngx-lib-select.mjs +6 -6
- package/fesm2020/pepperi-addons-ngx-lib-select.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +24 -12
- package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs +8 -2
- package/fesm2020/pepperi-addons-ngx-lib-textarea.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +180 -82
- package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
- package/fesm2020/pepperi-addons-ngx-lib.mjs +2970 -2816
- package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
- package/form/field-generator.component.d.ts +1 -3
- package/form/form.component.d.ts +1 -1
- package/form/form.module.d.ts +9 -8
- package/form/internal-field-generator.component.d.ts +1 -3
- package/form/internal-form.component.d.ts +1 -1
- package/icon/icon-generated-all.model.d.ts +6 -0
- package/icon/icon-generated.model.d.ts +25 -1
- package/link/link.component.d.ts +2 -10
- package/link/public-api.d.ts +1 -0
- package/list/list.component.d.ts +6 -3
- package/list/virtual-scroller.d.ts +5 -5
- package/ngx-lib.module.d.ts +10 -9
- package/package.json +9 -1
- package/quantity-selector/quantity-selector-validation.directive.d.ts +3 -2
- package/quantity-selector/quantity-selector.component.d.ts +11 -6
- package/remote-loader/remote-loader-element.component.d.ts +5 -3
- package/select/select.component.d.ts +2 -2
- package/select-panel/index.d.ts +5 -0
- package/select-panel/public-api.d.ts +3 -0
- package/select-panel/select-panel.component.d.ts +51 -0
- package/select-panel/select-panel.component.theme.scss +25 -0
- package/select-panel/select-panel.model.d.ts +5 -0
- package/select-panel/select-panel.module.d.ts +19 -0
- package/smart-filters/common/model/base-filter-component.d.ts +3 -2
- package/src/core/style/base/typography.scss +1 -1
- package/src/core/style/components/checkbox.scss +4 -0
- package/src/core/style/components/radio-button.scss +1 -0
- package/src/core/style/components/textarea.scss +8 -2
- package/textarea/textarea.component.d.ts +3 -1
- package/textbox/textbox-validation.directive.d.ts +3 -2
- package/textbox/textbox.component.d.ts +21 -22
- package/theming-offline.scss +79 -0
- package/theming.scss +4 -31
|
@@ -11,19 +11,14 @@ export class PepUtilitiesService {
|
|
|
11
11
|
// import(`@angular/common/locales/global/${this.culture}`);
|
|
12
12
|
// } catch {}
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
// If the decimal separator is ','
|
|
16
|
-
if (
|
|
17
|
-
// If
|
|
18
|
-
value =
|
|
14
|
+
prepareNumberToFormat(value, fallbackValue = 0) {
|
|
15
|
+
// If the decimal separator is ',' change it to '.'
|
|
16
|
+
if (value?.length > 0) {
|
|
17
|
+
// If the decimal separator is ',' change it to '.' for let the formatting works.
|
|
18
|
+
value = this.changeDecimalSeparatorWhenItsComma(value);
|
|
19
|
+
// console.log('coerceNumberProperty after change decimal separator value is', value);
|
|
19
20
|
}
|
|
20
|
-
return value;
|
|
21
|
-
}
|
|
22
|
-
getDecimalSeparator() {
|
|
23
|
-
const numberWithDecimalSeparator = 1.1;
|
|
24
|
-
return numberWithDecimalSeparator
|
|
25
|
-
.toLocaleString(this.culture)
|
|
26
|
-
.substring(1, 2);
|
|
21
|
+
return coerceNumberProperty(value, fallbackValue);
|
|
27
22
|
}
|
|
28
23
|
// adapted from https://github.com/sindresorhus/parse-ms.
|
|
29
24
|
// moved to internal function because parse-ms is now pure ESM.
|
|
@@ -63,6 +58,19 @@ export class PepUtilitiesService {
|
|
|
63
58
|
}
|
|
64
59
|
return res;
|
|
65
60
|
}
|
|
61
|
+
cutValueByFractionDigits(value, maxFractionDigits) {
|
|
62
|
+
let res = value;
|
|
63
|
+
maxFractionDigits = maxFractionDigits || 2;
|
|
64
|
+
const decimalSeparator = this.getDecimalSeparator();
|
|
65
|
+
if (value.includes(decimalSeparator)) {
|
|
66
|
+
const valueArr = value.split(decimalSeparator);
|
|
67
|
+
// if (valueArr[1].length < maxFractionDigits) {
|
|
68
|
+
valueArr[1] = valueArr[1].padEnd(maxFractionDigits, '0');
|
|
69
|
+
// }
|
|
70
|
+
res = `${valueArr[0]}${decimalSeparator}${valueArr[1].slice(0, maxFractionDigits)}`;
|
|
71
|
+
}
|
|
72
|
+
return res;
|
|
73
|
+
}
|
|
66
74
|
parseDate(dateStr, showTime = false) {
|
|
67
75
|
let retVal = null;
|
|
68
76
|
if (dateStr !== '') {
|
|
@@ -132,9 +140,10 @@ export class PepUtilitiesService {
|
|
|
132
140
|
}
|
|
133
141
|
// formatPercent(value: any, digitsInfo = '1.0-2') {
|
|
134
142
|
formatPercent(value, minFractionDigits = 0, maxFractionDigits = 2) {
|
|
135
|
-
minFractionDigits =
|
|
136
|
-
maxFractionDigits =
|
|
137
|
-
|
|
143
|
+
minFractionDigits = coerceNumberProperty(minFractionDigits, null);
|
|
144
|
+
maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
|
|
145
|
+
value = this.cutValueByFractionDigits(value?.toString(), Math.max(minFractionDigits, maxFractionDigits));
|
|
146
|
+
const number = this.prepareNumberToFormat(value);
|
|
138
147
|
if (number === 0) {
|
|
139
148
|
return '0%';
|
|
140
149
|
}
|
|
@@ -148,15 +157,21 @@ export class PepUtilitiesService {
|
|
|
148
157
|
}
|
|
149
158
|
}
|
|
150
159
|
// formatCurrency(value: any, currencySign = '', digitsInfo = '1.2-2') {
|
|
151
|
-
formatCurrency(value, currencySign = '', minFractionDigits =
|
|
152
|
-
minFractionDigits =
|
|
153
|
-
maxFractionDigits =
|
|
160
|
+
formatCurrency(value, currencySign = '', minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
|
|
161
|
+
minFractionDigits = coerceNumberProperty(minFractionDigits, null);
|
|
162
|
+
maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
|
|
154
163
|
let res = '';
|
|
155
|
-
|
|
164
|
+
// If the decimal separator is the last digit
|
|
165
|
+
// if (value.length > 0 && value.indexOf(this.getDecimalSeparator()) === value.length -1) {
|
|
166
|
+
// res = value;
|
|
167
|
+
// } else {
|
|
168
|
+
value = this.cutValueByFractionDigits(value?.toString(), Math.max(minFractionDigits, maxFractionDigits));
|
|
169
|
+
const number = this.prepareNumberToFormat(value);
|
|
156
170
|
const styleOptions = {
|
|
157
171
|
// style: 'currency',
|
|
158
172
|
// currencySign: currencySign,
|
|
159
|
-
|
|
173
|
+
useGrouping: useGrouping,
|
|
174
|
+
minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
|
|
160
175
|
maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
|
|
161
176
|
};
|
|
162
177
|
if (number === 0) {
|
|
@@ -167,34 +182,45 @@ export class PepUtilitiesService {
|
|
|
167
182
|
// return formatCurrency(value, this.culture, currencySign, undefined, digitsInfo);
|
|
168
183
|
res = new Intl.NumberFormat(this.culture, styleOptions).format(number);
|
|
169
184
|
}
|
|
170
|
-
|
|
185
|
+
if (currencySign.length > 0) {
|
|
186
|
+
res = this.isCurrencyShouldBeOnRight(currencySign) ? `${res} ${currencySign}` : `${currencySign} ${res}`;
|
|
187
|
+
}
|
|
188
|
+
// }
|
|
171
189
|
return res;
|
|
172
190
|
}
|
|
173
191
|
// formatDecimal(value: any, digitsInfo = '1.2-2') {
|
|
174
|
-
formatDecimal(value, minFractionDigits = 2, maxFractionDigits = 2) {
|
|
175
|
-
minFractionDigits =
|
|
176
|
-
|
|
177
|
-
|
|
192
|
+
formatDecimal(value, minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
|
|
193
|
+
minFractionDigits = coerceNumberProperty(minFractionDigits, null);
|
|
194
|
+
// console.log('formatDecimal minFractionDigits value is', minFractionDigits);
|
|
195
|
+
maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
|
|
196
|
+
// console.log('formatDecimal minFractionDigits value is', maxFractionDigits);
|
|
197
|
+
value = this.cutValueByFractionDigits(value?.toString(), Math.max(minFractionDigits, maxFractionDigits));
|
|
198
|
+
const number = this.prepareNumberToFormat(value);
|
|
199
|
+
// console.log('number value is', number);
|
|
178
200
|
if (number === 0) {
|
|
179
201
|
return '0';
|
|
180
202
|
}
|
|
181
203
|
else {
|
|
182
204
|
// return formatNumber(value, this.culture, digitsInfo);
|
|
183
|
-
|
|
184
|
-
|
|
205
|
+
const res = new Intl.NumberFormat(this.culture, {
|
|
206
|
+
useGrouping: useGrouping,
|
|
207
|
+
minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
|
|
185
208
|
maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
|
|
186
209
|
}).format(number);
|
|
210
|
+
// console.log('Intl.NumberFormat value is', res);
|
|
211
|
+
return res;
|
|
187
212
|
}
|
|
188
213
|
}
|
|
189
214
|
// formatNumber(value: any, digitsInfo = '1.0-0'): string {
|
|
190
|
-
formatNumber(value) {
|
|
191
|
-
const number = this.
|
|
215
|
+
formatNumber(value, useGrouping = true) {
|
|
216
|
+
const number = this.prepareNumberToFormat(value);
|
|
192
217
|
if (number === 0) {
|
|
193
218
|
return '0';
|
|
194
219
|
}
|
|
195
220
|
else {
|
|
196
221
|
// return formatNumber(value, this.culture, digitsInfo);
|
|
197
222
|
return new Intl.NumberFormat(this.culture, {
|
|
223
|
+
useGrouping: useGrouping,
|
|
198
224
|
minimumFractionDigits: 0,
|
|
199
225
|
maximumFractionDigits: 0,
|
|
200
226
|
}).format(number);
|
|
@@ -213,7 +239,7 @@ export class PepUtilitiesService {
|
|
|
213
239
|
return value;
|
|
214
240
|
}
|
|
215
241
|
else {
|
|
216
|
-
let number = this.
|
|
242
|
+
let number = this.prepareNumberToFormat(value);
|
|
217
243
|
const leading = options?.leading || true;
|
|
218
244
|
const duration = options?.duration || 'milliseconds';
|
|
219
245
|
if (duration === 'seconds') {
|
|
@@ -233,21 +259,33 @@ export class PepUtilitiesService {
|
|
|
233
259
|
}
|
|
234
260
|
}
|
|
235
261
|
incrementNumber(value) {
|
|
236
|
-
let numberValue =
|
|
237
|
-
|
|
238
|
-
return newNumber;
|
|
262
|
+
let numberValue = coerceNumberProperty(value, 0);
|
|
263
|
+
return (++numberValue).toString();
|
|
239
264
|
}
|
|
240
265
|
decrementNumber(value) {
|
|
241
|
-
let numberValue =
|
|
242
|
-
|
|
243
|
-
return newNumber;
|
|
266
|
+
let numberValue = coerceNumberProperty(value, 0);
|
|
267
|
+
return (--numberValue).toString();
|
|
244
268
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
269
|
+
getDecimalSeparator() {
|
|
270
|
+
const numberWithDecimalSeparator = 1.1;
|
|
271
|
+
return numberWithDecimalSeparator
|
|
272
|
+
.toLocaleString(this.culture)
|
|
273
|
+
.substring(1, 2);
|
|
274
|
+
}
|
|
275
|
+
changeDecimalSeparatorWhenItsComma(value, reverse = false) {
|
|
276
|
+
// If the decimal separator is ','
|
|
277
|
+
if (this.getDecimalSeparator() === ',') {
|
|
278
|
+
// In case that the value isn't string.
|
|
279
|
+
value = value?.toString() || '';
|
|
280
|
+
// If reverse change the number from '.' to ',' else do the opposite.
|
|
281
|
+
value = reverse ? value.replace('.', ',') : value.replace(',', '.');
|
|
249
282
|
}
|
|
250
|
-
return
|
|
283
|
+
return value;
|
|
284
|
+
}
|
|
285
|
+
isEqualNumber(numberAsString, numberAsString2) {
|
|
286
|
+
const number = this.prepareNumberToFormat(numberAsString);
|
|
287
|
+
const number2 = this.prepareNumberToFormat(numberAsString2);
|
|
288
|
+
return number === number2;
|
|
251
289
|
}
|
|
252
290
|
}
|
|
253
291
|
PepUtilitiesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepUtilitiesService, deps: [{ token: i1.TranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -260,4 +298,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
260
298
|
}], ctorParameters: function () { return [{ type: i1.TranslateService, decorators: [{
|
|
261
299
|
type: Optional
|
|
262
300
|
}] }]; } });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxLQUFhLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDekQsa0NBQWtDO1FBQ2xDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLEtBQUssR0FBRyxFQUFFO1lBQ3BDLHFFQUFxRTtZQUNyRSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDdkU7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sMEJBQTBCLEdBQUcsR0FBRyxDQUFDO1FBRXZDLE9BQU8sMEJBQTBCO2FBQzVCLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQzVCLFNBQVMs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LElBQUksQ0FBQyxzQkFBc0IsQ0FDekMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUMxQixJQUFJLENBQ1AsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUN6QyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQzFCLElBQUksQ0FDUCxDQUFDO1FBRUYsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQVUsRUFBRSxhQUFhLEdBQUcsQ0FBQztRQUM5QyxtREFBbUQ7UUFDbkQsSUFBSSxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7Z0hBOVNRLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07MkZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBSWdCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgX2lzTnVtYmVyVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdE51bWJlciwgZm9ybWF0UGVyY2VudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBVdGlsaXRpZXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGN1bHR1cmUgPSAnZW4tVVMnO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY3VsdHVyZSA9IHRoaXMudHJhbnNsYXRlPy5nZXRCcm93c2VyQ3VsdHVyZUxhbmcoKSB8fCAnZW4tVVMnO1xuXG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIC8vICAgICBpbXBvcnQoYEBhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2dsb2JhbC8ke3RoaXMuY3VsdHVyZX1gKTtcbiAgICAgICAgLy8gfSBjYXRjaCB7fVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlRGVjaW1hbFNlcGVyYXRvcih2YWx1ZTogc3RyaW5nLCByZXZlcnNlID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJywnXG4gICAgICAgIGlmICh0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSA9PT0gJywnKSB7XG4gICAgICAgICAgICAvLyBJZiByZXZlcnNlIGNoYW5nZSB0aGUgbnVtYmVyIGZyb20gJy4nIHRvICcsJyBlbHNlIGRvIHRoZSBvcHBvc2l0ZS5cbiAgICAgICAgICAgIHZhbHVlID0gcmV2ZXJzZSA/IHZhbHVlLnJlcGxhY2UoJy4nLCAnLCcpIDogdmFsdWUucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWNpbWFsU2VwYXJhdG9yKCkge1xuICAgICAgICBjb25zdCBudW1iZXJXaXRoRGVjaW1hbFNlcGFyYXRvciA9IDEuMTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyV2l0aERlY2ltYWxTZXBhcmF0b3JcbiAgICAgICAgICAgIC50b0xvY2FsZVN0cmluZyh0aGlzLmN1bHR1cmUpXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEsIDIpO1xuICAgIH1cblxuICAgIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3BhcnNlLW1zLlxuICAgIC8vIG1vdmVkIHRvIGludGVybmFsIGZ1bmN0aW9uIGJlY2F1c2UgcGFyc2UtbXMgaXMgbm93IHB1cmUgRVNNLlxuICAgIHByaXZhdGUgcGFyc2VNcyhtaWxsaXNlY29uZHM6IG51bWJlcikge1xuICAgICAgICBpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgbnVtYmVyJylcbiAgICAgICAgfVxuICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5czogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA4NjQwMDAwMCksXG4gICAgICAgICAgICBob3VyczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAzNjAwMDAwKSAlIDI0LFxuICAgICAgICAgICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA2MDAwMCkgJSA2MCxcbiAgICAgICAgICAgIHNlY29uZHM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gMTAwMCkgJSA2MCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMpICUgMTAwMFxuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcmFmYWVscmluYWxkaS9hZGQtemVyby5cbiAgICAvLyBtb3ZlZCB0byBpbnRlcm5hbCBmdW5jdGlvbiBiL2MgYWRkWmVybyBpcyB1bm1haW50YWluZWQgKDcrIHllYXJzKS5cbiAgICAvLyBzdHJpcHBlZCBvdXQgbmVnYXRpdmUgc2lnbiBsb2dpYyBzaW5jZSB3ZSdyZSBhbHJlYWR5IGRvaW5nIGl0IGVsc2V3aGVyZS5cbiAgICBwcml2YXRlIGFkZFplcm8odmFsdWU6IG51bWJlciwgZGlnaXRzID0gMikge1xuICAgICAgICBkaWdpdHMgPSBkaWdpdHMgfHwgMlxuICAgIFxuICAgICAgICBsZXQgc3RyID0gdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICBsZXQgc2l6ZSA9IDBcbiAgICBcbiAgICAgICAgc2l6ZSA9IGRpZ2l0cyAtIHN0ci5sZW5ndGggKyAxXG4gICAgICAgIHN0ciA9IG5ldyBBcnJheShzaXplKS5qb2luKCcwJykuY29uY2F0KHN0cilcbiAgICBcbiAgICAgICAgcmV0dXJuIHN0clxuICAgIH1cbiAgICBcbiAgICBwcml2YXRlIGlzQ3VycmVuY3lTaG91bGRCZU9uUmlnaHQoY3VycmVuY3lTeW1ib2w6IHN0cmluZykge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbmN5U3ltYm9sID09IFwi4oKsXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwi4oKqXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwiRnRcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJLxI1cIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCLRgNGD0LFcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJ6xYJcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJrci5cIilcbiAgICAgICAge1xuICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcGFyc2VEYXRlKGRhdGVTdHI6IHN0cmluZywgc2hvd1RpbWUgPSBmYWxzZSk6IERhdGUge1xuICAgICAgICBsZXQgcmV0VmFsOiBEYXRlID0gbnVsbDtcbiAgICAgICAgaWYgKGRhdGVTdHIgIT09ICcnKSB7XG4gICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZShkYXRlU3RyKTtcblxuICAgICAgICAgICAgLy8gQ29udmVydCB0byBkYXRlIHdpdGggbm8gb2Zmc2V0LlxuICAgICAgICAgICAgaWYgKCFzaG93VGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0ZVN0ci5pbmRleE9mKCdUJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRleHQgPSBkYXRlU3RyLnNwbGl0KCctJyk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVUZXh0Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVUZXh0WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSBOdW1iZXIoZGF0ZVRleHRbMV0pIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVUZXh0WzJdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgMCwgcmV0VmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmdldEZ1bGxZZWFyKCksIHJldFZhbC5nZXRNb250aCgpLCByZXRWYWwuZ2V0RGF0ZSgpLCByZXRWYWwuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmdldE1pbnV0ZXMoKSArIHJldFZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogLTEsIHJldFZhbC5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXRWYWwgJiYgaXNOYU4ocmV0VmFsLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICB9XG5cbiAgICBzdHJpbmdpZnlEYXRlKGRhdGU6IERhdGUsIHNob3dUaW1lID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgLy8gaW5jbHVkZSAtIG9mZnNldFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGV4dCA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGVUZXh0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZVRleHQuam9pbignJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1ZhbHVlSHRtbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgUkVHRVhQID0gLzxcXC8/W2Etel1bXFxzXFxTXSo+L2k7XG4gICAgICAgIHJlcyA9IFJFR0VYUC50ZXN0KHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlzSnNvblN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U3ZnRWxlbWVudEZyb21TdHJpbmcoZG9jdW1lbnQsIHN2Z0NvbnRlbnQ6IHN0cmluZyk6IFNWR0VsZW1lbnQge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgLy8gZGl2LmNsYXNzTmFtZSA9ICdzdmctaWNvbic7XG4gICAgICAgIC8vIEFkZCBjbGFzcyBzdmctaWNvblxuICAgICAgICBpZiAoc3ZnQ29udGVudD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IHN2Z0NvbnRlbnQucmVwbGFjZSgnPHN2ZyAnLCAnPHN2ZyBjbGFzcz1cInN2Zy1pY29uXCIgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRpdi5xdWVyeVNlbGVjdG9yKCdzdmcnKSB8fFxuICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXRQZXJjZW50KHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4wLTInKSB7XG4gICAgZm9ybWF0UGVyY2VudCh2YWx1ZTogYW55LCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDAsIG1heEZyYWN0aW9uRGlnaXRzID0gMikge1xuICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuXG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdFBlcmNlbnQobnVtYmVyIC8gMTAwLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHsgXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdwZXJjZW50JyxcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IG1pbkZyYWN0aW9uRGlnaXRzIHx8IDAsXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhGcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1heCgyLCBtaW5GcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICB9KS5mb3JtYXQobnVtYmVyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZvcm1hdEN1cnJlbmN5KHZhbHVlOiBhbnksIGN1cnJlbmN5U2lnbiA9ICcnLCBkaWdpdHNJbmZvID0gJzEuMi0yJykge1xuICAgIGZvcm1hdEN1cnJlbmN5KHZhbHVlOiBhbnksIGN1cnJlbmN5U2lnbiA9ICcnLCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDAsIG1heEZyYWN0aW9uRGlnaXRzID0gMikge1xuICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuXG4gICAgICAgIGxldCByZXMgPSAnJztcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHN0eWxlT3B0aW9ucyA9IHsgXG4gICAgICAgICAgICAvLyBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgIC8vIGN1cnJlbmN5U2lnbjogY3VycmVuY3lTaWduLFxuICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCAwLFxuICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhGcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1heCgyLCBtaW5GcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdEN1cnJlbmN5KDAsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmVzID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwgc3R5bGVPcHRpb25zKS5mb3JtYXQoMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0Q3VycmVuY3kodmFsdWUsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmVzID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwgc3R5bGVPcHRpb25zKS5mb3JtYXQobnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyA9IHRoaXMuaXNDdXJyZW5jeVNob3VsZEJlT25SaWdodChjdXJyZW5jeVNpZ24pID8gYCR7cmVzfSAke2N1cnJlbmN5U2lnbn1gIDogYCR7Y3VycmVuY3lTaWdufSAke3Jlc31gXG4gICAgICAgIFxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBcbiAgICAvLyBmb3JtYXREZWNpbWFsKHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0RGVjaW1hbCh2YWx1ZTogYW55LCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDIsIG1heEZyYWN0aW9uRGlnaXRzID0gMikge1xuICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jdWx0dXJlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCB7IFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5taW4oMiwgbWF4RnJhY3Rpb25EaWdpdHMpLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4RnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5tYXgoMiwgbWluRnJhY3Rpb25EaWdpdHMpLFxuICAgICAgICAgICAgfSkuZm9ybWF0KG51bWJlcilcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBmb3JtYXROdW1iZXIodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjAtMCcpOiBzdHJpbmcge1xuICAgIGZvcm1hdE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUsIHRoaXMuY3VsdHVyZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwgeyBcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAwLFxuICAgICAgICAgICAgfSkuZm9ybWF0KG51bWJlcilcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgbnVtYmVyIGluIG1pbGxpc2Vjb25kcyB0byBhIHN0YW5kYXJkIGR1cmF0aW9uIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGZvcm1hdER1cmF0aW9uIG9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXSAtIGFkZCBsZWFkaW5nIHplcm9cbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgLSBmb3JtYXR0ZWQgZHVyYXRpb24gc3RyaW5nXG4gICAgKi9cbiAgICBmb3JtYXREdXJhdGlvbih2YWx1ZSwgb3B0aW9uczogeyBsZWFkaW5nPzogYm9vbGVhbiwgZHVyYXRpb24/OiAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB9ID0ge30pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IF9pc051bWJlclZhbHVlKHZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy5jb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgXG4gICAgICAgICAgICBjb25zdCBsZWFkaW5nID0gb3B0aW9ucz8ubGVhZGluZyB8fCB0cnVlO1xuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBvcHRpb25zPy5kdXJhdGlvbiB8fCAnbWlsbGlzZWNvbmRzJztcbiAgICAgICAgICAgIGlmIChkdXJhdGlvbiA9PT0gJ3NlY29uZHMnKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyICogMTAwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdW5zaWduZWRNcyA9IG51bWJlciA8IDAgPyAtbnVtYmVyIDogbnVtYmVyO1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IG51bWJlciA8PSAtMTAwMCA/ICctJyA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMucGFyc2VNcyh1bnNpZ25lZE1zKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLmFkZFplcm8odC5zZWNvbmRzKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHQuZGF5cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduICsgdC5kYXlzICsgJzonICsgdGhpcy5hZGRaZXJvKHQuaG91cnMpICsgJzonICsgdGhpcy5hZGRaZXJvKHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0LmhvdXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyAobGVhZGluZyA/IHRoaXMuYWRkWmVybyh0LmhvdXJzKSA6IHQuaG91cnMpICsgJzonICsgdGhpcy5hZGRaZXJvKHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgICAgICB9IFxuXG4gICAgICAgICAgICByZXR1cm4gc2lnbiArIChsZWFkaW5nID8gdGhpcy5hZGRaZXJvKHQubWludXRlcykgOiB0Lm1pbnV0ZXMpICsgJzonICsgc2Vjb25kc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5jcmVtZW50TnVtYmVyKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgbnVtYmVyVmFsdWUgPSB0aGlzLmNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICAgICAgY29uc3QgbmV3TnVtYmVyID0gdGhpcy5jaGFuZ2VEZWNpbWFsU2VwZXJhdG9yKFxuICAgICAgICAgICAgKCsrbnVtYmVyVmFsdWUpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG5ld051bWJlcjtcbiAgICB9XG5cbiAgICBkZWNyZW1lbnROdW1iZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBudW1iZXJWYWx1ZSA9IHRoaXMuY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICAgICAgICBjb25zdCBuZXdOdW1iZXIgPSB0aGlzLmNoYW5nZURlY2ltYWxTZXBlcmF0b3IoXG4gICAgICAgICAgICAoLS1udW1iZXJWYWx1ZSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gbmV3TnVtYmVyO1xuICAgIH1cblxuICAgIGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlOiBhbnksIGZhbGxiYWNrVmFsdWUgPSAwKTogbnVtYmVyIHtcbiAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzICcsJyBjaGFuZ2UgaXQgdG8gJy4nXG4gICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNoYW5nZURlY2ltYWxTZXBlcmF0b3IodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCBmYWxsYmFja1ZhbHVlKTtcbiAgICB9XG59XG4iXX0=
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsYUFBYSxHQUFHLENBQUM7UUFDMUQsbURBQW1EO1FBQ25ELElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsaUZBQWlGO1lBQ2pGLEtBQUssR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsc0ZBQXNGO1NBQ3pGO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCwrREFBK0Q7SUFDdkQsT0FBTyxDQUFDLFlBQW9CO1FBQ2hDLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtTQUMzQztRQUVELE9BQU87WUFDSCxJQUFJLEVBQUUsSUFB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QUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFNUQsT0FBTyxNQUFNLEtBQUssT0FBTyxDQUFDO0lBQzlCLENBQUM7O2dIQXhWUSxtQkFBbUI7b0hBQW5CLG1CQUFtQixjQUZoQixNQUFNOzJGQUVULG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHksIF9pc051bWJlclZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGZvcm1hdEN1cnJlbmN5LCBmb3JtYXROdW1iZXIsIGZvcm1hdFBlcmNlbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUGVwVXRpbGl0aWVzU2VydmljZSB7XG4gICAgcHJpdmF0ZSBjdWx0dXJlID0gJ2VuLVVTJztcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gbnVsbCkge1xuICAgICAgICB0aGlzLmN1bHR1cmUgPSB0aGlzLnRyYW5zbGF0ZT8uZ2V0QnJvd3NlckN1bHR1cmVMYW5nKCkgfHwgJ2VuLVVTJztcblxuICAgICAgICAvLyB0cnkge1xuICAgICAgICAvLyAgICAgaW1wb3J0KGBAYW5ndWxhci9jb21tb24vbG9jYWxlcy9nbG9iYWwvJHt0aGlzLmN1bHR1cmV9YCk7XG4gICAgICAgIC8vIH0gY2F0Y2gge31cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZTogc3RyaW5nLCBmYWxsYmFja1ZhbHVlID0gMCk6IG51bWJlciB7XG4gICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyAnLCcgY2hhbmdlIGl0IHRvICcuJ1xuICAgICAgICBpZiAodmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyAnLCcgY2hhbmdlIGl0IHRvICcuJyBmb3IgbGV0IHRoZSBmb3JtYXR0aW5nIHdvcmtzLlxuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEodmFsdWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NvZXJjZU51bWJlclByb3BlcnR5IGFmdGVyIGNoYW5nZSBkZWNpbWFsIHNlcGFyYXRvciB2YWx1ZSBpcycsIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgZmFsbGJhY2tWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcGFyc2UtbXMuXG4gICAgLy8gbW92ZWQgdG8gaW50ZXJuYWwgZnVuY3Rpb24gYmVjYXVzZSBwYXJzZS1tcyBpcyBub3cgcHVyZSBFU00uXG4gICAgcHJpdmF0ZSBwYXJzZU1zKG1pbGxpc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWlsbGlzZWNvbmRzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBudW1iZXInKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gODY0MDAwMDApLFxuICAgICAgICAgICAgaG91cnM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gMzYwMDAwMCkgJSAyNCxcbiAgICAgICAgICAgIG1pbnV0ZXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gNjAwMDApICUgNjAsXG4gICAgICAgICAgICBzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDEwMDApICUgNjAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzKSAlIDEwMDBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vcmFmYWVscmluYWxkaS9hZGQtemVyby5cbiAgICAvLyBtb3ZlZCB0byBpbnRlcm5hbCBmdW5jdGlvbiBiL2MgYWRkWmVybyBpcyB1bm1haW50YWluZWQgKDcrIHllYXJzKS5cbiAgICAvLyBzdHJpcHBlZCBvdXQgbmVnYXRpdmUgc2lnbiBsb2dpYyBzaW5jZSB3ZSdyZSBhbHJlYWR5IGRvaW5nIGl0IGVsc2V3aGVyZS5cbiAgICBwcml2YXRlIGFkZFplcm8odmFsdWU6IG51bWJlciwgZGlnaXRzID0gMikge1xuICAgICAgICBkaWdpdHMgPSBkaWdpdHMgfHwgMlxuXG4gICAgICAgIGxldCBzdHIgPSB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgIGxldCBzaXplID0gMFxuXG4gICAgICAgIHNpemUgPSBkaWdpdHMgLSBzdHIubGVuZ3RoICsgMVxuICAgICAgICBzdHIgPSBuZXcgQXJyYXkoc2l6ZSkuam9pbignMCcpLmNvbmNhdChzdHIpXG5cbiAgICAgICAgcmV0dXJuIHN0clxuICAgIH1cblxuICAgIHByaXZhdGUgaXNDdXJyZW5jeVNob3VsZEJlT25SaWdodChjdXJyZW5jeVN5bWJvbDogc3RyaW5nKSB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVuY3lTeW1ib2wgPT0gXCLigqxcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCLigqpcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJGdFwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcIkvEjVwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcItGA0YPQsVwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcInrFglwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcImtyLlwiKSB7XG4gICAgICAgICAgICByZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGN1dFZhbHVlQnlGcmFjdGlvbkRpZ2l0cyh2YWx1ZTogc3RyaW5nLCBtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlcyA9IHZhbHVlO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzIHx8IDI7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxTZXBhcmF0b3IgPSB0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKTtcblxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoZGVjaW1hbFNlcGFyYXRvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQXJyID0gdmFsdWUuc3BsaXQoZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICAgICAgICAgIC8vIGlmICh2YWx1ZUFyclsxXS5sZW5ndGggPCBtYXhGcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgdmFsdWVBcnJbMV0gPSB2YWx1ZUFyclsxXS5wYWRFbmQobWF4RnJhY3Rpb25EaWdpdHMsICcwJyk7XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIHJlcyA9IGAke3ZhbHVlQXJyWzBdfSR7ZGVjaW1hbFNlcGFyYXRvcn0ke3ZhbHVlQXJyWzFdLnNsaWNlKDAsIG1heEZyYWN0aW9uRGlnaXRzKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogc3RyaW5nLCBzaG93VGltZSA9IGZhbHNlKTogRGF0ZSB7XG4gICAgICAgIGxldCByZXRWYWw6IERhdGUgPSBudWxsO1xuICAgICAgICBpZiAoZGF0ZVN0ciAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKGRhdGVTdHIpO1xuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGRhdGUgd2l0aCBubyBvZmZzZXQuXG4gICAgICAgICAgICBpZiAoIXNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRlU3RyLmluZGV4T2YoJ1QnKTtcblxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGVTdHIuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGV4dCA9IGRhdGVTdHIuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZVRleHQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBOdW1iZXIoZGF0ZVRleHRbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlVGV4dFsxXSkgLSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZVRleHRbMl0pO1xuICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5LCAwLCByZXRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZ2V0RnVsbFllYXIoKSwgcmV0VmFsLmdldE1vbnRoKCksIHJldFZhbC5nZXREYXRlKCksIHJldFZhbC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgICAgICByZXRWYWwuZ2V0TWludXRlcygpICsgcmV0VmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMSwgcmV0VmFsLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldFZhbCAmJiBpc05hTihyZXRWYWwuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgcmV0VmFsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0VmFsO1xuICAgIH1cblxuICAgIHN0cmluZ2lmeURhdGUoZGF0ZTogRGF0ZSwgc2hvd1RpbWUgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpOyAvLyBpbmNsdWRlIC0gb2Zmc2V0XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0ZVRleHQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXREYXRlKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlVGV4dC5qb2luKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVmFsdWVIdG1sKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBSRUdFWFAgPSAvPFxcLz9bYS16XVtcXHNcXFNdKj4vaTtcbiAgICAgICAgcmVzID0gUkVHRVhQLnRlc3QodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgaXNKc29uU3RyaW5nKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBKU09OLnBhcnNlKHN0cik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRTdmdFbGVtZW50RnJvbVN0cmluZyhkb2N1bWVudCwgc3ZnQ29udGVudDogc3RyaW5nKTogU1ZHRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICAgICAgICAvLyBkaXYuY2xhc3NOYW1lID0gJ3N2Zy1pY29uJztcbiAgICAgICAgLy8gQWRkIGNsYXNzIHN2Zy1pY29uXG4gICAgICAgIGlmIChzdmdDb250ZW50Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gc3ZnQ29udGVudC5yZXBsYWNlKCc8c3ZnICcsICc8c3ZnIGNsYXNzPVwic3ZnLWljb25cIiAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZGl2LnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpIHx8XG4gICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGZvcm1hdFBlcmNlbnQodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjAtMicpIHtcbiAgICBmb3JtYXRQZXJjZW50KHZhbHVlOiBhbnksIG1pbkZyYWN0aW9uRGlnaXRzID0gMCwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KG1heEZyYWN0aW9uRGlnaXRzLCBudWxsKTtcblxuICAgICAgICB2YWx1ZSA9IHRoaXMuY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlPy50b1N0cmluZygpLCBNYXRoLm1heChtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdFBlcmNlbnQobnVtYmVyIC8gMTAwLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3BlcmNlbnQnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIG1pbkZyYWN0aW9uRGlnaXRzID0gMiwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyLCB1c2VHcm91cGluZyA9IHRydWUpIHtcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuXG4gICAgICAgIGxldCByZXMgPSAnJztcblxuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgdGhlIGxhc3QgZGlnaXRcbiAgICAgICAgLy8gaWYgKHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUuaW5kZXhPZih0aGlzLmdldERlY2ltYWxTZXBhcmF0b3IoKSkgPT09IHZhbHVlLmxlbmd0aCAtMSkge1xuICAgICAgICAvLyAgICAgcmVzID0gdmFsdWU7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlPy50b1N0cmluZygpLCBNYXRoLm1heChtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpKTtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAvLyBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW5jeVNpZ246IGN1cnJlbmN5U2lnbixcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdXNlR3JvdXBpbmcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1pbigyLCBtYXhGcmFjdGlvbkRpZ2l0cyB8fCAyKSxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdEN1cnJlbmN5KDAsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHN0eWxlT3B0aW9ucykuZm9ybWF0KDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0Q3VycmVuY3kodmFsdWUsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHN0eWxlT3B0aW9ucykuZm9ybWF0KG51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAoY3VycmVuY3lTaWduLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmlzQ3VycmVuY3lTaG91bGRCZU9uUmlnaHQoY3VycmVuY3lTaWduKSA/IGAke3Jlc30gJHtjdXJyZW5jeVNpZ259YCA6IGAke2N1cnJlbmN5U2lnbn0gJHtyZXN9YFxuICAgICAgICAgICAgfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBmb3JtYXREZWNpbWFsKHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0RGVjaW1hbCh2YWx1ZTogYW55LCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDIsIG1heEZyYWN0aW9uRGlnaXRzID0gMiwgdXNlR3JvdXBpbmcgPSB0cnVlKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybWF0RGVjaW1hbCBtaW5GcmFjdGlvbkRpZ2l0cyB2YWx1ZSBpcycsIG1pbkZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtYXREZWNpbWFsIG1pbkZyYWN0aW9uRGlnaXRzIHZhbHVlIGlzJywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuXG4gICAgICAgIHZhbHVlID0gdGhpcy5jdXRWYWx1ZUJ5RnJhY3Rpb25EaWdpdHModmFsdWU/LnRvU3RyaW5nKCksIE1hdGgubWF4KG1pbkZyYWN0aW9uRGlnaXRzLCBtYXhGcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVtYmVyIHZhbHVlIGlzJywgbnVtYmVyKTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jdWx0dXJlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdXNlR3JvdXBpbmcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1pbigyLCBtYXhGcmFjdGlvbkRpZ2l0cyB8fCAyKSxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnSW50bC5OdW1iZXJGb3JtYXQgdmFsdWUgaXMnLCByZXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0TnVtYmVyKHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4wLTAnKTogc3RyaW5nIHtcbiAgICBmb3JtYXROdW1iZXIodmFsdWU6IGFueSwgdXNlR3JvdXBpbmcgPSB0cnVlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdXNlR3JvdXBpbmcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAwLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgbnVtYmVyIGluIG1pbGxpc2Vjb25kcyB0byBhIHN0YW5kYXJkIGR1cmF0aW9uIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHNcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIGZvcm1hdER1cmF0aW9uIG9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXSAtIGFkZCBsZWFkaW5nIHplcm9cbiAgICAgKiBAcmV0dXJucyBzdHJpbmcgLSBmb3JtYXR0ZWQgZHVyYXRpb24gc3RyaW5nXG4gICAgKi9cbiAgICBmb3JtYXREdXJhdGlvbih2YWx1ZSwgb3B0aW9uczogeyBsZWFkaW5nPzogYm9vbGVhbiwgZHVyYXRpb24/OiAnbWlsbGlzZWNvbmRzJyB8ICdzZWNvbmRzJyB9ID0ge30pOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBpc051bWJlciA9IF9pc051bWJlclZhbHVlKHZhbHVlKTtcblxuICAgICAgICBpZiAoIWlzTnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgICAgICBjb25zdCBsZWFkaW5nID0gb3B0aW9ucz8ubGVhZGluZyB8fCB0cnVlO1xuICAgICAgICAgICAgY29uc3QgZHVyYXRpb24gPSBvcHRpb25zPy5kdXJhdGlvbiB8fCAnbWlsbGlzZWNvbmRzJztcbiAgICAgICAgICAgIGlmIChkdXJhdGlvbiA9PT0gJ3NlY29uZHMnKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyICogMTAwMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdW5zaWduZWRNcyA9IG51bWJlciA8IDAgPyAtbnVtYmVyIDogbnVtYmVyO1xuICAgICAgICAgICAgY29uc3Qgc2lnbiA9IG51bWJlciA8PSAtMTAwMCA/ICctJyA6ICcnO1xuICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMucGFyc2VNcyh1bnNpZ25lZE1zKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLmFkZFplcm8odC5zZWNvbmRzKTtcblxuICAgICAgICAgICAgaWYgKHQuZGF5cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduICsgdC5kYXlzICsgJzonICsgdGhpcy5hZGRaZXJvKHQuaG91cnMpICsgJzonICsgdGhpcy5hZGRaZXJvKHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0LmhvdXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyAobGVhZGluZyA/IHRoaXMuYWRkWmVybyh0LmhvdXJzKSA6IHQuaG91cnMpICsgJzonICsgdGhpcy5hZGRaZXJvKHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzaWduICsgKGxlYWRpbmcgPyB0aGlzLmFkZFplcm8odC5taW51dGVzKSA6IHQubWludXRlcykgKyAnOicgKyBzZWNvbmRzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbmNyZW1lbnROdW1iZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBudW1iZXJWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCAwKTtcbiAgICAgICAgcmV0dXJuICgrK251bWJlclZhbHVlKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGRlY3JlbWVudE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG51bWJlclZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICByZXR1cm4gKC0tbnVtYmVyVmFsdWUpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0RGVjaW1hbFNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBudW1iZXJXaXRoRGVjaW1hbFNlcGFyYXRvciA9IDEuMTtcblxuICAgICAgICByZXR1cm4gbnVtYmVyV2l0aERlY2ltYWxTZXBhcmF0b3JcbiAgICAgICAgICAgIC50b0xvY2FsZVN0cmluZyh0aGlzLmN1bHR1cmUpXG4gICAgICAgICAgICAuc3Vic3RyaW5nKDEsIDIpO1xuICAgIH1cblxuICAgIGNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEodmFsdWU6IHN0cmluZywgcmV2ZXJzZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzICcsJ1xuICAgICAgICBpZiAodGhpcy5nZXREZWNpbWFsU2VwYXJhdG9yKCkgPT09ICcsJykge1xuICAgICAgICAgICAgLy8gSW4gY2FzZSB0aGF0IHRoZSB2YWx1ZSBpc24ndCBzdHJpbmcuXG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlPy50b1N0cmluZygpIHx8ICcnO1xuXG4gICAgICAgICAgICAvLyBJZiByZXZlcnNlIGNoYW5nZSB0aGUgbnVtYmVyIGZyb20gJy4nIHRvICcsJyBlbHNlIGRvIHRoZSBvcHBvc2l0ZS5cbiAgICAgICAgICAgIHZhbHVlID0gcmV2ZXJzZSA/IHZhbHVlLnJlcGxhY2UoJy4nLCAnLCcpIDogdmFsdWUucmVwbGFjZSgnLCcsICcuJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaXNFcXVhbE51bWJlcihudW1iZXJBc1N0cmluZzogc3RyaW5nLCBudW1iZXJBc1N0cmluZzI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdChudW1iZXJBc1N0cmluZyk7XG4gICAgICAgIGNvbnN0IG51bWJlcjIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdChudW1iZXJBc1N0cmluZzIpO1xuXG4gICAgICAgIHJldHVybiBudW1iZXIgPT09IG51bWJlcjI7XG4gICAgfVxufVxuIl19
|
|
@@ -136,12 +136,12 @@ export class PepValidatorService {
|
|
|
136
136
|
value = value + 0;
|
|
137
137
|
// test number with regular expression, when
|
|
138
138
|
// number is invalid, replace it with a zero
|
|
139
|
+
// console.log(`regex is ${regex} and value is ${value}`);
|
|
139
140
|
const valid = new RegExp(regex).test(value);
|
|
140
141
|
return valid ? value : null;
|
|
141
142
|
}
|
|
142
143
|
validatePhone(value) {
|
|
143
|
-
// test phone with regular expression
|
|
144
|
-
// phone is invalid, replace it with the previousValue
|
|
144
|
+
// test phone with regular expression
|
|
145
145
|
const valid = new RegExp(this.phone).test(value);
|
|
146
146
|
return valid;
|
|
147
147
|
}
|
|
@@ -269,4 +269,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
269
269
|
}], ctorParameters: function () { return [{ type: i1.TranslateService, decorators: [{
|
|
270
270
|
type: Optional
|
|
271
271
|
}] }]; } });
|
|
272
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy92YWxpZGF0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBR0gsV0FBVyxFQUNYLFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDOzs7QUFLeEIsTUFBTSxPQUFPLG1CQUFtQjtJQVU1QixZQUFnQyxZQUE4QixJQUFJO1FBQWxDLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBVGxFLHVCQUF1QjtRQUNkLG9CQUFlLEdBQUcsVUFBVSxDQUFDO1FBQzdCLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ3RDLG9CQUFlLEdBQUcsb0JBQW9CLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxzQkFBc0IsQ0FBQztRQUM5QixVQUFLLEdBQUcsNENBQTRDLENBQUM7UUFFOUQscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBR25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFdEUsc0dBQXNHO1FBQ3RHLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDM0Msd0JBQXdCLEVBQUUsQ0FBQztTQUM5QixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFF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SSx5QkFBeUIsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFO1lBQ2pFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7UUFFRCxvQ0FBb0M7UUFDcEMsSUFDSSxJQUFJLENBQUMsaUNBQWlDLENBQ2xDLFdBQVcsRUFDWCxHQUFHLEVBQ0gsZ0JBQWdCLENBQ25CLEVBQ0g7WUFDRSxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs7Z0hBOVNRLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07MkZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBV2dCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBWYWxpZGF0b3JTZXJ2aWNlIHtcbiAgICAvLyAgUmVndWxhciBleHByZXNzaW9uc1xuICAgIHJlYWRvbmx5IGludGVnZXJVbnNpZ25lZCA9ICdeWzAtOV0qJCc7XG4gICAgcmVhZG9ubHkgaW50ZWdlclNpZ25lZCA9ICdeLT9bMC05XSskJztcbiAgICBkZWNpbWFsVW5zaWduZWQgPSAnXlswLTldKyguWzAtOV0rKT8kJztcbiAgICBkZWNpbWFsU2lnbmVkID0gJ14tP1swLTldKyguWzAtOV0rKT8kJztcbiAgICByZWFkb25seSBwaG9uZSA9ICdeWytdKlsoXXswLDF9WzAtOV17MSw0fVspXXswLDF9Wy1zLi8wLTldKiQnO1xuXG4gICAgZGVjaW1hbFNlcGFyYXRvciA9ICcuJztcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gbnVsbCkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMudHJhbnNsYXRlPy5jdXJyZW50TGFuZyB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWJlciB3aXRoIHRob3VzYW5kcyBzZXBhcmF0b3IgYW5kIGlmID09PSAnLCcgdGhlbiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJy4nIGVsc2UgJywnXG4gICAgICAgIGNvbnN0IHRtcCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChjdXJyZW50TGFuZywge1xuICAgICAgICAgICAgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzOiAyLFxuICAgICAgICB9KS5mb3JtYXQoMTAwMCk7XG4gICAgICAgIHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9IHRtcC5pbmRleE9mKCcsJykgPT09IDEgPyAnLicgOiAnLCc7XG5cbiAgICAgICAgdGhpcy5kZWNpbWFsVW5zaWduZWQgPSBgXlswLTldKygke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn1bMC05XSspPyRgO1xuICAgICAgICB0aGlzLmRlY2ltYWxTaWduZWQgPSBgXi0/WzAtOV0rKCR7dGhpcy5kZWNpbWFsU2VwYXJhdG9yfVswLTldKyk/JGA7XG4gICAgfVxuXG4gICAgLypcbiAgICAgICAgVmFsaWRhdG9yRm4gZnVuY3Rpb25zXG4gICAgKi9cbiAgICBpc0VxdWFsKHRhcmdldDogRm9ybUNvbnRyb2wgfCBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnZhbHVlICE9PSBjb250cm9sLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8geyBlcXVhbDogeyB2YWx1ZTogdHJ1ZSB9IH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpc0dyZWF0ZXJUaGFuKHRhcmdldDogRm9ybUNvbnRyb2wgfCBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgdHlwZW9mIHRhcmdldC52YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnZhbHVlID4gY29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA/IHsgZ3JlYXRlcjogeyB2YWx1ZTogdHJ1ZSB9IH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sLnZhbHVlICYmIHR5cGVvZiB0YXJnZXQudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbFZhbHVlTnVtZXIgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShjb250cm9sLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZU51bWVyID0gY29lcmNlTnVtYmVyUHJvcGVydHkodGFyZ2V0LnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZU51bWVyID4gY29udHJvbFZhbHVlTnVtZXJcbiAgICAgICAgICAgICAgICAgICAgPyB7IGdyZWF0ZXI6IHsgdmFsdWU6IHRydWUgfSB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaXNMZXNzVGhhbih0YXJnZXQ6IEZvcm1Db250cm9sIHwgQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIHR5cGVvZiB0YXJnZXQudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC52YWx1ZSA8IGNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyB7IGxlc3M6IHsgdmFsdWU6IHRydWUgfSB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiB0eXBlb2YgdGFyZ2V0LnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZU51bWVyID0gY29lcmNlTnVtYmVyUHJvcGVydHkoY29udHJvbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWVOdW1lciA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRhcmdldC52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0VmFsdWVOdW1lciA8IGNvbnRyb2xWYWx1ZU51bWVyXG4gICAgICAgICAgICAgICAgICAgID8geyBsZXNzOiB7IHZhbHVlOiB0cnVlIH0gfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNoZWNrRW1haWxzKHNlcGFyYXRvcj86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVtYWlscyA9IGNvbnRyb2wudmFsdWUuc3BsaXQoc2VwYXJhdG9yID8gc2VwYXJhdG9yIDogJywnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdHJsID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMuZW1haWwsXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZW1haWxzLmV2ZXJ5KCh2YWw6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjdHJsLnNldFZhbHVlKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHJsLnZhbGlkO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQgPyB7IGVtYWlsczogeyB2YWx1ZTogdHJ1ZSB9IH0gOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB6aXBDb2RlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybigvXihcXGR7NX0oLVxcZHs0fSk/fFtBLVpdXFxkW0EtWl0gKlxcZFtBLVpdXFxkKSQvKTtcbiAgICB9XG5cbiAgICBhbGxvd2FibGVDaGFyYWN0ZXJzVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybihcbiAgICAgICAgICAgIC9eW2EtekEtWjAtOWB+IUAjJCVeJiooKV8rfXt8XCI6Pz48LC4vOydcXFxcXFxdXFxbPVxcLSBdKyQvXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYWxsb3dhYmxlQ2hhcmFjdGVyc1dpdGhvdXROdW1iZXJWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5wYXR0ZXJuKFxuICAgICAgICAgICAgL15bYS16QS1aYH4hQCMkJV4mKigpXyt9e3xcIjo/PjwsLi87J1xcXFxcXF1cXFs9XFwtIF0rJC9cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhbGxvd2FibGVDaGFyYWN0ZXJzV2l0aG91dFNwZWNpYWxWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5wYXR0ZXJuKC9eW2EtekEtWjAtOSBdKyQvKTtcbiAgICB9XG5cbiAgICBkYXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybihcbiAgICAgICAgICAgIC9eKD86KDBbMS05XXwxWzAxMl0pW1xcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pW1xcLy5dKDE5fDIwKVswLTldezJ9KSQvXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbnVtYmVyVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybigvXlswLTldKiQvKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAgICBSZWdFeHAgZnVuY3Rpb25zXG4gICAgKi9cbiAgICB2YWxpZGF0ZU51bWJlcih2YWx1ZTogc3RyaW5nLCBhbGxvd0RlY2ltYWw6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgICAgICAvLyBjaG9vc2UgdGhlIGFwcHJvcGlhdGUgcmVndWxhciBleHByZXNzaW9uXG4gICAgICAgIGxldCByZWdleDogc3RyaW5nO1xuXG4gICAgICAgIGlmIChhbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gdGhpcy5kZWNpbWFsU2lnbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVnZXggPSB0aGlzLmludGVnZXJTaWduZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIGEgbnVtYmVycyBiZWdpbnMgd2l0aCBhIGRlY2ltYWwgc2VwYXJhdG9yLFxuICAgICAgICAvLyBmaXggaXQgYWRkaW5nIGEgemVybyBpbiB0aGUgYmVnaW5uaW5nXG4gICAgICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KDApO1xuICAgICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yKSB2YWx1ZSA9IDAgKyB2YWx1ZTtcblxuICAgICAgICAvLyB3aGVuIGEgbnVtYmVycyBlbmRzIHdpdGggYSBkZWNpbWFsIHNlcGFyYXRvcixcbiAgICAgICAgLy8gZml4IGl0IGFkZGluZyBhIHplcm8gaW4gdGhlIGVuZFxuICAgICAgICBjb25zdCBsYXN0Q2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGFzdENoYXJhY3RlciA9PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpIHZhbHVlID0gdmFsdWUgKyAwO1xuXG4gICAgICAgIC8vIHRlc3QgbnVtYmVyIHdpdGggcmVndWxhciBleHByZXNzaW9uLCB3aGVuXG4gICAgICAgIC8vIG51bWJlciBpcyBpbnZhbGlkLCByZXBsYWNlIGl0IHdpdGggYSB6ZXJvXG4gICAgICAgIGNvbnN0IHZhbGlkOiBib29sZWFuID0gbmV3IFJlZ0V4cChyZWdleCkudGVzdCh2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkID8gdmFsdWUgOiBudWxsO1xuICAgIH1cblxuICAgIHZhbGlkYXRlUGhvbmUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICAvLyB0ZXN0IHBob25lIHdpdGggcmVndWxhciBleHByZXNzaW9uLCB3aGVuXG4gICAgICAgIC8vIHBob25lIGlzIGludmFsaWQsIHJlcGxhY2UgaXQgd2l0aCB0aGUgcHJldmlvdXNWYWx1ZVxuICAgICAgICBjb25zdCB2YWxpZDogYm9vbGVhbiA9IG5ldyBSZWdFeHAodGhpcy5waG9uZSkudGVzdCh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5hbWUoZSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChlLmtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGUua2V5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZm9yIG9sZCBicm93c2Vyc1xuICAgICAgICAgICAgaWYgKGUua2V5Q29kZSAmJiBTdHJpbmcuZnJvbUNoYXJDb2RlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdCYWNrc3BhY2UnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1RhYic7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0VzY2FwZSc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0Fycm93TGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0Fycm93UmlnaHQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE4ODpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnLCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTkwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcuJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy0nOyAvLyBtaW51cyBpbiBudW1icGFkXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTczOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJzsgLy8gbWludXMgaW4gYWxwaGFiZXQga2V5Ym9hcmQgaW4gZmlyZWZveFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE4OTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnLSc7IC8vIG1pbnVzIGluIGFscGhhYmV0IGtleWJvYXJkIGluIGNocm9tZVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFsbG93S2V5Ym9hcmROb25OdW1lcmljQ2hhcmFjdGVycyhcbiAgICAgICAgYWxsb3dlZEtleXM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICBjb250cm9sT3JDb21tYW5kOiBib29sZWFuXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRBbGxvd2VkS2V5cyA9IFtcbiAgICAgICAgICAgICdCYWNrc3BhY2UnLFxuICAgICAgICAgICAgJ0Fycm93TGVmdCcsXG4gICAgICAgICAgICAnQXJyb3dSaWdodCcsXG4gICAgICAgICAgICAnRXNjYXBlJyxcbiAgICAgICAgICAgICdUYWInLFxuICAgICAgICAgICAgJ0hvbWUnLFxuICAgICAgICAgICAgJ0VuZCcsXG4gICAgICAgICAgICAnRGVsZXRlJyxcbiAgICAgICAgXTtcblxuICAgICAgICAvLyBhbGxvdyBzb21lIG5vbi1udW1lcmljIGNoYXJhY3RlcnNcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGVmYXVsdEFsbG93ZWRLZXlzLmluZGV4T2Yoa2V5KSAhPSAtMSB8fFxuICAgICAgICAgICAgYWxsb3dlZEtleXMuaW5kZXhPZihrZXkpICE9IC0xIHx8XG4gICAgICAgICAgICAvLyBBbGxvdzogQ3RybCtBIGFuZCBDb21tYW5kK0FcbiAgICAgICAgICAgIChrZXkgPT0gJ2EnICYmIGNvbnRyb2xPckNvbW1hbmQpIHx8XG4gICAgICAgICAgICAvLyBBbGxvdzogQ3RybCtDIGFuZCBDb21tYW5kK0NcbiAgICAgICAgICAgIChrZXkgPT0gJ2MnICYmIGNvbnRyb2xPckNvbW1hbmQpIHx8XG4gICAgICAgICAgICAvLyBBbGxvdzogQ3RybCtWIGFuZCBDb21tYW5kK1ZcbiAgICAgICAgICAgIChrZXkgPT0gJ3YnICYmIGNvbnRyb2xPckNvbW1hbmQpIHx8XG4gICAgICAgICAgICAvLyBBbGxvdzogQ3RybCtYIGFuZCBDb21tYW5kK1hcbiAgICAgICAgICAgIChrZXkgPT0gJ3gnICYmIGNvbnRyb2xPckNvbW1hbmQpIHx8XG4gICAgICAgICAgICBrZXkuc3RhcnRzV2l0aCgnRicpXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gbGV0IGl0IGhhcHBlbiwgZG9uJ3QgZG8gYW55dGhpbmdcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNQaG9uZShlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGtleTogc3RyaW5nID0gdGhpcy5nZXROYW1lKGUpO1xuICAgICAgICBjb25zdCBjb250cm9sT3JDb21tYW5kID0gZS5jdHJsS2V5ID09PSB0cnVlIHx8IGUubWV0YUtleSA9PT0gdHJ1ZTtcblxuICAgICAgICAvLyBhbGxvd2VkIGtleXMgYXBhcnQgZnJvbSBudW1lcmljIGNoYXJhY3RlcnNcbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSBbJy4nLCAnLScsICcrJywgJygnLCAnKScsICcqJywgJyMnXTtcblxuICAgICAgICAvLyBhbGxvdyBzb21lIG5vbi1udW1lcmljIGNoYXJhY3RlcnNcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5hbGxvd0tleWJvYXJkTm9uTnVtZXJpY0NoYXJhY3RlcnMoXG4gICAgICAgICAgICAgICAgYWxsb3dlZEtleXMsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIGNvbnRyb2xPckNvbW1hbmRcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsbG93IHBob25lIGNoYXJhY3RlcnMgb25seVxuICAgICAgICBjb25zdCBpc1Bob25lID0gbmV3IFJlZ0V4cCh0aGlzLnBob25lKS50ZXN0KGtleSk7XG4gICAgICAgIHJldHVybiBpc1Bob25lO1xuICAgIH1cblxuICAgIGlzTnVtYmVyKGU6IEtleWJvYXJkRXZlbnQsIGFsbG93RGVjaW1hbDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbjogbnVtYmVyID0gZS50YXJnZXRbJ3NlbGVjdGlvblN0YXJ0J107XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWU6IHN0cmluZyA9IGUudGFyZ2V0Wyd2YWx1ZSddO1xuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMuZ2V0TmFtZShlKTtcbiAgICAgICAgY29uc3QgY29udHJvbE9yQ29tbWFuZCA9IGUuY3RybEtleSA9PT0gdHJ1ZSB8fCBlLm1ldGFLZXkgPT09IHRydWU7XG4gICAgICAgIGNvbnN0IHNpZ25FeGlzdHMgPSBvcmlnaW5hbFZhbHVlLmluY2x1ZGVzKCctJyk7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvckV4aXN0cyA9IG9yaWdpbmFsVmFsdWUuaW5jbHVkZXModGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgICAgICAvLyBhbGxvd2VkIGtleXMgYXBhcnQgZnJvbSBudW1lcmljIGNoYXJhY3RlcnNcbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSBbXTtcblxuICAgICAgICAvLyB3aGVuIGRlY2ltYWxzIGFyZSBhbGxvd2VkLCBhZGRcbiAgICAgICAgLy8gZGVjaW1hbCBzZXBhcmF0b3IgdG8gYWxsb3dlZCBjb2RlcyB3aGVuXG4gICAgICAgIC8vIGl0cyBwb3NpdGlvbiBpcyBub3QgY2xvc2UgdG8gdGhlIHRoZSBzaWduICgtLiBhbmQgLi0pXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvcklzQ2xvc2VUb1NpZ24gPSBzaWduRXhpc3RzICYmIGN1cnNvclBvc2l0aW9uIDw9IDE7XG4gICAgICAgIGlmIChhbGxvd0RlY2ltYWwgJiYgIXNlcGFyYXRvcklzQ2xvc2VUb1NpZ24gJiYgIXNlcGFyYXRvckV4aXN0cykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9PSAnLicpIGFsbG93ZWRLZXlzLnB1c2goJy4nKTtcbiAgICAgICAgICAgIGVsc2UgYWxsb3dlZEtleXMucHVzaCgnLCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBtaW51cyBzaWduIGlzIGFsbG93ZWQsIGFkZCBpdHNcbiAgICAgICAgLy8ga2V5IHRvIGFsbG93ZWQga2V5IG9ubHkgd2hlbiB0aGVcbiAgICAgICAgLy8gY3Vyc29yIGlzIGluIHRoZSBmaXJzdCBwb3NpdGlvbiwgYW5kXG4gICAgICAgIC8vIGZpcnN0IGNoYXJhY3RlciBpcyBkaWZmZXJlbnQgZnJvbVxuICAgICAgICAvLyBkZWNpbWFsIHNlcGFyYXRvclxuICAgICAgICBjb25zdCBmaXJzdENoYXJhY3RlcklzU2VwYXJhdG9yID1cbiAgICAgICAgICAgIG9yaWdpbmFsVmFsdWUuY2hhckF0KDApICE9IHRoaXMuZGVjaW1hbFNlcGFyYXRvcjtcbiAgICAgICAgaWYgKCFzaWduRXhpc3RzICYmIGZpcnN0Q2hhcmFjdGVySXNTZXBhcmF0b3IgJiYgY3Vyc29yUG9zaXRpb24gPT0gMCkge1xuICAgICAgICAgICAgYWxsb3dlZEtleXMucHVzaCgnLScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWxsb3cgc29tZSBub24tbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWxsb3dLZXlib2FyZE5vbk51bWVyaWNDaGFyYWN0ZXJzKFxuICAgICAgICAgICAgICAgIGFsbG93ZWRLZXlzLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBjb250cm9sT3JDb21tYW5kXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbGxvdyBudW1iZXIgY2hhcmFjdGVycyBvbmx5XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gbmV3IFJlZ0V4cCh0aGlzLmludGVnZXJVbnNpZ25lZCkudGVzdChrZXkpO1xuICAgICAgICByZXR1cm4gaXNOdW1iZXI7XG4gICAgfVxufVxuIl19
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy92YWxpZGF0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBR0gsV0FBVyxFQUNYLFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDOzs7QUFLeEIsTUFBTSxPQUFPLG1CQUFtQjtJQVU1QixZQUFnQyxZQUE4QixJQUFJO1FBQWxDLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBVGxFLHVCQUF1QjtRQUNkLG9CQUFlLEdBQUcsVUFBVSxDQUFDO1FBQzdCLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ3RDLG9CQUFlLEdBQUcsb0JBQW9CLENBQUM7UUFDdkMsa0JBQWEsR0FBRyxzQkFBc0IsQ0FBQztRQUM5QixVQUFLLEdBQUcsNENBQTRDLENBQUM7UUFFOUQscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBR25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFFdEUsc0dBQXNHO1FBQ3RHLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUU7WUFDM0Msd0JBQXdCLEVBQUUsQ0FBQztTQUM5QixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFF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SSx5QkFBeUIsSUFBSSxjQUFjLElBQUksQ0FBQyxFQUFFO1lBQ2pFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekI7UUFFRCxvQ0FBb0M7UUFDcEMsSUFDSSxJQUFJLENBQUMsaUNBQWlDLENBQ2xDLFdBQVcsRUFDWCxHQUFHLEVBQ0gsZ0JBQWdCLENBQ25CLEVBQ0g7WUFDRSxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs7Z0hBOVNRLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07MkZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBV2dCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBWYWxpZGF0b3JTZXJ2aWNlIHtcbiAgICAvLyAgUmVndWxhciBleHByZXNzaW9uc1xuICAgIHJlYWRvbmx5IGludGVnZXJVbnNpZ25lZCA9ICdeWzAtOV0qJCc7XG4gICAgcmVhZG9ubHkgaW50ZWdlclNpZ25lZCA9ICdeLT9bMC05XSskJztcbiAgICBkZWNpbWFsVW5zaWduZWQgPSAnXlswLTldKyguWzAtOV0rKT8kJztcbiAgICBkZWNpbWFsU2lnbmVkID0gJ14tP1swLTldKyguWzAtOV0rKT8kJztcbiAgICByZWFkb25seSBwaG9uZSA9ICdeWytdKlsoXXswLDF9WzAtOV17MSw0fVspXXswLDF9Wy1zLi8wLTldKiQnO1xuXG4gICAgZGVjaW1hbFNlcGFyYXRvciA9ICcuJztcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gbnVsbCkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMudHJhbnNsYXRlPy5jdXJyZW50TGFuZyB8fCBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIG51bWJlciB3aXRoIHRob3VzYW5kcyBzZXBhcmF0b3IgYW5kIGlmID09PSAnLCcgdGhlbiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJy4nIGVsc2UgJywnXG4gICAgICAgIGNvbnN0IHRtcCA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChjdXJyZW50TGFuZywge1xuICAgICAgICAgICAgbWF4aW11bVNpZ25pZmljYW50RGlnaXRzOiAyLFxuICAgICAgICB9KS5mb3JtYXQoMTAwMCk7XG4gICAgICAgIHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9IHRtcC5pbmRleE9mKCcsJykgPT09IDEgPyAnLicgOiAnLCc7XG5cbiAgICAgICAgdGhpcy5kZWNpbWFsVW5zaWduZWQgPSBgXlswLTldKygke3RoaXMuZGVjaW1hbFNlcGFyYXRvcn1bMC05XSspPyRgO1xuICAgICAgICB0aGlzLmRlY2ltYWxTaWduZWQgPSBgXi0/WzAtOV0rKCR7dGhpcy5kZWNpbWFsU2VwYXJhdG9yfVswLTldKyk/JGA7XG4gICAgfVxuXG4gICAgLypcbiAgICAgICAgVmFsaWRhdG9yRm4gZnVuY3Rpb25zXG4gICAgKi9cbiAgICBpc0VxdWFsKHRhcmdldDogRm9ybUNvbnRyb2wgfCBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnZhbHVlICE9PSBjb250cm9sLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8geyBlcXVhbDogeyB2YWx1ZTogdHJ1ZSB9IH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpc0dyZWF0ZXJUaGFuKHRhcmdldDogRm9ybUNvbnRyb2wgfCBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgdHlwZW9mIHRhcmdldC52YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LnZhbHVlID4gY29udHJvbC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA/IHsgZ3JlYXRlcjogeyB2YWx1ZTogdHJ1ZSB9IH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sLnZhbHVlICYmIHR5cGVvZiB0YXJnZXQudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbFZhbHVlTnVtZXIgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShjb250cm9sLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZU51bWVyID0gY29lcmNlTnVtYmVyUHJvcGVydHkodGFyZ2V0LnZhbHVlKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZU51bWVyID4gY29udHJvbFZhbHVlTnVtZXJcbiAgICAgICAgICAgICAgICAgICAgPyB7IGdyZWF0ZXI6IHsgdmFsdWU6IHRydWUgfSB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaXNMZXNzVGhhbih0YXJnZXQ6IEZvcm1Db250cm9sIHwgQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIHR5cGVvZiB0YXJnZXQudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC52YWx1ZSA8IGNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyB7IGxlc3M6IHsgdmFsdWU6IHRydWUgfSB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbC52YWx1ZSAmJiB0eXBlb2YgdGFyZ2V0LnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZU51bWVyID0gY29lcmNlTnVtYmVyUHJvcGVydHkoY29udHJvbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0VmFsdWVOdW1lciA9IGNvZXJjZU51bWJlclByb3BlcnR5KHRhcmdldC52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0VmFsdWVOdW1lciA8IGNvbnRyb2xWYWx1ZU51bWVyXG4gICAgICAgICAgICAgICAgICAgID8geyBsZXNzOiB7IHZhbHVlOiB0cnVlIH0gfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNoZWNrRW1haWxzKHNlcGFyYXRvcj86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVtYWlscyA9IGNvbnRyb2wudmFsdWUuc3BsaXQoc2VwYXJhdG9yID8gc2VwYXJhdG9yIDogJywnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjdHJsID0gbmV3IEZvcm1Db250cm9sKCcnLCBbXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMuZW1haWwsXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZW1haWxzLmV2ZXJ5KCh2YWw6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjdHJsLnNldFZhbHVlKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHJsLnZhbGlkO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHQgPyB7IGVtYWlsczogeyB2YWx1ZTogdHJ1ZSB9IH0gOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB6aXBDb2RlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybigvXihcXGR7NX0oLVxcZHs0fSk/fFtBLVpdXFxkW0EtWl0gKlxcZFtBLVpdXFxkKSQvKTtcbiAgICB9XG5cbiAgICBhbGxvd2FibGVDaGFyYWN0ZXJzVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybihcbiAgICAgICAgICAgIC9eW2EtekEtWjAtOWB+IUAjJCVeJiooKV8rfXt8XCI6Pz48LC4vOydcXFxcXFxdXFxbPVxcLSBdKyQvXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYWxsb3dhYmxlQ2hhcmFjdGVyc1dpdGhvdXROdW1iZXJWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5wYXR0ZXJuKFxuICAgICAgICAgICAgL15bYS16QS1aYH4hQCMkJV4mKigpXyt9e3xcIjo/PjwsLi87J1xcXFxcXF1cXFs9XFwtIF0rJC9cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhbGxvd2FibGVDaGFyYWN0ZXJzV2l0aG91dFNwZWNpYWxWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9ycy5wYXR0ZXJuKC9eW2EtekEtWjAtOSBdKyQvKTtcbiAgICB9XG5cbiAgICBkYXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybihcbiAgICAgICAgICAgIC9eKD86KDBbMS05XXwxWzAxMl0pW1xcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pW1xcLy5dKDE5fDIwKVswLTldezJ9KSQvXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbnVtYmVyVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvcnMucGF0dGVybigvXlswLTldKiQvKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAgICBSZWdFeHAgZnVuY3Rpb25zXG4gICAgKi9cbiAgICB2YWxpZGF0ZU51bWJlcih2YWx1ZTogc3RyaW5nLCBhbGxvd0RlY2ltYWw6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgICAgICAvLyBjaG9vc2UgdGhlIGFwcHJvcGlhdGUgcmVndWxhciBleHByZXNzaW9uXG4gICAgICAgIGxldCByZWdleDogc3RyaW5nO1xuXG4gICAgICAgIGlmIChhbGxvd0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHJlZ2V4ID0gdGhpcy5kZWNpbWFsU2lnbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVnZXggPSB0aGlzLmludGVnZXJTaWduZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIGEgbnVtYmVycyBiZWdpbnMgd2l0aCBhIGRlY2ltYWwgc2VwYXJhdG9yLFxuICAgICAgICAvLyBmaXggaXQgYWRkaW5nIGEgemVybyBpbiB0aGUgYmVnaW5uaW5nXG4gICAgICAgIGNvbnN0IGZpcnN0Q2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KDApO1xuICAgICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yKSB2YWx1ZSA9IDAgKyB2YWx1ZTtcblxuICAgICAgICAvLyB3aGVuIGEgbnVtYmVycyBlbmRzIHdpdGggYSBkZWNpbWFsIHNlcGFyYXRvcixcbiAgICAgICAgLy8gZml4IGl0IGFkZGluZyBhIHplcm8gaW4gdGhlIGVuZFxuICAgICAgICBjb25zdCBsYXN0Q2hhcmFjdGVyID0gdmFsdWUuY2hhckF0KHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAobGFzdENoYXJhY3RlciA9PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpIHZhbHVlID0gdmFsdWUgKyAwO1xuXG4gICAgICAgIC8vIHRlc3QgbnVtYmVyIHdpdGggcmVndWxhciBleHByZXNzaW9uLCB3aGVuXG4gICAgICAgIC8vIG51bWJlciBpcyBpbnZhbGlkLCByZXBsYWNlIGl0IHdpdGggYSB6ZXJvXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGByZWdleCBpcyAke3JlZ2V4fSBhbmQgdmFsdWUgaXMgJHt2YWx1ZX1gKTtcbiAgICAgICAgY29uc3QgdmFsaWQ6IGJvb2xlYW4gPSBuZXcgUmVnRXhwKHJlZ2V4KS50ZXN0KHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gdmFsaWQgPyB2YWx1ZSA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVQaG9uZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIHRlc3QgcGhvbmUgd2l0aCByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgICAgY29uc3QgdmFsaWQ6IGJvb2xlYW4gPSBuZXcgUmVnRXhwKHRoaXMucGhvbmUpLnRlc3QodmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROYW1lKGUpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZS5rZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBlLmtleTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZvciBvbGQgYnJvd3NlcnNcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgJiYgU3RyaW5nLmZyb21DaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnQmFja3NwYWNlJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdUYWInO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFc2NhcGUnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdBcnJvd0xlZnQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdBcnJvd1JpZ2h0JztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxODg6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJywnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE5MDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnLic7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJzsgLy8gbWludXMgaW4gbnVtYnBhZFxuICAgICAgICAgICAgICAgICAgICBjYXNlIDE3MzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnLSc7IC8vIG1pbnVzIGluIGFscGhhYmV0IGtleWJvYXJkIGluIGZpcmVmb3hcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxODk6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy0nOyAvLyBtaW51cyBpbiBhbHBoYWJldCBrZXlib2FyZCBpbiBjaHJvbWVcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbGxvd0tleWJvYXJkTm9uTnVtZXJpY0NoYXJhY3RlcnMoXG4gICAgICAgIGFsbG93ZWRLZXlzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICBrZXk6IHN0cmluZyxcbiAgICAgICAgY29udHJvbE9yQ29tbWFuZDogYm9vbGVhblxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0QWxsb3dlZEtleXMgPSBbXG4gICAgICAgICAgICAnQmFja3NwYWNlJyxcbiAgICAgICAgICAgICdBcnJvd0xlZnQnLFxuICAgICAgICAgICAgJ0Fycm93UmlnaHQnLFxuICAgICAgICAgICAgJ0VzY2FwZScsXG4gICAgICAgICAgICAnVGFiJyxcbiAgICAgICAgICAgICdIb21lJyxcbiAgICAgICAgICAgICdFbmQnLFxuICAgICAgICAgICAgJ0RlbGV0ZScsXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gYWxsb3cgc29tZSBub24tbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGRlZmF1bHRBbGxvd2VkS2V5cy5pbmRleE9mKGtleSkgIT0gLTEgfHxcbiAgICAgICAgICAgIGFsbG93ZWRLZXlzLmluZGV4T2Yoa2V5KSAhPSAtMSB8fFxuICAgICAgICAgICAgLy8gQWxsb3c6IEN0cmwrQSBhbmQgQ29tbWFuZCtBXG4gICAgICAgICAgICAoa2V5ID09ICdhJyAmJiBjb250cm9sT3JDb21tYW5kKSB8fFxuICAgICAgICAgICAgLy8gQWxsb3c6IEN0cmwrQyBhbmQgQ29tbWFuZCtDXG4gICAgICAgICAgICAoa2V5ID09ICdjJyAmJiBjb250cm9sT3JDb21tYW5kKSB8fFxuICAgICAgICAgICAgLy8gQWxsb3c6IEN0cmwrViBhbmQgQ29tbWFuZCtWXG4gICAgICAgICAgICAoa2V5ID09ICd2JyAmJiBjb250cm9sT3JDb21tYW5kKSB8fFxuICAgICAgICAgICAgLy8gQWxsb3c6IEN0cmwrWCBhbmQgQ29tbWFuZCtYXG4gICAgICAgICAgICAoa2V5ID09ICd4JyAmJiBjb250cm9sT3JDb21tYW5kKSB8fFxuICAgICAgICAgICAga2V5LnN0YXJ0c1dpdGgoJ0YnKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGxldCBpdCBoYXBwZW4sIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUGhvbmUoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IHRoaXMuZ2V0TmFtZShlKTtcbiAgICAgICAgY29uc3QgY29udHJvbE9yQ29tbWFuZCA9IGUuY3RybEtleSA9PT0gdHJ1ZSB8fCBlLm1ldGFLZXkgPT09IHRydWU7XG5cbiAgICAgICAgLy8gYWxsb3dlZCBrZXlzIGFwYXJ0IGZyb20gbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gWycuJywgJy0nLCAnKycsICcoJywgJyknLCAnKicsICcjJ107XG5cbiAgICAgICAgLy8gYWxsb3cgc29tZSBub24tbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuYWxsb3dLZXlib2FyZE5vbk51bWVyaWNDaGFyYWN0ZXJzKFxuICAgICAgICAgICAgICAgIGFsbG93ZWRLZXlzLFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBjb250cm9sT3JDb21tYW5kXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhbGxvdyBwaG9uZSBjaGFyYWN0ZXJzIG9ubHlcbiAgICAgICAgY29uc3QgaXNQaG9uZSA9IG5ldyBSZWdFeHAodGhpcy5waG9uZSkudGVzdChrZXkpO1xuICAgICAgICByZXR1cm4gaXNQaG9uZTtcbiAgICB9XG5cbiAgICBpc051bWJlcihlOiBLZXlib2FyZEV2ZW50LCBhbGxvd0RlY2ltYWw6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3Vyc29yUG9zaXRpb246IG51bWJlciA9IGUudGFyZ2V0WydzZWxlY3Rpb25TdGFydCddO1xuICAgICAgICBjb25zdCBvcmlnaW5hbFZhbHVlOiBzdHJpbmcgPSBlLnRhcmdldFsndmFsdWUnXTtcbiAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSB0aGlzLmdldE5hbWUoZSk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xPckNvbW1hbmQgPSBlLmN0cmxLZXkgPT09IHRydWUgfHwgZS5tZXRhS2V5ID09PSB0cnVlO1xuICAgICAgICBjb25zdCBzaWduRXhpc3RzID0gb3JpZ2luYWxWYWx1ZS5pbmNsdWRlcygnLScpO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3JFeGlzdHMgPSBvcmlnaW5hbFZhbHVlLmluY2x1ZGVzKHRoaXMuZGVjaW1hbFNlcGFyYXRvcik7XG5cbiAgICAgICAgLy8gYWxsb3dlZCBrZXlzIGFwYXJ0IGZyb20gbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gW107XG5cbiAgICAgICAgLy8gd2hlbiBkZWNpbWFscyBhcmUgYWxsb3dlZCwgYWRkXG4gICAgICAgIC8vIGRlY2ltYWwgc2VwYXJhdG9yIHRvIGFsbG93ZWQgY29kZXMgd2hlblxuICAgICAgICAvLyBpdHMgcG9zaXRpb24gaXMgbm90IGNsb3NlIHRvIHRoZSB0aGUgc2lnbiAoLS4gYW5kIC4tKVxuICAgICAgICBjb25zdCBzZXBhcmF0b3JJc0Nsb3NlVG9TaWduID0gc2lnbkV4aXN0cyAmJiBjdXJzb3JQb3NpdGlvbiA8PSAxO1xuICAgICAgICBpZiAoYWxsb3dEZWNpbWFsICYmICFzZXBhcmF0b3JJc0Nsb3NlVG9TaWduICYmICFzZXBhcmF0b3JFeGlzdHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPT0gJy4nKSBhbGxvd2VkS2V5cy5wdXNoKCcuJyk7XG4gICAgICAgICAgICBlbHNlIGFsbG93ZWRLZXlzLnB1c2goJywnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoZW4gbWludXMgc2lnbiBpcyBhbGxvd2VkLCBhZGQgaXRzXG4gICAgICAgIC8vIGtleSB0byBhbGxvd2VkIGtleSBvbmx5IHdoZW4gdGhlXG4gICAgICAgIC8vIGN1cnNvciBpcyBpbiB0aGUgZmlyc3QgcG9zaXRpb24sIGFuZFxuICAgICAgICAvLyBmaXJzdCBjaGFyYWN0ZXIgaXMgZGlmZmVyZW50IGZyb21cbiAgICAgICAgLy8gZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgICAgY29uc3QgZmlyc3RDaGFyYWN0ZXJJc1NlcGFyYXRvciA9XG4gICAgICAgICAgICBvcmlnaW5hbFZhbHVlLmNoYXJBdCgwKSAhPSB0aGlzLmRlY2ltYWxTZXBhcmF0b3I7XG4gICAgICAgIGlmICghc2lnbkV4aXN0cyAmJiBmaXJzdENoYXJhY3RlcklzU2VwYXJhdG9yICYmIGN1cnNvclBvc2l0aW9uID09IDApIHtcbiAgICAgICAgICAgIGFsbG93ZWRLZXlzLnB1c2goJy0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsbG93IHNvbWUgbm9uLW51bWVyaWMgY2hhcmFjdGVyc1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmFsbG93S2V5Ym9hcmROb25OdW1lcmljQ2hhcmFjdGVycyhcbiAgICAgICAgICAgICAgICBhbGxvd2VkS2V5cyxcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgY29udHJvbE9yQ29tbWFuZFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWxsb3cgbnVtYmVyIGNoYXJhY3RlcnMgb25seVxuICAgICAgICBjb25zdCBpc051bWJlciA9IG5ldyBSZWdFeHAodGhpcy5pbnRlZ2VyVW5zaWduZWQpLnRlc3Qoa2V5KTtcbiAgICAgICAgcmV0dXJuIGlzTnVtYmVyO1xuICAgIH1cbn1cbiJdfQ==
|