UNPKG

@infordata-web/portal-common-component-lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.14.

74 lines 26.5 kB
import { merge } from 'rxjs'; import { ComponentOutputStatus } from '../normalizzazione/component-output-status'; import { Tuple } from '../models/tuple'; import { map, scan, startWith, delay } from 'rxjs/operators'; // @dynamic export class ComponentReducer { static reducer2(m1, m2, isComplete, startValue) { const cardinality = 2; const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducer3(m1, m2, m3, isComplete, startValue) { const cardinality = 3; const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducer4(m1, m2, m3, m4, isComplete, startValue) { const cardinality = 4; //TODO // m3.subscribe(_ => console.log("m3", _)) const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4)); // merged.subscribe(_ => console.log("merged", _)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducer5(m1, m2, m3, m4, m5, isComplete, startValue) { const cardinality = 5; const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducer6(m1, m2, m3, m4, m5, m6, isComplete, startValue) { const cardinality = 6; const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducer7(m1, m2, m3, m4, m5, m6, m7, isComplete, startValue) { const cardinality = 7; const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6), ComponentReducer.ordinal(m7, 7)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducer8(m1, m2, m3, m4, m5, m6, m7, m8, isComplete, startValue) { const cardinality = 8; const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6), ComponentReducer.ordinal(m7, 7), ComponentReducer.ordinal(m8, 8)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducer9(m1, m2, m3, m4, m5, m6, m7, m8, m9, isComplete, startValue) { const cardinality = 9; const merged = merge(ComponentReducer.ordinal(m1, 1), ComponentReducer.ordinal(m2, 2), ComponentReducer.ordinal(m3, 3), ComponentReducer.ordinal(m4, 4), ComponentReducer.ordinal(m5, 5), ComponentReducer.ordinal(m6, 6), ComponentReducer.ordinal(m7, 7), ComponentReducer.ordinal(m8, 8), ComponentReducer.ordinal(m9, 9)); return ComponentReducer.reducerInternal(merged, startValue, cardinality, isComplete); } static reducerInternal(mergedMutators, startValue, cardinality, isComplete) { const accumulatorAndValidity = Tuple.of([], startValue); // startValue è un valore normalizzato return mergedMutators.pipe( //TODO // tap(_ => console.log("mergedMutators", _)), scan((accumulator, mutator) => { accumulator._2.mapValue(mutator._2.output); accumulator._1[mutator._1] = mutator._2.status; //TODO // console.log("muttator", accumulator._2.mapValue(mutator._2.output)); // console.log("accumulator", accumulator); return accumulator; }, accumulatorAndValidity //valore iniziale ), map((accumulator) => { const validities = accumulator._1; const isValid = isComplete(accumulator._2.output) && validities.reduce((acc, x) => acc && (x == null || x), true); return ComponentOutputStatus.of(isValid, accumulator._2.output); }), delay(0), startWith(startValue)); } static ordinal(mutator, order) { return mutator.pipe(map(x => Tuple.of(order, x))); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXJlZHVjZXIuanMiLCJzb3VyY2VSb290IjoiRDovUHJvZ2V0dGkvREFHL3NvcmdlbnRpL2dpdGxhYi10ZXJuaS9jb21tb24tY29tcG9uZW50LWxpYi9wcm9qZWN0cy9wb3J0YWwtY29tbW9uLWNvbXBvbmVudC1saWIvc3JjLyIsInNvdXJjZXMiOlsibGliL2RlcG9zaXRpL3V0aWxzL2NvbXBvbmVudC1yZWR1Y2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQUVwQixNQUFNLENBQUMsUUFBUSxDQUNwQixFQUF5RCxFQUN6RCxFQUF5RCxFQUN6RCxVQUFpQyxFQUNqQyxVQUFvQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDdEIsTUFBTSxNQUFNLEdBQXlFLEtBQUssQ0FDeEYsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDL0IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDaEMsQ0FBQTtRQUNELE9BQU8sZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUSxDQUNwQixFQUF5RCxFQUN6RCxFQUF5RCxFQUN6RCxFQUF5RCxFQUN6RCxVQUFpQyxFQUNqQyxVQUFvQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxDQUFDLENB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QVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRS9ELE9BQU8scUJBQXFCLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixTQUFTLENBQUMsVUFBVSxDQUFDLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU8sTUFBTSxDQUFDLE9BQU8sQ0FDcEIsT0FBOEQsRUFBRSxLQUFhO1FBRTdFLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FDakIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDN0IsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudE91dHB1dFN0YXR1cyB9IGZyb20gJy4uL25vcm1hbGl6emF6aW9uZS9jb21wb25lbnQtb3V0cHV0LXN0YXR1cyc7XHJcbmltcG9ydCB7IFR1cGxlIH0gZnJvbSAnLi4vbW9kZWxzL3R1cGxlJztcclxuaW1wb3J0IHsgbWFwLCBzY2FuLCBzdGFydFdpdGgsIGRlbGF5LCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50UmVkdWNlciB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVkdWNlcjI8VD4oXHJcbiAgICBtMTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBpc0NvbXBsZXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4pOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSAyO1xyXG4gICAgY29uc3QgbWVyZ2VkOiBPYnNlcnZhYmxlPFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+PiA9IG1lcmdlKFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTEsIDEpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTIsIDIpLFxyXG4gICAgKVxyXG4gICAgcmV0dXJuIENvbXBvbmVudFJlZHVjZXIucmVkdWNlckludGVybmFsKG1lcmdlZCwgc3RhcnRWYWx1ZSwgY2FyZGluYWxpdHksIGlzQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWR1Y2VyMzxUPihcclxuICAgIG0xOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0yOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0zOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIGlzQ29tcGxldGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcclxuICAgIHN0YXJ0VmFsdWU6IENvbXBvbmVudE91dHB1dFN0YXR1czxUPik6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+PiB7XHJcbiAgICBjb25zdCBjYXJkaW5hbGl0eSA9IDM7XHJcbiAgICBjb25zdCBtZXJnZWQ6IE9ic2VydmFibGU8VHVwbGU8bnVtYmVyLCBDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4+ID0gbWVyZ2UoXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMSwgMSksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMiwgMiksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMywgMylcclxuICAgIClcclxuICAgIHJldHVybiBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXJJbnRlcm5hbChtZXJnZWQsIHN0YXJ0VmFsdWUsIGNhcmRpbmFsaXR5LCBpc0NvbXBsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVkdWNlcjQ8VD4oXHJcbiAgICBtMTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNDogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBpc0NvbXBsZXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4pOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSA0O1xyXG4gICAgLy9UT0RPXHJcbiAgICAvLyBtMy5zdWJzY3JpYmUoXyA9PiBjb25zb2xlLmxvZyhcIm0zXCIsIF8pKVxyXG4gICAgY29uc3QgbWVyZ2VkOiBPYnNlcnZhYmxlPFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+PiA9IG1lcmdlKFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTEsIDEpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTIsIDIpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTMsIDMpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTQsIDQpXHJcbiAgICApXHJcbiAgICAvLyBtZXJnZWQuc3Vic2NyaWJlKF8gPT4gY29uc29sZS5sb2coXCJtZXJnZWRcIiwgXykpO1xyXG4gICAgcmV0dXJuIENvbXBvbmVudFJlZHVjZXIucmVkdWNlckludGVybmFsKG1lcmdlZCwgc3RhcnRWYWx1ZSwgY2FyZGluYWxpdHksIGlzQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWR1Y2VyNTxUPihcclxuICAgIG0xOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0yOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0zOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG00OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG01OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIGlzQ29tcGxldGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcclxuICAgIHN0YXJ0VmFsdWU6IENvbXBvbmVudE91dHB1dFN0YXR1czxUPik6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+PiB7XHJcbiAgICBjb25zdCBjYXJkaW5hbGl0eSA9IDU7XHJcbiAgICBjb25zdCBtZXJnZWQ6IE9ic2VydmFibGU8VHVwbGU8bnVtYmVyLCBDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4+ID0gbWVyZ2UoXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMSwgMSksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMiwgMiksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMywgMyksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNCwgNCksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNSwgNSlcclxuICAgIClcclxuICAgIHJldHVybiBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXJJbnRlcm5hbChtZXJnZWQsIHN0YXJ0VmFsdWUsIGNhcmRpbmFsaXR5LCBpc0NvbXBsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVkdWNlcjY8VD4oXHJcbiAgICBtMTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNDogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBpc0NvbXBsZXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4pOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSA2O1xyXG4gICAgY29uc3QgbWVyZ2VkOiBPYnNlcnZhYmxlPFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+PiA9IG1lcmdlKFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTEsIDEpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTIsIDIpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTMsIDMpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTQsIDQpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTUsIDUpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTYsIDYpXHJcbiAgICApXHJcbiAgICByZXR1cm4gQ29tcG9uZW50UmVkdWNlci5yZWR1Y2VySW50ZXJuYWwobWVyZ2VkLCBzdGFydFZhbHVlLCBjYXJkaW5hbGl0eSwgaXNDb21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlZHVjZXI3PFQ+KFxyXG4gICAgbTE6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTI6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTM6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTQ6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTU6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTY6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgbTc6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+LFxyXG4gICAgaXNDb21wbGV0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxyXG4gICAgc3RhcnRWYWx1ZTogQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+KTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4+IHtcclxuICAgIGNvbnN0IGNhcmRpbmFsaXR5ID0gNztcclxuICAgIGNvbnN0IG1lcmdlZDogT2JzZXJ2YWJsZTxUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+Pj4gPSBtZXJnZShcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0xLCAxKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0yLCAyKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG0zLCAzKSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG00LCA0KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG01LCA1KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG02LCA2KSxcclxuICAgICAgQ29tcG9uZW50UmVkdWNlci5vcmRpbmFsKG03LCA3KVxyXG4gICAgKVxyXG4gICAgcmV0dXJuIENvbXBvbmVudFJlZHVjZXIucmVkdWNlckludGVybmFsKG1lcmdlZCwgc3RhcnRWYWx1ZSwgY2FyZGluYWxpdHksIGlzQ29tcGxldGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWR1Y2VyODxUPihcclxuICAgIG0xOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0yOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG0zOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG00OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG01OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG02OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG03OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIG04OiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+PixcclxuICAgIGlzQ29tcGxldGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcclxuICAgIHN0YXJ0VmFsdWU6IENvbXBvbmVudE91dHB1dFN0YXR1czxUPik6IE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+PiB7XHJcbiAgICBjb25zdCBjYXJkaW5hbGl0eSA9IDg7XHJcbiAgICBjb25zdCBtZXJnZWQ6IE9ic2VydmFibGU8VHVwbGU8bnVtYmVyLCBDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4+ID0gbWVyZ2UoXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMSwgMSksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMiwgMiksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtMywgMyksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNCwgNCksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNSwgNSksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNiwgNiksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtNywgNyksXHJcbiAgICAgIENvbXBvbmVudFJlZHVjZXIub3JkaW5hbChtOCwgOClcclxuICAgIClcclxuICAgIHJldHVybiBDb21wb25lbnRSZWR1Y2VyLnJlZHVjZXJJbnRlcm5hbChtZXJnZWQsIHN0YXJ0VmFsdWUsIGNhcmRpbmFsaXR5LCBpc0NvbXBsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVkdWNlcjk8VD4oXHJcbiAgICBtMTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtMzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNDogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtNzogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtODogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBtOTogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sXHJcbiAgICBpc0NvbXBsZXRlOiAodmFsdWU6IFQpID0+IGJvb2xlYW4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4pOiBPYnNlcnZhYmxlPENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4ge1xyXG4gICAgY29uc3QgY2FyZGluYWxpdHkgPSA5O1xyXG4gICAgY29uc3QgbWVyZ2VkOiBPYnNlcnZhYmxlPFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+PiA9IG1lcmdlKFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTEsIDEpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTIsIDIpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTMsIDMpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTQsIDQpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTUsIDUpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTYsIDYpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTcsIDcpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTgsIDgpLFxyXG4gICAgICBDb21wb25lbnRSZWR1Y2VyLm9yZGluYWwobTksIDkpXHJcbiAgICApXHJcbiAgICByZXR1cm4gQ29tcG9uZW50UmVkdWNlci5yZWR1Y2VySW50ZXJuYWwobWVyZ2VkLCBzdGFydFZhbHVlLCBjYXJkaW5hbGl0eSwgaXNDb21wbGV0ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWR1Y2VySW50ZXJuYWw8VD4oXHJcbiAgICBtZXJnZWRNdXRhdG9yczogT2JzZXJ2YWJsZTxUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+Pj4sXHJcbiAgICBzdGFydFZhbHVlOiBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4sXHJcbiAgICBjYXJkaW5hbGl0eTogbnVtYmVyLFxyXG4gICAgaXNDb21wbGV0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuKTpcclxuICAgIE9ic2VydmFibGU8Q29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+PiB7XHJcblxyXG4gICAgY29uc3QgYWNjdW11bGF0b3JBbmRWYWxpZGl0eTogVHVwbGU8QXJyYXk8Ym9vbGVhbj4sIENvbXBvbmVudE91dHB1dFN0YXR1czxUPj4gPVxyXG4gICAgICBUdXBsZS5vZihbXSwgc3RhcnRWYWx1ZSk7IC8vIHN0YXJ0VmFsdWUgw6ggdW4gdmFsb3JlIG5vcm1hbGl6emF0b1xyXG4gICAgcmV0dXJuIG1lcmdlZE11dGF0b3JzLnBpcGUoXHJcbiAgICAgIC8vVE9ET1xyXG4gICAgICAvLyB0YXAoXyA9PiBjb25zb2xlLmxvZyhcIm1lcmdlZE11dGF0b3JzXCIsIF8pKSxcclxuICAgICAgc2NhbigoXHJcbiAgICAgICAgYWNjdW11bGF0b3I6IFR1cGxlPEFycmF5PGJvb2xlYW4+LCBDb21wb25lbnRPdXRwdXRTdGF0dXM8VD4+LFxyXG4gICAgICAgIG11dGF0b3I6IFR1cGxlPG51bWJlciwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPCh2YWx1ZTogVCkgPT4gdm9pZD4+XHJcbiAgICAgICkgPT4ge1xyXG4gICAgICAgIGFjY3VtdWxhdG9yLl8yLm1hcFZhbHVlKG11dGF0b3IuXzIub3V0cHV0KTtcclxuICAgICAgICBhY2N1bXVsYXRvci5fMVttdXRhdG9yLl8xXSA9IG11dGF0b3IuXzIuc3RhdHVzO1xyXG4gICAgICAgIC8vVE9ET1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwibXV0dGF0b3JcIiwgYWNjdW11bGF0b3IuXzIubWFwVmFsdWUobXV0YXRvci5fMi5vdXRwdXQpKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFjY3VtdWxhdG9yXCIsIGFjY3VtdWxhdG9yKTtcclxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XHJcbiAgICAgIH0sXHJcbiAgICAgICAgYWNjdW11bGF0b3JBbmRWYWxpZGl0eSAvL3ZhbG9yZSBpbml6aWFsZVxyXG4gICAgICApLFxyXG4gICAgICBtYXAoKGFjY3VtdWxhdG9yOiBUdXBsZTxBcnJheTxib29sZWFuPiwgQ29tcG9uZW50T3V0cHV0U3RhdHVzPFQ+PikgPT4ge1xyXG5cclxuICAgICAgICBjb25zdCB2YWxpZGl0aWVzOiBBcnJheTxib29sZWFuPiA9IGFjY3VtdWxhdG9yLl8xO1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWQ6IGJvb2xlYW4gPVxyXG4gICAgICAgICAgaXNDb21wbGV0ZShhY2N1bXVsYXRvci5fMi5vdXRwdXQpICYmXHJcbiAgICAgICAgICB2YWxpZGl0aWVzLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgJiYgKHggPT0gbnVsbCB8fCB4KSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBDb21wb25lbnRPdXRwdXRTdGF0dXMub2YoaXNWYWxpZCwgYWNjdW11bGF0b3IuXzIub3V0cHV0KTtcclxuICAgICAgfSksXHJcbiAgICAgIGRlbGF5KDApLFxyXG4gICAgICBzdGFydFdpdGgoc3RhcnRWYWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvcmRpbmFsPFQ+KFxyXG4gICAgbXV0YXRvcjogT2JzZXJ2YWJsZTxDb21wb25lbnRPdXRwdXRTdGF0dXM8KHZhbHVlOiBUKSA9PiB2b2lkPj4sIG9yZGVyOiBudW1iZXIpOlxyXG4gICAgT2JzZXJ2YWJsZTxUdXBsZTxudW1iZXIsIENvbXBvbmVudE91dHB1dFN0YXR1czwodmFsdWU6IFQpID0+IHZvaWQ+Pj4ge1xyXG4gICAgcmV0dXJuIG11dGF0b3IucGlwZShcclxuICAgICAgbWFwKHggPT4gVHVwbGUub2Yob3JkZXIsIHgpKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19