@sumaris-net/ngx-components 2.2.0 → 2.2.1-rc10
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/doc/changelog.md +5 -0
- package/esm2020/src/app/core/form/entity/entity-editor-modal.class.mjs +4 -6
- package/esm2020/src/app/core/form/form.class.mjs +3 -3
- package/esm2020/src/app/core/form/form.utils.mjs +52 -28
- package/esm2020/src/app/core/services/base-entity-service.class.mjs +21 -12
- package/esm2020/src/app/core/table/table.class.mjs +2 -2
- package/esm2020/src/app/shared/forms.mjs +33 -22
- package/esm2020/src/app/shared/image/gallery/image-gallery.component.mjs +6 -4
- package/esm2020/src/app/shared/image/gallery/testing/gallery.testing.mjs +1 -1
- package/esm2020/src/app/shared/material/autocomplete/material.autocomplete.mjs +7 -8
- package/esm2020/src/app/shared/material/chips/material.chips.mjs +31 -24
- package/esm2020/src/app/shared/material/chips/testing/chips.test.mjs +10 -3
- package/esm2020/src/app/shared/services/entity-service.class.mjs +1 -1
- package/esm2020/src/app/shared/shared.module.mjs +2 -2
- package/esm2020/src/app/social/user-event/user-event.service.mjs +1 -1
- package/fesm2015/sumaris-net.ngx-components.mjs +161 -118
- package/fesm2015/sumaris-net.ngx-components.mjs.map +1 -1
- package/fesm2020/sumaris-net.ngx-components.mjs +161 -104
- package/fesm2020/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/form/entity/entity-editor-modal.class.d.ts +0 -2
- package/src/app/core/form/form.utils.d.ts +2 -2
- package/src/app/core/services/base-entity-service.class.d.ts +7 -21
- package/src/app/shared/forms.d.ts +2 -2
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +3 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
- package/src/app/shared/material/chips/material.chips.d.ts +1 -1
- package/src/app/shared/material/chips/testing/chips.test.d.ts +1 -1
- package/src/app/shared/services/entity-service.class.d.ts +20 -10
- package/src/app/social/user-event/user-event.service.d.ts +1 -1
- package/src/theme/_ngx-components.scss +1 -1
|
@@ -3,7 +3,7 @@ import { SharedFormArrayValidators } from '../../shared/validator/validators';
|
|
|
3
3
|
import { round, toBoolean } from '../../shared/functions';
|
|
4
4
|
import { filterNumberInput, selectInputContent } from '../../shared/inputs';
|
|
5
5
|
import { waitFor } from '../../shared/observables';
|
|
6
|
-
import { clearValueInArray, copyEntity2Form, disableControls, getControlFromPath, getFormErrors, getFormValueFromEntity, logFormErrors, markAllAsTouched, markAsUntouched,
|
|
6
|
+
import { addValueInArray, clearValueInArray, copyEntity2Form, disableControls, getControlFromPath, getFormErrors, getFormValueFromEntity, logFormErrors, markAllAsTouched, markAsUntouched, removeValueInArray, resizeArray, updateValueAndValidity, waitIdle, waitWhilePending } from '../../shared/forms';
|
|
7
7
|
/**
|
|
8
8
|
* A form that do nothing
|
|
9
9
|
*/
|
|
@@ -139,9 +139,14 @@ export class FormArrayHelper {
|
|
|
139
139
|
this.setAllowEmptyArray(toBoolean(options?.allowEmptyArray, false));
|
|
140
140
|
}
|
|
141
141
|
static getOrCreateArray(formBuilder, form, arrayName) {
|
|
142
|
+
const disabled = form.disabled;
|
|
142
143
|
let arrayControl = form.get(arrayName);
|
|
143
144
|
if (!arrayControl) {
|
|
144
145
|
arrayControl = formBuilder.array([]);
|
|
146
|
+
// Apply parent disabled state, before to push it into the array
|
|
147
|
+
// This is need to avoid parent form to be enabled, after calling resizeArray()
|
|
148
|
+
if (disabled && arrayControl.enabled)
|
|
149
|
+
arrayControl.disable({ emitEvent: false });
|
|
145
150
|
form.addControl(arrayName, arrayControl);
|
|
146
151
|
}
|
|
147
152
|
return arrayControl;
|
|
@@ -261,17 +266,43 @@ export class AppFormArray extends UntypedFormArray {
|
|
|
261
266
|
* @param options
|
|
262
267
|
*/
|
|
263
268
|
setValue(values, options) {
|
|
264
|
-
if (this.options?.
|
|
265
|
-
|
|
269
|
+
if (this.options?.allowReuseItem === false) {
|
|
270
|
+
const disabled = this.disabled;
|
|
271
|
+
// Clean all
|
|
272
|
+
this.resize(0, { emitEvent: options?.emitEvent });
|
|
273
|
+
// Recreate each control, with a default value
|
|
274
|
+
(values || []).forEach(value => {
|
|
275
|
+
const control = this.createControl(value);
|
|
276
|
+
// Apply parent disabled state, before to push it into the array
|
|
277
|
+
// This is need to avoid parent form to be enabled, after calling AppFormArray.patchValue() (e.g. in table's row validator)
|
|
278
|
+
if (disabled && control.enabled)
|
|
279
|
+
control.disable({ emitEvent: false });
|
|
280
|
+
else if (!disabled && control.disabled)
|
|
281
|
+
control.enable({ emitEvent: false });
|
|
282
|
+
this.push(control, options);
|
|
283
|
+
});
|
|
266
284
|
}
|
|
267
285
|
else {
|
|
268
|
-
this.resize(values?.length || 0);
|
|
286
|
+
this.resize(values?.length || 0, { emitEvent: false });
|
|
269
287
|
super.setValue(values, options);
|
|
270
288
|
}
|
|
271
289
|
}
|
|
272
290
|
patchValue(values, options) {
|
|
273
|
-
if (this.options?.
|
|
274
|
-
|
|
291
|
+
if (this.options?.allowReuseItem === false) {
|
|
292
|
+
const disabled = this.disabled;
|
|
293
|
+
// Clean all
|
|
294
|
+
this.resize(0, { emitEvent: options?.emitEvent });
|
|
295
|
+
// Recreate each control, with a default value
|
|
296
|
+
(values || []).forEach(value => {
|
|
297
|
+
const control = this.createControl(value);
|
|
298
|
+
// Apply parent disabled state, before to push it into the array
|
|
299
|
+
// This is need to avoid parent form to be enabled, after calling AppFormArray.patchValue() (e.g. in table's row validator)
|
|
300
|
+
if (disabled && control.enabled)
|
|
301
|
+
control.disable({ emitEvent: false });
|
|
302
|
+
else if (!disabled && control.disabled)
|
|
303
|
+
control.enable({ emitEvent: false });
|
|
304
|
+
this.push(control, options);
|
|
305
|
+
});
|
|
275
306
|
}
|
|
276
307
|
else {
|
|
277
308
|
this.resize(values?.length || 0, { emitEvent: false });
|
|
@@ -281,28 +312,21 @@ export class AppFormArray extends UntypedFormArray {
|
|
|
281
312
|
resize(length, options) {
|
|
282
313
|
if (this.length === length)
|
|
283
314
|
return; // Nothing to do
|
|
284
|
-
const
|
|
285
|
-
//
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
this.push(this.createControl(), { emitEvent: false /*will be done just after, if changes*/ });
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
// Or reduce
|
|
292
|
-
else {
|
|
293
|
-
while (this.length > length) {
|
|
294
|
-
this.removeAt(this.length - 1, { emitEvent: false /*will be done just after, if changes*/ });
|
|
295
|
-
}
|
|
315
|
+
const disabled = this.disabled; // Save enabled here, because update can occur from resizeArray()
|
|
316
|
+
// Reduce
|
|
317
|
+
while (this.length > length) {
|
|
318
|
+
this.removeAt(this.length - 1, { emitEvent: options?.emitEvent });
|
|
296
319
|
}
|
|
297
|
-
//
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
320
|
+
// Or increase size
|
|
321
|
+
while (this.length < length) {
|
|
322
|
+
const control = this.createControl();
|
|
323
|
+
// Apply parent disabled state, before to push it into the array
|
|
324
|
+
// This is need to avoid parent form to be enabled, after calling AppFormArray.patchValue() (e.g. in table's row validator)
|
|
325
|
+
if (disabled && control.enabled)
|
|
326
|
+
control.disable({ emitEvent: false });
|
|
327
|
+
else if (!disabled && control.disabled)
|
|
328
|
+
control.enable({ emitEvent: false });
|
|
329
|
+
this.push(control, options);
|
|
306
330
|
}
|
|
307
331
|
}
|
|
308
332
|
disable(opts) {
|
|
@@ -434,4 +458,4 @@ export function resetCalculatedValue(controls, controlName) {
|
|
|
434
458
|
AppFormUtils.setCalculatedValue(controls, controlName, undefined);
|
|
435
459
|
}
|
|
436
460
|
}
|
|
437
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0RCxnQkFBZ0IsRUFBc0IsZ0JBQWdCLEVBQStCLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0ssT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsT0FBTyxFQUFrQixNQUFNLDBCQUEwQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixnQkFBZ0IsRUFDakIsTUFBTSxvQkFBb0IsQ0FBQztBQXdDNUI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUF4QjtRQUNXLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7SUEwQjNCLENBQUM7SUF6QkMsSUFBSSxRQUFRO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBaUQsSUFBRSxDQUFDO0lBQzVELE1BQU0sQ0FBQyxJQUFpRCxJQUFFLENBQUM7SUFFM0QsY0FBYyxDQUFDLElBQWlELElBQUUsQ0FBQztJQUNuRSxlQUFlLENBQUMsSUFBaUQsSUFBRSxDQUFDO0lBQ3BFLGFBQWEsQ0FBQyxJQUFpRCxJQUFFLENBQUM7SUFDbEUsZ0JBQWdCLENBQUMsSUFBOEIsSUFBRyxDQUFDO0lBQ25ELFdBQVcsQ0FBQyxJQUFpRCxJQUFFLENBQUM7SUFDaEUsYUFBYSxDQUFDLElBQWlELElBQUUsQ0FBQztJQUNsRSxZQUFZLENBQUMsSUFBaUQsSUFBRSxDQUFDO0lBQ2pFLFdBQVcsQ0FBQyxJQUFpRCxJQUFFLENBQUM7SUFFaEUsUUFBUSxDQUFDLElBQXFCO1FBQzVCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsS0FBSztRQUNILE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFHRCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFvQixRQUFpQjtRQUFqQixhQUFRLEdBQVIsUUFBUSxDQUFTO0lBQ3JDLENBQUM7SUFFRCxJQUFZLFFBQVE7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQXFCO1FBQ2hDLElBQUksT0FBVSxDQUFDO1FBQ2YsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25CLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsNkJBQTZCO0lBRTdCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDakMsQ0FBQztJQUNELEtBQUs7UUFDSCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUNELFFBQVEsQ0FBQyxJQUFx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QUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxRQUEyQyxFQUFFLFdBQW1CO0lBQ25HLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUU7UUFDN0MsbURBQW1EO1FBQ25ELFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ25FO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBBc3luY1ZhbGlkYXRvckZuLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCDJtUZvcm1BcnJheVZhbHVlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgU2hhcmVkRm9ybUFycmF5VmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyByb3VuZCwgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmaWx0ZXJOdW1iZXJJbnB1dCwgc2VsZWN0SW5wdXRDb250ZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2lucHV0cyc7XG5pbXBvcnQgeyB3YWl0Rm9yLCBXYWl0Rm9yT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICBjbGVhclZhbHVlSW5BcnJheSxcbiAgY29weUVudGl0eTJGb3JtLFxuICBkaXNhYmxlQ29udHJvbHMsXG4gIGdldENvbnRyb2xGcm9tUGF0aCxcbiAgZ2V0Rm9ybUVycm9ycyxcbiAgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSxcbiAgbG9nRm9ybUVycm9ycyxcbiAgbWFya0FsbEFzVG91Y2hlZCxcbiAgbWFya0FzVW50b3VjaGVkLFxuICBpbml0QXJyYXlDb250cm9sc0Zyb21WYWx1ZXMsXG4gIGFkZFZhbHVlSW5BcnJheSxcbiAgcmVtb3ZlVmFsdWVJbkFycmF5LFxuICByZXNpemVBcnJheSxcbiAgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSxcbiAgd2FpdElkbGUsXG4gIHdhaXRXaGlsZVBlbmRpbmdcbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm1zJztcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBJQXBwRm9ybUdldHRlciA9ICgpID0+IElBcHBGb3JtO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgT25SZWFkeSB7XG4gIG5nT25SZWFkeSgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcHBGb3JtICB7XG4gIC8vIEZyb20gQW5ndWxhciBmb3JtXG4gIGludmFsaWQ6IGJvb2xlYW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBkaXJ0eTogYm9vbGVhbjtcbiAgcGVuZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IHN0cmluZztcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIHRvdWNoZWQ6IGJvb2xlYW47XG4gIHVudG91Y2hlZDogYm9vbGVhbjtcblxuICAvLyBTcGVjaWZpYyB0byBJQXBwRm9ybVxuICBlbXB0eT86IGJvb2xlYW47XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICByZWFkeSgpOiBQcm9taXNlPHZvaWQ+O1xuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGFueT47XG5cbiAgZGlzYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjt9KTtcbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xuXG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47fSk7XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47fSk7XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk7XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xuICBtYXJrQXNMb2FkZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47fSk7XG4gIG1hcmtBc1JlYWR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xufVxuXG5cbi8qKlxuICogQSBmb3JtIHRoYXQgZG8gbm90aGluZ1xuICovXG5leHBvcnQgY2xhc3MgQXBwTnVsbEZvcm0gaW1wbGVtZW50cyBJQXBwRm9ybSB7XG4gIHJlYWRvbmx5IGludmFsaWQgPSBmYWxzZTtcbiAgcmVhZG9ubHkgdmFsaWQgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZGlydHkgPSBmYWxzZTtcbiAgcmVhZG9ubHkgZW1wdHkgPSB0cnVlO1xuICByZWFkb25seSBwZW5kaW5nID0gZmFsc2U7XG4gIHJlYWRvbmx5IGVycm9yID0gbnVsbDtcbiAgcmVhZG9ubHkgZW5hYmxlZCA9IGZhbHNlO1xuICByZWFkb25seSBsb2FkaW5nID0gZmFsc2U7XG4gIHJlYWRvbmx5IHRvdWNoZWQgPSBmYWxzZTtcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5lbmFibGVkO1xuICB9XG4gIGdldCB1bnRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnRvdWNoZWQ7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgZW5hYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBc1VudG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBc1RvdWNoZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge31cbiAgbWFya0FzRGlydHkob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQXNMb2FkaW5nKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FzUmVhZHkob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuXG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGZhbHNlKTtcbiAgfVxuICByZWFkeSgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0cnVlKTtcbiAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBBcHBGb3JtUHJvdmlkZXI8RiBleHRlbmRzIElBcHBGb3JtID0gSUFwcEZvcm0+IGltcGxlbWVudHMgSUFwcEZvcm0ge1xuICBzdGF0aWMgTlVMTF9GT1JNID0gbmV3IEFwcE51bGxGb3JtKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBnZXR0ZXJGbjogKCkgPT4gRikge1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVsZWdhdGUoKTogSUFwcEZvcm0ge1xuICAgIHJldHVybiB0aGlzLmdldHRlckZuKCkgfHwgQXBwRm9ybVByb3ZpZGVyLk5VTExfRk9STTtcbiAgfVxuXG4gIHdhaXREZWxlZ2F0ZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPEY+IHtcbiAgICBsZXQgY29udGVudDogRjtcbiAgICByZXR1cm4gd2FpdEZvcigoKSA9PiB7XG4gICAgICBjb250ZW50ID0gdGhpcy5nZXR0ZXJGbigpO1xuICAgICAgcmV0dXJuICEhY29udGVudDtcbiAgICB9LCBvcHRzKS50aGVuKF8gPT4gY29udGVudCk7XG4gIH1cblxuICAvKiAtLSBkZWxlZ2F0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVuYWJsZWQ7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmRpc2FibGVkO1xuICB9XG4gIGdldCBlcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVycm9yO1xuICB9XG4gIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmludmFsaWQ7XG4gIH1cbiAgZ2V0IHZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnZhbGlkO1xuICB9XG4gIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kaXJ0eTtcbiAgfVxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW1wdHk7XG4gIH1cbiAgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucGVuZGluZztcbiAgfVxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5sb2FkaW5nO1xuICB9XG4gIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnRvdWNoZWQ7XG4gIH1cbiAgZ2V0IHVudG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS51bnRvdWNoZWQ7XG4gIH1cbiAgcmVhZHkoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5yZWFkeSgpO1xuICB9XG4gIHdhaXRJZGxlKG9wdHM/OiBXYWl0Rm9yT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUud2FpdElkbGUoKTtcbiAgfVxuICBkaXNhYmxlKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kaXNhYmxlKG9wdHMpO1xuICB9XG4gIGVuYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZW5hYmxlKG9wdHMpO1xuICB9XG4gIG1hcmtBc1ByaXN0aW5lKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNQcmlzdGluZShvcHRzKTtcbiAgfVxuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1VudG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNUb3VjaGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBbGxBc1RvdWNoZWQob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FsbEFzVG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNEaXJ0eShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzRGlydHkob3B0cyk7XG4gIH1cbiAgbWFya0FzTG9hZGluZyhvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc0xvYWRpbmcob3B0cyk7XG4gIH1cbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzTG9hZGVkKG9wdHMpO1xuICB9XG4gIG1hcmtBc1JlYWR5KG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzUmVhZHkob3B0cyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtQXJyYXlIZWxwZXJPcHRpb25zIHtcbiAgYWxsb3dFbXB0eUFycmF5OiBib29sZWFuO1xuICB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXTtcbn1cblxuZXhwb3J0IGNsYXNzIEZvcm1BcnJheUhlbHBlcjxUID0gRW50aXR5PGFueT4sIEMgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2wgPSBBYnN0cmFjdENvbnRyb2w+IHtcblxuICBzdGF0aWMgZ2V0T3JDcmVhdGVBcnJheShcbiAgICBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXAsXG4gICAgYXJyYXlOYW1lOiBzdHJpbmcpOiBVbnR5cGVkRm9ybUFycmF5IHtcbiAgICBsZXQgYXJyYXlDb250cm9sID0gZm9ybS5nZXQoYXJyYXlOYW1lKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgIGlmICghYXJyYXlDb250cm9sKSB7XG4gICAgICBhcnJheUNvbnRyb2wgPSBmb3JtQnVpbGRlci5hcnJheShbXSk7XG4gICAgICBmb3JtLmFkZENvbnRyb2woYXJyYXlOYW1lLCBhcnJheUNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXlDb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWxsb3dFbXB0eUFycmF5OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF92YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuXG4gIGdldCBhbGxvd0VtcHR5QXJyYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93RW1wdHlBcnJheTtcbiAgfVxuXG4gIHNldCBhbGxvd0VtcHR5QXJyYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZm9ybUFycmF5KCk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQXJyYXk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtQXJyYXk6IFVudHlwZWRGb3JtQXJyYXksXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250cm9sOiAodmFsdWU/OiBUKSA9PiBDLFxuICAgIHByaXZhdGUgZXF1YWxzOiAodjE6IFQsIHYyOiBUKSA9PiBib29sZWFuLFxuICAgIHByaXZhdGUgaXNFbXB0eTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiBGb3JtQXJyYXlIZWxwZXJPcHRpb25zXG4gICkge1xuICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSBvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdG9ycztcblxuICAgIC8vIGVtcHR5IGFycmF5IG5vdCBhbGxvdyBieSBkZWZhdWx0XG4gICAgdGhpcy5zZXRBbGxvd0VtcHR5QXJyYXkodG9Cb29sZWFuKG9wdGlvbnM/LmFsbG93RW1wdHlBcnJheSwgZmFsc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHB1c2goKSBpbnN0ZWFkXG4gICAqL1xuICBhZGQodmFsdWU/OiBULCBvcHRpb25zPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhZGRWYWx1ZUluQXJyYXkodGhpcy5fZm9ybUFycmF5LCB0aGlzLmNyZWF0ZUNvbnRyb2wsIHRoaXMuZXF1YWxzLCB0aGlzLmlzRW1wdHksIHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUF0KGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBEbyBub3QgcmVtb3ZlIGlmIGxhc3QgY3JpdGVyaW9uXG4gICAgaWYgKCF0aGlzLl9hbGxvd0VtcHR5QXJyYXkgJiYgdGhpcy5fZm9ybUFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNsZWFyVmFsdWVJbkFycmF5KHRoaXMuX2Zvcm1BcnJheSwgdGhpcy5pc0VtcHR5LCBpbmRleCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHJlbW92ZVZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZShsZW5ndGg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNpemVBcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuY3JlYXRlQ29udHJvbCwgbGVuZ3RoLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNsZWFyQXQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjbGVhclZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICB9XG5cbiAgaXNMYXN0KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2Zvcm1BcnJheS5sZW5ndGggLSAxKSA9PT0gaW5kZXg7XG4gIH1cblxuICByZW1vdmVBbGxFbXB0eSgpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB3aGlsZShpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5sZW5ndGg7XG4gIH1cblxuICBhdChpbmRleDogbnVtYmVyKTogQyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5hdChpbmRleCkgYXMgQztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIEZvcm1BcnJheSwgdGhlbiBzZXQgdmFsdWVzXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5zZXRWYWx1ZSh2YWx1ZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgRm9ybUFycmF5LCB0aGVuIHBhdGNoIHZhbHVlc1xuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwYXRjaFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5wYXRjaFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZGlzYWJsZShvcHRzKSk7XG4gIH1cblxuICBlbmFibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRoaXMuX2Zvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKGMgPT4gYy5lbmFibGUob3B0cykpO1xuICB9XG5cbiAgZm9yRWFjaChpdGU6IChjb250cm9sOiBDKSA9PiB2b2lkICkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUoKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZm9ybUFycmF5LmF0KGkpIGFzIEM7XG4gICAgICBpZiAoY29udHJvbCkgaXRlKGNvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIGludGVybmFsIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgc2V0QWxsb3dFbXB0eUFycmF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSA9PT0gdmFsdWUpIHJldHVybjsgLy8gU2tpcCBpZiBzYW1lXG5cbiAgICB0aGlzLl9hbGxvd0VtcHR5QXJyYXkgPSB2YWx1ZTtcblxuICAgIC8vIFNldCByZXF1aXJlZCAob3IgcmVzdGUpIG1pbiBsZW5ndGggdmFsaWRhdG9yXG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSkge1xuICAgICAgdGhpcy5fZm9ybUFycmF5LnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyB8fCBudWxsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9mb3JtQXJyYXkuc2V0VmFsaWRhdG9ycygodGhpcy5fdmFsaWRhdG9ycyB8fCBbXSkuY29uY2F0KFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMucmVxdWlyZWRBcnJheU1pbkxlbmd0aCgxKSkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEZvcm1BcnJheU9wdGlvbnMgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2xPcHRpb25ze1xuICBhbGxvd0VtcHR5QXJyYXk6IGJvb2xlYW47IC8vIHRydWUgYnkgZGVmYXVsdFxuICByZXNpemVTdHJhdGVneTogJ3JldXNlJ3wncmVjcmVhdGUnOyAvLyByZXNpemUgYnkgZGVmYXVsdFxufVxuXG5cbmV4cG9ydCBjbGFzcyBBcHBGb3JtQXJyYXk8VCBleHRlbmRzIEVudGl0eTxUPiwgQyBleHRlbmRzIEFic3RyYWN0Q29udHJvbD4gZXh0ZW5kcyBVbnR5cGVkRm9ybUFycmF5IHtcblxuICBwcml2YXRlIF9hbGxvd0VtcHR5QXJyYXk6IGJvb2xlYW47XG5cbiAgZ2V0IGFsbG93RW1wdHlBcnJheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dFbXB0eUFycmF5O1xuICB9XG5cbiAgc2V0IGFsbG93RW1wdHlBcnJheSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0QWxsb3dFbXB0eUFycmF5KHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogVCkgPT4gQyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcXVhbHM6ICh2MTogVCwgdjI6IFQpID0+IGJvb2xlYW4sXG4gICAgICAgICAgICAgIHByaXZhdGUgaXNFbXB0eTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxuICAgICAgICAgICAgICBwcml2YXRlIG9wdGlvbnM/OiBBcHBGb3JtQXJyYXlPcHRpb25zIHwgbnVsbFxuICApIHtcbiAgICBzdXBlcihbXSwgb3B0aW9ucyk7Ly8gZW1wdHkgYXJyYXkgbm90IGFsbG93IGJ5IGRlZmF1bHRcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh0b0Jvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93RW1wdHlBcnJheSwgZmFsc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXSWxsIHJlYnVpbGQgdGhlIGFycmF5LCB1c2luZyB0aGUgZ2l2ZW4gdmFsdWVzXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogYW55W10sIG9wdGlvbnM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5yZXNpemVTdHJhdGVneSA9PT0gJ3JlY3JlYXRlJykge1xuICAgICAgaW5pdEFycmF5Q29udHJvbHNGcm9tVmFsdWVzKHRoaXMsIHRoaXMuY3JlYXRlQ29udHJvbCwgdmFsdWVzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnJlc2l6ZSh2YWx1ZXM/Lmxlbmd0aCB8fCAwKTtcbiAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcGF0Y2hWYWx1ZSh2YWx1ZXM6IGFueVtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucmVzaXplU3RyYXRlZ3kgPT09ICdyZWNyZWF0ZScpIHtcbiAgICAgIGluaXRBcnJheUNvbnRyb2xzRnJvbVZhbHVlcyh0aGlzLCB0aGlzLmNyZWF0ZUNvbnRyb2wsIHZhbHVlcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGggfHwgMCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHN1cGVyLnBhdGNoVmFsdWUodmFsdWVzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICByZXNpemUobGVuZ3RoOiBudW1iZXIsIG9wdGlvbnM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pIHtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gbGVuZ3RoKSByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG9cblxuICAgIGNvbnN0IGVuYWJsZWQgPSB0aGlzLmVuYWJsZWQ7IC8vIFNhdmUgZW5hYmxlZCBoZXJlLCBiZWNhdXNlIHVwZGF0ZSBjYW4gb2NjdXIgZnJvbSByZXNpemVBcnJheSgpXG5cbiAgICAvLyBJbmNyZWFzZSBzaXplXG4gICAgaWYgKHRoaXMubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICB3aGlsZSAodGhpcy5sZW5ndGggPCBsZW5ndGgpIHtcbiAgICAgICAgdGhpcy5wdXNoKHRoaXMuY3JlYXRlQ29udHJvbCgpLCB7ZW1pdEV2ZW50OiBmYWxzZSAvKndpbGwgYmUgZG9uZSBqdXN0IGFmdGVyLCBpZiBjaGFuZ2VzKi99KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciByZWR1Y2VcbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlICh0aGlzLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICB0aGlzLnJlbW92ZUF0KHRoaXMubGVuZ3RoIC0gMSwge2VtaXRFdmVudDogZmFsc2UgLyp3aWxsIGJlIGRvbmUganVzdCBhZnRlciwgaWYgY2hhbmdlcyovfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBpbml0aWFsIHN0YXR1c1xuICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kLCBiZWNhdXNlIHB1c2ggYW5kIHJlbW92ZUF0IGNhbiBoYXZlIGNoYW5nZWQgdGhlIGFycmF5IHN0YXR1c1xuICAgIGlmICh0aGlzLmVuYWJsZWQgIT09IGVuYWJsZWQpIHtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlKG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZShvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICBzdXBlci5kaXNhYmxlKG9wdHMpO1xuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZGlzYWJsZShvcHRzKSk7XG4gIH1cblxuICBlbmFibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHN1cGVyLmVuYWJsZShvcHRzKTtcbiAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goYyA9PiBjLmVuYWJsZShvcHRzKSk7XG4gIH1cblxuICBmb3JFYWNoKGl0ZTogKGNvbnRyb2w6IEMpID0+IHZvaWQgKSB7XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMubGVuZ3RoO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmF0KGkpIGFzIEM7XG4gICAgICBpZiAoY29udHJvbCkgaXRlKGNvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHB1c2goKSBpbnN0ZWFkXG4gICAqL1xuICBhZGQodmFsdWU/OiBULCBvcHRpb25zPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGFkZFZhbHVlSW5BcnJheSh0aGlzLCB0aGlzLmNyZWF0ZUNvbnRyb2wsIHRoaXMuZXF1YWxzLCB0aGlzLmlzRW1wdHksIHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUF0KGluZGV4OiBudW1iZXIsIG9wdGlvbnM/OiB7ZW1pdEV2ZW50OiBib29sZWFuIH0pIHtcbiAgICAvLyBEbyBub3QgcmVtb3ZlIGlmIGxhc3QgY3JpdGVyaW9uXG4gICAgaWYgKCF0aGlzLl9hbGxvd0VtcHR5QXJyYXkgJiYgdGhpcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuY2xlYXJBdChpbmRleCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc3VwZXIucmVtb3ZlQXQoaW5kZXgsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQXQoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmF0KGluZGV4KTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KGNvbnRyb2wudmFsdWUpKSByZXR1cm47IC8vIHNraXAgKG5vdCBuZWVkIHRvIGNsZWFyKVxuXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgICBjb3B5RW50aXR5MkZvcm0oe30sIGNvbnRyb2wsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShbXSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShudWxsLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgaXNMYXN0KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMubGVuZ3RoIC0gMSkgPT09IGluZGV4O1xuICB9XG5cbiAgcmVtb3ZlQWxsRW1wdHkoKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jb250cm9scy5maW5kSW5kZXgoYyA9PiB0aGlzLmlzRW1wdHkoYy52YWx1ZSkpO1xuICAgIHdoaWxlKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5yZW1vdmVBdChpbmRleCk7XG4gICAgICBpbmRleCA9IHRoaXMuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBpbnRlcm5hbCAtLSAqL1xuXG4gIHByb3RlY3RlZCBzZXRBbGxvd0VtcHR5QXJyYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fYWxsb3dFbXB0eUFycmF5ID09PSB2YWx1ZSkgcmV0dXJuOyAvLyBTa2lwIGlmIHNhbWVcblxuICAgIHRoaXMuX2FsbG93RW1wdHlBcnJheSA9IHZhbHVlO1xuXG4gICAgLy8gU2V0IHJlcXVpcmVkIChvciByZXN0ZSkgbWluIGxlbmd0aCB2YWxpZGF0b3JcbiAgICBpZiAodGhpcy5fYWxsb3dFbXB0eUFycmF5KSB7XG4gICAgICB0aGlzLnNldFZhbGlkYXRvcnModGhpcy5vcHRpb25zLnZhbGlkYXRvcnMgfHwgbnVsbCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMub3B0aW9ucz8udmFsaWRhdG9ycyB8fCBbXTtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycyhcbiAgICAgICAgKEFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykgPyB2YWxpZGF0b3JzIDogW3ZhbGlkYXRvcnNdKVxuICAgICAgICAgIC5jb25jYXQoU2hhcmVkRm9ybUFycmF5VmFsaWRhdG9ycy5yZXF1aXJlZEFycmF5TWluTGVuZ3RoKDEpKSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE8gY29udGludWUgdG8gdXNlIHRoaXMga2luZCBvZiBkZWNsYXJhdGlvbiA/XG5leHBvcnQgY2xhc3MgQXBwRm9ybVV0aWxzIHtcbiAgc3RhdGljIGNvcHlFbnRpdHkyRm9ybSA9IGNvcHlFbnRpdHkyRm9ybTtcbiAgc3RhdGljIGdldEZvcm1WYWx1ZUZyb21FbnRpdHkgPSBnZXRGb3JtVmFsdWVGcm9tRW50aXR5O1xuICBzdGF0aWMgbG9nRm9ybUVycm9ycyA9IGxvZ0Zvcm1FcnJvcnM7XG4gIHN0YXRpYyBnZXRDb250cm9sRnJvbVBhdGggPSBnZXRDb250cm9sRnJvbVBhdGg7XG4gIHN0YXRpYyBmaWx0ZXJOdW1iZXJJbnB1dCA9IGZpbHRlck51bWJlcklucHV0O1xuICBzdGF0aWMgZGlzYWJsZUNvbnRyb2xzID0gZGlzYWJsZUNvbnRyb2xzO1xuICBzdGF0aWMgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIG1hcmtBbGxBc1RvdWNoZWQoKSBpbnN0ZWFkIChuYW1pbmcgd2FzIHdyb25nKVxuICAgKi9cbiAgc3RhdGljIG1hcmtBc1RvdWNoZWQgPSBtYXJrQWxsQXNUb3VjaGVkO1xuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgY29udHJvbCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50IGNvbnRyb2xzIGFzIHRvdWNoZWQuXG4gICAqIFNlZSBhbHNvOlxuICAgKiAtIGBtYXJrQXNUb3VjaGVkKClgXG4gICAqL1xuICBzdGF0aWMgbWFya0FsbEFzVG91Y2hlZCA9IG1hcmtBbGxBc1RvdWNoZWQ7XG4gIHN0YXRpYyBtYXJrQXNVbnRvdWNoZWQgPSBtYXJrQXNVbnRvdWNoZWQ7XG4gIHN0YXRpYyB3YWl0V2hpbGVQZW5kaW5nID0gd2FpdFdoaWxlUGVuZGluZztcbiAgc3RhdGljIHdhaXRJZGxlID0gd2FpdElkbGU7XG4gIHN0YXRpYyB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5ID0gdXBkYXRlVmFsdWVBbmRWYWxpZGl0eTtcblxuICBzdGF0aWMgZ2V0Rm9ybUVycm9ycyA9IGdldEZvcm1FcnJvcnM7XG5cbiAgc3RhdGljIGlzRm9ybShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBJQXBwRm9ybSB7XG4gICAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEFwcEZvcm1Qcm92aWRlclxuICAgICAgfHwgJ2RpcnR5JyBpbiBvYmplY3QgJiYgJ2VuYWJsZWQnIGluIG9iamVjdCAmJiAndmFsaWQnIGluIG9iamVjdDtcbiAgfVxuXG4gIC8vIEFycmF5Rm9ybVxuICBzdGF0aWMgYWRkVmFsdWVJbkFycmF5ID0gYWRkVmFsdWVJbkFycmF5O1xuICBzdGF0aWMgcmVtb3ZlVmFsdWVJbkFycmF5ID0gcmVtb3ZlVmFsdWVJbkFycmF5O1xuICBzdGF0aWMgcmVzaXplQXJyYXkgPSByZXNpemVBcnJheTtcbiAgc3RhdGljIGNsZWFyVmFsdWVJbkFycmF5ID0gY2xlYXJWYWx1ZUluQXJyYXk7XG5cbiAgLy8gQ2FsY3VsYXRlZCBmaWVsZHNcbiAgc3RhdGljIGNhbGN1bGF0ZWRTdWZmaXggPSAnQ2FsY3VsYXRlZCc7XG4gIHN0YXRpYyBpc0NvbnRyb2xIYXNJbnB1dCA9IGlzQ29udHJvbEhhc0lucHV0O1xuICBzdGF0aWMgc2V0Q2FsY3VsYXRlZFZhbHVlID0gc2V0Q2FsY3VsYXRlZFZhbHVlO1xuICBzdGF0aWMgcmVzZXRDYWxjdWxhdGVkVmFsdWUgPSByZXNldENhbGN1bGF0ZWRWYWx1ZTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb250cm9sSGFzSW5wdXQoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSwgY29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyB0cnVlIGlmIHRoZSBjb250cm9sIGhhcyBhIHZhbHVlIGFuZCBpdHMgJ2NhbGN1bGF0ZWQnIGNvbnRyb2wgaGFzIHRoZSB2YWx1ZSAnZmFsc2UnXG4gIHJldHVybiBjb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUgJiYgIXRvQm9vbGVhbihjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS52YWx1ZSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgLy8gc2V0IHZhbHVlIHRvIGNvbnRyb2xcbiAgY29udHJvbHNbY29udHJvbE5hbWVdLnNldFZhbHVlKHJvdW5kKHZhbHVlKSk7XG4gIC8vIHNldCAnY2FsY3VsYXRlZCcgY29udHJvbCB0byAndHJ1ZSdcbiAgY29udHJvbHNbY29udHJvbE5hbWUgKyBBcHBGb3JtVXRpbHMuY2FsY3VsYXRlZFN1ZmZpeF0uc2V0VmFsdWUodHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2x9LCBjb250cm9sTmFtZTogc3RyaW5nKSB7XG4gIGlmICghaXNDb250cm9sSGFzSW5wdXQoY29udHJvbHMsIGNvbnRyb2xOYW1lKSkge1xuICAgIC8vIHNldCB1bmRlZmluZWQgb25seSBpZiBjb250cm9sIGFscmVhZHkgY2FsY3VsYXRlZFxuICAgIEFwcEZvcm1VdGlscy5zZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHMsIGNvbnRyb2xOYW1lLCB1bmRlZmluZWQpO1xuICB9XG59XG5cbiJdfQ==
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9mb3JtL2Zvcm0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxnQkFBZ0IsRUFBc0IsZ0JBQWdCLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1SSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBQyxPQUFPLEVBQWlCLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2pCLE1BQU0sb0JBQW9CLENBQUM7QUF3QzVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFBeEI7UUFDVyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLElBQUksQ0FBQztRQUNiLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBMEIzQixDQUFDO0lBekJDLElBQUksUUFBUTtRQUNW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QyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkgsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUEyQyxFQUFFLFdBQW1CLEVBQUUsS0FBeUI7SUFDNUgsdUJBQXVCO0lBQ3ZCLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDN0MscUNBQXFDO0lBQ3JDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsUUFBMkMsRUFBRSxXQUFtQjtJQUNuRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxFQUFFO1FBQzdDLG1EQUFtRDtRQUNuRCxZQUFZLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztLQUNuRTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgQWJzdHJhY3RDb250cm9sT3B0aW9ucywgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JGbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtFbnRpdHl9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQge1NoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnN9IGZyb20gJy4uLy4uL3NoYXJlZC92YWxpZGF0b3IvdmFsaWRhdG9ycyc7XG5pbXBvcnQge3JvdW5kLCB0b0Jvb2xlYW59IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmaWx0ZXJOdW1iZXJJbnB1dCwgc2VsZWN0SW5wdXRDb250ZW50fSBmcm9tICcuLi8uLi9zaGFyZWQvaW5wdXRzJztcbmltcG9ydCB7d2FpdEZvciwgV2FpdEZvck9wdGlvbnN9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1xuICBhZGRWYWx1ZUluQXJyYXksXG4gIGNsZWFyVmFsdWVJbkFycmF5LFxuICBjb3B5RW50aXR5MkZvcm0sXG4gIGRpc2FibGVDb250cm9scyxcbiAgZ2V0Q29udHJvbEZyb21QYXRoLFxuICBnZXRGb3JtRXJyb3JzLFxuICBnZXRGb3JtVmFsdWVGcm9tRW50aXR5LFxuICBsb2dGb3JtRXJyb3JzLFxuICBtYXJrQWxsQXNUb3VjaGVkLFxuICBtYXJrQXNVbnRvdWNoZWQsXG4gIHJlbW92ZVZhbHVlSW5BcnJheSxcbiAgcmVzaXplQXJyYXksXG4gIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHksXG4gIHdhaXRJZGxlLFxuICB3YWl0V2hpbGVQZW5kaW5nXG59IGZyb20gJy4uLy4uL3NoYXJlZC9mb3Jtcyc7XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgSUFwcEZvcm1HZXR0ZXIgPSAoKSA9PiBJQXBwRm9ybTtcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE9uUmVhZHkge1xuICBuZ09uUmVhZHkoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXBwRm9ybSAge1xuICAvLyBGcm9tIEFuZ3VsYXIgZm9ybVxuICBpbnZhbGlkOiBib29sZWFuO1xuICB2YWxpZDogYm9vbGVhbjtcbiAgZGlydHk6IGJvb2xlYW47XG4gIHBlbmRpbmc6IGJvb2xlYW47XG4gIGVycm9yOiBzdHJpbmc7XG4gIGVuYWJsZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICB0b3VjaGVkOiBib29sZWFuO1xuICB1bnRvdWNoZWQ6IGJvb2xlYW47XG5cbiAgLy8gU3BlY2lmaWMgdG8gSUFwcEZvcm1cbiAgZW1wdHk/OiBib29sZWFuO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgcmVhZHkoKTogUHJvbWlzZTx2b2lkPjtcbiAgd2FpdElkbGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxhbnk+O1xuXG4gIGRpc2FibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW47fSk7XG4gIGVuYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjt9KTtcblxuICBtYXJrQXNQcmlzdGluZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjt9KTtcbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7ZW1pdEV2ZW50PzogYm9vbGVhbn0pO1xuICBtYXJrQXNEaXJ0eShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjt9KTtcbiAgbWFya0FzTG9hZGluZyhvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjt9KTtcbiAgbWFya0FzTG9hZGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuO30pO1xuICBtYXJrQXNSZWFkeShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbjt9KTtcbn1cblxuXG4vKipcbiAqIEEgZm9ybSB0aGF0IGRvIG5vdGhpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIEFwcE51bGxGb3JtIGltcGxlbWVudHMgSUFwcEZvcm0ge1xuICByZWFkb25seSBpbnZhbGlkID0gZmFsc2U7XG4gIHJlYWRvbmx5IHZhbGlkID0gZmFsc2U7XG4gIHJlYWRvbmx5IGRpcnR5ID0gZmFsc2U7XG4gIHJlYWRvbmx5IGVtcHR5ID0gdHJ1ZTtcbiAgcmVhZG9ubHkgcGVuZGluZyA9IGZhbHNlO1xuICByZWFkb25seSBlcnJvciA9IG51bGw7XG4gIHJlYWRvbmx5IGVuYWJsZWQgPSBmYWxzZTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IGZhbHNlO1xuICByZWFkb25seSB0b3VjaGVkID0gZmFsc2U7XG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZW5hYmxlZDtcbiAgfVxuICBnZXQgdW50b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy50b3VjaGVkO1xuICB9XG5cbiAgZGlzYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIGVuYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG5cbiAgbWFya0FzUHJpc3RpbmUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQXNVbnRvdWNoZWQob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSl7fVxuICBtYXJrQXNUb3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FsbEFzVG91Y2hlZChvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHt9XG4gIG1hcmtBc0RpcnR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cbiAgbWFya0FzTG9hZGluZyhvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KXt9XG4gIG1hcmtBc1JlYWR5KG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pe31cblxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChmYWxzZSk7XG4gIH1cbiAgcmVhZHkoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodHJ1ZSk7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQXBwRm9ybVByb3ZpZGVyPEYgZXh0ZW5kcyBJQXBwRm9ybSA9IElBcHBGb3JtPiBpbXBsZW1lbnRzIElBcHBGb3JtIHtcbiAgc3RhdGljIE5VTExfRk9STSA9IG5ldyBBcHBOdWxsRm9ybSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ2V0dGVyRm46ICgpID0+IEYpIHtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlbGVnYXRlKCk6IElBcHBGb3JtIHtcbiAgICByZXR1cm4gdGhpcy5nZXR0ZXJGbigpIHx8IEFwcEZvcm1Qcm92aWRlci5OVUxMX0ZPUk07XG4gIH1cblxuICB3YWl0RGVsZWdhdGUob3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTxGPiB7XG4gICAgbGV0IGNvbnRlbnQ6IEY7XG4gICAgcmV0dXJuIHdhaXRGb3IoKCkgPT4ge1xuICAgICAgY29udGVudCA9IHRoaXMuZ2V0dGVyRm4oKTtcbiAgICAgIHJldHVybiAhIWNvbnRlbnQ7XG4gICAgfSwgb3B0cykudGhlbihfID0+IGNvbnRlbnQpO1xuICB9XG5cbiAgLyogLS0gZGVsZWdhdGVkIG1ldGhvZHMgLS0gKi9cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lbmFibGVkO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kaXNhYmxlZDtcbiAgfVxuICBnZXQgZXJyb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5lcnJvcjtcbiAgfVxuICBnZXQgaW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5pbnZhbGlkO1xuICB9XG4gIGdldCB2YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS52YWxpZDtcbiAgfVxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlydHk7XG4gIH1cbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVtcHR5O1xuICB9XG4gIGdldCBwZW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLnBlbmRpbmc7XG4gIH1cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubG9hZGluZztcbiAgfVxuICBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS50b3VjaGVkO1xuICB9XG4gIGdldCB1bnRvdWNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUudW50b3VjaGVkO1xuICB9XG4gIHJlYWR5KCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUucmVhZHkoKTtcbiAgfVxuICB3YWl0SWRsZShvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLndhaXRJZGxlKCk7XG4gIH1cbiAgZGlzYWJsZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuZGlzYWJsZShvcHRzKTtcbiAgfVxuICBlbmFibGUob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmVuYWJsZShvcHRzKTtcbiAgfVxuICBtYXJrQXNQcmlzdGluZShvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzUHJpc3RpbmUob3B0cyk7XG4gIH1cbiAgbWFya0FzVW50b3VjaGVkKG9wdHM/OiB7b25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNVbnRvdWNoZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzVG91Y2hlZChvcHRzPzoge29ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUubWFya0FzVG91Y2hlZChvcHRzKTtcbiAgfVxuICBtYXJrQWxsQXNUb3VjaGVkKG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBbGxBc1RvdWNoZWQob3B0cyk7XG4gIH1cbiAgbWFya0FzRGlydHkob3B0cz86IHtvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc0RpcnR5KG9wdHMpO1xuICB9XG4gIG1hcmtBc0xvYWRpbmcob3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuOyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5tYXJrQXNMb2FkaW5nKG9wdHMpO1xuICB9XG4gIG1hcmtBc0xvYWRlZChvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc0xvYWRlZChvcHRzKTtcbiAgfVxuICBtYXJrQXNSZWFkeShvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hcmtBc1JlYWR5KG9wdHMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUFycmF5SGVscGVyT3B0aW9ucyB7XG4gIGFsbG93RW1wdHlBcnJheTogYm9vbGVhbjtcbiAgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW107XG59XG5cbmV4cG9ydCBjbGFzcyBGb3JtQXJyYXlIZWxwZXI8VCA9IEVudGl0eTxhbnk+LCBDIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sID0gQWJzdHJhY3RDb250cm9sPiB7XG5cbiAgc3RhdGljIGdldE9yQ3JlYXRlQXJyYXkoXG4gICAgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLFxuICAgIGFycmF5TmFtZTogc3RyaW5nKTogVW50eXBlZEZvcm1BcnJheSB7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBmb3JtLmRpc2FibGVkO1xuICAgIGxldCBhcnJheUNvbnRyb2wgPSBmb3JtLmdldChhcnJheU5hbWUpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgaWYgKCFhcnJheUNvbnRyb2wpIHtcbiAgICAgIGFycmF5Q29udHJvbCA9IGZvcm1CdWlsZGVyLmFycmF5KFtdKTtcblxuICAgICAgLy8gQXBwbHkgcGFyZW50IGRpc2FibGVkIHN0YXRlLCBiZWZvcmUgdG8gcHVzaCBpdCBpbnRvIHRoZSBhcnJheVxuICAgICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWQsIGFmdGVyIGNhbGxpbmcgcmVzaXplQXJyYXkoKVxuICAgICAgaWYgKGRpc2FibGVkICYmIGFycmF5Q29udHJvbC5lbmFibGVkKSBhcnJheUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICBmb3JtLmFkZENvbnRyb2woYXJyYXlOYW1lLCBhcnJheUNvbnRyb2wpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXlDb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWxsb3dFbXB0eUFycmF5OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF92YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdO1xuXG4gIGdldCBhbGxvd0VtcHR5QXJyYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbG93RW1wdHlBcnJheTtcbiAgfVxuXG4gIHNldCBhbGxvd0VtcHR5QXJyYXkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgZm9ybUFycmF5KCk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQXJyYXk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtQXJyYXk6IFVudHlwZWRGb3JtQXJyYXksXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250cm9sOiAodmFsdWU/OiBUKSA9PiBDLFxuICAgIHByaXZhdGUgZXF1YWxzOiAodjE6IFQsIHYyOiBUKSA9PiBib29sZWFuLFxuICAgIHByaXZhdGUgaXNFbXB0eTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiBGb3JtQXJyYXlIZWxwZXJPcHRpb25zXG4gICkge1xuICAgIHRoaXMuX3ZhbGlkYXRvcnMgPSBvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdG9ycztcblxuICAgIC8vIGVtcHR5IGFycmF5IG5vdCBhbGxvdyBieSBkZWZhdWx0XG4gICAgdGhpcy5zZXRBbGxvd0VtcHR5QXJyYXkodG9Cb29sZWFuKG9wdGlvbnM/LmFsbG93RW1wdHlBcnJheSwgZmFsc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHB1c2goKSBpbnN0ZWFkXG4gICAqL1xuICBhZGQodmFsdWU/OiBULCBvcHRpb25zPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW4gfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhZGRWYWx1ZUluQXJyYXkodGhpcy5fZm9ybUFycmF5LCB0aGlzLmNyZWF0ZUNvbnRyb2wsIHRoaXMuZXF1YWxzLCB0aGlzLmlzRW1wdHksIHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUF0KGluZGV4OiBudW1iZXIpIHtcbiAgICAvLyBEbyBub3QgcmVtb3ZlIGlmIGxhc3QgY3JpdGVyaW9uXG4gICAgaWYgKCF0aGlzLl9hbGxvd0VtcHR5QXJyYXkgJiYgdGhpcy5fZm9ybUFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNsZWFyVmFsdWVJbkFycmF5KHRoaXMuX2Zvcm1BcnJheSwgdGhpcy5pc0VtcHR5LCBpbmRleCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHJlbW92ZVZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2l6ZShsZW5ndGg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ/OiBib29sZWFufSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNpemVBcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuY3JlYXRlQ29udHJvbCwgbGVuZ3RoLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNsZWFyQXQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjbGVhclZhbHVlSW5BcnJheSh0aGlzLl9mb3JtQXJyYXksIHRoaXMuaXNFbXB0eSwgaW5kZXgpO1xuICB9XG5cbiAgaXNMYXN0KGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2Zvcm1BcnJheS5sZW5ndGggLSAxKSA9PT0gaW5kZXg7XG4gIH1cblxuICByZW1vdmVBbGxFbXB0eSgpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB3aGlsZShpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXQoaW5kZXgpO1xuICAgICAgaW5kZXggPSB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZmluZEluZGV4KGMgPT4gdGhpcy5pc0VtcHR5KGMudmFsdWUpKTtcbiAgICB9XG4gIH1cblxuICBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5sZW5ndGg7XG4gIH1cblxuICBhdChpbmRleDogbnVtYmVyKTogQyB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1BcnJheS5hdChpbmRleCkgYXMgQztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIEZvcm1BcnJheSwgdGhlbiBzZXQgdmFsdWVzXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5zZXRWYWx1ZSh2YWx1ZXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgRm9ybUFycmF5LCB0aGVuIHBhdGNoIHZhbHVlc1xuICAgKiBAcGFyYW0gdmFsdWVzXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBwYXRjaFZhbHVlKHZhbHVlczogVFtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGh8fDApO1xuICAgIHRoaXMuX2Zvcm1BcnJheS5wYXRjaFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gIH1cblxuICBkaXNhYmxlKG9wdHM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pIHtcbiAgICB0aGlzLl9mb3JtQXJyYXkuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZGlzYWJsZShvcHRzKSk7XG4gIH1cblxuICBlbmFibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHRoaXMuX2Zvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKGMgPT4gYy5lbmFibGUob3B0cykpO1xuICB9XG5cbiAgZm9yRWFjaChpdGU6IChjb250cm9sOiBDKSA9PiB2b2lkICkge1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUoKTtcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5fZm9ybUFycmF5LmF0KGkpIGFzIEM7XG4gICAgICBpZiAoY29udHJvbCkgaXRlKGNvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIGludGVybmFsIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgc2V0QWxsb3dFbXB0eUFycmF5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSA9PT0gdmFsdWUpIHJldHVybjsgLy8gU2tpcCBpZiBzYW1lXG5cbiAgICB0aGlzLl9hbGxvd0VtcHR5QXJyYXkgPSB2YWx1ZTtcblxuICAgIC8vIFNldCByZXF1aXJlZCAob3IgcmVzdGUpIG1pbiBsZW5ndGggdmFsaWRhdG9yXG4gICAgaWYgKHRoaXMuX2FsbG93RW1wdHlBcnJheSkge1xuICAgICAgdGhpcy5fZm9ybUFycmF5LnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyB8fCBudWxsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9mb3JtQXJyYXkuc2V0VmFsaWRhdG9ycygodGhpcy5fdmFsaWRhdG9ycyB8fCBbXSkuY29uY2F0KFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMucmVxdWlyZWRBcnJheU1pbkxlbmd0aCgxKSkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcEZvcm1BcnJheU9wdGlvbnMgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2xPcHRpb25ze1xuICBhbGxvd0VtcHR5QXJyYXk6IGJvb2xlYW47IC8vIHRydWUgYnkgZGVmYXVsdFxuICBhbGxvd1JldXNlSXRlbT86IGJvb2xlYW47IC8vIHRydWUgYnkgZGVmYXVsdFxufVxuXG5cbmV4cG9ydCBjbGFzcyBBcHBGb3JtQXJyYXk8VCBleHRlbmRzIEVudGl0eTxUPiwgQyBleHRlbmRzIEFic3RyYWN0Q29udHJvbD4gZXh0ZW5kcyBVbnR5cGVkRm9ybUFycmF5IHtcblxuICBwcml2YXRlIF9hbGxvd0VtcHR5QXJyYXk6IGJvb2xlYW47XG5cbiAgZ2V0IGFsbG93RW1wdHlBcnJheSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dFbXB0eUFycmF5O1xuICB9XG5cbiAgc2V0IGFsbG93RW1wdHlBcnJheSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0QWxsb3dFbXB0eUFycmF5KHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogVCkgPT4gQyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlcXVhbHM6ICh2MTogVCwgdjI6IFQpID0+IGJvb2xlYW4sXG4gICAgICAgICAgICAgIHByaXZhdGUgaXNFbXB0eTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxuICAgICAgICAgICAgICBwcml2YXRlIG9wdGlvbnM/OiBBcHBGb3JtQXJyYXlPcHRpb25zIHwgbnVsbFxuICApIHtcbiAgICBzdXBlcihbXSwgb3B0aW9ucyk7Ly8gZW1wdHkgYXJyYXkgbm90IGFsbG93IGJ5IGRlZmF1bHRcbiAgICB0aGlzLnNldEFsbG93RW1wdHlBcnJheSh0b0Jvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLmFsbG93RW1wdHlBcnJheSwgZmFsc2UpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXSWxsIHJlYnVpbGQgdGhlIGFycmF5LCB1c2luZyB0aGUgZ2l2ZW4gdmFsdWVzXG4gICAqIEBwYXJhbSB2YWx1ZXNcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIHNldFZhbHVlKHZhbHVlczogYW55W10sIG9wdGlvbnM/OiB7XG4gICAgb25seVNlbGY/OiBib29sZWFuO1xuICAgIGVtaXRFdmVudD86IGJvb2xlYW47XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd1JldXNlSXRlbSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcblxuICAgICAgLy8gQ2xlYW4gYWxsXG4gICAgICB0aGlzLnJlc2l6ZSgwLCB7ZW1pdEV2ZW50OiBvcHRpb25zPy5lbWl0RXZlbnR9KTtcblxuICAgICAgLy8gUmVjcmVhdGUgZWFjaCBjb250cm9sLCB3aXRoIGEgZGVmYXVsdCB2YWx1ZVxuICAgICAgKHZhbHVlcyB8fCBbXSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNyZWF0ZUNvbnRyb2wodmFsdWUpO1xuXG4gICAgICAgIC8vIEFwcGx5IHBhcmVudCBkaXNhYmxlZCBzdGF0ZSwgYmVmb3JlIHRvIHB1c2ggaXQgaW50byB0aGUgYXJyYXlcbiAgICAgICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWQsIGFmdGVyIGNhbGxpbmcgQXBwRm9ybUFycmF5LnBhdGNoVmFsdWUoKSAoZS5nLiBpbiB0YWJsZSdzIHJvdyB2YWxpZGF0b3IpXG4gICAgICAgIGlmIChkaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pXG4gICAgICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pXG5cbiAgICAgICAgdGhpcy5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5yZXNpemUodmFsdWVzPy5sZW5ndGggfHwgMCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcGF0Y2hWYWx1ZSh2YWx1ZXM6IGFueVtdLCBvcHRpb25zPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYWxsb3dSZXVzZUl0ZW0gPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG5cbiAgICAgIC8vIENsZWFuIGFsbFxuICAgICAgdGhpcy5yZXNpemUoMCwge2VtaXRFdmVudDogb3B0aW9ucz8uZW1pdEV2ZW50fSk7XG5cbiAgICAgIC8vIFJlY3JlYXRlIGVhY2ggY29udHJvbCwgd2l0aCBhIGRlZmF1bHQgdmFsdWVcbiAgICAgICh2YWx1ZXMgfHwgW10pLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKHZhbHVlKTtcblxuICAgICAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgICAgIC8vIFRoaXMgaXMgbmVlZCB0byBhdm9pZCBwYXJlbnQgZm9ybSB0byBiZSBlbmFibGVkLCBhZnRlciBjYWxsaW5nIEFwcEZvcm1BcnJheS5wYXRjaFZhbHVlKCkgKGUuZy4gaW4gdGFibGUncyByb3cgdmFsaWRhdG9yKVxuICAgICAgICBpZiAoZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGVkKSBjb250cm9sLmRpc2FibGUoe2VtaXRFdmVudDogZmFsc2V9KVxuICAgICAgICBlbHNlIGlmICghZGlzYWJsZWQgJiYgY29udHJvbC5kaXNhYmxlZCkgY29udHJvbC5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KVxuXG4gICAgICAgIHRoaXMucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMucmVzaXplKHZhbHVlcz8ubGVuZ3RoIHx8IDAsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICBzdXBlci5wYXRjaFZhbHVlKHZhbHVlcywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmVzaXplKGxlbmd0aDogbnVtYmVyLCBvcHRpb25zPzoge2VtaXRFdmVudD86IGJvb2xlYW59KSB7XG5cbiAgICBpZiAodGhpcy5sZW5ndGggPT09IGxlbmd0aCkgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvXG5cbiAgICBjb25zdCBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7IC8vIFNhdmUgZW5hYmxlZCBoZXJlLCBiZWNhdXNlIHVwZGF0ZSBjYW4gb2NjdXIgZnJvbSByZXNpemVBcnJheSgpXG5cbiAgICAvLyBSZWR1Y2VcbiAgICB3aGlsZSAodGhpcy5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXQodGhpcy5sZW5ndGggLSAxLCB7ZW1pdEV2ZW50OiBvcHRpb25zPy5lbWl0RXZlbnR9KTtcbiAgICB9XG5cbiAgICAvLyBPciBpbmNyZWFzZSBzaXplXG4gICAgd2hpbGUgKHRoaXMubGVuZ3RoIDwgbGVuZ3RoKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5jcmVhdGVDb250cm9sKCk7XG5cbiAgICAgIC8vIEFwcGx5IHBhcmVudCBkaXNhYmxlZCBzdGF0ZSwgYmVmb3JlIHRvIHB1c2ggaXQgaW50byB0aGUgYXJyYXlcbiAgICAgIC8vIFRoaXMgaXMgbmVlZCB0byBhdm9pZCBwYXJlbnQgZm9ybSB0byBiZSBlbmFibGVkLCBhZnRlciBjYWxsaW5nIEFwcEZvcm1BcnJheS5wYXRjaFZhbHVlKCkgKGUuZy4gaW4gdGFibGUncyByb3cgdmFsaWRhdG9yKVxuICAgICAgaWYgKGRpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSlcbiAgICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuXG4gICAgICB0aGlzLnB1c2goY29udHJvbCwgb3B0aW9ucyk7XG4gICAgfVxuXG5cbiAgfVxuXG4gIGRpc2FibGUob3B0cz86IHtcbiAgICBvbmx5U2VsZj86IGJvb2xlYW47XG4gICAgZW1pdEV2ZW50PzogYm9vbGVhbjtcbiAgfSkge1xuICAgIHN1cGVyLmRpc2FibGUob3B0cyk7XG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKGMgPT4gYy5kaXNhYmxlKG9wdHMpKTtcbiAgfVxuXG4gIGVuYWJsZShvcHRzPzoge1xuICAgIG9ubHlTZWxmPzogYm9vbGVhbjtcbiAgICBlbWl0RXZlbnQ/OiBib29sZWFuO1xuICB9KSB7XG4gICAgc3VwZXIuZW5hYmxlKG9wdHMpO1xuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjID0+IGMuZW5hYmxlKG9wdHMpKTtcbiAgfVxuXG4gIGZvckVhY2goaXRlOiAoY29udHJvbDogQykgPT4gdm9pZCApIHtcbiAgICBjb25zdCBzaXplID0gdGhpcy5sZW5ndGg7XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuYXQoaSkgYXMgQztcbiAgICAgIGlmIChjb250cm9sKSBpdGUoY29udHJvbCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB2YWx1ZVxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKiBAZGVwcmVjYXRlZCBVc2UgcHVzaCgpIGluc3RlYWRcbiAgICovXG4gIGFkZCh2YWx1ZT86IFQsIG9wdGlvbnM/OiB7IGVtaXRFdmVudDogYm9vbGVhbiB9KSB7XG4gICAgYWRkVmFsdWVJbkFycmF5KHRoaXMsIHRoaXMuY3JlYXRlQ29udHJvbCwgdGhpcy5lcXVhbHMsIHRoaXMuaXNFbXB0eSwgdmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmVtb3ZlQXQoaW5kZXg6IG51bWJlciwgb3B0aW9ucz86IHtlbWl0RXZlbnQ6IGJvb2xlYW4gfSkge1xuICAgIC8vIERvIG5vdCByZW1vdmUgaWYgbGFzdCBjcml0ZXJpb25cbiAgICBpZiAoIXRoaXMuX2FsbG93RW1wdHlBcnJheSAmJiB0aGlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5jbGVhckF0KGluZGV4LCBvcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzdXBlci5yZW1vdmVBdChpbmRleCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBdChpbmRleDogbnVtYmVyLCBvcHRpb25zPzoge2VtaXRFdmVudDogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuYXQoaW5kZXgpO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoY29udHJvbC52YWx1ZSkpIHJldHVybjsgLy8gc2tpcCAobm90IG5lZWQgdG8gY2xlYXIpXG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgIGNvcHlFbnRpdHkyRm9ybSh7fSwgY29udHJvbCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKFtdLCBvcHRpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250cm9sLnNldFZhbHVlKG51bGwsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBpc0xhc3QoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5sZW5ndGggLSAxKSA9PT0gaW5kZXg7XG4gIH1cblxuICByZW1vdmVBbGxFbXB0eSgpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmNvbnRyb2xzLmZpbmRJbmRleChjID0+IHRoaXMuaXNFbXB0eShjLnZhbHVlKSk7XG4gICAgd2hpbGUoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0KGluZGV4KTtcbiAgICAgIGluZGV4ID0gdGhpcy5jb250cm9scy5maW5kSW5kZXgoYyA9PiB0aGlzLmlzRW1wdHkoYy52YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIGludGVybmFsIC0tICovXG5cbiAgcHJvdGVjdGVkIHNldEFsbG93RW1wdHlBcnJheSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl9hbGxvd0VtcHR5QXJyYXkgPT09IHZhbHVlKSByZXR1cm47IC8vIFNraXAgaWYgc2FtZVxuXG4gICAgdGhpcy5fYWxsb3dFbXB0eUFycmF5ID0gdmFsdWU7XG5cbiAgICAvLyBTZXQgcmVxdWlyZWQgKG9yIHJlc3RlKSBtaW4gbGVuZ3RoIHZhbGlkYXRvclxuICAgIGlmICh0aGlzLl9hbGxvd0VtcHR5QXJyYXkpIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRhdG9ycyh0aGlzLm9wdGlvbnMudmFsaWRhdG9ycyB8fCBudWxsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5vcHRpb25zPy52YWxpZGF0b3JzIHx8IFtdO1xuICAgICAgdGhpcy5zZXRWYWxpZGF0b3JzKFxuICAgICAgICAoQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSA/IHZhbGlkYXRvcnMgOiBbdmFsaWRhdG9yc10pXG4gICAgICAgICAgLmNvbmNhdChTaGFyZWRGb3JtQXJyYXlWYWxpZGF0b3JzLnJlcXVpcmVkQXJyYXlNaW5MZW5ndGgoMSkpKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETyBjb250aW51ZSB0byB1c2UgdGhpcyBraW5kIG9mIGRlY2xhcmF0aW9uID9cbmV4cG9ydCBjbGFzcyBBcHBGb3JtVXRpbHMge1xuICBzdGF0aWMgY29weUVudGl0eTJGb3JtID0gY29weUVudGl0eTJGb3JtO1xuICBzdGF0aWMgZ2V0Rm9ybVZhbHVlRnJvbUVudGl0eSA9IGdldEZvcm1WYWx1ZUZyb21FbnRpdHk7XG4gIHN0YXRpYyBsb2dGb3JtRXJyb3JzID0gbG9nRm9ybUVycm9ycztcbiAgc3RhdGljIGdldENvbnRyb2xGcm9tUGF0aCA9IGdldENvbnRyb2xGcm9tUGF0aDtcbiAgc3RhdGljIGZpbHRlck51bWJlcklucHV0ID0gZmlsdGVyTnVtYmVySW5wdXQ7XG4gIHN0YXRpYyBkaXNhYmxlQ29udHJvbHMgPSBkaXNhYmxlQ29udHJvbHM7XG4gIHN0YXRpYyBzZWxlY3RJbnB1dENvbnRlbnQgPSBzZWxlY3RJbnB1dENvbnRlbnQ7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgbWFya0FsbEFzVG91Y2hlZCgpIGluc3RlYWQgKG5hbWluZyB3YXMgd3JvbmcpXG4gICAqL1xuICBzdGF0aWMgbWFya0FzVG91Y2hlZCA9IG1hcmtBbGxBc1RvdWNoZWQ7XG5cbiAgLyoqXG4gICAqIE1hcmtzIHRoZSBjb250cm9sIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnQgY29udHJvbHMgYXMgdG91Y2hlZC5cbiAgICogU2VlIGFsc286XG4gICAqIC0gYG1hcmtBc1RvdWNoZWQoKWBcbiAgICovXG4gIHN0YXRpYyBtYXJrQWxsQXNUb3VjaGVkID0gbWFya0FsbEFzVG91Y2hlZDtcbiAgc3RhdGljIG1hcmtBc1VudG91Y2hlZCA9IG1hcmtBc1VudG91Y2hlZDtcbiAgc3RhdGljIHdhaXRXaGlsZVBlbmRpbmcgPSB3YWl0V2hpbGVQZW5kaW5nO1xuICBzdGF0aWMgd2FpdElkbGUgPSB3YWl0SWRsZTtcbiAgc3RhdGljIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkgPSB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5O1xuXG4gIHN0YXRpYyBnZXRGb3JtRXJyb3JzID0gZ2V0Rm9ybUVycm9ycztcblxuICBzdGF0aWMgaXNGb3JtKG9iamVjdDogYW55KTogb2JqZWN0IGlzIElBcHBGb3JtIHtcbiAgICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgQXBwRm9ybVByb3ZpZGVyXG4gICAgICB8fCAnZGlydHknIGluIG9iamVjdCAmJiAnZW5hYmxlZCcgaW4gb2JqZWN0ICYmICd2YWxpZCcgaW4gb2JqZWN0O1xuICB9XG5cbiAgLy8gQXJyYXlGb3JtXG4gIHN0YXRpYyBhZGRWYWx1ZUluQXJyYXkgPSBhZGRWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZW1vdmVWYWx1ZUluQXJyYXkgPSByZW1vdmVWYWx1ZUluQXJyYXk7XG4gIHN0YXRpYyByZXNpemVBcnJheSA9IHJlc2l6ZUFycmF5O1xuICBzdGF0aWMgY2xlYXJWYWx1ZUluQXJyYXkgPSBjbGVhclZhbHVlSW5BcnJheTtcblxuICAvLyBDYWxjdWxhdGVkIGZpZWxkc1xuICBzdGF0aWMgY2FsY3VsYXRlZFN1ZmZpeCA9ICdDYWxjdWxhdGVkJztcbiAgc3RhdGljIGlzQ29udHJvbEhhc0lucHV0ID0gaXNDb250cm9sSGFzSW5wdXQ7XG4gIHN0YXRpYyBzZXRDYWxjdWxhdGVkVmFsdWUgPSBzZXRDYWxjdWxhdGVkVmFsdWU7XG4gIHN0YXRpYyByZXNldENhbGN1bGF0ZWRWYWx1ZSA9IHJlc2V0Q2FsY3VsYXRlZFZhbHVlO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRyb2xIYXNJbnB1dChjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2x9LCBjb250cm9sTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIHRydWUgaWYgdGhlIGNvbnRyb2wgaGFzIGEgdmFsdWUgYW5kIGl0cyAnY2FsY3VsYXRlZCcgY29udHJvbCBoYXMgdGhlIHZhbHVlICdmYWxzZSdcbiAgcmV0dXJuIGNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSAmJiAhdG9Cb29sZWFuKGNvbnRyb2xzW2NvbnRyb2xOYW1lICsgQXBwRm9ybVV0aWxzLmNhbGN1bGF0ZWRTdWZmaXhdLnZhbHVlLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhdGVkVmFsdWUoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sfSwgY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAvLyBzZXQgdmFsdWUgdG8gY29udHJvbFxuICBjb250cm9sc1tjb250cm9sTmFtZV0uc2V0VmFsdWUocm91bmQodmFsdWUpKTtcbiAgLy8gc2V0ICdjYWxjdWxhdGVkJyBjb250cm9sIHRvICd0cnVlJ1xuICBjb250cm9sc1tjb250cm9sTmFtZSArIEFwcEZvcm1VdGlscy5jYWxjdWxhdGVkU3VmZml4XS5zZXRWYWx1ZSh0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0Q2FsY3VsYXRlZFZhbHVlKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEFic3RyYWN0Q29udHJvbH0sIGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKCFpc0NvbnRyb2xIYXNJbnB1dChjb250cm9scywgY29udHJvbE5hbWUpKSB7XG4gICAgLy8gc2V0IHVuZGVmaW5lZCBvbmx5IGlmIGNvbnRyb2wgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgQXBwRm9ybVV0aWxzLnNldENhbGN1bGF0ZWRWYWx1ZShjb250cm9scywgY29udHJvbE5hbWUsIHVuZGVmaW5lZCk7XG4gIH1cbn1cblxuIl19
|