@signaltree/ng-forms 4.0.12 → 4.0.16
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/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Angular 20 signal forms meet SignalTree. `@signaltree/ng-forms` keeps your form
|
|
|
10
10
|
pnpm add @signaltree/core @signaltree/ng-forms
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
>
|
|
13
|
+
> This package supports Angular 17+ with TypeScript 5.5+. Angular 17-19 support uses a legacy bridge that will be deprecated when Angular 21 is released. For the best experience, upgrade to Angular 20.3+ to use native Signal Forms.
|
|
14
14
|
|
|
15
15
|
## Quick start
|
|
16
16
|
|
|
@@ -97,6 +97,31 @@ The returned `FormTree` exposes:
|
|
|
97
97
|
- **Signal ↔ Observable bridge**: Convert signals to RxJS streams for interoperability
|
|
98
98
|
- **Template-driven adapter**: `SignalValueDirective` bridges standalone signals with `ngModel`
|
|
99
99
|
|
|
100
|
+
## Signal Forms (Angular 20+)
|
|
101
|
+
|
|
102
|
+
`@signaltree/ng-forms` now prefers Angular's experimental Signal Forms `connect()` API when available.
|
|
103
|
+
|
|
104
|
+
- Leaves in a SignalTree are native `WritableSignal<T>` and can be connected directly
|
|
105
|
+
- For object slices, convert to a `WritableSignal<T>` via `toWritableSignal()` from `@signaltree/core`
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
import { toWritableSignal } from '@signaltree/core';
|
|
109
|
+
|
|
110
|
+
const values = createFormTree({
|
|
111
|
+
user: { name: '', email: '' },
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Connect leaves directly
|
|
115
|
+
nameControl.connect(values.$.user.name);
|
|
116
|
+
emailControl.connect(values.$.user.email);
|
|
117
|
+
|
|
118
|
+
// Or connect a whole slice
|
|
119
|
+
const userSignal = toWritableSignal(values.values.$.user);
|
|
120
|
+
userGroupControl.connect(userSignal);
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Angular 20.3+ is preferred for native Signal Forms `connect()`. Angular 17-19 is supported via a legacy bridge that will be deprecated when Angular 21 is released.
|
|
124
|
+
|
|
100
125
|
## Form tree configuration
|
|
101
126
|
|
|
102
127
|
```typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signaltree-ng-forms-src-audit.mjs","sources":["../tmp-esm2022/src/audit/audit.js"],"sourcesContent":["import { getChanges } from '@signaltree/shared';\nexport function createAuditMiddleware(auditLog, getMetadata) {\n return {\n id: 'audit',\n after: (_action, _payload, oldState, newState) => {\n const changes = getChanges(oldState, newState);\n if (Object.keys(changes).length > 0) {\n auditLog.push({\n timestamp: Date.now(),\n changes,\n metadata: getMetadata?.(),\n });\n }\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
{"version":3,"file":"signaltree-ng-forms-src-audit.mjs","sources":["../tmp-esm2022/src/audit/audit.js"],"sourcesContent":["import { getChanges } from '@signaltree/shared';\nexport function createAuditMiddleware(auditLog, getMetadata) {\n return {\n id: 'audit',\n after: (_action, _payload, oldState, newState) => {\n const changes = getChanges(oldState, newState);\n if (Object.keys(changes).length > 0) {\n auditLog.push({\n timestamp: Date.now(),\n changes,\n metadata: getMetadata?.(),\n });\n }\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1mb3Jtcy9zcmMvYXVkaXQvYXVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBd0RoRCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLFFBQXlCLEVBQ3pCLFdBQTZDO0lBRTdDLE9BQU87UUFDTCxFQUFFLEVBQUUsT0FBTztRQUNYLEtBQUssRUFBRSxDQUFDLE9BQWUsRUFBRSxRQUFpQixFQUFFLFFBQVcsRUFBRSxRQUFXLEVBQUUsRUFBRTtZQUN0RSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9DLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ3JCLE9BQU87b0JBQ1AsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0Q2hhbmdlcyB9IGZyb20gJ0BzaWduYWx0cmVlL3NoYXJlZCc7XG5cbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gJ0BzaWduYWx0cmVlL2NvcmUnO1xuLyoqXG4gKiBBdWRpdCBsb2cgZW50cnkgcmVjb3JkaW5nIGZvcm0gY2hhbmdlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0RW50cnk8VCA9IHVua25vd24+IHtcbiAgLyoqIFRpbWVzdGFtcCB3aGVuIGNoYW5nZSBvY2N1cnJlZCAqL1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgLyoqIENoYW5nZWQgZmllbGRzIGFuZCB0aGVpciBuZXcgdmFsdWVzICovXG4gIGNoYW5nZXM6IFBhcnRpYWw8VD47XG4gIC8qKiBPcHRpb25hbCBtZXRhZGF0YSBhYm91dCB0aGUgY2hhbmdlICovXG4gIG1ldGFkYXRhPzoge1xuICAgIC8qKiBVc2VyIElEIHdobyBtYWRlIHRoZSBjaGFuZ2UgKi9cbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgLyoqIFNvdXJjZSBvZiB0aGUgY2hhbmdlIChlLmcuLCAndWknLCAnYXBpJywgJ2ltcG9ydCcpICovXG4gICAgc291cmNlPzogc3RyaW5nO1xuICAgIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiAqL1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXVkaXQgbWlkZGxld2FyZSBmb3IgZm9ybSBjaGFuZ2UgdHJhY2tpbmcuXG4gKiBBdXRvbWF0aWNhbGx5IGxvZ3MgYWxsIGZvcm0gc3RhdGUgY2hhbmdlcyB3aXRoIHRpbWVzdGFtcHMgYW5kIG9wdGlvbmFsIG1ldGFkYXRhLlxuICpcbiAqIEBwYXJhbSBhdWRpdExvZyAtIEFycmF5IHRvIGNvbGxlY3QgYXVkaXQgZW50cmllc1xuICogQHBhcmFtIGdldE1ldGFkYXRhIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gcHJvdmlkZSBtZXRhZGF0YSBmb3IgZWFjaCBjaGFuZ2VcbiAqIEByZXR1cm5zIE1pZGRsZXdhcmUgdGhhdCByZWNvcmRzIGZvcm0gY2hhbmdlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBhdWRpdExvZzogQXVkaXRFbnRyeTxNeUZvcm1EYXRhPltdID0gW107XG4gKlxuICogY29uc3QgZm9ybSA9IGNyZWF0ZUZvcm1UcmVlKFxuICogICB7IG5hbWU6ICcnLCBlbWFpbDogJycgfSxcbiAqICAge1xuICogICAgIG1pZGRsZXdhcmU6IFtcbiAqICAgICAgIGNyZWF0ZUF1ZGl0TWlkZGxld2FyZShhdWRpdExvZywgKCkgPT4gKHtcbiAqICAgICAgICAgdXNlcklkOiBjdXJyZW50VXNlci5pZCxcbiAqICAgICAgICAgc291cmNlOiAnZm9ybS1lZGl0b3InXG4gKiAgICAgICB9KSlcbiAqICAgICBdXG4gKiAgIH1cbiAqICk7XG4gKlxuICogZm9ybS4kLm5hbWUuc2V0KCdKb2huJyk7XG4gKlxuICogY29uc29sZS5sb2coYXVkaXRMb2cpO1xuICogLy8gW3tcbiAqIC8vICAgdGltZXN0YW1wOiAxMjM0NTY3ODkwLFxuICogLy8gICBjaGFuZ2VzOiB7IG5hbWU6ICdKb2huJyB9LFxuICogLy8gICBtZXRhZGF0YTogeyB1c2VySWQ6ICcxMjMnLCBzb3VyY2U6ICdmb3JtLWVkaXRvcicgfVxuICogLy8gfV1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaXRNaWRkbGV3YXJlPFQ+KFxuICBhdWRpdExvZzogQXVkaXRFbnRyeTxUPltdLFxuICBnZXRNZXRhZGF0YT86ICgpID0+IEF1ZGl0RW50cnk8VD5bJ21ldGFkYXRhJ11cbik6IE1pZGRsZXdhcmU8VD4ge1xuICByZXR1cm4ge1xuICAgIGlkOiAnYXVkaXQnLFxuICAgIGFmdGVyOiAoX2FjdGlvbjogc3RyaW5nLCBfcGF5bG9hZDogdW5rbm93biwgb2xkU3RhdGU6IFQsIG5ld1N0YXRlOiBUKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VzID0gZ2V0Q2hhbmdlcyhvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGNoYW5nZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXVkaXRMb2cucHVzaCh7XG4gICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGNoYW5nZXMsXG4gICAgICAgICAgbWV0YWRhdGE6IGdldE1ldGFkYXRhPy4oKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiJdfQ=="],"names":[],"mappings":";;AACO,SAAS,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC7D,IAAI,OAAO;AACX,QAAQ,EAAE,EAAE,OAAO;AACnB,QAAQ,KAAK,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAC1D,YAAY,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC1D,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,gBAAgB,QAAQ,CAAC,IAAI,CAAC;AAC9B,oBAAoB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACzC,oBAAoB,OAAO;AAC3B,oBAAoB,QAAQ,EAAE,WAAW,IAAI;AAC7C,iBAAiB,CAAC;AAClB,YAAY;AACZ,QAAQ,CAAC;AACT,KAAK;AACL;;;;"}
|
|
@@ -386,6 +386,19 @@ function createAbstractControl(value, path, validators, asyncValidators) {
|
|
|
386
386
|
});
|
|
387
387
|
}
|
|
388
388
|
function connectControlAndSignal(control, valueSignal, cleanupCallbacks, fieldConfig) {
|
|
389
|
+
const maybeConnect = control.connect;
|
|
390
|
+
if (typeof maybeConnect === 'function') {
|
|
391
|
+
try {
|
|
392
|
+
const res = maybeConnect.call(control, valueSignal);
|
|
393
|
+
if (res &&
|
|
394
|
+
typeof res.unsubscribe === 'function') {
|
|
395
|
+
cleanupCallbacks.push(() => res.unsubscribe());
|
|
396
|
+
}
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
}
|
|
401
|
+
}
|
|
389
402
|
let updatingFromControl = false;
|
|
390
403
|
let updatingFromSignal = false;
|
|
391
404
|
let versionCounter = 0;
|
|
@@ -453,6 +466,19 @@ function connectControlAndSignal(control, valueSignal, cleanupCallbacks, fieldCo
|
|
|
453
466
|
});
|
|
454
467
|
}
|
|
455
468
|
function connectFormArrayAndSignal(formArray, arraySignal, path, validators, asyncValidators, cleanupCallbacks, connectControlRecursive) {
|
|
469
|
+
const maybeConnect = formArray.connect;
|
|
470
|
+
if (typeof maybeConnect === 'function') {
|
|
471
|
+
try {
|
|
472
|
+
const res = maybeConnect.call(formArray, arraySignal);
|
|
473
|
+
if (res &&
|
|
474
|
+
typeof res.unsubscribe === 'function') {
|
|
475
|
+
cleanupCallbacks.push(() => res.unsubscribe());
|
|
476
|
+
}
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
catch {
|
|
480
|
+
}
|
|
481
|
+
}
|
|
456
482
|
let updatingFromControl = false;
|
|
457
483
|
let updatingFromSignal = false;
|
|
458
484
|
const originalSet = arraySignal.set.bind(arraySignal);
|
|
@@ -809,8 +835,8 @@ class SignalValueDirective {
|
|
|
809
835
|
setDisabledState(isDisabled) {
|
|
810
836
|
this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);
|
|
811
837
|
}
|
|
812
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
813
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
838
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: SignalValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
839
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.11", type: SignalValueDirective, isStandalone: true, selector: "[signalTreeSignalValue]", inputs: { signalTreeSignalValue: "signalTreeSignalValue" }, outputs: { signalTreeSignalValueChange: "signalTreeSignalValueChange" }, host: { listeners: { "input": "handleChange($event)", "change": "handleChange($event)", "blur": "handleBlur()" } }, providers: [
|
|
814
840
|
{
|
|
815
841
|
provide: NG_VALUE_ACCESSOR,
|
|
816
842
|
useExisting: forwardRef(() => SignalValueDirective),
|
|
@@ -818,7 +844,7 @@ class SignalValueDirective {
|
|
|
818
844
|
},
|
|
819
845
|
], ngImport: i0 });
|
|
820
846
|
}
|
|
821
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
847
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.11", ngImport: i0, type: SignalValueDirective, decorators: [{
|
|
822
848
|
type: Directive,
|
|
823
849
|
args: [{
|
|
824
850
|
selector: '[signalTreeSignalValue]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signaltree-ng-forms.mjs","sources":["../tmp-esm2022/core/ng-forms.js","../tmp-esm2022/core/validators.js","../tmp-esm2022/core/async-validators.js","../tmp-esm2022/history/history.js"],"sourcesContent":["import { computed, effect, inject, signal, DestroyRef, Directive, ElementRef, Renderer2, HostListener, Input, Output, EventEmitter, isSignal, forwardRef, } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport { signalTree } from '@signaltree/core';\nimport { deepClone, matchPath, mergeDeep, parsePath } from '@signaltree/shared';\nimport { firstValueFrom, isObservable } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class FormValidationError extends Error {\n errors;\n asyncErrors;\n constructor(errors, asyncErrors) {\n super('Form validation failed');\n this.errors = errors;\n this.asyncErrors = asyncErrors;\n this.name = 'FormValidationError';\n }\n}\nconst SYNC_ERROR_KEY = 'signaltree';\nconst ASYNC_ERROR_KEY = 'signaltreeAsync';\nexport function createFormTree(initialValues, config = {}) {\n const { validators: baseValidators = {}, asyncValidators: baseAsyncValidators = {}, destroyRef: providedDestroyRef, fieldConfigs = {}, conditionals = [], persistKey, storage, persistDebounceMs = 100, validationBatchMs = 0, ...treeConfig } = config;\n const syncValidators = normalizeSyncValidators(baseValidators, fieldConfigs);\n const asyncValidators = normalizeAsyncValidators(baseAsyncValidators, fieldConfigs);\n const { values: hydratedInitialValues } = hydrateInitialValues(initialValues, persistKey, storage);\n const initialSnapshot = deepClone(hydratedInitialValues);\n const valuesTree = signalTree(hydratedInitialValues, treeConfig);\n assertTreeNode(valuesTree.state);\n const flattenedState = valuesTree.state;\n enhanceArraysRecursively(flattenedState);\n const formGroup = createAbstractControl(hydratedInitialValues, '', syncValidators, asyncValidators);\n const destroyRef = providedDestroyRef ?? tryInjectDestroyRef();\n const cleanupCallbacks = [];\n const errors = signal({}, ...(ngDevMode ? [{ debugName: \"errors\" }] : []));\n const asyncErrors = signal({}, ...(ngDevMode ? [{ debugName: \"asyncErrors\" }] : []));\n const touched = signal({}, ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const asyncValidating = signal({}, ...(ngDevMode ? [{ debugName: \"asyncValidating\" }] : []));\n const dirty = signal(formGroup.dirty, ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const valid = signal(formGroup.valid && !formGroup.pending, ...(ngDevMode ? [{ debugName: \"valid\" }] : []));\n const submitting = signal(false, ...(ngDevMode ? [{ debugName: \"submitting\" }] : []));\n const refreshRunner = () => {\n const snapshot = collectControlSnapshot(formGroup);\n errors.set(snapshot.syncErrors);\n asyncErrors.set(snapshot.asyncErrors);\n touched.set(snapshot.touched);\n asyncValidating.set(snapshot.pending);\n dirty.set(formGroup.dirty);\n valid.set(formGroup.valid && !formGroup.pending);\n };\n let refreshTimer = null;\n const refreshAggregates = (immediate = false) => {\n if (immediate || validationBatchMs <= 0) {\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n refreshRunner();\n return;\n }\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n refreshTimer = setTimeout(() => {\n refreshTimer = null;\n refreshRunner();\n }, validationBatchMs);\n };\n refreshAggregates(true);\n const persistController = createPersistController(formGroup, persistKey, storage, persistDebounceMs, cleanupCallbacks);\n persistController.persistImmediately();\n const fieldErrorKeys = new Set([\n ...Object.keys(syncValidators),\n ...Object.keys(asyncValidators),\n ]);\n const fieldErrors = {};\n const fieldAsyncErrors = {};\n fieldErrorKeys.forEach((fieldPath) => {\n fieldErrors[fieldPath] = computed(() => errors()[fieldPath]);\n fieldAsyncErrors[fieldPath] = computed(() => asyncErrors()[fieldPath]);\n });\n const fieldConfigLookup = (path) => resolveFieldConfig(fieldConfigs, path);\n const connectControlRecursive = (control, path) => {\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n connectControlRecursive(child, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n const arraySignal = getSignalAtPath(flattenedState, path);\n if (arraySignal) {\n connectFormArrayAndSignal(control, arraySignal, path, syncValidators, asyncValidators, cleanupCallbacks, connectControlRecursive);\n }\n control.controls.forEach((child, index) => {\n connectControlRecursive(child, joinPath(path, String(index)));\n });\n return;\n }\n const signalAtPath = getSignalAtPath(flattenedState, path);\n if (signalAtPath) {\n connectControlAndSignal(control, signalAtPath, cleanupCallbacks, fieldConfigLookup(path));\n }\n };\n connectControlRecursive(formGroup, '');\n const conditionalState = new Map();\n const applyConditionals = conditionals.length > 0\n ? () => {\n const values = formGroup.getRawValue();\n conditionals.forEach(({ when, fields }) => {\n let visible = true;\n try {\n visible = when(values);\n }\n catch {\n visible = true;\n }\n fields.forEach((fieldPath) => {\n const control = formGroup.get(fieldPath);\n if (!control) {\n return;\n }\n const previous = conditionalState.get(fieldPath);\n if (previous === visible) {\n return;\n }\n conditionalState.set(fieldPath, visible);\n if (visible) {\n control.enable({ emitEvent: false });\n }\n else {\n control.disable({ emitEvent: false });\n }\n });\n });\n }\n : () => undefined;\n applyConditionals();\n const aggregateSubscriptions = [];\n aggregateSubscriptions.push(formGroup.valueChanges.subscribe(() => {\n refreshAggregates();\n persistController.schedulePersist();\n applyConditionals();\n }));\n aggregateSubscriptions.push(formGroup.statusChanges.subscribe(() => refreshAggregates()));\n if (formGroup.events) {\n aggregateSubscriptions.push(formGroup.events.subscribe(() => refreshAggregates()));\n }\n cleanupCallbacks.push(() => {\n aggregateSubscriptions.forEach((sub) => sub.unsubscribe());\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n });\n if (destroyRef) {\n destroyRef.onDestroy(() => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n });\n }\n const setValue = (field, value) => {\n const targetSignal = getSignalAtPath(flattenedState, field);\n const control = formGroup.get(field);\n if (targetSignal && 'set' in targetSignal) {\n targetSignal.set(value);\n }\n else if (control) {\n control.setValue(value, { emitEvent: true });\n }\n if (control) {\n const untypedControl = control;\n untypedControl.markAsTouched();\n untypedControl.markAsDirty();\n untypedControl.updateValueAndValidity({ emitEvent: true });\n }\n refreshAggregates(true);\n persistController.schedulePersist();\n };\n const setValues = (values) => {\n Object.entries(values).forEach(([key, value]) => {\n setValue(key, value);\n });\n };\n const reset = () => {\n formGroup.reset(initialSnapshot);\n submitting.set(false);\n refreshAggregates(true);\n persistController.persistImmediately();\n applyConditionals();\n };\n const validate = async (field) => {\n if (field) {\n const control = formGroup.get(field);\n if (!control) {\n return;\n }\n control.markAsTouched();\n control.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(control);\n refreshAggregates(true);\n return;\n }\n formGroup.markAllAsTouched();\n formGroup.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(formGroup);\n refreshAggregates(true);\n };\n const submit = async (submitFn) => {\n submitting.set(true);\n try {\n await validate();\n if (!valid()) {\n throw new FormValidationError(errors(), asyncErrors());\n }\n const currentValues = formGroup.getRawValue();\n const result = await submitFn(currentValues);\n return result;\n }\n finally {\n submitting.set(false);\n refreshAggregates(true);\n }\n };\n const destroy = () => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n };\n const formTree = {\n state: flattenedState,\n $: flattenedState,\n form: formGroup,\n errors,\n asyncErrors,\n touched,\n asyncValidating,\n dirty,\n valid,\n submitting,\n unwrap: () => valuesTree(),\n setValue,\n setValues,\n reset,\n submit,\n validate,\n getFieldError: (field) => fieldErrors[field] || computed(() => undefined),\n getFieldAsyncError: (field) => fieldAsyncErrors[field] || computed(() => undefined),\n getFieldTouched: (field) => computed(() => formGroup.get(field)?.touched ?? false),\n isFieldValid: (field) => computed(() => {\n const control = formGroup.get(field);\n return !!control && control.valid && !control.pending;\n }),\n isFieldAsyncValidating: (field) => computed(() => !!formGroup.get(field)?.pending),\n fieldErrors,\n fieldAsyncErrors,\n values: valuesTree,\n destroy,\n };\n return formTree;\n}\nexport function createVirtualFormArray(items, visibleRange, controlFactory = (value) => new FormControl(value)) {\n const start = Math.max(0, visibleRange.start);\n const end = Math.max(start, visibleRange.end);\n const controls = items\n .slice(start, end)\n .map((item, offset) => controlFactory(item, start + offset));\n return new FormArray(controls);\n}\nfunction enhanceArraysRecursively(obj, visited = new WeakSet()) {\n if (visited.has(obj)) {\n return;\n }\n visited.add(obj);\n for (const key in obj) {\n const value = obj[key];\n if (isSignal(value)) {\n const signalValue = value();\n if (Array.isArray(signalValue)) {\n obj[key] = enhanceArray(value);\n }\n }\n else if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)) {\n enhanceArraysRecursively(value, visited);\n }\n }\n}\nconst enhanceArray = (arraySignal) => {\n const enhanced = arraySignal;\n enhanced.push = (item) => {\n arraySignal.update((arr) => [...arr, item]);\n };\n enhanced.removeAt = (index) => {\n arraySignal.update((arr) => arr.filter((_, i) => i !== index));\n };\n enhanced.setAt = (index, value) => {\n arraySignal.update((arr) => arr.map((item, i) => (i === index ? value : item)));\n };\n enhanced.insertAt = (index, item) => {\n arraySignal.update((arr) => [\n ...arr.slice(0, index),\n item,\n ...arr.slice(index),\n ]);\n };\n enhanced.move = (from, to) => {\n arraySignal.update((arr) => {\n const newArr = [...arr];\n const [item] = newArr.splice(from, 1);\n if (item !== undefined) {\n newArr.splice(to, 0, item);\n }\n return newArr;\n });\n };\n enhanced.clear = () => {\n arraySignal.set([]);\n };\n return enhanced;\n};\nfunction getSignalAtPath(node, path) {\n if (!path) {\n return null;\n }\n const segments = parsePath(path);\n let current = node;\n for (const segment of segments) {\n if (!current || typeof current !== 'object') {\n return null;\n }\n current = current[segment];\n }\n if (isSignal(current)) {\n return current;\n }\n return null;\n}\nfunction joinPath(parent, segment) {\n return parent ? `${parent}.${segment}` : segment;\n}\nfunction wrapSyncValidator(validator) {\n return (control) => {\n const result = validator(control.value);\n return result ? { [SYNC_ERROR_KEY]: result } : null;\n };\n}\nfunction wrapAsyncValidator(validator) {\n return async (control) => {\n try {\n const maybeAsync = validator(control.value);\n const resolved = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n return resolved ? { [ASYNC_ERROR_KEY]: resolved } : null;\n }\n catch {\n return { [ASYNC_ERROR_KEY]: 'Validation error' };\n }\n };\n}\nfunction createAbstractControl(value, path, validators, asyncValidators) {\n const syncValidator = findValidator(validators, path);\n const asyncValidator = findValidator(asyncValidators, path);\n const syncFns = syncValidator\n ? [wrapSyncValidator(syncValidator)]\n : undefined;\n const asyncFns = asyncValidator\n ? [wrapAsyncValidator(asyncValidator)]\n : undefined;\n if (Array.isArray(value)) {\n const controls = value.map((item, index) => createAbstractControl(item, joinPath(path, String(index)), validators, asyncValidators));\n return new FormArray(controls, syncFns, asyncFns);\n }\n if (isPlainObject(value)) {\n const controls = {};\n for (const [key, child] of Object.entries(value)) {\n controls[key] = createAbstractControl(child, joinPath(path, key), validators, asyncValidators);\n }\n return new FormGroup(controls, {\n validators: syncFns,\n asyncValidators: asyncFns,\n });\n }\n return new FormControl(value, {\n validators: syncFns,\n asyncValidators: asyncFns,\n nonNullable: false,\n });\n}\nfunction connectControlAndSignal(control, valueSignal, cleanupCallbacks, fieldConfig) {\n let updatingFromControl = false;\n let updatingFromSignal = false;\n let versionCounter = 0;\n let lastControlVersion = 0;\n let controlDebounceTimer = null;\n const debounceMs = fieldConfig?.debounceMs ?? 0;\n const originalSet = valueSignal.set.bind(valueSignal);\n const originalUpdate = valueSignal.update.bind(valueSignal);\n const applyControlValue = (value) => {\n updatingFromSignal = true;\n if (!Object.is(control.value, value)) {\n const untypedControl = control;\n untypedControl.setValue(value, { emitEvent: true });\n untypedControl.markAsDirty();\n }\n updatingFromSignal = false;\n };\n valueSignal.set = (value) => {\n const currentVersion = ++versionCounter;\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n if (lastControlVersion > currentVersion) {\n return;\n }\n applyControlValue(value);\n };\n valueSignal.update = (updater) => {\n const next = updater(valueSignal());\n valueSignal.set(next);\n };\n const pushUpdateFromControl = (value) => {\n updatingFromControl = true;\n lastControlVersion = ++versionCounter;\n originalSet(value);\n updatingFromControl = false;\n };\n const handleControlChange = (value) => {\n if (updatingFromSignal) {\n return;\n }\n if (debounceMs > 0) {\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n controlDebounceTimer = setTimeout(() => {\n controlDebounceTimer = null;\n pushUpdateFromControl(value);\n }, debounceMs);\n return;\n }\n pushUpdateFromControl(value);\n };\n const subscription = control.valueChanges.subscribe((value) => {\n handleControlChange(value);\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n valueSignal.set = originalSet;\n valueSignal.update = originalUpdate;\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n });\n}\nfunction connectFormArrayAndSignal(formArray, arraySignal, path, validators, asyncValidators, cleanupCallbacks, connectControlRecursive) {\n let updatingFromControl = false;\n let updatingFromSignal = false;\n const originalSet = arraySignal.set.bind(arraySignal);\n const originalUpdate = arraySignal.update.bind(arraySignal);\n arraySignal.set = (value) => {\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n updatingFromSignal = true;\n syncFormArrayFromValue(formArray, value, path, validators, asyncValidators, connectControlRecursive);\n formArray.markAsDirty();\n updatingFromSignal = false;\n };\n arraySignal.update = (updater) => {\n const next = updater(arraySignal());\n arraySignal.set(next);\n };\n const subscription = formArray.valueChanges.subscribe((value) => {\n if (updatingFromSignal) {\n return;\n }\n updatingFromControl = true;\n originalSet(value);\n updatingFromControl = false;\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n arraySignal.set = originalSet;\n arraySignal.update = originalUpdate;\n });\n syncFormArrayFromValue(formArray, arraySignal(), path, validators, asyncValidators, connectControlRecursive);\n}\nfunction syncFormArrayFromValue(formArray, nextValue, path, validators, asyncValidators, connectControlRecursive) {\n if (!Array.isArray(nextValue)) {\n nextValue = [];\n }\n while (formArray.length > nextValue.length) {\n formArray.removeAt(formArray.length - 1);\n }\n nextValue.forEach((item, index) => {\n const childPath = joinPath(path, String(index));\n const existing = formArray.at(index);\n if (!existing) {\n const control = createAbstractControl(item, childPath, validators, asyncValidators);\n formArray.insert(index, control);\n connectControlRecursive(control, childPath);\n return;\n }\n if (existing instanceof FormArray) {\n syncFormArrayFromValue(existing, Array.isArray(item) ? item : [], childPath, validators, asyncValidators, connectControlRecursive);\n return;\n }\n if (existing instanceof FormGroup) {\n if (isPlainObject(item)) {\n existing.setValue(item, {\n emitEvent: false,\n });\n }\n return;\n }\n if (!Object.is(existing.value, item)) {\n const untypedExisting = existing;\n untypedExisting.setValue(item, { emitEvent: false });\n }\n });\n}\nfunction collectControlSnapshot(control) {\n const snapshot = {\n syncErrors: {},\n asyncErrors: {},\n touched: {},\n pending: {},\n };\n traverseControls(control, (currentPath, currentControl) => {\n if (!currentPath) {\n return;\n }\n if (currentControl.touched) {\n snapshot.touched[currentPath] = true;\n }\n if (currentControl.pending) {\n snapshot.pending[currentPath] = true;\n }\n const errors = currentControl.errors;\n if (!errors) {\n return;\n }\n const syncMessage = errors[SYNC_ERROR_KEY];\n if (typeof syncMessage === 'string') {\n snapshot.syncErrors[currentPath] = syncMessage;\n }\n const asyncMessage = errors[ASYNC_ERROR_KEY];\n if (typeof asyncMessage === 'string') {\n snapshot.asyncErrors[currentPath] = asyncMessage;\n }\n }, '');\n return snapshot;\n}\nfunction traverseControls(control, visitor, path = '') {\n visitor(path, control);\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n traverseControls(child, visitor, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n control.controls.forEach((child, index) => {\n traverseControls(child, visitor, joinPath(path, String(index)));\n });\n }\n}\nfunction waitForPending(control) {\n if (!control.pending) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const subscription = control.statusChanges.subscribe(() => {\n if (!control.pending) {\n subscription.unsubscribe();\n resolve();\n }\n });\n });\n}\nfunction isPlainObject(value) {\n return (!!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === '[object Object]');\n}\nfunction tryInjectDestroyRef() {\n try {\n return inject(DestroyRef);\n }\n catch {\n return null;\n }\n}\nfunction normalizeSyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.validators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = (value) => {\n for (const validator of validators) {\n const result = validator(value);\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction normalizeAsyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.asyncValidators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = async (value) => {\n for (const validator of validators) {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction toValidatorArray(input) {\n if (!input) {\n return [];\n }\n if (Array.isArray(input)) {\n return input;\n }\n return Object.values(input);\n}\nfunction hydrateInitialValues(initialValues, persistKey, storage) {\n const baseClone = deepClone(initialValues);\n if (!persistKey || !storage) {\n return { values: baseClone };\n }\n try {\n const storedRaw = storage.getItem(persistKey);\n if (!storedRaw) {\n return { values: baseClone };\n }\n const parsed = JSON.parse(storedRaw);\n const merged = mergeDeep(baseClone, parsed);\n return { values: merged };\n }\n catch {\n return { values: baseClone };\n }\n}\nfunction assertTreeNode(state) {\n if (!state || typeof state !== 'object') {\n throw new Error('Invalid state structure for form tree');\n }\n}\nfunction resolveFieldConfig(fieldConfigs, path) {\n if (fieldConfigs[path]) {\n return fieldConfigs[path];\n }\n const keys = Object.keys(fieldConfigs);\n let match;\n for (const key of keys) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!match || match.key.length < key.length) {\n match = { key, config: fieldConfigs[key] };\n }\n }\n }\n if (match) {\n return match.config;\n }\n return fieldConfigs['*'];\n}\nfunction findValidator(map, path) {\n if (map[path]) {\n return map[path];\n }\n let candidate;\n for (const key of Object.keys(map)) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!candidate || candidate.key.length < key.length) {\n candidate = { key, value: map[key] };\n }\n }\n }\n if (candidate) {\n return candidate.value;\n }\n return map['*'];\n}\nfunction createPersistController(formGroup, persistKey, storage, debounceMs, cleanupCallbacks) {\n if (!persistKey || !storage) {\n return {\n schedulePersist: () => undefined,\n persistImmediately: () => undefined,\n };\n }\n let timer = null;\n const persist = () => {\n try {\n const payload = JSON.stringify(formGroup.getRawValue());\n storage.setItem(persistKey, payload);\n }\n catch {\n }\n };\n const schedulePersist = () => {\n if (debounceMs <= 0) {\n persist();\n return;\n }\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n timer = null;\n persist();\n }, debounceMs);\n };\n cleanupCallbacks.push(() => {\n if (timer) {\n clearTimeout(timer);\n }\n });\n return {\n schedulePersist,\n persistImmediately: persist,\n };\n}\nexport class SignalValueDirective {\n signalTreeSignalValue;\n signalTreeSignalValueChange = new EventEmitter();\n elementRef = inject(ElementRef);\n renderer = inject(Renderer2);\n onChange = () => {\n };\n onTouched = () => {\n };\n ngOnInit() {\n effect(() => {\n const value = this.signalTreeSignalValue();\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n });\n }\n handleChange(event) {\n const target = event.target;\n const value = target?.value;\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n this.signalTreeSignalValueChange.emit(value);\n this.onChange(value);\n }\n }\n handleBlur() {\n this.onTouched();\n }\n writeValue(value) {\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n }\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.7\", ngImport: i0, type: SignalValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.7\", type: SignalValueDirective, isStandalone: true, selector: \"[signalTreeSignalValue]\", inputs: { signalTreeSignalValue: \"signalTreeSignalValue\" }, outputs: { signalTreeSignalValueChange: \"signalTreeSignalValueChange\" }, host: { listeners: { \"input\": \"handleChange($event)\", \"change\": \"handleChange($event)\", \"blur\": \"handleBlur()\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.7\", ngImport: i0, type: SignalValueDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[signalTreeSignalValue]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ],\n standalone: true,\n }]\n }], propDecorators: { signalTreeSignalValue: [{\n type: Input\n }], signalTreeSignalValueChange: [{\n type: Output\n }], handleChange: [{\n type: HostListener,\n args: ['input', ['$event']]\n }, {\n type: HostListener,\n args: ['change', ['$event']]\n }], handleBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\nexport const SIGNAL_FORM_DIRECTIVES = [SignalValueDirective];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1mb3Jtcy9zcmMvY29yZS9uZy1mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUdOLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosUUFBUSxFQUNSLFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEdBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7O0FBc0c5RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUUxQjtJQUNBO0lBRmxCLFlBQ2tCLE1BQThCLEVBQzlCLFdBQW1DO1FBRW5ELEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBSGhCLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUduRCxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUtELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNwQyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQVUxQyxNQUFNLFVBQVUsY0FBYyxDQUM1QixhQUFnQixFQUNoQixTQUE2QixFQUFFO0lBRS9CLE1BQU0sRUFD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RUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDOzRCQUNuRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxVQUFVLEVBQUUsSUFBSTtpQkFDakI7O3NCQUVFLEtBQUs7O3NCQUNMLE1BQU07O3NCQW1CTixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ2hDLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFXakMsWUFBWTt1QkFBQyxNQUFNOztBQWdDdEIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL3R5cGVzL3NpZ25hbHRyZWUtY29yZS5kLnRzXCIgLz5cbmltcG9ydCB7XG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxuICBTaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxuICBEZXN0cm95UmVmLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdGFibGUsXG4gIGlzU2lnbmFsLFxuICBmb3J3YXJkUmVmLFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBc3luY1ZhbGlkYXRvckZuIGFzIEFuZ3VsYXJBc3luY1ZhbGlkYXRvckZuLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUFycmF5LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yRm4gYXMgQW5ndWxhclZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBzaWduYWxUcmVlIH0gZnJvbSAnQHNpZ25hbHRyZWUvY29yZSc7XG5pbXBvcnQgeyBkZWVwQ2xvbmUsIG1hdGNoUGF0aCwgbWVyZ2VEZWVwLCBwYXJzZVBhdGggfSBmcm9tICdAc2lnbmFsdHJlZS9zaGFyZWQnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBBbmd1bGFyIEZvcm1zIEludGVncmF0aW9uIGZvciBTaWduYWxUcmVlXG4gKlxuICogUHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBBbmd1bGFyIGZvcm0gaW50ZWdyYXRpb24gaW5jbHVkaW5nIEZvcm1UcmVlLFxuICogZGlyZWN0aXZlcywgdmFsaWRhdG9ycywgZW5oYW5jZWQgYXJyYXkgb3BlcmF0aW9ucywgYW5kIFJ4SlMgYnJpZGdlLlxuICovXG5cbi8vIFJlLWV4cG9ydCBjb3JlIHR5cGVzIG5lZWRlZCBmb3IgZm9ybXNcbmltcG9ydCB0eXBlIHsgU2lnbmFsVHJlZSwgVHJlZUNvbmZpZywgVHJlZU5vZGUgfSBmcm9tICdAc2lnbmFsdHJlZS9jb3JlJztcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGT1JNIFRSRUUgVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCB0eXBlIEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjxUPiA9IChcbiAgdmFsdWU6IFRcbikgPT4gT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPiB8IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG5cbmV4cG9ydCB0eXBlIEVuaGFuY2VkQXJyYXlTaWduYWw8VD4gPSBXcml0YWJsZVNpZ25hbDxUW10+ICYge1xuICBwdXNoOiAoaXRlbTogVCkgPT4gdm9pZDtcbiAgcmVtb3ZlQXQ6IChpbmRleDogbnVtYmVyKSA9PiB2b2lkO1xuICBzZXRBdDogKGluZGV4OiBudW1iZXIsIHZhbHVlOiBUKSA9PiB2b2lkO1xuICBpbnNlcnRBdDogKGluZGV4OiBudW1iZXIsIGl0ZW06IFQpID0+IHZvaWQ7XG4gIG1vdmU6IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpID0+IHZvaWQ7XG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgRmllbGRWYWxpZGF0b3IgPSAodmFsdWU6IHVua25vd24pID0+IHN0cmluZyB8IG51bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRDb25maWcge1xuICBkZWJvdW5jZU1zPzogbnVtYmVyO1xuICB2YWxpZGF0b3JzPzogUmVjb3JkPHN0cmluZywgRmllbGRWYWxpZGF0b3I+IHwgRmllbGRWYWxpZGF0b3JbXTtcbiAgYXN5bmNWYWxpZGF0b3JzPzpcbiAgICB8IFJlY29yZDxzdHJpbmcsIEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPj5cbiAgICB8IEFycmF5PEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uYWxGaWVsZDxUPiB7XG4gIHdoZW46ICh2YWx1ZXM6IFQpID0+IGJvb2xlYW47XG4gIGZpZWxkczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVRyZWVPcHRpb25zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj5cbiAgZXh0ZW5kcyBUcmVlQ29uZmlnIHtcbiAgdmFsaWRhdG9ycz86IFN5bmNWYWxpZGF0b3JNYXA7XG4gIGFzeW5jVmFsaWRhdG9ycz86IEFzeW5jVmFsaWRhdG9yTWFwO1xuICBkZXN0cm95UmVmPzogRGVzdHJveVJlZjtcbiAgZmllbGRDb25maWdzPzogUmVjb3JkPHN0cmluZywgRmllbGRDb25maWc+O1xuICBjb25kaXRpb25hbHM/OiBBcnJheTxDb25kaXRpb25hbEZpZWxkPFQ+PjtcbiAgcGVyc2lzdEtleT86IHN0cmluZztcbiAgc3RvcmFnZT86IFBpY2s8U3RvcmFnZSwgJ2dldEl0ZW0nIHwgJ3NldEl0ZW0nIHwgJ3JlbW92ZUl0ZW0nPjtcbiAgcGVyc2lzdERlYm91bmNlTXM/OiBudW1iZXI7XG4gIHZhbGlkYXRpb25CYXRjaE1zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZvcm0gdHJlZSB0eXBlIHRoYXQgZmxhdHRlbnMgdGhlIHN0YXRlIGFjY2VzcyB3aGlsZSBtYWludGFpbmluZyBmb3JtLXNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IHR5cGUgRm9ybVRyZWU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHtcbiAgLy8gRmxhdHRlbmVkIHN0YXRlIGFjY2VzcyAtIGRpcmVjdCBhY2Nlc3MgdG8gZm9ybSB2YWx1ZXMgYXMgc2lnbmFsc1xuICBzdGF0ZTogVHJlZU5vZGU8VD47XG4gICQ6IFRyZWVOb2RlPFQ+OyAvLyBBbGlhcyBmb3Igc3RhdGVcblxuICAvLyBVbmRlcmx5aW5nIEFuZ3VsYXIgZm9ybSBzdHJ1Y3R1cmVcbiAgZm9ybTogRm9ybUdyb3VwO1xuXG4gIC8vIEZvcm0tc3BlY2lmaWMgc2lnbmFsc1xuICBlcnJvcnM6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBhc3luY0Vycm9yczogV3JpdGFibGVTaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj47XG4gIHRvdWNoZWQ6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PjtcbiAgYXN5bmNWYWxpZGF0aW5nOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj47XG4gIGRpcnR5OiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgdmFsaWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+O1xuICBzdWJtaXR0aW5nOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcblxuICAvLyBGb3JtIG1ldGhvZHNcbiAgdW53cmFwKCk6IFQ7XG4gIHNldFZhbHVlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgc2V0VmFsdWVzKHZhbHVlczogUGFydGlhbDxUPik6IHZvaWQ7XG4gIHJlc2V0KCk6IHZvaWQ7XG4gIHN1Ym1pdDxUUmVzdWx0PihzdWJtaXRGbjogKHZhbHVlczogVCkgPT4gUHJvbWlzZTxUUmVzdWx0Pik6IFByb21pc2U8VFJlc3VsdD47XG4gIHZhbGlkYXRlKGZpZWxkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvLyBGaWVsZC1sZXZlbCBoZWxwZXJzXG4gIGdldEZpZWxkRXJyb3IoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBnZXRGaWVsZEFzeW5jRXJyb3IoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBnZXRGaWVsZFRvdWNoZWQoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgaXNGaWVsZFZhbGlkKGZpZWxkOiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbj47XG4gIGlzRmllbGRBc3luY1ZhbGlkYXRpbmcoZmllbGQ6IHN0cmluZyk6IFNpZ25hbDxib29sZWFuIHwgdW5kZWZpbmVkPjtcblxuICAvLyBEaXJlY3QgYWNjZXNzIHRvIGZpZWxkIGVycm9yc1xuICBmaWVsZEVycm9yczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuICBmaWVsZEFzeW5jRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPj47XG5cbiAgLy8gS2VlcCB2YWx1ZXMgdHJlZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICB2YWx1ZXM6IFNpZ25hbFRyZWU8VD47XG5cbiAgLy8gQ2xlYW51cCBoZWxwZXJzIHRvIHRlYXIgZG93biBzdWJzY3JpcHRpb25zIGNyZWF0ZWQgZm9yIGJyaWRnZSBsYXllclxuICBkZXN0cm95KCk6IHZvaWQ7XG59O1xuXG5leHBvcnQgY2xhc3MgRm9ybVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGVycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgKSB7XG4gICAgc3VwZXIoJ0Zvcm0gdmFsaWRhdGlvbiBmYWlsZWQnKTtcbiAgICB0aGlzLm5hbWUgPSAnRm9ybVZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxudHlwZSBTeW5jVmFsaWRhdG9yTWFwID0gUmVjb3JkPHN0cmluZywgKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmcgfCBudWxsPjtcbnR5cGUgQXN5bmNWYWxpZGF0b3JNYXAgPSBSZWNvcmQ8c3RyaW5nLCBGb3JtVHJlZUFzeW5jVmFsaWRhdG9yRm48dW5rbm93bj4+O1xuXG5jb25zdCBTWU5DX0VSUk9SX0tFWSA9ICdzaWduYWx0cmVlJztcbmNvbnN0IEFTWU5DX0VSUk9SX0tFWSA9ICdzaWduYWx0cmVlQXN5bmMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVVRJTElUWSBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGT1JNIFRSRUUgSU1QTEVNRU5UQVRJT05cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBpbml0aWFsVmFsdWVzOiBULFxuICBjb25maWc6IEZvcm1UcmVlT3B0aW9uczxUPiA9IHt9XG4pOiBGb3JtVHJlZTxUPiB7XG4gIGNvbnN0IHtcbiAgICB2YWxpZGF0b3JzOiBiYXNlVmFsaWRhdG9ycyA9IHt9LFxuICAgIGFzeW5jVmFsaWRhdG9yczogYmFzZUFzeW5jVmFsaWRhdG9ycyA9IHt9LFxuICAgIGRlc3Ryb3lSZWY6IHByb3ZpZGVkRGVzdHJveVJlZixcbiAgICBmaWVsZENvbmZpZ3MgPSB7fSxcbiAgICBjb25kaXRpb25hbHMgPSBbXSxcbiAgICBwZXJzaXN0S2V5LFxuICAgIHN0b3JhZ2UsXG4gICAgcGVyc2lzdERlYm91bmNlTXMgPSAxMDAsXG4gICAgdmFsaWRhdGlvbkJhdGNoTXMgPSAwLFxuICAgIC4uLnRyZWVDb25maWdcbiAgfSA9IGNvbmZpZztcblxuICBjb25zdCBzeW5jVmFsaWRhdG9ycyA9IG5vcm1hbGl6ZVN5bmNWYWxpZGF0b3JzKGJhc2VWYWxpZGF0b3JzLCBmaWVsZENvbmZpZ3MpO1xuICBjb25zdCBhc3luY1ZhbGlkYXRvcnMgPSBub3JtYWxpemVBc3luY1ZhbGlkYXRvcnMoXG4gICAgYmFzZUFzeW5jVmFsaWRhdG9ycyxcbiAgICBmaWVsZENvbmZpZ3NcbiAgKTtcblxuICBjb25zdCB7IHZhbHVlczogaHlkcmF0ZWRJbml0aWFsVmFsdWVzIH0gPSBoeWRyYXRlSW5pdGlhbFZhbHVlcyhcbiAgICBpbml0aWFsVmFsdWVzLFxuICAgIHBlcnNpc3RLZXksXG4gICAgc3RvcmFnZVxuICApO1xuICBjb25zdCBpbml0aWFsU25hcHNob3QgPSBkZWVwQ2xvbmUoaHlkcmF0ZWRJbml0aWFsVmFsdWVzKTtcblxuICBjb25zdCB2YWx1ZXNUcmVlID0gc2lnbmFsVHJlZShoeWRyYXRlZEluaXRpYWxWYWx1ZXMsIHRyZWVDb25maWcpO1xuICBhc3NlcnRUcmVlTm9kZTxUPih2YWx1ZXNUcmVlLnN0YXRlKTtcbiAgY29uc3QgZmxhdHRlbmVkU3RhdGUgPSB2YWx1ZXNUcmVlLnN0YXRlO1xuXG4gIGVuaGFuY2VBcnJheXNSZWN1cnNpdmVseShcbiAgICBmbGF0dGVuZWRTdGF0ZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk7XG5cbiAgY29uc3QgZm9ybUdyb3VwID0gY3JlYXRlQWJzdHJhY3RDb250cm9sKFxuICAgIGh5ZHJhdGVkSW5pdGlhbFZhbHVlcyxcbiAgICAnJyxcbiAgICBzeW5jVmFsaWRhdG9ycyxcbiAgICBhc3luY1ZhbGlkYXRvcnNcbiAgKSBhcyBGb3JtR3JvdXA7XG5cbiAgY29uc3QgZGVzdHJveVJlZiA9IHByb3ZpZGVkRGVzdHJveVJlZiA/PyB0cnlJbmplY3REZXN0cm95UmVmKCk7XG4gIGNvbnN0IGNsZWFudXBDYWxsYmFja3M6IEFycmF5PCgpID0+IHZvaWQ+ID0gW107XG5cbiAgY29uc3QgZXJyb3JzID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcbiAgY29uc3QgYXN5bmNFcnJvcnMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuICBjb25zdCB0b3VjaGVkID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSk7XG4gIGNvbnN0IGFzeW5jVmFsaWRhdGluZyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pO1xuICBjb25zdCBkaXJ0eSA9IHNpZ25hbChmb3JtR3JvdXAuZGlydHkpO1xuICBjb25zdCB2YWxpZCA9IHNpZ25hbChmb3JtR3JvdXAudmFsaWQgJiYgIWZvcm1Hcm91cC5wZW5kaW5nKTtcbiAgY29uc3Qgc3VibWl0dGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgY29uc3QgcmVmcmVzaFJ1bm5lciA9ICgpID0+IHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGNvbGxlY3RDb250cm9sU25hcHNob3QoZm9ybUdyb3VwKTtcbiAgICBlcnJvcnMuc2V0KHNuYXBzaG90LnN5bmNFcnJvcnMpO1xuICAgIGFzeW5jRXJyb3JzLnNldChzbmFwc2hvdC5hc3luY0Vycm9ycyk7XG4gICAgdG91Y2hlZC5zZXQoc25hcHNob3QudG91Y2hlZCk7XG4gICAgYXN5bmNWYWxpZGF0aW5nLnNldChzbmFwc2hvdC5wZW5kaW5nKTtcbiAgICBkaXJ0eS5zZXQoZm9ybUdyb3VwLmRpcnR5KTtcbiAgICB2YWxpZC5zZXQoZm9ybUdyb3VwLnZhbGlkICYmICFmb3JtR3JvdXAucGVuZGluZyk7XG4gIH07XG5cbiAgbGV0IHJlZnJlc2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgY29uc3QgcmVmcmVzaEFnZ3JlZ2F0ZXMgPSAoaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgICBpZiAoaW1tZWRpYXRlIHx8IHZhbGlkYXRpb25CYXRjaE1zIDw9IDApIHtcbiAgICAgIGlmIChyZWZyZXNoVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHJlZnJlc2hUaW1lcik7XG4gICAgICAgIHJlZnJlc2hUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICByZWZyZXNoUnVubmVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHJlZnJlc2hUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHJlZnJlc2hUaW1lcik7XG4gICAgfVxuXG4gICAgcmVmcmVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWZyZXNoVGltZXIgPSBudWxsO1xuICAgICAgcmVmcmVzaFJ1bm5lcigpO1xuICAgIH0sIHZhbGlkYXRpb25CYXRjaE1zKTtcbiAgfTtcblxuICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcblxuICBjb25zdCBwZXJzaXN0Q29udHJvbGxlciA9IGNyZWF0ZVBlcnNpc3RDb250cm9sbGVyKFxuICAgIGZvcm1Hcm91cCxcbiAgICBwZXJzaXN0S2V5LFxuICAgIHN0b3JhZ2UsXG4gICAgcGVyc2lzdERlYm91bmNlTXMsXG4gICAgY2xlYW51cENhbGxiYWNrc1xuICApO1xuICBwZXJzaXN0Q29udHJvbGxlci5wZXJzaXN0SW1tZWRpYXRlbHkoKTtcblxuICBjb25zdCBmaWVsZEVycm9yS2V5cyA9IG5ldyBTZXQoW1xuICAgIC4uLk9iamVjdC5rZXlzKHN5bmNWYWxpZGF0b3JzKSxcbiAgICAuLi5PYmplY3Qua2V5cyhhc3luY1ZhbGlkYXRvcnMpLFxuICBdKTtcblxuICBjb25zdCBmaWVsZEVycm9yczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4+ID0ge307XG4gIGNvbnN0IGZpZWxkQXN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+PiA9IHt9O1xuXG4gIGZpZWxkRXJyb3JLZXlzLmZvckVhY2goKGZpZWxkUGF0aCkgPT4ge1xuICAgIGZpZWxkRXJyb3JzW2ZpZWxkUGF0aF0gPSBjb21wdXRlZCgoKSA9PiBlcnJvcnMoKVtmaWVsZFBhdGhdKTtcbiAgICBmaWVsZEFzeW5jRXJyb3JzW2ZpZWxkUGF0aF0gPSBjb21wdXRlZCgoKSA9PiBhc3luY0Vycm9ycygpW2ZpZWxkUGF0aF0pO1xuICB9KTtcblxuICBjb25zdCBmaWVsZENvbmZpZ0xvb2t1cCA9IChwYXRoOiBzdHJpbmcpID0+XG4gICAgcmVzb2x2ZUZpZWxkQ29uZmlnKGZpZWxkQ29uZmlncywgcGF0aCk7XG5cbiAgY29uc3QgY29ubmVjdENvbnRyb2xSZWN1cnNpdmUgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgT2JqZWN0LmVudHJpZXMoY29udHJvbC5jb250cm9scykuZm9yRWFjaCgoW2tleSwgY2hpbGRdKSA9PiB7XG4gICAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlKGNoaWxkLCBqb2luUGF0aChwYXRoLCBrZXkpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICBjb25zdCBhcnJheVNpZ25hbCA9IGdldFNpZ25hbEF0UGF0aChmbGF0dGVuZWRTdGF0ZSwgcGF0aCk7XG4gICAgICBpZiAoYXJyYXlTaWduYWwpIHtcbiAgICAgICAgY29ubmVjdEZvcm1BcnJheUFuZFNpZ25hbChcbiAgICAgICAgICBjb250cm9sLFxuICAgICAgICAgIGFycmF5U2lnbmFsIGFzIEVuaGFuY2VkQXJyYXlTaWduYWw8dW5rbm93bj4sXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzeW5jVmFsaWRhdG9ycyxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRvcnMsXG4gICAgICAgICAgY2xlYW51cENhbGxiYWNrcyxcbiAgICAgICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZShjaGlsZCwgam9pblBhdGgocGF0aCwgU3RyaW5nKGluZGV4KSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmFsQXRQYXRoID0gZ2V0U2lnbmFsQXRQYXRoKGZsYXR0ZW5lZFN0YXRlLCBwYXRoKTtcbiAgICBpZiAoc2lnbmFsQXRQYXRoKSB7XG4gICAgICBjb25uZWN0Q29udHJvbEFuZFNpZ25hbChcbiAgICAgICAgY29udHJvbCBhcyBGb3JtQ29udHJvbCxcbiAgICAgICAgc2lnbmFsQXRQYXRoIGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd24+LFxuICAgICAgICBjbGVhbnVwQ2FsbGJhY2tzLFxuICAgICAgICBmaWVsZENvbmZpZ0xvb2t1cChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmUoZm9ybUdyb3VwLCAnJyk7XG5cbiAgY29uc3QgY29uZGl0aW9uYWxTdGF0ZSA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICBjb25zdCBhcHBseUNvbmRpdGlvbmFscyA9XG4gICAgY29uZGl0aW9uYWxzLmxlbmd0aCA+IDBcbiAgICAgID8gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpIGFzIFQ7XG4gICAgICAgICAgY29uZGl0aW9uYWxzLmZvckVhY2goKHsgd2hlbiwgZmllbGRzIH0pID0+IHtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZpc2libGUgPSB3aGVuKHZhbHVlcyk7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgdmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGRQYXRoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkUGF0aCk7XG4gICAgICAgICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBwcmV2aW91cyA9IGNvbmRpdGlvbmFsU3RhdGUuZ2V0KGZpZWxkUGF0aCk7XG4gICAgICAgICAgICAgIGlmIChwcmV2aW91cyA9PT0gdmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25kaXRpb25hbFN0YXRlLnNldChmaWVsZFBhdGgsIHZpc2libGUpO1xuICAgICAgICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgOiAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgYXBwbHlDb25kaXRpb25hbHMoKTtcblxuICBjb25zdCBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgcmVmcmVzaEFnZ3JlZ2F0ZXMoKTtcbiAgICAgIHBlcnNpc3RDb250cm9sbGVyLnNjaGVkdWxlUGVyc2lzdCgpO1xuICAgICAgYXBwbHlDb25kaXRpb25hbHMoKTtcbiAgICB9KVxuICApO1xuICBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zLnB1c2goXG4gICAgZm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hBZ2dyZWdhdGVzKCkpXG4gICk7XG4gIGlmIChmb3JtR3JvdXAuZXZlbnRzKSB7XG4gICAgYWdncmVnYXRlU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgZm9ybUdyb3VwLmV2ZW50cy5zdWJzY3JpYmUoKCkgPT4gcmVmcmVzaEFnZ3JlZ2F0ZXMoKSlcbiAgICApO1xuICB9XG5cbiAgY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICBhZ2dyZWdhdGVTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIGlmIChyZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChyZWZyZXNoVGltZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRlc3Ryb3lSZWYpIHtcbiAgICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBjbGVhbnVwQ2FsbGJhY2tzLnNwbGljZSgwKS5mb3JFYWNoKChmbikgPT4gZm4oKSk7XG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzZXRWYWx1ZSA9IChmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IHRhcmdldFNpZ25hbCA9IGdldFNpZ25hbEF0UGF0aChmbGF0dGVuZWRTdGF0ZSwgZmllbGQpO1xuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcblxuICAgIGlmICh0YXJnZXRTaWduYWwgJiYgJ3NldCcgaW4gdGFyZ2V0U2lnbmFsKSB7XG4gICAgICAodGFyZ2V0U2lnbmFsIGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd24+KS5zZXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoY29udHJvbCkge1xuICAgICAgKGNvbnRyb2wgYXMgQWJzdHJhY3RDb250cm9sKS5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IHVudHlwZWRDb250cm9sID0gY29udHJvbCBhcyBBYnN0cmFjdENvbnRyb2w7XG4gICAgICB1bnR5cGVkQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB1bnR5cGVkQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdW50eXBlZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICBwZXJzaXN0Q29udHJvbGxlci5zY2hlZHVsZVBlcnNpc3QoKTtcbiAgfTtcblxuICBjb25zdCBzZXRWYWx1ZXMgPSAodmFsdWVzOiBQYXJ0aWFsPFQ+KSA9PiB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHNldFZhbHVlKGtleSwgdmFsdWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIGZvcm1Hcm91cC5yZXNldChpbml0aWFsU25hcHNob3QpO1xuICAgIHN1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICBwZXJzaXN0Q29udHJvbGxlci5wZXJzaXN0SW1tZWRpYXRlbHkoKTtcbiAgICBhcHBseUNvbmRpdGlvbmFscygpO1xuICB9O1xuXG4gIGNvbnN0IHZhbGlkYXRlID0gYXN5bmMgKGZpZWxkPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKGZpZWxkKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgICAgYXdhaXQgd2FpdEZvclBlbmRpbmcoY29udHJvbCk7XG4gICAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIGZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgIGF3YWl0IHdhaXRGb3JQZW5kaW5nKGZvcm1Hcm91cCk7XG4gICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gIH07XG5cbiAgY29uc3Qgc3VibWl0ID0gYXN5bmMgPFRSZXN1bHQ+KFxuICAgIHN1Ym1pdEZuOiAodmFsdWVzOiBUKSA9PiBQcm9taXNlPFRSZXN1bHQ+XG4gICk6IFByb21pc2U8VFJlc3VsdD4gPT4ge1xuICAgIHN1Ym1pdHRpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZSgpO1xuXG4gICAgICBpZiAoIXZhbGlkKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZvcm1WYWxpZGF0aW9uRXJyb3IoZXJyb3JzKCksIGFzeW5jRXJyb3JzKCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWVzID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgYXMgVDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1Ym1pdEZuKGN1cnJlbnRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgY2xlYW51cENhbGxiYWNrcy5zcGxpY2UoMCkuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICB9O1xuXG4gIGNvbnN0IGZvcm1UcmVlOiBGb3JtVHJlZTxUPiA9IHtcbiAgICBzdGF0ZTogZmxhdHRlbmVkU3RhdGUsXG4gICAgJDogZmxhdHRlbmVkU3RhdGUsXG4gICAgZm9ybTogZm9ybUdyb3VwLFxuICAgIGVycm9ycyxcbiAgICBhc3luY0Vycm9ycyxcbiAgICB0b3VjaGVkLFxuICAgIGFzeW5jVmFsaWRhdGluZyxcbiAgICBkaXJ0eSxcbiAgICB2YWxpZCxcbiAgICBzdWJtaXR0aW5nLFxuICAgIHVud3JhcDogKCkgPT4gdmFsdWVzVHJlZSgpLFxuICAgIHNldFZhbHVlLFxuICAgIHNldFZhbHVlcyxcbiAgICByZXNldCxcbiAgICBzdWJtaXQsXG4gICAgdmFsaWRhdGUsXG4gICAgZ2V0RmllbGRFcnJvcjogKGZpZWxkOiBzdHJpbmcpID0+XG4gICAgICBmaWVsZEVycm9yc1tmaWVsZF0gfHwgY29tcHV0ZWQoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICBnZXRGaWVsZEFzeW5jRXJyb3I6IChmaWVsZDogc3RyaW5nKSA9PlxuICAgICAgZmllbGRBc3luY0Vycm9yc1tmaWVsZF0gfHwgY29tcHV0ZWQoKCkgPT4gdW5kZWZpbmVkKSxcbiAgICBnZXRGaWVsZFRvdWNoZWQ6IChmaWVsZDogc3RyaW5nKSA9PlxuICAgICAgY29tcHV0ZWQoKCkgPT4gZm9ybUdyb3VwLmdldChmaWVsZCk/LnRvdWNoZWQgPz8gZmFsc2UpLFxuICAgIGlzRmllbGRWYWxpZDogKGZpZWxkOiBzdHJpbmcpID0+XG4gICAgICBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgcmV0dXJuICEhY29udHJvbCAmJiBjb250cm9sLnZhbGlkICYmICFjb250cm9sLnBlbmRpbmc7XG4gICAgICB9KSxcbiAgICBpc0ZpZWxkQXN5bmNWYWxpZGF0aW5nOiAoZmllbGQ6IHN0cmluZykgPT5cbiAgICAgIGNvbXB1dGVkKCgpID0+ICEhZm9ybUdyb3VwLmdldChmaWVsZCk/LnBlbmRpbmcpLFxuICAgIGZpZWxkRXJyb3JzLFxuICAgIGZpZWxkQXN5bmNFcnJvcnMsXG4gICAgdmFsdWVzOiB2YWx1ZXNUcmVlLFxuICAgIGRlc3Ryb3ksXG4gIH07XG5cbiAgcmV0dXJuIGZvcm1UcmVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmlydHVhbEZvcm1BcnJheTxUPihcbiAgaXRlbXM6IFRbXSxcbiAgdmlzaWJsZVJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0sXG4gIGNvbnRyb2xGYWN0b3J5OiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IEFic3RyYWN0Q29udHJvbCA9ICh2YWx1ZSkgPT5cbiAgICBuZXcgRm9ybUNvbnRyb2wodmFsdWUpXG4pOiBGb3JtQXJyYXkge1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDAsIHZpc2libGVSYW5nZS5zdGFydCk7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWF4KHN0YXJ0LCB2aXNpYmxlUmFuZ2UuZW5kKTtcblxuICBjb25zdCBjb250cm9scyA9IGl0ZW1zXG4gICAgLnNsaWNlKHN0YXJ0LCBlbmQpXG4gICAgLm1hcCgoaXRlbSwgb2Zmc2V0KSA9PiBjb250cm9sRmFjdG9yeShpdGVtLCBzdGFydCArIG9mZnNldCkpO1xuXG4gIHJldHVybiBuZXcgRm9ybUFycmF5KGNvbnRyb2xzKTtcbn1cblxuZnVuY3Rpb24gZW5oYW5jZUFycmF5c1JlY3Vyc2l2ZWx5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB2aXNpdGVkID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpXG4pOiB2b2lkIHtcbiAgaWYgKHZpc2l0ZWQuaGFzKG9iaikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmlzaXRlZC5hZGQob2JqKTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHNpZ25hbFZhbHVlID0gKHZhbHVlIGFzIFNpZ25hbDx1bmtub3duPikoKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNpZ25hbFZhbHVlKSkge1xuICAgICAgICBvYmpba2V5XSA9IGVuaGFuY2VBcnJheSh2YWx1ZSBhcyBXcml0YWJsZVNpZ25hbDx1bmtub3duW10+KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICkge1xuICAgICAgZW5oYW5jZUFycmF5c1JlY3Vyc2l2ZWx5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCB2aXNpdGVkKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZW5oYW5jZUFycmF5ID0gPFU+KFxuICBhcnJheVNpZ25hbDogV3JpdGFibGVTaWduYWw8VVtdPlxuKTogRW5oYW5jZWRBcnJheVNpZ25hbDxVPiA9PiB7XG4gIGNvbnN0IGVuaGFuY2VkID0gYXJyYXlTaWduYWwgYXMgRW5oYW5jZWRBcnJheVNpZ25hbDxVPjtcblxuICBlbmhhbmNlZC5wdXNoID0gKGl0ZW06IFUpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT4gWy4uLmFyciwgaXRlbV0pO1xuICB9O1xuXG4gIGVuaGFuY2VkLnJlbW92ZUF0ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT4gYXJyLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXgpKTtcbiAgfTtcblxuICBlbmhhbmNlZC5zZXRBdCA9IChpbmRleDogbnVtYmVyLCB2YWx1ZTogVSkgPT4ge1xuICAgIGFycmF5U2lnbmFsLnVwZGF0ZSgoYXJyKSA9PlxuICAgICAgYXJyLm1hcCgoaXRlbSwgaSkgPT4gKGkgPT09IGluZGV4ID8gdmFsdWUgOiBpdGVtKSlcbiAgICApO1xuICB9O1xuXG4gIGVuaGFuY2VkLmluc2VydEF0ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFUpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT4gW1xuICAgICAgLi4uYXJyLnNsaWNlKDAsIGluZGV4KSxcbiAgICAgIGl0ZW0sXG4gICAgICAuLi5hcnIuc2xpY2UoaW5kZXgpLFxuICAgIF0pO1xuICB9O1xuXG4gIGVuaGFuY2VkLm1vdmUgPSAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSA9PiB7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlKChhcnIpID0+IHtcbiAgICAgIGNvbnN0IG5ld0FyciA9IFsuLi5hcnJdO1xuICAgICAgY29uc3QgW2l0ZW1dID0gbmV3QXJyLnNwbGljZShmcm9tLCAxKTtcbiAgICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3QXJyLnNwbGljZSh0bywgMCwgaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3QXJyO1xuICAgIH0pO1xuICB9O1xuXG4gIGVuaGFuY2VkLmNsZWFyID0gKCkgPT4ge1xuICAgIGFycmF5U2lnbmFsLnNldChbXSk7XG4gIH07XG5cbiAgcmV0dXJuIGVuaGFuY2VkO1xufTtcblxuZnVuY3Rpb24gZ2V0U2lnbmFsQXRQYXRoPFQ+KFxuICBub2RlOiBUcmVlTm9kZTxUPixcbiAgcGF0aDogc3RyaW5nXG4pOiBXcml0YWJsZVNpZ25hbDx1bmtub3duPiB8IG51bGwge1xuICBpZiAoIXBhdGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHNlZ21lbnRzID0gcGFyc2VQYXRoKHBhdGgpO1xuICBsZXQgY3VycmVudDogdW5rbm93biA9IG5vZGU7XG5cbiAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgaWYgKCFjdXJyZW50IHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY3VycmVudCA9IChjdXJyZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzZWdtZW50XTtcbiAgfVxuXG4gIGlmIChpc1NpZ25hbChjdXJyZW50KSkge1xuICAgIHJldHVybiBjdXJyZW50IGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd24+O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGpvaW5QYXRoKHBhcmVudDogc3RyaW5nLCBzZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGFyZW50ID8gYCR7cGFyZW50fS4ke3NlZ21lbnR9YCA6IHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIHdyYXBTeW5jVmFsaWRhdG9yKFxuICB2YWxpZGF0b3I6ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nIHwgbnVsbFxuKTogQW5ndWxhclZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdG9yKGNvbnRyb2wudmFsdWUpO1xuICAgIHJldHVybiByZXN1bHQgPyB7IFtTWU5DX0VSUk9SX0tFWV06IHJlc3VsdCB9IDogbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gd3JhcEFzeW5jVmFsaWRhdG9yKFxuICB2YWxpZGF0b3I6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPlxuKTogQW5ndWxhckFzeW5jVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gYXN5bmMgKGNvbnRyb2wpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWF5YmVBc3luYyA9IHZhbGlkYXRvcihjb250cm9sLnZhbHVlKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gaXNPYnNlcnZhYmxlKG1heWJlQXN5bmMpXG4gICAgICAgID8gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWF5YmVBc3luYylcbiAgICAgICAgOiBhd2FpdCBtYXliZUFzeW5jO1xuICAgICAgcmV0dXJuIHJlc29sdmVkID8geyBbQVNZTkNfRVJST1JfS0VZXTogcmVzb2x2ZWQgfSA6IG51bGw7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBbQVNZTkNfRVJST1JfS0VZXTogJ1ZhbGlkYXRpb24gZXJyb3InIH07XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBYnN0cmFjdENvbnRyb2woXG4gIHZhbHVlOiB1bmtub3duLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbGlkYXRvcnM6IFN5bmNWYWxpZGF0b3JNYXAsXG4gIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JNYXBcbik6IEFic3RyYWN0Q29udHJvbCB7XG4gIGNvbnN0IHN5bmNWYWxpZGF0b3IgPSBmaW5kVmFsaWRhdG9yKHZhbGlkYXRvcnMsIHBhdGgpO1xuICBjb25zdCBhc3luY1ZhbGlkYXRvciA9IGZpbmRWYWxpZGF0b3IoYXN5bmNWYWxpZGF0b3JzLCBwYXRoKTtcblxuICBjb25zdCBzeW5jRm5zID0gc3luY1ZhbGlkYXRvclxuICAgID8gW3dyYXBTeW5jVmFsaWRhdG9yKHN5bmNWYWxpZGF0b3IpXVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBhc3luY0ZucyA9IGFzeW5jVmFsaWRhdG9yXG4gICAgPyBbd3JhcEFzeW5jVmFsaWRhdG9yKGFzeW5jVmFsaWRhdG9yKV1cbiAgICA6IHVuZGVmaW5lZDtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBjb250cm9scyA9IHZhbHVlLm1hcCgoaXRlbSwgaW5kZXgpID0+XG4gICAgICBjcmVhdGVBYnN0cmFjdENvbnRyb2woXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGpvaW5QYXRoKHBhdGgsIFN0cmluZyhpbmRleCkpLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnNcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiBuZXcgRm9ybUFycmF5KGNvbnRyb2xzLCBzeW5jRm5zLCBhc3luY0Zucyk7XG4gIH1cblxuICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICBjb25zdCBjb250cm9sczogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgY29udHJvbHNba2V5XSA9IGNyZWF0ZUFic3RyYWN0Q29udHJvbChcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIGpvaW5QYXRoKHBhdGgsIGtleSksXG4gICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgIGFzeW5jVmFsaWRhdG9yc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBGb3JtR3JvdXAoY29udHJvbHMsIHtcbiAgICAgIHZhbGlkYXRvcnM6IHN5bmNGbnMsXG4gICAgICBhc3luY1ZhbGlkYXRvcnM6IGFzeW5jRm5zLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbCh2YWx1ZSwge1xuICAgIHZhbGlkYXRvcnM6IHN5bmNGbnMsXG4gICAgYXN5bmNWYWxpZGF0b3JzOiBhc3luY0ZucyxcbiAgICBub25OdWxsYWJsZTogZmFsc2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0Q29udHJvbEFuZFNpZ25hbChcbiAgY29udHJvbDogRm9ybUNvbnRyb2wsXG4gIHZhbHVlU2lnbmFsOiBXcml0YWJsZVNpZ25hbDx1bmtub3duPixcbiAgY2xlYW51cENhbGxiYWNrczogQXJyYXk8KCkgPT4gdm9pZD4sXG4gIGZpZWxkQ29uZmlnPzogRmllbGRDb25maWdcbik6IHZvaWQge1xuICBsZXQgdXBkYXRpbmdGcm9tQ29udHJvbCA9IGZhbHNlO1xuICBsZXQgdXBkYXRpbmdGcm9tU2lnbmFsID0gZmFsc2U7XG4gIGxldCB2ZXJzaW9uQ291bnRlciA9IDA7XG4gIGxldCBsYXN0Q29udHJvbFZlcnNpb24gPSAwO1xuICBsZXQgY29udHJvbERlYm91bmNlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IGRlYm91bmNlTXMgPSBmaWVsZENvbmZpZz8uZGVib3VuY2VNcyA/PyAwO1xuXG4gIGNvbnN0IG9yaWdpbmFsU2V0ID0gdmFsdWVTaWduYWwuc2V0LmJpbmQodmFsdWVTaWduYWwpO1xuICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IHZhbHVlU2lnbmFsLnVwZGF0ZS5iaW5kKHZhbHVlU2lnbmFsKTtcblxuICBjb25zdCBhcHBseUNvbnRyb2xWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIHVwZGF0aW5nRnJvbVNpZ25hbCA9IHRydWU7XG4gICAgaWYgKCFPYmplY3QuaXMoY29udHJvbC52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICBjb25zdCB1bnR5cGVkQ29udHJvbCA9IGNvbnRyb2wgYXMgQWJzdHJhY3RDb250cm9sO1xuICAgICAgdW50eXBlZENvbnRyb2wuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgdW50eXBlZENvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB9XG4gICAgdXBkYXRpbmdGcm9tU2lnbmFsID0gZmFsc2U7XG4gIH07XG5cbiAgdmFsdWVTaWduYWwuc2V0ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgY3VycmVudFZlcnNpb24gPSArK3ZlcnNpb25Db3VudGVyO1xuICAgIG9yaWdpbmFsU2V0KHZhbHVlKTtcbiAgICBpZiAodXBkYXRpbmdGcm9tQ29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobGFzdENvbnRyb2xWZXJzaW9uID4gY3VycmVudFZlcnNpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwbHlDb250cm9sVmFsdWUodmFsdWUpO1xuICB9O1xuXG4gIHZhbHVlU2lnbmFsLnVwZGF0ZSA9ICh1cGRhdGVyKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHVwZGF0ZXIodmFsdWVTaWduYWwoKSk7XG4gICAgdmFsdWVTaWduYWwuc2V0KG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IHB1c2hVcGRhdGVGcm9tQ29udHJvbCA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIHVwZGF0aW5nRnJvbUNvbnRyb2wgPSB0cnVlO1xuICAgIGxhc3RDb250cm9sVmVyc2lvbiA9ICsrdmVyc2lvbkNvdW50ZXI7XG4gICAgb3JpZ2luYWxTZXQodmFsdWUpO1xuICAgIHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb250cm9sQ2hhbmdlID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHVwZGF0aW5nRnJvbVNpZ25hbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkZWJvdW5jZU1zID4gMCkge1xuICAgICAgaWYgKGNvbnRyb2xEZWJvdW5jZVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChjb250cm9sRGVib3VuY2VUaW1lcik7XG4gICAgICB9XG4gICAgICBjb250cm9sRGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb250cm9sRGVib3VuY2VUaW1lciA9IG51bGw7XG4gICAgICAgIHB1c2hVcGRhdGVGcm9tQ29udHJvbCh2YWx1ZSk7XG4gICAgICB9LCBkZWJvdW5jZU1zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdXNoVXBkYXRlRnJvbUNvbnRyb2wodmFsdWUpO1xuICB9O1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICBoYW5kbGVDb250cm9sQ2hhbmdlKHZhbHVlKTtcbiAgfSk7XG5cbiAgY2xlYW51cENhbGxiYWNrcy5wdXNoKCgpID0+IHtcbiAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB2YWx1ZVNpZ25hbC5zZXQgPSBvcmlnaW5hbFNldDtcbiAgICB2YWx1ZVNpZ25hbC51cGRhdGUgPSBvcmlnaW5hbFVwZGF0ZTtcbiAgICBpZiAoY29udHJvbERlYm91bmNlVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChjb250cm9sRGVib3VuY2VUaW1lcik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY29ubmVjdEZvcm1BcnJheUFuZFNpZ25hbChcbiAgZm9ybUFycmF5OiBGb3JtQXJyYXksXG4gIGFycmF5U2lnbmFsOiBFbmhhbmNlZEFycmF5U2lnbmFsPHVua25vd24+LFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbGlkYXRvcnM6IFN5bmNWYWxpZGF0b3JNYXAsXG4gIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JNYXAsXG4gIGNsZWFudXBDYWxsYmFja3M6IEFycmF5PCgpID0+IHZvaWQ+LFxuICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZTogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogc3RyaW5nKSA9PiB2b2lkXG4pOiB2b2lkIHtcbiAgbGV0IHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgbGV0IHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuXG4gIGNvbnN0IG9yaWdpbmFsU2V0ID0gYXJyYXlTaWduYWwuc2V0LmJpbmQoYXJyYXlTaWduYWwpO1xuICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IGFycmF5U2lnbmFsLnVwZGF0ZS5iaW5kKGFycmF5U2lnbmFsKTtcblxuICBhcnJheVNpZ25hbC5zZXQgPSAodmFsdWU6IHVua25vd25bXSkgPT4ge1xuICAgIG9yaWdpbmFsU2V0KHZhbHVlKTtcbiAgICBpZiAodXBkYXRpbmdGcm9tQ29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGluZ0Zyb21TaWduYWwgPSB0cnVlO1xuICAgIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gICAgICBmb3JtQXJyYXksXG4gICAgICB2YWx1ZSxcbiAgICAgIHBhdGgsXG4gICAgICB2YWxpZGF0b3JzLFxuICAgICAgYXN5bmNWYWxpZGF0b3JzLFxuICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmVcbiAgICApO1xuICAgIGZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuICB9O1xuXG4gIGFycmF5U2lnbmFsLnVwZGF0ZSA9ICh1cGRhdGVyKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHVwZGF0ZXIoYXJyYXlTaWduYWwoKSk7XG4gICAgYXJyYXlTaWduYWwuc2V0KG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGZvcm1BcnJheS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgIGlmICh1cGRhdGluZ0Zyb21TaWduYWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRpbmdGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgb3JpZ2luYWxTZXQodmFsdWUgYXMgdW5rbm93bltdKTtcbiAgICB1cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG4gIH0pO1xuXG4gIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgYXJyYXlTaWduYWwuc2V0ID0gb3JpZ2luYWxTZXQ7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlID0gb3JpZ2luYWxVcGRhdGU7XG4gIH0pO1xuXG4gIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gICAgZm9ybUFycmF5LFxuICAgIGFycmF5U2lnbmFsKCksXG4gICAgcGF0aCxcbiAgICB2YWxpZGF0b3JzLFxuICAgIGFzeW5jVmFsaWRhdG9ycyxcbiAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZVxuICApO1xufVxuXG5mdW5jdGlvbiBzeW5jRm9ybUFycmF5RnJvbVZhbHVlKFxuICBmb3JtQXJyYXk6IEZvcm1BcnJheSxcbiAgbmV4dFZhbHVlOiB1bmtub3duW10sXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsaWRhdG9yczogU3luY1ZhbGlkYXRvck1hcCxcbiAgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvck1hcCxcbiAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmU6IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg6IHN0cmluZykgPT4gdm9pZFxuKTogdm9pZCB7XG4gIGlmICghQXJyYXkuaXNBcnJheShuZXh0VmFsdWUpKSB7XG4gICAgbmV4dFZhbHVlID0gW107XG4gIH1cblxuICB3aGlsZSAoZm9ybUFycmF5Lmxlbmd0aCA+IG5leHRWYWx1ZS5sZW5ndGgpIHtcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoZm9ybUFycmF5Lmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgbmV4dFZhbHVlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY2hpbGRQYXRoID0gam9pblBhdGgocGF0aCwgU3RyaW5nKGluZGV4KSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBmb3JtQXJyYXkuYXQoaW5kZXgpO1xuXG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgY29uc3QgY29udHJvbCA9IGNyZWF0ZUFic3RyYWN0Q29udHJvbChcbiAgICAgICAgaXRlbSxcbiAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnNcbiAgICAgICk7XG4gICAgICBmb3JtQXJyYXkuaW5zZXJ0KGluZGV4LCBjb250cm9sKTtcbiAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlKGNvbnRyb2wsIGNoaWxkUGF0aCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4aXN0aW5nIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICBzeW5jRm9ybUFycmF5RnJvbVZhbHVlKFxuICAgICAgICBleGlzdGluZyxcbiAgICAgICAgQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbXSxcbiAgICAgICAgY2hpbGRQYXRoLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnMsXG4gICAgICAgIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZyBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoaXRlbSkpIHtcbiAgICAgICAgZXhpc3Rpbmcuc2V0VmFsdWUoaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghT2JqZWN0LmlzKGV4aXN0aW5nLnZhbHVlLCBpdGVtKSkge1xuICAgICAgY29uc3QgdW50eXBlZEV4aXN0aW5nID0gZXhpc3RpbmcgYXMgQWJzdHJhY3RDb250cm9sO1xuICAgICAgdW50eXBlZEV4aXN0aW5nLnNldFZhbHVlKGl0ZW0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5pbnRlcmZhY2UgQ29udHJvbFNuYXBzaG90IHtcbiAgc3luY0Vycm9yczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgYXN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHRvdWNoZWQ6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICBwZW5kaW5nOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbn1cblxuZnVuY3Rpb24gY29sbGVjdENvbnRyb2xTbmFwc2hvdChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBDb250cm9sU25hcHNob3Qge1xuICBjb25zdCBzbmFwc2hvdDogQ29udHJvbFNuYXBzaG90ID0ge1xuICAgIHN5bmNFcnJvcnM6IHt9LFxuICAgIGFzeW5jRXJyb3JzOiB7fSxcbiAgICB0b3VjaGVkOiB7fSxcbiAgICBwZW5kaW5nOiB7fSxcbiAgfTtcblxuICB0cmF2ZXJzZUNvbnRyb2xzKFxuICAgIGNvbnRyb2wsXG4gICAgKGN1cnJlbnRQYXRoLCBjdXJyZW50Q29udHJvbCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50UGF0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Q29udHJvbC50b3VjaGVkKSB7XG4gICAgICAgIHNuYXBzaG90LnRvdWNoZWRbY3VycmVudFBhdGhdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnRDb250cm9sLnBlbmRpbmcpIHtcbiAgICAgICAgc25hcHNob3QucGVuZGluZ1tjdXJyZW50UGF0aF0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlcnJvcnMgPSBjdXJyZW50Q29udHJvbC5lcnJvcnMgYXMgVmFsaWRhdGlvbkVycm9ycyB8IG51bGw7XG4gICAgICBpZiAoIWVycm9ycykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN5bmNNZXNzYWdlID0gZXJyb3JzW1NZTkNfRVJST1JfS0VZXTtcbiAgICAgIGlmICh0eXBlb2Ygc3luY01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNuYXBzaG90LnN5bmNFcnJvcnNbY3VycmVudFBhdGhdID0gc3luY01lc3NhZ2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFzeW5jTWVzc2FnZSA9IGVycm9yc1tBU1lOQ19FUlJPUl9LRVldO1xuICAgICAgaWYgKHR5cGVvZiBhc3luY01lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNuYXBzaG90LmFzeW5jRXJyb3JzW2N1cnJlbnRQYXRoXSA9IGFzeW5jTWVzc2FnZTtcbiAgICAgIH1cbiAgICB9LFxuICAgICcnXG4gICk7XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiB0cmF2ZXJzZUNvbnRyb2xzKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIHZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gdm9pZCxcbiAgcGF0aCA9ICcnXG4pOiB2b2lkIHtcbiAgdmlzaXRvcihwYXRoLCBjb250cm9sKTtcblxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgIE9iamVjdC5lbnRyaWVzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goKFtrZXksIGNoaWxkXSkgPT4ge1xuICAgICAgdHJhdmVyc2VDb250cm9scyhjaGlsZCwgdmlzaXRvciwgam9pblBhdGgocGF0aCwga2V5KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICBjb250cm9sLmNvbnRyb2xzLmZvckVhY2goKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgdHJhdmVyc2VDb250cm9scyhjaGlsZCwgdmlzaXRvciwgam9pblBhdGgocGF0aCwgU3RyaW5nKGluZGV4KSkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhaXRGb3JQZW5kaW5nKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWNvbnRyb2wucGVuZGluZykge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBlbmRpbmcpIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgISF2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICApO1xufVxuXG5mdW5jdGlvbiB0cnlJbmplY3REZXN0cm95UmVmKCk6IERlc3Ryb3lSZWYgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVTeW5jVmFsaWRhdG9ycyhcbiAgYmFzZTogU3luY1ZhbGlkYXRvck1hcCxcbiAgZmllbGRDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZENvbmZpZz5cbik6IFN5bmNWYWxpZGF0b3JNYXAge1xuICBjb25zdCBidWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIEZpZWxkVmFsaWRhdG9yW10+KCk7XG5cbiAgZm9yIChjb25zdCBbcGF0aCwgdmFsaWRhdG9yXSBvZiBPYmplY3QuZW50cmllcyhiYXNlKSkge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYnVja2V0cy5nZXQocGF0aCkgPz8gW107XG4gICAgZXhpc3RpbmcucHVzaCh2YWxpZGF0b3IpO1xuICAgIGJ1Y2tldHMuc2V0KHBhdGgsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3BhdGgsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRDb25maWdzKSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0b1ZhbGlkYXRvckFycmF5KGNvbmZpZy52YWxpZGF0b3JzKTtcbiAgICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBleGlzdGluZyA9IGJ1Y2tldHMuZ2V0KHBhdGgpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2goLi4udmFsaWRhdG9ycyk7XG4gICAgYnVja2V0cy5zZXQocGF0aCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZDogU3luY1ZhbGlkYXRvck1hcCA9IHt9O1xuICBidWNrZXRzLmZvckVhY2goKHZhbGlkYXRvcnMsIHBhdGgpID0+IHtcbiAgICBub3JtYWxpemVkW3BhdGhdID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4geyAuLi5iYXNlLCAuLi5ub3JtYWxpemVkIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFzeW5jVmFsaWRhdG9ycyhcbiAgYmFzZTogQXN5bmNWYWxpZGF0b3JNYXAsXG4gIGZpZWxkQ29uZmlnczogUmVjb3JkPHN0cmluZywgRmllbGRDb25maWc+XG4pOiBBc3luY1ZhbGlkYXRvck1hcCB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8Rm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+Pj4oKTtcblxuICBmb3IgKGNvbnN0IFtwYXRoLCB2YWxpZGF0b3JdIG9mIE9iamVjdC5lbnRyaWVzKGJhc2UpKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBidWNrZXRzLmdldChwYXRoKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKHZhbGlkYXRvcik7XG4gICAgYnVja2V0cy5zZXQocGF0aCwgZXhpc3RpbmcpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbcGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZENvbmZpZ3MpKSB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRvVmFsaWRhdG9yQXJyYXkoY29uZmlnLmFzeW5jVmFsaWRhdG9ycyk7XG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBidWNrZXRzLmdldChwYXRoKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKC4uLnZhbGlkYXRvcnMpO1xuICAgIGJ1Y2tldHMuc2V0KHBhdGgsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IEFzeW5jVmFsaWRhdG9yTWFwID0ge307XG4gIGJ1Y2tldHMuZm9yRWFjaCgodmFsaWRhdG9ycywgcGF0aCkgPT4ge1xuICAgIG5vcm1hbGl6ZWRbcGF0aF0gPSBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgbWF5YmVBc3luYyA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGlzT2JzZXJ2YWJsZShtYXliZUFzeW5jKVxuICAgICAgICAgID8gYXdhaXQgZmlyc3RWYWx1ZUZyb20obWF5YmVBc3luYylcbiAgICAgICAgICA6IGF3YWl0IG1heWJlQXN5bmM7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4geyAuLi5iYXNlLCAuLi5ub3JtYWxpemVkIH07XG59XG5cbmZ1bmN0aW9uIHRvVmFsaWRhdG9yQXJyYXk8VD4oaW5wdXQ/OiBSZWNvcmQ8c3RyaW5nLCBUPiB8IFRbXSk6IFRbXSB7XG4gIGlmICghaW5wdXQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGlucHV0KTtcbn1cblxuZnVuY3Rpb24gaHlkcmF0ZUluaXRpYWxWYWx1ZXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgaW5pdGlhbFZhbHVlczogVCxcbiAgcGVyc2lzdEtleT86IHN0cmluZyxcbiAgc3RvcmFnZT86IFBpY2s8U3RvcmFnZSwgJ2dldEl0ZW0nIHwgJ3NldEl0ZW0nIHwgJ3JlbW92ZUl0ZW0nPlxuKTogeyB2YWx1ZXM6IFQgfSB7XG4gIGNvbnN0IGJhc2VDbG9uZSA9IGRlZXBDbG9uZShpbml0aWFsVmFsdWVzKTtcblxuICBpZiAoIXBlcnNpc3RLZXkgfHwgIXN0b3JhZ2UpIHtcbiAgICByZXR1cm4geyB2YWx1ZXM6IGJhc2VDbG9uZSB9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzdG9yZWRSYXcgPSBzdG9yYWdlLmdldEl0ZW0ocGVyc2lzdEtleSk7XG4gICAgaWYgKCFzdG9yZWRSYXcpIHtcbiAgICAgIHJldHVybiB7IHZhbHVlczogYmFzZUNsb25lIH07XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RvcmVkUmF3KSBhcyBQYXJ0aWFsPFQ+O1xuICAgIGNvbnN0IG1lcmdlZCA9IG1lcmdlRGVlcChiYXNlQ2xvbmUsIHBhcnNlZCk7XG4gICAgcmV0dXJuIHsgdmFsdWVzOiBtZXJnZWQgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgdmFsdWVzOiBiYXNlQ2xvbmUgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRUcmVlTm9kZTxUPihzdGF0ZTogdW5rbm93bik6IGFzc2VydHMgc3RhdGUgaXMgVHJlZU5vZGU8VD4ge1xuICBpZiAoIXN0YXRlIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RhdGUgc3RydWN0dXJlIGZvciBmb3JtIHRyZWUnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlRmllbGRDb25maWcoXG4gIGZpZWxkQ29uZmlnczogUmVjb3JkPHN0cmluZywgRmllbGRDb25maWc+LFxuICBwYXRoOiBzdHJpbmdcbik6IEZpZWxkQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGZpZWxkQ29uZmlnc1twYXRoXSkge1xuICAgIHJldHVybiBmaWVsZENvbmZpZ3NbcGF0aF07XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmllbGRDb25maWdzKTtcbiAgbGV0IG1hdGNoOiB7IGtleTogc3RyaW5nOyBjb25maWc6IEZpZWxkQ29uZmlnIH0gfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmICgha2V5LmluY2x1ZGVzKCcqJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobWF0Y2hQYXRoKGtleSwgcGF0aCkpIHtcbiAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2gua2V5Lmxlbmd0aCA8IGtleS5sZW5ndGgpIHtcbiAgICAgICAgbWF0Y2ggPSB7IGtleSwgY29uZmlnOiBmaWVsZENvbmZpZ3Nba2V5XSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChtYXRjaCkge1xuICAgIHJldHVybiBtYXRjaC5jb25maWc7XG4gIH1cblxuICByZXR1cm4gZmllbGRDb25maWdzWycqJ107XG59XG5cbmZ1bmN0aW9uIGZpbmRWYWxpZGF0b3I8VD4obWFwOiBSZWNvcmQ8c3RyaW5nLCBUPiwgcGF0aDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gIGlmIChtYXBbcGF0aF0pIHtcbiAgICByZXR1cm4gbWFwW3BhdGhdO1xuICB9XG5cbiAgbGV0IGNhbmRpZGF0ZTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IFQgfSB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWFwKSkge1xuICAgIGlmICgha2V5LmluY2x1ZGVzKCcqJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobWF0Y2hQYXRoKGtleSwgcGF0aCkpIHtcbiAgICAgIGlmICghY2FuZGlkYXRlIHx8IGNhbmRpZGF0ZS5rZXkubGVuZ3RoIDwga2V5Lmxlbmd0aCkge1xuICAgICAgICBjYW5kaWRhdGUgPSB7IGtleSwgdmFsdWU6IG1hcFtrZXldIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZSkge1xuICAgIHJldHVybiBjYW5kaWRhdGUudmFsdWU7XG4gIH1cblxuICByZXR1cm4gbWFwWycqJ107XG59XG5cbmludGVyZmFjZSBQZXJzaXN0Q29udHJvbGxlciB7XG4gIHNjaGVkdWxlUGVyc2lzdDogKCkgPT4gdm9pZDtcbiAgcGVyc2lzdEltbWVkaWF0ZWx5OiAoKSA9PiB2b2lkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQZXJzaXN0Q29udHJvbGxlcihcbiAgZm9ybUdyb3VwOiBGb3JtR3JvdXAsXG4gIHBlcnNpc3RLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgc3RvcmFnZTogUGljazxTdG9yYWdlLCAnZ2V0SXRlbScgfCAnc2V0SXRlbScgfCAncmVtb3ZlSXRlbSc+IHwgdW5kZWZpbmVkLFxuICBkZWJvdW5jZU1zOiBudW1iZXIsXG4gIGNsZWFudXBDYWxsYmFja3M6IEFycmF5PCgpID0+IHZvaWQ+XG4pOiBQZXJzaXN0Q29udHJvbGxlciB7XG4gIGlmICghcGVyc2lzdEtleSB8fCAhc3RvcmFnZSkge1xuICAgIHJldHVybiB7XG4gICAgICBzY2hlZHVsZVBlcnNpc3Q6ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgIHBlcnNpc3RJbW1lZGlhdGVseTogKCkgPT4gdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgcGVyc2lzdCA9ICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgIHN0b3JhZ2Uuc2V0SXRlbShwZXJzaXN0S2V5LCBwYXlsb2FkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFN3YWxsb3cgcGVyc2lzdGVuY2UgZXJyb3JzIHRvIGF2b2lkIGJyZWFraW5nIGZvcm0gdXBkYXRlc1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzY2hlZHVsZVBlcnNpc3QgPSAoKSA9PiB7XG4gICAgaWYgKGRlYm91bmNlTXMgPD0gMCkge1xuICAgICAgcGVyc2lzdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG5cbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgcGVyc2lzdCgpO1xuICAgIH0sIGRlYm91bmNlTXMpO1xuICB9O1xuXG4gIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzY2hlZHVsZVBlcnNpc3QsXG4gICAgcGVyc2lzdEltbWVkaWF0ZWx5OiBwZXJzaXN0LFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQU5HVUxBUiBESVJFQ1RJVkVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2ltcGxlIGRpcmVjdGl2ZSBmb3IgdHdvLXdheSBiaW5kaW5nIHdpdGggc2lnbmFsc1xuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2lnbmFsVHJlZVNpZ25hbFZhbHVlXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2lnbmFsVmFsdWVEaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU2lnbmFsVmFsdWVEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcbiAgQElucHV0KCkgc2lnbmFsVHJlZVNpZ25hbFZhbHVlITogV3JpdGFibGVTaWduYWw8dW5rbm93bj47XG4gIEBPdXRwdXQoKSBzaWduYWxUcmVlU2lnbmFsVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHVua25vd24+KCk7XG5cbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiB1bmtub3duKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIC8vIEVtcHR5IGltcGxlbWVudGF0aW9uIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvclxuICB9O1xuICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAvLyBFbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgfTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNpZ25hbFRyZWVTaWduYWxWYWx1ZSgpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3ZhbHVlJywgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignaW5wdXQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICBoYW5kbGVDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQ/LnZhbHVlO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNpZ25hbFRyZWVTaWduYWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgICAgdGhpcy5zaWduYWxUcmVlU2lnbmFsVmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgaGFuZGxlQmx1cigpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNpZ25hbFRyZWVTaWduYWxWYWx1ZS5zZXQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnZGlzYWJsZWQnLFxuICAgICAgaXNEaXNhYmxlZFxuICAgICk7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVYUE9SVFNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBTSUdOQUxfRk9STV9ESVJFQ1RJVkVTID0gW1NpZ25hbFZhbHVlRGlyZWN0aXZlXTtcbiJdfQ==","export function required(message = 'Required') {\n return (value) => (!value ? message : null);\n}\nexport function email(message = 'Invalid email') {\n return (value) => {\n const strValue = value;\n return strValue && !strValue.includes('@') ? message : null;\n };\n}\nexport function minLength(min, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Min ${min} characters`;\n return strValue && strValue.length < min ? errorMsg : null;\n };\n}\nexport function maxLength(max, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Max ${max} characters`;\n return strValue && strValue.length > max ? errorMsg : null;\n };\n}\nexport function pattern(regex, message = 'Invalid format') {\n return (value) => {\n const strValue = value;\n return strValue && !regex.test(strValue) ? message : null;\n };\n}\nexport function min(min, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at least ${min}`;\n return numValue < min ? errorMsg : null;\n };\n}\nexport function max(max, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at most ${max}`;\n return numValue > max ? errorMsg : null;\n };\n}\nexport function compose(validators) {\n return (value) => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) {\n return error;\n }\n }\n return null;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVU7SUFDM0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBaUJELE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBTyxHQUFHLGVBQWU7SUFDN0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxPQUFPLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlELENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUNwRCxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQW1CRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVcsRUFBRSxPQUFnQjtJQUNyRCxPQUFPLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxRQUFRLEdBQUcsS0FBZSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3BELE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxPQUFPLENBQ3JCLEtBQWEsRUFDYixPQUFPLEdBQUcsZ0JBQWdCO0lBRTFCLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsT0FBTyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWdCO0lBQy9DLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUN0RCxPQUFPLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDL0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3JELE9BQU8sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQTRCO0lBQ2xELE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVHJlZS1zaGFrZWFibGUgdmFsaWRhdG9yIGZ1bmN0aW9ucyBmb3IgZm9ybSBmaWVsZHNcbiAqXG4gKiBUaGVzZSB2YWxpZGF0b3JzIGFyZSBleHBvcnRlZCBhcyBpbmRpdmlkdWFsIGZ1bmN0aW9ucyB0byBlbmFibGVcbiAqIHRyZWUtc2hha2luZy4gT25seSB0aGUgdmFsaWRhdG9ycyB5b3UgYWN0dWFsbHkgdXNlIHdpbGwgYmUgaW5jbHVkZWRcbiAqIGluIHlvdXIgYnVuZGxlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmllbGRWYWxpZGF0b3IgfSBmcm9tICcuL25nLWZvcm1zJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVxdWlyZWQgZmllbGQgdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBDdXN0b20gZXJyb3IgbWVzc2FnZSAoZGVmYXVsdDogXCJSZXF1aXJlZFwiKVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlcnJvciBtZXNzYWdlIGlmIHZhbHVlIGlzIGZhbHN5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIG5hbWU6IHJlcXVpcmVkKCksXG4gKiAgICAgZW1haWw6IHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChtZXNzYWdlID0gJ1JlcXVpcmVkJyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4gKCF2YWx1ZSA/IG1lc3NhZ2UgOiBudWxsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVtYWlsIGZvcm1hdCB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZW1haWxcIilcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgQCBzeW1ib2xcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgZW1haWw6IGVtYWlsKCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2UgPSAnSW52YWxpZCBlbWFpbCcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXN0clZhbHVlLmluY2x1ZGVzKCdAJykgPyBtZXNzYWdlIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWluaW11bSBsZW5ndGggdmFsaWRhdG9yIGZvciBzdHJpbmdzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gcmVxdWlyZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBwYXNzd29yZDogbWluTGVuZ3RoKDgpLFxuICogICAgIGRlc2NyaXB0aW9uOiBtaW5MZW5ndGgoMTAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGF0IGxlYXN0IDEwIGNoYXJhY3RlcnMnKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNaW4gJHttaW59IGNoYXJhY3RlcnNgO1xuICAgIHJldHVybiBzdHJWYWx1ZSAmJiBzdHJWYWx1ZS5sZW5ndGggPCBtaW4gPyBlcnJvck1zZyA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1heGltdW0gbGVuZ3RoIHZhbGlkYXRvciBmb3Igc3RyaW5nc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICB1c2VybmFtZTogbWF4TGVuZ3RoKDIwKSxcbiAqICAgICBiaW86IG1heExlbmd0aCg1MDAsICdCaW8gbXVzdCBiZSB1bmRlciA1MDAgY2hhcmFjdGVycycpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXhMZW5ndGgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE1heCAke21heH0gY2hhcmFjdGVyc2A7XG4gICAgcmV0dXJuIHN0clZhbHVlICYmIHN0clZhbHVlLmxlbmd0aCA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVnZXggcGF0dGVybiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gcmVnZXggLSBSZWd1bGFyIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0XG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZm9ybWF0XCIpXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCB0ZXN0cyB2YWx1ZSBhZ2FpbnN0IHJlZ2V4XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIHBob25lOiBwYXR0ZXJuKC9eXFxkezN9LVxcZHszfS1cXGR7NH0kLywgJ1Bob25lIG11c3QgYmUgaW4gZm9ybWF0OiAxMjMtNDU2LTc4OTAnKSxcbiAqICAgICB6aXBDb2RlOiBwYXR0ZXJuKC9eXFxkezV9JC8sICdaaXAgY29kZSBtdXN0IGJlIDUgZGlnaXRzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdHRlcm4oXG4gIHJlZ2V4OiBSZWdFeHAsXG4gIG1lc3NhZ2UgPSAnSW52YWxpZCBmb3JtYXQnXG4pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXJlZ2V4LnRlc3Qoc3RyVmFsdWUpID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1pbmltdW0gdmFsdWUgdmFsaWRhdG9yIGZvciBudW1iZXJzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQHBhcmFtIG1lc3NhZ2UgLSBPcHRpb25hbCBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIG51bWVyaWMgbWluaW11bVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBhZ2U6IG1pbigxOCwgJ011c3QgYmUgYXQgbGVhc3QgMTggeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1pbigxKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbnVtVmFsdWUgPSB2YWx1ZSBhcyBudW1iZXI7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNdXN0IGJlIGF0IGxlYXN0ICR7bWlufWA7XG4gICAgcmV0dXJuIG51bVZhbHVlIDwgbWluID8gZXJyb3JNc2cgOiBudWxsO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXhpbXVtIHZhbHVlIHZhbGlkYXRvciBmb3IgbnVtYmVyc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgdmFsdWVcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBudW1lcmljIG1heGltdW1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgYWdlOiBtYXgoMTIwLCAnTXVzdCBiZSB1bmRlciAxMjAgeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1heCgxMDApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBudW1WYWx1ZSA9IHZhbHVlIGFzIG51bWJlcjtcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE11c3QgYmUgYXQgbW9zdCAke21heH1gO1xuICAgIHJldHVybiBudW1WYWx1ZSA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSB2YWxpZGF0b3JzIGludG8gYSBzaW5nbGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHZhbGlkYXRvcnMgLSBBcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIENvbWJpbmVkIHZhbGlkYXRvciB0aGF0IHJldHVybnMgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiBjb21wb3NlKFtcbiAqICAgICAgIHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpLFxuICogICAgICAgZW1haWwoJ0ludmFsaWQgZW1haWwgZm9ybWF0JyksXG4gKiAgICAgICBwYXR0ZXJuKC9AY29tcGFueVxcLmNvbSQvLCAnTXVzdCBiZSBhIGNvbXBhbnkgZW1haWwnKVxuICogICAgIF0pXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlKHZhbGlkYXRvcnM6IEZpZWxkVmFsaWRhdG9yW10pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cbiJdfQ==","import { firstValueFrom, isObservable } from 'rxjs';\nexport function unique(checkFn, message = 'Already exists') {\n return async (value) => {\n if (!value)\n return null;\n const exists = await checkFn(value);\n return exists ? message : null;\n };\n}\nexport function debounce(validator, delayMs) {\n let timeoutId;\n return async (value) => {\n return new Promise((resolve) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(async () => {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n resolve(result);\n }, delayMs);\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL2FzeW5jLXZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUErQnBELE1BQU0sVUFBVSxNQUFNLENBQ3BCLE9BQTZDLEVBQzdDLE9BQU8sR0FBRyxnQkFBZ0I7SUFFMUIsT0FBTyxLQUFLLEVBQUUsS0FBYyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsUUFBUSxDQUN0QixTQUE0QyxFQUM1QyxPQUFlO0lBRWYsSUFBSSxTQUF3QyxDQUFDO0lBRTdDLE9BQU8sS0FBSyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDaEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO29CQUNyQyxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNsQyxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUcmVlLXNoYWtlYWJsZSBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb25zIGZvciBmb3JtIGZpZWxkc1xuICovXG5cbmltcG9ydCB0eXBlIHsgRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuIH0gZnJvbSAnLi9uZy1mb3Jtcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhc3luYyB1bmlxdWVuZXNzIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSBjaGVja0ZuIC0gQXN5bmMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdmFsdWUgYWxyZWFkeSBleGlzdHNcbiAqIEBwYXJhbSBtZXNzYWdlIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgKGRlZmF1bHQ6IFwiQWxyZWFkeSBleGlzdHNcIilcbiAqIEByZXR1cm5zIEFzeW5jIHZhbGlkYXRvciBmdW5jdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiB1bmlxdWUoXG4gKiAgICAgICBhc3luYyAoZW1haWwpID0+IHtcbiAqICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9jaGVjay1lbWFpbD9lbWFpbD0ke2VtYWlsfWApO1xuICogICAgICAgICBjb25zdCB7IGV4aXN0cyB9ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICogICAgICAgICByZXR1cm4gZXhpc3RzO1xuICogICAgICAgfSxcbiAqICAgICAgICdUaGlzIGVtYWlsIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCdcbiAqICAgICApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWUoXG4gIGNoZWNrRm46ICh2YWx1ZTogdW5rbm93bikgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgbWVzc2FnZSA9ICdBbHJlYWR5IGV4aXN0cydcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCBjaGVja0ZuKHZhbHVlKTtcbiAgICByZXR1cm4gZXhpc3RzID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBhc3luYyB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gdmFsaWRhdG9yIC0gVGhlIGFzeW5jIHZhbGlkYXRvciB0byBkZWJvdW5jZVxuICogQHBhcmFtIGRlbGF5TXMgLSBEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHJ1bm5pbmcgdmFsaWRhdGlvblxuICogQHJldHVybnMgRGVib3VuY2VkIGFzeW5jIHZhbGlkYXRvclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIHVzZXJuYW1lOiBkZWJvdW5jZShcbiAqICAgICAgIHVuaXF1ZShjaGVja1VzZXJuYW1lLCAnVXNlcm5hbWUgdGFrZW4nKSxcbiAqICAgICAgIDUwMCAvLyBXYWl0IDUwMG1zIGFmdGVyIHVzZXIgc3RvcHMgdHlwaW5nXG4gKiAgICAgKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2UoXG4gIHZhbGlkYXRvcjogRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+LFxuICBkZWxheU1zOiBudW1iZXJcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1heWJlQXN5bmMgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc09ic2VydmFibGUobWF5YmVBc3luYylcbiAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1heWJlQXN5bmMpXG4gICAgICAgICAgOiBhd2FpdCBtYXliZUFzeW5jO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9LCBkZWxheU1zKTtcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==","import { signal } from '@angular/core';\nimport { deepClone, snapshotsEqual } from '@signaltree/shared';\nexport function withFormHistory(formTree, options = {}) {\n const capacity = Math.max(1, options.capacity ?? 10);\n const historySignal = signal({\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n }, ...(ngDevMode ? [{ debugName: \"historySignal\" }] : []));\n let recording = true;\n let suppressUpdates = 0;\n let internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n const subscription = formTree.form.valueChanges.subscribe(() => {\n if (suppressUpdates > 0) {\n suppressUpdates--;\n return;\n }\n if (!recording) {\n internalHistory = {\n ...internalHistory,\n present: deepClone(formTree.form.getRawValue()),\n };\n return;\n }\n const snapshot = deepClone(formTree.form.getRawValue());\n if (snapshotsEqual(internalHistory.present, snapshot)) {\n internalHistory = {\n ...internalHistory,\n present: snapshot,\n };\n historySignal.set(cloneHistory(internalHistory));\n return;\n }\n const updatedPast = [...internalHistory.past, internalHistory.present];\n if (updatedPast.length > capacity) {\n updatedPast.shift();\n }\n internalHistory = {\n past: updatedPast,\n present: snapshot,\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n });\n const originalDestroy = formTree.destroy;\n formTree.destroy = () => {\n subscription.unsubscribe();\n originalDestroy();\n };\n const undo = () => {\n const history = historySignal();\n if (history.past.length === 0) {\n return;\n }\n const previous = deepClone(history.past[history.past.length - 1]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(previous);\n recording = true;\n internalHistory = {\n past: history.past.slice(0, -1),\n present: previous,\n future: [history.present, ...history.future],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const redo = () => {\n const history = historySignal();\n if (history.future.length === 0) {\n return;\n }\n const next = deepClone(history.future[0]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(next);\n recording = true;\n internalHistory = {\n past: [...history.past, history.present],\n present: next,\n future: history.future.slice(1),\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const clearHistory = () => {\n internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n function cloneHistory(state) {\n return {\n past: state.past.map((entry) => deepClone(entry)),\n present: deepClone(state.present),\n future: state.future.map((entry) => deepClone(entry)),\n };\n }\n return Object.assign(formTree, {\n undo,\n redo,\n clearHistory,\n history: historySignal.asReadonly(),\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9oaXN0b3J5L2hpc3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBNEMvRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixRQUFxQixFQUNyQixVQUFpQyxFQUFFO0lBT25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFpQjtRQUMzQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLHlEQUFDLENBQUM7SUFFSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUksZUFBZSxHQUFtQjtRQUNwQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQzdELElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2Ys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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBzbmFwc2hvdHNFcXVhbCB9IGZyb20gJ0BzaWduYWx0cmVlL3NoYXJlZCc7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzIGluIHNlY29uZGFyeSBlbnRyeSBwb2ludHNcbmludGVyZmFjZSBGb3JtVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZm9ybTogYW55OyAvLyBGb3JtR3JvdXBcbiAgdW53cmFwKCk6IFQ7XG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgc2V0VmFsdWVzKHZhbHVlczogUGFydGlhbDxUPik6IHZvaWQ7XG59XG5cbi8qKlxuICogRm9ybSBoaXN0b3J5IHN0YXRlIHN0cnVjdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1IaXN0b3J5PFQ+IHtcbiAgcGFzdDogVFtdO1xuICBwcmVzZW50OiBUO1xuICBmdXR1cmU6IFRbXTtcbn1cblxuLyoqXG4gKiBFbmhhbmNlcyBhIEZvcm1UcmVlIHdpdGggdW5kby9yZWRvIGNhcGFiaWxpdGllcy5cbiAqIFByb3ZpZGVzIGZvcm0tc3BlY2lmaWMgaGlzdG9yeSBtYW5hZ2VtZW50IHdpdGggY2FwYWNpdHkgbGltaXRzIGFuZCBjaGFuZ2UgdHJhY2tpbmcuXG4gKlxuICogQHBhcmFtIGZvcm1UcmVlIC0gVGhlIGZvcm0gdHJlZSB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2FwYWNpdHkgLSBNYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGVudHJpZXMgKGRlZmF1bHQ6IDEwKVxuICogQHJldHVybnMgRXh0ZW5kZWQgRm9ybVRyZWUgd2l0aCB1bmRvLCByZWRvLCBhbmQgaGlzdG9yeSBhY2Nlc3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZm9ybSA9IGNyZWF0ZUZvcm1UcmVlKHsgbmFtZTogJycsIGVtYWlsOiAnJyB9KTtcbiAqIGNvbnN0IGZvcm1XaXRoSGlzdG9yeSA9IHdpdGhGb3JtSGlzdG9yeShmb3JtLCB7IGNhcGFjaXR5OiAyMCB9KTtcbiAqXG4gKiBmb3JtLiQubmFtZS5zZXQoJ0pvaG4nKTtcbiAqIGZvcm0uJC5lbWFpbC5zZXQoJ2pvaG5AZXhhbXBsZS5jb20nKTtcbiAqXG4gKiBmb3JtV2l0aEhpc3RvcnkudW5kbygpOyAvLyBSZXZlcnRzIGVtYWlsIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnVuZG8oKTsgLy8gUmV2ZXJ0cyBuYW1lIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnJlZG8oKTsgLy8gUmVhcHBsaWVzIG5hbWUgY2hhbmdlXG4gKlxuICogY29uc29sZS5sb2coZm9ybVdpdGhIaXN0b3J5Lmhpc3RvcnkoKS5wYXN0Lmxlbmd0aCk7IC8vIDFcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEZvcm1IaXN0b3J5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGZvcm1UcmVlOiBGb3JtVHJlZTxUPixcbiAgb3B0aW9uczogeyBjYXBhY2l0eT86IG51bWJlciB9ID0ge31cbik6IEZvcm1UcmVlPFQ+ICYge1xuICB1bmRvOiAoKSA9PiB2b2lkO1xuICByZWRvOiAoKSA9PiB2b2lkO1xuICBjbGVhckhpc3Rvcnk6ICgpID0+IHZvaWQ7XG4gIGhpc3Rvcnk6IFNpZ25hbDxGb3JtSGlzdG9yeTxUPj47XG59IHtcbiAgY29uc3QgY2FwYWNpdHkgPSBNYXRoLm1heCgxLCBvcHRpb25zLmNhcGFjaXR5ID8/IDEwKTtcbiAgY29uc3QgaGlzdG9yeVNpZ25hbCA9IHNpZ25hbDxGb3JtSGlzdG9yeTxUPj4oe1xuICAgIHBhc3Q6IFtdLFxuICAgIHByZXNlbnQ6IGRlZXBDbG9uZShmb3JtVHJlZS5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgVCksXG4gICAgZnV0dXJlOiBbXSxcbiAgfSk7XG5cbiAgbGV0IHJlY29yZGluZyA9IHRydWU7XG4gIGxldCBzdXBwcmVzc1VwZGF0ZXMgPSAwO1xuICBsZXQgaW50ZXJuYWxIaXN0b3J5OiBGb3JtSGlzdG9yeTxUPiA9IHtcbiAgICBwYXN0OiBbXSxcbiAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgIGZ1dHVyZTogW10sXG4gIH07XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZm9ybVRyZWUuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICBpZiAoc3VwcHJlc3NVcGRhdGVzID4gMCkge1xuICAgICAgc3VwcHJlc3NVcGRhdGVzLS07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmRpbmcpIHtcbiAgICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxIaXN0b3J5LFxuICAgICAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc25hcHNob3QgPSBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpO1xuICAgIGlmIChzbmFwc2hvdHNFcXVhbChpbnRlcm5hbEhpc3RvcnkucHJlc2VudCwgc25hcHNob3QpKSB7XG4gICAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICAgIC4uLmludGVybmFsSGlzdG9yeSxcbiAgICAgICAgcHJlc2VudDogc25hcHNob3QsXG4gICAgICB9O1xuICAgICAgaGlzdG9yeVNpZ25hbC5zZXQoY2xvbmVIaXN0b3J5KGludGVybmFsSGlzdG9yeSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUGFzdCA9IFsuLi5pbnRlcm5hbEhpc3RvcnkucGFzdCwgaW50ZXJuYWxIaXN0b3J5LnByZXNlbnRdO1xuICAgIGlmICh1cGRhdGVkUGFzdC5sZW5ndGggPiBjYXBhY2l0eSkge1xuICAgICAgdXBkYXRlZFBhc3Quc2hpZnQoKTtcbiAgICB9XG4gICAgaW50ZXJuYWxIaXN0b3J5ID0ge1xuICAgICAgcGFzdDogdXBkYXRlZFBhc3QsXG4gICAgICBwcmVzZW50OiBzbmFwc2hvdCxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH0pO1xuXG4gIGNvbnN0IG9yaWdpbmFsRGVzdHJveSA9IGZvcm1UcmVlLmRlc3Ryb3k7XG4gIGZvcm1UcmVlLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgb3JpZ2luYWxEZXN0cm95KCk7XG4gIH07XG5cbiAgY29uc3QgdW5kbyA9ICgpID0+IHtcbiAgICBjb25zdCBoaXN0b3J5ID0gaGlzdG9yeVNpZ25hbCgpO1xuICAgIGlmIChoaXN0b3J5LnBhc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzID0gZGVlcENsb25lKGhpc3RvcnkucGFzdFtoaXN0b3J5LnBhc3QubGVuZ3RoIC0gMV0pO1xuICAgIHJlY29yZGluZyA9IGZhbHNlO1xuICAgIHN1cHByZXNzVXBkYXRlcysrO1xuICAgIGZvcm1UcmVlLnNldFZhbHVlcyhwcmV2aW91cyk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBoaXN0b3J5LnBhc3Quc2xpY2UoMCwgLTEpLFxuICAgICAgcHJlc2VudDogcHJldmlvdXMsXG4gICAgICBmdXR1cmU6IFtoaXN0b3J5LnByZXNlbnQsIC4uLmhpc3RvcnkuZnV0dXJlXSxcbiAgICB9O1xuICAgIGhpc3RvcnlTaWduYWwuc2V0KGNsb25lSGlzdG9yeShpbnRlcm5hbEhpc3RvcnkpKTtcbiAgfTtcblxuICBjb25zdCByZWRvID0gKCkgPT4ge1xuICAgIGNvbnN0IGhpc3RvcnkgPSBoaXN0b3J5U2lnbmFsKCk7XG4gICAgaWYgKGhpc3RvcnkuZnV0dXJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gZGVlcENsb25lKGhpc3RvcnkuZnV0dXJlWzBdKTtcbiAgICByZWNvcmRpbmcgPSBmYWxzZTtcbiAgICBzdXBwcmVzc1VwZGF0ZXMrKztcbiAgICBmb3JtVHJlZS5zZXRWYWx1ZXMobmV4dCk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBbLi4uaGlzdG9yeS5wYXN0LCBoaXN0b3J5LnByZXNlbnRdLFxuICAgICAgcHJlc2VudDogbmV4dCxcbiAgICAgIGZ1dHVyZTogaGlzdG9yeS5mdXR1cmUuc2xpY2UoMSksXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgIHBhc3Q6IFtdLFxuICAgICAgcHJlc2VudDogZGVlcENsb25lKGZvcm1UcmVlLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBUKSxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gY2xvbmVIaXN0b3J5KHN0YXRlOiBGb3JtSGlzdG9yeTxUPik6IEZvcm1IaXN0b3J5PFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFzdDogc3RhdGUucGFzdC5tYXAoKGVudHJ5KSA9PiBkZWVwQ2xvbmUoZW50cnkpKSxcbiAgICAgIHByZXNlbnQ6IGRlZXBDbG9uZShzdGF0ZS5wcmVzZW50KSxcbiAgICAgIGZ1dHVyZTogc3RhdGUuZnV0dXJlLm1hcCgoZW50cnkpID0+IGRlZXBDbG9uZShlbnRyeSkpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihmb3JtVHJlZSwge1xuICAgIHVuZG8sXG4gICAgcmVkbyxcbiAgICBjbGVhckhpc3RvcnksXG4gICAgaGlzdG9yeTogaGlzdG9yeVNpZ25hbC5hc1JlYWRvbmx5KCksXG4gIH0pO1xufVxuIl19"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signaltree-ng-forms.mjs","sources":["../tmp-esm2022/core/ng-forms.js","../tmp-esm2022/core/validators.js","../tmp-esm2022/core/async-validators.js","../tmp-esm2022/history/history.js"],"sourcesContent":["import { computed, DestroyRef, Directive, effect, ElementRef, EventEmitter, forwardRef, HostListener, inject, Input, isSignal, Output, Renderer2, signal, } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, } from '@angular/forms';\nimport { signalTree } from '@signaltree/core';\nimport { deepClone, matchPath, mergeDeep, parsePath } from '@signaltree/shared';\nimport { firstValueFrom, isObservable } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class FormValidationError extends Error {\n errors;\n asyncErrors;\n constructor(errors, asyncErrors) {\n super('Form validation failed');\n this.errors = errors;\n this.asyncErrors = asyncErrors;\n this.name = 'FormValidationError';\n }\n}\nconst SYNC_ERROR_KEY = 'signaltree';\nconst ASYNC_ERROR_KEY = 'signaltreeAsync';\nexport function createFormTree(initialValues, config = {}) {\n const { validators: baseValidators = {}, asyncValidators: baseAsyncValidators = {}, destroyRef: providedDestroyRef, fieldConfigs = {}, conditionals = [], persistKey, storage, persistDebounceMs = 100, validationBatchMs = 0, ...treeConfig } = config;\n const syncValidators = normalizeSyncValidators(baseValidators, fieldConfigs);\n const asyncValidators = normalizeAsyncValidators(baseAsyncValidators, fieldConfigs);\n const { values: hydratedInitialValues } = hydrateInitialValues(initialValues, persistKey, storage);\n const initialSnapshot = deepClone(hydratedInitialValues);\n const valuesTree = signalTree(hydratedInitialValues, treeConfig);\n assertTreeNode(valuesTree.state);\n const flattenedState = valuesTree.state;\n enhanceArraysRecursively(flattenedState);\n const formGroup = createAbstractControl(hydratedInitialValues, '', syncValidators, asyncValidators);\n const destroyRef = providedDestroyRef ?? tryInjectDestroyRef();\n const cleanupCallbacks = [];\n const errors = signal({}, ...(ngDevMode ? [{ debugName: \"errors\" }] : []));\n const asyncErrors = signal({}, ...(ngDevMode ? [{ debugName: \"asyncErrors\" }] : []));\n const touched = signal({}, ...(ngDevMode ? [{ debugName: \"touched\" }] : []));\n const asyncValidating = signal({}, ...(ngDevMode ? [{ debugName: \"asyncValidating\" }] : []));\n const dirty = signal(formGroup.dirty, ...(ngDevMode ? [{ debugName: \"dirty\" }] : []));\n const valid = signal(formGroup.valid && !formGroup.pending, ...(ngDevMode ? [{ debugName: \"valid\" }] : []));\n const submitting = signal(false, ...(ngDevMode ? [{ debugName: \"submitting\" }] : []));\n const refreshRunner = () => {\n const snapshot = collectControlSnapshot(formGroup);\n errors.set(snapshot.syncErrors);\n asyncErrors.set(snapshot.asyncErrors);\n touched.set(snapshot.touched);\n asyncValidating.set(snapshot.pending);\n dirty.set(formGroup.dirty);\n valid.set(formGroup.valid && !formGroup.pending);\n };\n let refreshTimer = null;\n const refreshAggregates = (immediate = false) => {\n if (immediate || validationBatchMs <= 0) {\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n refreshTimer = null;\n }\n refreshRunner();\n return;\n }\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n refreshTimer = setTimeout(() => {\n refreshTimer = null;\n refreshRunner();\n }, validationBatchMs);\n };\n refreshAggregates(true);\n const persistController = createPersistController(formGroup, persistKey, storage, persistDebounceMs, cleanupCallbacks);\n persistController.persistImmediately();\n const fieldErrorKeys = new Set([\n ...Object.keys(syncValidators),\n ...Object.keys(asyncValidators),\n ]);\n const fieldErrors = {};\n const fieldAsyncErrors = {};\n fieldErrorKeys.forEach((fieldPath) => {\n fieldErrors[fieldPath] = computed(() => errors()[fieldPath]);\n fieldAsyncErrors[fieldPath] = computed(() => asyncErrors()[fieldPath]);\n });\n const fieldConfigLookup = (path) => resolveFieldConfig(fieldConfigs, path);\n const connectControlRecursive = (control, path) => {\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n connectControlRecursive(child, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n const arraySignal = getSignalAtPath(flattenedState, path);\n if (arraySignal) {\n connectFormArrayAndSignal(control, arraySignal, path, syncValidators, asyncValidators, cleanupCallbacks, connectControlRecursive);\n }\n control.controls.forEach((child, index) => {\n connectControlRecursive(child, joinPath(path, String(index)));\n });\n return;\n }\n const signalAtPath = getSignalAtPath(flattenedState, path);\n if (signalAtPath) {\n connectControlAndSignal(control, signalAtPath, cleanupCallbacks, fieldConfigLookup(path));\n }\n };\n connectControlRecursive(formGroup, '');\n const conditionalState = new Map();\n const applyConditionals = conditionals.length > 0\n ? () => {\n const values = formGroup.getRawValue();\n conditionals.forEach(({ when, fields }) => {\n let visible = true;\n try {\n visible = when(values);\n }\n catch {\n visible = true;\n }\n fields.forEach((fieldPath) => {\n const control = formGroup.get(fieldPath);\n if (!control) {\n return;\n }\n const previous = conditionalState.get(fieldPath);\n if (previous === visible) {\n return;\n }\n conditionalState.set(fieldPath, visible);\n if (visible) {\n control.enable({ emitEvent: false });\n }\n else {\n control.disable({ emitEvent: false });\n }\n });\n });\n }\n : () => undefined;\n applyConditionals();\n const aggregateSubscriptions = [];\n aggregateSubscriptions.push(formGroup.valueChanges.subscribe(() => {\n refreshAggregates();\n persistController.schedulePersist();\n applyConditionals();\n }));\n aggregateSubscriptions.push(formGroup.statusChanges.subscribe(() => refreshAggregates()));\n if (formGroup.events) {\n aggregateSubscriptions.push(formGroup.events.subscribe(() => refreshAggregates()));\n }\n cleanupCallbacks.push(() => {\n aggregateSubscriptions.forEach((sub) => sub.unsubscribe());\n if (refreshTimer) {\n clearTimeout(refreshTimer);\n }\n });\n if (destroyRef) {\n destroyRef.onDestroy(() => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n });\n }\n const setValue = (field, value) => {\n const targetSignal = getSignalAtPath(flattenedState, field);\n const control = formGroup.get(field);\n if (targetSignal && 'set' in targetSignal) {\n targetSignal.set(value);\n }\n else if (control) {\n control.setValue(value, { emitEvent: true });\n }\n if (control) {\n const untypedControl = control;\n untypedControl.markAsTouched();\n untypedControl.markAsDirty();\n untypedControl.updateValueAndValidity({ emitEvent: true });\n }\n refreshAggregates(true);\n persistController.schedulePersist();\n };\n const setValues = (values) => {\n Object.entries(values).forEach(([key, value]) => {\n setValue(key, value);\n });\n };\n const reset = () => {\n formGroup.reset(initialSnapshot);\n submitting.set(false);\n refreshAggregates(true);\n persistController.persistImmediately();\n applyConditionals();\n };\n const validate = async (field) => {\n if (field) {\n const control = formGroup.get(field);\n if (!control) {\n return;\n }\n control.markAsTouched();\n control.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(control);\n refreshAggregates(true);\n return;\n }\n formGroup.markAllAsTouched();\n formGroup.updateValueAndValidity({ emitEvent: true });\n refreshAggregates(true);\n await waitForPending(formGroup);\n refreshAggregates(true);\n };\n const submit = async (submitFn) => {\n submitting.set(true);\n try {\n await validate();\n if (!valid()) {\n throw new FormValidationError(errors(), asyncErrors());\n }\n const currentValues = formGroup.getRawValue();\n const result = await submitFn(currentValues);\n return result;\n }\n finally {\n submitting.set(false);\n refreshAggregates(true);\n }\n };\n const destroy = () => {\n cleanupCallbacks.splice(0).forEach((fn) => fn());\n };\n const formTree = {\n state: flattenedState,\n $: flattenedState,\n form: formGroup,\n errors,\n asyncErrors,\n touched,\n asyncValidating,\n dirty,\n valid,\n submitting,\n unwrap: () => valuesTree(),\n setValue,\n setValues,\n reset,\n submit,\n validate,\n getFieldError: (field) => fieldErrors[field] || computed(() => undefined),\n getFieldAsyncError: (field) => fieldAsyncErrors[field] || computed(() => undefined),\n getFieldTouched: (field) => computed(() => formGroup.get(field)?.touched ?? false),\n isFieldValid: (field) => computed(() => {\n const control = formGroup.get(field);\n return !!control && control.valid && !control.pending;\n }),\n isFieldAsyncValidating: (field) => computed(() => !!formGroup.get(field)?.pending),\n fieldErrors,\n fieldAsyncErrors,\n values: valuesTree,\n destroy,\n };\n return formTree;\n}\nexport function createVirtualFormArray(items, visibleRange, controlFactory = (value) => new FormControl(value)) {\n const start = Math.max(0, visibleRange.start);\n const end = Math.max(start, visibleRange.end);\n const controls = items\n .slice(start, end)\n .map((item, offset) => controlFactory(item, start + offset));\n return new FormArray(controls);\n}\nfunction enhanceArraysRecursively(obj, visited = new WeakSet()) {\n if (visited.has(obj)) {\n return;\n }\n visited.add(obj);\n for (const key in obj) {\n const value = obj[key];\n if (isSignal(value)) {\n const signalValue = value();\n if (Array.isArray(signalValue)) {\n obj[key] = enhanceArray(value);\n }\n }\n else if (typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value)) {\n enhanceArraysRecursively(value, visited);\n }\n }\n}\nconst enhanceArray = (arraySignal) => {\n const enhanced = arraySignal;\n enhanced.push = (item) => {\n arraySignal.update((arr) => [...arr, item]);\n };\n enhanced.removeAt = (index) => {\n arraySignal.update((arr) => arr.filter((_, i) => i !== index));\n };\n enhanced.setAt = (index, value) => {\n arraySignal.update((arr) => arr.map((item, i) => (i === index ? value : item)));\n };\n enhanced.insertAt = (index, item) => {\n arraySignal.update((arr) => [\n ...arr.slice(0, index),\n item,\n ...arr.slice(index),\n ]);\n };\n enhanced.move = (from, to) => {\n arraySignal.update((arr) => {\n const newArr = [...arr];\n const [item] = newArr.splice(from, 1);\n if (item !== undefined) {\n newArr.splice(to, 0, item);\n }\n return newArr;\n });\n };\n enhanced.clear = () => {\n arraySignal.set([]);\n };\n return enhanced;\n};\nfunction getSignalAtPath(node, path) {\n if (!path) {\n return null;\n }\n const segments = parsePath(path);\n let current = node;\n for (const segment of segments) {\n if (!current || typeof current !== 'object') {\n return null;\n }\n current = current[segment];\n }\n if (isSignal(current)) {\n return current;\n }\n return null;\n}\nfunction joinPath(parent, segment) {\n return parent ? `${parent}.${segment}` : segment;\n}\nfunction wrapSyncValidator(validator) {\n return (control) => {\n const result = validator(control.value);\n return result ? { [SYNC_ERROR_KEY]: result } : null;\n };\n}\nfunction wrapAsyncValidator(validator) {\n return async (control) => {\n try {\n const maybeAsync = validator(control.value);\n const resolved = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n return resolved ? { [ASYNC_ERROR_KEY]: resolved } : null;\n }\n catch {\n return { [ASYNC_ERROR_KEY]: 'Validation error' };\n }\n };\n}\nfunction createAbstractControl(value, path, validators, asyncValidators) {\n const syncValidator = findValidator(validators, path);\n const asyncValidator = findValidator(asyncValidators, path);\n const syncFns = syncValidator\n ? [wrapSyncValidator(syncValidator)]\n : undefined;\n const asyncFns = asyncValidator\n ? [wrapAsyncValidator(asyncValidator)]\n : undefined;\n if (Array.isArray(value)) {\n const controls = value.map((item, index) => createAbstractControl(item, joinPath(path, String(index)), validators, asyncValidators));\n return new FormArray(controls, syncFns, asyncFns);\n }\n if (isPlainObject(value)) {\n const controls = {};\n for (const [key, child] of Object.entries(value)) {\n controls[key] = createAbstractControl(child, joinPath(path, key), validators, asyncValidators);\n }\n return new FormGroup(controls, {\n validators: syncFns,\n asyncValidators: asyncFns,\n });\n }\n return new FormControl(value, {\n validators: syncFns,\n asyncValidators: asyncFns,\n nonNullable: false,\n });\n}\nfunction connectControlAndSignal(control, valueSignal, cleanupCallbacks, fieldConfig) {\n const maybeConnect = control.connect;\n if (typeof maybeConnect === 'function') {\n try {\n const res = maybeConnect.call(control, valueSignal);\n if (res &&\n typeof res.unsubscribe === 'function') {\n cleanupCallbacks.push(() => res.unsubscribe());\n }\n return;\n }\n catch {\n }\n }\n let updatingFromControl = false;\n let updatingFromSignal = false;\n let versionCounter = 0;\n let lastControlVersion = 0;\n let controlDebounceTimer = null;\n const debounceMs = fieldConfig?.debounceMs ?? 0;\n const originalSet = valueSignal.set.bind(valueSignal);\n const originalUpdate = valueSignal.update.bind(valueSignal);\n const applyControlValue = (value) => {\n updatingFromSignal = true;\n if (!Object.is(control.value, value)) {\n const untypedControl = control;\n untypedControl.setValue(value, { emitEvent: true });\n untypedControl.markAsDirty();\n }\n updatingFromSignal = false;\n };\n valueSignal.set = (value) => {\n const currentVersion = ++versionCounter;\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n if (lastControlVersion > currentVersion) {\n return;\n }\n applyControlValue(value);\n };\n valueSignal.update = (updater) => {\n const next = updater(valueSignal());\n valueSignal.set(next);\n };\n const pushUpdateFromControl = (value) => {\n updatingFromControl = true;\n lastControlVersion = ++versionCounter;\n originalSet(value);\n updatingFromControl = false;\n };\n const handleControlChange = (value) => {\n if (updatingFromSignal) {\n return;\n }\n if (debounceMs > 0) {\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n controlDebounceTimer = setTimeout(() => {\n controlDebounceTimer = null;\n pushUpdateFromControl(value);\n }, debounceMs);\n return;\n }\n pushUpdateFromControl(value);\n };\n const subscription = control.valueChanges.subscribe((value) => {\n handleControlChange(value);\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n valueSignal.set = originalSet;\n valueSignal.update = originalUpdate;\n if (controlDebounceTimer) {\n clearTimeout(controlDebounceTimer);\n }\n });\n}\nfunction connectFormArrayAndSignal(formArray, arraySignal, path, validators, asyncValidators, cleanupCallbacks, connectControlRecursive) {\n const maybeConnect = formArray.connect;\n if (typeof maybeConnect === 'function') {\n try {\n const res = maybeConnect.call(formArray, arraySignal);\n if (res &&\n typeof res.unsubscribe === 'function') {\n cleanupCallbacks.push(() => res.unsubscribe());\n }\n return;\n }\n catch {\n }\n }\n let updatingFromControl = false;\n let updatingFromSignal = false;\n const originalSet = arraySignal.set.bind(arraySignal);\n const originalUpdate = arraySignal.update.bind(arraySignal);\n arraySignal.set = (value) => {\n originalSet(value);\n if (updatingFromControl) {\n return;\n }\n updatingFromSignal = true;\n syncFormArrayFromValue(formArray, value, path, validators, asyncValidators, connectControlRecursive);\n formArray.markAsDirty();\n updatingFromSignal = false;\n };\n arraySignal.update = (updater) => {\n const next = updater(arraySignal());\n arraySignal.set(next);\n };\n const subscription = formArray.valueChanges.subscribe((value) => {\n if (updatingFromSignal) {\n return;\n }\n updatingFromControl = true;\n originalSet(value);\n updatingFromControl = false;\n });\n cleanupCallbacks.push(() => {\n subscription.unsubscribe();\n arraySignal.set = originalSet;\n arraySignal.update = originalUpdate;\n });\n syncFormArrayFromValue(formArray, arraySignal(), path, validators, asyncValidators, connectControlRecursive);\n}\nfunction syncFormArrayFromValue(formArray, nextValue, path, validators, asyncValidators, connectControlRecursive) {\n if (!Array.isArray(nextValue)) {\n nextValue = [];\n }\n while (formArray.length > nextValue.length) {\n formArray.removeAt(formArray.length - 1);\n }\n nextValue.forEach((item, index) => {\n const childPath = joinPath(path, String(index));\n const existing = formArray.at(index);\n if (!existing) {\n const control = createAbstractControl(item, childPath, validators, asyncValidators);\n formArray.insert(index, control);\n connectControlRecursive(control, childPath);\n return;\n }\n if (existing instanceof FormArray) {\n syncFormArrayFromValue(existing, Array.isArray(item) ? item : [], childPath, validators, asyncValidators, connectControlRecursive);\n return;\n }\n if (existing instanceof FormGroup) {\n if (isPlainObject(item)) {\n existing.setValue(item, {\n emitEvent: false,\n });\n }\n return;\n }\n if (!Object.is(existing.value, item)) {\n const untypedExisting = existing;\n untypedExisting.setValue(item, { emitEvent: false });\n }\n });\n}\nfunction collectControlSnapshot(control) {\n const snapshot = {\n syncErrors: {},\n asyncErrors: {},\n touched: {},\n pending: {},\n };\n traverseControls(control, (currentPath, currentControl) => {\n if (!currentPath) {\n return;\n }\n if (currentControl.touched) {\n snapshot.touched[currentPath] = true;\n }\n if (currentControl.pending) {\n snapshot.pending[currentPath] = true;\n }\n const errors = currentControl.errors;\n if (!errors) {\n return;\n }\n const syncMessage = errors[SYNC_ERROR_KEY];\n if (typeof syncMessage === 'string') {\n snapshot.syncErrors[currentPath] = syncMessage;\n }\n const asyncMessage = errors[ASYNC_ERROR_KEY];\n if (typeof asyncMessage === 'string') {\n snapshot.asyncErrors[currentPath] = asyncMessage;\n }\n }, '');\n return snapshot;\n}\nfunction traverseControls(control, visitor, path = '') {\n visitor(path, control);\n if (control instanceof FormGroup) {\n Object.entries(control.controls).forEach(([key, child]) => {\n traverseControls(child, visitor, joinPath(path, key));\n });\n return;\n }\n if (control instanceof FormArray) {\n control.controls.forEach((child, index) => {\n traverseControls(child, visitor, joinPath(path, String(index)));\n });\n }\n}\nfunction waitForPending(control) {\n if (!control.pending) {\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const subscription = control.statusChanges.subscribe(() => {\n if (!control.pending) {\n subscription.unsubscribe();\n resolve();\n }\n });\n });\n}\nfunction isPlainObject(value) {\n return (!!value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.prototype.toString.call(value) === '[object Object]');\n}\nfunction tryInjectDestroyRef() {\n try {\n return inject(DestroyRef);\n }\n catch {\n return null;\n }\n}\nfunction normalizeSyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.validators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = (value) => {\n for (const validator of validators) {\n const result = validator(value);\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction normalizeAsyncValidators(base, fieldConfigs) {\n const buckets = new Map();\n for (const [path, validator] of Object.entries(base)) {\n const existing = buckets.get(path) ?? [];\n existing.push(validator);\n buckets.set(path, existing);\n }\n for (const [path, config] of Object.entries(fieldConfigs)) {\n const validators = toValidatorArray(config.asyncValidators);\n if (validators.length === 0) {\n continue;\n }\n const existing = buckets.get(path) ?? [];\n existing.push(...validators);\n buckets.set(path, existing);\n }\n const normalized = {};\n buckets.forEach((validators, path) => {\n normalized[path] = async (value) => {\n for (const validator of validators) {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n if (result) {\n return result;\n }\n }\n return null;\n };\n });\n return { ...base, ...normalized };\n}\nfunction toValidatorArray(input) {\n if (!input) {\n return [];\n }\n if (Array.isArray(input)) {\n return input;\n }\n return Object.values(input);\n}\nfunction hydrateInitialValues(initialValues, persistKey, storage) {\n const baseClone = deepClone(initialValues);\n if (!persistKey || !storage) {\n return { values: baseClone };\n }\n try {\n const storedRaw = storage.getItem(persistKey);\n if (!storedRaw) {\n return { values: baseClone };\n }\n const parsed = JSON.parse(storedRaw);\n const merged = mergeDeep(baseClone, parsed);\n return { values: merged };\n }\n catch {\n return { values: baseClone };\n }\n}\nfunction assertTreeNode(state) {\n if (!state || typeof state !== 'object') {\n throw new Error('Invalid state structure for form tree');\n }\n}\nfunction resolveFieldConfig(fieldConfigs, path) {\n if (fieldConfigs[path]) {\n return fieldConfigs[path];\n }\n const keys = Object.keys(fieldConfigs);\n let match;\n for (const key of keys) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!match || match.key.length < key.length) {\n match = { key, config: fieldConfigs[key] };\n }\n }\n }\n if (match) {\n return match.config;\n }\n return fieldConfigs['*'];\n}\nfunction findValidator(map, path) {\n if (map[path]) {\n return map[path];\n }\n let candidate;\n for (const key of Object.keys(map)) {\n if (!key.includes('*')) {\n continue;\n }\n if (matchPath(key, path)) {\n if (!candidate || candidate.key.length < key.length) {\n candidate = { key, value: map[key] };\n }\n }\n }\n if (candidate) {\n return candidate.value;\n }\n return map['*'];\n}\nfunction createPersistController(formGroup, persistKey, storage, debounceMs, cleanupCallbacks) {\n if (!persistKey || !storage) {\n return {\n schedulePersist: () => undefined,\n persistImmediately: () => undefined,\n };\n }\n let timer = null;\n const persist = () => {\n try {\n const payload = JSON.stringify(formGroup.getRawValue());\n storage.setItem(persistKey, payload);\n }\n catch {\n }\n };\n const schedulePersist = () => {\n if (debounceMs <= 0) {\n persist();\n return;\n }\n if (timer) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n timer = null;\n persist();\n }, debounceMs);\n };\n cleanupCallbacks.push(() => {\n if (timer) {\n clearTimeout(timer);\n }\n });\n return {\n schedulePersist,\n persistImmediately: persist,\n };\n}\nexport class SignalValueDirective {\n signalTreeSignalValue;\n signalTreeSignalValueChange = new EventEmitter();\n elementRef = inject(ElementRef);\n renderer = inject(Renderer2);\n onChange = () => {\n };\n onTouched = () => {\n };\n ngOnInit() {\n effect(() => {\n const value = this.signalTreeSignalValue();\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n });\n }\n handleChange(event) {\n const target = event.target;\n const value = target?.value;\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n this.signalTreeSignalValueChange.emit(value);\n this.onChange(value);\n }\n }\n handleBlur() {\n this.onTouched();\n }\n writeValue(value) {\n if (value !== undefined) {\n this.signalTreeSignalValue.set(value);\n }\n }\n registerOnChange(fn) {\n this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.11\", ngImport: i0, type: SignalValueDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.3.11\", type: SignalValueDirective, isStandalone: true, selector: \"[signalTreeSignalValue]\", inputs: { signalTreeSignalValue: \"signalTreeSignalValue\" }, outputs: { signalTreeSignalValueChange: \"signalTreeSignalValueChange\" }, host: { listeners: { \"input\": \"handleChange($event)\", \"change\": \"handleChange($event)\", \"blur\": \"handleBlur()\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ], ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.11\", ngImport: i0, type: SignalValueDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[signalTreeSignalValue]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SignalValueDirective),\n multi: true,\n },\n ],\n standalone: true,\n }]\n }], propDecorators: { signalTreeSignalValue: [{\n type: Input\n }], signalTreeSignalValueChange: [{\n type: Output\n }], handleChange: [{\n type: HostListener,\n args: ['input', ['$event']]\n }, {\n type: HostListener,\n args: ['change', ['$event']]\n }], handleBlur: [{\n type: HostListener,\n args: ['blur']\n }] } });\nexport const SIGNAL_FORM_DIRECTIVES = [SignalValueDirective];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9uZy1mb3Jtcy9zcmMvY29yZS9uZy1mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFFUixNQUFNLEVBQ04sU0FBUyxFQUVULE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUgsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEdBR3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBNEIsTUFBTSxNQUFNLENBQUM7O0FBc0c5RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUUxQjtJQUNBO0lBRmxCLFlBQ2tCLE1BQThCLEVBQzlCLFdBQW1DO1FBRW5ELEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBSGhCLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUF3QjtRQUduRCxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQUtELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQztBQUNwQyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQVUxQyxNQUFNLFVBQVUsY0FBYyxDQUM1QixhQUFnQixFQUNoQixTQUE2QixFQUFFO0lBRS9CLE1BQU0sRUFD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QUM7O3NCQUNoQyxZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBV2pDLFlBQVk7dUJBQUMsTUFBTTs7QUFnQ3RCLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBpc1NpZ25hbCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaWduYWwsXG4gICAgc2lnbmFsLFxuICAgIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIEFzeW5jVmFsaWRhdG9yRm4gYXMgQW5ndWxhckFzeW5jVmFsaWRhdG9yRm4sXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUFycmF5LFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Hcm91cCxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBWYWxpZGF0aW9uRXJyb3JzLFxuICAgIFZhbGlkYXRvckZuIGFzIEFuZ3VsYXJWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgc2lnbmFsVHJlZSB9IGZyb20gJ0BzaWduYWx0cmVlL2NvcmUnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBtYXRjaFBhdGgsIG1lcmdlRGVlcCwgcGFyc2VQYXRoIH0gZnJvbSAnQHNpZ25hbHRyZWUvc2hhcmVkJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgQW5ndWxhciBGb3JtcyBJbnRlZ3JhdGlvbiBmb3IgU2lnbmFsVHJlZVxuICpcbiAqIFByb3ZpZGVzIGNvbXByZWhlbnNpdmUgQW5ndWxhciBmb3JtIGludGVncmF0aW9uIGluY2x1ZGluZyBGb3JtVHJlZSxcbiAqIGRpcmVjdGl2ZXMsIHZhbGlkYXRvcnMsIGVuaGFuY2VkIGFycmF5IG9wZXJhdGlvbnMsIGFuZCBSeEpTIGJyaWRnZS5cbiAqL1xuXG4vLyBSZS1leHBvcnQgY29yZSB0eXBlcyBuZWVkZWQgZm9yIGZvcm1zXG5pbXBvcnQgdHlwZSB7IFNpZ25hbFRyZWUsIFRyZWVDb25maWcsIFRyZWVOb2RlIH0gZnJvbSAnQHNpZ25hbHRyZWUvY29yZSc7XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRk9STSBUUkVFIFRZUEVTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgdHlwZSBGb3JtVHJlZUFzeW5jVmFsaWRhdG9yRm48VD4gPSAoXG4gIHZhbHVlOiBUXG4pID0+IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4gfCBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuXG5leHBvcnQgdHlwZSBFbmhhbmNlZEFycmF5U2lnbmFsPFQ+ID0gV3JpdGFibGVTaWduYWw8VFtdPiAmIHtcbiAgcHVzaDogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIHJlbW92ZUF0OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgc2V0QXQ6IChpbmRleDogbnVtYmVyLCB2YWx1ZTogVCkgPT4gdm9pZDtcbiAgaW5zZXJ0QXQ6IChpbmRleDogbnVtYmVyLCBpdGVtOiBUKSA9PiB2b2lkO1xuICBtb3ZlOiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSA9PiB2b2lkO1xuICBjbGVhcjogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIEZpZWxkVmFsaWRhdG9yID0gKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmcgfCBudWxsO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ29uZmlnIHtcbiAgZGVib3VuY2VNcz86IG51bWJlcjtcbiAgdmFsaWRhdG9ycz86IFJlY29yZDxzdHJpbmcsIEZpZWxkVmFsaWRhdG9yPiB8IEZpZWxkVmFsaWRhdG9yW107XG4gIGFzeW5jVmFsaWRhdG9ycz86XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBGb3JtVHJlZUFzeW5jVmFsaWRhdG9yRm48dW5rbm93bj4+XG4gICAgfCBBcnJheTxGb3JtVHJlZUFzeW5jVmFsaWRhdG9yRm48dW5rbm93bj4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvbmFsRmllbGQ8VD4ge1xuICB3aGVuOiAodmFsdWVzOiBUKSA9PiBib29sZWFuO1xuICBmaWVsZHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1UcmVlT3B0aW9uczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+XG4gIGV4dGVuZHMgVHJlZUNvbmZpZyB7XG4gIHZhbGlkYXRvcnM/OiBTeW5jVmFsaWRhdG9yTWFwO1xuICBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvck1hcDtcbiAgZGVzdHJveVJlZj86IERlc3Ryb3lSZWY7XG4gIGZpZWxkQ29uZmlncz86IFJlY29yZDxzdHJpbmcsIEZpZWxkQ29uZmlnPjtcbiAgY29uZGl0aW9uYWxzPzogQXJyYXk8Q29uZGl0aW9uYWxGaWVsZDxUPj47XG4gIHBlcnNpc3RLZXk/OiBzdHJpbmc7XG4gIHN0b3JhZ2U/OiBQaWNrPFN0b3JhZ2UsICdnZXRJdGVtJyB8ICdzZXRJdGVtJyB8ICdyZW1vdmVJdGVtJz47XG4gIHBlcnNpc3REZWJvdW5jZU1zPzogbnVtYmVyO1xuICB2YWxpZGF0aW9uQmF0Y2hNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGb3JtIHRyZWUgdHlwZSB0aGF0IGZsYXR0ZW5zIHRoZSBzdGF0ZSBhY2Nlc3Mgd2hpbGUgbWFpbnRhaW5pbmcgZm9ybS1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1UcmVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7XG4gIC8vIEZsYXR0ZW5lZCBzdGF0ZSBhY2Nlc3MgLSBkaXJlY3QgYWNjZXNzIHRvIGZvcm0gdmFsdWVzIGFzIHNpZ25hbHNcbiAgc3RhdGU6IFRyZWVOb2RlPFQ+O1xuICAkOiBUcmVlTm9kZTxUPjsgLy8gQWxpYXMgZm9yIHN0YXRlXG5cbiAgLy8gVW5kZXJseWluZyBBbmd1bGFyIGZvcm0gc3RydWN0dXJlXG4gIGZvcm06IEZvcm1Hcm91cDtcblxuICAvLyBGb3JtLXNwZWNpZmljIHNpZ25hbHNcbiAgZXJyb3JzOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PjtcbiAgYXN5bmNFcnJvcnM6IFdyaXRhYmxlU2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICB0b3VjaGVkOiBXcml0YWJsZVNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj47XG4gIGFzeW5jVmFsaWRhdGluZzogV3JpdGFibGVTaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+O1xuICBkaXJ0eTogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj47XG4gIHZhbGlkOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbiAgc3VibWl0dGluZzogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj47XG5cbiAgLy8gRm9ybSBtZXRob2RzXG4gIHVud3JhcCgpOiBUO1xuICBzZXRWYWx1ZShmaWVsZDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIHNldFZhbHVlcyh2YWx1ZXM6IFBhcnRpYWw8VD4pOiB2b2lkO1xuICByZXNldCgpOiB2b2lkO1xuICBzdWJtaXQ8VFJlc3VsdD4oc3VibWl0Rm46ICh2YWx1ZXM6IFQpID0+IFByb21pc2U8VFJlc3VsdD4pOiBQcm9taXNlPFRSZXN1bHQ+O1xuICB2YWxpZGF0ZShmaWVsZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLy8gRmllbGQtbGV2ZWwgaGVscGVyc1xuICBnZXRGaWVsZEVycm9yKGZpZWxkOiBzdHJpbmcpOiBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgZ2V0RmllbGRBc3luY0Vycm9yKGZpZWxkOiBzdHJpbmcpOiBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgZ2V0RmllbGRUb3VjaGVkKGZpZWxkOiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG4gIGlzRmllbGRWYWxpZChmaWVsZDogc3RyaW5nKTogU2lnbmFsPGJvb2xlYW4+O1xuICBpc0ZpZWxkQXN5bmNWYWxpZGF0aW5nKGZpZWxkOiBzdHJpbmcpOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG5cbiAgLy8gRGlyZWN0IGFjY2VzcyB0byBmaWVsZCBlcnJvcnNcbiAgZmllbGRFcnJvcnM6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+PjtcbiAgZmllbGRBc3luY0Vycm9yczogUmVjb3JkPHN0cmluZywgU2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4+O1xuXG4gIC8vIEtlZXAgdmFsdWVzIHRyZWUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgdmFsdWVzOiBTaWduYWxUcmVlPFQ+O1xuXG4gIC8vIENsZWFudXAgaGVscGVycyB0byB0ZWFyIGRvd24gc3Vic2NyaXB0aW9ucyBjcmVhdGVkIGZvciBicmlkZ2UgbGF5ZXJcbiAgZGVzdHJveSgpOiB2b2lkO1xufTtcblxuZXhwb3J0IGNsYXNzIEZvcm1WYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcHVibGljIHJlYWRvbmx5IGFzeW5jRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICkge1xuICAgIHN1cGVyKCdGb3JtIHZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgdGhpcy5uYW1lID0gJ0Zvcm1WYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbnR5cGUgU3luY1ZhbGlkYXRvck1hcCA9IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nIHwgbnVsbD47XG50eXBlIEFzeW5jVmFsaWRhdG9yTWFwID0gUmVjb3JkPHN0cmluZywgRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+PjtcblxuY29uc3QgU1lOQ19FUlJPUl9LRVkgPSAnc2lnbmFsdHJlZSc7XG5jb25zdCBBU1lOQ19FUlJPUl9LRVkgPSAnc2lnbmFsdHJlZUFzeW5jJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFVUSUxJVFkgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRk9STSBUUkVFIElNUExFTUVOVEFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVRyZWU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgaW5pdGlhbFZhbHVlczogVCxcbiAgY29uZmlnOiBGb3JtVHJlZU9wdGlvbnM8VD4gPSB7fVxuKTogRm9ybVRyZWU8VD4ge1xuICBjb25zdCB7XG4gICAgdmFsaWRhdG9yczogYmFzZVZhbGlkYXRvcnMgPSB7fSxcbiAgICBhc3luY1ZhbGlkYXRvcnM6IGJhc2VBc3luY1ZhbGlkYXRvcnMgPSB7fSxcbiAgICBkZXN0cm95UmVmOiBwcm92aWRlZERlc3Ryb3lSZWYsXG4gICAgZmllbGRDb25maWdzID0ge30sXG4gICAgY29uZGl0aW9uYWxzID0gW10sXG4gICAgcGVyc2lzdEtleSxcbiAgICBzdG9yYWdlLFxuICAgIHBlcnNpc3REZWJvdW5jZU1zID0gMTAwLFxuICAgIHZhbGlkYXRpb25CYXRjaE1zID0gMCxcbiAgICAuLi50cmVlQ29uZmlnXG4gIH0gPSBjb25maWc7XG5cbiAgY29uc3Qgc3luY1ZhbGlkYXRvcnMgPSBub3JtYWxpemVTeW5jVmFsaWRhdG9ycyhiYXNlVmFsaWRhdG9ycywgZmllbGRDb25maWdzKTtcbiAgY29uc3QgYXN5bmNWYWxpZGF0b3JzID0gbm9ybWFsaXplQXN5bmNWYWxpZGF0b3JzKFxuICAgIGJhc2VBc3luY1ZhbGlkYXRvcnMsXG4gICAgZmllbGRDb25maWdzXG4gICk7XG5cbiAgY29uc3QgeyB2YWx1ZXM6IGh5ZHJhdGVkSW5pdGlhbFZhbHVlcyB9ID0gaHlkcmF0ZUluaXRpYWxWYWx1ZXMoXG4gICAgaW5pdGlhbFZhbHVlcyxcbiAgICBwZXJzaXN0S2V5LFxuICAgIHN0b3JhZ2VcbiAgKTtcbiAgY29uc3QgaW5pdGlhbFNuYXBzaG90ID0gZGVlcENsb25lKGh5ZHJhdGVkSW5pdGlhbFZhbHVlcyk7XG5cbiAgY29uc3QgdmFsdWVzVHJlZSA9IHNpZ25hbFRyZWUoaHlkcmF0ZWRJbml0aWFsVmFsdWVzLCB0cmVlQ29uZmlnKTtcbiAgYXNzZXJ0VHJlZU5vZGU8VD4odmFsdWVzVHJlZS5zdGF0ZSk7XG4gIGNvbnN0IGZsYXR0ZW5lZFN0YXRlID0gdmFsdWVzVHJlZS5zdGF0ZTtcblxuICBlbmhhbmNlQXJyYXlzUmVjdXJzaXZlbHkoXG4gICAgZmxhdHRlbmVkU3RhdGUgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApO1xuXG4gIGNvbnN0IGZvcm1Hcm91cCA9IGNyZWF0ZUFic3RyYWN0Q29udHJvbChcbiAgICBoeWRyYXRlZEluaXRpYWxWYWx1ZXMsXG4gICAgJycsXG4gICAgc3luY1ZhbGlkYXRvcnMsXG4gICAgYXN5bmNWYWxpZGF0b3JzXG4gICkgYXMgRm9ybUdyb3VwO1xuXG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBwcm92aWRlZERlc3Ryb3lSZWYgPz8gdHJ5SW5qZWN0RGVzdHJveVJlZigpO1xuICBjb25zdCBjbGVhbnVwQ2FsbGJhY2tzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gIGNvbnN0IGVycm9ycyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG4gIGNvbnN0IGFzeW5jRXJyb3JzID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcbiAgY29uc3QgdG91Y2hlZCA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pO1xuICBjb25zdCBhc3luY1ZhbGlkYXRpbmcgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KTtcbiAgY29uc3QgZGlydHkgPSBzaWduYWwoZm9ybUdyb3VwLmRpcnR5KTtcbiAgY29uc3QgdmFsaWQgPSBzaWduYWwoZm9ybUdyb3VwLnZhbGlkICYmICFmb3JtR3JvdXAucGVuZGluZyk7XG4gIGNvbnN0IHN1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IHJlZnJlc2hSdW5uZXIgPSAoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBjb2xsZWN0Q29udHJvbFNuYXBzaG90KGZvcm1Hcm91cCk7XG4gICAgZXJyb3JzLnNldChzbmFwc2hvdC5zeW5jRXJyb3JzKTtcbiAgICBhc3luY0Vycm9ycy5zZXQoc25hcHNob3QuYXN5bmNFcnJvcnMpO1xuICAgIHRvdWNoZWQuc2V0KHNuYXBzaG90LnRvdWNoZWQpO1xuICAgIGFzeW5jVmFsaWRhdGluZy5zZXQoc25hcHNob3QucGVuZGluZyk7XG4gICAgZGlydHkuc2V0KGZvcm1Hcm91cC5kaXJ0eSk7XG4gICAgdmFsaWQuc2V0KGZvcm1Hcm91cC52YWxpZCAmJiAhZm9ybUdyb3VwLnBlbmRpbmcpO1xuICB9O1xuXG4gIGxldCByZWZyZXNoVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0IHJlZnJlc2hBZ2dyZWdhdGVzID0gKGltbWVkaWF0ZSA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKGltbWVkaWF0ZSB8fCB2YWxpZGF0aW9uQmF0Y2hNcyA8PSAwKSB7XG4gICAgICBpZiAocmVmcmVzaFRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChyZWZyZXNoVGltZXIpO1xuICAgICAgICByZWZyZXNoVGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgcmVmcmVzaFJ1bm5lcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChyZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChyZWZyZXNoVGltZXIpO1xuICAgIH1cblxuICAgIHJlZnJlc2hUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgICAgIHJlZnJlc2hSdW5uZXIoKTtcbiAgICB9LCB2YWxpZGF0aW9uQmF0Y2hNcyk7XG4gIH07XG5cbiAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG5cbiAgY29uc3QgcGVyc2lzdENvbnRyb2xsZXIgPSBjcmVhdGVQZXJzaXN0Q29udHJvbGxlcihcbiAgICBmb3JtR3JvdXAsXG4gICAgcGVyc2lzdEtleSxcbiAgICBzdG9yYWdlLFxuICAgIHBlcnNpc3REZWJvdW5jZU1zLFxuICAgIGNsZWFudXBDYWxsYmFja3NcbiAgKTtcbiAgcGVyc2lzdENvbnRyb2xsZXIucGVyc2lzdEltbWVkaWF0ZWx5KCk7XG5cbiAgY29uc3QgZmllbGRFcnJvcktleXMgPSBuZXcgU2V0KFtcbiAgICAuLi5PYmplY3Qua2V5cyhzeW5jVmFsaWRhdG9ycyksXG4gICAgLi4uT2JqZWN0LmtleXMoYXN5bmNWYWxpZGF0b3JzKSxcbiAgXSk7XG5cbiAgY29uc3QgZmllbGRFcnJvcnM6IFJlY29yZDxzdHJpbmcsIFNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+PiA9IHt9O1xuICBjb25zdCBmaWVsZEFzeW5jRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBTaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPj4gPSB7fTtcblxuICBmaWVsZEVycm9yS2V5cy5mb3JFYWNoKChmaWVsZFBhdGgpID0+IHtcbiAgICBmaWVsZEVycm9yc1tmaWVsZFBhdGhdID0gY29tcHV0ZWQoKCkgPT4gZXJyb3JzKClbZmllbGRQYXRoXSk7XG4gICAgZmllbGRBc3luY0Vycm9yc1tmaWVsZFBhdGhdID0gY29tcHV0ZWQoKCkgPT4gYXN5bmNFcnJvcnMoKVtmaWVsZFBhdGhdKTtcbiAgfSk7XG5cbiAgY29uc3QgZmllbGRDb25maWdMb29rdXAgPSAocGF0aDogc3RyaW5nKSA9PlxuICAgIHJlc29sdmVGaWVsZENvbmZpZyhmaWVsZENvbmZpZ3MsIHBhdGgpO1xuXG4gIGNvbnN0IGNvbm5lY3RDb250cm9sUmVjdXJzaXZlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgIE9iamVjdC5lbnRyaWVzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goKFtrZXksIGNoaWxkXSkgPT4ge1xuICAgICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZShjaGlsZCwgam9pblBhdGgocGF0aCwga2V5KSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgY29uc3QgYXJyYXlTaWduYWwgPSBnZXRTaWduYWxBdFBhdGgoZmxhdHRlbmVkU3RhdGUsIHBhdGgpO1xuICAgICAgaWYgKGFycmF5U2lnbmFsKSB7XG4gICAgICAgIGNvbm5lY3RGb3JtQXJyYXlBbmRTaWduYWwoXG4gICAgICAgICAgY29udHJvbCxcbiAgICAgICAgICBhcnJheVNpZ25hbCBhcyBFbmhhbmNlZEFycmF5U2lnbmFsPHVua25vd24+LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3luY1ZhbGlkYXRvcnMsXG4gICAgICAgICAgYXN5bmNWYWxpZGF0b3JzLFxuICAgICAgICAgIGNsZWFudXBDYWxsYmFja3MsXG4gICAgICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmUoY2hpbGQsIGpvaW5QYXRoKHBhdGgsIFN0cmluZyhpbmRleCkpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25hbEF0UGF0aCA9IGdldFNpZ25hbEF0UGF0aChmbGF0dGVuZWRTdGF0ZSwgcGF0aCk7XG4gICAgaWYgKHNpZ25hbEF0UGF0aCkge1xuICAgICAgY29ubmVjdENvbnRyb2xBbmRTaWduYWwoXG4gICAgICAgIGNvbnRyb2wgYXMgRm9ybUNvbnRyb2wsXG4gICAgICAgIHNpZ25hbEF0UGF0aCBhcyBXcml0YWJsZVNpZ25hbDx1bmtub3duPixcbiAgICAgICAgY2xlYW51cENhbGxiYWNrcyxcbiAgICAgICAgZmllbGRDb25maWdMb29rdXAocGF0aClcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlKGZvcm1Hcm91cCwgJycpO1xuXG4gIGNvbnN0IGNvbmRpdGlvbmFsU3RhdGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgY29uc3QgYXBwbHlDb25kaXRpb25hbHMgPVxuICAgIGNvbmRpdGlvbmFscy5sZW5ndGggPiAwXG4gICAgICA/ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSBhcyBUO1xuICAgICAgICAgIGNvbmRpdGlvbmFscy5mb3JFYWNoKCh7IHdoZW4sIGZpZWxkcyB9KSA9PiB7XG4gICAgICAgICAgICBsZXQgdmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICB2aXNpYmxlID0gd2hlbih2YWx1ZXMpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIHZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkUGF0aCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZFBhdGgpO1xuICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXMgPSBjb25kaXRpb25hbFN0YXRlLmdldChmaWVsZFBhdGgpO1xuICAgICAgICAgICAgICBpZiAocHJldmlvdXMgPT09IHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uZGl0aW9uYWxTdGF0ZS5zZXQoZmllbGRQYXRoLCB2aXNpYmxlKTtcbiAgICAgICAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIDogKCkgPT4gdW5kZWZpbmVkO1xuXG4gIGFwcGx5Q29uZGl0aW9uYWxzKCk7XG5cbiAgY29uc3QgYWdncmVnYXRlU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgYWdncmVnYXRlU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgIGZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHJlZnJlc2hBZ2dyZWdhdGVzKCk7XG4gICAgICBwZXJzaXN0Q29udHJvbGxlci5zY2hlZHVsZVBlcnNpc3QoKTtcbiAgICAgIGFwcGx5Q29uZGl0aW9uYWxzKCk7XG4gICAgfSlcbiAgKTtcbiAgYWdncmVnYXRlU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgIGZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiByZWZyZXNoQWdncmVnYXRlcygpKVxuICApO1xuICBpZiAoZm9ybUdyb3VwLmV2ZW50cykge1xuICAgIGFnZ3JlZ2F0ZVN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIGZvcm1Hcm91cC5ldmVudHMuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hBZ2dyZWdhdGVzKCkpXG4gICAgKTtcbiAgfVxuXG4gIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgYWdncmVnYXRlU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICBpZiAocmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQocmVmcmVzaFRpbWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkZXN0cm95UmVmKSB7XG4gICAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgY2xlYW51cENhbGxiYWNrcy5zcGxpY2UoMCkuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc2V0VmFsdWUgPSAoZmllbGQ6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCB0YXJnZXRTaWduYWwgPSBnZXRTaWduYWxBdFBhdGgoZmxhdHRlbmVkU3RhdGUsIGZpZWxkKTtcbiAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG5cbiAgICBpZiAodGFyZ2V0U2lnbmFsICYmICdzZXQnIGluIHRhcmdldFNpZ25hbCkge1xuICAgICAgKHRhcmdldFNpZ25hbCBhcyBXcml0YWJsZVNpZ25hbDx1bmtub3duPikuc2V0KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRyb2wpIHtcbiAgICAgIChjb250cm9sIGFzIEFic3RyYWN0Q29udHJvbCkuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChjb250cm9sKSB7XG4gICAgICBjb25zdCB1bnR5cGVkQ29udHJvbCA9IGNvbnRyb2wgYXMgQWJzdHJhY3RDb250cm9sO1xuICAgICAgdW50eXBlZENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgdW50eXBlZENvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICAgIHVudHlwZWRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gICAgcGVyc2lzdENvbnRyb2xsZXIuc2NoZWR1bGVQZXJzaXN0KCk7XG4gIH07XG5cbiAgY29uc3Qgc2V0VmFsdWVzID0gKHZhbHVlczogUGFydGlhbDxUPikgPT4ge1xuICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBzZXRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBmb3JtR3JvdXAucmVzZXQoaW5pdGlhbFNuYXBzaG90KTtcbiAgICBzdWJtaXR0aW5nLnNldChmYWxzZSk7XG4gICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gICAgcGVyc2lzdENvbnRyb2xsZXIucGVyc2lzdEltbWVkaWF0ZWx5KCk7XG4gICAgYXBwbHlDb25kaXRpb25hbHMoKTtcbiAgfTtcblxuICBjb25zdCB2YWxpZGF0ZSA9IGFzeW5jIChmaWVsZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICAgIGF3YWl0IHdhaXRGb3JQZW5kaW5nKGNvbnRyb2wpO1xuICAgICAgcmVmcmVzaEFnZ3JlZ2F0ZXModHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICBmb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICByZWZyZXNoQWdncmVnYXRlcyh0cnVlKTtcbiAgICBhd2FpdCB3YWl0Rm9yUGVuZGluZyhmb3JtR3JvdXApO1xuICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IHN1Ym1pdCA9IGFzeW5jIDxUUmVzdWx0PihcbiAgICBzdWJtaXRGbjogKHZhbHVlczogVCkgPT4gUHJvbWlzZTxUUmVzdWx0PlxuICApOiBQcm9taXNlPFRSZXN1bHQ+ID0+IHtcbiAgICBzdWJtaXR0aW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdmFsaWRhdGUoKTtcblxuICAgICAgaWYgKCF2YWxpZCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBGb3JtVmFsaWRhdGlvbkVycm9yKGVycm9ycygpLCBhc3luY0Vycm9ycygpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudFZhbHVlcyA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpIGFzIFQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdWJtaXRGbihjdXJyZW50VmFsdWVzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHN1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHJlZnJlc2hBZ2dyZWdhdGVzKHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIGNsZWFudXBDYWxsYmFja3Muc3BsaWNlKDApLmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgfTtcblxuICBjb25zdCBmb3JtVHJlZTogRm9ybVRyZWU8VD4gPSB7XG4gICAgc3RhdGU6IGZsYXR0ZW5lZFN0YXRlLFxuICAgICQ6IGZsYXR0ZW5lZFN0YXRlLFxuICAgIGZvcm06IGZvcm1Hcm91cCxcbiAgICBlcnJvcnMsXG4gICAgYXN5bmNFcnJvcnMsXG4gICAgdG91Y2hlZCxcbiAgICBhc3luY1ZhbGlkYXRpbmcsXG4gICAgZGlydHksXG4gICAgdmFsaWQsXG4gICAgc3VibWl0dGluZyxcbiAgICB1bndyYXA6ICgpID0+IHZhbHVlc1RyZWUoKSxcbiAgICBzZXRWYWx1ZSxcbiAgICBzZXRWYWx1ZXMsXG4gICAgcmVzZXQsXG4gICAgc3VibWl0LFxuICAgIHZhbGlkYXRlLFxuICAgIGdldEZpZWxkRXJyb3I6IChmaWVsZDogc3RyaW5nKSA9PlxuICAgICAgZmllbGRFcnJvcnNbZmllbGRdIHx8IGNvbXB1dGVkKCgpID0+IHVuZGVmaW5lZCksXG4gICAgZ2V0RmllbGRBc3luY0Vycm9yOiAoZmllbGQ6IHN0cmluZykgPT5cbiAgICAgIGZpZWxkQXN5bmNFcnJvcnNbZmllbGRdIHx8IGNvbXB1dGVkKCgpID0+IHVuZGVmaW5lZCksXG4gICAgZ2V0RmllbGRUb3VjaGVkOiAoZmllbGQ6IHN0cmluZykgPT5cbiAgICAgIGNvbXB1dGVkKCgpID0+IGZvcm1Hcm91cC5nZXQoZmllbGQpPy50b3VjaGVkID8/IGZhbHNlKSxcbiAgICBpc0ZpZWxkVmFsaWQ6IChmaWVsZDogc3RyaW5nKSA9PlxuICAgICAgY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZCk7XG4gICAgICAgIHJldHVybiAhIWNvbnRyb2wgJiYgY29udHJvbC52YWxpZCAmJiAhY29udHJvbC5wZW5kaW5nO1xuICAgICAgfSksXG4gICAgaXNGaWVsZEFzeW5jVmFsaWRhdGluZzogKGZpZWxkOiBzdHJpbmcpID0+XG4gICAgICBjb21wdXRlZCgoKSA9PiAhIWZvcm1Hcm91cC5nZXQoZmllbGQpPy5wZW5kaW5nKSxcbiAgICBmaWVsZEVycm9ycyxcbiAgICBmaWVsZEFzeW5jRXJyb3JzLFxuICAgIHZhbHVlczogdmFsdWVzVHJlZSxcbiAgICBkZXN0cm95LFxuICB9O1xuXG4gIHJldHVybiBmb3JtVHJlZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVZpcnR1YWxGb3JtQXJyYXk8VD4oXG4gIGl0ZW1zOiBUW10sXG4gIHZpc2libGVSYW5nZTogeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9LFxuICBjb250cm9sRmFjdG9yeTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyKSA9PiBBYnN0cmFjdENvbnRyb2wgPSAodmFsdWUpID0+XG4gICAgbmV3IEZvcm1Db250cm9sKHZhbHVlKVxuKTogRm9ybUFycmF5IHtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCB2aXNpYmxlUmFuZ2Uuc3RhcnQpO1xuICBjb25zdCBlbmQgPSBNYXRoLm1heChzdGFydCwgdmlzaWJsZVJhbmdlLmVuZCk7XG5cbiAgY29uc3QgY29udHJvbHMgPSBpdGVtc1xuICAgIC5zbGljZShzdGFydCwgZW5kKVxuICAgIC5tYXAoKGl0ZW0sIG9mZnNldCkgPT4gY29udHJvbEZhY3RvcnkoaXRlbSwgc3RhcnQgKyBvZmZzZXQpKTtcblxuICByZXR1cm4gbmV3IEZvcm1BcnJheShjb250cm9scyk7XG59XG5cbmZ1bmN0aW9uIGVuaGFuY2VBcnJheXNSZWN1cnNpdmVseShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgdmlzaXRlZCA9IG5ldyBXZWFrU2V0PG9iamVjdD4oKVxuKTogdm9pZCB7XG4gIGlmICh2aXNpdGVkLmhhcyhvYmopKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZpc2l0ZWQuYWRkKG9iaik7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICBpZiAoaXNTaWduYWwodmFsdWUpKSB7XG4gICAgICBjb25zdCBzaWduYWxWYWx1ZSA9ICh2YWx1ZSBhcyBTaWduYWw8dW5rbm93bj4pKCk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzaWduYWxWYWx1ZSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBlbmhhbmNlQXJyYXkodmFsdWUgYXMgV3JpdGFibGVTaWduYWw8dW5rbm93bltdPik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICApIHtcbiAgICAgIGVuaGFuY2VBcnJheXNSZWN1cnNpdmVseSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgdmlzaXRlZCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGVuaGFuY2VBcnJheSA9IDxVPihcbiAgYXJyYXlTaWduYWw6IFdyaXRhYmxlU2lnbmFsPFVbXT5cbik6IEVuaGFuY2VkQXJyYXlTaWduYWw8VT4gPT4ge1xuICBjb25zdCBlbmhhbmNlZCA9IGFycmF5U2lnbmFsIGFzIEVuaGFuY2VkQXJyYXlTaWduYWw8VT47XG5cbiAgZW5oYW5jZWQucHVzaCA9IChpdGVtOiBVKSA9PiB7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlKChhcnIpID0+IFsuLi5hcnIsIGl0ZW1dKTtcbiAgfTtcblxuICBlbmhhbmNlZC5yZW1vdmVBdCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlKChhcnIpID0+IGFyci5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KSk7XG4gIH07XG5cbiAgZW5oYW5jZWQuc2V0QXQgPSAoaW5kZXg6IG51bWJlciwgdmFsdWU6IFUpID0+IHtcbiAgICBhcnJheVNpZ25hbC51cGRhdGUoKGFycikgPT5cbiAgICAgIGFyci5tYXAoKGl0ZW0sIGkpID0+IChpID09PSBpbmRleCA/IHZhbHVlIDogaXRlbSkpXG4gICAgKTtcbiAgfTtcblxuICBlbmhhbmNlZC5pbnNlcnRBdCA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBVKSA9PiB7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlKChhcnIpID0+IFtcbiAgICAgIC4uLmFyci5zbGljZSgwLCBpbmRleCksXG4gICAgICBpdGVtLFxuICAgICAgLi4uYXJyLnNsaWNlKGluZGV4KSxcbiAgICBdKTtcbiAgfTtcblxuICBlbmhhbmNlZC5tb3ZlID0gKGZyb206IG51bWJlciwgdG86IG51bWJlcikgPT4ge1xuICAgIGFycmF5U2lnbmFsLnVwZGF0ZSgoYXJyKSA9PiB7XG4gICAgICBjb25zdCBuZXdBcnIgPSBbLi4uYXJyXTtcbiAgICAgIGNvbnN0IFtpdGVtXSA9IG5ld0Fyci5zcGxpY2UoZnJvbSwgMSk7XG4gICAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld0Fyci5zcGxpY2UodG8sIDAsIGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld0FycjtcbiAgICB9KTtcbiAgfTtcblxuICBlbmhhbmNlZC5jbGVhciA9ICgpID0+IHtcbiAgICBhcnJheVNpZ25hbC5zZXQoW10pO1xuICB9O1xuXG4gIHJldHVybiBlbmhhbmNlZDtcbn07XG5cbmZ1bmN0aW9uIGdldFNpZ25hbEF0UGF0aDxUPihcbiAgbm9kZTogVHJlZU5vZGU8VD4sXG4gIHBhdGg6IHN0cmluZ1xuKTogV3JpdGFibGVTaWduYWw8dW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZWdtZW50cyA9IHBhcnNlUGF0aChwYXRoKTtcbiAgbGV0IGN1cnJlbnQ6IHVua25vd24gPSBub2RlO1xuXG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cykge1xuICAgIGlmICghY3VycmVudCB8fCB0eXBlb2YgY3VycmVudCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGN1cnJlbnQgPSAoY3VycmVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbc2VnbWVudF07XG4gIH1cblxuICBpZiAoaXNTaWduYWwoY3VycmVudCkpIHtcbiAgICByZXR1cm4gY3VycmVudCBhcyBXcml0YWJsZVNpZ25hbDx1bmtub3duPjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBqb2luUGF0aChwYXJlbnQ6IHN0cmluZywgc2VnbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhcmVudCA/IGAke3BhcmVudH0uJHtzZWdtZW50fWAgOiBzZWdtZW50O1xufVxuXG5mdW5jdGlvbiB3cmFwU3luY1ZhbGlkYXRvcihcbiAgdmFsaWRhdG9yOiAodmFsdWU6IHVua25vd24pID0+IHN0cmluZyB8IG51bGxcbik6IEFuZ3VsYXJWYWxpZGF0b3JGbiB7XG4gIHJldHVybiAoY29udHJvbCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRvcihjb250cm9sLnZhbHVlKTtcbiAgICByZXR1cm4gcmVzdWx0ID8geyBbU1lOQ19FUlJPUl9LRVldOiByZXN1bHQgfSA6IG51bGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHdyYXBBc3luY1ZhbGlkYXRvcihcbiAgdmFsaWRhdG9yOiBGb3JtVHJlZUFzeW5jVmFsaWRhdG9yRm48dW5rbm93bj5cbik6IEFuZ3VsYXJBc3luY1ZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIGFzeW5jIChjb250cm9sKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1heWJlQXN5bmMgPSB2YWxpZGF0b3IoY29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCByZXNvbHZlZCA9IGlzT2JzZXJ2YWJsZShtYXliZUFzeW5jKVxuICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1heWJlQXN5bmMpXG4gICAgICAgIDogYXdhaXQgbWF5YmVBc3luYztcbiAgICAgIHJldHVybiByZXNvbHZlZCA/IHsgW0FTWU5DX0VSUk9SX0tFWV06IHJlc29sdmVkIH0gOiBudWxsO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgW0FTWU5DX0VSUk9SX0tFWV06ICdWYWxpZGF0aW9uIGVycm9yJyB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWJzdHJhY3RDb250cm9sKFxuICB2YWx1ZTogdW5rbm93bixcbiAgcGF0aDogc3RyaW5nLFxuICB2YWxpZGF0b3JzOiBTeW5jVmFsaWRhdG9yTWFwLFxuICBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yTWFwXG4pOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCBzeW5jVmFsaWRhdG9yID0gZmluZFZhbGlkYXRvcih2YWxpZGF0b3JzLCBwYXRoKTtcbiAgY29uc3QgYXN5bmNWYWxpZGF0b3IgPSBmaW5kVmFsaWRhdG9yKGFzeW5jVmFsaWRhdG9ycywgcGF0aCk7XG5cbiAgY29uc3Qgc3luY0ZucyA9IHN5bmNWYWxpZGF0b3JcbiAgICA/IFt3cmFwU3luY1ZhbGlkYXRvcihzeW5jVmFsaWRhdG9yKV1cbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYXN5bmNGbnMgPSBhc3luY1ZhbGlkYXRvclxuICAgID8gW3dyYXBBc3luY1ZhbGlkYXRvcihhc3luY1ZhbGlkYXRvcildXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgY29udHJvbHMgPSB2YWx1ZS5tYXAoKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgY3JlYXRlQWJzdHJhY3RDb250cm9sKFxuICAgICAgICBpdGVtLFxuICAgICAgICBqb2luUGF0aChwYXRoLCBTdHJpbmcoaW5kZXgpKSxcbiAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IEZvcm1BcnJheShjb250cm9scywgc3luY0ZucywgYXN5bmNGbnMpO1xuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgY29uc3QgY29udHJvbHM6IFJlY29yZDxzdHJpbmcsIEFic3RyYWN0Q29udHJvbD4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGNoaWxkXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIGNvbnRyb2xzW2tleV0gPSBjcmVhdGVBYnN0cmFjdENvbnRyb2woXG4gICAgICAgIGNoaWxkLFxuICAgICAgICBqb2luUGF0aChwYXRoLCBrZXkpLFxuICAgICAgICB2YWxpZGF0b3JzLFxuICAgICAgICBhc3luY1ZhbGlkYXRvcnNcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKGNvbnRyb2xzLCB7XG4gICAgICB2YWxpZGF0b3JzOiBzeW5jRm5zLFxuICAgICAgYXN5bmNWYWxpZGF0b3JzOiBhc3luY0ZucyxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgRm9ybUNvbnRyb2wodmFsdWUsIHtcbiAgICB2YWxpZGF0b3JzOiBzeW5jRm5zLFxuICAgIGFzeW5jVmFsaWRhdG9yczogYXN5bmNGbnMsXG4gICAgbm9uTnVsbGFibGU6IGZhbHNlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb25uZWN0cyBhIEZvcm1Db250cm9sIHRvIGEgV3JpdGFibGVTaWduYWwgd2l0aCBiaWRpcmVjdGlvbmFsIHN5bmMuXG4gKiBQcmVmZXJzIEFuZ3VsYXIgMjArIFNpZ25hbCBGb3JtcyBjb25uZWN0KCkgQVBJIHdoZW4gYXZhaWxhYmxlLlxuICpcbiAqIEBkZXByZWNhdGVkIE1hbnVhbCBicmlkZ2Ugc3VwcG9ydCAoZmFsbGJhY2sgZm9yIEFuZ3VsYXIgMTctMTkpIHdpbGwgYmUgcmVtb3ZlZFxuICogd2hlbiBBbmd1bGFyIDIxIGlzIHJlbGVhc2VkLiBVcGdyYWRlIHRvIEFuZ3VsYXIgMjAuMysgdG8gdXNlIG5hdGl2ZSBTaWduYWwgRm9ybXMuXG4gKi9cbmZ1bmN0aW9uIGNvbm5lY3RDb250cm9sQW5kU2lnbmFsKFxuICBjb250cm9sOiBGb3JtQ29udHJvbCxcbiAgdmFsdWVTaWduYWw6IFdyaXRhYmxlU2lnbmFsPHVua25vd24+LFxuICBjbGVhbnVwQ2FsbGJhY2tzOiBBcnJheTwoKSA9PiB2b2lkPixcbiAgZmllbGRDb25maWc/OiBGaWVsZENvbmZpZ1xuKTogdm9pZCB7XG4gIC8vIFRyeSBBbmd1bGFyIDIwKyBTaWduYWwgRm9ybXMgY29ubmVjdCgpIEFQSSBmaXJzdFxuICBjb25zdCBtYXliZUNvbm5lY3QgPSAoXG4gICAgY29udHJvbCBhcyB1bmtub3duIGFzIHtcbiAgICAgIGNvbm5lY3Q/OiAoc2lnOiBXcml0YWJsZVNpZ25hbDx1bmtub3duPikgPT4gdW5rbm93bjtcbiAgICB9XG4gICkuY29ubmVjdDtcblxuICBpZiAodHlwZW9mIG1heWJlQ29ubmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBtYXliZUNvbm5lY3QuY2FsbChjb250cm9sLCB2YWx1ZVNpZ25hbCk7XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyAmJlxuICAgICAgICB0eXBlb2YgKHJlcyBhcyB7IHVuc3Vic2NyaWJlPzogKCkgPT4gdm9pZCB9KS51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PlxuICAgICAgICAgIChyZXMgYXMgeyB1bnN1YnNjcmliZTogKCkgPT4gdm9pZCB9KS51bnN1YnNjcmliZSgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47IC8vIENvbm5lY3RlZCB2aWEgbmF0aXZlIEFQSVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG1hbnVhbCBicmlkZ2VcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjazogTWFudWFsIGJpZGlyZWN0aW9uYWwgYnJpZGdlIGZvciBBbmd1bGFyIDE3LTE5XG4gIC8vIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCB3aGVuIEFuZ3VsYXIgMjEgaXMgcmVsZWFzZWRcbiAgbGV0IHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgbGV0IHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuICBsZXQgdmVyc2lvbkNvdW50ZXIgPSAwO1xuICBsZXQgbGFzdENvbnRyb2xWZXJzaW9uID0gMDtcbiAgbGV0IGNvbnRyb2xEZWJvdW5jZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBjb25zdCBkZWJvdW5jZU1zID0gZmllbGRDb25maWc/LmRlYm91bmNlTXMgPz8gMDtcblxuICBjb25zdCBvcmlnaW5hbFNldCA9IHZhbHVlU2lnbmFsLnNldC5iaW5kKHZhbHVlU2lnbmFsKTtcbiAgY29uc3Qgb3JpZ2luYWxVcGRhdGUgPSB2YWx1ZVNpZ25hbC51cGRhdGUuYmluZCh2YWx1ZVNpZ25hbCk7XG5cbiAgY29uc3QgYXBwbHlDb250cm9sVmFsdWUgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICB1cGRhdGluZ0Zyb21TaWduYWwgPSB0cnVlO1xuICAgIGlmICghT2JqZWN0LmlzKGNvbnRyb2wudmFsdWUsIHZhbHVlKSkge1xuICAgICAgY29uc3QgdW50eXBlZENvbnRyb2wgPSBjb250cm9sIGFzIEFic3RyYWN0Q29udHJvbDtcbiAgICAgIHVudHlwZWRDb250cm9sLnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgIHVudHlwZWRDb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICAgIHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuICB9O1xuXG4gIHZhbHVlU2lnbmFsLnNldCA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRWZXJzaW9uID0gKyt2ZXJzaW9uQ291bnRlcjtcbiAgICBvcmlnaW5hbFNldCh2YWx1ZSk7XG4gICAgaWYgKHVwZGF0aW5nRnJvbUNvbnRyb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGxhc3RDb250cm9sVmVyc2lvbiA+IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGFwcGx5Q29udHJvbFZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICB2YWx1ZVNpZ25hbC51cGRhdGUgPSAodXBkYXRlcikgPT4ge1xuICAgIGNvbnN0IG5leHQgPSB1cGRhdGVyKHZhbHVlU2lnbmFsKCkpO1xuICAgIHZhbHVlU2lnbmFsLnNldChuZXh0KTtcbiAgfTtcblxuICBjb25zdCBwdXNoVXBkYXRlRnJvbUNvbnRyb2wgPSAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICB1cGRhdGluZ0Zyb21Db250cm9sID0gdHJ1ZTtcbiAgICBsYXN0Q29udHJvbFZlcnNpb24gPSArK3ZlcnNpb25Db3VudGVyO1xuICAgIG9yaWdpbmFsU2V0KHZhbHVlKTtcbiAgICB1cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ29udHJvbENoYW5nZSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIGlmICh1cGRhdGluZ0Zyb21TaWduYWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGVib3VuY2VNcyA+IDApIHtcbiAgICAgIGlmIChjb250cm9sRGVib3VuY2VUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQoY29udHJvbERlYm91bmNlVGltZXIpO1xuICAgICAgfVxuICAgICAgY29udHJvbERlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29udHJvbERlYm91bmNlVGltZXIgPSBudWxsO1xuICAgICAgICBwdXNoVXBkYXRlRnJvbUNvbnRyb2wodmFsdWUpO1xuICAgICAgfSwgZGVib3VuY2VNcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVzaFVwZGF0ZUZyb21Db250cm9sKHZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgaGFuZGxlQ29udHJvbENoYW5nZSh2YWx1ZSk7XG4gIH0pO1xuXG4gIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdmFsdWVTaWduYWwuc2V0ID0gb3JpZ2luYWxTZXQ7XG4gICAgdmFsdWVTaWduYWwudXBkYXRlID0gb3JpZ2luYWxVcGRhdGU7XG4gICAgaWYgKGNvbnRyb2xEZWJvdW5jZVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoY29udHJvbERlYm91bmNlVGltZXIpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQ29ubmVjdHMgYSBGb3JtQXJyYXkgdG8gYW4gRW5oYW5jZWRBcnJheVNpZ25hbCB3aXRoIGJpZGlyZWN0aW9uYWwgc3luYy5cbiAqIFByZWZlcnMgQW5ndWxhciAyMCsgU2lnbmFsIEZvcm1zIGNvbm5lY3QoKSBBUEkgd2hlbiBhdmFpbGFibGUuXG4gKlxuICogQGRlcHJlY2F0ZWQgTWFudWFsIGJyaWRnZSBzdXBwb3J0IChmYWxsYmFjayBmb3IgQW5ndWxhciAxNy0xOSkgd2lsbCBiZSByZW1vdmVkXG4gKiB3aGVuIEFuZ3VsYXIgMjEgaXMgcmVsZWFzZWQuIFVwZ3JhZGUgdG8gQW5ndWxhciAyMC4zKyB0byB1c2UgbmF0aXZlIFNpZ25hbCBGb3Jtcy5cbiAqL1xuZnVuY3Rpb24gY29ubmVjdEZvcm1BcnJheUFuZFNpZ25hbChcbiAgZm9ybUFycmF5OiBGb3JtQXJyYXksXG4gIGFycmF5U2lnbmFsOiBFbmhhbmNlZEFycmF5U2lnbmFsPHVua25vd24+LFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbGlkYXRvcnM6IFN5bmNWYWxpZGF0b3JNYXAsXG4gIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JNYXAsXG4gIGNsZWFudXBDYWxsYmFja3M6IEFycmF5PCgpID0+IHZvaWQ+LFxuICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZTogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aDogc3RyaW5nKSA9PiB2b2lkXG4pOiB2b2lkIHtcbiAgLy8gVHJ5IEFuZ3VsYXIgMjArIFNpZ25hbCBGb3JtcyBjb25uZWN0KCkgQVBJIGZpcnN0XG4gIGNvbnN0IG1heWJlQ29ubmVjdCA9IChcbiAgICBmb3JtQXJyYXkgYXMgdW5rbm93biBhcyB7XG4gICAgICBjb25uZWN0PzogKHNpZzogV3JpdGFibGVTaWduYWw8dW5rbm93bltdPikgPT4gdW5rbm93bjtcbiAgICB9XG4gICkuY29ubmVjdDtcblxuICBpZiAodHlwZW9mIG1heWJlQ29ubmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBtYXliZUNvbm5lY3QuY2FsbChcbiAgICAgICAgZm9ybUFycmF5LFxuICAgICAgICBhcnJheVNpZ25hbCBhcyB1bmtub3duIGFzIFdyaXRhYmxlU2lnbmFsPHVua25vd25bXT5cbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyAmJlxuICAgICAgICB0eXBlb2YgKHJlcyBhcyB7IHVuc3Vic2NyaWJlPzogKCkgPT4gdm9pZCB9KS51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PlxuICAgICAgICAgIChyZXMgYXMgeyB1bnN1YnNjcmliZTogKCkgPT4gdm9pZCB9KS51bnN1YnNjcmliZSgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47IC8vIENvbm5lY3RlZCB2aWEgbmF0aXZlIEFQSVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG1hbnVhbCBicmlkZ2VcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsYmFjazogTWFudWFsIGJpZGlyZWN0aW9uYWwgYnJpZGdlIGZvciBBbmd1bGFyIDE3LTE5XG4gIC8vIEBkZXByZWNhdGVkIFdpbGwgYmUgcmVtb3ZlZCB3aGVuIEFuZ3VsYXIgMjEgaXMgcmVsZWFzZWRcbiAgbGV0IHVwZGF0aW5nRnJvbUNvbnRyb2wgPSBmYWxzZTtcbiAgbGV0IHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuXG4gIGNvbnN0IG9yaWdpbmFsU2V0ID0gYXJyYXlTaWduYWwuc2V0LmJpbmQoYXJyYXlTaWduYWwpO1xuICBjb25zdCBvcmlnaW5hbFVwZGF0ZSA9IGFycmF5U2lnbmFsLnVwZGF0ZS5iaW5kKGFycmF5U2lnbmFsKTtcblxuICBhcnJheVNpZ25hbC5zZXQgPSAodmFsdWU6IHVua25vd25bXSkgPT4ge1xuICAgIG9yaWdpbmFsU2V0KHZhbHVlKTtcbiAgICBpZiAodXBkYXRpbmdGcm9tQ29udHJvbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGluZ0Zyb21TaWduYWwgPSB0cnVlO1xuICAgIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gICAgICBmb3JtQXJyYXksXG4gICAgICB2YWx1ZSxcbiAgICAgIHBhdGgsXG4gICAgICB2YWxpZGF0b3JzLFxuICAgICAgYXN5bmNWYWxpZGF0b3JzLFxuICAgICAgY29ubmVjdENvbnRyb2xSZWN1cnNpdmVcbiAgICApO1xuICAgIGZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpO1xuICAgIHVwZGF0aW5nRnJvbVNpZ25hbCA9IGZhbHNlO1xuICB9O1xuXG4gIGFycmF5U2lnbmFsLnVwZGF0ZSA9ICh1cGRhdGVyKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHVwZGF0ZXIoYXJyYXlTaWduYWwoKSk7XG4gICAgYXJyYXlTaWduYWwuc2V0KG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGZvcm1BcnJheS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgIGlmICh1cGRhdGluZ0Zyb21TaWduYWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRpbmdGcm9tQ29udHJvbCA9IHRydWU7XG4gICAgb3JpZ2luYWxTZXQodmFsdWUgYXMgdW5rbm93bltdKTtcbiAgICB1cGRhdGluZ0Zyb21Db250cm9sID0gZmFsc2U7XG4gIH0pO1xuXG4gIGNsZWFudXBDYWxsYmFja3MucHVzaCgoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgYXJyYXlTaWduYWwuc2V0ID0gb3JpZ2luYWxTZXQ7XG4gICAgYXJyYXlTaWduYWwudXBkYXRlID0gb3JpZ2luYWxVcGRhdGU7XG4gIH0pO1xuXG4gIHN5bmNGb3JtQXJyYXlGcm9tVmFsdWUoXG4gICAgZm9ybUFycmF5LFxuICAgIGFycmF5U2lnbmFsKCksXG4gICAgcGF0aCxcbiAgICB2YWxpZGF0b3JzLFxuICAgIGFzeW5jVmFsaWRhdG9ycyxcbiAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZVxuICApO1xufVxuXG4vKipcbiAqIFN5bmNzIGEgRm9ybUFycmF5IHN0cnVjdHVyZSB3aXRoIGEgc2lnbmFsIGFycmF5IHZhbHVlLlxuICogVXNlZCBieSB0aGUgbWFudWFsIGJyaWRnZSBmYWxsYmFjayBmb3IgQW5ndWxhciAxNy0xOS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgd2hlbiBBbmd1bGFyIDIxIGlzIHJlbGVhc2VkIGFuZCBtYW51YWwgYnJpZGdlIHN1cHBvcnQgaXMgZHJvcHBlZC5cbiAqL1xuZnVuY3Rpb24gc3luY0Zvcm1BcnJheUZyb21WYWx1ZShcbiAgZm9ybUFycmF5OiBGb3JtQXJyYXksXG4gIG5leHRWYWx1ZTogdW5rbm93bltdLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbGlkYXRvcnM6IFN5bmNWYWxpZGF0b3JNYXAsXG4gIGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JNYXAsXG4gIGNvbm5lY3RDb250cm9sUmVjdXJzaXZlOiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoOiBzdHJpbmcpID0+IHZvaWRcbik6IHZvaWQge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobmV4dFZhbHVlKSkge1xuICAgIG5leHRWYWx1ZSA9IFtdO1xuICB9XG5cbiAgd2hpbGUgKGZvcm1BcnJheS5sZW5ndGggPiBuZXh0VmFsdWUubGVuZ3RoKSB7XG4gICAgZm9ybUFycmF5LnJlbW92ZUF0KGZvcm1BcnJheS5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIG5leHRWYWx1ZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkUGF0aCA9IGpvaW5QYXRoKHBhdGgsIFN0cmluZyhpbmRleCkpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gZm9ybUFycmF5LmF0KGluZGV4KTtcblxuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVBYnN0cmFjdENvbnRyb2woXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzXG4gICAgICApO1xuICAgICAgZm9ybUFycmF5Lmluc2VydChpbmRleCwgY29udHJvbCk7XG4gICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZShjb250cm9sLCBjaGlsZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChleGlzdGluZyBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgc3luY0Zvcm1BcnJheUZyb21WYWx1ZShcbiAgICAgICAgZXhpc3RpbmcsXG4gICAgICAgIEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtIDogW10sXG4gICAgICAgIGNoaWxkUGF0aCxcbiAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3JzLFxuICAgICAgICBjb25uZWN0Q29udHJvbFJlY3Vyc2l2ZVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3RpbmcgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgIGV4aXN0aW5nLnNldFZhbHVlKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHtcbiAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC5pcyhleGlzdGluZy52YWx1ZSwgaXRlbSkpIHtcbiAgICAgIGNvbnN0IHVudHlwZWRFeGlzdGluZyA9IGV4aXN0aW5nIGFzIEFic3RyYWN0Q29udHJvbDtcbiAgICAgIHVudHlwZWRFeGlzdGluZy5zZXRWYWx1ZShpdGVtLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuaW50ZXJmYWNlIENvbnRyb2xTbmFwc2hvdCB7XG4gIHN5bmNFcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGFzeW5jRXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB0b3VjaGVkOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgcGVuZGluZzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RDb250cm9sU25hcHNob3QoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogQ29udHJvbFNuYXBzaG90IHtcbiAgY29uc3Qgc25hcHNob3Q6IENvbnRyb2xTbmFwc2hvdCA9IHtcbiAgICBzeW5jRXJyb3JzOiB7fSxcbiAgICBhc3luY0Vycm9yczoge30sXG4gICAgdG91Y2hlZDoge30sXG4gICAgcGVuZGluZzoge30sXG4gIH07XG5cbiAgdHJhdmVyc2VDb250cm9scyhcbiAgICBjb250cm9sLFxuICAgIChjdXJyZW50UGF0aCwgY3VycmVudENvbnRyb2wpID0+IHtcbiAgICAgIGlmICghY3VycmVudFBhdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudENvbnRyb2wudG91Y2hlZCkge1xuICAgICAgICBzbmFwc2hvdC50b3VjaGVkW2N1cnJlbnRQYXRoXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50Q29udHJvbC5wZW5kaW5nKSB7XG4gICAgICAgIHNuYXBzaG90LnBlbmRpbmdbY3VycmVudFBhdGhdID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JzID0gY3VycmVudENvbnRyb2wuZXJyb3JzIGFzIFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xuICAgICAgaWYgKCFlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzeW5jTWVzc2FnZSA9IGVycm9yc1tTWU5DX0VSUk9SX0tFWV07XG4gICAgICBpZiAodHlwZW9mIHN5bmNNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzbmFwc2hvdC5zeW5jRXJyb3JzW2N1cnJlbnRQYXRoXSA9IHN5bmNNZXNzYWdlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhc3luY01lc3NhZ2UgPSBlcnJvcnNbQVNZTkNfRVJST1JfS0VZXTtcbiAgICAgIGlmICh0eXBlb2YgYXN5bmNNZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzbmFwc2hvdC5hc3luY0Vycm9yc1tjdXJyZW50UGF0aF0gPSBhc3luY01lc3NhZ2U7XG4gICAgICB9XG4gICAgfSxcbiAgICAnJ1xuICApO1xuXG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuZnVuY3Rpb24gdHJhdmVyc2VDb250cm9scyhcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICB2aXNpdG9yOiAocGF0aDogc3RyaW5nLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWQsXG4gIHBhdGggPSAnJ1xuKTogdm9pZCB7XG4gIHZpc2l0b3IocGF0aCwgY29udHJvbCk7XG5cbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICBPYmplY3QuZW50cmllcyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChba2V5LCBjaGlsZF0pID0+IHtcbiAgICAgIHRyYXZlcnNlQ29udHJvbHMoY2hpbGQsIHZpc2l0b3IsIGpvaW5QYXRoKHBhdGgsIGtleSkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgIHRyYXZlcnNlQ29udHJvbHMoY2hpbGQsIHZpc2l0b3IsIGpvaW5QYXRoKHBhdGgsIFN0cmluZyhpbmRleCkpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YWl0Rm9yUGVuZGluZyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFjb250cm9sLnBlbmRpbmcpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghY29udHJvbC5wZW5kaW5nKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gKFxuICAgICEhdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgKTtcbn1cblxuZnVuY3Rpb24gdHJ5SW5qZWN0RGVzdHJveVJlZigpOiBEZXN0cm95UmVmIHwgbnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGluamVjdChEZXN0cm95UmVmKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU3luY1ZhbGlkYXRvcnMoXG4gIGJhc2U6IFN5bmNWYWxpZGF0b3JNYXAsXG4gIGZpZWxkQ29uZmlnczogUmVjb3JkPHN0cmluZywgRmllbGRDb25maWc+XG4pOiBTeW5jVmFsaWRhdG9yTWFwIHtcbiAgY29uc3QgYnVja2V0cyA9IG5ldyBNYXA8c3RyaW5nLCBGaWVsZFZhbGlkYXRvcltdPigpO1xuXG4gIGZvciAoY29uc3QgW3BhdGgsIHZhbGlkYXRvcl0gb2YgT2JqZWN0LmVudHJpZXMoYmFzZSkpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGJ1Y2tldHMuZ2V0KHBhdGgpID8/IFtdO1xuICAgIGV4aXN0aW5nLnB1c2godmFsaWRhdG9yKTtcbiAgICBidWNrZXRzLnNldChwYXRoLCBleGlzdGluZyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtwYXRoLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGZpZWxkQ29uZmlncykpIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdG9WYWxpZGF0b3JBcnJheShjb25maWcudmFsaWRhdG9ycyk7XG4gICAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSBidWNrZXRzLmdldChwYXRoKSA/PyBbXTtcbiAgICBleGlzdGluZy5wdXNoKC4uLnZhbGlkYXRvcnMpO1xuICAgIGJ1Y2tldHMuc2V0KHBhdGgsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWQ6IFN5bmNWYWxpZGF0b3JNYXAgPSB7fTtcbiAgYnVja2V0cy5mb3JFYWNoKCh2YWxpZGF0b3JzLCBwYXRoKSA9PiB7XG4gICAgbm9ybWFsaXplZFtwYXRoXSA9ICh2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9ycykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uYmFzZSwgLi4ubm9ybWFsaXplZCB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBc3luY1ZhbGlkYXRvcnMoXG4gIGJhc2U6IEFzeW5jVmFsaWRhdG9yTWFwLFxuICBmaWVsZENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIEZpZWxkQ29uZmlnPlxuKTogQXN5bmNWYWxpZGF0b3JNYXAge1xuICBjb25zdCBidWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIEFycmF5PEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPj4+KCk7XG5cbiAgZm9yIChjb25zdCBbcGF0aCwgdmFsaWRhdG9yXSBvZiBPYmplY3QuZW50cmllcyhiYXNlKSkge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYnVja2V0cy5nZXQocGF0aCkgPz8gW107XG4gICAgZXhpc3RpbmcucHVzaCh2YWxpZGF0b3IpO1xuICAgIGJ1Y2tldHMuc2V0KHBhdGgsIGV4aXN0aW5nKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgW3BhdGgsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRDb25maWdzKSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0b1ZhbGlkYXRvckFycmF5KGNvbmZpZy5hc3luY1ZhbGlkYXRvcnMpO1xuICAgIGlmICh2YWxpZGF0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gYnVja2V0cy5nZXQocGF0aCkgPz8gW107XG4gICAgZXhpc3RpbmcucHVzaCguLi52YWxpZGF0b3JzKTtcbiAgICBidWNrZXRzLnNldChwYXRoLCBleGlzdGluZyk7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkOiBBc3luY1ZhbGlkYXRvck1hcCA9IHt9O1xuICBidWNrZXRzLmZvckVhY2goKHZhbGlkYXRvcnMsIHBhdGgpID0+IHtcbiAgICBub3JtYWxpemVkW3BhdGhdID0gYXN5bmMgKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IG1heWJlQXN5bmMgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc09ic2VydmFibGUobWF5YmVBc3luYylcbiAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1heWJlQXN5bmMpXG4gICAgICAgICAgOiBhd2FpdCBtYXliZUFzeW5jO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uYmFzZSwgLi4ubm9ybWFsaXplZCB9O1xufVxuXG5mdW5jdGlvbiB0b1ZhbGlkYXRvckFycmF5PFQ+KGlucHV0PzogUmVjb3JkPHN0cmluZywgVD4gfCBUW10pOiBUW10ge1xuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVJbml0aWFsVmFsdWVzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGluaXRpYWxWYWx1ZXM6IFQsXG4gIHBlcnNpc3RLZXk/OiBzdHJpbmcsXG4gIHN0b3JhZ2U/OiBQaWNrPFN0b3JhZ2UsICdnZXRJdGVtJyB8ICdzZXRJdGVtJyB8ICdyZW1vdmVJdGVtJz5cbik6IHsgdmFsdWVzOiBUIH0ge1xuICBjb25zdCBiYXNlQ2xvbmUgPSBkZWVwQ2xvbmUoaW5pdGlhbFZhbHVlcyk7XG5cbiAgaWYgKCFwZXJzaXN0S2V5IHx8ICFzdG9yYWdlKSB7XG4gICAgcmV0dXJuIHsgdmFsdWVzOiBiYXNlQ2xvbmUgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc3RvcmVkUmF3ID0gc3RvcmFnZS5nZXRJdGVtKHBlcnNpc3RLZXkpO1xuICAgIGlmICghc3RvcmVkUmF3KSB7XG4gICAgICByZXR1cm4geyB2YWx1ZXM6IGJhc2VDbG9uZSB9O1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0b3JlZFJhdykgYXMgUGFydGlhbDxUPjtcbiAgICBjb25zdCBtZXJnZWQgPSBtZXJnZURlZXAoYmFzZUNsb25lLCBwYXJzZWQpO1xuICAgIHJldHVybiB7IHZhbHVlczogbWVyZ2VkIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IHZhbHVlczogYmFzZUNsb25lIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VHJlZU5vZGU8VD4oc3RhdGU6IHVua25vd24pOiBhc3NlcnRzIHN0YXRlIGlzIFRyZWVOb2RlPFQ+IHtcbiAgaWYgKCFzdGF0ZSB8fCB0eXBlb2Ygc3RhdGUgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0YXRlIHN0cnVjdHVyZSBmb3IgZm9ybSB0cmVlJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZpZWxkQ29uZmlnKFxuICBmaWVsZENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIEZpZWxkQ29uZmlnPixcbiAgcGF0aDogc3RyaW5nXG4pOiBGaWVsZENvbmZpZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChmaWVsZENvbmZpZ3NbcGF0aF0pIHtcbiAgICByZXR1cm4gZmllbGRDb25maWdzW3BhdGhdO1xuICB9XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpZWxkQ29uZmlncyk7XG4gIGxldCBtYXRjaDogeyBrZXk6IHN0cmluZzsgY29uZmlnOiBGaWVsZENvbmZpZyB9IHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBpZiAoIWtleS5pbmNsdWRlcygnKicpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG1hdGNoUGF0aChrZXksIHBhdGgpKSB7XG4gICAgICBpZiAoIW1hdGNoIHx8IG1hdGNoLmtleS5sZW5ndGggPCBrZXkubGVuZ3RoKSB7XG4gICAgICAgIG1hdGNoID0geyBrZXksIGNvbmZpZzogZmllbGRDb25maWdzW2tleV0gfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAobWF0Y2gpIHtcbiAgICByZXR1cm4gbWF0Y2guY29uZmlnO1xuICB9XG5cbiAgcmV0dXJuIGZpZWxkQ29uZmlnc1snKiddO1xufVxuXG5mdW5jdGlvbiBmaW5kVmFsaWRhdG9yPFQ+KG1hcDogUmVjb3JkPHN0cmluZywgVD4sIHBhdGg6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICBpZiAobWFwW3BhdGhdKSB7XG4gICAgcmV0dXJuIG1hcFtwYXRoXTtcbiAgfVxuXG4gIGxldCBjYW5kaWRhdGU6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBUIH0gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG1hcCkpIHtcbiAgICBpZiAoIWtleS5pbmNsdWRlcygnKicpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG1hdGNoUGF0aChrZXksIHBhdGgpKSB7XG4gICAgICBpZiAoIWNhbmRpZGF0ZSB8fCBjYW5kaWRhdGUua2V5Lmxlbmd0aCA8IGtleS5sZW5ndGgpIHtcbiAgICAgICAgY2FuZGlkYXRlID0geyBrZXksIHZhbHVlOiBtYXBba2V5XSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChjYW5kaWRhdGUpIHtcbiAgICByZXR1cm4gY2FuZGlkYXRlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG1hcFsnKiddO1xufVxuXG5pbnRlcmZhY2UgUGVyc2lzdENvbnRyb2xsZXIge1xuICBzY2hlZHVsZVBlcnNpc3Q6ICgpID0+IHZvaWQ7XG4gIHBlcnNpc3RJbW1lZGlhdGVseTogKCkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUGVyc2lzdENvbnRyb2xsZXIoXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwLFxuICBwZXJzaXN0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHN0b3JhZ2U6IFBpY2s8U3RvcmFnZSwgJ2dldEl0ZW0nIHwgJ3NldEl0ZW0nIHwgJ3JlbW92ZUl0ZW0nPiB8IHVuZGVmaW5lZCxcbiAgZGVib3VuY2VNczogbnVtYmVyLFxuICBjbGVhbnVwQ2FsbGJhY2tzOiBBcnJheTwoKSA9PiB2b2lkPlxuKTogUGVyc2lzdENvbnRyb2xsZXIge1xuICBpZiAoIXBlcnNpc3RLZXkgfHwgIXN0b3JhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZWR1bGVQZXJzaXN0OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBwZXJzaXN0SW1tZWRpYXRlbHk6ICgpID0+IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHBlcnNpc3QgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICBzdG9yYWdlLnNldEl0ZW0ocGVyc2lzdEtleSwgcGF5bG9hZCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTd2FsbG93IHBlcnNpc3RlbmNlIGVycm9ycyB0byBhdm9pZCBicmVha2luZyBmb3JtIHVwZGF0ZXNcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2NoZWR1bGVQZXJzaXN0ID0gKCkgPT4ge1xuICAgIGlmIChkZWJvdW5jZU1zIDw9IDApIHtcbiAgICAgIHBlcnNpc3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfVxuXG4gICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIHBlcnNpc3QoKTtcbiAgICB9LCBkZWJvdW5jZU1zKTtcbiAgfTtcblxuICBjbGVhbnVwQ2FsbGJhY2tzLnB1c2goKCkgPT4ge1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgc2NoZWR1bGVQZXJzaXN0LFxuICAgIHBlcnNpc3RJbW1lZGlhdGVseTogcGVyc2lzdCxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFOR1VMQVIgRElSRUNUSVZFXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNpbXBsZSBkaXJlY3RpdmUgZm9yIHR3by13YXkgYmluZGluZyB3aXRoIHNpZ25hbHNcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NpZ25hbFRyZWVTaWduYWxWYWx1ZV0nLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNpZ25hbFZhbHVlRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNpZ25hbFZhbHVlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHNpZ25hbFRyZWVTaWduYWxWYWx1ZSE6IFdyaXRhYmxlU2lnbmFsPHVua25vd24+O1xuICBAT3V0cHV0KCkgc2lnbmFsVHJlZVNpZ25hbFZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx1bmtub3duPigpO1xuXG4gIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCA9ICgpID0+IHtcbiAgICAvLyBFbXB0eSBpbXBsZW1lbnRhdGlvbiBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgfTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgLy8gRW1wdHkgaW1wbGVtZW50YXRpb24gZm9yIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIH07XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zaWduYWxUcmVlU2lnbmFsVmFsdWUoKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICd2YWx1ZScsIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignY2hhbmdlJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0Py52YWx1ZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zaWduYWxUcmVlU2lnbmFsVmFsdWUuc2V0KHZhbHVlKTtcbiAgICAgIHRoaXMuc2lnbmFsVHJlZVNpZ25hbFZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gIGhhbmRsZUJsdXIoKSB7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zaWduYWxUcmVlU2lnbmFsVmFsdWUuc2V0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHVua25vd24pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgIGlzRGlzYWJsZWRcbiAgICApO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFWFBPUlRTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgY29uc3QgU0lHTkFMX0ZPUk1fRElSRUNUSVZFUyA9IFtTaWduYWxWYWx1ZURpcmVjdGl2ZV07XG4iXX0=","export function required(message = 'Required') {\n return (value) => (!value ? message : null);\n}\nexport function email(message = 'Invalid email') {\n return (value) => {\n const strValue = value;\n return strValue && !strValue.includes('@') ? message : null;\n };\n}\nexport function minLength(min, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Min ${min} characters`;\n return strValue && strValue.length < min ? errorMsg : null;\n };\n}\nexport function maxLength(max, message) {\n return (value) => {\n const strValue = value;\n const errorMsg = message ?? `Max ${max} characters`;\n return strValue && strValue.length > max ? errorMsg : null;\n };\n}\nexport function pattern(regex, message = 'Invalid format') {\n return (value) => {\n const strValue = value;\n return strValue && !regex.test(strValue) ? message : null;\n };\n}\nexport function min(min, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at least ${min}`;\n return numValue < min ? errorMsg : null;\n };\n}\nexport function max(max, message) {\n return (value) => {\n const numValue = value;\n const errorMsg = message ?? `Must be at most ${max}`;\n return numValue > max ? errorMsg : null;\n };\n}\nexport function compose(validators) {\n return (value) => {\n for (const validator of validators) {\n const error = validator(value);\n if (error) {\n return error;\n }\n }\n return null;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMEJBLE1BQU0sVUFBVSxRQUFRLENBQUMsT0FBTyxHQUFHLFVBQVU7SUFDM0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBaUJELE1BQU0sVUFBVSxLQUFLLENBQUMsT0FBTyxHQUFHLGVBQWU7SUFDN0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxPQUFPLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlELENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUNwRCxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0QsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQW1CRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVcsRUFBRSxPQUFnQjtJQUNyRCxPQUFPLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxRQUFRLEdBQUcsS0FBZSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO1FBQ3BELE9BQU8sUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxPQUFPLENBQ3JCLEtBQWEsRUFDYixPQUFPLEdBQUcsZ0JBQWdCO0lBRTFCLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsT0FBTyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBbUJELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWdCO0lBQy9DLE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsT0FBTyxJQUFJLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUN0RCxPQUFPLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsT0FBZ0I7SUFDL0MsT0FBTyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxPQUFPLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ3JELE9BQU8sUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsT0FBTyxDQUFDLFVBQTRCO0lBQ2xELE9BQU8sQ0FBQyxLQUFjLEVBQUUsRUFBRTtRQUN4QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgVHJlZS1zaGFrZWFibGUgdmFsaWRhdG9yIGZ1bmN0aW9ucyBmb3IgZm9ybSBmaWVsZHNcbiAqXG4gKiBUaGVzZSB2YWxpZGF0b3JzIGFyZSBleHBvcnRlZCBhcyBpbmRpdmlkdWFsIGZ1bmN0aW9ucyB0byBlbmFibGVcbiAqIHRyZWUtc2hha2luZy4gT25seSB0aGUgdmFsaWRhdG9ycyB5b3UgYWN0dWFsbHkgdXNlIHdpbGwgYmUgaW5jbHVkZWRcbiAqIGluIHlvdXIgYnVuZGxlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmllbGRWYWxpZGF0b3IgfSBmcm9tICcuL25nLWZvcm1zJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVxdWlyZWQgZmllbGQgdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIG1lc3NhZ2UgLSBDdXN0b20gZXJyb3IgbWVzc2FnZSAoZGVmYXVsdDogXCJSZXF1aXJlZFwiKVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlcnJvciBtZXNzYWdlIGlmIHZhbHVlIGlzIGZhbHN5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIG5hbWU6IHJlcXVpcmVkKCksXG4gKiAgICAgZW1haWw6IHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZChtZXNzYWdlID0gJ1JlcXVpcmVkJyk6IEZpZWxkVmFsaWRhdG9yIHtcbiAgcmV0dXJuICh2YWx1ZTogdW5rbm93bikgPT4gKCF2YWx1ZSA/IG1lc3NhZ2UgOiBudWxsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVtYWlsIGZvcm1hdCB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZW1haWxcIilcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgQCBzeW1ib2xcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgZW1haWw6IGVtYWlsKCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2UgPSAnSW52YWxpZCBlbWFpbCcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXN0clZhbHVlLmluY2x1ZGVzKCdAJykgPyBtZXNzYWdlIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWluaW11bSBsZW5ndGggdmFsaWRhdG9yIGZvciBzdHJpbmdzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gcmVxdWlyZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBwYXNzd29yZDogbWluTGVuZ3RoKDgpLFxuICogICAgIGRlc2NyaXB0aW9uOiBtaW5MZW5ndGgoMTAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGF0IGxlYXN0IDEwIGNoYXJhY3RlcnMnKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNaW4gJHttaW59IGNoYXJhY3RlcnNgO1xuICAgIHJldHVybiBzdHJWYWx1ZSAmJiBzdHJWYWx1ZS5sZW5ndGggPCBtaW4gPyBlcnJvck1zZyA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1heGltdW0gbGVuZ3RoIHZhbGlkYXRvciBmb3Igc3RyaW5nc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoXG4gKiBAcGFyYW0gbWVzc2FnZSAtIE9wdGlvbmFsIGN1c3RvbSBlcnJvciBtZXNzYWdlXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCBjaGVja3Mgc3RyaW5nIGxlbmd0aFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICB1c2VybmFtZTogbWF4TGVuZ3RoKDIwKSxcbiAqICAgICBiaW86IG1heExlbmd0aCg1MDAsICdCaW8gbXVzdCBiZSB1bmRlciA1MDAgY2hhcmFjdGVycycpXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXhMZW5ndGgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE1heCAke21heH0gY2hhcmFjdGVyc2A7XG4gICAgcmV0dXJuIHN0clZhbHVlICYmIHN0clZhbHVlLmxlbmd0aCA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVnZXggcGF0dGVybiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gcmVnZXggLSBSZWd1bGFyIGV4cHJlc3Npb24gdG8gdGVzdCBhZ2FpbnN0XG4gKiBAcGFyYW0gbWVzc2FnZSAtIEN1c3RvbSBlcnJvciBtZXNzYWdlIChkZWZhdWx0OiBcIkludmFsaWQgZm9ybWF0XCIpXG4gKiBAcmV0dXJucyBWYWxpZGF0b3IgZnVuY3Rpb24gdGhhdCB0ZXN0cyB2YWx1ZSBhZ2FpbnN0IHJlZ2V4XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIHBob25lOiBwYXR0ZXJuKC9eXFxkezN9LVxcZHszfS1cXGR7NH0kLywgJ1Bob25lIG11c3QgYmUgaW4gZm9ybWF0OiAxMjMtNDU2LTc4OTAnKSxcbiAqICAgICB6aXBDb2RlOiBwYXR0ZXJuKC9eXFxkezV9JC8sICdaaXAgY29kZSBtdXN0IGJlIDUgZGlnaXRzJylcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdHRlcm4oXG4gIHJlZ2V4OiBSZWdFeHAsXG4gIG1lc3NhZ2UgPSAnSW52YWxpZCBmb3JtYXQnXG4pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICByZXR1cm4gc3RyVmFsdWUgJiYgIXJlZ2V4LnRlc3Qoc3RyVmFsdWUpID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1pbmltdW0gdmFsdWUgdmFsaWRhdG9yIGZvciBudW1iZXJzXG4gKlxuICogQHBhcmFtIG1pbiAtIE1pbmltdW0gYWxsb3dlZCB2YWx1ZVxuICogQHBhcmFtIG1lc3NhZ2UgLSBPcHRpb25hbCBjdXN0b20gZXJyb3IgbWVzc2FnZVxuICogQHJldHVybnMgVmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIG51bWVyaWMgbWluaW11bVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIHZhbGlkYXRvcnM6IHtcbiAqICAgICBhZ2U6IG1pbigxOCwgJ011c3QgYmUgYXQgbGVhc3QgMTggeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1pbigxKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWluKG1pbjogbnVtYmVyLCBtZXNzYWdlPzogc3RyaW5nKTogRmllbGRWYWxpZGF0b3Ige1xuICByZXR1cm4gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3QgbnVtVmFsdWUgPSB2YWx1ZSBhcyBudW1iZXI7XG4gICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlID8/IGBNdXN0IGJlIGF0IGxlYXN0ICR7bWlufWA7XG4gICAgcmV0dXJuIG51bVZhbHVlIDwgbWluID8gZXJyb3JNc2cgOiBudWxsO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXhpbXVtIHZhbHVlIHZhbGlkYXRvciBmb3IgbnVtYmVyc1xuICpcbiAqIEBwYXJhbSBtYXggLSBNYXhpbXVtIGFsbG93ZWQgdmFsdWVcbiAqIEBwYXJhbSBtZXNzYWdlIC0gT3B0aW9uYWwgY3VzdG9tIGVycm9yIG1lc3NhZ2VcbiAqIEByZXR1cm5zIFZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBudW1lcmljIG1heGltdW1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY3JlYXRlRm9ybVRyZWUoZGF0YSwge1xuICogICB2YWxpZGF0b3JzOiB7XG4gKiAgICAgYWdlOiBtYXgoMTIwLCAnTXVzdCBiZSB1bmRlciAxMjAgeWVhcnMgb2xkJyksXG4gKiAgICAgcXVhbnRpdHk6IG1heCgxMDApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXgobWF4OiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBudW1WYWx1ZSA9IHZhbHVlIGFzIG51bWJlcjtcbiAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UgPz8gYE11c3QgYmUgYXQgbW9zdCAke21heH1gO1xuICAgIHJldHVybiBudW1WYWx1ZSA+IG1heCA/IGVycm9yTXNnIDogbnVsbDtcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSB2YWxpZGF0b3JzIGludG8gYSBzaW5nbGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHZhbGlkYXRvcnMgLSBBcnJheSBvZiB2YWxpZGF0b3IgZnVuY3Rpb25zIHRvIGNvbWJpbmVcbiAqIEByZXR1cm5zIENvbWJpbmVkIHZhbGlkYXRvciB0aGF0IHJldHVybnMgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNyZWF0ZUZvcm1UcmVlKGRhdGEsIHtcbiAqICAgdmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiBjb21wb3NlKFtcbiAqICAgICAgIHJlcXVpcmVkKCdFbWFpbCBpcyByZXF1aXJlZCcpLFxuICogICAgICAgZW1haWwoJ0ludmFsaWQgZW1haWwgZm9ybWF0JyksXG4gKiAgICAgICBwYXR0ZXJuKC9AY29tcGFueVxcLmNvbSQvLCAnTXVzdCBiZSBhIGNvbXBhbnkgZW1haWwnKVxuICogICAgIF0pXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlKHZhbGlkYXRvcnM6IEZpZWxkVmFsaWRhdG9yW10pOiBGaWVsZFZhbGlkYXRvciB7XG4gIHJldHVybiAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBmb3IgKGNvbnN0IHZhbGlkYXRvciBvZiB2YWxpZGF0b3JzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbn1cbiJdfQ==","import { firstValueFrom, isObservable } from 'rxjs';\nexport function unique(checkFn, message = 'Already exists') {\n return async (value) => {\n if (!value)\n return null;\n const exists = await checkFn(value);\n return exists ? message : null;\n };\n}\nexport function debounce(validator, delayMs) {\n let timeoutId;\n return async (value) => {\n return new Promise((resolve) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(async () => {\n const maybeAsync = validator(value);\n const result = isObservable(maybeAsync)\n ? await firstValueFrom(maybeAsync)\n : await maybeAsync;\n resolve(result);\n }, delayMs);\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9jb3JlL2FzeW5jLXZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUErQnBELE1BQU0sVUFBVSxNQUFNLENBQ3BCLE9BQTZDLEVBQzdDLE9BQU8sR0FBRyxnQkFBZ0I7SUFFMUIsT0FBTyxLQUFLLEVBQUUsS0FBYyxFQUFFLEVBQUU7UUFDOUIsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXFCRCxNQUFNLFVBQVUsUUFBUSxDQUN0QixTQUE0QyxFQUM1QyxPQUFlO0lBRWYsSUFBSSxTQUF3QyxDQUFDO0lBRTdDLE9BQU8sS0FBSyxFQUFFLEtBQWMsRUFBRSxFQUFFO1FBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDaEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO29CQUNyQyxDQUFDLENBQUMsTUFBTSxjQUFjLENBQUMsVUFBVSxDQUFDO29CQUNsQyxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQixDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUcmVlLXNoYWtlYWJsZSBhc3luYyB2YWxpZGF0b3IgZnVuY3Rpb25zIGZvciBmb3JtIGZpZWxkc1xuICovXG5cbmltcG9ydCB0eXBlIHsgRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuIH0gZnJvbSAnLi9uZy1mb3Jtcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhc3luYyB1bmlxdWVuZXNzIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSBjaGVja0ZuIC0gQXN5bmMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdmFsdWUgYWxyZWFkeSBleGlzdHNcbiAqIEBwYXJhbSBtZXNzYWdlIC0gQ3VzdG9tIGVycm9yIG1lc3NhZ2UgKGRlZmF1bHQ6IFwiQWxyZWFkeSBleGlzdHNcIilcbiAqIEByZXR1cm5zIEFzeW5jIHZhbGlkYXRvciBmdW5jdGlvblxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIGVtYWlsOiB1bmlxdWUoXG4gKiAgICAgICBhc3luYyAoZW1haWwpID0+IHtcbiAqICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgL2FwaS9jaGVjay1lbWFpbD9lbWFpbD0ke2VtYWlsfWApO1xuICogICAgICAgICBjb25zdCB7IGV4aXN0cyB9ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICogICAgICAgICByZXR1cm4gZXhpc3RzO1xuICogICAgICAgfSxcbiAqICAgICAgICdUaGlzIGVtYWlsIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCdcbiAqICAgICApXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWUoXG4gIGNoZWNrRm46ICh2YWx1ZTogdW5rbm93bikgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgbWVzc2FnZSA9ICdBbHJlYWR5IGV4aXN0cydcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBleGlzdHMgPSBhd2FpdCBjaGVja0ZuKHZhbHVlKTtcbiAgICByZXR1cm4gZXhpc3RzID8gbWVzc2FnZSA6IG51bGw7XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlYm91bmNlZCBhc3luYyB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gdmFsaWRhdG9yIC0gVGhlIGFzeW5jIHZhbGlkYXRvciB0byBkZWJvdW5jZVxuICogQHBhcmFtIGRlbGF5TXMgLSBEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHJ1bm5pbmcgdmFsaWRhdGlvblxuICogQHJldHVybnMgRGVib3VuY2VkIGFzeW5jIHZhbGlkYXRvclxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjcmVhdGVGb3JtVHJlZShkYXRhLCB7XG4gKiAgIGFzeW5jVmFsaWRhdG9yczoge1xuICogICAgIHVzZXJuYW1lOiBkZWJvdW5jZShcbiAqICAgICAgIHVuaXF1ZShjaGVja1VzZXJuYW1lLCAnVXNlcm5hbWUgdGFrZW4nKSxcbiAqICAgICAgIDUwMCAvLyBXYWl0IDUwMG1zIGFmdGVyIHVzZXIgc3RvcHMgdHlwaW5nXG4gKiAgICAgKVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2UoXG4gIHZhbGlkYXRvcjogRm9ybVRyZWVBc3luY1ZhbGlkYXRvckZuPHVua25vd24+LFxuICBkZWxheU1zOiBudW1iZXJcbik6IEZvcm1UcmVlQXN5bmNWYWxpZGF0b3JGbjx1bmtub3duPiB7XG4gIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuXG4gIHJldHVybiBhc3luYyAodmFsdWU6IHVua25vd24pID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1heWJlQXN5bmMgPSB2YWxpZGF0b3IodmFsdWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc09ic2VydmFibGUobWF5YmVBc3luYylcbiAgICAgICAgICA/IGF3YWl0IGZpcnN0VmFsdWVGcm9tKG1heWJlQXN5bmMpXG4gICAgICAgICAgOiBhd2FpdCBtYXliZUFzeW5jO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9LCBkZWxheU1zKTtcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==","import { signal } from '@angular/core';\nimport { deepClone, snapshotsEqual } from '@signaltree/shared';\nexport function withFormHistory(formTree, options = {}) {\n const capacity = Math.max(1, options.capacity ?? 10);\n const historySignal = signal({\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n }, ...(ngDevMode ? [{ debugName: \"historySignal\" }] : []));\n let recording = true;\n let suppressUpdates = 0;\n let internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n const subscription = formTree.form.valueChanges.subscribe(() => {\n if (suppressUpdates > 0) {\n suppressUpdates--;\n return;\n }\n if (!recording) {\n internalHistory = {\n ...internalHistory,\n present: deepClone(formTree.form.getRawValue()),\n };\n return;\n }\n const snapshot = deepClone(formTree.form.getRawValue());\n if (snapshotsEqual(internalHistory.present, snapshot)) {\n internalHistory = {\n ...internalHistory,\n present: snapshot,\n };\n historySignal.set(cloneHistory(internalHistory));\n return;\n }\n const updatedPast = [...internalHistory.past, internalHistory.present];\n if (updatedPast.length > capacity) {\n updatedPast.shift();\n }\n internalHistory = {\n past: updatedPast,\n present: snapshot,\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n });\n const originalDestroy = formTree.destroy;\n formTree.destroy = () => {\n subscription.unsubscribe();\n originalDestroy();\n };\n const undo = () => {\n const history = historySignal();\n if (history.past.length === 0) {\n return;\n }\n const previous = deepClone(history.past[history.past.length - 1]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(previous);\n recording = true;\n internalHistory = {\n past: history.past.slice(0, -1),\n present: previous,\n future: [history.present, ...history.future],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const redo = () => {\n const history = historySignal();\n if (history.future.length === 0) {\n return;\n }\n const next = deepClone(history.future[0]);\n recording = false;\n suppressUpdates++;\n formTree.setValues(next);\n recording = true;\n internalHistory = {\n past: [...history.past, history.present],\n present: next,\n future: history.future.slice(1),\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n const clearHistory = () => {\n internalHistory = {\n past: [],\n present: deepClone(formTree.form.getRawValue()),\n future: [],\n };\n historySignal.set(cloneHistory(internalHistory));\n };\n function cloneHistory(state) {\n return {\n past: state.past.map((entry) => deepClone(entry)),\n present: deepClone(state.present),\n future: state.future.map((entry) => deepClone(entry)),\n };\n }\n return Object.assign(formTree, {\n undo,\n redo,\n clearHistory,\n history: historySignal.asReadonly(),\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nLWZvcm1zL3NyYy9oaXN0b3J5L2hpc3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBNEMvRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixRQUFxQixFQUNyQixVQUFpQyxFQUFFO0lBT25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFpQjtRQUMzQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLHlEQUFDLENBQUM7SUFFSCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLElBQUksZUFBZSxHQUFtQjtRQUNwQyxJQUFJLEVBQUUsRUFBRTtRQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztRQUNwRCxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQzdELElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsZUFBZSxHQUFHO2dCQUNoQixHQUFHLGVBQWU7Z0JBQ2xCLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQzthQUNyRCxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQyxDQUFDO1FBQzdELElBQUksY0FBYyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxlQUFlLEdBQUc7Z0JBQ2hCLEdBQUcsZUFBZTtnQkFDbEIsT0FBTyxFQUFFLFFBQVE7YUFDbEIsQ0FBQztZQUNGLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDakQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkUsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsZUFBZSxHQUFHO1lBQ2hCLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE1BQU0sRUFBRSxFQUFFO1NBQ1gsQ0FBQztRQUNGLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQ3pDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixlQUFlLEVBQUUsQ0FBQztJQUNwQixDQUFDLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7UUFDaEIsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixlQUFlLEVBQUUsQ0FBQztRQUNsQixRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsZUFBZSxHQUFHO1lBQ2hCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0IsT0FBTyxFQUFFLFFBQVE7WUFDakIsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDN0MsQ0FBQztRQUNGLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLE1BQU0sT0FBTyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsZUFBZSxFQUFFLENBQUM7UUFDbEIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGVBQWUsR0FBRztZQUNoQixJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDaEMsQ0FBQztRQUNGLGFBQWEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLGVBQWUsR0FBRztZQUNoQixJQUFJLEVBQUUsRUFBRTtZQUNSLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQU8sQ0FBQztZQUNwRCxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFDRixhQUFhLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQztJQUVGLFNBQVMsWUFBWSxDQUFDLEtBQXFCO1FBQ3pDLE9BQU87WUFDTCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRCxPQUFPLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDakMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEQsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1FBQzdCLElBQUk7UUFDSixJQUFJO1FBQ0osWUFBWTtRQUNaLE9BQU8sRUFBRSxhQUFhLENBQUMsVUFBVSxFQUFFO0tBQ3BDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBzbmFwc2hvdHNFcXVhbCB9IGZyb20gJ0BzaWduYWx0cmVlL3NoYXJlZCc7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnRzIGluIHNlY29uZGFyeSBlbnRyeSBwb2ludHNcbmludGVyZmFjZSBGb3JtVHJlZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZm9ybTogYW55OyAvLyBGb3JtR3JvdXBcbiAgdW53cmFwKCk6IFQ7XG4gIGRlc3Ryb3koKTogdm9pZDtcbiAgc2V0VmFsdWVzKHZhbHVlczogUGFydGlhbDxUPik6IHZvaWQ7XG59XG5cbi8qKlxuICogRm9ybSBoaXN0b3J5IHN0YXRlIHN0cnVjdHVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1IaXN0b3J5PFQ+IHtcbiAgcGFzdDogVFtdO1xuICBwcmVzZW50OiBUO1xuICBmdXR1cmU6IFRbXTtcbn1cblxuLyoqXG4gKiBFbmhhbmNlcyBhIEZvcm1UcmVlIHdpdGggdW5kby9yZWRvIGNhcGFiaWxpdGllcy5cbiAqIFByb3ZpZGVzIGZvcm0tc3BlY2lmaWMgaGlzdG9yeSBtYW5hZ2VtZW50IHdpdGggY2FwYWNpdHkgbGltaXRzIGFuZCBjaGFuZ2UgdHJhY2tpbmcuXG4gKlxuICogQHBhcmFtIGZvcm1UcmVlIC0gVGhlIGZvcm0gdHJlZSB0byBlbmhhbmNlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMuY2FwYWNpdHkgLSBNYXhpbXVtIG51bWJlciBvZiBoaXN0b3J5IGVudHJpZXMgKGRlZmF1bHQ6IDEwKVxuICogQHJldHVybnMgRXh0ZW5kZWQgRm9ybVRyZWUgd2l0aCB1bmRvLCByZWRvLCBhbmQgaGlzdG9yeSBhY2Nlc3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZm9ybSA9IGNyZWF0ZUZvcm1UcmVlKHsgbmFtZTogJycsIGVtYWlsOiAnJyB9KTtcbiAqIGNvbnN0IGZvcm1XaXRoSGlzdG9yeSA9IHdpdGhGb3JtSGlzdG9yeShmb3JtLCB7IGNhcGFjaXR5OiAyMCB9KTtcbiAqXG4gKiBmb3JtLiQubmFtZS5zZXQoJ0pvaG4nKTtcbiAqIGZvcm0uJC5lbWFpbC5zZXQoJ2pvaG5AZXhhbXBsZS5jb20nKTtcbiAqXG4gKiBmb3JtV2l0aEhpc3RvcnkudW5kbygpOyAvLyBSZXZlcnRzIGVtYWlsIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnVuZG8oKTsgLy8gUmV2ZXJ0cyBuYW1lIGNoYW5nZVxuICogZm9ybVdpdGhIaXN0b3J5LnJlZG8oKTsgLy8gUmVhcHBsaWVzIG5hbWUgY2hhbmdlXG4gKlxuICogY29uc29sZS5sb2coZm9ybVdpdGhIaXN0b3J5Lmhpc3RvcnkoKS5wYXN0Lmxlbmd0aCk7IC8vIDFcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEZvcm1IaXN0b3J5PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGZvcm1UcmVlOiBGb3JtVHJlZTxUPixcbiAgb3B0aW9uczogeyBjYXBhY2l0eT86IG51bWJlciB9ID0ge31cbik6IEZvcm1UcmVlPFQ+ICYge1xuICB1bmRvOiAoKSA9PiB2b2lkO1xuICByZWRvOiAoKSA9PiB2b2lkO1xuICBjbGVhckhpc3Rvcnk6ICgpID0+IHZvaWQ7XG4gIGhpc3Rvcnk6IFNpZ25hbDxGb3JtSGlzdG9yeTxUPj47XG59IHtcbiAgY29uc3QgY2FwYWNpdHkgPSBNYXRoLm1heCgxLCBvcHRpb25zLmNhcGFjaXR5ID8/IDEwKTtcbiAgY29uc3QgaGlzdG9yeVNpZ25hbCA9IHNpZ25hbDxGb3JtSGlzdG9yeTxUPj4oe1xuICAgIHBhc3Q6IFtdLFxuICAgIHByZXNlbnQ6IGRlZXBDbG9uZShmb3JtVHJlZS5mb3JtLmdldFJhd1ZhbHVlKCkgYXMgVCksXG4gICAgZnV0dXJlOiBbXSxcbiAgfSk7XG5cbiAgbGV0IHJlY29yZGluZyA9IHRydWU7XG4gIGxldCBzdXBwcmVzc1VwZGF0ZXMgPSAwO1xuICBsZXQgaW50ZXJuYWxIaXN0b3J5OiBGb3JtSGlzdG9yeTxUPiA9IHtcbiAgICBwYXN0OiBbXSxcbiAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgIGZ1dHVyZTogW10sXG4gIH07XG5cbiAgY29uc3Qgc3Vic2NyaXB0aW9uID0gZm9ybVRyZWUuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICBpZiAoc3VwcHJlc3NVcGRhdGVzID4gMCkge1xuICAgICAgc3VwcHJlc3NVcGRhdGVzLS07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyZWNvcmRpbmcpIHtcbiAgICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgICAgLi4uaW50ZXJuYWxIaXN0b3J5LFxuICAgICAgICBwcmVzZW50OiBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpLFxuICAgICAgfTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc25hcHNob3QgPSBkZWVwQ2xvbmUoZm9ybVRyZWUuZm9ybS5nZXRSYXdWYWx1ZSgpIGFzIFQpO1xuICAgIGlmIChzbmFwc2hvdHNFcXVhbChpbnRlcm5hbEhpc3RvcnkucHJlc2VudCwgc25hcHNob3QpKSB7XG4gICAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICAgIC4uLmludGVybmFsSGlzdG9yeSxcbiAgICAgICAgcHJlc2VudDogc25hcHNob3QsXG4gICAgICB9O1xuICAgICAgaGlzdG9yeVNpZ25hbC5zZXQoY2xvbmVIaXN0b3J5KGludGVybmFsSGlzdG9yeSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUGFzdCA9IFsuLi5pbnRlcm5hbEhpc3RvcnkucGFzdCwgaW50ZXJuYWxIaXN0b3J5LnByZXNlbnRdO1xuICAgIGlmICh1cGRhdGVkUGFzdC5sZW5ndGggPiBjYXBhY2l0eSkge1xuICAgICAgdXBkYXRlZFBhc3Quc2hpZnQoKTtcbiAgICB9XG4gICAgaW50ZXJuYWxIaXN0b3J5ID0ge1xuICAgICAgcGFzdDogdXBkYXRlZFBhc3QsXG4gICAgICBwcmVzZW50OiBzbmFwc2hvdCxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH0pO1xuXG4gIGNvbnN0IG9yaWdpbmFsRGVzdHJveSA9IGZvcm1UcmVlLmRlc3Ryb3k7XG4gIGZvcm1UcmVlLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgb3JpZ2luYWxEZXN0cm95KCk7XG4gIH07XG5cbiAgY29uc3QgdW5kbyA9ICgpID0+IHtcbiAgICBjb25zdCBoaXN0b3J5ID0gaGlzdG9yeVNpZ25hbCgpO1xuICAgIGlmIChoaXN0b3J5LnBhc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXZpb3VzID0gZGVlcENsb25lKGhpc3RvcnkucGFzdFtoaXN0b3J5LnBhc3QubGVuZ3RoIC0gMV0pO1xuICAgIHJlY29yZGluZyA9IGZhbHNlO1xuICAgIHN1cHByZXNzVXBkYXRlcysrO1xuICAgIGZvcm1UcmVlLnNldFZhbHVlcyhwcmV2aW91cyk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBoaXN0b3J5LnBhc3Quc2xpY2UoMCwgLTEpLFxuICAgICAgcHJlc2VudDogcHJldmlvdXMsXG4gICAgICBmdXR1cmU6IFtoaXN0b3J5LnByZXNlbnQsIC4uLmhpc3RvcnkuZnV0dXJlXSxcbiAgICB9O1xuICAgIGhpc3RvcnlTaWduYWwuc2V0KGNsb25lSGlzdG9yeShpbnRlcm5hbEhpc3RvcnkpKTtcbiAgfTtcblxuICBjb25zdCByZWRvID0gKCkgPT4ge1xuICAgIGNvbnN0IGhpc3RvcnkgPSBoaXN0b3J5U2lnbmFsKCk7XG4gICAgaWYgKGhpc3RvcnkuZnV0dXJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gZGVlcENsb25lKGhpc3RvcnkuZnV0dXJlWzBdKTtcbiAgICByZWNvcmRpbmcgPSBmYWxzZTtcbiAgICBzdXBwcmVzc1VwZGF0ZXMrKztcbiAgICBmb3JtVHJlZS5zZXRWYWx1ZXMobmV4dCk7XG4gICAgcmVjb3JkaW5nID0gdHJ1ZTtcbiAgICBpbnRlcm5hbEhpc3RvcnkgPSB7XG4gICAgICBwYXN0OiBbLi4uaGlzdG9yeS5wYXN0LCBoaXN0b3J5LnByZXNlbnRdLFxuICAgICAgcHJlc2VudDogbmV4dCxcbiAgICAgIGZ1dHVyZTogaGlzdG9yeS5mdXR1cmUuc2xpY2UoMSksXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGludGVybmFsSGlzdG9yeSA9IHtcbiAgICAgIHBhc3Q6IFtdLFxuICAgICAgcHJlc2VudDogZGVlcENsb25lKGZvcm1UcmVlLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBUKSxcbiAgICAgIGZ1dHVyZTogW10sXG4gICAgfTtcbiAgICBoaXN0b3J5U2lnbmFsLnNldChjbG9uZUhpc3RvcnkoaW50ZXJuYWxIaXN0b3J5KSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gY2xvbmVIaXN0b3J5KHN0YXRlOiBGb3JtSGlzdG9yeTxUPik6IEZvcm1IaXN0b3J5PFQ+IHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFzdDogc3RhdGUucGFzdC5tYXAoKGVudHJ5KSA9PiBkZWVwQ2xvbmUoZW50cnkpKSxcbiAgICAgIHByZXNlbnQ6IGRlZXBDbG9uZShzdGF0ZS5wcmVzZW50KSxcbiAgICAgIGZ1dHVyZTogc3RhdGUuZnV0dXJlLm1hcCgoZW50cnkpID0+IGRlZXBDbG9uZShlbnRyeSkpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihmb3JtVHJlZSwge1xuICAgIHVuZG8sXG4gICAgcmVkbyxcbiAgICBjbGVhckhpc3RvcnksXG4gICAgaGlzdG9yeTogaGlzdG9yeVNpZ25hbC5hc1JlYWRvbmx5KCksXG4gIH0pO1xufVxuIl19"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signaltree/ng-forms",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.16",
|
|
4
4
|
"description": "Complete Angular forms integration for SignalTree. FormTree creation, custom directives, validators, form state tracking, and RxJS bridge.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/core": "^20.3.0",
|
|
@@ -8,10 +8,6 @@
|
|
|
8
8
|
"@signaltree/core": "^4.0.0",
|
|
9
9
|
"rxjs": "^7.0.0"
|
|
10
10
|
},
|
|
11
|
-
"dependencies": {
|
|
12
|
-
"@signaltree/shared": "workspace:*",
|
|
13
|
-
"tslib": "^2.3.0"
|
|
14
|
-
},
|
|
15
11
|
"sideEffects": false,
|
|
16
12
|
"module": "fesm2022/signaltree-ng-forms.mjs",
|
|
17
13
|
"typings": "index.d.ts",
|
|
@@ -35,5 +31,8 @@
|
|
|
35
31
|
"types": "./src/rxjs/index.d.ts",
|
|
36
32
|
"default": "./fesm2022/signaltree-ng-forms-src-rxjs.mjs"
|
|
37
33
|
}
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"tslib": "^2.3.0"
|
|
38
37
|
}
|
|
39
38
|
}
|