@hmcts/media-viewer
Version:
208 lines • 27.3 kB
JavaScript
import { v4 as uuid } from 'uuid';
import * as fromAnnotations from '../actions/annotation.actions';
import { StoreUtils } from '../store-utils';
export const initialState = {
annotationSet: {},
annotationEntities: {},
commentEntities: {},
annotationPageEntities: {},
selectedAnnotation: null,
commentSearchQueries: { commentSearch: '' },
commentSummaryFilters: { hasFilter: false, filters: {} },
loading: false,
loaded: false,
};
export function reducer(state = initialState, action) {
switch (action.type) {
case fromAnnotations.LOAD_ANNOTATION_SET: {
const annotationSet = {
...state.annotationSet,
documentId: action.payload
};
return {
...initialState,
annotationSet,
loading: true
};
}
case fromAnnotations.LOAD_ANNOTATION_SET_SUCCESS:
case fromAnnotations.LOAD_ANNOTATION_SET_FAIL: {
const annotationSet = action.payload.status === 200 ? action.payload.body :
{
...state.annotationSet,
annotations: [],
id: uuid()
};
const annotationEntities = StoreUtils.generateAnnotationEntities(annotationSet.annotations);
const annotationPageEntities = StoreUtils.groupByKeyEntities(annotationSet.annotations, 'page');
const commentEntities = StoreUtils.generateCommentsEntities(annotationSet.annotations);
return {
...state,
annotationSet,
annotationEntities,
annotationPageEntities,
commentEntities,
loading: false,
loaded: true
};
}
case fromAnnotations.SAVE_ANNOTATION_SET_SUCCESS: {
const anno = action.payload.annotations;
const annEntities = {
...state.annotationEntities,
...anno
};
const annotArray = Object.keys(annEntities).map(key => annEntities[key]);
const annotationEntities = StoreUtils.generateAnnotationEntities(annotArray);
const annotationPageEntities = StoreUtils.groupByKeyEntities(annotArray, 'page');
const commentEntities = StoreUtils.generateCommentsEntities(annotArray);
const selectedAnnotation = {
...state.selectedAnnotation,
...anno,
editable: false
};
return {
...state,
annotationEntities,
annotationPageEntities,
commentEntities,
selectedAnnotation,
loading: false,
loaded: true
};
}
case fromAnnotations.SAVE_ANNOTATION_SUCCESS: {
const anno = action.payload;
const annEntities = {
...state.annotationEntities,
[anno.id]: anno
};
const annotArray = Object.keys(annEntities).map(key => annEntities[key]);
const annotationEntities = StoreUtils.generateAnnotationEntities(annotArray);
const annotationPageEntities = StoreUtils.groupByKeyEntities(annotArray, 'page');
const commentEntities = StoreUtils.generateCommentsEntities(annotArray);
const selectedAnnotation = {
...state.selectedAnnotation,
annotationId: anno.id,
editable: false
};
return {
...state,
annotationEntities,
annotationPageEntities,
commentEntities,
selectedAnnotation,
loading: false,
loaded: true
};
}
case fromAnnotations.DELETE_ANNOTATION_SUCCESS: {
const id = action.payload;
const page = state.annotationEntities[id].page;
const annotationEntities = {
...state.annotationEntities
};
delete annotationEntities[id];
const pageAnnotationsRemoved = [
...state.annotationPageEntities[page].filter(anno => anno.id !== id)
];
const annotationPageEntities = {
...state.annotationPageEntities,
[page]: pageAnnotationsRemoved
};
const commentEntities = {
...state.commentEntities
};
if (state.commentEntities[id]) {
delete commentEntities[id];
}
return {
...state,
annotationEntities,
annotationPageEntities,
commentEntities
};
}
case fromAnnotations.ADD_OR_EDIT_COMMENT: {
const comment = {
[action.payload.annotationId]: action.payload
};
const comments = {
...state.commentEntities,
...comment
};
return {
...state,
commentEntities: comments
};
}
case fromAnnotations.SELECT_ANNOTATION: {
const payload = action.payload;
const commentEntity = {
...state.commentEntities[payload.annotationId],
editable: payload.editable,
selected: payload.selected
};
const resetCommentEntSelect = StoreUtils.resetCommentEntSelect({ ...state.commentEntities });
const commentEntities = payload.annotationId && state.commentEntities[payload.annotationId] ? {
...resetCommentEntSelect,
[payload.annotationId]: commentEntity
} : { ...resetCommentEntSelect };
return {
...state,
commentEntities,
selectedAnnotation: action.payload
};
}
case fromAnnotations.SEARCH_COMMENT: {
const commentSearchQueries = {
...state.commentSearchQueries,
commentSearch: action.payload
};
const commentEntities = StoreUtils.resetCommentEntSelect({ ...state.commentEntities });
return {
...state,
commentEntities,
commentSearchQueries
};
}
case fromAnnotations.APPLY_COMMENT_SUMMARY_FILTER: {
const payload = action.payload;
const hasTagFilter = () => {
let isFiltered = false;
if (payload.tagFilters) {
Object.keys(payload.tagFilters).map(filter => {
if (payload.tagFilters[filter] && !isFiltered) {
isFiltered = true;
}
});
}
return isFiltered;
};
const hasFilter = (hasTagFilter() || !!payload.dateRangeFrom || !!payload.dateRangeTo);
const commentSummaryFilters = {
hasFilter,
filters: payload
};
return {
...state,
commentSummaryFilters: commentSummaryFilters
};
}
case fromAnnotations.CLEAR_COMMENT_SUMMARY_FILTER: {
return {
...state,
commentSummaryFilters: { ...initialState.commentSummaryFilters }
};
}
}
return state;
}
export const getAnnoSet = (state) => state.annotationSet;
export const getCommentEnts = (state) => state.commentEntities;
export const getAnnoPageEnt = (state) => state.annotationPageEntities;
export const getAnnoEnt = (state) => state.annotationEntities;
export const getSelectedAnno = (state) => state.selectedAnnotation;
export const commentSearchQ = (state) => state.commentSearchQueries;
export const getSummaryFilters = (state) => state.commentSummaryFilters;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbnMucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3N0b3JlL3JlZHVjZXJzL2Fubm90YXRpb25zLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxLQUFLLGVBQWUsTUFBTSwrQkFBK0IsQ0FBQztBQUdqRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFnQjVDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBdUI7SUFDOUMsYUFBYSxFQUFFLEVBQUU7SUFDakIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixlQUFlLEVBQUUsRUFBRTtJQUNuQixzQkFBc0IsRUFBRSxFQUFFO0lBQzFCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsb0JBQW9CLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFO0lBQzNDLHFCQUFxQixFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO0lBQ3hELE9BQU8sRUFBRSxLQUFLO0lBQ2QsTUFBTSxFQUFFLEtBQUs7Q0FDZCxDQUFDO0FBRUYsTUFBTSxVQUFVLE9BQU8sQ0FDckIsS0FBSyxHQUFHLFlBQVksRUFDcEIsTUFBMEM7SUFFMUMsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFcEIsS0FBSyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sYUFBYSxHQUFHO2dCQUNwQixHQUFHLEtBQUssQ0FBQyxhQUFhO2dCQUN0QixVQUFVLEVBQUUsTUFBTSxDQUFDLE9BQU87YUFDM0IsQ0FBQztZQUNGLE9BQU87Z0JBQ0wsR0FBRyxZQUFZO2dCQUNmLGFBQWE7Z0JBQ2IsT0FBTyxFQUFFLElBQUk7YUFD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QUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcbmltcG9ydCAqIGFzIGZyb21Bbm5vdGF0aW9ucyBmcm9tICcuLi9hY3Rpb25zL2Fubm90YXRpb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uIH0gZnJvbSAnLi4vLi4vYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi12aWV3L2Fubm90YXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29tbWVudCB9IGZyb20gJy4uLy4uL2Fubm90YXRpb25zL2NvbW1lbnQtc2V0L2NvbW1lbnQvY29tbWVudC5tb2RlbCc7XG5pbXBvcnQgeyBTdG9yZVV0aWxzIH0gZnJvbSAnLi4vc3RvcmUtdXRpbHMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQW5ub3RhdGlvbiB9IGZyb20gJy4uLy4uL2Fubm90YXRpb25zL21vZGVscy9ldmVudC1zZWxlY3QubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVycyB9IGZyb20gJy4uL21vZGVscy9maWx0ZXJzLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5ub3RhdGlvblNldFN0YXRlIHtcbiAgYW5ub3RhdGlvblNldDogYW55O1xuICBhbm5vdGF0aW9uRW50aXRpZXM6IHsgW2lkOiBzdHJpbmddOiBhbnkgfTtcbiAgYW5ub3RhdGlvblBhZ2VFbnRpdGllczogeyBbaWQ6IHN0cmluZ106IEFubm90YXRpb25bXSB9O1xuICBjb21tZW50RW50aXRpZXM6IHsgW2lkOiBzdHJpbmddOiBDb21tZW50IH07XG4gIHNlbGVjdGVkQW5ub3RhdGlvbjogU2VsZWN0aW9uQW5ub3RhdGlvbjtcbiAgY29tbWVudFNlYXJjaFF1ZXJpZXM6IHsgY29tbWVudFNlYXJjaDogc3RyaW5nIH07XG4gIGNvbW1lbnRTdW1tYXJ5RmlsdGVyczogeyBoYXNGaWx0ZXI6IGJvb2xlYW47IGZpbHRlcnM6IEZpbHRlcnMgfTtcbiAgbG9hZGVkOiBib29sZWFuO1xuICBsb2FkaW5nOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlOiBBbm5vdGF0aW9uU2V0U3RhdGUgPSB7XG4gIGFubm90YXRpb25TZXQ6IHt9LFxuICBhbm5vdGF0aW9uRW50aXRpZXM6IHt9LFxuICBjb21tZW50RW50aXRpZXM6IHt9LFxuICBhbm5vdGF0aW9uUGFnZUVudGl0aWVzOiB7fSxcbiAgc2VsZWN0ZWRBbm5vdGF0aW9uOiBudWxsLFxuICBjb21tZW50U2VhcmNoUXVlcmllczogeyBjb21tZW50U2VhcmNoOiAnJyB9LFxuICBjb21tZW50U3VtbWFyeUZpbHRlcnM6IHsgaGFzRmlsdGVyOiBmYWxzZSwgZmlsdGVyczoge30gfSxcbiAgbG9hZGluZzogZmFsc2UsXG4gIGxvYWRlZDogZmFsc2UsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlcihcbiAgc3RhdGUgPSBpbml0aWFsU3RhdGUsXG4gIGFjdGlvbjogZnJvbUFubm90YXRpb25zLkFubm90YXRpb25zQWN0aW9uc1xuKTogQW5ub3RhdGlvblNldFN0YXRlIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuXG4gICAgY2FzZSBmcm9tQW5ub3RhdGlvbnMuTE9BRF9BTk5PVEFUSU9OX1NFVDoge1xuICAgICAgY29uc3QgYW5ub3RhdGlvblNldCA9IHtcbiAgICAgICAgLi4uc3RhdGUuYW5ub3RhdGlvblNldCxcbiAgICAgICAgZG9jdW1lbnRJZDogYWN0aW9uLnBheWxvYWRcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgICAgIGFubm90YXRpb25TZXQsXG4gICAgICAgIGxvYWRpbmc6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgZnJvbUFubm90YXRpb25zLkxPQURfQU5OT1RBVElPTl9TRVRfU1VDQ0VTUzpcbiAgICBjYXNlIGZyb21Bbm5vdGF0aW9ucy5MT0FEX0FOTk9UQVRJT05fU0VUX0ZBSUw6IHtcbiAgICAgIGNvbnN0IGFubm90YXRpb25TZXQgPSBhY3Rpb24ucGF5bG9hZC5zdGF0dXMgPT09IDIwMCA/IGFjdGlvbi5wYXlsb2FkLmJvZHkgOlxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUuYW5ub3RhdGlvblNldCxcbiAgICAgICAgICBhbm5vdGF0aW9uczogW10sXG4gICAgICAgICAgaWQ6IHV1aWQoKVxuICAgICAgICB9O1xuICAgICAgY29uc3QgYW5ub3RhdGlvbkVudGl0aWVzID0gU3RvcmVVdGlscy5nZW5lcmF0ZUFubm90YXRpb25FbnRpdGllcyhhbm5vdGF0aW9uU2V0LmFubm90YXRpb25zKTtcbiAgICAgIGNvbnN0IGFubm90YXRpb25QYWdlRW50aXRpZXMgPSBTdG9yZVV0aWxzLmdyb3VwQnlLZXlFbnRpdGllcyhhbm5vdGF0aW9uU2V0LmFubm90YXRpb25zLCAncGFnZScpO1xuICAgICAgY29uc3QgY29tbWVudEVudGl0aWVzID0gU3RvcmVVdGlscy5nZW5lcmF0ZUNvbW1lbnRzRW50aXRpZXMoYW5ub3RhdGlvblNldC5hbm5vdGF0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYW5ub3RhdGlvblNldCxcbiAgICAgICAgYW5ub3RhdGlvbkVudGl0aWVzLFxuICAgICAgICBhbm5vdGF0aW9uUGFnZUVudGl0aWVzLFxuICAgICAgICBjb21tZW50RW50aXRpZXMsXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsb2FkZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQW5ub3RhdGlvbnMuU0FWRV9BTk5PVEFUSU9OX1NFVF9TVUNDRVNTOiB7XG4gICAgICBjb25zdCBhbm5vID0gYWN0aW9uLnBheWxvYWQuYW5ub3RhdGlvbnM7XG4gICAgICBjb25zdCBhbm5FbnRpdGllcyA9IHtcbiAgICAgICAgLi4uc3RhdGUuYW5ub3RhdGlvbkVudGl0aWVzLFxuICAgICAgICAuLi5hbm5vXG4gICAgICB9O1xuICAgICAgY29uc3QgYW5ub3RBcnJheSA9IE9iamVjdC5rZXlzKGFubkVudGl0aWVzKS5tYXAoa2V5ID0+IGFubkVudGl0aWVzW2tleV0pO1xuICAgICAgY29uc3QgYW5ub3RhdGlvbkVudGl0aWVzID0gU3RvcmVVdGlscy5nZW5lcmF0ZUFubm90YXRpb25FbnRpdGllcyhhbm5vdEFycmF5KTtcbiAgICAgIGNvbnN0IGFubm90YXRpb25QYWdlRW50aXRpZXMgPSBTdG9yZVV0aWxzLmdyb3VwQnlLZXlFbnRpdGllcyhhbm5vdEFycmF5LCAncGFnZScpO1xuICAgICAgY29uc3QgY29tbWVudEVudGl0aWVzID0gU3RvcmVVdGlscy5nZW5lcmF0ZUNvbW1lbnRzRW50aXRpZXMoYW5ub3RBcnJheSk7XG4gICAgICBjb25zdCBzZWxlY3RlZEFubm90YXRpb24gPSB7XG4gICAgICAgIC4uLnN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbixcbiAgICAgICAgLi4uYW5ubyxcbiAgICAgICAgZWRpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIGFubm90YXRpb25FbnRpdGllcyxcbiAgICAgICAgYW5ub3RhdGlvblBhZ2VFbnRpdGllcyxcbiAgICAgICAgY29tbWVudEVudGl0aWVzLFxuICAgICAgICBzZWxlY3RlZEFubm90YXRpb24sXG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBsb2FkZWQ6IHRydWVcbiAgICAgIH07XG5cbiAgICB9XG5cbiAgICBjYXNlIGZyb21Bbm5vdGF0aW9ucy5TQVZFX0FOTk9UQVRJT05fU1VDQ0VTUzoge1xuICAgICAgY29uc3QgYW5ubyA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgY29uc3QgYW5uRW50aXRpZXMgPSB7XG4gICAgICAgIC4uLnN0YXRlLmFubm90YXRpb25FbnRpdGllcyxcbiAgICAgICAgW2Fubm8uaWRdOiBhbm5vXG4gICAgICB9O1xuICAgICAgY29uc3QgYW5ub3RBcnJheSA9IE9iamVjdC5rZXlzKGFubkVudGl0aWVzKS5tYXAoa2V5ID0+IGFubkVudGl0aWVzW2tleV0pO1xuICAgICAgY29uc3QgYW5ub3RhdGlvbkVudGl0aWVzID0gU3RvcmVVdGlscy5nZW5lcmF0ZUFubm90YXRpb25FbnRpdGllcyhhbm5vdEFycmF5KTtcbiAgICAgIGNvbnN0IGFubm90YXRpb25QYWdlRW50aXRpZXMgPSBTdG9yZVV0aWxzLmdyb3VwQnlLZXlFbnRpdGllcyhhbm5vdEFycmF5LCAncGFnZScpO1xuICAgICAgY29uc3QgY29tbWVudEVudGl0aWVzID0gU3RvcmVVdGlscy5nZW5lcmF0ZUNvbW1lbnRzRW50aXRpZXMoYW5ub3RBcnJheSk7XG4gICAgICBjb25zdCBzZWxlY3RlZEFubm90YXRpb24gPSB7XG4gICAgICAgIC4uLnN0YXRlLnNlbGVjdGVkQW5ub3RhdGlvbixcbiAgICAgICAgYW5ub3RhdGlvbklkOiBhbm5vLmlkLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYW5ub3RhdGlvbkVudGl0aWVzLFxuICAgICAgICBhbm5vdGF0aW9uUGFnZUVudGl0aWVzLFxuICAgICAgICBjb21tZW50RW50aXRpZXMsXG4gICAgICAgIHNlbGVjdGVkQW5ub3RhdGlvbixcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGxvYWRlZDogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIGZyb21Bbm5vdGF0aW9ucy5ERUxFVEVfQU5OT1RBVElPTl9TVUNDRVNTOiB7XG4gICAgICBjb25zdCBpZCA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgY29uc3QgcGFnZSA9IHN0YXRlLmFubm90YXRpb25FbnRpdGllc1tpZF0ucGFnZTtcbiAgICAgIGNvbnN0IGFubm90YXRpb25FbnRpdGllcyA9IHtcbiAgICAgICAgLi4uc3RhdGUuYW5ub3RhdGlvbkVudGl0aWVzXG4gICAgICB9O1xuICAgICAgZGVsZXRlIGFubm90YXRpb25FbnRpdGllc1tpZF07XG4gICAgICBjb25zdCBwYWdlQW5ub3RhdGlvbnNSZW1vdmVkID0gW1xuICAgICAgICAuLi5zdGF0ZS5hbm5vdGF0aW9uUGFnZUVudGl0aWVzW3BhZ2VdLmZpbHRlcihhbm5vID0+IGFubm8uaWQgIT09IGlkKVxuICAgICAgXTtcbiAgICAgIGNvbnN0IGFubm90YXRpb25QYWdlRW50aXRpZXMgPSB7XG4gICAgICAgIC4uLnN0YXRlLmFubm90YXRpb25QYWdlRW50aXRpZXMsXG4gICAgICAgIFtwYWdlXTogcGFnZUFubm90YXRpb25zUmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNvbW1lbnRFbnRpdGllcyA9IHtcbiAgICAgICAgLi4uc3RhdGUuY29tbWVudEVudGl0aWVzXG4gICAgICB9O1xuICAgICAgaWYgKHN0YXRlLmNvbW1lbnRFbnRpdGllc1tpZF0pIHtcbiAgICAgICAgZGVsZXRlIGNvbW1lbnRFbnRpdGllc1tpZF07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYW5ub3RhdGlvbkVudGl0aWVzLFxuICAgICAgICBhbm5vdGF0aW9uUGFnZUVudGl0aWVzLFxuICAgICAgICBjb21tZW50RW50aXRpZXNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY2FzZSBmcm9tQW5ub3RhdGlvbnMuQUREX09SX0VESVRfQ09NTUVOVDoge1xuICAgICAgY29uc3QgY29tbWVudCA9IHtcbiAgICAgICAgW2FjdGlvbi5wYXlsb2FkLmFubm90YXRpb25JZF06IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuICAgICAgY29uc3QgY29tbWVudHMgPSB7XG4gICAgICAgIC4uLnN0YXRlLmNvbW1lbnRFbnRpdGllcyxcbiAgICAgICAgLi4uY29tbWVudFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb21tZW50RW50aXRpZXM6IGNvbW1lbnRzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgZnJvbUFubm90YXRpb25zLlNFTEVDVF9BTk5PVEFUSU9OOiB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBjb25zdCBjb21tZW50RW50aXR5ID0ge1xuICAgICAgICAuLi5zdGF0ZS5jb21tZW50RW50aXRpZXNbcGF5bG9hZC5hbm5vdGF0aW9uSWRdLFxuICAgICAgICBlZGl0YWJsZTogcGF5bG9hZC5lZGl0YWJsZSxcbiAgICAgICAgc2VsZWN0ZWQ6IHBheWxvYWQuc2VsZWN0ZWRcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc2V0Q29tbWVudEVudFNlbGVjdCA9IFN0b3JlVXRpbHMucmVzZXRDb21tZW50RW50U2VsZWN0KHsgLi4uc3RhdGUuY29tbWVudEVudGl0aWVzIH0pO1xuXG4gICAgICBjb25zdCBjb21tZW50RW50aXRpZXMgPSBwYXlsb2FkLmFubm90YXRpb25JZCAmJiBzdGF0ZS5jb21tZW50RW50aXRpZXNbcGF5bG9hZC5hbm5vdGF0aW9uSWRdID8ge1xuICAgICAgICAuLi5yZXNldENvbW1lbnRFbnRTZWxlY3QsXG4gICAgICAgIFtwYXlsb2FkLmFubm90YXRpb25JZF06IGNvbW1lbnRFbnRpdHlcbiAgICAgIH0gOiB7IC4uLnJlc2V0Q29tbWVudEVudFNlbGVjdCB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgY29tbWVudEVudGl0aWVzLFxuICAgICAgICBzZWxlY3RlZEFubm90YXRpb246IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgZnJvbUFubm90YXRpb25zLlNFQVJDSF9DT01NRU5UOiB7XG4gICAgICBjb25zdCBjb21tZW50U2VhcmNoUXVlcmllcyA9IHtcbiAgICAgICAgLi4uc3RhdGUuY29tbWVudFNlYXJjaFF1ZXJpZXMsXG4gICAgICAgIGNvbW1lbnRTZWFyY2g6IGFjdGlvbi5wYXlsb2FkXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb21tZW50RW50aXRpZXMgPSBTdG9yZVV0aWxzLnJlc2V0Q29tbWVudEVudFNlbGVjdCh7IC4uLnN0YXRlLmNvbW1lbnRFbnRpdGllcyB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb21tZW50RW50aXRpZXMsXG4gICAgICAgIGNvbW1lbnRTZWFyY2hRdWVyaWVzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNhc2UgZnJvbUFubm90YXRpb25zLkFQUExZX0NPTU1FTlRfU1VNTUFSWV9GSUxURVI6IHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IGhhc1RhZ0ZpbHRlciA9ICgpID0+IHtcbiAgICAgICAgbGV0IGlzRmlsdGVyZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHBheWxvYWQudGFnRmlsdGVycykge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHBheWxvYWQudGFnRmlsdGVycykubWFwKGZpbHRlciA9PiB7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC50YWdGaWx0ZXJzW2ZpbHRlcl0gJiYgIWlzRmlsdGVyZWQpIHtcbiAgICAgICAgICAgICAgaXNGaWx0ZXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRmlsdGVyZWQ7XG4gICAgICB9O1xuICAgICAgY29uc3QgaGFzRmlsdGVyID0gKGhhc1RhZ0ZpbHRlcigpIHx8ICEhcGF5bG9hZC5kYXRlUmFuZ2VGcm9tIHx8ICEhcGF5bG9hZC5kYXRlUmFuZ2VUbyk7XG4gICAgICBjb25zdCBjb21tZW50U3VtbWFyeUZpbHRlcnMgPSB7XG4gICAgICAgIGhhc0ZpbHRlcixcbiAgICAgICAgZmlsdGVyczogcGF5bG9hZFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb21tZW50U3VtbWFyeUZpbHRlcnM6IGNvbW1lbnRTdW1tYXJ5RmlsdGVyc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjYXNlIGZyb21Bbm5vdGF0aW9ucy5DTEVBUl9DT01NRU5UX1NVTU1BUllfRklMVEVSOiB7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBjb21tZW50U3VtbWFyeUZpbHRlcnM6IHsgLi4uaW5pdGlhbFN0YXRlLmNvbW1lbnRTdW1tYXJ5RmlsdGVycyB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0QW5ub1NldCA9IChzdGF0ZTogQW5ub3RhdGlvblNldFN0YXRlKSA9PiBzdGF0ZS5hbm5vdGF0aW9uU2V0O1xuZXhwb3J0IGNvbnN0IGdldENvbW1lbnRFbnRzID0gKHN0YXRlOiBBbm5vdGF0aW9uU2V0U3RhdGUpID0+IHN0YXRlLmNvbW1lbnRFbnRpdGllcztcbmV4cG9ydCBjb25zdCBnZXRBbm5vUGFnZUVudCA9IChzdGF0ZTogQW5ub3RhdGlvblNldFN0YXRlKSA9PiBzdGF0ZS5hbm5vdGF0aW9uUGFnZUVudGl0aWVzO1xuZXhwb3J0IGNvbnN0IGdldEFubm9FbnQgPSAoc3RhdGU6IEFubm90YXRpb25TZXRTdGF0ZSkgPT4gc3RhdGUuYW5ub3RhdGlvbkVudGl0aWVzO1xuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkQW5ubyA9IChzdGF0ZTogQW5ub3RhdGlvblNldFN0YXRlKSA9PiBzdGF0ZS5zZWxlY3RlZEFubm90YXRpb247XG5leHBvcnQgY29uc3QgY29tbWVudFNlYXJjaFEgPSAoc3RhdGU6IEFubm90YXRpb25TZXRTdGF0ZSkgPT4gc3RhdGUuY29tbWVudFNlYXJjaFF1ZXJpZXM7XG5leHBvcnQgY29uc3QgZ2V0U3VtbWFyeUZpbHRlcnMgPSAoc3RhdGU6IEFubm90YXRpb25TZXRTdGF0ZSkgPT4gc3RhdGUuY29tbWVudFN1bW1hcnlGaWx0ZXJzO1xuIl19