bit-ng-library 18.1.6 → 18.1.7
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 +4 -0
- package/esm2022/lib/sharedlibrary/entities/entity-collection.service.mjs +36 -14
- package/fesm2022/bit-ng-library.mjs +35 -13
- package/fesm2022/bit-ng-library.mjs.map +1 -1
- package/lib/sharedlibrary/entities/entity-collection.service.d.ts +1 -1
- package/lib/sharedlibrary/entities/entity-collection.service.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -26,6 +26,10 @@ To get more help on the Angular CLI use `ng help` or go check out the [Angular C
|
|
|
26
26
|
|
|
27
27
|
## changelog
|
|
28
28
|
|
|
29
|
+
## [18.1.7] - 2025-03-26
|
|
30
|
+
|
|
31
|
+
Se aplica la ordenación a los signals filteredEntities$ y entities$ de los stores cuando el entityMetadata tiene definido un sortComparer
|
|
32
|
+
|
|
29
33
|
## [18.1.6] - 2025-03-12
|
|
30
34
|
|
|
31
35
|
sendNotificationError permite enviar varios errores seguidos con la opción de que se vayan acumulando y mostrarlos en pantalla en el orden que se envían.
|
|
@@ -9,10 +9,9 @@ export class EntityCollectionServiceBase {
|
|
|
9
9
|
constructor(entityName, entityMetadata) {
|
|
10
10
|
/** Internal signal store definition */
|
|
11
11
|
this.EntityStore = signalStore(
|
|
12
|
-
//
|
|
13
|
-
// por ejemplo
|
|
14
|
-
{ providedIn: "root", protectedState: false },
|
|
15
|
-
withState(initialEntityState), withEntities(), withMethods((state) => ({
|
|
12
|
+
// permitimos que desde fuera del store se pueda modificar el estado
|
|
13
|
+
// por ejemplo podemos ejecutar esto: patchState(this.entityStore, setEntities(list));
|
|
14
|
+
{ providedIn: "root", protectedState: false }, withState(initialEntityState), withEntities(), withMethods((state) => ({
|
|
16
15
|
setEntities(entities) {
|
|
17
16
|
patchState(state, setEntities(entities));
|
|
18
17
|
},
|
|
@@ -55,15 +54,26 @@ export class EntityCollectionServiceBase {
|
|
|
55
54
|
})), withComputed((state) => ({
|
|
56
55
|
count: computed(() => state.entities().length),
|
|
57
56
|
filteredEntities: computed(() => {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
57
|
+
let entities = state.entities();
|
|
58
|
+
let entityMetadata = this.entityMetadata[this.entityName];
|
|
59
|
+
if (entityMetadata) {
|
|
60
|
+
console.log("Hay entityMetadata definido para la entidad");
|
|
61
|
+
// si hay filtro proporcionado podremos filtrar las entidades
|
|
62
|
+
let filterFn = entityMetadata.filterFn;
|
|
63
|
+
if (filterFn) {
|
|
64
|
+
console.log("Hay filtro para las entities. Lo aplicamos");
|
|
65
|
+
// invocamos a la función de filtro definida por el usuario
|
|
66
|
+
entities = filterFn(state.entities(), state.pattern()); //state.pattern()
|
|
67
|
+
}
|
|
68
|
+
// si hay comparador proporcionado podremos comparar las entidades
|
|
69
|
+
let sortComparerFn = entityMetadata.sortComparer;
|
|
70
|
+
if (sortComparerFn) {
|
|
71
|
+
console.log("Hay comparador para las entitites. Lo aplicamos");
|
|
72
|
+
// invocamos a la función de comparación definida por el usuario
|
|
73
|
+
entities = entities.sort(sortComparerFn);
|
|
74
|
+
}
|
|
66
75
|
}
|
|
76
|
+
return entities;
|
|
67
77
|
})
|
|
68
78
|
//filter: computed(() => (state.pattern ? JSON.parse(state.pattern()) : undefined))
|
|
69
79
|
})));
|
|
@@ -72,7 +82,19 @@ export class EntityCollectionServiceBase {
|
|
|
72
82
|
/** Signal of count of entities in the cached collection. */
|
|
73
83
|
this.count$ = this.entityStore.count;
|
|
74
84
|
/** Signal of all entities in the cached collection. */
|
|
75
|
-
this.entities$ =
|
|
85
|
+
this.entities$ = computed(() => {
|
|
86
|
+
let entities = this.entityStore.entities();
|
|
87
|
+
let entityMetadata = this.entityMetadata[this.entityName];
|
|
88
|
+
if (entityMetadata)
|
|
89
|
+
console.log("Hay entityMetadata definido para la entidad");
|
|
90
|
+
let sortComparerFn = entityMetadata && entityMetadata.sortComparer;
|
|
91
|
+
if (sortComparerFn) {
|
|
92
|
+
console.log("Hay comparador para las entitites. Lo aplicamos");
|
|
93
|
+
// invocamos a la función de comparación definida por el usuario
|
|
94
|
+
entities = entities.sort(sortComparerFn);
|
|
95
|
+
}
|
|
96
|
+
return entities;
|
|
97
|
+
});
|
|
76
98
|
/** Signal of all ids in the cached collection. */
|
|
77
99
|
this.ids$ = this.entityStore.ids;
|
|
78
100
|
/** Signal of the filter object applied by the entity collection's filter function */
|
|
@@ -433,4 +455,4 @@ export class EntityCollectionServiceBase {
|
|
|
433
455
|
}
|
|
434
456
|
}
|
|
435
457
|
}
|
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNvbGxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JpdC1uZy1saWJyYXJ5L3NyYy9saWIvc2hhcmVkbGlicmFyeS9lbnRpdGllcy9lbnRpdHktY29sbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsWUFBWSxFQUNaLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQThDLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFGLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDckIsTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxPQUFPLDJCQUEyQjtJQWtHdEMsWUFBWSxVQUFrQixFQUFFLGNBQWlDO1FBN0ZqRSx1Q0FBdUM7UUFDL0IsZ0JBQVcsR0FBRyxXQUFXO1FBQy9CLHVFQUF1RTtRQUN2RSx5RkFBeUY7UUFDekYsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRSx1RUFBdUU7UUFDdEgsU0FBUyxDQUFD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LENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUM7WUFDSCxJQUFJLE1BQU0sR0FBRyxNQUFNLGVBQWUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGF0Y2hTdGF0ZSwgc2lnbmFsU3RvcmUsIHdpdGhDb21wdXRlZCwgd2l0aE1ldGhvZHMsIHdpdGhTdGF0ZSB9IGZyb20gXCJAbmdyeC9zaWduYWxzXCI7XG5pbXBvcnQge1xuICBhZGRFbnRpdGllcyxcbiAgYWRkRW50aXR5LFxuICByZW1vdmVBbGxFbnRpdGllcyxcbiAgcmVtb3ZlRW50aXRpZXMsXG4gIHJlbW92ZUVudGl0eSxcbiAgc2V0RW50aXRpZXMsXG4gIHNldEVudGl0eSxcbiAgdXBkYXRlRW50aXR5LFxuICB3aXRoRW50aXRpZXNcbn0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcbmltcG9ydCB7IFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IGVtcHR5RmlsdGVyIH0gZnJvbSBcIi4uLy4uL2Jhc2Uvc2hhcmVkL2Jhc2UuZmlsdGVyXCI7XG5pbXBvcnQgeyBEZWZhdWx0RGF0YVNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvZGVmYXVsdC1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7IEVudGl0eURhdGFTZXJ2aWNlIH0gZnJvbSBcIi4vZW50aXR5LWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHsgRW50aXR5T3AgfSBmcm9tIFwiLi9lbnRpdHktb3BcIjtcbmltcG9ydCB7IEVudGl0eUFjdGlvbiwgQmFzZUVudGl0eSwgQWN0aW9uLCBFbnRpdHlJZCwgaW5pdGlhbEVudGl0eVN0YXRlIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YU1hcCB9IGZyb20gXCIuL2VudGl0eS1tZXRhZGF0YS1tYXBcIjtcbmltcG9ydCB7XG4gIGlzTnVtYmVyLFxuICBpc1N0cmluZyxcbiAgc2V0RXJyb3JVcGRhdGVyLFxuICBzZXRMb2FkZWRVcGRhdGVyLFxuICBzZXRMb2FkaW5nVXBkYXRlcixcbiAgc2V0UGF0dGVyblVwZGF0ZXIsXG4gIHNldFRvdGFsSXRlbXNVcGRhdGVyXG59IGZyb20gXCIuL2Z1bmN0aW9uc1wiO1xuXG5leHBvcnQgY2xhc3MgRW50aXR5Q29sbGVjdGlvblNlcnZpY2VCYXNlPFQgZXh0ZW5kcyBCYXNlRW50aXR5PiB7XG4gIC8qKiBFbnRpdHkgbmFtZSAqL1xuICByZWFkb25seSBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gIC8qKiBFbnRpdHkgbWV0YWRhdGEgKi9cbiAgcmVhZG9ubHkgZW50aXR5TWV0YWRhdGE6IEVudGl0eU1ldGFkYXRhTWFwO1xuICAvKiogSW50ZXJuYWwgc2lnbmFsIHN0b3JlIGRlZmluaXRpb24gKi9cbiAgcHJpdmF0ZSBFbnRpdHlTdG9yZSA9IHNpZ25hbFN0b3JlKFxuICAgIC8vIG5vIHBlcm1pdGltb3MgcXVlIGRlc2RlIGZ1ZXJhIGRlbCBzdG9yZSBzZSBwdWVkYSBtb2RpZmljYXIgZWwgZXN0YWRvXG4gICAgLy8gcG9yIGVqZW1wbG8gbm8gcG9kZW1vcyBlamVjdXRhciBlc3RvOiBwYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldEVudGl0aWVzKGxpc3QpKTtcbiAgICB7IHByb3ZpZGVkSW46IFwicm9vdFwiLCBwcm90ZWN0ZWRTdGF0ZTogZmFsc2UgfSwgLy8gbm8gcGVybWl0aW1vcyBxdWUgZGVzZGUgZnVlcmEgZGVsIHN0b3JlIHNlIHB1ZWRhIG1vZGlmaWNhciBlbCBlc3RhZG9cbiAgICB3aXRoU3RhdGUoaW5pdGlhbEVudGl0eVN0YXRlKSxcbiAgICB3aXRoRW50aXRpZXM8VD4oKSxcbiAgICB3aXRoTWV0aG9kcygoc3RhdGUpID0+ICh7IFxuICAgICAgc2V0RW50aXRpZXMoZW50aXRpZXM6IFRbXSkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCBzZXRFbnRpdGllcyhlbnRpdGllcykpO1xuICAgICAgfSxcbiAgICAgIHNldEVudGl0eShlbnRpdHk6IFQpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgc2V0RW50aXR5KGVudGl0eSkpO1xuICAgICAgfSxcbiAgICAgIGFkZEVudGl0eShlbnRpdHk6IFQpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgYWRkRW50aXR5KGVudGl0eSkpO1xuICAgICAgfSxcbiAgICAgIGFkZEVudGl0aWVzKGVudGl0aWVzOiBUW10pIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgYWRkRW50aXRpZXMoZW50aXRpZXMpKTtcbiAgICAgIH0sXG4gICAgICByZW1vdmVFbnRpdHkoa2V5OiBFbnRpdHlJZCkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCByZW1vdmVFbnRpdHkoa2V5KSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlRW50aXRpZXMoa2V5czogRW50aXR5SWRbXSkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCByZW1vdmVFbnRpdGllcyhrZXlzKSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlQWxsRW50aXRpZXMoKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RhdGUsIHJlbW92ZUFsbEVudGl0aWVzKCkpO1xuICAgICAgfSxcbiAgICAgIHVwZGF0ZUVudGl0eSh1cGRhdGU6IHsgaWQ6IEVudGl0eUlkOyBjaGFuZ2VzOiBQYXJ0aWFsPFQ+IH0pIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgdXBkYXRlRW50aXR5KHVwZGF0ZSkpO1xuICAgICAgfSxcbiAgICAgIHNldExvYWRlZChpc0xvYWRlZDogYm9vbGVhbikge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCBzZXRMb2FkZWRVcGRhdGVyKGlzTG9hZGVkKSk7XG4gICAgICB9LFxuICAgICAgc2V0TG9hZGluZyhpc0xvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgc2V0TG9hZGluZ1VwZGF0ZXIoaXNMb2FkaW5nKSk7XG4gICAgICB9LFxuICAgICAgc2V0RXJyb3IoaXNFcnJvcjogYm9vbGVhbikge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCBzZXRFcnJvclVwZGF0ZXIoaXNFcnJvcikpO1xuICAgICAgfSxcbiAgICAgIHNldFRvdGFsSXRlbXModG90YWxJdGVtczogbnVtYmVyKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RhdGUsIHNldFRvdGFsSXRlbXNVcGRhdGVyKHRvdGFsSXRlbXMpKTtcbiAgICAgIH0sXG4gICAgICBzZXRQYXR0ZXJuKHBhdHRlcm46IHN0cmluZykge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCBzZXRQYXR0ZXJuVXBkYXRlcihwYXR0ZXJuKSk7XG4gICAgICB9ICAgICAgXG4gICAgfSkpLFxuICAgIHdpdGhDb21wdXRlZCgoc3RhdGUpID0+ICh7XG4gICAgICBjb3VudDogY29tcHV0ZWQoKCkgPT4gc3RhdGUuZW50aXRpZXMoKS5sZW5ndGgpLFxuICAgICAgZmlsdGVyZWRFbnRpdGllczogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAvLyBzaSBoYXkgZmlsdHJvIHByb3BvcmNpb25hZG8gcG9kcmVtb3MgZmlsdHJhciBsYXMgZW50aWRhZGVzXG4gICAgICAgIGlmICh0aGlzLmVudGl0eU1ldGFkYXRhW3RoaXMuZW50aXR5TmFtZV0gJiYgdGhpcy5lbnRpdHlNZXRhZGF0YVt0aGlzLmVudGl0eU5hbWVdLmZpbHRlckZuKSB7XG4gICAgICAgICAgLy8gaW52b2NhbW9zIGEgbGEgZnVuY2nDs24gZGUgZmlsdHJvIGRlZmluaWRhIHBvciBlbCB1c3VhcmlvXG4gICAgICAgICAgLy9sZXQgcGF0dGVybiA9IEpTT04uc3RyaW5naWZ5KHN0YXRlLmZpbHRlcigpKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5lbnRpdHlNZXRhZGF0YVt0aGlzLmVudGl0eU5hbWVdLmZpbHRlckZuKHN0YXRlLmVudGl0aWVzKCksIHN0YXRlLnBhdHRlcm4oKSk7IC8vc3RhdGUucGF0dGVybigpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLmVudGl0aWVzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAvL2ZpbHRlcjogY29tcHV0ZWQoKCkgPT4gKHN0YXRlLnBhdHRlcm4gPyBKU09OLnBhcnNlKHN0YXRlLnBhdHRlcm4oKSkgOiB1bmRlZmluZWQpKVxuICAgIH0pKVxuICApO1xuICAvKiogSW50ZXJuYWwgc2lnbmFsIHN0b3JlIG9iamVjdCAqL1xuICBlbnRpdHlTdG9yZSA9IGluamVjdCh0aGlzLkVudGl0eVN0b3JlKTtcbiAgLyoqIFNpZ25hbCBvZiBjb3VudCBvZiBlbnRpdGllcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uICovXG4gIGNvdW50JDogU2lnbmFsPG51bWJlcj4gPSB0aGlzLmVudGl0eVN0b3JlLmNvdW50O1xuICAvKiogU2lnbmFsIG9mIGFsbCBlbnRpdGllcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uICovXG4gIGVudGl0aWVzJDogU2lnbmFsPFRbXT4gPSB0aGlzLmVudGl0eVN0b3JlLmVudGl0aWVzO1xuICAvKiogU2lnbmFsIG9mIGFsbCBpZHMgaW4gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLiAqL1xuICBpZHMkOiBTaWduYWw8RW50aXR5SWRbXT4gPSB0aGlzLmVudGl0eVN0b3JlLmlkcztcbiAgLyoqIFNpZ25hbCBvZiB0aGUgZmlsdGVyIG9iamVjdCBhcHBsaWVkIGJ5IHRoZSBlbnRpdHkgY29sbGVjdGlvbidzIGZpbHRlciBmdW5jdGlvbiAqL1xuICAvL2ZpbHRlciQ6IFNpZ25hbDxhbnk+ID0gdGhpcy5lbnRpdHlTdG9yZS5maWx0ZXI7XG4gIC8qKiBTaWduYWwgb2YgdGhlIGZpbHRlciBwYXR0ZXJuIGFwcGxpZWQgYnkgdGhlIGVudGl0eSBjb2xsZWN0aW9uJ3MgZmlsdGVyIGZ1bmN0aW9uICovXG4gIHBhdHRlcm4kOiBTaWduYWw8c3RyaW5nPiA9IHRoaXMuZW50aXR5U3RvcmUucGF0dGVybjtcbiAgLyoqIFNpZ25hbCBvZiBlbnRpdGllcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24gdGhhdCBwYXNzIHRoZSBmaWx0ZXIgZnVuY3Rpb24gKi9cbiAgZmlsdGVyZWRFbnRpdGllcyQ6IFNpZ25hbDxUW10+ID0gdGhpcy5lbnRpdHlTdG9yZS5maWx0ZXJlZEVudGl0aWVzO1xuICAvKiogU2lnbmFsIG9mIHRoZSBrZXlzIG9mIHRoZSBjYWNoZWQgY29sbGVjdGlvbiwgaW4gdGhlIGNvbGxlY3Rpb24ncyBuYXRpdmUgc29ydCBvcmRlciAqL1xuICBrZXlzJDogU2lnbmFsPEVudGl0eUlkW10+ID0gdGhpcy5lbnRpdHlTdG9yZS5pZHM7XG4gIC8qKiBTaWduYWwgdHJ1ZSB3aGVuIHRoZSBjb2xsZWN0aW9uIGhhcyBiZWVuIGxvYWRlZCAqL1xuICBsb2FkZWQkOiBTaWduYWw8Ym9vbGVhbj4gPSB0aGlzLmVudGl0eVN0b3JlLmxvYWRlZDtcbiAgLyoqIFNpZ25hbCB0cnVlIHdoZW4gYSBtdWx0aS1lbnRpdHkgcXVlcnkgY29tbWFuZCBpcyBpbiBwcm9ncmVzcy4gKi9cbiAgbG9hZGluZyQ6IFNpZ25hbDxib29sZWFuPiA9IHRoaXMuZW50aXR5U3RvcmUubG9hZGluZztcbiAgLyoqIFNpZ25hbCB3aXRoIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjb3VsZCBiZSBjb2xsZWN0ZWQgZnJvbSB0aGUgc2VydmVyICovXG4gIHRvdGFsSXRlbXMkOiBTaWduYWw8bnVtYmVyPiA9IHRoaXMuZW50aXR5U3RvcmUudG90YWxJdGVtcztcbiAgLyoqIFNpZ25hbCB3aXRoIHRoZSBpbmRpY2F0b3Igb2YgYW4gZXJyb3IgKi9cbiAgZXJyb3IkOiBTaWduYWw8Ym9vbGVhbj4gPSB0aGlzLmVudGl0eVN0b3JlLmVycm9yO1xuICAvKiogV2UgaW5qZWN0IHRoZSBFbnRpdHlEYXRhU2VydmljZSBzZXJ2aWNlIHRvIGJlIGFibGUgdG8gb2J0YWluIHRoZSBEYXRhU2VydmljZSBzZXJ2aWNlIHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBzZXJ2ZXIuXG4gICAgICBXZSBrbm93IHdoaWNoIHNlcnZpY2UgdG8gdXNlIHRoYW5rcyB0byB0aGUgbmFtZSBvZiB0aGUgZW50aXR5ICovXG4gIGVudGl0eURhdGFTZXJ2aWNlID0gaW5qZWN0KEVudGl0eURhdGFTZXJ2aWNlKTtcbiAgLyoqIFNlcnZpY2UgZGF0YSBmb3IgdGhpcyBlbnRpdHkgc3RvcmUuIE9idGFpbmVkIGZyb20gdGhlIEVudGl0eURhdGFTZXJ2aWNlLiovXG4gIHNlcnZpY2U6IERlZmF1bHREYXRhU2VydmljZTxUPjtcblxuICBjb25zdHJ1Y3RvcihlbnRpdHlOYW1lOiBzdHJpbmcsIGVudGl0eU1ldGFkYXRhOiBFbnRpdHlNZXRhZGF0YU1hcCkge1xuICAgIC8vfSwgcHJvdGVjdGVkIGVudGl0eVN0b3JlOiBhbnkpIHtcbiAgICB0aGlzLmVudGl0eU5hbWUgPSBlbnRpdHlOYW1lO1xuICAgIHRoaXMuZW50aXR5TWV0YWRhdGEgPSBlbnRpdHlNZXRhZGF0YTtcbiAgICAvLyBvYnRlbmVtb3MgZWwgc2VydmljaW8gcmVnaXN0cmFkbyBjb24gZWwga2V5XG4gICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5lbnRpdHlEYXRhU2VydmljZS5nZXRTZXJ2aWNlKHRoaXMuZW50aXR5TmFtZSk7XG4gICAgaWYgKHRoaXMuc2VydmljZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyBFbnRpdHlDb2xsZWN0aW9uU2VydmljZUJhc2UgZm9yIGVudGl0eSB0eXBlICR7dGhpcy5lbnRpdHlOYW1lfS4gRGlkIHlvdSBmb3JnZXQgdG8gcmVnaXN0ZXIgdGhlIHNlcnZpY2Ugd2l0aCB0aGUgRW50aXR5RGF0YVNlcnZpY2U/YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIHtFbnRpdHlBY3Rpb259IGZvciB0aGlzIGVudGl0eSB0eXBlIGFuZFxuICAgKiBkaXNwYXRjaCBpdCBpbW1lZGlhdGVseSB0byB0aGUgc3RvcmUuXG4gICAqIEBwYXJhbSBvcCB7RW50aXR5T3B9IHRoZSBlbnRpdHkgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSBbZGF0YV0gdGhlIGFjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHRoZSBkaXNwYXRjaGVkIEVudGl0eUFjdGlvblxuICAgKi9cbiAgY3JlYXRlQW5kRGlzcGF0Y2g8UCA9IGFueT4ob3A6IEVudGl0eU9wLCBkYXRhPzogUCk6IEVudGl0eUFjdGlvbjxQPiB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFuIGFjdGlvbiBvZiBhbnkgdHlwZSB0byB0aGUgbmdyeCBzdG9yZS5cbiAgICogQHBhcmFtIGFjdGlvbiB0aGUgQWN0aW9uXG4gICAqIEByZXR1cm5zIHRoZSBkaXNwYXRjaGVkIEFjdGlvblxuICAgKi9cbiAgZGlzcGF0Y2goYWN0aW9uOiBBY3Rpb24pOiBBY3Rpb24ge1xuICAgIHJldHVybjtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHNhdmUgYSBuZXcgZW50aXR5IHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gZW50aXR5IGVudGl0eSB0byBhZGQgd2l0aG91dCBhIGtleS5cbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZW50aXR5XG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgc2F2ZSBvciB0aGUgc2F2ZSBlcnJvci5cbiAgICovXG4gIGFzeW5jIGFkZChlbnRpdHk6IFQpOiBQcm9taXNlPFQ+IHtcbiAgICBpZiAoIWVudGl0eSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuc2VydmljZS5hZGQoZW50aXR5KTtcbiAgICB0aGlzLmFkZE9uZVRvQ2FjaGUocmVjb3JkKTtcbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBkZWxldGUgZW50aXR5IGZyb20gcmVtb3RlIHN0b3JhZ2UgYnkga2V5LlxuICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gZGVsZXRlXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGRlbGV0ZWQgZW50aXR5J3Mga2V5XG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgc2F2ZSBvciB0aGUgc2F2ZSBlcnJvci5cbiAgICovXG4gIGRlbGV0ZShlbnRpdHk6IFQpOiBQcm9taXNlPEVudGl0eUlkPjtcblxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIGRlbGV0ZSBlbnRpdHkgZnJvbSByZW1vdGUgc3RvcmFnZSBieSBrZXkuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHByaW1hcnkga2V5IG9mIHRoZSBlbnRpdHkgdG8gcmVtb3ZlXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGRlbGV0ZWQga2V5XG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgc2F2ZSBvciB0aGUgc2F2ZSBlcnJvci5cbiAgICovXG4gIGRlbGV0ZShrZXk6IEVudGl0eUlkKTogUHJvbWlzZTxFbnRpdHlJZD47XG4gIGFzeW5jIGRlbGV0ZShrZXk6IFQgfCBFbnRpdHlJZCk6IFByb21pc2U8RW50aXR5SWQ+IHtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGxldCBpZDogRW50aXR5SWQ7XG4gICAgaWYgKCFpc051bWJlcihrZXkpICYmICFpc1N0cmluZyhrZXkpKSB7XG4gICAgICBpZCA9IGtleVtcImlkXCJdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZCA9IGtleSBhcyBFbnRpdHlJZDtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmRlbGV0ZShpZCk7XG4gICAgdGhpcy5yZW1vdmVPbmVGcm9tQ2FjaGUoaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHF1ZXJ5IHJlbW90ZSBzdG9yYWdlIGZvciBhbGwgZW50aXRpZXMgYW5kXG4gICAqIG1lcmdlIHRoZSBxdWVyaWVkIGVudGl0aWVzIGludG8gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLlxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBjb2xsZWN0aW9uXG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgcXVlcnkgb3IgdGhlIHF1ZXJ5IGVycm9yLlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxsKCk6IFByb21pc2U8VFtdPiB7XG4gICAgdGhpcy5jaGVja1NlcnZpY2UoKTtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdGhpcy5jYWxsU2VydmljZU9wZXJhdGlvbigoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QWxsKCkpO1xuICAgIGxpc3QgJiYgdGhpcy5lbnRpdHlTdG9yZS5zZXRFbnRpdGllcyhsaXN0KTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldEVudGl0aWVzKGxpc3QpKTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gcXVlcnkgcmVtb3RlIHN0b3JhZ2UgZm9yIHRoZSBlbnRpdHkgd2l0aCB0aGlzIHByaW1hcnkga2V5LlxuICAgKiBJZiB0aGUgc2VydmVyIHJldHVybnMgYW4gZW50aXR5LCBtZXJnZSBpdCBpbnRvIHRoZSBjYWNoZWQgY29sbGVjdGlvbi5cbiAgICogQHBhcmFtIGtleSBUaGUgcHJpbWFyeSBrZXkgb2YgdGhlIGVudGl0eSB0byBnZXQuXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIHF1ZXJpZWQgZW50aXR5IHRoYXQgaXMgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2VzcyBvciB0aGUgcXVlcnkgZXJyb3IuXG4gICAqL1xuICBhc3luYyBnZXRCeUtleShrZXk6IGFueSk6IFByb21pc2U8VD4ge1xuICAgIHRoaXMuY2hlY2tTZXJ2aWNlKCk7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5jYWxsU2VydmljZU9wZXJhdGlvbigoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QnlJZChrZXkpKTtcbiAgICByZWNvcmQgJiYgdGhpcy5lbnRpdHlTdG9yZS5zZXRFbnRpdHkocmVjb3JkKTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldEVudGl0eShyZWNvcmQpKTtcbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gcXVlcnkgcmVtb3RlIHN0b3JhZ2UgZm9yIHRoZSBlbnRpdGllcyB0aGF0IHNhdGlzZnkgYSBxdWVyeSBleHByZXNzZWRcbiAgICogd2l0aCBlaXRoZXIgYSBxdWVyeSBwYXJhbWV0ZXIgbWFwIG9yIGFuIEhUVFAgVVJMIHF1ZXJ5IHN0cmluZyxcbiAgICogYW5kIG1lcmdlIHRoZSByZXN1bHRzIGludG8gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLlxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXMgdGhlIHF1ZXJ5IGluIGEgZm9ybSB1bmRlcnN0b29kIGJ5IHRoZSBzZXJ2ZXJcbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIG1lcmdlIGJlaGF2aW9yXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIHF1ZXJpZWQgZW50aXRpZXNcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBxdWVyeSBvciB0aGUgcXVlcnkgZXJyb3IuXG4gICAqL1xuICBhc3luYyBnZXRXaXRoUXVlcnkocXVlcnlQYXJhbXM6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gICAgdGhpcy5jaGVja1NlcnZpY2UoKTtcbiAgICBsZXQgbGlzdCA9IGF3YWl0IHRoaXMuY2FsbFNlcnZpY2VPcGVyYXRpb24oKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFdpdGhRdWVyeShxdWVyeVBhcmFtcykpO1xuICAgIGxpc3QgJiYgdGhpcy5lbnRpdHlTdG9yZS5zZXRFbnRpdGllcyhsaXN0KTsvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0RW50aXRpZXMobGlzdCkpO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gcXVlcnkgcmVtb3RlIHN0b3JhZ2UgZm9yIGFsbCBlbnRpdGllcyBhbmRcbiAgICogY29tcGxldGVseSByZXBsYWNlIHRoZSBjYWNoZWQgY29sbGVjdGlvbiB3aXRoIHRoZSBxdWVyaWVkIGVudGl0aWVzLlxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBjb2xsZWN0aW9uXG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgcXVlcnkgb3IgdGhlIHF1ZXJ5IGVycm9yLlxuICAgKi9cbiAgYXN5bmMgbG9hZCgpOiBQcm9taXNlPFRbXT4ge1xuICAgIHRoaXMuY2hlY2tTZXJ2aWNlKCk7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMuY2FsbFNlcnZpY2VPcGVyYXRpb24oKCkgPT4gdGhpcy5zZXJ2aWNlLmdldEFsbCgpKTtcbiAgICB0aGlzLmFkZEFsbFRvQ2FjaGUobGlzdCk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBxdWVyeSByZW1vdGUgc3RvcmFnZSBmb3IgdGhlIGVudGl0aWVzIHRoYXQgc2F0aXNmeSBhIHF1ZXJ5IGV4cHJlc3NlZFxuICAgKiB3aXRoIGFuIEhUVFAgVVJMIHF1ZXJ5IHN0cmluZyxcbiAgICogYW5kIGNvbXBsZXRlbHkgcmVwbGFjZSB0aGUgY2FjaGVkIGNvbGxlY3Rpb24gd2l0aCB0aGUgcXVlcmllZCBlbnRpdGllcy5cbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zIHRoZSBxdWVyeSBpbiBhIGZvcm0gdW5kZXJzdG9vZCBieSB0aGUgc2VydmVyXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIHF1ZXJpZWQgZW50aXRpZXNcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBxdWVyeSBvciB0aGUgcXVlcnkgZXJyb3IuXG4gICAqL1xuICBhc3luYyBsb2FkV2l0aFF1ZXJ5KHF1ZXJ5UGFyYW1zOiBzdHJpbmcpOiBQcm9taXNlPFRbXT4ge1xuICAgIHRoaXMuY2hlY2tTZXJ2aWNlKCk7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMuY2FsbFNlcnZpY2VPcGVyYXRpb24oKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFdpdGhRdWVyeShxdWVyeVBhcmFtcykpO1xuICAgIHRoaXMuYWRkQWxsVG9DYWNoZShsaXN0KTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHNhdmUgdGhlIHVwZGF0ZWQgZW50aXR5IChvciBwYXJ0aWFsIGVudGl0eSkgaW4gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIFRoZSB1cGRhdGUgZW50aXR5IG1heSBiZSBwYXJ0aWFsIChidXQgbXVzdCBoYXZlIGl0cyBrZXkpXG4gICAqIGluIHdoaWNoIGNhc2UgaXQgcGF0Y2hlcyB0aGUgZXhpc3RpbmcgZW50aXR5LlxuICAgKiBAcGFyYW0gZW50aXR5IHVwZGF0ZSBlbnRpdHksIHdoaWNoIG1pZ2h0IGJlIGEgcGFydGlhbCBvZiBUIGJ1dCBtdXN0IGF0IGxlYXN0IGhhdmUgaXRzIGtleS5cbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgdXBkYXRlZCBlbnRpdHlcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIG9yIHRoZSBzYXZlIGVycm9yLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlKGVudGl0eTogUGFydGlhbDxUPik6IFByb21pc2U8VD4ge1xuICAgIHRoaXMuY2hlY2tTZXJ2aWNlKCk7XG4gICAgdGhpcy5jaGVja0lkKGVudGl0eSk7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnVwZGF0ZShlbnRpdHlbXCJpZFwiXSwgZW50aXR5KTtcbiAgICB0aGlzLnVwZGF0ZU9uZUluQ2FjaGUocmVjb3JkKTtcbiAgICByZXR1cm4gcmVjb3JkO1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gc2F2ZSBhIG5ldyBvciBleGlzdGluZyBlbnRpdHkgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIENhbGwgb25seSBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHVwc2VydC5cbiAgICogQHBhcmFtIGVudGl0eSBlbnRpdHkgdG8gYWRkIG9yIHVwc2VydC5cbiAgICogSXQgbWF5IG9taXQgaXRzIGtleSBpZiBhbiBhZGQsIGFuZCBpcyBwZXNzaW1pc3RpYywgYW5kIHRoZSBzZXJ2ZXIgY3JlYXRlcyB0aGUga2V5O1xuICAgKiBtdXN0IGhhdmUgYSBrZXkgaWYgb3B0aW1pc3RpYyBzYXZlLlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2Ugc2F2ZSBhbmQgbWVyZ2UgYmVoYXZpb3JcbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZW50aXR5XG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgc2F2ZSBvciB0aGUgc2F2ZSBlcnJvci5cbiAgICovXG4gIGFzeW5jIHVwc2VydChlbnRpdHk6IFQpOiBQcm9taXNlPFQ+IHtcbiAgICB0aGlzLmNoZWNrU2VydmljZSgpO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHRoaXMuc2VydmljZS51cHNlcnQoZW50aXR5KTtcbiAgICAvLyBzZXRFbnRpdHkgY3JlYSBlbCBvYmpldG8gZW4gZWwgc3RvcmUgc2kgbm8gZXhpc3RlIG8gbG8gYWN0dWFsaXphIHNpIGV4aXN0ZVxuICAgIHRoaXMuZW50aXR5U3RvcmUuc2V0RW50aXR5KHJlY29yZCk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRFbnRpdHkocmVjb3JkKSk7ICAgIFxuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cbiAgLyoqKiBDYWNoZS1vbmx5IG9wZXJhdGlvbnMgdGhhdCBkbyBub3QgdXBkYXRlIHJlbW90ZSBzdG9yYWdlICoqKi9cbiAgLyoqXG4gICAqIFJlcGxhY2UgYWxsIGVudGl0aWVzIGluIHRoZSBjYWNoZWQgY29sbGVjdGlvbi5cbiAgICogRG9lcyBub3Qgc2F2ZSB0byByZW1vdGUgc3RvcmFnZS5cbiAgICogQHBhcmFtIGVudGl0aWVzIHRvIGFkZCBkaXJlY3RseSB0byBjYWNoZS5cbiAgICovXG4gIGFkZEFsbFRvQ2FjaGUoZW50aXRpZXM6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuZW50aXR5U3RvcmUuc2V0RW50aXRpZXMoZW50aXRpZXMpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0RW50aXRpZXMoZW50aXRpZXMpKTtcbiAgICAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0QWxsRW50aXRpZXMoZW50aXRpZXMpKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IGVudGl0eSBkaXJlY3RseSB0byB0aGUgY2FjaGUuXG4gICAqIERvZXMgbm90IHNhdmUgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIElnbm9yZWQgaWYgYW4gZW50aXR5IHdpdGggdGhlIHNhbWUgcHJpbWFyeSBrZXkgaXMgYWxyZWFkeSBpbiBjYWNoZS5cbiAgICogQHBhcmFtIGVudGl0eSB0byBhZGQgZGlyZWN0bHkgdG8gY2FjaGUuXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyBzdWNoIGFzIG1lcmdlU3RyYXRlZ3lcbiAgICovXG4gIGFkZE9uZVRvQ2FjaGUoZW50aXR5OiBUKTogdm9pZCB7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5hZGRFbnRpdHkoZW50aXR5KTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIGFkZEVudGl0eShlbnRpdHkpKTtcbiAgfVxuICAvKipcbiAgICogQWRkIG11bHRpcGxlIG5ldyBlbnRpdGllcyBkaXJlY3RseSB0byB0aGUgY2FjaGUuXG4gICAqIERvZXMgbm90IHNhdmUgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIEVudGl0aWVzIHdpdGggcHJpbWFyeSBrZXlzIGFscmVhZHkgaW4gY2FjaGUgYXJlIGlnbm9yZWQuXG4gICAqIEBwYXJhbSBlbnRpdGllcyB0byBhZGQgZGlyZWN0bHkgdG8gY2FjaGUuXG4gICAqL1xuICBhZGRNYW55VG9DYWNoZShlbnRpdGllczogVFtdKTogdm9pZCB7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5hZGRFbnRpdGllcyhlbnRpdGllcyk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBhZGRFbnRpdGllcyhlbnRpdGllcykpO1xuICB9XG4gIC8qKiBDbGVhciB0aGUgY2FjaGVkIGVudGl0eSBjb2xsZWN0aW9uICovXG4gIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5yZW1vdmVBbGxFbnRpdGllcygpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgcmVtb3ZlQWxsRW50aXRpZXMoKSk7XG4gICAgdGhpcy5zZXRUb3RhbEl0ZW1zKDApO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZW50aXR5IGRpcmVjdGx5IGZyb20gdGhlIGNhY2hlLlxuICAgKiBEb2VzIG5vdCBkZWxldGUgdGhhdCBlbnRpdHkgZnJvbSByZW1vdGUgc3RvcmFnZS5cbiAgICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlT25lRnJvbUNhY2hlKGVudGl0eTogVCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZW50aXR5IGRpcmVjdGx5IGZyb20gdGhlIGNhY2hlLlxuICAgKiBEb2VzIG5vdCBkZWxldGUgdGhhdCBlbnRpdHkgZnJvbSByZW1vdGUgc3RvcmFnZS5cbiAgICogQHBhcmFtIGtleSBUaGUgcHJpbWFyeSBrZXkgb2YgdGhlIGVudGl0eSB0byByZW1vdmVcbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHN1Y2ggYXMgbWVyZ2VTdHJhdGVneVxuICAgKi9cbiAgcmVtb3ZlT25lRnJvbUNhY2hlKGtleTogRW50aXR5SWQpO1xuICByZW1vdmVPbmVGcm9tQ2FjaGUoa2V5OiBUIHwgRW50aXR5SWQpIHtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGxldCBpZDogRW50aXR5SWQ7XG4gICAgaWYgKCFpc051bWJlcihrZXkpICYmICFpc1N0cmluZyhrZXkpKSB7XG4gICAgICBpZCA9IGtleVtcImlkXCJdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZCA9IGtleSBhcyBFbnRpdHlJZDtcbiAgICB9XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5yZW1vdmVFbnRpdHkoaWQpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgcmVtb3ZlRW50aXR5KGlkKSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBtdWx0aXBsZSBlbnRpdGllcyBkaXJlY3RseSBmcm9tIHRoZSBjYWNoZS5cbiAgICogRG9lcyBub3QgZGVsZXRlIHRoZXNlIGVudGl0aWVzIGZyb20gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBlbnRpdHkgVGhlIGVudGl0aWVzIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlTWFueUZyb21DYWNoZShlbnRpdGllczogVFtdKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBtdWx0aXBsZSBlbnRpdGllcyBkaXJlY3RseSBmcm9tIHRoZSBjYWNoZS5cbiAgICogRG9lcyBub3QgZGVsZXRlIHRoZXNlIGVudGl0aWVzIGZyb20gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBrZXlzIFRoZSBwcmltYXJ5IGtleXMgb2YgdGhlIGVudGl0aWVzIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICByZW1vdmVNYW55RnJvbUNhY2hlKGtleXM6IEVudGl0eUlkW10pOiB2b2lkO1xuICByZW1vdmVNYW55RnJvbUNhY2hlKGtleXM6IFRbXSB8IEVudGl0eUlkW10pOiB2b2lkIHtcbiAgICBpZiAoIWtleXMpIHJldHVybjtcbiAgICBsZXQgaWRzOiBFbnRpdHlJZFtdID0gW107XG4gICAgbGV0IGtleSA9IGtleXNbMF07XG4gICAgaWYgKCFpc051bWJlcihrZXkpICYmICFpc1N0cmluZyhrZXkpKSB7XG4gICAgICBpZHMgPSAoa2V5cyBhcyBUW10pLm1hcCgoZW50aXR5KSA9PiBlbnRpdHlbXCJpZFwiXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkcyA9IGtleXMgYXMgRW50aXR5SWRbXTtcbiAgICB9XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5yZW1vdmVFbnRpdGllcyhpZHMpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgcmVtb3ZlRW50aXRpZXMoaWRzKSk7XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIGNhY2hlZCBlbnRpdHkgZGlyZWN0bHkuXG4gICAqIERvZXMgbm90IHVwZGF0ZSB0aGF0IGVudGl0eSBpbiByZW1vdGUgc3RvcmFnZS5cbiAgICogSWdub3JlZCBpZiBhbiBlbnRpdHkgd2l0aCBtYXRjaGluZyBwcmltYXJ5IGtleSBpcyBub3QgaW4gY2FjaGUuXG4gICAqIFRoZSB1cGRhdGUgZW50aXR5IG1heSBiZSBwYXJ0aWFsIChidXQgbXVzdCBoYXZlIGl0cyBrZXkpXG4gICAqIGluIHdoaWNoIGNhc2UgaXQgcGF0Y2hlcyB0aGUgZXhpc3RpbmcgZW50aXR5LlxuICAgKiBAcGFyYW0gZW50aXR5IHRvIHVwZGF0ZSBkaXJlY3RseSBpbiBjYWNoZS5cbiAgICovXG4gIHVwZGF0ZU9uZUluQ2FjaGUoZW50aXR5OiBQYXJ0aWFsPFQ+KTogdm9pZCB7XG4gICAgaWYgKGVudGl0eSAmJiBlbnRpdHlbXCJpZFwiXSkge1xuICAgICAgdGhpcy5lbnRpdHlTdG9yZS51cGRhdGVFbnRpdHkoeyBpZDogZW50aXR5W1wiaWRcIl0sIGNoYW5nZXM6IGVudGl0eSB9KTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHVwZGF0ZUVudGl0eSh7IGlkOiBlbnRpdHlbXCJpZFwiXSwgY2hhbmdlczogZW50aXR5IH0pKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZSBtdWx0aXBsZSBjYWNoZWQgZW50aXRpZXMgZGlyZWN0bHkuXG4gICAqIERvZXMgbm90IHVwZGF0ZSB0aGVzZSBlbnRpdGllcyBpbiByZW1vdGUgc3RvcmFnZS5cbiAgICogRW50aXRpZXMgd2hvc2UgcHJpbWFyeSBrZXlzIGFyZSBub3QgaW4gY2FjaGUgYXJlIGlnbm9yZWQuXG4gICAqIFVwZGF0ZSBlbnRpdGllcyBtYXkgYmUgcGFydGlhbCBidXQgbXVzdCBhdCBsZWFzdCBoYXZlIHRoZWlyIGtleXMuXG4gICAqIHN1Y2ggcGFydGlhbCBlbnRpdGllcyBwYXRjaCB0aGVpciBjYWNoZWQgY291bnRlcnBhcnRzLlxuICAgKiBAcGFyYW0gZW50aXRpZXMgdG8gdXBkYXRlIGRpcmVjdGx5IGluIGNhY2hlLlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICB1cGRhdGVNYW55SW5DYWNoZShlbnRpdGllczogUGFydGlhbDxUPltdKTogdm9pZCB7XG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB0aGlzLnVwZGF0ZU9uZUluQ2FjaGUoZW50aXR5KSk7XG4gIH1cbiAgLyoqXG4gICAqIEluc2VydCBvciB1cGRhdGUgYSBjYWNoZWQgZW50aXR5IGRpcmVjdGx5LlxuICAgKiBEb2VzIG5vdCBzYXZlIHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBVcHNlcnQgZW50aXR5IG1pZ2h0IGJlIGEgcGFydGlhbCBvZiBUIGJ1dCBtdXN0IGF0IGxlYXN0IGhhdmUgaXRzIGtleS5cbiAgICogUGFzcyB0aGUgVXBkYXRlPFQ+IHN0cnVjdHVyZSBhcyB0aGUgcGF5bG9hZC5cbiAgICogQHBhcmFtIGVudGl0eSB0byB1cHNlcnQgZGlyZWN0bHkgaW4gY2FjaGUuXG4gICAqL1xuICB1cHNlcnRPbmVJbkNhY2hlKGVudGl0eTogUGFydGlhbDxUPik6IHZvaWQge1xuICAgIGlmICghZW50aXR5KSByZXR1cm47XG4gICAgaWYgKGVudGl0eVtcImlkXCJdKSB7XG4gICAgICB0aGlzLnVwZGF0ZU9uZUluQ2FjaGUoZW50aXR5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGRPbmVUb0NhY2hlKGVudGl0eSBhcyBUKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEluc2VydCBvciB1cGRhdGUgbXVsdGlwbGUgY2FjaGVkIGVudGl0aWVzIGRpcmVjdGx5LlxuICAgKiBEb2VzIG5vdCBzYXZlIHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBVcHNlcnQgZW50aXRpZXMgbWlnaHQgYmUgcGFydGlhbCBidXQgbXVzdCBhdCBsZWFzdCBoYXZlIHRoZWlyIGtleXMuXG4gICAqIFBhc3MgYW4gYXJyYXkgb2YgdGhlIFVwZGF0ZTxUPiBzdHJ1Y3R1cmUgYXMgdGhlIHBheWxvYWQuXG4gICAqIEBwYXJhbSBlbnRpdGllcyB0byB1cHNlcnQgZGlyZWN0bHkgaW4gY2FjaGUuXG4gICAqL1xuICB1cHNlcnRNYW55SW5DYWNoZShlbnRpdGllczogUGFydGlhbDxUPltdKTogdm9pZCB7XG4gICAgaWYgKCFlbnRpdGllcykgcmV0dXJuO1xuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4gdGhpcy51cHNlcnRPbmVJbkNhY2hlKGVudGl0eSkpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHBhdHRlcm4gdGhhdCB0aGUgY29sbGVjdGlvbidzIGZpbHRlciBhcHBsaWVzXG4gICAqIHdoZW4gdXNpbmcgdGhlIGBmaWx0ZXJlZEVudGl0aWVzYCBzZWxlY3Rvci5cbiAgICovXG4gIHNldEZpbHRlcihwYXR0ZXJuOiBhbnkpOiB2b2lkIHtcbiAgICAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0RmlsdGVyVXBkYXRlcihmaWx0ZXIpKTtcbiAgICAvL2xldCBwYXR0ZXJuID0gZmlsdGVyICE9IHVuZGVmaW5lZCA/IEpTT04uc3RyaW5naWZ5KGZpbHRlcikgOiBcIlwiO1xuICAgIHRoaXMuZW50aXR5U3RvcmUuc2V0UGF0dGVybihwYXR0ZXJuKTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldFBhdHRlcm5VcGRhdGVyKHBhdHRlcm4pKTtcbiAgfVxuICBpbml0RmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RmlsdGVyKEpTT04uc3RyaW5naWZ5KGVtcHR5RmlsdGVyKSk7XG4gIH1cbiAgLyoqIFNldCB0aGUgZXJyb3IgaW5kaWNhdG9yICovXG4gIHNldEVycm9yKGVycm9yOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5zZXRFcnJvcihlcnJvcik7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRFcnJvclVwZGF0ZXIoZXJyb3IpKTtcbiAgfVxuICAvKiogU2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gKi9cbiAgc2V0VG90YWxJdGVtcyh0b3RhbEl0ZW1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmVudGl0eVN0b3JlLnNldFRvdGFsSXRlbXModG90YWxJdGVtcyk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRUb3RhbEl0ZW1zVXBkYXRlcih0b3RhbEl0ZW1zKSk7XG4gIH1cbiAgLyoqIFNldCB0aGUgbG9hZGVkIGZsYWcgKi9cbiAgc2V0TG9hZGVkKGlzTG9hZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5zZXRMb2FkZWQoaXNMb2FkZWQpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0TG9hZGVkVXBkYXRlcihpc0xvYWRlZCkpO1xuICB9XG4gIC8qKiBTZXQgdGhlIGxvYWRpbmcgZmxhZyAqL1xuICBzZXRMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZW50aXR5U3RvcmUuc2V0TG9hZGluZyhpc0xvYWRpbmcpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0TG9hZGluZ1VwZGF0ZXIoaXNMb2FkaW5nKSk7XG4gIH1cbiAgLyoqIFNldCB0aGUgbG9hZGVkIGZsYWcgdG8gZmFsc2UsIHRoZSBsb2FkaW5nIGZsYWcgdG8gZmFsc2UgYW5kIHRoZSBlcnJvciBmbGFnIHRvIGZhbHNlICAqL1xuICBpbml0TG9hZCgpIHtcbiAgICB0aGlzLnNldExvYWRlZChmYWxzZSk7XG4gICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB0aGlzLnNldEVycm9yKGZhbHNlKTtcbiAgfVxuICAvKiogU2V0IHRoZSBsb2FkZWQgZmxhZyB0byBmYWxzZSwgdGhlIGxvYWRpbmcgZmxhZyB0byB0cnVlIGFuZCB0aGUgZXJyb3IgZmxhZyB0byBmYWxzZSAqL1xuICBwcml2YXRlIGxvYWRpbmcoKSB7XG4gICAgdGhpcy5zZXRMb2FkZWQoZmFsc2UpO1xuICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLnNldEVycm9yKGZhbHNlKTtcbiAgfVxuICAvKiogU2V0IHRoZSBsb2FkZWQgZmxhZyB0byB0cnVlLCB0aGUgbG9hZGluZyBmbGFnIHRvIGZhbHNlIGFuZCB0aGUgZXJyb3IgZmxhZyB0byBmYWxzZSAqL1xuICBwcml2YXRlIGxvYWRlZCgpIHtcbiAgICB0aGlzLnNldExvYWRlZCh0cnVlKTtcbiAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuICAgIHRoaXMuc2V0RXJyb3IoZmFsc2UpO1xuICB9XG4gIC8qKiBDaGVjayBpZiB0aGUgc2VydmljZSBvYmplY3QgaGFzIGJlZW4gcHJvdmlkZWQuIFRocm93cyBhbiBFcnJvciBvdGhlcndpc2UgKi9cbiAgcHJpdmF0ZSBjaGVja1NlcnZpY2UoKSB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5vIEVudGl0eUNvbGxlY3Rpb25TZXJ2aWNlQmFzZSBmb3IgZW50aXR5IHR5cGUgJHt0aGlzLmVudGl0eU5hbWV9LiBEaWQgeW91IGZvcmdldCB0byByZWdpc3RlciB0aGUgc2VydmljZSB3aXRoIHRoZSBFbnRpdHlEYXRhU2VydmljZT9gXG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvKiogQ2hlY2sgaWYgdGhlIGVudGl0eSBvYmplY3QgaGFzIGFueSBwcm9wZXJ0eSB3aXRoIHRoZSBuYW1lIGlkLiBUaHJvd3MgYW4gRXJyb3Igb3RoZXJ3aXNlICovXG4gIHByaXZhdGUgY2hlY2tJZChlbnRpdHk6IFBhcnRpYWw8VD4pIHtcbiAgICBpZiAoIWVudGl0eVtcImlkXCJdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcHJpbWFyeSBrZXkgJ2lkJyBpbiBlbnRpdHkgdXBkYXRlIGRhdGFgKTtcbiAgICB9XG4gIH1cbiAgLyoqIENhbGwgYSBzZXJ2aWNlIG9wZXJhdGlvbiBhbmQgaGFuZGxlIHRoZSByZXN1bHQgKi9cbiAgcHJpdmF0ZSBhc3luYyBjYWxsU2VydmljZU9wZXJhdGlvbihvcGVyYXRpb25Ub0NhbGwpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMubG9hZGluZygpO1xuICAgIHRyeSB7XG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uVG9DYWxsKCk7XG4gICAgICB0aGlzLmxvYWRlZCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZXRMb2FkZWQoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHRoaXMuc2V0RXJyb3IodHJ1ZSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
458
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNvbGxlY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JpdC1uZy1saWJyYXJ5L3NyYy9saWIvc2hhcmVkbGlicmFyeS9lbnRpdGllcy9lbnRpdHktY29sbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFDTCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsWUFBWSxFQUNaLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBVSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQThDLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFGLE9BQU8sRUFDTCxRQUFRLEVBQ1IsUUFBUSxFQUNSLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDckIsTUFBTSxhQUFhLENBQUM7QUFFckIsTUFBTSxPQUFPLDJCQUEyQjtJQXlIdEMsWUFBWSxVQUFrQixFQUFFLGNBQWlDO1FBcEhqRSx1Q0FBdUM7UUFDL0IsZ0JBQVcsR0FBRyxXQUFXO1FBQy9CLG9FQUFvRTtRQUNwRSxzRkFBc0Y7UUFDdEYsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFDN0MsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQzdCLFlBQVksRUFBSyxFQUNqQixXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEIsV0FBVyxDQUFDLFFBQWE7Z0JBQ3ZCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELFNBQVMsQ0FBQyxNQUFTO2dCQUNqQixVQUFVLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxTQUFTLENBQUMsTUFBUztnQkFDakIsVUFBVSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsV0FBVyxDQUFDLFFBQWE7Z0JBQ3ZCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELFlBQVksQ0FBQyxHQUFhO2dCQUN4QixVQUFVLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxjQUFjLENBQUMsSUFBZ0I7Z0JBQzdCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELGlCQUFpQjtnQkFDZixVQUFVLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsWUFBWSxDQUFDLE1BQTZDO2dCQUN4RCxVQUFVLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUM7WUFDRCxTQUFTLENBQUMsUUFBaUI7Z0JBQ3pCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsVUFBVSxDQUFDLFNBQWtCO2dCQUMzQixVQUFVLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQztZQUNELFFBQVEsQ0FBQyxPQUFnQjtnQkFDdkIsVUFBVSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsYUFBYSxDQUFDLFVBQWtCO2dCQUM5QixVQUFVLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELFVBQVUsQ0FBQyxPQUFlO2dCQUN4QixVQUFVLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztTQUNGLENBQUMsQ0FBQyxFQUNILFlBQVksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QixLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDOUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDOUIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO29CQUMzRCw2REFBNkQ7b0JBQzdELElBQUksUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ3ZDLElBQUksUUFBUSxFQUFFLENBQUM7d0JBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO3dCQUMxRCwyREFBMkQ7d0JBQzNELFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCO29CQUMzRSxDQUFDO29CQUNELGtFQUFrRTtvQkFDbEUsSUFBSSxjQUFjLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztvQkFDakQsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO3dCQUMvRCxnRUFBZ0U7d0JBQ2hFLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUMzQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQyxDQUFDO1lBQ0YsbUZBQW1GO1NBQ3BGLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFDRixtQ0FBbUM7UUFDbkMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLDREQUE0RDtRQUM1RCxXQUFNLEdBQW1CLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ2hELHVEQUF1RDtRQUN2RCxjQUFTLEdBQWdCLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDckMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxRCxJQUFJLGNBQWM7Z0JBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQy9FLElBQUksY0FBYyxHQUFHLGNBQWMsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDO1lBQ25FLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELENBQUMsQ0FBQztnQkFDL0QsZ0VBQWdFO2dCQUNoRSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxrREFBa0Q7UUFDbEQsU0FBSSxHQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUNoRCxxRkFBcUY7UUFDckYsaURBQWlEO1FBQ2pELHNGQUFzRjtRQUN0RixhQUFRLEdBQW1CLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3BELGdGQUFnRjtRQUNoRixzQkFBaUIsR0FBZ0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuRSx5RkFBeUY7UUFDekYsVUFBSyxHQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUNqRCxzREFBc0Q7UUFDdEQsWUFBTyxHQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNuRCxvRUFBb0U7UUFDcEUsYUFBUSxHQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNyRCw4RUFBOEU7UUFDOUUsZ0JBQVcsR0FBbUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDMUQsNENBQTRDO1FBQzVDLFdBQU0sR0FBb0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDakQ7NEVBQ29FO1FBQ3BFLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBSzVDLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDYixrREFBa0QsSUFBSSxDQUFDLFVBQVUsc0VBQXNFLENBQ3hJLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGlCQUFpQixDQUFVLEVBQVksRUFBRSxJQUFRO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsTUFBYztRQUNyQixPQUFPO0lBQ1QsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFTO1FBQ2pCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQWlCRCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQWlCO1FBQzVCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixJQUFJLEVBQVksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixDQUFDO2FBQU0sQ0FBQztZQUNOLEVBQUUsR0FBRyxHQUFlLENBQUM7UUFDdkIsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU07UUFDVixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGtEQUFrRDtRQUM5RixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQVE7UUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEYsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0RBQWtEO1FBQ2hHLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBbUI7UUFDcEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUEsa0RBQWtEO1FBQzdGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0Q7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBbUI7UUFDckMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFrQjtRQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBUztRQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7UUFDMUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUNELGlFQUFpRTtJQUNqRTs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLFFBQWE7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxzREFBc0Q7UUFDOUYseURBQXlEO0lBQzNELENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQUMsTUFBUztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGtEQUFrRDtJQUN4RixDQUFDO0lBQ0Q7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsUUFBYTtRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHNEQUFzRDtJQUNoRyxDQUFDO0lBQ0QseUNBQXlDO0lBQ3pDLFVBQVU7UUFDUixJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxvREFBb0Q7UUFDMUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBY0Qsa0JBQWtCLENBQUMsR0FBaUI7UUFDbEMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksRUFBWSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sRUFBRSxHQUFHLEdBQWUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxpREFBaUQ7SUFDdEYsQ0FBQztJQWNELG1CQUFtQixDQUFDLElBQXNCO1FBQ3hDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLEdBQUcsR0FBZSxFQUFFLENBQUM7UUFDekIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxHQUFHLEdBQUksSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsSUFBa0IsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxvREFBb0Q7SUFDNUYsQ0FBQztJQUNEOzs7Ozs7O09BT0c7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFrQjtRQUNqQyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxvRkFBb0Y7UUFDNUosQ0FBQztJQUNILENBQUM7SUFDRDs7Ozs7Ozs7T0FRRztJQUNILGlCQUFpQixDQUFDLFFBQXNCO1FBQ3RDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRDs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFrQjtRQUNqQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDcEIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQVcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsUUFBc0I7UUFDdEMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsT0FBWTtRQUNwQix5REFBeUQ7UUFDekQsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkRBQTJEO0lBQ25HLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELDhCQUE4QjtJQUM5QixRQUFRLENBQUMsS0FBYztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVEQUF1RDtJQUMzRixDQUFDO0lBQ0Qsc0RBQXNEO0lBQ3RELGFBQWEsQ0FBQyxVQUFrQjtRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGlFQUFpRTtJQUMvRyxDQUFDO0lBQ0QsMEJBQTBCO0lBQzFCLFNBQVMsQ0FBQyxRQUFpQjtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDJEQUEyRDtJQUNuRyxDQUFDO0lBQ0QsMkJBQTJCO0lBQzNCLFVBQVUsQ0FBQyxTQUFrQjtRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDZEQUE2RDtJQUN2RyxDQUFDO0lBQ0QsMkZBQTJGO0lBQzNGLFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QseUZBQXlGO0lBQ2pGLE9BQU87UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QseUZBQXlGO0lBQ2pGLE1BQU07UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBQ0QsK0VBQStFO0lBQ3ZFLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUNiLGtEQUFrRCxJQUFJLENBQUMsVUFBVSxzRUFBc0UsQ0FDeEksQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBQ0QsOEZBQThGO0lBQ3RGLE9BQU8sQ0FBQyxNQUFrQjtRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBQ0QscURBQXFEO0lBQzdDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlO1FBQ2hELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQztZQUNILElBQUksTUFBTSxHQUFHLE1BQU0sZUFBZSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXRjaFN0YXRlLCBzaWduYWxTdG9yZSwgd2l0aENvbXB1dGVkLCB3aXRoTWV0aG9kcywgd2l0aFN0YXRlIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHNcIjtcbmltcG9ydCB7XG4gIGFkZEVudGl0aWVzLFxuICBhZGRFbnRpdHksXG4gIHJlbW92ZUFsbEVudGl0aWVzLFxuICByZW1vdmVFbnRpdGllcyxcbiAgcmVtb3ZlRW50aXR5LFxuICBzZXRFbnRpdGllcyxcbiAgc2V0RW50aXR5LFxuICB1cGRhdGVFbnRpdHksXG4gIHdpdGhFbnRpdGllc1xufSBmcm9tIFwiQG5ncngvc2lnbmFscy9lbnRpdGllc1wiO1xuaW1wb3J0IHsgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgZW1wdHlGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS9zaGFyZWQvYmFzZS5maWx0ZXJcIjtcbmltcG9ydCB7IERlZmF1bHREYXRhU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9kZWZhdWx0LWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHsgRW50aXR5RGF0YVNlcnZpY2UgfSBmcm9tIFwiLi9lbnRpdHktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFbnRpdHlPcCB9IGZyb20gXCIuL2VudGl0eS1vcFwiO1xuaW1wb3J0IHsgRW50aXR5QWN0aW9uLCBCYXNlRW50aXR5LCBBY3Rpb24sIEVudGl0eUlkLCBpbml0aWFsRW50aXR5U3RhdGUgfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhTWFwIH0gZnJvbSBcIi4vZW50aXR5LW1ldGFkYXRhLW1hcFwiO1xuaW1wb3J0IHtcbiAgaXNOdW1iZXIsXG4gIGlzU3RyaW5nLFxuICBzZXRFcnJvclVwZGF0ZXIsXG4gIHNldExvYWRlZFVwZGF0ZXIsXG4gIHNldExvYWRpbmdVcGRhdGVyLFxuICBzZXRQYXR0ZXJuVXBkYXRlcixcbiAgc2V0VG90YWxJdGVtc1VwZGF0ZXJcbn0gZnJvbSBcIi4vZnVuY3Rpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHlDb2xsZWN0aW9uU2VydmljZUJhc2U8VCBleHRlbmRzIEJhc2VFbnRpdHk+IHtcbiAgLyoqIEVudGl0eSBuYW1lICovXG4gIHJlYWRvbmx5IGVudGl0eU5hbWU6IHN0cmluZztcbiAgLyoqIEVudGl0eSBtZXRhZGF0YSAqL1xuICByZWFkb25seSBlbnRpdHlNZXRhZGF0YTogRW50aXR5TWV0YWRhdGFNYXA7XG4gIC8qKiBJbnRlcm5hbCBzaWduYWwgc3RvcmUgZGVmaW5pdGlvbiAqL1xuICBwcml2YXRlIEVudGl0eVN0b3JlID0gc2lnbmFsU3RvcmUoICAgIFxuICAgIC8vIHBlcm1pdGltb3MgcXVlIGRlc2RlIGZ1ZXJhIGRlbCBzdG9yZSBzZSBwdWVkYSBtb2RpZmljYXIgZWwgZXN0YWRvXG4gICAgLy8gcG9yIGVqZW1wbG8gcG9kZW1vcyBlamVjdXRhciBlc3RvOiBwYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldEVudGl0aWVzKGxpc3QpKTtcbiAgICB7IHByb3ZpZGVkSW46IFwicm9vdFwiLCBwcm90ZWN0ZWRTdGF0ZTogZmFsc2UgfSwgXG4gICAgd2l0aFN0YXRlKGluaXRpYWxFbnRpdHlTdGF0ZSksXG4gICAgd2l0aEVudGl0aWVzPFQ+KCksXG4gICAgd2l0aE1ldGhvZHMoKHN0YXRlKSA9PiAoeyBcbiAgICAgIHNldEVudGl0aWVzKGVudGl0aWVzOiBUW10pIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgc2V0RW50aXRpZXMoZW50aXRpZXMpKTtcbiAgICAgIH0sXG4gICAgICBzZXRFbnRpdHkoZW50aXR5OiBUKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RhdGUsIHNldEVudGl0eShlbnRpdHkpKTtcbiAgICAgIH0sXG4gICAgICBhZGRFbnRpdHkoZW50aXR5OiBUKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RhdGUsIGFkZEVudGl0eShlbnRpdHkpKTtcbiAgICAgIH0sXG4gICAgICBhZGRFbnRpdGllcyhlbnRpdGllczogVFtdKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RhdGUsIGFkZEVudGl0aWVzKGVudGl0aWVzKSk7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlRW50aXR5KGtleTogRW50aXR5SWQpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgcmVtb3ZlRW50aXR5KGtleSkpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZUVudGl0aWVzKGtleXM6IEVudGl0eUlkW10pIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgcmVtb3ZlRW50aXRpZXMoa2V5cykpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZUFsbEVudGl0aWVzKCkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCByZW1vdmVBbGxFbnRpdGllcygpKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVFbnRpdHkodXBkYXRlOiB7IGlkOiBFbnRpdHlJZDsgY2hhbmdlczogUGFydGlhbDxUPiB9KSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RhdGUsIHVwZGF0ZUVudGl0eSh1cGRhdGUpKTtcbiAgICAgIH0sXG4gICAgICBzZXRMb2FkZWQoaXNMb2FkZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgc2V0TG9hZGVkVXBkYXRlcihpc0xvYWRlZCkpO1xuICAgICAgfSxcbiAgICAgIHNldExvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RhdGUsIHNldExvYWRpbmdVcGRhdGVyKGlzTG9hZGluZykpO1xuICAgICAgfSxcbiAgICAgIHNldEVycm9yKGlzRXJyb3I6IGJvb2xlYW4pIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgc2V0RXJyb3JVcGRhdGVyKGlzRXJyb3IpKTtcbiAgICAgIH0sXG4gICAgICBzZXRUb3RhbEl0ZW1zKHRvdGFsSXRlbXM6IG51bWJlcikge1xuICAgICAgICBwYXRjaFN0YXRlKHN0YXRlLCBzZXRUb3RhbEl0ZW1zVXBkYXRlcih0b3RhbEl0ZW1zKSk7XG4gICAgICB9LFxuICAgICAgc2V0UGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdGF0ZSwgc2V0UGF0dGVyblVwZGF0ZXIocGF0dGVybikpO1xuICAgICAgfSAgICAgIFxuICAgIH0pKSxcbiAgICB3aXRoQ29tcHV0ZWQoKHN0YXRlKSA9PiAoe1xuICAgICAgY291bnQ6IGNvbXB1dGVkKCgpID0+IHN0YXRlLmVudGl0aWVzKCkubGVuZ3RoKSxcbiAgICAgIGZpbHRlcmVkRW50aXRpZXM6IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgbGV0IGVudGl0aWVzID0gc3RhdGUuZW50aXRpZXMoKTtcbiAgICAgICAgbGV0IGVudGl0eU1ldGFkYXRhID0gdGhpcy5lbnRpdHlNZXRhZGF0YVt0aGlzLmVudGl0eU5hbWVdO1xuICAgICAgICBpZiAoZW50aXR5TWV0YWRhdGEpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkhheSBlbnRpdHlNZXRhZGF0YSBkZWZpbmlkbyBwYXJhIGxhIGVudGlkYWRcIik7XG4gICAgICAgICAgLy8gc2kgaGF5IGZpbHRybyBwcm9wb3JjaW9uYWRvIHBvZHJlbW9zIGZpbHRyYXIgbGFzIGVudGlkYWRlc1xuICAgICAgICAgIGxldCBmaWx0ZXJGbiA9IGVudGl0eU1ldGFkYXRhLmZpbHRlckZuO1xuICAgICAgICAgIGlmIChmaWx0ZXJGbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJIYXkgZmlsdHJvIHBhcmEgbGFzIGVudGl0aWVzLiBMbyBhcGxpY2Ftb3NcIik7XG4gICAgICAgICAgICAvLyBpbnZvY2Ftb3MgYSBsYSBmdW5jacOzbiBkZSBmaWx0cm8gZGVmaW5pZGEgcG9yIGVsIHVzdWFyaW9cbiAgICAgICAgICAgIGVudGl0aWVzID0gZmlsdGVyRm4oc3RhdGUuZW50aXRpZXMoKSwgc3RhdGUucGF0dGVybigpKTsgLy9zdGF0ZS5wYXR0ZXJuKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc2kgaGF5IGNvbXBhcmFkb3IgcHJvcG9yY2lvbmFkbyBwb2RyZW1vcyBjb21wYXJhciBsYXMgZW50aWRhZGVzXG4gICAgICAgICAgbGV0IHNvcnRDb21wYXJlckZuID0gZW50aXR5TWV0YWRhdGEuc29ydENvbXBhcmVyO1xuICAgICAgICAgIGlmIChzb3J0Q29tcGFyZXJGbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJIYXkgY29tcGFyYWRvciBwYXJhIGxhcyBlbnRpdGl0ZXMuIExvIGFwbGljYW1vc1wiKTtcbiAgICAgICAgICAgIC8vIGludm9jYW1vcyBhIGxhIGZ1bmNpw7NuIGRlIGNvbXBhcmFjacOzbiBkZWZpbmlkYSBwb3IgZWwgdXN1YXJpb1xuICAgICAgICAgICAgZW50aXRpZXMgPSBlbnRpdGllcy5zb3J0KHNvcnRDb21wYXJlckZuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudGl0aWVzO1xuICAgICAgfSlcbiAgICAgIC8vZmlsdGVyOiBjb21wdXRlZCgoKSA9PiAoc3RhdGUucGF0dGVybiA/IEpTT04ucGFyc2Uoc3RhdGUucGF0dGVybigpKSA6IHVuZGVmaW5lZCkpXG4gICAgfSkpXG4gICk7XG4gIC8qKiBJbnRlcm5hbCBzaWduYWwgc3RvcmUgb2JqZWN0ICovXG4gIGVudGl0eVN0b3JlID0gaW5qZWN0KHRoaXMuRW50aXR5U3RvcmUpO1xuICAvKiogU2lnbmFsIG9mIGNvdW50IG9mIGVudGl0aWVzIGluIHRoZSBjYWNoZWQgY29sbGVjdGlvbi4gKi9cbiAgY291bnQkOiBTaWduYWw8bnVtYmVyPiA9IHRoaXMuZW50aXR5U3RvcmUuY291bnQ7XG4gIC8qKiBTaWduYWwgb2YgYWxsIGVudGl0aWVzIGluIHRoZSBjYWNoZWQgY29sbGVjdGlvbi4gKi9cbiAgZW50aXRpZXMkOiBTaWduYWw8VFtdPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBsZXQgZW50aXRpZXMgPSB0aGlzLmVudGl0eVN0b3JlLmVudGl0aWVzKCk7XG4gICAgbGV0IGVudGl0eU1ldGFkYXRhID0gdGhpcy5lbnRpdHlNZXRhZGF0YVt0aGlzLmVudGl0eU5hbWVdO1xuICAgIGlmIChlbnRpdHlNZXRhZGF0YSkgY29uc29sZS5sb2coXCJIYXkgZW50aXR5TWV0YWRhdGEgZGVmaW5pZG8gcGFyYSBsYSBlbnRpZGFkXCIpO1xuICAgIGxldCBzb3J0Q29tcGFyZXJGbiA9IGVudGl0eU1ldGFkYXRhICYmIGVudGl0eU1ldGFkYXRhLnNvcnRDb21wYXJlcjtcbiAgICBpZiAoc29ydENvbXBhcmVyRm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiSGF5IGNvbXBhcmFkb3IgcGFyYSBsYXMgZW50aXRpdGVzLiBMbyBhcGxpY2Ftb3NcIik7XG4gICAgICAvLyBpbnZvY2Ftb3MgYSBsYSBmdW5jacOzbiBkZSBjb21wYXJhY2nDs24gZGVmaW5pZGEgcG9yIGVsIHVzdWFyaW9cbiAgICAgIGVudGl0aWVzID0gZW50aXRpZXMuc29ydChzb3J0Q29tcGFyZXJGbik7XG4gICAgfVxuICAgIHJldHVybiBlbnRpdGllcztcbiAgfSk7XG4gIC8qKiBTaWduYWwgb2YgYWxsIGlkcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uICovXG4gIGlkcyQ6IFNpZ25hbDxFbnRpdHlJZFtdPiA9IHRoaXMuZW50aXR5U3RvcmUuaWRzO1xuICAvKiogU2lnbmFsIG9mIHRoZSBmaWx0ZXIgb2JqZWN0IGFwcGxpZWQgYnkgdGhlIGVudGl0eSBjb2xsZWN0aW9uJ3MgZmlsdGVyIGZ1bmN0aW9uICovXG4gIC8vZmlsdGVyJDogU2lnbmFsPGFueT4gPSB0aGlzLmVudGl0eVN0b3JlLmZpbHRlcjtcbiAgLyoqIFNpZ25hbCBvZiB0aGUgZmlsdGVyIHBhdHRlcm4gYXBwbGllZCBieSB0aGUgZW50aXR5IGNvbGxlY3Rpb24ncyBmaWx0ZXIgZnVuY3Rpb24gKi9cbiAgcGF0dGVybiQ6IFNpZ25hbDxzdHJpbmc+ID0gdGhpcy5lbnRpdHlTdG9yZS5wYXR0ZXJuO1xuICAvKiogU2lnbmFsIG9mIGVudGl0aWVzIGluIHRoZSBjYWNoZWQgY29sbGVjdGlvbiB0aGF0IHBhc3MgdGhlIGZpbHRlciBmdW5jdGlvbiAqL1xuICBmaWx0ZXJlZEVudGl0aWVzJDogU2lnbmFsPFRbXT4gPSB0aGlzLmVudGl0eVN0b3JlLmZpbHRlcmVkRW50aXRpZXM7XG4gIC8qKiBTaWduYWwgb2YgdGhlIGtleXMgb2YgdGhlIGNhY2hlZCBjb2xsZWN0aW9uLCBpbiB0aGUgY29sbGVjdGlvbidzIG5hdGl2ZSBzb3J0IG9yZGVyICovXG4gIGtleXMkOiBTaWduYWw8RW50aXR5SWRbXT4gPSB0aGlzLmVudGl0eVN0b3JlLmlkcztcbiAgLyoqIFNpZ25hbCB0cnVlIHdoZW4gdGhlIGNvbGxlY3Rpb24gaGFzIGJlZW4gbG9hZGVkICovXG4gIGxvYWRlZCQ6IFNpZ25hbDxib29sZWFuPiA9IHRoaXMuZW50aXR5U3RvcmUubG9hZGVkO1xuICAvKiogU2lnbmFsIHRydWUgd2hlbiBhIG11bHRpLWVudGl0eSBxdWVyeSBjb21tYW5kIGlzIGluIHByb2dyZXNzLiAqL1xuICBsb2FkaW5nJDogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5lbnRpdHlTdG9yZS5sb2FkaW5nO1xuICAvKiogU2lnbmFsIHdpdGggdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGNvdWxkIGJlIGNvbGxlY3RlZCBmcm9tIHRoZSBzZXJ2ZXIgKi9cbiAgdG90YWxJdGVtcyQ6IFNpZ25hbDxudW1iZXI+ID0gdGhpcy5lbnRpdHlTdG9yZS50b3RhbEl0ZW1zO1xuICAvKiogU2lnbmFsIHdpdGggdGhlIGluZGljYXRvciBvZiBhbiBlcnJvciAqL1xuICBlcnJvciQ6IFNpZ25hbDxib29sZWFuPiA9IHRoaXMuZW50aXR5U3RvcmUuZXJyb3I7XG4gIC8qKiBXZSBpbmplY3QgdGhlIEVudGl0eURhdGFTZXJ2aWNlIHNlcnZpY2UgdG8gYmUgYWJsZSB0byBvYnRhaW4gdGhlIERhdGFTZXJ2aWNlIHNlcnZpY2UgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHNlcnZlci5cbiAgICAgIFdlIGtub3cgd2hpY2ggc2VydmljZSB0byB1c2UgdGhhbmtzIHRvIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkgKi9cbiAgZW50aXR5RGF0YVNlcnZpY2UgPSBpbmplY3QoRW50aXR5RGF0YVNlcnZpY2UpO1xuICAvKiogU2VydmljZSBkYXRhIGZvciB0aGlzIGVudGl0eSBzdG9yZS4gT2J0YWluZWQgZnJvbSB0aGUgRW50aXR5RGF0YVNlcnZpY2UuKi9cbiAgc2VydmljZTogRGVmYXVsdERhdGFTZXJ2aWNlPFQ+O1xuXG4gIGNvbnN0cnVjdG9yKGVudGl0eU5hbWU6IHN0cmluZywgZW50aXR5TWV0YWRhdGE6IEVudGl0eU1ldGFkYXRhTWFwKSB7XG4gICAgLy99LCBwcm90ZWN0ZWQgZW50aXR5U3RvcmU6IGFueSkge1xuICAgIHRoaXMuZW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgdGhpcy5lbnRpdHlNZXRhZGF0YSA9IGVudGl0eU1ldGFkYXRhO1xuICAgIC8vIG9idGVuZW1vcyBlbCBzZXJ2aWNpbyByZWdpc3RyYWRvIGNvbiBlbCBrZXlcbiAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmVudGl0eURhdGFTZXJ2aWNlLmdldFNlcnZpY2UodGhpcy5lbnRpdHlOYW1lKTtcbiAgICBpZiAodGhpcy5zZXJ2aWNlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5vIEVudGl0eUNvbGxlY3Rpb25TZXJ2aWNlQmFzZSBmb3IgZW50aXR5IHR5cGUgJHt0aGlzLmVudGl0eU5hbWV9LiBEaWQgeW91IGZvcmdldCB0byByZWdpc3RlciB0aGUgc2VydmljZSB3aXRoIHRoZSBFbnRpdHlEYXRhU2VydmljZT9gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4ge0VudGl0eUFjdGlvbn0gZm9yIHRoaXMgZW50aXR5IHR5cGUgYW5kXG4gICAqIGRpc3BhdGNoIGl0IGltbWVkaWF0ZWx5IHRvIHRoZSBzdG9yZS5cbiAgICogQHBhcmFtIG9wIHtFbnRpdHlPcH0gdGhlIGVudGl0eSBvcGVyYXRpb25cbiAgICogQHBhcmFtIFtkYXRhXSB0aGUgYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMgdGhlIGRpc3BhdGNoZWQgRW50aXR5QWN0aW9uXG4gICAqL1xuICBjcmVhdGVBbmREaXNwYXRjaDxQID0gYW55PihvcDogRW50aXR5T3AsIGRhdGE/OiBQKTogRW50aXR5QWN0aW9uPFA+IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2ggYW4gYWN0aW9uIG9mIGFueSB0eXBlIHRvIHRoZSBuZ3J4IHN0b3JlLlxuICAgKiBAcGFyYW0gYWN0aW9uIHRoZSBBY3Rpb25cbiAgICogQHJldHVybnMgdGhlIGRpc3BhdGNoZWQgQWN0aW9uXG4gICAqL1xuICBkaXNwYXRjaChhY3Rpb246IEFjdGlvbik6IEFjdGlvbiB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gc2F2ZSBhIG5ldyBlbnRpdHkgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBlbnRpdHkgZW50aXR5IHRvIGFkZCB3aXRob3V0IGEga2V5LlxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBlbnRpdHlcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIG9yIHRoZSBzYXZlIGVycm9yLlxuICAgKi9cbiAgYXN5bmMgYWRkKGVudGl0eTogVCk6IFByb21pc2U8VD4ge1xuICAgIGlmICghZW50aXR5KSByZXR1cm47XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLmFkZChlbnRpdHkpO1xuICAgIHRoaXMuYWRkT25lVG9DYWNoZShyZWNvcmQpO1xuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIGRlbGV0ZSBlbnRpdHkgZnJvbSByZW1vdGUgc3RvcmFnZSBieSBrZXkuXG4gICAqIEBwYXJhbSBlbnRpdHkgVGhlIGVudGl0eSB0byBkZWxldGVcbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZGVsZXRlZCBlbnRpdHkncyBrZXlcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIG9yIHRoZSBzYXZlIGVycm9yLlxuICAgKi9cbiAgZGVsZXRlKGVudGl0eTogVCk6IFByb21pc2U8RW50aXR5SWQ+O1xuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gZGVsZXRlIGVudGl0eSBmcm9tIHJlbW90ZSBzdG9yYWdlIGJ5IGtleS5cbiAgICogQHBhcmFtIGtleSBUaGUgcHJpbWFyeSBrZXkgb2YgdGhlIGVudGl0eSB0byByZW1vdmVcbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgZGVsZXRlZCBrZXlcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIG9yIHRoZSBzYXZlIGVycm9yLlxuICAgKi9cbiAgZGVsZXRlKGtleTogRW50aXR5SWQpOiBQcm9taXNlPEVudGl0eUlkPjtcbiAgYXN5bmMgZGVsZXRlKGtleTogVCB8IEVudGl0eUlkKTogUHJvbWlzZTxFbnRpdHlJZD4ge1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgbGV0IGlkOiBFbnRpdHlJZDtcbiAgICBpZiAoIWlzTnVtYmVyKGtleSkgJiYgIWlzU3RyaW5nKGtleSkpIHtcbiAgICAgIGlkID0ga2V5W1wiaWRcIl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkID0ga2V5IGFzIEVudGl0eUlkO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnNlcnZpY2UuZGVsZXRlKGlkKTtcbiAgICB0aGlzLnJlbW92ZU9uZUZyb21DYWNoZShpZCk7XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gcXVlcnkgcmVtb3RlIHN0b3JhZ2UgZm9yIGFsbCBlbnRpdGllcyBhbmRcbiAgICogbWVyZ2UgdGhlIHF1ZXJpZWQgZW50aXRpZXMgaW50byB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGNvbGxlY3Rpb25cbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBxdWVyeSBvciB0aGUgcXVlcnkgZXJyb3IuXG4gICAqL1xuICBhc3luYyBnZXRBbGwoKTogUHJvbWlzZTxUW10+IHtcbiAgICB0aGlzLmNoZWNrU2VydmljZSgpO1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB0aGlzLmNhbGxTZXJ2aWNlT3BlcmF0aW9uKCgpID0+IHRoaXMuc2VydmljZS5nZXRBbGwoKSk7XG4gICAgbGlzdCAmJiB0aGlzLmVudGl0eVN0b3JlLnNldEVudGl0aWVzKGxpc3QpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0RW50aXRpZXMobGlzdCkpO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBxdWVyeSByZW1vdGUgc3RvcmFnZSBmb3IgdGhlIGVudGl0eSB3aXRoIHRoaXMgcHJpbWFyeSBrZXkuXG4gICAqIElmIHRoZSBzZXJ2ZXIgcmV0dXJucyBhbiBlbnRpdHksIG1lcmdlIGl0IGludG8gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBwcmltYXJ5IGtleSBvZiB0aGUgZW50aXR5IHRvIGdldC5cbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgcXVlcmllZCBlbnRpdHkgdGhhdCBpcyBpbiB0aGUgY29sbGVjdGlvblxuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzIG9yIHRoZSBxdWVyeSBlcnJvci5cbiAgICovXG4gIGFzeW5jIGdldEJ5S2V5KGtleTogYW55KTogUHJvbWlzZTxUPiB7XG4gICAgdGhpcy5jaGVja1NlcnZpY2UoKTtcbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLmNhbGxTZXJ2aWNlT3BlcmF0aW9uKCgpID0+IHRoaXMuc2VydmljZS5nZXRCeUlkKGtleSkpO1xuICAgIHJlY29yZCAmJiB0aGlzLmVudGl0eVN0b3JlLnNldEVudGl0eShyZWNvcmQpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0RW50aXR5KHJlY29yZCkpO1xuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBxdWVyeSByZW1vdGUgc3RvcmFnZSBmb3IgdGhlIGVudGl0aWVzIHRoYXQgc2F0aXNmeSBhIHF1ZXJ5IGV4cHJlc3NlZFxuICAgKiB3aXRoIGVpdGhlciBhIHF1ZXJ5IHBhcmFtZXRlciBtYXAgb3IgYW4gSFRUUCBVUkwgcXVlcnkgc3RyaW5nLFxuICAgKiBhbmQgbWVyZ2UgdGhlIHJlc3VsdHMgaW50byB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtcyB0aGUgcXVlcnkgaW4gYSBmb3JtIHVuZGVyc3Rvb2QgYnkgdGhlIHNlcnZlclxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgbWVyZ2UgYmVoYXZpb3JcbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgcXVlcmllZCBlbnRpdGllc1xuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIHF1ZXJ5IG9yIHRoZSBxdWVyeSBlcnJvci5cbiAgICovXG4gIGFzeW5jIGdldFdpdGhRdWVyeShxdWVyeVBhcmFtczogc3RyaW5nKTogUHJvbWlzZTxUW10+IHtcbiAgICB0aGlzLmNoZWNrU2VydmljZSgpO1xuICAgIGxldCBsaXN0ID0gYXdhaXQgdGhpcy5jYWxsU2VydmljZU9wZXJhdGlvbigoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0V2l0aFF1ZXJ5KHF1ZXJ5UGFyYW1zKSk7XG4gICAgbGlzdCAmJiB0aGlzLmVudGl0eVN0b3JlLnNldEVudGl0aWVzKGxpc3QpOy8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRFbnRpdGllcyhsaXN0KSk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBxdWVyeSByZW1vdGUgc3RvcmFnZSBmb3IgYWxsIGVudGl0aWVzIGFuZFxuICAgKiBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIGNhY2hlZCBjb2xsZWN0aW9uIHdpdGggdGhlIHF1ZXJpZWQgZW50aXRpZXMuXG4gICAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGNvbGxlY3Rpb25cbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBxdWVyeSBvciB0aGUgcXVlcnkgZXJyb3IuXG4gICAqL1xuICBhc3luYyBsb2FkKCk6IFByb21pc2U8VFtdPiB7XG4gICAgdGhpcy5jaGVja1NlcnZpY2UoKTtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdGhpcy5jYWxsU2VydmljZU9wZXJhdGlvbigoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QWxsKCkpO1xuICAgIHRoaXMuYWRkQWxsVG9DYWNoZShsaXN0KTtcbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHF1ZXJ5IHJlbW90ZSBzdG9yYWdlIGZvciB0aGUgZW50aXRpZXMgdGhhdCBzYXRpc2Z5IGEgcXVlcnkgZXhwcmVzc2VkXG4gICAqIHdpdGggYW4gSFRUUCBVUkwgcXVlcnkgc3RyaW5nLFxuICAgKiBhbmQgY29tcGxldGVseSByZXBsYWNlIHRoZSBjYWNoZWQgY29sbGVjdGlvbiB3aXRoIHRoZSBxdWVyaWVkIGVudGl0aWVzLlxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXMgdGhlIHF1ZXJ5IGluIGEgZm9ybSB1bmRlcnN0b29kIGJ5IHRoZSBzZXJ2ZXJcbiAgICogQHJldHVybnMgUHJvbWlzZSBvZiB0aGUgcXVlcmllZCBlbnRpdGllc1xuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIHF1ZXJ5IG9yIHRoZSBxdWVyeSBlcnJvci5cbiAgICovXG4gIGFzeW5jIGxvYWRXaXRoUXVlcnkocXVlcnlQYXJhbXM6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gICAgdGhpcy5jaGVja1NlcnZpY2UoKTtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdGhpcy5jYWxsU2VydmljZU9wZXJhdGlvbigoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0V2l0aFF1ZXJ5KHF1ZXJ5UGFyYW1zKSk7XG4gICAgdGhpcy5hZGRBbGxUb0NhY2hlKGxpc3QpO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gc2F2ZSB0aGUgdXBkYXRlZCBlbnRpdHkgKG9yIHBhcnRpYWwgZW50aXR5KSBpbiByZW1vdGUgc3RvcmFnZS5cbiAgICogVGhlIHVwZGF0ZSBlbnRpdHkgbWF5IGJlIHBhcnRpYWwgKGJ1dCBtdXN0IGhhdmUgaXRzIGtleSlcbiAgICogaW4gd2hpY2ggY2FzZSBpdCBwYXRjaGVzIHRoZSBleGlzdGluZyBlbnRpdHkuXG4gICAqIEBwYXJhbSBlbnRpdHkgdXBkYXRlIGVudGl0eSwgd2hpY2ggbWlnaHQgYmUgYSBwYXJ0aWFsIG9mIFQgYnV0IG11c3QgYXQgbGVhc3QgaGF2ZSBpdHMga2V5LlxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSB1cGRhdGVkIGVudGl0eVxuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIHNhdmUgb3IgdGhlIHNhdmUgZXJyb3IuXG4gICAqL1xuICBhc3luYyB1cGRhdGUoZW50aXR5OiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgdGhpcy5jaGVja1NlcnZpY2UoKTtcbiAgICB0aGlzLmNoZWNrSWQoZW50aXR5KTtcbiAgICBjb25zdCByZWNvcmQgPSBhd2FpdCB0aGlzLnNlcnZpY2UudXBkYXRlKGVudGl0eVtcImlkXCJdLCBlbnRpdHkpO1xuICAgIHRoaXMudXBkYXRlT25lSW5DYWNoZShyZWNvcmQpO1xuICAgIHJldHVybiByZWNvcmQ7XG4gIH1cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBzYXZlIGEgbmV3IG9yIGV4aXN0aW5nIGVudGl0eSB0byByZW1vdGUgc3RvcmFnZS5cbiAgICogQ2FsbCBvbmx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgdXBzZXJ0LlxuICAgKiBAcGFyYW0gZW50aXR5IGVudGl0eSB0byBhZGQgb3IgdXBzZXJ0LlxuICAgKiBJdCBtYXkgb21pdCBpdHMga2V5IGlmIGFuIGFkZCwgYW5kIGlzIHBlc3NpbWlzdGljLCBhbmQgdGhlIHNlcnZlciBjcmVhdGVzIHRoZSBrZXk7XG4gICAqIG11c3QgaGF2ZSBhIGtleSBpZiBvcHRpbWlzdGljIHNhdmUuXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSBzYXZlIGFuZCBtZXJnZSBiZWhhdmlvclxuICAgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBlbnRpdHlcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIG9yIHRoZSBzYXZlIGVycm9yLlxuICAgKi9cbiAgYXN5bmMgdXBzZXJ0KGVudGl0eTogVCk6IFByb21pc2U8VD4ge1xuICAgIHRoaXMuY2hlY2tTZXJ2aWNlKCk7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnVwc2VydChlbnRpdHkpO1xuICAgIC8vIHNldEVudGl0eSBjcmVhIGVsIG9iamV0byBlbiBlbCBzdG9yZSBzaSBubyBleGlzdGUgbyBsbyBhY3R1YWxpemEgc2kgZXhpc3RlXG4gICAgdGhpcy5lbnRpdHlTdG9yZS5zZXRFbnRpdHkocmVjb3JkKTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldEVudGl0eShyZWNvcmQpKTsgICAgXG4gICAgcmV0dXJuIHJlY29yZDtcbiAgfVxuICAvKioqIENhY2hlLW9ubHkgb3BlcmF0aW9ucyB0aGF0IGRvIG5vdCB1cGRhdGUgcmVtb3RlIHN0b3JhZ2UgKioqL1xuICAvKipcbiAgICogUmVwbGFjZSBhbGwgZW50aXRpZXMgaW4gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLlxuICAgKiBEb2VzIG5vdCBzYXZlIHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gZW50aXRpZXMgdG8gYWRkIGRpcmVjdGx5IHRvIGNhY2hlLlxuICAgKi9cbiAgYWRkQWxsVG9DYWNoZShlbnRpdGllczogVFtdKTogdm9pZCB7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5zZXRFbnRpdGllcyhlbnRpdGllcyk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRFbnRpdGllcyhlbnRpdGllcykpO1xuICAgIC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRBbGxFbnRpdGllcyhlbnRpdGllcykpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgZW50aXR5IGRpcmVjdGx5IHRvIHRoZSBjYWNoZS5cbiAgICogRG9lcyBub3Qgc2F2ZSB0byByZW1vdGUgc3RvcmFnZS5cbiAgICogSWdub3JlZCBpZiBhbiBlbnRpdHkgd2l0aCB0aGUgc2FtZSBwcmltYXJ5IGtleSBpcyBhbHJlYWR5IGluIGNhY2hlLlxuICAgKiBAcGFyYW0gZW50aXR5IHRvIGFkZCBkaXJlY3RseSB0byBjYWNoZS5cbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHN1Y2ggYXMgbWVyZ2VTdHJhdGVneVxuICAgKi9cbiAgYWRkT25lVG9DYWNoZShlbnRpdHk6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmVudGl0eVN0b3JlLmFkZEVudGl0eShlbnRpdHkpOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgYWRkRW50aXR5KGVudGl0eSkpO1xuICB9XG4gIC8qKlxuICAgKiBBZGQgbXVsdGlwbGUgbmV3IGVudGl0aWVzIGRpcmVjdGx5IHRvIHRoZSBjYWNoZS5cbiAgICogRG9lcyBub3Qgc2F2ZSB0byByZW1vdGUgc3RvcmFnZS5cbiAgICogRW50aXRpZXMgd2l0aCBwcmltYXJ5IGtleXMgYWxyZWFkeSBpbiBjYWNoZSBhcmUgaWdub3JlZC5cbiAgICogQHBhcmFtIGVudGl0aWVzIHRvIGFkZCBkaXJlY3RseSB0byBjYWNoZS5cbiAgICovXG4gIGFkZE1hbnlUb0NhY2hlKGVudGl0aWVzOiBUW10pOiB2b2lkIHtcbiAgICB0aGlzLmVudGl0eVN0b3JlLmFkZEVudGl0aWVzKGVudGl0aWVzKTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIGFkZEVudGl0aWVzKGVudGl0aWVzKSk7XG4gIH1cbiAgLyoqIENsZWFyIHRoZSBjYWNoZWQgZW50aXR5IGNvbGxlY3Rpb24gKi9cbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVudGl0eVN0b3JlLnJlbW92ZUFsbEVudGl0aWVzKCk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCByZW1vdmVBbGxFbnRpdGllcygpKTtcbiAgICB0aGlzLnNldFRvdGFsSXRlbXMoMCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBlbnRpdHkgZGlyZWN0bHkgZnJvbSB0aGUgY2FjaGUuXG4gICAqIERvZXMgbm90IGRlbGV0ZSB0aGF0IGVudGl0eSBmcm9tIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVPbmVGcm9tQ2FjaGUoZW50aXR5OiBUKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBlbnRpdHkgZGlyZWN0bHkgZnJvbSB0aGUgY2FjaGUuXG4gICAqIERvZXMgbm90IGRlbGV0ZSB0aGF0IGVudGl0eSBmcm9tIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBwcmltYXJ5IGtleSBvZiB0aGUgZW50aXR5IHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICByZW1vdmVPbmVGcm9tQ2FjaGUoa2V5OiBFbnRpdHlJZCk7XG4gIHJlbW92ZU9uZUZyb21DYWNoZShrZXk6IFQgfCBFbnRpdHlJZCkge1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgbGV0IGlkOiBFbnRpdHlJZDtcbiAgICBpZiAoIWlzTnVtYmVyKGtleSkgJiYgIWlzU3RyaW5nKGtleSkpIHtcbiAgICAgIGlkID0ga2V5W1wiaWRcIl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkID0ga2V5IGFzIEVudGl0eUlkO1xuICAgIH1cbiAgICB0aGlzLmVudGl0eVN0b3JlLnJlbW92ZUVudGl0eShpZCk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCByZW1vdmVFbnRpdHkoaWQpKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIG11bHRpcGxlIGVudGl0aWVzIGRpcmVjdGx5IGZyb20gdGhlIGNhY2hlLlxuICAgKiBEb2VzIG5vdCBkZWxldGUgdGhlc2UgZW50aXRpZXMgZnJvbSByZW1vdGUgc3RvcmFnZS5cbiAgICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXRpZXMgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVNYW55RnJvbUNhY2hlKGVudGl0aWVzOiBUW10pOiB2b2lkO1xuICAvKipcbiAgICogUmVtb3ZlIG11bHRpcGxlIGVudGl0aWVzIGRpcmVjdGx5IGZyb20gdGhlIGNhY2hlLlxuICAgKiBEb2VzIG5vdCBkZWxldGUgdGhlc2UgZW50aXRpZXMgZnJvbSByZW1vdGUgc3RvcmFnZS5cbiAgICogQHBhcmFtIGtleXMgVGhlIHByaW1hcnkga2V5cyBvZiB0aGUgZW50aXRpZXMgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyBzdWNoIGFzIG1lcmdlU3RyYXRlZ3lcbiAgICovXG4gIHJlbW92ZU1hbnlGcm9tQ2FjaGUoa2V5czogRW50aXR5SWRbXSk6IHZvaWQ7XG4gIHJlbW92ZU1hbnlGcm9tQ2FjaGUoa2V5czogVFtdIHwgRW50aXR5SWRbXSk6IHZvaWQge1xuICAgIGlmICgha2V5cykgcmV0dXJuO1xuICAgIGxldCBpZHM6IEVudGl0eUlkW10gPSBbXTtcbiAgICBsZXQga2V5ID0ga2V5c1swXTtcbiAgICBpZiAoIWlzTnVtYmVyKGtleSkgJiYgIWlzU3RyaW5nKGtleSkpIHtcbiAgICAgIGlkcyA9IChrZXlzIGFzIFRbXSkubWFwKChlbnRpdHkpID0+IGVudGl0eVtcImlkXCJdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWRzID0ga2V5cyBhcyBFbnRpdHlJZFtdO1xuICAgIH1cbiAgICB0aGlzLmVudGl0eVN0b3JlLnJlbW92ZUVudGl0aWVzKGlkcyk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCByZW1vdmVFbnRpdGllcyhpZHMpKTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlIGEgY2FjaGVkIGVudGl0eSBkaXJlY3RseS5cbiAgICogRG9lcyBub3QgdXBkYXRlIHRoYXQgZW50aXR5IGluIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBJZ25vcmVkIGlmIGFuIGVudGl0eSB3aXRoIG1hdGNoaW5nIHByaW1hcnkga2V5IGlzIG5vdCBpbiBjYWNoZS5cbiAgICogVGhlIHVwZGF0ZSBlbnRpdHkgbWF5IGJlIHBhcnRpYWwgKGJ1dCBtdXN0IGhhdmUgaXRzIGtleSlcbiAgICogaW4gd2hpY2ggY2FzZSBpdCBwYXRjaGVzIHRoZSBleGlzdGluZyBlbnRpdHkuXG4gICAqIEBwYXJhbSBlbnRpdHkgdG8gdXBkYXRlIGRpcmVjdGx5IGluIGNhY2hlLlxuICAgKi9cbiAgdXBkYXRlT25lSW5DYWNoZShlbnRpdHk6IFBhcnRpYWw8VD4pOiB2b2lkIHtcbiAgICBpZiAoZW50aXR5ICYmIGVudGl0eVtcImlkXCJdKSB7XG4gICAgICB0aGlzLmVudGl0eVN0b3JlLnVwZGF0ZUVudGl0eSh7IGlkOiBlbnRpdHlbXCJpZFwiXSwgY2hhbmdlczogZW50aXR5IH0pOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgdXBkYXRlRW50aXR5KHsgaWQ6IGVudGl0eVtcImlkXCJdLCBjaGFuZ2VzOiBlbnRpdHkgfSkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXBkYXRlIG11bHRpcGxlIGNhY2hlZCBlbnRpdGllcyBkaXJlY3RseS5cbiAgICogRG9lcyBub3QgdXBkYXRlIHRoZXNlIGVudGl0aWVzIGluIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBFbnRpdGllcyB3aG9zZSBwcmltYXJ5IGtleXMgYXJlIG5vdCBpbiBjYWNoZSBhcmUgaWdub3JlZC5cbiAgICogVXBkYXRlIGVudGl0aWVzIG1heSBiZSBwYXJ0aWFsIGJ1dCBtdXN0IGF0IGxlYXN0IGhhdmUgdGhlaXIga2V5cy5cbiAgICogc3VjaCBwYXJ0aWFsIGVudGl0aWVzIHBhdGNoIHRoZWlyIGNhY2hlZCBjb3VudGVycGFydHMuXG4gICAqIEBwYXJhbSBlbnRpdGllcyB0byB1cGRhdGUgZGlyZWN0bHkgaW4gY2FjaGUuXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyBzdWNoIGFzIG1lcmdlU3RyYXRlZ3lcbiAgICovXG4gIHVwZGF0ZU1hbnlJbkNhY2hlKGVudGl0aWVzOiBQYXJ0aWFsPFQ+W10pOiB2b2lkIHtcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHRoaXMudXBkYXRlT25lSW5DYWNoZShlbnRpdHkpKTtcbiAgfVxuICAvKipcbiAgICogSW5zZXJ0IG9yIHVwZGF0ZSBhIGNhY2hlZCBlbnRpdHkgZGlyZWN0bHkuXG4gICAqIERvZXMgbm90IHNhdmUgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIFVwc2VydCBlbnRpdHkgbWlnaHQgYmUgYSBwYXJ0aWFsIG9mIFQgYnV0IG11c3QgYXQgbGVhc3QgaGF2ZSBpdHMga2V5LlxuICAgKiBQYXNzIHRoZSBVcGRhdGU8VD4gc3RydWN0dXJlIGFzIHRoZSBwYXlsb2FkLlxuICAgKiBAcGFyYW0gZW50aXR5IHRvIHVwc2VydCBkaXJlY3RseSBpbiBjYWNoZS5cbiAgICovXG4gIHVwc2VydE9uZUluQ2FjaGUoZW50aXR5OiBQYXJ0aWFsPFQ+KTogdm9pZCB7XG4gICAgaWYgKCFlbnRpdHkpIHJldHVybjtcbiAgICBpZiAoZW50aXR5W1wiaWRcIl0pIHtcbiAgICAgIHRoaXMudXBkYXRlT25lSW5DYWNoZShlbnRpdHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZE9uZVRvQ2FjaGUoZW50aXR5IGFzIFQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSW5zZXJ0IG9yIHVwZGF0ZSBtdWx0aXBsZSBjYWNoZWQgZW50aXRpZXMgZGlyZWN0bHkuXG4gICAqIERvZXMgbm90IHNhdmUgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIFVwc2VydCBlbnRpdGllcyBtaWdodCBiZSBwYXJ0aWFsIGJ1dCBtdXN0IGF0IGxlYXN0IGhhdmUgdGhlaXIga2V5cy5cbiAgICogUGFzcyBhbiBhcnJheSBvZiB0aGUgVXBkYXRlPFQ+IHN0cnVjdHVyZSBhcyB0aGUgcGF5bG9hZC5cbiAgICogQHBhcmFtIGVudGl0aWVzIHRvIHVwc2VydCBkaXJlY3RseSBpbiBjYWNoZS5cbiAgICovXG4gIHVwc2VydE1hbnlJbkNhY2hlKGVudGl0aWVzOiBQYXJ0aWFsPFQ+W10pOiB2b2lkIHtcbiAgICBpZiAoIWVudGl0aWVzKSByZXR1cm47XG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB0aGlzLnVwc2VydE9uZUluQ2FjaGUoZW50aXR5KSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgcGF0dGVybiB0aGF0IHRoZSBjb2xsZWN0aW9uJ3MgZmlsdGVyIGFwcGxpZXNcbiAgICogd2hlbiB1c2luZyB0aGUgYGZpbHRlcmVkRW50aXRpZXNgIHNlbGVjdG9yLlxuICAgKi9cbiAgc2V0RmlsdGVyKHBhdHRlcm46IGFueSk6IHZvaWQge1xuICAgIC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRGaWx0ZXJVcGRhdGVyKGZpbHRlcikpO1xuICAgIC8vbGV0IHBhdHRlcm4gPSBmaWx0ZXIgIT0gdW5kZWZpbmVkID8gSlNPTi5zdHJpbmdpZnkoZmlsdGVyKSA6IFwiXCI7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5zZXRQYXR0ZXJuKHBhdHRlcm4pOyAvL3BhdGNoU3RhdGUodGhpcy5lbnRpdHlTdG9yZSwgc2V0UGF0dGVyblVwZGF0ZXIocGF0dGVybikpO1xuICB9XG4gIGluaXRGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRGaWx0ZXIoSlNPTi5zdHJpbmdpZnkoZW1wdHlGaWx0ZXIpKTtcbiAgfVxuICAvKiogU2V0IHRoZSBlcnJvciBpbmRpY2F0b3IgKi9cbiAgc2V0RXJyb3IoZXJyb3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVudGl0eVN0b3JlLnNldEVycm9yKGVycm9yKTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldEVycm9yVXBkYXRlcihlcnJvcikpO1xuICB9XG4gIC8qKiBTZXQgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiAqL1xuICBzZXRUb3RhbEl0ZW1zKHRvdGFsSXRlbXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZW50aXR5U3RvcmUuc2V0VG90YWxJdGVtcyh0b3RhbEl0ZW1zKTsgLy9wYXRjaFN0YXRlKHRoaXMuZW50aXR5U3RvcmUsIHNldFRvdGFsSXRlbXNVcGRhdGVyKHRvdGFsSXRlbXMpKTtcbiAgfVxuICAvKiogU2V0IHRoZSBsb2FkZWQgZmxhZyAqL1xuICBzZXRMb2FkZWQoaXNMb2FkZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVudGl0eVN0b3JlLnNldExvYWRlZChpc0xvYWRlZCk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRMb2FkZWRVcGRhdGVyKGlzTG9hZGVkKSk7XG4gIH1cbiAgLyoqIFNldCB0aGUgbG9hZGluZyBmbGFnICovXG4gIHNldExvYWRpbmcoaXNMb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5lbnRpdHlTdG9yZS5zZXRMb2FkaW5nKGlzTG9hZGluZyk7IC8vcGF0Y2hTdGF0ZSh0aGlzLmVudGl0eVN0b3JlLCBzZXRMb2FkaW5nVXBkYXRlcihpc0xvYWRpbmcpKTtcbiAgfVxuICAvKiogU2V0IHRoZSBsb2FkZWQgZmxhZyB0byBmYWxzZSwgdGhlIGxvYWRpbmcgZmxhZyB0byBmYWxzZSBhbmQgdGhlIGVycm9yIGZsYWcgdG8gZmFsc2UgICovXG4gIGluaXRMb2FkKCkge1xuICAgIHRoaXMuc2V0TG9hZGVkKGZhbHNlKTtcbiAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuICAgIHRoaXMuc2V0RXJyb3IoZmFsc2UpO1xuICB9XG4gIC8qKiBTZXQgdGhlIGxvYWRlZCBmbGFnIHRvIGZhbHNlLCB0aGUgbG9hZGluZyBmbGFnIHRvIHRydWUgYW5kIHRoZSBlcnJvciBmbGFnIHRvIGZhbHNlICovXG4gIHByaXZhdGUgbG9hZGluZygpIHtcbiAgICB0aGlzLnNldExvYWRlZChmYWxzZSk7XG4gICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuc2V0RXJyb3IoZmFsc2UpO1xuICB9XG4gIC8qKiBTZXQgdGhlIGxvYWRlZCBmbGFnIHRvIHRydWUsIHRoZSBsb2FkaW5nIGZsYWcgdG8gZmFsc2UgYW5kIHRoZSBlcnJvciBmbGFnIHRvIGZhbHNlICovXG4gIHByaXZhdGUgbG9hZGVkKCkge1xuICAgIHRoaXMuc2V0TG9hZGVkKHRydWUpO1xuICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgdGhpcy5zZXRFcnJvcihmYWxzZSk7XG4gIH1cbiAgLyoqIENoZWNrIGlmIHRoZSBzZXJ2aWNlIG9iamVjdCBoYXMgYmVlbiBwcm92aWRlZC4gVGhyb3dzIGFuIEVycm9yIG90aGVyd2lzZSAqL1xuICBwcml2YXRlIGNoZWNrU2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTm8gRW50aXR5Q29sbGVjdGlvblNlcnZpY2VCYXNlIGZvciBlbnRpdHkgdHlwZSAke3RoaXMuZW50aXR5TmFtZX0uIERpZCB5b3UgZm9yZ2V0IHRvIHJlZ2lzdGVyIHRoZSBzZXJ2aWNlIHdpdGggdGhlIEVudGl0eURhdGFTZXJ2aWNlP2BcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8qKiBDaGVjayBpZiB0aGUgZW50aXR5IG9iamVjdCBoYXMgYW55IHByb3BlcnR5IHdpdGggdGhlIG5hbWUgaWQuIFRocm93cyBhbiBFcnJvciBvdGhlcndpc2UgKi9cbiAgcHJpdmF0ZSBjaGVja0lkKGVudGl0eTogUGFydGlhbDxUPikge1xuICAgIGlmICghZW50aXR5W1wiaWRcIl0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBwcmltYXJ5IGtleSAnaWQnIGluIGVudGl0eSB1cGRhdGUgZGF0YWApO1xuICAgIH1cbiAgfVxuICAvKiogQ2FsbCBhIHNlcnZpY2Ugb3BlcmF0aW9uIGFuZCBoYW5kbGUgdGhlIHJlc3VsdCAqL1xuICBwcml2YXRlIGFzeW5jIGNhbGxTZXJ2aWNlT3BlcmF0aW9uKG9wZXJhdGlvblRvQ2FsbCk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5sb2FkaW5nKCk7XG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBvcGVyYXRpb25Ub0NhbGwoKTtcbiAgICAgIHRoaXMubG9hZGVkKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNldExvYWRlZChmYWxzZSk7XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgdGhpcy5zZXRFcnJvcih0cnVlKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -6085,10 +6085,9 @@ class EntityCollectionServiceBase {
|
|
|
6085
6085
|
constructor(entityName, entityMetadata) {
|
|
6086
6086
|
/** Internal signal store definition */
|
|
6087
6087
|
this.EntityStore = signalStore(
|
|
6088
|
-
//
|
|
6089
|
-
// por ejemplo
|
|
6090
|
-
{ providedIn: "root", protectedState: false },
|
|
6091
|
-
withState(initialEntityState), withEntities(), withMethods((state) => ({
|
|
6088
|
+
// permitimos que desde fuera del store se pueda modificar el estado
|
|
6089
|
+
// por ejemplo podemos ejecutar esto: patchState(this.entityStore, setEntities(list));
|
|
6090
|
+
{ providedIn: "root", protectedState: false }, withState(initialEntityState), withEntities(), withMethods((state) => ({
|
|
6092
6091
|
setEntities(entities) {
|
|
6093
6092
|
patchState(state, setEntities(entities));
|
|
6094
6093
|
},
|
|
@@ -6131,15 +6130,26 @@ class EntityCollectionServiceBase {
|
|
|
6131
6130
|
})), withComputed((state) => ({
|
|
6132
6131
|
count: computed(() => state.entities().length),
|
|
6133
6132
|
filteredEntities: computed(() => {
|
|
6134
|
-
|
|
6135
|
-
|
|
6136
|
-
|
|
6137
|
-
|
|
6138
|
-
|
|
6139
|
-
|
|
6140
|
-
|
|
6141
|
-
|
|
6133
|
+
let entities = state.entities();
|
|
6134
|
+
let entityMetadata = this.entityMetadata[this.entityName];
|
|
6135
|
+
if (entityMetadata) {
|
|
6136
|
+
console.log("Hay entityMetadata definido para la entidad");
|
|
6137
|
+
// si hay filtro proporcionado podremos filtrar las entidades
|
|
6138
|
+
let filterFn = entityMetadata.filterFn;
|
|
6139
|
+
if (filterFn) {
|
|
6140
|
+
console.log("Hay filtro para las entities. Lo aplicamos");
|
|
6141
|
+
// invocamos a la función de filtro definida por el usuario
|
|
6142
|
+
entities = filterFn(state.entities(), state.pattern()); //state.pattern()
|
|
6143
|
+
}
|
|
6144
|
+
// si hay comparador proporcionado podremos comparar las entidades
|
|
6145
|
+
let sortComparerFn = entityMetadata.sortComparer;
|
|
6146
|
+
if (sortComparerFn) {
|
|
6147
|
+
console.log("Hay comparador para las entitites. Lo aplicamos");
|
|
6148
|
+
// invocamos a la función de comparación definida por el usuario
|
|
6149
|
+
entities = entities.sort(sortComparerFn);
|
|
6150
|
+
}
|
|
6142
6151
|
}
|
|
6152
|
+
return entities;
|
|
6143
6153
|
})
|
|
6144
6154
|
//filter: computed(() => (state.pattern ? JSON.parse(state.pattern()) : undefined))
|
|
6145
6155
|
})));
|
|
@@ -6148,7 +6158,19 @@ class EntityCollectionServiceBase {
|
|
|
6148
6158
|
/** Signal of count of entities in the cached collection. */
|
|
6149
6159
|
this.count$ = this.entityStore.count;
|
|
6150
6160
|
/** Signal of all entities in the cached collection. */
|
|
6151
|
-
this.entities$ =
|
|
6161
|
+
this.entities$ = computed(() => {
|
|
6162
|
+
let entities = this.entityStore.entities();
|
|
6163
|
+
let entityMetadata = this.entityMetadata[this.entityName];
|
|
6164
|
+
if (entityMetadata)
|
|
6165
|
+
console.log("Hay entityMetadata definido para la entidad");
|
|
6166
|
+
let sortComparerFn = entityMetadata && entityMetadata.sortComparer;
|
|
6167
|
+
if (sortComparerFn) {
|
|
6168
|
+
console.log("Hay comparador para las entitites. Lo aplicamos");
|
|
6169
|
+
// invocamos a la función de comparación definida por el usuario
|
|
6170
|
+
entities = entities.sort(sortComparerFn);
|
|
6171
|
+
}
|
|
6172
|
+
return entities;
|
|
6173
|
+
});
|
|
6152
6174
|
/** Signal of all ids in the cached collection. */
|
|
6153
6175
|
this.ids$ = this.entityStore.ids;
|
|
6154
6176
|
/** Signal of the filter object applied by the entity collection's filter function */
|