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

743 lines
72 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/project/model-page/dialog/embed/Embed.vue");import { CommonAlert as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { FormClipboardInput as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { FormCheckbox as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_3 } from "/_nuxt/components/form/select/SavedView.vue";
import { default as __nuxt_component_4 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29";
import { LayoutDialogSection as __nuxt_component_5 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_6 } from "/_nuxt/components/project/model-page/dialog/embed/Iframe.vue";
import { LayoutDialog as __nuxt_component_7 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
/* Injection by vite-plugin-vue-inspector Start */
import { createElementVNode as __createElementVNode,createBlock as __createBlock,createVNode as __createVNode,createElementBlock as __createElementBlock } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"
function _interopVNode(vnode) {
if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
const data = vnode.props['data-v-inspector']
delete vnode.props['data-v-inspector']
Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
}
return vnode
}
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
function _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
/* Injection by vite-plugin-vue-inspector End */
import { useModel as _useModel, mergeModels as _mergeModels, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import {
SavedViewVisibility
} from "/_nuxt/lib/common/generated/gql/graphql.ts";
import { useClipboard } from "/_nuxt/composables/browser.ts";
import { SpeckleViewer, Roles } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
import { settingsWorkspaceRoutes } from "/_nuxt/lib/common/helpers/route.ts";
import { useCreateEmbedToken } from "/_nuxt/lib/projects/composables/tokenManagement.ts";
import {
SupportedProjectVisibility,
castToSupportedVisibility
} from "/_nuxt/lib/projects/helpers/visibility.ts";
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
import { useAreSavedViewsEnabled } from "/_nuxt/lib/viewer/composables/savedViews/general.ts";
import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useRoute } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
import { useRuntimeConfig } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29";
import { useIsWorkspacesEnabled } from "/_nuxt/composables/globals.ts";
import { useIsSmallerOrEqualThanBreakpoint } from "/_nuxt/composables/browser.ts";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "ProjectModelPageDialogEmbed",
props: /* @__PURE__ */ _mergeModels({
project: { type: Object, required: true },
modelId: { type: String, required: false },
versionId: { type: String, required: false }
}, {
"open": { type: Boolean, ...{ required: true } },
"openModifiers": {},
"view": { type: Object, ...{
required: false
} },
"viewModifiers": {}
}),
emits: ["update:open", "update:view"],
setup(__props, { expose: __expose }) {
__expose();
graphql(`
fragment ProjectsModelPageEmbed_Project on Project {
id
visibility
permissions {
canCreateEmbedTokens {
...FullPermissionCheckResult
}
}
workspace {
id
slug
role
embedOptions {
hideSpeckleBranding
}
permissions {
canEditEmbedOptions {
...FullPermissionCheckResult
}
}
}
}
`);
const props = __props;
const isOpen = _useModel(__props, "open");
const areOptionsExpanded = ref(false);
const mixpanel = useMixpanel();
const route = useRoute();
const { copy } = useClipboard();
const {
public: { baseUrl }
} = useRuntimeConfig();
const createEmbedToken = useCreateEmbedToken();
const areSavedViewsEnabled = useAreSavedViewsEnabled();
const isWorkspacesEnabled = useIsWorkspacesEnabled();
const { isSmallerOrEqualSm } = useIsSmallerOrEqualThanBreakpoint();
const transparentBackground = ref(false);
const hideViewerControls = ref(false);
const hideSelectionInfo = ref(false);
const disableModelLink = ref(false);
const preventScrolling = ref(false);
const manuallyLoadModel = ref(false);
const hideSpeckleBranding = ref(false);
const embedToken = ref(null);
const shouldEmbedSavedView = ref(false);
const embeddedSavedView = _useModel(__props, "view");
const optionLabelClasses = computed(
() => "flex items-center gap-1 cursor-pointer max-w-max"
);
const isAdmin = computed(() => props.project.workspace?.role === Roles.Workspace.Admin);
const routeModelId = computed(() => route.params.modelId);
const parsedResources = computed(
() => SpeckleViewer.ViewerRoute.parseUrlParameters(routeModelId.value)
);
const multipleVersionedResources = computed(() => {
return parsedResources.value.filter(
(resource) => SpeckleViewer.ViewerRoute.isModelResource(resource) && resource.versionId !== void 0
).length > 1;
});
const updatedUrl = computed(() => {
const url = new URL(`/projects/${encodeURIComponent(props.project.id)}`, baseUrl);
url.pathname += "/models/";
if (props.modelId) {
let modelPath = encodeURIComponent(props.modelId);
if (props.versionId) {
modelPath += `@${encodeURIComponent(props.versionId)}`;
}
url.pathname += modelPath;
} else {
url.pathname += routeModelId.value;
}
if (embedToken.value) {
url.searchParams.set("embedToken", embedToken.value);
}
const embedOptions = { isEnabled: true };
embedDialogOptions.forEach((option) => {
if (option.value.value) {
embedOptions[option.id] = true;
}
});
if (hideSpeckleBranding.value && isWorkspacesEnabled.value && !workspaceHideSpeckleBrandingEnabled.value) {
embedOptions["hideSpeckleBranding"] = true;
}
const hashFragment = encodeURIComponent(JSON.stringify(embedOptions));
url.hash = `embed=${hashFragment}`;
const savedViewSettings = {};
if (shouldEmbedSavedView.value && embeddedSavedView.value) {
savedViewSettings["id"] = embeddedSavedView.value.id;
}
if (Object.keys(savedViewSettings).length > 0) {
const savedViewFragment = encodeURIComponent(JSON.stringify(savedViewSettings));
url.hash += `&savedView=${savedViewFragment}`;
}
return url.toString();
});
const iframeCode = computed(() => {
return `<iframe title="Speckle" src="${updatedUrl.value}" width="600" height="400" frameborder="0"></iframe>`;
});
const buttons = computed(() => [
{
text: "Close",
props: { color: "outline" },
onClick: () => {
isOpen.value = false;
}
},
...isPublicProject.value || !isPublicProject.value && canCreateEmbedTokens.value ? [
{
text: "Copy embed code",
props: {},
onClick: () => {
handleEmbedCodeCopy(iframeCode.value);
}
}
] : []
]);
const workspaceSlug = computed(() => {
return props.project.workspace?.slug;
});
const canEditEmbedOptions = computed(() => {
return props.project.workspace?.permissions?.canEditEmbedOptions;
});
const canCreateEmbedTokens = computed(() => {
return props.project.permissions?.canCreateEmbedTokens?.authorized;
});
const projectVisibility = computed(
() => castToSupportedVisibility(props.project.visibility)
);
const isPublicProject = computed(
() => projectVisibility.value === SupportedProjectVisibility.Public
);
const workspaceHideSpeckleBrandingEnabled = computed(() => {
if (!isWorkspacesEnabled.value) return false;
return props.project.workspace?.embedOptions?.hideSpeckleBranding;
});
const hideSpeckleBrandingTooltip = computed(() => {
if (!isWorkspacesEnabled.value) return "";
if (workspaceHideSpeckleBrandingEnabled.value) {
return "Speckle branding is disabled for all embeds in this workspace";
}
return "";
});
const canGenerateEmbed = computed(() => {
return isPublicProject.value || !isPublicProject.value && canCreateEmbedTokens.value;
});
const cantGenerateDialogDescription = computed(() => {
if (props.project.permissions?.canCreateEmbedTokens?.code === "WorkspaceNoFeatureAccess") {
return `Embedding ${props.project.visibility.toLowerCase()} projects is not available on your plan. Upgrade your workspace to get access to this feature.`;
}
return `The visibility of this project is set to '${props.project.visibility.toLowerCase()}'. Please contact the project owner to change the visibility or generate an embed link.`;
});
const handleEmbedCodeCopy = async (value) => {
await copy(value, {
successMessage: "Embed code copied to clipboard",
failureMessage: "Failed to copy embed code to clipboard"
});
};
const updateOption = (optionRef, newValue) => {
optionRef.value = newValue === void 0 ? false : !!newValue;
};
const embedDialogOptions = [
{
id: "isTransparent",
label: "Transparent background",
value: transparentBackground
},
{
id: "hideControls",
label: "Hide viewer controls",
value: hideViewerControls
},
{
id: "hideSelectionInfo",
label: "Hide the selection info panel",
value: hideSelectionInfo
},
{
id: "disableModelLink",
label: "No link back to web viewer",
value: disableModelLink
},
{
id: "noScroll",
label: "Prevent scrolling (zooming)",
value: preventScrolling
},
{
id: "manualLoad",
label: "Load model manually",
value: manuallyLoadModel
}
];
watch(
() => props.project.workspace?.embedOptions?.hideSpeckleBranding,
() => {
if (isWorkspacesEnabled.value) {
hideSpeckleBranding.value = props.project.workspace?.embedOptions?.hideSpeckleBranding ?? false;
}
},
{ immediate: true }
);
watch(
isOpen,
async (newValue) => {
if (newValue) {
mixpanel.track("Embed Dialog Opened", {
projectId: props.project.id,
visibility: projectVisibility.value
});
if (canCreateEmbedTokens.value) {
mixpanel.track("Embed Token Created", {
projectId: props.project.id,
visibility: projectVisibility.value
});
const token = await createEmbedToken({
projectId: props.project.id,
resourceIdString: routeModelId.value
});
if (token) {
embedToken.value = token;
}
}
}
},
{ immediate: true }
);
watch(embeddedSavedView, (newVal, oldVal) => {
if (newVal) {
shouldEmbedSavedView.value = true;
if (!oldVal || newVal.id !== oldVal.id) {
areOptionsExpanded.value = true;
}
}
});
const __returned__ = { props, isOpen, areOptionsExpanded, mixpanel, route, copy, baseUrl, createEmbedToken, areSavedViewsEnabled, isWorkspacesEnabled, isSmallerOrEqualSm, transparentBackground, hideViewerControls, hideSelectionInfo, disableModelLink, preventScrolling, manuallyLoadModel, hideSpeckleBranding, embedToken, shouldEmbedSavedView, embeddedSavedView, optionLabelClasses, isAdmin, routeModelId, parsedResources, multipleVersionedResources, updatedUrl, iframeCode, buttons, workspaceSlug, canEditEmbedOptions, canCreateEmbedTokens, projectVisibility, isPublicProject, workspaceHideSpeckleBrandingEnabled, hideSpeckleBrandingTooltip, canGenerateEmbed, cantGenerateDialogDescription, handleEmbedCodeCopy, updateOption, embedDialogOptions, get SavedViewVisibility() {
return SavedViewVisibility;
}, get settingsWorkspaceRoutes() {
return settingsWorkspaceRoutes;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
class: "lowercase",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:32:11"
};
const _hoisted_2 = {
class: "flex flex-col lg:flex-row gap-8 mb-6",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:43:7"
};
const _hoisted_3 = {
class: "flex-1 order-1 lg:order-2",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:44:9"
};
const _hoisted_4 = {
class: "flex flex-col gap-1.5 sm:gap-2 text-body-xs cursor-default",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:58:13"
};
const _hoisted_5 = {
key: 0,
class: "flex flex-col gap-1",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:59:15"
};
const _hoisted_6 = ["for"];
const _hoisted_7 = { "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:93:19" };
const _hoisted_8 = {
key: 1,
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:96:15"
};
const _hoisted_9 = {
class: "flex flex-col gap-0.5",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:109:19"
};
const _hoisted_10 = {
key: 0,
class: "text-body-2xs text-foreground-2",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:116:21"
};
const _hoisted_11 = {
key: 1,
class: "text-body-2xs text-foreground-2",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:133:21"
};
const _hoisted_12 = {
class: "lowercase",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:173:11"
};
const _hoisted_13 = { "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:177:11" };
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_CommonAlert = __nuxt_component_0;
const _component_FormClipboardInput = __nuxt_component_1;
const _component_FormCheckbox = __nuxt_component_2;
const _component_FormSelectSavedView = __nuxt_component_3;
const _component_NuxtLink = __nuxt_component_4;
const _component_LayoutDialogSection = __nuxt_component_5;
const _component_ProjectModelPageDialogEmbedIframe = __nuxt_component_6;
const _component_LayoutDialog = __nuxt_component_7;
const _directive_tippy = _resolveDirective("tippy");
return _openBlock(), _createBlock(_component_LayoutDialog, {
open: $setup.isOpen,
"onUpdate:open": _cache[4] || (_cache[4] = ($event) => $setup.isOpen = $event),
"max-width": "lg",
buttons: $setup.buttons,
title: "Embed model",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:2:3"
}, {
default: _withCtx(() => [
$setup.canGenerateEmbed ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 0 },
[
$setup.multipleVersionedResources ? (_openBlock(), _createBlock(_component_CommonAlert, {
key: 0,
class: "mb-4",
color: "info",
size: "xs",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:9:7"
}, {
title: _withCtx(() => [..._cache[5] || (_cache[5] = [
_createTextVNode(
"You are embedding a specific version",
-1
/* CACHED */
)
])]),
description: _withCtx(() => [..._cache[6] || (_cache[6] = [
_createElementVNode(
"p",
{ "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:17:11" },
" Anyone with this embed link can view your model data. Be careful where you share it! ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})) : _createCommentVNode("v-if", true),
!$setup.isPublicProject && $setup.canCreateEmbedTokens ? (_openBlock(), _createBlock(_component_CommonAlert, {
key: 1,
class: "mb-4",
color: "info",
size: "2xs",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:24:7"
}, {
title: _withCtx(() => [
_cache[7] || (_cache[7] = _createTextVNode(
" You are embedding a ",
-1
/* CACHED */
)),
_createElementVNode(
"span",
_hoisted_1,
_toDisplayString($setup.projectVisibility),
1
/* TEXT */
),
_cache[8] || (_cache[8] = _createTextVNode(
" project ",
-1
/* CACHED */
))
]),
description: _withCtx(() => [..._cache[9] || (_cache[9] = [
_createElementVNode(
"p",
{ "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:36:11" },
" Anyone with this embed link can view your model, be careful where you share it. ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
})) : _createCommentVNode("v-if", true),
_createElementVNode("div", _hoisted_2, [
_createElementVNode("div", _hoisted_3, [
_cache[16] || (_cache[16] = _createElementVNode(
"h4",
{
class: "text-heading-sm text-foreground-2 mb-1 ml-0.5",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:45:11"
},
"Embed code",
-1
/* CACHED */
)),
_createVNode(_component_FormClipboardInput, {
value: $setup.iframeCode,
"is-multiline": "",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:46:11"
}, null, 8, ["value"]),
_cache[17] || (_cache[17] = _createElementVNode(
"p",
{
class: "text-body-xs text-foreground-2 mt-2 mb-5 ml-0.5",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:47:11"
},
" Copy this code to embed your model in a webpage or document. ",
-1
/* CACHED */
)),
_cache[18] || (_cache[18] = _createElementVNode(
"h4",
{
class: "text-heading-sm text-foreground-2 mb-1 ml-0.5",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:50:11"
},
"Embed URL",
-1
/* CACHED */
)),
_createVNode(_component_FormClipboardInput, {
class: "mb-4",
value: $setup.updatedUrl,
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:51:11"
}, null, 8, ["value"]),
_createVNode(_component_LayoutDialogSection, {
open: $setup.areOptionsExpanded,
"onUpdate:open": _cache[3] || (_cache[3] = ($event) => $setup.areOptionsExpanded = $event),
"border-b": "",
"border-t": "",
title: "Options",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:52:11"
}, {
default: _withCtx(() => [
_createElementVNode("div", _hoisted_4, [
$setup.areSavedViewsEnabled ? (_openBlock(), _createElementBlock("div", _hoisted_5, [
_createElementVNode(
"label",
{
for: "option-saved-view",
class: _normalizeClass($setup.optionLabelClasses),
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:60:17"
},
[
_createVNode(_component_FormCheckbox, {
id: "option-saved-view",
modelValue: $setup.shouldEmbedSavedView,
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.shouldEmbedSavedView = $event),
name: "Embed a saved view",
"hide-label": "",
class: "cursor-pointer",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:61:19"
}, null, 8, ["modelValue"]),
_cache[10] || (_cache[10] = _createElementVNode(
"span",
{ "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:68:19" },
"Embed a saved view",
-1
/* CACHED */
))
],
2
/* CLASS */
),
$setup.shouldEmbedSavedView ? (_openBlock(), _createBlock(_component_FormSelectSavedView, {
key: 0,
modelValue: $setup.embeddedSavedView,
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.embeddedSavedView = $event),
"project-id": $setup.props.project.id,
"resource-id-string": $setup.routeModelId,
"only-visibility": $setup.SavedViewVisibility.Public,
"show-label": false,
"mount-menu-on-body": "",
class: "max-w-sm",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:70:17"
}, null, 8, ["modelValue", "project-id", "resource-id-string", "only-visibility"])) : _createCommentVNode("v-if", true)
])) : _createCommentVNode("v-if", true),
(_openBlock(), _createElementBlock(
_Fragment,
null,
_renderList($setup.embedDialogOptions, (option) => {
return _createElementVNode("div", {
key: option.id,
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:81:15"
}, [
_createElementVNode("label", {
for: `option-${option.id}`,
class: _normalizeClass($setup.optionLabelClasses),
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:82:17"
}, [
_createVNode(_component_FormCheckbox, {
id: `option-${option.id}`,
"model-value": option.value.value,
name: option.label,
"hide-label": "",
class: "cursor-pointer",
"onUpdate:modelValue": (newValue) => $setup.updateOption(option.value, newValue),
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:83:19"
}, null, 8, ["id", "model-value", "name", "onUpdate:modelValue"]),
_createElementVNode(
"span",
_hoisted_7,
_toDisplayString(option.label),
1
/* TEXT */
)
], 10, _hoisted_6)
]);
}),
64
/* STABLE_FRAGMENT */
)),
$setup.isWorkspacesEnabled ? (_openBlock(), _createElementBlock("div", _hoisted_8, [
_createElementVNode(
"label",
{
for: `option-hide-logo`,
class: _normalizeClass($setup.optionLabelClasses),
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:97:17"
},
[
_createVNode(_component_FormCheckbox, {
id: "option-hide-logo",
modelValue: $setup.hideSpeckleBranding,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.hideSpeckleBranding = $event),
name: "Hide Speckle logo",
"hide-label": "",
class: "cursor-pointer",
disabled: $setup.workspaceHideSpeckleBrandingEnabled || !$setup.canEditEmbedOptions?.authorized,
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:98:19"
}, null, 8, ["modelValue", "disabled"]),
_createElementVNode("div", _hoisted_9, [
_withDirectives((_openBlock(), _createElementBlock("span", {
key: `hide-branding-tooltip-${$setup.workspaceHideSpeckleBrandingEnabled}`,
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:110:21"
}, [..._cache[11] || (_cache[11] = [
_createTextVNode(
" Hide Speckle logo ",
-1
/* CACHED */
)
])])), [
[_directive_tippy, $setup.hideSpeckleBrandingTooltip]
]),
!$setup.canEditEmbedOptions?.authorized && $setup.canEditEmbedOptions?.code === "WorkspacePlanNoFeatureAccessError" ? (_openBlock(), _createElementBlock("span", _hoisted_10, [
_cache[13] || (_cache[13] = _createTextVNode(
" This feature is only available on the business plan ",
-1
/* CACHED */
)),
$setup.isAdmin ? (_openBlock(), _createBlock(_component_NuxtLink, {
key: 0,
to: $setup.settingsWorkspaceRoutes.billing.route($setup.workspaceSlug),
class: "underline",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:125:23"
}, {
default: _withCtx(() => [..._cache[12] || (_cache[12] = [
_createTextVNode(
" upgrade now ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
}, 8, ["to"])) : _createCommentVNode("v-if", true)
])) : _createCommentVNode("v-if", true),
$setup.hideSpeckleBranding && !$setup.workspaceHideSpeckleBrandingEnabled ? (_openBlock(), _createElementBlock("span", _hoisted_11, [
_cache[15] || (_cache[15] = _createTextVNode(
" Tip: You can also hide the logo for all embeds in ",
-1
/* CACHED */
)),
_createVNode(_component_NuxtLink, {
to: $setup.settingsWorkspaceRoutes.general.route($setup.workspaceSlug),
class: "underline",
target: "_blank",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:138:23"
}, {
default: _withCtx(() => [..._cache[14] || (_cache[14] = [
_createTextVNode(
" workspace settings. ",
-1
/* CACHED */
)
])]),
_: 1
/* STABLE */
}, 8, ["to"])
])) : _createCommentVNode("v-if", true)
])
],
2
/* CLASS */
)
])) : _createCommentVNode("v-if", true)
])
]),
_: 1
/* STABLE */
}, 8, ["open"]),
!$setup.isSmallerOrEqualSm ? (_openBlock(), _createBlock(_component_LayoutDialogSection, {
key: 0,
"lazy-load": "",
"border-b": "",
title: "Preview",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:151:11"
}, {
default: _withCtx(() => [
!$setup.isSmallerOrEqualSm ? (_openBlock(), _createBlock(_component_ProjectModelPageDialogEmbedIframe, {
key: 0,
src: $setup.updatedUrl,
title: "Preview",
width: "600",
height: "400",
class: "shrink-0 w-[600px] h-[400px] mx-auto border border-outline-2",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:157:13"
}, null, 8, ["src"])) : _createCommentVNode("v-if", true)
]),
_: 1
/* STABLE */
})) : _createCommentVNode("v-if", true)
])
])
],
64
/* STABLE_FRAGMENT */
)) : (_openBlock(), _createBlock(_component_CommonAlert, {
key: 1,
color: "info",
size: "xs",
"data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:170:7"
}, {
title: _withCtx(() => [
_cache[19] || (_cache[19] = _createTextVNode(
" Cannot embed ",
-1
/* CACHED */
)),
_createElementVNode(
"span",
_hoisted_12,
"'" + _toDisplayString($props.project.visibility) + "'",
1
/* TEXT */
),
_cache[20] || (_cache[20] = _createTextVNode(
" project ",
-1
/* CACHED */
))
]),
description: _withCtx(() => [
_createElementVNode(
"p",
_hoisted_13,
_toDisplayString($setup.cantGenerateDialogDescription),
1
/* TEXT */
)
]),
_: 1
/* STABLE */
}))
]),
_: 1
/* STABLE */
}, 8, ["open", "buttons"]);
}
_sfc_main.__hmrId = "d192a893";
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
import.meta.hot.on("file-changed", ({ file }) => {
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
});
import.meta.hot.accept((mod) => {
if (!mod) return;
const { default: updated, _rerender_only } = mod;
if (_rerender_only) {
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
} else {
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
}
});
import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper";
export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/project/model-page/dialog/embed/Embed.vue"]]);
//# sourceMappingURL=data:application/json;base64,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QUFBLFlBQXhJO0FBQUEsWUFBdUcsTUFBQyxpQkFBRyxlQUFRLFVBQVUsSUFBRztBQUFBLFlBQUM7QUFBQTtBQUFBO0FBQUE7WUFBTztBQUFBLFlBRTFJO0FBQUE7QUFBQTtBQUFBO1FBQ1csYUFBVyxTQUNwQixNQUVJO0FBQUEsVUFGSjtBQUFBLFlBRUk7QUFBQSxZQUZKO0FBQUEsWUFFSSxpQkFEQyxvQ0FBNkI7QUFBQTtBQUFBO0FBQUE7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiRW1iZWQudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8TGF5b3V0RGlhbG9nXHJcbiAgICB2LW1vZGVsOm9wZW49XCJpc09wZW5cIlxyXG4gICAgbWF4LXdpZHRoPVwibGdcIlxyXG4gICAgOmJ1dHRvbnM9XCJidXR0b25zXCJcclxuICAgIHRpdGxlPVwiRW1iZWQgbW9kZWxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToyOjNcIlxyXG4gID5cclxuICAgIDx0ZW1wbGF0ZSB2LWlmPVwiY2FuR2VuZXJhdGVFbWJlZFwiPlxyXG4gICAgICA8Q29tbW9uQWxlcnRcclxuICAgICAgICB2LWlmPVwibXVsdGlwbGVWZXJzaW9uZWRSZXNvdXJjZXNcIlxyXG4gICAgICAgIGNsYXNzPVwibWItNFwiXHJcbiAgICAgICAgY29sb3I9XCJpbmZvXCJcclxuICAgICAgICBzaXplPVwieHNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5OjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHRlbXBsYXRlICN0aXRsZT5Zb3UgYXJlIGVtYmVkZGluZyBhIHNwZWNpZmljIHZlcnNpb248L3RlbXBsYXRlPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSAjZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8cCBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxNzoxMVwiPlxyXG4gICAgICAgICAgICBBbnlvbmUgd2l0aCB0aGlzIGVtYmVkIGxpbmsgY2FuIHZpZXcgeW91ciBtb2RlbCBkYXRhLiBCZSBjYXJlZnVsIHdoZXJlIHlvdVxyXG4gICAgICAgICAgICBzaGFyZSBpdCFcclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L0NvbW1vbkFsZXJ0PlxyXG5cclxuICAgICAgPENvbW1vbkFsZXJ0XHJcbiAgICAgICAgdi1pZj1cIiFpc1B1YmxpY1Byb2plY3QgJiYgY2FuQ3JlYXRlRW1iZWRUb2tlbnNcIlxyXG4gICAgICAgIGNsYXNzPVwibWItNFwiXHJcbiAgICAgICAgY29sb3I9XCJpbmZvXCJcclxuICAgICAgICBzaXplPVwiMnhzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6MjQ6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8dGVtcGxhdGUgI3RpdGxlPlxyXG4gICAgICAgICAgWW91IGFyZSBlbWJlZGRpbmcgYVxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb3dlcmNhc2VcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTozMjoxMVwiPnt7IHByb2plY3RWaXNpYmlsaXR5IH19PC9zcGFuPlxyXG4gICAgICAgICAgcHJvamVjdFxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPHRlbXBsYXRlICNkZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDxwIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjM2OjExXCI+XHJcbiAgICAgICAgICAgIEFueW9uZSB3aXRoIHRoaXMgZW1iZWQgbGluayBjYW4gdmlldyB5b3VyIG1vZGVsLCBiZSBjYXJlZnVsIHdoZXJlIHlvdSBzaGFyZVxyXG4gICAgICAgICAgICBpdC5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L0NvbW1vbkFsZXJ0PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbGc6ZmxleC1yb3cgZ2FwLTggbWItNlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQzOjdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG9yZGVyLTEgbGc6b3JkZXItMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQ0OjlcIj5cclxuICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtaGVhZGluZy1zbSB0ZXh0LWZvcmVncm91bmQtMiBtYi0xIG1sLTAuNVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQ1OjExXCI+RW1iZWQgY29kZTwvaDQ+XHJcbiAgICAgICAgICA8Rm9ybUNsaXBib2FyZElucHV0IDp2YWx1ZT1cImlmcmFtZUNvZGVcIiBpcy1tdWx0aWxpbmUgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NDY6MTFcIiAvPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJvZHkteHMgdGV4dC1mb3JlZ3JvdW5kLTIgbXQtMiBtYi01IG1sLTAuNVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQ3OjExXCI+XHJcbiAgICAgICAgICAgIENvcHkgdGhpcyBjb2RlIHRvIGVtYmVkIHlvdXIgbW9kZWwgaW4gYSB3ZWJwYWdlIG9yIGRvY3VtZW50LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPGg0IGNsYXNzPVwidGV4dC1oZWFkaW5nLXNtIHRleHQtZm9yZWdyb3VuZC0yIG1iLTEgbWwtMC41XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NTA6MTFcIj5FbWJlZCBVUkw8L2g0PlxyXG4gICAgICAgICAgPEZvcm1DbGlwYm9hcmRJbnB1dCBjbGFzcz1cIm1iLTRcIiA6dmFsdWU9XCJ1cGRhdGVkVXJsXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NTE6MTFcIiAvPlxyXG4gICAgICAgICAgPExheW91dERpYWxvZ1NlY3Rpb25cclxuICAgICAgICAgICAgdi1tb2RlbDpvcGVuPVwiYXJlT3B0aW9uc0V4cGFuZGVkXCJcclxuICAgICAgICAgICAgYm9yZGVyLWJcclxuICAgICAgICAgICAgYm9yZGVyLXRcclxuICAgICAgICAgICAgdGl0bGU9XCJPcHRpb25zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NTI6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMS41IHNtOmdhcC0yIHRleHQtYm9keS14cyBjdXJzb3ItZGVmYXVsdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjU4OjEzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiYXJlU2F2ZWRWaWV3c0VuYWJsZWRcIiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo1OToxNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm9wdGlvbi1zYXZlZC12aWV3XCIgOmNsYXNzPVwib3B0aW9uTGFiZWxDbGFzc2VzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NjA6MTdcIj5cclxuICAgICAgICAgICAgICAgICAgPEZvcm1DaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwib3B0aW9uLXNhdmVkLXZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzaG91bGRFbWJlZFNhdmVkVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIkVtYmVkIGEgc2F2ZWQgdmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZS1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo2MToxOVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjY4OjE5XCI+RW1iZWQgYSBzYXZlZCB2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0U2F2ZWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRFbWJlZFNhdmVkVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJlbWJlZGRlZFNhdmVkVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgIDpwcm9qZWN0LWlkPVwicHJvcHMucHJvamVjdC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgIDpyZXNvdXJjZS1pZC1zdHJpbmc9XCJyb3V0ZU1vZGVsSWRcIlxyXG4gICAgICAgICAgICAgICAgICA6b25seS12aXNpYmlsaXR5PVwiU2F2ZWRWaWV3VmlzaWJpbGl0eS5QdWJsaWNcIlxyXG4gICAgICAgICAgICAgICAgICA6c2hvdy1sYWJlbD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgbW91bnQtbWVudS1vbi1ib2R5XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF4LXctc21cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo3MDoxN1wiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCJvcHRpb24gaW4gZW1iZWREaWFsb2dPcHRpb25zXCIgOmtleT1cIm9wdGlvbi5pZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjgxOjE1XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cImBvcHRpb24tJHtvcHRpb24uaWR9YFwiIDpjbGFzcz1cIm9wdGlvbkxhYmVsQ2xhc3Nlc1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjgyOjE3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxGb3JtQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICA6aWQ9XCJgb3B0aW9uLSR7b3B0aW9uLmlkfWBcIlxyXG4gICAgICAgICAgICAgICAgICAgIDptb2RlbC12YWx1ZT1cIm9wdGlvbi52YWx1ZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOm5hbWU9XCJvcHRpb24ubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGUtbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpID0+IHVwZGF0ZU9wdGlvbihvcHRpb24udmFsdWUsIG5ld1ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjgzOjE5XCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6OTM6MTlcIj57eyBvcHRpb24ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgdi1pZj1cImlzV29ya3NwYWNlc0VuYWJsZWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5NjoxNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XCJgb3B0aW9uLWhpZGUtbG9nb2BcIiA6Y2xhc3M9XCJvcHRpb25MYWJlbENsYXNzZXNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5NzoxN1wiPlxyXG4gICAgICAgICAgICAgICAgICA8Rm9ybUNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJvcHRpb24taGlkZS1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaGlkZVNwZWNrbGVCcmFuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIkhpZGUgU3BlY2tsZSBsb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICBoaWRlLWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNhbkVkaXRFbWJlZE9wdGlvbnM/LmF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5ODoxOVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0wLjVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMDk6MTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgOmtleT1cImBoaWRlLWJyYW5kaW5nLXRvb2x0aXAtJHt3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZH1gXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHYtdGlwcHk9XCJoaWRlU3BlY2tsZUJyYW5kaW5nVG9vbHRpcFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjExMDoyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgSGlkZSBTcGVja2xlIGxvZ29cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWNhbkVkaXRFbWJlZE9wdGlvbnM/LmF1dGhvcml6ZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuRWRpdEVtYmVkT3B0aW9ucz8uY29kZSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnV29ya3NwYWNlUGxhbk5vRmVhdHVyZUFjY2Vzc0Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTJ4cyB0ZXh0LWZvcmVncm91bmQtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjExNjoyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBidXNpbmVzcyBwbGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8TnV4dExpbmtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj1cImlzQWRtaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6dG89XCJzZXR0aW5nc1dvcmtzcGFjZVJvdXRlcy5iaWxsaW5nLnJvdXRlKHdvcmtzcGFjZVNsdWcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMjU6MjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlIG5vd1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9OdXh0TGluaz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJoaWRlU3BlY2tsZUJyYW5kaW5nICYmICF3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS0yeHMgdGV4dC1mb3JlZ3JvdW5kLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMzM6MjFcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIFRpcDogWW91IGNhbiBhbHNvIGhpZGUgdGhlIGxvZ28gZm9yIGFsbCBlbWJlZHMgaW5cclxuICAgICAgICAgICAgICAgICAgICAgIDxOdXh0TGlua1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6dG89XCJzZXR0aW5nc1dvcmtzcGFjZVJvdXRlcy5nZW5lcmFsLnJvdXRlKHdvcmtzcGFjZVNsdWcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMzg6MjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2Ugc2V0dGluZ3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L051eHRMaW5rPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvTGF5b3V0RGlhbG9nU2VjdGlvbj5cclxuICAgICAgICAgIDxMYXlvdXREaWFsb2dTZWN0aW9uXHJcbiAgICAgICAgICAgIHYtaWY9XCIhaXNTbWFsbGVyT3JFcXVhbFNtXCJcclxuICAgICAgICAgICAgbGF6eS1sb2FkXHJcbiAgICAgICAgICAgIGJvcmRlci1iXHJcbiAgICAgICAgICAgIHRpdGxlPVwiUHJldmlld1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjE1MToxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxQcm9qZWN0TW9kZWxQYWdlRGlhbG9nRW1iZWRJZnJhbWVcclxuICAgICAgICAgICAgICB2LWlmPVwiIWlzU21hbGxlck9yRXF1YWxTbVwiXHJcbiAgICAgICAgICAgICAgOnNyYz1cInVwZGF0ZWRVcmxcIlxyXG4gICAgICAgICAgICAgIHRpdGxlPVwiUHJldmlld1wiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCI2MDBcIlxyXG4gICAgICAgICAgICAgIGhlaWdodD1cIjQwMFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaHJpbmstMCB3LVs2MDBweF0gaC1bNDAwcHhdIG14LWF1dG8gYm9yZGVyIGJvcmRlci1vdXRsaW5lLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxNTc6MTNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9MYXlvdXREaWFsb2dTZWN0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICA8Q29tbW9uQWxlcnQgY29sb3I9XCJpbmZvXCIgc2l6ZT1cInhzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6MTcwOjdcIj5cclxuICAgICAgICA8dGVtcGxhdGUgI3RpdGxlPlxyXG4gICAgICAgICAgQ2Fubm90IGVtYmVkXHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvd2VyY2FzZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjE3MzoxMVwiPid7eyBwcm9qZWN0LnZpc2liaWxpdHkgfX0nPC9zcGFuPlxyXG4gICAgICAgICAgcHJvamVjdFxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPHRlbXBsYXRlICNkZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDxwIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjE3NzoxMVwiPlxyXG4gICAgICAgICAgICB7eyBjYW50R2VuZXJhdGVEaWFsb2dEZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDwvQ29tbW9uQWxlcnQ+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gIDwvTGF5b3V0RGlhbG9nPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHtcclxuICBTYXZlZFZpZXdWaXNpYmlsaXR5LFxyXG4gIHR5cGUgRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudCxcclxuICB0eXBlIFByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdEZyYWdtZW50XHJcbn0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZUNsaXBib2FyZCB9IGZyb20gJ35+L2NvbXBvc2FibGVzL2Jyb3dzZXInXHJcbmltcG9ydCB7IFNwZWNrbGVWaWV3ZXIsIFJvbGVzIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsJ1xyXG5pbXBvcnQgdHlwZSB7IExheW91dERpYWxvZ0J1dHRvbiB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IHNldHRpbmdzV29ya3NwYWNlUm91dGVzIH0gZnJvbSAnfi9saWIvY29tbW9uL2hlbHBlcnMvcm91dGUnXHJcbmltcG9ydCB7IHVzZUNyZWF0ZUVtYmVkVG9rZW4gfSBmcm9tICd+fi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvdG9rZW5NYW5hZ2VtZW50J1xyXG5pbXBvcnQge1xyXG4gIFN1cHBvcnRlZFByb2plY3RWaXNpYmlsaXR5LFxyXG4gIGNhc3RUb1N1cHBvcnRlZFZpc2liaWxpdHlcclxufSBmcm9tICd+L2xpYi9wcm9qZWN0cy9oZWxwZXJzL3Zpc2liaWxpdHknXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuaW1wb3J0IHsgdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy9nZW5lcmFsJ1xyXG5cclxuZ3JhcGhxbChgXHJcbiAgZnJhZ21lbnQgUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xyXG4gICAgaWRcclxuICAgIHZpc2liaWxpdHlcclxuICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgY2FuQ3JlYXRlRW1iZWRUb2tlbnMge1xyXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd29ya3NwYWNlIHtcclxuICAgICAgaWRcclxuICAgICAgc2x1Z1xyXG4gICAgICByb2xlXHJcbiAgICAgIGVtYmVkT3B0aW9ucyB7XHJcbiAgICAgICAgaGlkZVNwZWNrbGVCcmFuZGluZ1xyXG4gICAgICB9XHJcbiAgICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgICBjYW5FZGl0RW1iZWRPcHRpb25zIHtcclxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICBwcm9qZWN0OiBQcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RGcmFnbWVudFxyXG4gIG1vZGVsSWQ/OiBzdHJpbmdcclxuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcclxufT4oKVxyXG5cclxuY29uc3QgaXNPcGVuID0gZGVmaW5lTW9kZWw8Ym9vbGVhbj4oJ29wZW4nLCB7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbmNvbnN0IGFyZU9wdGlvbnNFeHBhbmRlZCA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IG1peHBhbmVsID0gdXNlTWl4cGFuZWwoKVxyXG5jb25zdCByb3V0ZSA9IHVzZVJvdXRlKClcclxuY29uc3QgeyBjb3B5IH0gPSB1c2VDbGlwYm9hcmQoKVxyXG5jb25zdCB7XHJcbiAgcHVibGljOiB7IGJhc2VVcmwgfVxyXG59ID0gdXNlUnVudGltZUNvbmZpZygpXHJcbmNvbnN0IGNyZWF0ZUVtYmVkVG9rZW4gPSB1c2VDcmVhdGVFbWJlZFRva2VuKClcclxuXHJcbmNvbnN0IGFyZVNhdmVkVmlld3NFbmFibGVkID0gdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQoKVxyXG5jb25zdCBpc1dvcmtzcGFjZXNFbmFibGVkID0gdXNlSXNXb3Jrc3BhY2VzRW5hYmxlZCgpXHJcbmNvbnN0IHsgaXNTbWFsbGVyT3JFcXVhbFNtIH0gPSB1c2VJc1NtYWxsZXJPckVxdWFsVGhhbkJyZWFrcG9pbnQoKVxyXG5cclxuY29uc3QgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kID0gcmVmKGZhbHNlKVxyXG5jb25zdCBoaWRlVmlld2VyQ29udHJvbHMgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGhpZGVTZWxlY3Rpb25JbmZvID0gcmVmKGZhbHNlKVxyXG5jb25zdCBkaXNhYmxlTW9kZWxMaW5rID0gcmVmKGZhbHNlKVxyXG5jb25zdCBwcmV2ZW50U2Nyb2xsaW5nID0gcmVmKGZhbHNlKVxyXG5jb25zdCBtYW51YWxseUxvYWRNb2RlbCA9IHJlZihmYWxzZSlcclxuY29uc3QgaGlkZVNwZWNrbGVCcmFuZGluZyA9IHJlZihmYWxzZSlcclxuY29uc3QgZW1iZWRUb2tlbiA9IHJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxyXG5jb25zdCBzaG91bGRFbWJlZFNhdmVkVmlldyA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IGVtYmVkZGVkU2F2ZWRWaWV3ID0gZGVmaW5lTW9kZWw8Rm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudD4oJ3ZpZXcnLCB7XHJcbiAgcmVxdWlyZWQ6IGZhbHNlXHJcbn0pXHJcblxyXG5jb25zdCBvcHRpb25MYWJlbENsYXNzZXMgPSBjb21wdXRlZChcclxuICAoKSA9PiAnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgY3Vyc29yLXBvaW50ZXIgbWF4LXctbWF4J1xyXG4pXHJcbmNvbnN0IGlzQWRtaW4gPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5wcm9qZWN0LndvcmtzcGFjZT8ucm9sZSA9PT0gUm9sZXMuV29ya3NwYWNlLkFkbWluKVxyXG5cclxuY29uc3Qgcm91dGVNb2RlbElkID0gY29tcHV0ZWQoKCkgPT4gcm91dGUucGFyYW1zLm1vZGVsSWQgYXMgc3RyaW5nKVxyXG5cclxuY29uc3QgcGFyc2VkUmVzb3VyY2VzID0gY29tcHV0ZWQoKCkgPT5cclxuICBTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLnBhcnNlVXJsUGFyYW1ldGVycyhyb3V0ZU1vZGVsSWQudmFsdWUpXHJcbilcclxuXHJcbmNvbnN0IG11bHRpcGxlVmVyc2lvbmVkUmVzb3VyY2VzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBwYXJzZWRSZXNvdXJjZXMudmFsdWUuZmlsdGVyKFxyXG4gICAgICAocmVzb3VyY2UpID0+XHJcbiAgICAgICAgU3BlY2tsZVZpZXdlci5WaWV3ZXJSb3V0ZS5pc01vZGVsUmVzb3VyY2UocmVzb3VyY2UpICYmXHJcbiAgICAgICAgcmVzb3VyY2UudmVyc2lvbklkICE9PSB1bmRlZmluZWRcclxuICAgICkubGVuZ3RoID4gMVxyXG4gIClcclxufSlcclxuXHJcbmNvbnN0IHVwZGF0ZWRVcmwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL3Byb2plY3RzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3BzLnByb2plY3QuaWQpfWAsIGJhc2VVcmwpXHJcblxyXG4gIHVybC5wYXRobmFtZSArPSAnL21vZGVscy8nXHJcblxyXG4gIC8vIFVzZSBwcm9wcy5tb2RlbElkIGFuZCBwcm9wcy52ZXJzaW9uSWQgaWYgcHJvdmlkZWRcclxuICBpZiAocHJvcHMubW9kZWxJZCkge1xyXG4gICAgbGV0IG1vZGVsUGF0aCA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wcy5tb2RlbElkKVxyXG4gICAgaWYgKHByb3BzLnZlcnNpb25JZCkge1xyXG4gICAgICBtb2RlbFBhdGggKz0gYEAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wcy52ZXJzaW9uSWQpfWBcclxuICAgIH1cclxuICAgIHVybC5wYXRobmFtZSArPSBtb2RlbFBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gT3RoZXJ3aXNlLCB1c2Ugcm91dGVNb2RlbElkIGRpcmVjdGx5XHJcbiAgICB1cmwucGF0aG5hbWUgKz0gcm91dGVNb2RlbElkLnZhbHVlXHJcbiAgfVxyXG5cclxuICAvLyBBZGQgdG9rZW4gcGFyYW1ldGVyIGlmIGVtYmVkIHRva2VuIGV4aXN0c1xyXG4gIGlmIChlbWJlZFRva2VuLnZhbHVlKSB7XHJcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnZW1iZWRUb2tlbicsIGVtYmVkVG9rZW4udmFsdWUpXHJcbiAgfVxyXG5cclxuICAvLyBDb25zdHJ1Y3QgdGhlIGVtYmVkIG9wdGlvbnMgYXMgYSBoYXNoIGZyYWdtZW50XHJcbiAgY29uc3QgZW1iZWRPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaXNFbmFibGVkOiB0cnVlIH1cclxuICBlbWJlZERpYWxvZ09wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICBpZiAob3B0aW9uLnZhbHVlLnZhbHVlKSB7XHJcbiAgICAgIGVtYmVkT3B0aW9uc1tvcHRpb24uaWRdID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIGlmIChcclxuICAgIGhpZGVTcGVja2xlQnJhbmRpbmcudmFsdWUgJiZcclxuICAgIGlzV29ya3NwYWNlc0VuYWJsZWQudmFsdWUgJiZcclxuICAgICF3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZC52YWx1ZVxyXG4gICkge1xyXG4gICAgZW1iZWRPcHRpb25zWydoaWRlU3BlY2tsZUJyYW5kaW5nJ10gPSB0cnVlXHJcbiAgfVxyXG5cclxuICAvLyBTZXJpYWxpemUgdGhlIGVtYmVkT3B0aW9ucyBpbnRvIGEgaGFzaCBmcmFnbWVudFxyXG4gIGNvbnN0IGhhc2hGcmFnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShlbWJlZE9wdGlvbnMpKVxyXG4gIHVybC5oYXNoID0gYGVtYmVkPSR7aGFzaEZyYWdtZW50fWBcclxuXHJcbiAgLy8gRW1iZWQgdmlldz9cclxuICBjb25zdCBzYXZlZFZpZXdTZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxyXG4gIGlmIChzaG91bGRFbWJlZFNhdmVkVmlldy52YWx1ZSAmJiBlbWJlZGRlZFNhdmVkVmlldy52YWx1ZSkge1xyXG4gICAgc2F2ZWRWaWV3U2V0dGluZ3NbJ2lkJ10gPSBlbWJlZGRlZFNhdmVkVmlldy52YWx1ZS5pZFxyXG4gIH1cclxuXHJcbiAgaWYgKE9iamVjdC5rZXlzKHNhdmVkVmlld1NldHRpbmdzKS5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBzYXZlZFZpZXdGcmFnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzYXZlZFZpZXdTZXR0aW5ncykpXHJcbiAgICB1cmwuaGFzaCArPSBgJnNhdmVkVmlldz0ke3NhdmVkVmlld0ZyYWdtZW50fWBcclxuICB9XHJcblxyXG4gIHJldHVybiB1cmwudG9TdHJpbmcoKVxyXG59KVxyXG5cclxuY29uc3QgaWZyYW1lQ29kZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gYDxpZnJhbWUgdGl0bGU9XCJTcGVja2xlXCIgc3JjPVwiJHt1cGRhdGVkVXJsLnZhbHVlfVwiIHdpZHRoPVwiNjAwXCIgaGVpZ2h0PVwiNDAwXCIgZnJhbWVib3JkZXI9XCIwXCI+PC9pZnJhbWU+YFxyXG59KVxyXG5cclxuY29uc3QgYnV0dG9ucyA9IGNvbXB1dGVkKCgpOiBMYXlvdXREaWFsb2dCdXR0b25bXSA9PiBbXHJcbiAge1xyXG4gICAgdGV4dDogJ0Nsb3NlJyxcclxuICAgIHByb3BzOiB7IGNvbG9yOiAnb3V0bGluZScgfSxcclxuICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2VcclxuICAgIH1cclxuICB9LFxyXG4gIC4uLihpc1B1YmxpY1Byb2plY3QudmFsdWUgfHwgKCFpc1B1YmxpY1Byb2plY3QudmFsdWUgJiYgY2FuQ3JlYXRlRW1iZWRUb2tlbnMudmFsdWUpXHJcbiAgICA/IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZXh0OiAnQ29weSBlbWJlZCBjb2RlJyxcclxuICAgICAgICAgIHByb3BzOiB7fSxcclxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgaGFuZGxlRW1iZWRDb2RlQ29weShpZnJhbWVDb2RlLnZhbHVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgOiBbXSlcclxuXSlcclxuXHJcbmNvbnN0IHdvcmtzcGFjZVNsdWcgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHByb3BzLnByb2plY3Qud29ya3NwYWNlPy5zbHVnXHJcbn0pXHJcbmNvbnN0IGNhbkVkaXRFbWJlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHByb3BzLnByb2plY3Qud29ya3NwYWNlPy5wZXJtaXNzaW9ucz8uY2FuRWRpdEVtYmVkT3B0aW9uc1xyXG59KVxyXG5jb25zdCBjYW5DcmVhdGVFbWJlZFRva2VucyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gcHJvcHMucHJvamVjdC5wZXJtaXNzaW9ucz8uY2FuQ3JlYXRlRW1iZWRUb2tlbnM/LmF1dGhvcml6ZWRcclxufSlcclxuY29uc3QgcHJvamVjdFZpc2liaWxpdHkgPSBjb21wdXRlZCgoKSA9PlxyXG4gIGNhc3RUb1N1cHBvcnRlZFZpc2liaWxpdHkocHJvcHMucHJvamVjdC52aXNpYmlsaXR5KVxyXG4pXHJcbmNvbnN0IGlzUHVibGljUHJvamVjdCA9IGNvbXB1dGVkKFxyXG4gICgpID0+IHByb2plY3RWaXNpYmlsaXR5LnZhbHVlID09PSBTdXBwb3J0ZWRQcm9qZWN0VmlzaWJpbGl0eS5QdWJsaWNcclxuKVxyXG5jb25zdCB3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoIWlzV29ya3NwYWNlc0VuYWJsZWQudmFsdWUpIHJldHVybiBmYWxzZVxyXG4gIHJldHVybiBwcm9wcy5wcm9qZWN0LndvcmtzcGFjZT8uZW1iZWRPcHRpb25zPy5oaWRlU3BlY2tsZUJyYW5kaW5nXHJcbn0pXHJcbmNvbnN0IGhpZGVTcGVja2xlQnJhbmRpbmdUb29sdGlwID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmICghaXNXb3Jrc3BhY2VzRW5hYmxlZC52YWx1ZSkgcmV0dXJuICcnXHJcbiAgaWYgKHdvcmtzcGFjZUhpZGVTcGVja2xlQnJhbmRpbmdFbmFibGVkLnZhbHVlKSB7XHJcbiAgICByZXR1cm4gJ1NwZWNrbGUgYnJhbmRpbmcgaXMgZGlzYWJsZWQgZm9yIGFsbCBlbWJlZHMgaW4gdGhpcyB3b3Jrc3BhY2UnXHJcbiAgfVxyXG4gIHJldHVybiAnJ1xyXG59KVxyXG5jb25zdCBjYW5HZW5lcmF0ZUVtYmVkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBpc1B1YmxpY1Byb2plY3QudmFsdWUgfHwgKCFpc1B1YmxpY1Byb2plY3QudmFsdWUgJiYgY2FuQ3JlYXRlRW1iZWRUb2tlbnMudmFsdWUpXHJcbn0pXHJcbmNvbnN0IGNhbnRHZW5lcmF0ZURpYWxvZ0Rlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmIChcclxuICAgIHByb3BzLnByb2plY3QucGVybWlzc2lvbnM/LmNhbkNyZWF0ZUVtYmVkVG9rZW5zPy5jb2RlID09PSAnV29ya3NwYWNlTm9GZWF0dXJlQWNjZXNzJ1xyXG4gICkge1xyXG4gICAgcmV0dXJuIGBFbWJlZGRpbmcgJHtwcm9wcy5wcm9qZWN0LnZpc2liaWxpdHkudG9Mb3dlckNhc2UoKX0gcHJvamVjdHMgaXMgbm90IGF2YWlsYWJsZSBvbiB5b3VyIHBsYW4uIFVwZ3JhZGUgeW91ciB3b3Jrc3BhY2UgdG8gZ2V0IGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuYFxyXG4gIH1cclxuICByZXR1cm4gYFRoZSB2aXNpYmlsaXR5IG9mIHRoaXMgcHJvamVjdCBpcyBzZXQgdG8gJyR7cHJvcHMucHJvamVjdC52aXNpYmlsaXR5LnRvTG93ZXJDYXNlKCl9Jy4gUGxlYXNlIGNvbnRhY3QgdGhlIHByb2plY3Qgb3duZXIgdG8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9yIGdlbmVyYXRlIGFuIGVtYmVkIGxpbmsuYFxyXG59KVxyXG5cclxuY29uc3QgaGFuZGxlRW1iZWRDb2RlQ29weSA9IGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgYXdhaXQgY29weSh2YWx1ZSwge1xyXG4gICAgc3VjY2Vzc01lc3NhZ2U6ICdFbWJlZCBjb2RlIGNvcGllZCB0byBjbGlwYm9hcmQnLFxyXG4gICAgZmFpbHVyZU1lc3NhZ2U6ICdGYWlsZWQgdG8gY29weSBlbWJlZCBjb2RlIHRvIGNsaXBib2FyZCdcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCB1cGRhdGVPcHRpb24gPSAob3B0aW9uUmVmOiBSZWY8Ym9vbGVhbj4sIG5ld1ZhbHVlOiB1bmtub3duKSA9PiB7XHJcbiAgb3B0aW9uUmVmLnZhbHVlID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISFuZXdWYWx1ZVxyXG59XHJcblxyXG5jb25zdCBlbWJlZERpYWxvZ09wdGlvbnMgPSBbXHJcbiAge1xyXG4gICAgaWQ6ICdpc1RyYW5zcGFyZW50JyxcclxuICAgIGxhYmVsOiAnVHJhbnNwYXJlbnQgYmFja2dyb3VuZCcsXHJcbiAgICB2YWx1ZTogdHJhbnNwYXJlbnRCYWNrZ3JvdW5kXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogJ2hpZGVDb250cm9scycsXHJcbiAgICBsYWJlbDogJ0hpZGUgdmlld2VyIGNvbnRyb2xzJyxcclxuICAgIHZhbHVlOiBoaWRlVmlld2VyQ29udHJvbHNcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnaGlkZVNlbGVjdGlvbkluZm8nLFxyXG4gICAgbGFiZWw6ICdIaWRlIHRoZSBzZWxlY3Rpb24gaW5mbyBwYW5lbCcsXHJcbiAgICB2YWx1ZTogaGlkZVNlbGVjdGlvbkluZm9cclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnZGlzYWJsZU1vZGVsTGluaycsXHJcbiAgICBsYWJlbDogJ05vIGxpbmsgYmFjayB0byB3ZWIgdmlld2VyJyxcclxuICAgIHZhbHVlOiBkaXNhYmxlTW9kZWxMaW5rXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogJ25vU2Nyb2xsJyxcclxuICAgIGxhYmVsOiAnUHJldmVudCBzY3JvbGxpbmcgKHpvb21pbmcpJyxcclxuICAgIHZhbHVlOiBwcmV2ZW50U2Nyb2xsaW5nXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogJ21hbnVhbExvYWQnLFxyXG4gICAgbGFiZWw6ICdMb2FkIG1vZGVsIG1hbnVhbGx5JyxcclxuICAgIHZhbHVlOiBtYW51YWxseUxvYWRNb2RlbFxyXG4gIH1cclxuXVxyXG5cclxud2F0Y2goXHJcbiAgKCkgPT4gcHJvcHMucHJvamVjdC53b3Jrc3BhY2U/LmVtYmVkT3B0aW9ucz8uaGlkZVNwZWNrbGVCcmFuZGluZyxcclxuICAoKSA9PiB7XHJcbiAgICBpZiAoaXNXb3Jrc3BhY2VzRW5hYmxlZC52YWx1ZSkge1xyXG4gICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nLnZhbHVlID1cclxuICAgICAgICBwcm9wcy5wcm9qZWN0LndvcmtzcGFjZT8uZW1iZWRPcHRpb25zPy5oaWRlU3BlY2tsZUJyYW5kaW5nID8/IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICB7IGltbWVkaWF0ZTogdHJ1ZSB9XHJcbilcclxuXHJcbndhdGNoKFxyXG4gIGlzT3BlbixcclxuICBhc3luYyAobmV3VmFsdWUpID0+IHtcclxuICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICBtaXhwYW5lbC50cmFjaygnRW1iZWQgRGlhbG9nIE9wZW5lZCcsIHtcclxuICAgICAgICBwcm9qZWN0SWQ6IHByb3BzLnByb2plY3QuaWQsXHJcbiAgICAgICAgdmlzaWJpbGl0eTogcHJvamVjdFZpc2liaWxpdHkudmFsdWVcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmIChjYW5DcmVhdGVFbWJlZFRva2Vucy52YWx1ZSkge1xyXG4gICAgICAgIG1peHBhbmVsLnRyYWNrKCdFbWJlZCBUb2tlbiBDcmVhdGVkJywge1xyXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0LmlkLFxyXG4gICAgICAgICAgdmlzaWJpbGl0eTogcHJvamVjdFZpc2liaWxpdHkudmFsdWVcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGNyZWF0ZUVtYmVkVG9rZW4oe1xyXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0LmlkLFxyXG4gICAgICAgICAgcmVzb3VyY2VJZFN0cmluZzogcm91dGVNb2RlbElkLnZhbHVlXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICBlbWJlZFRva2VuLnZhbHVlID0gdG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG4gIHsgaW1tZWRpYXRlOiB0cnVlIH1cclxuKVxyXG5cclxud2F0Y2goZW1iZWRkZWRTYXZlZFZpZXcsIChuZXdWYWwsIG9sZFZhbCkgPT4ge1xyXG4gIGlmIChuZXdWYWwpIHtcclxuICAgIHNob3VsZEVtYmVkU2F2ZWRWaWV3LnZhbHVlID0gdHJ1ZVxyXG5cclxuICAgIGlmICghb2xkVmFsIHx8IG5ld1ZhbC5pZCAhPT0gb2xkVmFsLmlkKSB7XHJcbiAgICAgIGFyZU9wdGlvbnNFeHBhbmRlZC52YWx1ZSA9IHRydWVcclxuICAgIH1cclxuICB9XHJcbn0pXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZSJ9