Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000161
T

383 lines
36 KiB
Plaintext

import { useMutation } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
import { useStateSerialization } from "/_nuxt/lib/viewer/composables/serialization.ts";
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
import { useActiveUser, useGlobalToast } from "/_nuxt/composables/globals.ts";
import { convertThrowIntoFetchResult, getFirstGqlErrorMessage, ToastNotificationType } from "/_nuxt/utils/globals.ts";
const createSavedViewMutation = graphql(`
mutation CreateSavedView($input: CreateSavedViewInput!) {
projectMutations {
savedViewMutations {
createView(input: $input) {
id
resourceIds
groupId
...ViewerSavedViewsPanelView_SavedView
group {
id
...ViewerSavedViewsPanelViewsGroup_SavedViewGroup
}
}
}
}
}
`);
export const useCollectNewSavedViewViewerData = () => {
const {
projectId,
viewer: { instance: viewerInstance },
resources: {
response: { concreteResourceIdString }
}
} = useInjectedViewerState();
const { serialize } = useStateSerialization();
const collect = async () => {
const screenshot = await viewerInstance.screenshot();
return {
projectId: projectId.value,
resourceIdString: concreteResourceIdString.value,
viewerState: serialize({ concreteResourceIdString: true }),
screenshot
};
};
return {
collect
};
};
export const useCreateSavedView = () => {
const { mutate } = useMutation(createSavedViewMutation);
const { userId } = useActiveUser();
const {
resources: {
response: { project }
}
} = useInjectedViewerState();
const { triggerNotification } = useGlobalToast();
const { collect } = useCollectNewSavedViewViewerData();
const mp = useMixpanel();
return async (input) => {
if (!userId.value) return;
const result = await mutate({
input: {
...input,
...await collect()
}
}).catch(convertThrowIntoFetchResult);
const res = result?.data?.projectMutations.savedViewMutations.createView;
if (!res?.id) {
const err = getFirstGqlErrorMessage(result?.errors);
triggerNotification({
title: "Couldn't create saved view",
description: err,
type: ToastNotificationType.Danger
});
}
if (res?.id) {
mp.track("Saved View Created", {
viewId: res.id,
groupId: res.groupId,
// eslint-disable-next-line camelcase
workspace_id: project.value?.workspaceId
});
}
return res;
};
};
const deleteSavedViewMutation = graphql(`
mutation DeleteSavedView($input: DeleteSavedViewInput!) {
projectMutations {
savedViewMutations {
deleteView(input: $input)
}
}
}
`);
graphql(`
fragment UseDeleteSavedView_SavedView on SavedView {
id
projectId
resourceIds
group {
id
groupId
resourceIds
}
}
`);
export const useDeleteSavedView = () => {
const { mutate } = useMutation(deleteSavedViewMutation);
const { triggerNotification } = useGlobalToast();
const { isLoggedIn } = useActiveUser();
return async (params) => {
const { id, projectId } = params.view;
if (!id || !projectId || !isLoggedIn.value) {
return;
}
const result = await mutate({
input: {
projectId,
id
}
}).catch(convertThrowIntoFetchResult);
const res = result?.data?.projectMutations.savedViewMutations.deleteView;
if (res) {
triggerNotification({
title: "View deleted",
type: ToastNotificationType.Success
});
} else {
const err = getFirstGqlErrorMessage(result?.errors);
triggerNotification({
title: "Couldn't delete saved view",
description: err,
type: ToastNotificationType.Danger
});
}
return res;
};
};
const updateSavedViewMutation = graphql(`
mutation UpdateSavedView($input: UpdateSavedViewInput!) {
projectMutations {
savedViewMutations {
updateView(input: $input) {
id
...ViewerSavedViewsPanelView_SavedView
...UseViewerSavedViewSetup_SavedView
...UseUpdateSavedView_SavedView
group {
id
...ViewerSavedViewsPanelViewsGroup_SavedViewGroup
}
}
}
}
}
`);
graphql(`
fragment UseUpdateSavedView_SavedView on SavedView {
id
projectId
isHomeView
groupResourceIds
resourceIds
group {
id
groupId
resourceIds
}
}
`);
export const useUpdateSavedView = () => {
const { mutate } = useMutation(updateSavedViewMutation);
const { triggerNotification } = useGlobalToast();
const { isLoggedIn } = useActiveUser();
const mp = useMixpanel();
const {
resources: {
response: { project }
}
} = useInjectedViewerState();
return async (params, options) => {
if (!isLoggedIn.value) return;
const { input } = params;
const result = await mutate({ input }).catch(convertThrowIntoFetchResult);
const res = result?.data?.projectMutations.savedViewMutations.updateView;
if (!options?.skipToast) {
if (res?.id) {
triggerNotification({
title: "View updated",
type: ToastNotificationType.Success
});
} else {
const err = getFirstGqlErrorMessage(result?.errors);
triggerNotification({
title: "Couldn't update view",
description: err,
type: ToastNotificationType.Danger
});
}
}
if (res?.id) {
if ("isHomeView" in input) {
mp.track("Saved View Set as Home View", {
viewId: res.id,
isHomeView: input.isHomeView,
// eslint-disable-next-line camelcase
workspace_id: project.value?.workspaceId
});
}
}
options?.onFullResult?.(result, !!res);
return res;
};
};
const createSavedViewGroupMutation = graphql(`
mutation CreateSavedViewGroup($input: CreateSavedViewGroupInput!) {
projectMutations {
savedViewMutations {
createGroup(input: $input) {
id
...ViewerSavedViewsPanelViewsGroup_SavedViewGroup
}
}
}
}
`);
export const useCreateSavedViewGroup = () => {
const { mutate } = useMutation(createSavedViewGroupMutation);
const { triggerNotification } = useGlobalToast();
const { isLoggedIn } = useActiveUser();
const mp = useMixpanel();
const {
resources: {
response: { project }
}
} = useInjectedViewerState();
return async (input) => {
if (!isLoggedIn.value) return;
const ret = await mutate({ input }).catch(convertThrowIntoFetchResult);
const res = ret?.data?.projectMutations.savedViewMutations.createGroup;
if (res?.id) {
triggerNotification({
title: "Group created",
type: ToastNotificationType.Success
});
} else {
const err = getFirstGqlErrorMessage(ret?.errors);
triggerNotification({
title: "Couldn't create group",
description: err,
type: ToastNotificationType.Danger
});
}
if (res?.id) {
mp.track("Saved View Group Created", {
groupId: res.id,
// eslint-disable-next-line camelcase
workspace_id: project.value?.workspaceId
});
}
return res;
};
};
const deleteSavedViewGroupMutation = graphql(`
mutation DeleteSavedViewGroup($input: DeleteSavedViewGroupInput!) {
projectMutations {
savedViewMutations {
deleteGroup(input: $input)
}
}
}
`);
graphql(`
fragment UseDeleteSavedViewGroup_SavedViewGroup on SavedViewGroup {
id
groupId
projectId
isUngroupedViewsGroup
}
`);
export const useDeleteSavedViewGroup = () => {
const { mutate } = useMutation(deleteSavedViewGroupMutation);
const { triggerNotification } = useGlobalToast();
const { isLoggedIn } = useActiveUser();
return async (group) => {
if (!isLoggedIn.value) return;
const groupId = group.groupId;
const projectId = group.projectId;
if (!groupId || group.isUngroupedViewsGroup) return;
const result = await mutate({ input: { groupId, projectId } }).catch(
convertThrowIntoFetchResult
);
const res = result?.data?.projectMutations.savedViewMutations.deleteGroup;
if (res) {
triggerNotification({
title: "Group deleted",
type: ToastNotificationType.Success
});
} else {
const err = getFirstGqlErrorMessage(result?.errors);
triggerNotification({
title: "Couldn't delete group",
description: err,
type: ToastNotificationType.Danger
});
}
return res;
};
};
const updateSavedViewGroupMutation = graphql(`
mutation UpdateSavedViewGroup($input: UpdateSavedViewGroupInput!) {
projectMutations {
savedViewMutations {
updateGroup(input: $input) {
id
...UseUpdateSavedViewGroup_SavedViewGroup
}
}
}
}
`);
graphql(`
fragment UseUpdateSavedViewGroup_SavedViewGroup on SavedViewGroup {
id
projectId
groupId
title
isUngroupedViewsGroup
}
`);
export const useUpdateSavedViewGroup = () => {
const { mutate } = useMutation(updateSavedViewGroupMutation);
const { triggerNotification } = useGlobalToast();
const { isLoggedIn } = useActiveUser();
return async (params) => {
const { group, update } = params;
if (!isLoggedIn.value) return;
if (group.isUngroupedViewsGroup) return;
const result = await mutate(
{
input: {
projectId: group.projectId,
groupId: group.id,
...update
}
},
{
optimisticResponse(vars) {
const typedVars = vars;
return {
projectMutations: {
savedViewMutations: {
updateGroup: {
...group,
title: typedVars.input.name || group.title
}
}
}
};
}
}
).catch(convertThrowIntoFetchResult);
const res = result?.data?.projectMutations.savedViewMutations.updateGroup;
if (res?.id) {
triggerNotification({
title: "Group updated",
type: ToastNotificationType.Success
});
} else {
const err = getFirstGqlErrorMessage(result?.errors);
triggerNotification({
title: "Couldn't update group",
description: err,
type: ToastNotificationType.Danger
});
}
return res;
};
};
//# sourceMappingURL=data:application/json;base64,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LGtCQUFrQjtBQUFBLGNBQ2hCLG9CQUFvQjtBQUFBLGdCQUNsQixhQUFhO0FBQUEsa0JBQ1gsR0FBRztBQUFBLGtCQUNILE9BQU8sVUFBVSxNQUFNLFFBQVEsTUFBTTtBQUFBLGdCQUN2QztBQUFBLGNBQ0Y7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRixFQUFFLE1BQU0sMkJBQTJCO0FBRW5DLFVBQU0sTUFBTSxRQUFRLE1BQU0saUJBQWlCLG1CQUFtQjtBQUM5RCxRQUFJLEtBQUssSUFBSTtBQUNYLDBCQUFvQjtBQUFBLFFBQ2xCLE9BQU87QUFBQSxRQUNQLE1BQU0sc0JBQXNCO0FBQUEsTUFDOUIsQ0FBQztBQUFBLElBQ0gsT0FBTztBQUNMLFlBQU0sTUFBTSx3QkFBd0IsUUFBUSxNQUFNO0FBQ2xELDBCQUFvQjtBQUFBLFFBQ2xCLE9BQU87QUFBQSxRQUNQLGFBQWE7QUFBQSxRQUNiLE1BQU0sc0JBQXNCO0FBQUEsTUFDOUIsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJtYW5hZ2VtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZU11dGF0aW9uLCB0eXBlIE11dGF0ZVJlc3VsdCB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IGdyYXBocWwgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHR5cGUge1xyXG4gIENyZWF0ZVNhdmVkVmlld0dyb3VwSW5wdXQsXHJcbiAgQ3JlYXRlU2F2ZWRWaWV3SW5wdXQsXHJcbiAgVXBkYXRlU2F2ZWRWaWV3R3JvdXBJbnB1dCxcclxuICBVcGRhdGVTYXZlZFZpZXdHcm91cE11dGF0aW9uVmFyaWFibGVzLFxyXG4gIFVwZGF0ZVNhdmVkVmlld0lucHV0LFxyXG4gIFVwZGF0ZVNhdmVkVmlld011dGF0aW9uLFxyXG4gIFVzZURlbGV0ZVNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudCxcclxuICBVc2VEZWxldGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50LFxyXG4gIFVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudCxcclxuICBVc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50XHJcbn0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgdXNlU3RhdGVTZXJpYWxpemF0aW9uIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NlcmlhbGl6YXRpb24nXHJcbmltcG9ydCB7IHVzZUluamVjdGVkVmlld2VyU3RhdGUgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuXHJcbmNvbnN0IGNyZWF0ZVNhdmVkVmlld011dGF0aW9uID0gZ3JhcGhxbChgXHJcbiAgbXV0YXRpb24gQ3JlYXRlU2F2ZWRWaWV3KCRpbnB1dDogQ3JlYXRlU2F2ZWRWaWV3SW5wdXQhKSB7XHJcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcclxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcclxuICAgICAgICBjcmVhdGVWaWV3KGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgICByZXNvdXJjZUlkc1xyXG4gICAgICAgICAgZ3JvdXBJZFxyXG4gICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdcclxuICAgICAgICAgIGdyb3VwIHtcclxuICAgICAgICAgICAgaWRcclxuICAgICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYClcclxuXHJcbmV4cG9ydCBjb25zdCB1c2VDb2xsZWN0TmV3U2F2ZWRWaWV3Vmlld2VyRGF0YSA9ICgpID0+IHtcclxuICBjb25zdCB7XHJcbiAgICBwcm9qZWN0SWQsXHJcbiAgICB2aWV3ZXI6IHsgaW5zdGFuY2U6IHZpZXdlckluc3RhbmNlIH0sXHJcbiAgICByZXNvdXJjZXM6IHtcclxuICAgICAgcmVzcG9uc2U6IHsgY29uY3JldGVSZXNvdXJjZUlkU3RyaW5nIH1cclxuICAgIH1cclxuICB9ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcbiAgY29uc3QgeyBzZXJpYWxpemUgfSA9IHVzZVN0YXRlU2VyaWFsaXphdGlvbigpXHJcblxyXG4gIGNvbnN0IGNvbGxlY3QgPSBhc3luYyAoKTogUHJvbWlzZTxcclxuICAgIFBpY2s8XHJcbiAgICAgIENyZWF0ZVNhdmVkVmlld0lucHV0LFxyXG4gICAgICAncmVzb3VyY2VJZFN0cmluZycgfCAndmlld2VyU3RhdGUnIHwgJ3NjcmVlbnNob3QnIHwgJ3Byb2plY3RJZCdcclxuICAgID5cclxuICA+ID0+IHtcclxuICAgIGNvbnN0IHNjcmVlbnNob3QgPSBhd2FpdCB2aWV3ZXJJbnN0YW5jZS5zY3JlZW5zaG90KClcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHByb2plY3RJZDogcHJvamVjdElkLnZhbHVlLFxyXG4gICAgICByZXNvdXJjZUlkU3RyaW5nOiBjb25jcmV0ZVJlc291cmNlSWRTdHJpbmcudmFsdWUsXHJcbiAgICAgIHZpZXdlclN0YXRlOiBzZXJpYWxpemUoeyBjb25jcmV0ZVJlc291cmNlSWRTdHJpbmc6IHRydWUgfSksXHJcbiAgICAgIHNjcmVlbnNob3RcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBjb2xsZWN0XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgdXNlQ3JlYXRlU2F2ZWRWaWV3ID0gKCkgPT4ge1xyXG4gIGNvbnN0IHsgbXV0YXRlIH0gPSB1c2VNdXRhdGlvbihjcmVhdGVTYXZlZFZpZXdNdXRhdGlvbilcclxuICBjb25zdCB7IHVzZXJJZCB9ID0gdXNlQWN0aXZlVXNlcigpXHJcbiAgY29uc3Qge1xyXG4gICAgcmVzb3VyY2VzOiB7XHJcbiAgICAgIHJlc3BvbnNlOiB7IHByb2plY3QgfVxyXG4gICAgfVxyXG4gIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuICBjb25zdCB7IHRyaWdnZXJOb3RpZmljYXRpb24gfSA9IHVzZUdsb2JhbFRvYXN0KClcclxuICBjb25zdCB7IGNvbGxlY3QgfSA9IHVzZUNvbGxlY3ROZXdTYXZlZFZpZXdWaWV3ZXJEYXRhKClcclxuICBjb25zdCBtcCA9IHVzZU1peHBhbmVsKClcclxuXHJcbiAgcmV0dXJuIGFzeW5jIChcclxuICAgIGlucHV0OiBPbWl0PFxyXG4gICAgICBDcmVhdGVTYXZlZFZpZXdJbnB1dCxcclxuICAgICAgJ3Byb2plY3RJZCcgfCAncmVzb3VyY2VJZFN0cmluZycgfCAndmlld2VyU3RhdGUnIHwgJ3NjcmVlbnNob3QnXHJcbiAgICA+XHJcbiAgKSA9PiB7XHJcbiAgICBpZiAoIXVzZXJJZC52YWx1ZSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbXV0YXRlKHtcclxuICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAuLi5pbnB1dCxcclxuICAgICAgICAuLi4oYXdhaXQgY29sbGVjdCgpKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaChjb252ZXJ0VGhyb3dJbnRvRmV0Y2hSZXN1bHQpXHJcblxyXG4gICAgY29uc3QgcmVzID0gcmVzdWx0Py5kYXRhPy5wcm9qZWN0TXV0YXRpb25zLnNhdmVkVmlld011dGF0aW9ucy5jcmVhdGVWaWV3XHJcbiAgICBpZiAoIXJlcz8uaWQpIHtcclxuICAgICAgY29uc3QgZXJyID0gZ2V0Rmlyc3RHcWxFcnJvck1lc3NhZ2UocmVzdWx0Py5lcnJvcnMpXHJcbiAgICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICAgIHRpdGxlOiBcIkNvdWxkbid0IGNyZWF0ZSBzYXZlZCB2aWV3XCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGVycixcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcz8uaWQpIHtcclxuICAgICAgbXAudHJhY2soJ1NhdmVkIFZpZXcgQ3JlYXRlZCcsIHtcclxuICAgICAgICB2aWV3SWQ6IHJlcy5pZCxcclxuICAgICAgICBncm91cElkOiByZXMuZ3JvdXBJZCxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXHJcbiAgICAgICAgd29ya3NwYWNlX2lkOiBwcm9qZWN0LnZhbHVlPy53b3Jrc3BhY2VJZFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGRlbGV0ZVNhdmVkVmlld011dGF0aW9uID0gZ3JhcGhxbChgXHJcbiAgbXV0YXRpb24gRGVsZXRlU2F2ZWRWaWV3KCRpbnB1dDogRGVsZXRlU2F2ZWRWaWV3SW5wdXQhKSB7XHJcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcclxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcclxuICAgICAgICBkZWxldGVWaWV3KGlucHV0OiAkaW5wdXQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBVc2VEZWxldGVTYXZlZFZpZXdfU2F2ZWRWaWV3IG9uIFNhdmVkVmlldyB7XHJcbiAgICBpZFxyXG4gICAgcHJvamVjdElkXHJcbiAgICByZXNvdXJjZUlkc1xyXG4gICAgZ3JvdXAge1xyXG4gICAgICBpZFxyXG4gICAgICBncm91cElkXHJcbiAgICAgIHJlc291cmNlSWRzXHJcbiAgICB9XHJcbiAgfVxyXG5gKVxyXG5cclxuZXhwb3J0IGNvbnN0IHVzZURlbGV0ZVNhdmVkVmlldyA9ICgpID0+IHtcclxuICBjb25zdCB7IG11dGF0ZSB9ID0gdXNlTXV0YXRpb24oZGVsZXRlU2F2ZWRWaWV3TXV0YXRpb24pXHJcbiAgY29uc3QgeyB0cmlnZ2VyTm90aWZpY2F0aW9uIH0gPSB1c2VHbG9iYWxUb2FzdCgpXHJcbiAgY29uc3QgeyBpc0xvZ2dlZEluIH0gPSB1c2VBY3RpdmVVc2VyKClcclxuXHJcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXM6IHsgdmlldzogVXNlRGVsZXRlU2F2ZWRWaWV3X1NhdmVkVmlld0ZyYWdtZW50IH0pID0+IHtcclxuICAgIGNvbnN0IHsgaWQsIHByb2plY3RJZCB9ID0gcGFyYW1zLnZpZXdcclxuICAgIGlmICghaWQgfHwgIXByb2plY3RJZCB8fCAhaXNMb2dnZWRJbi52YWx1ZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtdXRhdGUoe1xyXG4gICAgICBpbnB1dDoge1xyXG4gICAgICAgIHByb2plY3RJZCxcclxuICAgICAgICBpZFxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaChjb252ZXJ0VGhyb3dJbnRvRmV0Y2hSZXN1bHQpXHJcblxyXG4gICAgY29uc3QgcmVzID0gcmVzdWx0Py5kYXRhPy5wcm9qZWN0TXV0YXRpb25zLnNhdmVkVmlld011dGF0aW9ucy5kZWxldGVWaWV3XHJcbiAgICBpZiAocmVzKSB7XHJcbiAgICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICAgIHRpdGxlOiAnVmlldyBkZWxldGVkJyxcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gZ2V0Rmlyc3RHcWxFcnJvck1lc3NhZ2UocmVzdWx0Py5lcnJvcnMpXHJcbiAgICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICAgIHRpdGxlOiBcIkNvdWxkbid0IGRlbGV0ZSBzYXZlZCB2aWV3XCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGVycixcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgdXBkYXRlU2F2ZWRWaWV3TXV0YXRpb24gPSBncmFwaHFsKGBcclxuICBtdXRhdGlvbiBVcGRhdGVTYXZlZFZpZXcoJGlucHV0OiBVcGRhdGVTYXZlZFZpZXdJbnB1dCEpIHtcclxuICAgIHByb2plY3RNdXRhdGlvbnMge1xyXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xyXG4gICAgICAgIHVwZGF0ZVZpZXcoaW5wdXQ6ICRpbnB1dCkge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICAgIC4uLlZpZXdlclNhdmVkVmlld3NQYW5lbFZpZXdfU2F2ZWRWaWV3XHJcbiAgICAgICAgICAuLi5Vc2VWaWV3ZXJTYXZlZFZpZXdTZXR1cF9TYXZlZFZpZXdcclxuICAgICAgICAgIC4uLlVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXdcclxuICAgICAgICAgIGdyb3VwIHtcclxuICAgICAgICAgICAgaWRcclxuICAgICAgICAgICAgLi4uVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld3NHcm91cF9TYXZlZFZpZXdHcm91cFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYClcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFVzZVVwZGF0ZVNhdmVkVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcclxuICAgIGlkXHJcbiAgICBwcm9qZWN0SWRcclxuICAgIGlzSG9tZVZpZXdcclxuICAgIGdyb3VwUmVzb3VyY2VJZHNcclxuICAgIHJlc291cmNlSWRzXHJcbiAgICBncm91cCB7XHJcbiAgICAgIGlkXHJcbiAgICAgIGdyb3VwSWRcclxuICAgICAgcmVzb3VyY2VJZHNcclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5leHBvcnQgY29uc3QgdXNlVXBkYXRlU2F2ZWRWaWV3ID0gKCkgPT4ge1xyXG4gIGNvbnN0IHsgbXV0YXRlIH0gPSB1c2VNdXRhdGlvbih1cGRhdGVTYXZlZFZpZXdNdXRhdGlvbilcclxuICBjb25zdCB7IHRyaWdnZXJOb3RpZmljYXRpb24gfSA9IHVzZUdsb2JhbFRvYXN0KClcclxuICBjb25zdCB7IGlzTG9nZ2VkSW4gfSA9IHVzZUFjdGl2ZVVzZXIoKVxyXG4gIGNvbnN0IG1wID0gdXNlTWl4cGFuZWwoKVxyXG4gIGNvbnN0IHtcclxuICAgIHJlc291cmNlczoge1xyXG4gICAgICByZXNwb25zZTogeyBwcm9qZWN0IH1cclxuICAgIH1cclxuICB9ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcblxyXG4gIHJldHVybiBhc3luYyAoXHJcbiAgICBwYXJhbXM6IHtcclxuICAgICAgdmlldzogVXNlVXBkYXRlU2F2ZWRWaWV3X1NhdmVkVmlld0ZyYWdtZW50XHJcbiAgICAgIGlucHV0OiBVcGRhdGVTYXZlZFZpZXdJbnB1dFxyXG4gICAgfSxcclxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFdoZXRoZXIgdG8gc2tpcCB0b2FzdCBub3RpZmljYXRpb25zXHJcbiAgICAgICAqL1xyXG4gICAgICBza2lwVG9hc3Q6IGJvb2xlYW5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRvIGdldCB0aGUgZnVsbCByZXNwb25zZSwgdXNlIHRoaXMgY2FsbGJhY2tcclxuICAgICAgICovXHJcbiAgICAgIG9uRnVsbFJlc3VsdD86IChcclxuICAgICAgICByZXM6IEF3YWl0ZWQ8TXV0YXRlUmVzdWx0PFVwZGF0ZVNhdmVkVmlld011dGF0aW9uPj4sXHJcbiAgICAgICAgc3VjY2VzczogYm9vbGVhblxyXG4gICAgICApID0+IHZvaWRcclxuICAgIH0+XHJcbiAgKSA9PiB7XHJcbiAgICBpZiAoIWlzTG9nZ2VkSW4udmFsdWUpIHJldHVyblxyXG4gICAgY29uc3QgeyBpbnB1dCB9ID0gcGFyYW1zXHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtdXRhdGUoeyBpbnB1dCB9KS5jYXRjaChjb252ZXJ0VGhyb3dJbnRvRmV0Y2hSZXN1bHQpXHJcblxyXG4gICAgY29uc3QgcmVzID0gcmVzdWx0Py5kYXRhPy5wcm9qZWN0TXV0YXRpb25zLnNhdmVkVmlld011dGF0aW9ucy51cGRhdGVWaWV3XHJcbiAgICBpZiAoIW9wdGlvbnM/LnNraXBUb2FzdCkge1xyXG4gICAgICBpZiAocmVzPy5pZCkge1xyXG4gICAgICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICAgICAgdGl0bGU6ICdWaWV3IHVwZGF0ZWQnLFxyXG4gICAgICAgICAgdHlwZTogVG9hc3ROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3NcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IGdldEZpcnN0R3FsRXJyb3JNZXNzYWdlKHJlc3VsdD8uZXJyb3JzKVxyXG4gICAgICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICAgICAgdGl0bGU6IFwiQ291bGRuJ3QgdXBkYXRlIHZpZXdcIixcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBlcnIsXHJcbiAgICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXM/LmlkKSB7XHJcbiAgICAgIGlmICgnaXNIb21lVmlldycgaW4gaW5wdXQpIHtcclxuICAgICAgICBtcC50cmFjaygnU2F2ZWQgVmlldyBTZXQgYXMgSG9tZSBWaWV3Jywge1xyXG4gICAgICAgICAgdmlld0lkOiByZXMuaWQsXHJcbiAgICAgICAgICBpc0hvbWVWaWV3OiBpbnB1dC5pc0hvbWVWaWV3LFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgICAgd29ya3NwYWNlX2lkOiBwcm9qZWN0LnZhbHVlPy53b3Jrc3BhY2VJZFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zPy5vbkZ1bGxSZXN1bHQ/LihyZXN1bHQsICEhcmVzKVxyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY3JlYXRlU2F2ZWRWaWV3R3JvdXBNdXRhdGlvbiA9IGdyYXBocWwoYFxyXG4gIG11dGF0aW9uIENyZWF0ZVNhdmVkVmlld0dyb3VwKCRpbnB1dDogQ3JlYXRlU2F2ZWRWaWV3R3JvdXBJbnB1dCEpIHtcclxuICAgIHByb2plY3RNdXRhdGlvbnMge1xyXG4gICAgICBzYXZlZFZpZXdNdXRhdGlvbnMge1xyXG4gICAgICAgIGNyZWF0ZUdyb3VwKGlucHV0OiAkaW5wdXQpIHtcclxuICAgICAgICAgIGlkXHJcbiAgICAgICAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3c0dyb3VwX1NhdmVkVmlld0dyb3VwXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gKVxyXG5cclxuZXhwb3J0IGNvbnN0IHVzZUNyZWF0ZVNhdmVkVmlld0dyb3VwID0gKCkgPT4ge1xyXG4gIGNvbnN0IHsgbXV0YXRlIH0gPSB1c2VNdXRhdGlvbihjcmVhdGVTYXZlZFZpZXdHcm91cE11dGF0aW9uKVxyXG4gIGNvbnN0IHsgdHJpZ2dlck5vdGlmaWNhdGlvbiB9ID0gdXNlR2xvYmFsVG9hc3QoKVxyXG4gIGNvbnN0IHsgaXNMb2dnZWRJbiB9ID0gdXNlQWN0aXZlVXNlcigpXHJcbiAgY29uc3QgbXAgPSB1c2VNaXhwYW5lbCgpXHJcbiAgY29uc3Qge1xyXG4gICAgcmVzb3VyY2VzOiB7XHJcbiAgICAgIHJlc3BvbnNlOiB7IHByb2plY3QgfVxyXG4gICAgfVxyXG4gIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuXHJcbiAgcmV0dXJuIGFzeW5jIChpbnB1dDogQ3JlYXRlU2F2ZWRWaWV3R3JvdXBJbnB1dCkgPT4ge1xyXG4gICAgaWYgKCFpc0xvZ2dlZEluLnZhbHVlKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCByZXQgPSBhd2FpdCBtdXRhdGUoeyBpbnB1dCB9KS5jYXRjaChjb252ZXJ0VGhyb3dJbnRvRmV0Y2hSZXN1bHQpXHJcbiAgICBjb25zdCByZXMgPSByZXQ/LmRhdGE/LnByb2plY3RNdXRhdGlvbnMuc2F2ZWRWaWV3TXV0YXRpb25zLmNyZWF0ZUdyb3VwXHJcbiAgICBpZiAocmVzPy5pZCkge1xyXG4gICAgICB0cmlnZ2VyTm90aWZpY2F0aW9uKHtcclxuICAgICAgICB0aXRsZTogJ0dyb3VwIGNyZWF0ZWQnLFxyXG4gICAgICAgIHR5cGU6IFRvYXN0Tm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSBnZXRGaXJzdEdxbEVycm9yTWVzc2FnZShyZXQ/LmVycm9ycylcclxuICAgICAgdHJpZ2dlck5vdGlmaWNhdGlvbih7XHJcbiAgICAgICAgdGl0bGU6IFwiQ291bGRuJ3QgY3JlYXRlIGdyb3VwXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGVycixcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlcz8uaWQpIHtcclxuICAgICAgbXAudHJhY2soJ1NhdmVkIFZpZXcgR3JvdXAgQ3JlYXRlZCcsIHtcclxuICAgICAgICBncm91cElkOiByZXMuaWQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgIHdvcmtzcGFjZV9pZDogcHJvamVjdC52YWx1ZT8ud29ya3NwYWNlSWRcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBkZWxldGVTYXZlZFZpZXdHcm91cE11dGF0aW9uID0gZ3JhcGhxbChgXHJcbiAgbXV0YXRpb24gRGVsZXRlU2F2ZWRWaWV3R3JvdXAoJGlucHV0OiBEZWxldGVTYXZlZFZpZXdHcm91cElucHV0ISkge1xyXG4gICAgcHJvamVjdE11dGF0aW9ucyB7XHJcbiAgICAgIHNhdmVkVmlld011dGF0aW9ucyB7XHJcbiAgICAgICAgZGVsZXRlR3JvdXAoaW5wdXQ6ICRpbnB1dClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYClcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFVzZURlbGV0ZVNhdmVkVmlld0dyb3VwX1NhdmVkVmlld0dyb3VwIG9uIFNhdmVkVmlld0dyb3VwIHtcclxuICAgIGlkXHJcbiAgICBncm91cElkXHJcbiAgICBwcm9qZWN0SWRcclxuICAgIGlzVW5ncm91cGVkVmlld3NHcm91cFxyXG4gIH1cclxuYClcclxuXHJcbmV4cG9ydCBjb25zdCB1c2VEZWxldGVTYXZlZFZpZXdHcm91cCA9ICgpID0+IHtcclxuICBjb25zdCB7IG11dGF0ZSB9ID0gdXNlTXV0YXRpb24oZGVsZXRlU2F2ZWRWaWV3R3JvdXBNdXRhdGlvbilcclxuICBjb25zdCB7IHRyaWdnZXJOb3RpZmljYXRpb24gfSA9IHVzZUdsb2JhbFRvYXN0KClcclxuICBjb25zdCB7IGlzTG9nZ2VkSW4gfSA9IHVzZUFjdGl2ZVVzZXIoKVxyXG5cclxuICByZXR1cm4gYXN5bmMgKGdyb3VwOiBVc2VEZWxldGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cEZyYWdtZW50KSA9PiB7XHJcbiAgICBpZiAoIWlzTG9nZ2VkSW4udmFsdWUpIHJldHVyblxyXG4gICAgY29uc3QgZ3JvdXBJZCA9IGdyb3VwLmdyb3VwSWRcclxuICAgIGNvbnN0IHByb2plY3RJZCA9IGdyb3VwLnByb2plY3RJZFxyXG4gICAgaWYgKCFncm91cElkIHx8IGdyb3VwLmlzVW5ncm91cGVkVmlld3NHcm91cCkgcmV0dXJuIC8vIG5vdCByZWFsIGdyb3VwXHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbXV0YXRlKHsgaW5wdXQ6IHsgZ3JvdXBJZCwgcHJvamVjdElkIH0gfSkuY2F0Y2goXHJcbiAgICAgIGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdFxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IHJlcyA9IHJlc3VsdD8uZGF0YT8ucHJvamVjdE11dGF0aW9ucy5zYXZlZFZpZXdNdXRhdGlvbnMuZGVsZXRlR3JvdXBcclxuICAgIGlmIChyZXMpIHtcclxuICAgICAgdHJpZ2dlck5vdGlmaWNhdGlvbih7XHJcbiAgICAgICAgdGl0bGU6ICdHcm91cCBkZWxldGVkJyxcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gZ2V0Rmlyc3RHcWxFcnJvck1lc3NhZ2UocmVzdWx0Py5lcnJvcnMpXHJcbiAgICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICAgIHRpdGxlOiBcIkNvdWxkbid0IGRlbGV0ZSBncm91cFwiLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBlcnIsXHJcbiAgICAgICAgdHlwZTogVG9hc3ROb3RpZmljYXRpb25UeXBlLkRhbmdlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHVwZGF0ZVNhdmVkVmlld0dyb3VwTXV0YXRpb24gPSBncmFwaHFsKGBcclxuICBtdXRhdGlvbiBVcGRhdGVTYXZlZFZpZXdHcm91cCgkaW5wdXQ6IFVwZGF0ZVNhdmVkVmlld0dyb3VwSW5wdXQhKSB7XHJcbiAgICBwcm9qZWN0TXV0YXRpb25zIHtcclxuICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zIHtcclxuICAgICAgICB1cGRhdGVHcm91cChpbnB1dDogJGlucHV0KSB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgICAgLi4uVXNlVXBkYXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBVc2VVcGRhdGVTYXZlZFZpZXdHcm91cF9TYXZlZFZpZXdHcm91cCBvbiBTYXZlZFZpZXdHcm91cCB7XHJcbiAgICBpZFxyXG4gICAgcHJvamVjdElkXHJcbiAgICBncm91cElkXHJcbiAgICB0aXRsZVxyXG4gICAgaXNVbmdyb3VwZWRWaWV3c0dyb3VwXHJcbiAgfVxyXG5gKVxyXG5cclxuZXhwb3J0IGNvbnN0IHVzZVVwZGF0ZVNhdmVkVmlld0dyb3VwID0gKCkgPT4ge1xyXG4gIGNvbnN0IHsgbXV0YXRlIH0gPSB1c2VNdXRhdGlvbih1cGRhdGVTYXZlZFZpZXdHcm91cE11dGF0aW9uKVxyXG4gIGNvbnN0IHsgdHJpZ2dlck5vdGlmaWNhdGlvbiB9ID0gdXNlR2xvYmFsVG9hc3QoKVxyXG4gIGNvbnN0IHsgaXNMb2dnZWRJbiB9ID0gdXNlQWN0aXZlVXNlcigpXHJcblxyXG4gIHJldHVybiBhc3luYyAocGFyYW1zOiB7XHJcbiAgICBncm91cDogVXNlVXBkYXRlU2F2ZWRWaWV3R3JvdXBfU2F2ZWRWaWV3R3JvdXBGcmFnbWVudFxyXG4gICAgdXBkYXRlOiBPbWl0PFVwZGF0ZVNhdmVkVmlld0dyb3VwSW5wdXQsICdwcm9qZWN0SWQnIHwgJ2dyb3VwSWQnPlxyXG4gIH0pID0+IHtcclxuICAgIGNvbnN0IHsgZ3JvdXAsIHVwZGF0ZSB9ID0gcGFyYW1zXHJcbiAgICBpZiAoIWlzTG9nZ2VkSW4udmFsdWUpIHJldHVyblxyXG4gICAgaWYgKGdyb3VwLmlzVW5ncm91cGVkVmlld3NHcm91cCkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbXV0YXRlKFxyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIHByb2plY3RJZDogZ3JvdXAucHJvamVjdElkLFxyXG4gICAgICAgICAgZ3JvdXBJZDogZ3JvdXAuaWQsXHJcbiAgICAgICAgICAuLi51cGRhdGVcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBvcHRpbWlzdGljUmVzcG9uc2UodmFycykge1xyXG4gICAgICAgICAgLy8gYXBvbGxvIHR5cGluZyBpc3N1ZTpcclxuICAgICAgICAgIGNvbnN0IHR5cGVkVmFycyA9IHZhcnMgYXMgVXBkYXRlU2F2ZWRWaWV3R3JvdXBNdXRhdGlvblZhcmlhYmxlc1xyXG5cclxuICAgICAgICAgIC8vIFdlIHdhbnQgdGhlIG5hbWUgdXBkYXRlIHRvIGJlIGltbWVkaWF0ZSB0byBhdm9pZCBmbGFzaGluZyBjb250ZW50XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwcm9qZWN0TXV0YXRpb25zOiB7XHJcbiAgICAgICAgICAgICAgc2F2ZWRWaWV3TXV0YXRpb25zOiB7XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVHcm91cDoge1xyXG4gICAgICAgICAgICAgICAgICAuLi5ncm91cCxcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHR5cGVkVmFycy5pbnB1dC5uYW1lIHx8IGdyb3VwLnRpdGxlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApLmNhdGNoKGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdClcclxuXHJcbiAgICBjb25zdCByZXMgPSByZXN1bHQ/LmRhdGE/LnByb2plY3RNdXRhdGlvbnMuc2F2ZWRWaWV3TXV0YXRpb25zLnVwZGF0ZUdyb3VwXHJcbiAgICBpZiAocmVzPy5pZCkge1xyXG4gICAgICB0cmlnZ2VyTm90aWZpY2F0aW9uKHtcclxuICAgICAgICB0aXRsZTogJ0dyb3VwIHVwZGF0ZWQnLFxyXG4gICAgICAgIHR5cGU6IFRvYXN0Tm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSBnZXRGaXJzdEdxbEVycm9yTWVzc2FnZShyZXN1bHQ/LmVycm9ycylcclxuICAgICAgdHJpZ2dlck5vdGlmaWNhdGlvbih7XHJcbiAgICAgICAgdGl0bGU6IFwiQ291bGRuJ3QgdXBkYXRlIGdyb3VwXCIsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGVycixcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxufVxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvbGliL3ZpZXdlci9jb21wb3NhYmxlcy9zYXZlZFZpZXdzL21hbmFnZW1lbnQudHMifQ==