377 lines
34 KiB
Plaintext
377 lines
34 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/projects/ProjectDashboardCard.vue");import { CommonBadge as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { default as __nuxt_component_1 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29";
|
|
import { UserAvatarGroup 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/workspace/Avatar.vue";
|
|
import { default as __nuxt_component_4 } from "/_nuxt/components/project/page/models/Card.vue";
|
|
import { default as __nuxt_component_5 } from "/_nuxt/components/project/CardImportFileArea.vue";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createBlock as __createBlock,createVNode as __createVNode,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode } 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 _createBlock(...args) { return _interopVNode(__createBlock(...args)) }
|
|
function _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
|
|
/* Injection by vite-plugin-vue-inspector End */
|
|
import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { Roles } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
|
|
import { FormButton } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { projectRoute, allProjectModelsRoute } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import { useGeneralProjectPageUpdateTracking } from "/_nuxt/lib/projects/composables/projectPages.ts";
|
|
import { ChevronRightIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_20_solid.js?v=e4f18c29";
|
|
import { workspaceRoute } from "/_nuxt/lib/common/helpers/route.ts";
|
|
import { RoleInfo } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
|
|
import { getModelItemRoute } from "/_nuxt/lib/projects/helpers/models.ts";
|
|
|
|
import { useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
|
|
import { useIsWorkspacesEnabled } from "/_nuxt/composables/globals.ts";
|
|
import { useDateFormatters } from "/_nuxt/composables/dates.ts";
|
|
import { ref, computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ProjectsProjectDashboardCard",
|
|
props: {
|
|
project: { type: Object, required: true },
|
|
showWorkspaceLink: { type: Boolean, required: false },
|
|
workspacePage: { type: Boolean, required: false }
|
|
},
|
|
emits: ["moveProject"],
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
const props = __props;
|
|
const router = useRouter();
|
|
const isWorkspacesEnabled = useIsWorkspacesEnabled();
|
|
const { formattedRelativeDate, formattedFullDate } = useDateFormatters();
|
|
const isModelUploading = ref(false);
|
|
const isOwner = computed(() => props.project.role === Roles.Stream.Owner);
|
|
const projectId = computed(() => props.project.id);
|
|
const updatedAt = computed(() => {
|
|
return {
|
|
full: formattedFullDate(props.project.updatedAt),
|
|
relative: formattedRelativeDate(props.project.updatedAt, { prefix: true })
|
|
};
|
|
});
|
|
useGeneralProjectPageUpdateTracking(
|
|
{ projectId },
|
|
{ redirectHomeOnProjectDeletion: false }
|
|
);
|
|
const teamUsers = computed(() => props.project.team.map((t) => t.user));
|
|
const pendingModels = computed(() => props.project.pendingImportedModels);
|
|
const models = computed(() => {
|
|
const items = props.project.models?.items || [];
|
|
return items.slice(0, Math.max(0, 3 - pendingModels.value.length));
|
|
});
|
|
const hasNoModels = computed(() => !models.value.length && !pendingModels.value.length);
|
|
const modelItemTotalCount = computed(
|
|
() => props.project.models.totalCount + pendingModels.value.length
|
|
);
|
|
const gridClasses = computed(() => [
|
|
// Base classes
|
|
"grid",
|
|
"gap-2",
|
|
"flex-grow",
|
|
"col-span-4",
|
|
"xl:col-span-3",
|
|
"w-full",
|
|
// Grid columns
|
|
"grid-cols-1",
|
|
"sm:grid-cols-2",
|
|
props.workspacePage && "lg:grid-cols-1",
|
|
props.workspacePage ? "xl:grid-cols-2" : "xl:grid-cols-3",
|
|
props.workspacePage && "2xl:grid-cols-3",
|
|
// Visibility rules
|
|
"sm:[&>*:nth-child(n+3)]:hidden",
|
|
props.workspacePage && "lg:[&>*:nth-child(n+2)]:hidden",
|
|
props.workspacePage && "xl:[&>*:nth-child(n+2)]:block",
|
|
!props.workspacePage && "xl:[&>*:nth-child(n+3)]:block",
|
|
props.workspacePage && "2xl:[&>*:nth-child(n+2)]:block",
|
|
"2xl:[&>*:nth-child(n+3)]:block"
|
|
]);
|
|
const onModelUploading = (payload) => {
|
|
isModelUploading.value = payload.isUploading;
|
|
};
|
|
const __returned__ = { props, router, isWorkspacesEnabled, formattedRelativeDate, formattedFullDate, isModelUploading, isOwner, projectId, updatedAt, teamUsers, pendingModels, models, hasNoModels, modelItemTotalCount, gridClasses, onModelUploading, get FormButton() {
|
|
return FormButton;
|
|
}, get projectRoute() {
|
|
return projectRoute;
|
|
}, get allProjectModelsRoute() {
|
|
return allProjectModelsRoute;
|
|
}, get ChevronRightIcon() {
|
|
return ChevronRightIcon;
|
|
}, get workspaceRoute() {
|
|
return workspaceRoute;
|
|
}, get RoleInfo() {
|
|
return RoleInfo;
|
|
}, get getModelItemRoute() {
|
|
return getModelItemRoute;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, withCtx as _withCtx, openBlock as _openBlock, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = { "data-v-inspector": "components/projects/ProjectDashboardCard.vue:2:3" };
|
|
const _hoisted_2 = {
|
|
class: "relative group flex flex-col items-stretch md:flex-row md:space-x-2 border border-outline-3 rounded-xl p-4 transition bg-foundation",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:3:5"
|
|
};
|
|
const _hoisted_3 = {
|
|
class: "w-full md:w-56 flex flex-col justify-between col-span-3 lg:col-span-1 mb-4 md:mb-0 flex-shrink-0 space-y-1 pl-2 pr-6 py-2",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:6:7"
|
|
};
|
|
const _hoisted_4 = {
|
|
class: "flex flex-col",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:9:9"
|
|
};
|
|
const _hoisted_5 = {
|
|
class: "text-body-3xs mb-1 text-foreground-2 select-none",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:24:11"
|
|
};
|
|
const _hoisted_6 = {
|
|
key: 1,
|
|
class: "text-body-3xs capitalize mb-2 text-foreground-2 select-none",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:31:11"
|
|
};
|
|
const _hoisted_7 = {
|
|
class: "pt-3",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:39:9"
|
|
};
|
|
const _hoisted_8 = {
|
|
class: "text-body-2xs text-foreground ml-2 line-clamp-2",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:50:13"
|
|
};
|
|
const _hoisted_9 = {
|
|
class: "flex gap-2",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:54:11"
|
|
};
|
|
const _hoisted_10 = {
|
|
key: 0,
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:67:13"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_CommonBadge = __nuxt_component_0;
|
|
const _component_NuxtLink = __nuxt_component_1;
|
|
const _component_UserAvatarGroup = __nuxt_component_2;
|
|
const _component_WorkspaceAvatar = __nuxt_component_3;
|
|
const _component_ProjectPageModelsCard = __nuxt_component_4;
|
|
const _component_ProjectCardImportFileArea = __nuxt_component_5;
|
|
const _directive_tippy = _resolveDirective("tippy");
|
|
return _openBlock(), _createElementBlock("div", _hoisted_1, [
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_createElementVNode("div", _hoisted_3, [
|
|
_createElementVNode("div", _hoisted_4, [
|
|
!$props.project.workspace?.id && $setup.isWorkspacesEnabled && $setup.isOwner ? _withDirectives((_openBlock(), _createBlock(_component_CommonBadge, {
|
|
key: 0,
|
|
class: "mb-2 max-w-max",
|
|
rounded: "",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:10:11"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[1] || (_cache[1] = [
|
|
_createTextVNode(
|
|
" Ready to move ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
})), [
|
|
[_directive_tippy, "As the project owner you can move this project to a workspace"]
|
|
]) : _createCommentVNode("v-if", true),
|
|
_createVNode(_component_NuxtLink, {
|
|
to: $setup.projectRoute($props.project.id),
|
|
class: "break-words hover:text-primary text-heading mb-2",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:18:11"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createTextVNode(
|
|
_toDisplayString($props.project.name),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to"]),
|
|
_withDirectives((_openBlock(), _createElementBlock("span", _hoisted_5, [
|
|
_createTextVNode(
|
|
" Updated " + _toDisplayString($setup.updatedAt.relative),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
])), [
|
|
[_directive_tippy, $setup.updatedAt.full]
|
|
]),
|
|
$props.project.role ? (_openBlock(), _createElementBlock(
|
|
"span",
|
|
_hoisted_6,
|
|
_toDisplayString($setup.RoleInfo.Stream[$props.project.role].title),
|
|
1
|
|
/* TEXT */
|
|
)) : _createCommentVNode("v-if", true),
|
|
_createVNode(_component_UserAvatarGroup, {
|
|
users: $setup.teamUsers,
|
|
"max-count": 2,
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:37:11"
|
|
}, null, 8, ["users"])
|
|
]),
|
|
_createElementVNode("div", _hoisted_7, [
|
|
$props.project.workspace && $props.showWorkspaceLink && $setup.isWorkspacesEnabled ? (_openBlock(), _createBlock(_component_NuxtLink, {
|
|
key: 0,
|
|
to: $setup.workspaceRoute($props.project.workspace.slug),
|
|
class: "my-3 flex items-center",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:40:11"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createVNode(_component_WorkspaceAvatar, {
|
|
logo: $props.project.workspace.logo,
|
|
name: $props.project.workspace.name,
|
|
size: "sm",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:45:13"
|
|
}, null, 8, ["logo", "name"]),
|
|
_createElementVNode(
|
|
"p",
|
|
_hoisted_8,
|
|
_toDisplayString($props.project.workspace.name),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to"])) : _createCommentVNode("v-if", true),
|
|
_createElementVNode("div", _hoisted_9, [
|
|
_createVNode($setup["FormButton"], {
|
|
to: $setup.allProjectModelsRoute($props.project.id) + "/",
|
|
size: "sm",
|
|
color: "outline",
|
|
"icon-right": $setup.ChevronRightIcon,
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:55:13"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createTextVNode(
|
|
_toDisplayString(`${$setup.modelItemTotalCount} ${$setup.modelItemTotalCount === 1 ? "model" : "models"}`),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["to", "icon-right"]),
|
|
!$props.project.workspace?.id && $setup.isWorkspacesEnabled ? _withDirectives((_openBlock(), _createElementBlock("div", _hoisted_10, [
|
|
_createVNode($setup["FormButton"], {
|
|
size: "sm",
|
|
color: "outline",
|
|
disabled: !$setup.isOwner,
|
|
onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("moveProject")),
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:75:15"
|
|
}, {
|
|
default: _withCtx(() => [..._cache[2] || (_cache[2] = [
|
|
_createTextVNode(
|
|
" Move project ",
|
|
-1
|
|
/* CACHED */
|
|
)
|
|
])]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["disabled"])
|
|
])), [
|
|
[
|
|
_directive_tippy,
|
|
!$setup.isOwner ? "Only the project owner can move this project into a workspace" : void 0
|
|
]
|
|
]) : _createCommentVNode("v-if", true)
|
|
])
|
|
])
|
|
]),
|
|
_createElementVNode(
|
|
"div",
|
|
{
|
|
class: _normalizeClass($setup.gridClasses),
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:87:7"
|
|
},
|
|
[
|
|
!$setup.isModelUploading ? (_openBlock(), _createElementBlock(
|
|
_Fragment,
|
|
{ key: 0 },
|
|
[
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.pendingModels, (pendingModel) => {
|
|
return _openBlock(), _createBlock(_component_ProjectPageModelsCard, {
|
|
key: pendingModel.id,
|
|
model: pendingModel,
|
|
project: $props.project,
|
|
"show-versions": "",
|
|
"project-id": $props.project.id,
|
|
height: "h-48",
|
|
"show-actions": "",
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:89:11"
|
|
}, null, 8, ["model", "project", "project-id"]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
)),
|
|
(_openBlock(true), _createElementBlock(
|
|
_Fragment,
|
|
null,
|
|
_renderList($setup.models, (model) => {
|
|
return _openBlock(), _createBlock(_component_ProjectPageModelsCard, {
|
|
key: model.id,
|
|
model,
|
|
project: $props.project,
|
|
"show-versions": "",
|
|
"show-actions": "",
|
|
"project-id": $props.project.id,
|
|
height: "h-48",
|
|
onClick: ($event) => $setup.router.push($setup.getModelItemRoute(model)),
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:99:11"
|
|
}, null, 8, ["model", "project", "project-id", "onClick"]);
|
|
}),
|
|
128
|
|
/* KEYED_FRAGMENT */
|
|
))
|
|
],
|
|
64
|
|
/* STABLE_FRAGMENT */
|
|
)) : _createCommentVNode("v-if", true),
|
|
$setup.hasNoModels || $setup.isModelUploading ? (_openBlock(), _createBlock(_component_ProjectCardImportFileArea, {
|
|
key: 1,
|
|
"empty-state-variant": "modelsSection",
|
|
project: $props.project,
|
|
class: "h-28 col-span-4",
|
|
onUploading: $setup.onModelUploading,
|
|
"data-v-inspector": "components/projects/ProjectDashboardCard.vue:111:9"
|
|
}, null, 8, ["project"])) : _createCommentVNode("v-if", true)
|
|
],
|
|
2
|
|
/* CLASS */
|
|
)
|
|
])
|
|
]);
|
|
}
|
|
_sfc_main.__hmrId = "00852025";
|
|
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/projects/ProjectDashboardCard.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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ZCxhQVVFO0FBQUEsb0JBUkMsS0FBSyxNQUFNO0FBQUEsb0JBQ1g7QUFBQSxvQkFDQSxTQUFTO0FBQUEsb0JBQ1Y7QUFBQSxvQkFDQTtBQUFBLG9CQUNDLGNBQVksZUFBUTtBQUFBLG9CQUNyQixRQUFPO0FBQUEsb0JBQ04sU0FBSyxZQUFFLGNBQU8sS0FBSyx5QkFBa0IsS0FBSztBQUFBLG9CQUFJLG9CQUFpQjtBQUFBOzs7Ozs7Ozs7VUFJNUQsc0JBQWUseUNBRHZCLGFBTUU7QUFBQTtZQUpBLHVCQUFvQjtBQUFBLFlBQ25CLFNBQVM7QUFBQSxZQUNWLE9BQU07QUFBQSxZQUNMLGFBQVc7QUFBQSxZQUFrQixvQkFBaUI7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiUHJvamVjdERhc2hib2FyZENhcmQudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL1Byb2plY3REYXNoYm9hcmRDYXJkLnZ1ZToyOjNcIj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBncm91cCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggbWQ6ZmxleC1yb3cgbWQ6c3BhY2UteC0yIGJvcmRlciBib3JkZXItb3V0bGluZS0zIHJvdW5kZWQteGwgcC00IHRyYW5zaXRpb24gYmctZm91bmRhdGlvblwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL1Byb2plY3REYXNoYm9hcmRDYXJkLnZ1ZTozOjVcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgbWQ6dy01NiBmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBjb2wtc3Bhbi0zIGxnOmNvbC1zcGFuLTEgbWItNCBtZDptYi0wIGZsZXgtc2hyaW5rLTAgc3BhY2UteS0xIHBsLTIgcHItNiBweS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjY6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL1Byb2plY3REYXNoYm9hcmRDYXJkLnZ1ZTo5OjlcIj5cclxuICAgICAgICAgIDxDb21tb25CYWRnZVxyXG4gICAgICAgICAgICB2LWlmPVwiIXByb2plY3Qud29ya3NwYWNlPy5pZCAmJiBpc1dvcmtzcGFjZXNFbmFibGVkICYmIGlzT3duZXJcIlxyXG4gICAgICAgICAgICB2LXRpcHB5PVwiJ0FzIHRoZSBwcm9qZWN0IG93bmVyIHlvdSBjYW4gbW92ZSB0aGlzIHByb2plY3QgdG8gYSB3b3Jrc3BhY2UnXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtYi0yIG1heC13LW1heFwiXHJcbiAgICAgICAgICAgIHJvdW5kZWQgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjEwOjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgUmVhZHkgdG8gbW92ZVxyXG4gICAgICAgICAgPC9Db21tb25CYWRnZT5cclxuICAgICAgICAgIDxOdXh0TGlua1xyXG4gICAgICAgICAgICA6dG89XCJwcm9qZWN0Um91dGUocHJvamVjdC5pZClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJyZWFrLXdvcmRzIGhvdmVyOnRleHQtcHJpbWFyeSB0ZXh0LWhlYWRpbmcgbWItMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL1Byb2plY3REYXNoYm9hcmRDYXJkLnZ1ZToxODoxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHByb2plY3QubmFtZSB9fVxyXG4gICAgICAgICAgPC9OdXh0TGluaz5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIHYtdGlwcHk9XCJ1cGRhdGVkQXQuZnVsbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTN4cyBtYi0xIHRleHQtZm9yZWdyb3VuZC0yIHNlbGVjdC1ub25lXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjI0OjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgVXBkYXRlZFxyXG4gICAgICAgICAgICB7eyB1cGRhdGVkQXQucmVsYXRpdmUgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIHYtaWY9XCJwcm9qZWN0LnJvbGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS0zeHMgY2FwaXRhbGl6ZSBtYi0yIHRleHQtZm9yZWdyb3VuZC0yIHNlbGVjdC1ub25lXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjMxOjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgUm9sZUluZm8uU3RyZWFtW3Byb2plY3Qucm9sZSBhcyBTdHJlYW1Sb2xlc10udGl0bGUgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxVc2VyQXZhdGFyR3JvdXAgOnVzZXJzPVwidGVhbVVzZXJzXCIgOm1heC1jb3VudD1cIjJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9Qcm9qZWN0RGFzaGJvYXJkQ2FyZC52dWU6Mzc6MTFcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdC0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjM5OjlcIj5cclxuICAgICAgICAgIDxOdXh0TGlua1xyXG4gICAgICAgICAgICB2LWlmPVwicHJvamVjdC53b3Jrc3BhY2UgJiYgc2hvd1dvcmtzcGFjZUxpbmsgJiYgaXNXb3Jrc3BhY2VzRW5hYmxlZFwiXHJcbiAgICAgICAgICAgIDp0bz1cIndvcmtzcGFjZVJvdXRlKHByb2plY3Qud29ya3NwYWNlLnNsdWcpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJteS0zIGZsZXggaXRlbXMtY2VudGVyXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjQwOjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFdvcmtzcGFjZUF2YXRhclxyXG4gICAgICAgICAgICAgIDpsb2dvPVwicHJvamVjdC53b3Jrc3BhY2UubG9nb1wiXHJcbiAgICAgICAgICAgICAgOm5hbWU9XCJwcm9qZWN0LndvcmtzcGFjZS5uYW1lXCJcclxuICAgICAgICAgICAgICBzaXplPVwic21cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9Qcm9qZWN0RGFzaGJvYXJkQ2FyZC52dWU6NDU6MTNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtYm9keS0yeHMgdGV4dC1mb3JlZ3JvdW5kIG1sLTIgbGluZS1jbGFtcC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjUwOjEzXCI+XHJcbiAgICAgICAgICAgICAge3sgcHJvamVjdC53b3Jrc3BhY2UubmFtZSB9fVxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8L051eHRMaW5rPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9Qcm9qZWN0RGFzaGJvYXJkQ2FyZC52dWU6NTQ6MTFcIj5cclxuICAgICAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgICAgICA6dG89XCJhbGxQcm9qZWN0TW9kZWxzUm91dGUocHJvamVjdC5pZCkgKyAnLydcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICA6aWNvbi1yaWdodD1cIkNoZXZyb25SaWdodEljb25cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9Qcm9qZWN0RGFzaGJvYXJkQ2FyZC52dWU6NTU6MTNcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgIGAke21vZGVsSXRlbVRvdGFsQ291bnR9ICR7XHJcbiAgICAgICAgICAgICAgICAgIG1vZGVsSXRlbVRvdGFsQ291bnQgPT09IDEgPyAnbW9kZWwnIDogJ21vZGVscydcclxuICAgICAgICAgICAgICAgIH1gXHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgdi1pZj1cIiFwcm9qZWN0LndvcmtzcGFjZT8uaWQgJiYgaXNXb3Jrc3BhY2VzRW5hYmxlZFwiXHJcbiAgICAgICAgICAgICAgdi10aXBweT1cIlxyXG4gICAgICAgICAgICAgICAgIWlzT3duZXJcclxuICAgICAgICAgICAgICAgICAgPyAnT25seSB0aGUgcHJvamVjdCBvd25lciBjYW4gbW92ZSB0aGlzIHByb2plY3QgaW50byBhIHdvcmtzcGFjZSdcclxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcclxuICAgICAgICAgICAgICBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9Qcm9qZWN0RGFzaGJvYXJkQ2FyZC52dWU6Njc6MTNcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiIWlzT3duZXJcIlxyXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiJGVtaXQoJ21vdmVQcm9qZWN0JylcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9Qcm9qZWN0RGFzaGJvYXJkQ2FyZC52dWU6NzU6MTVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIE1vdmUgcHJvamVjdFxyXG4gICAgICAgICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgOmNsYXNzPVwiZ3JpZENsYXNzZXNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0cy9Qcm9qZWN0RGFzaGJvYXJkQ2FyZC52dWU6ODc6N1wiPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiIWlzTW9kZWxVcGxvYWRpbmdcIj5cclxuICAgICAgICAgIDxQcm9qZWN0UGFnZU1vZGVsc0NhcmRcclxuICAgICAgICAgICAgdi1mb3I9XCJwZW5kaW5nTW9kZWwgaW4gcGVuZGluZ01vZGVsc1wiXHJcbiAgICAgICAgICAgIDprZXk9XCJwZW5kaW5nTW9kZWwuaWRcIlxyXG4gICAgICAgICAgICA6bW9kZWw9XCJwZW5kaW5nTW9kZWxcIlxyXG4gICAgICAgICAgICA6cHJvamVjdD1cInByb2plY3RcIlxyXG4gICAgICAgICAgICBzaG93LXZlcnNpb25zXHJcbiAgICAgICAgICAgIDpwcm9qZWN0LWlkPVwicHJvamVjdC5pZFwiXHJcbiAgICAgICAgICAgIGhlaWdodD1cImgtNDhcIlxyXG4gICAgICAgICAgICBzaG93LWFjdGlvbnMgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlOjg5OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8UHJvamVjdFBhZ2VNb2RlbHNDYXJkXHJcbiAgICAgICAgICAgIHYtZm9yPVwibW9kZWwgaW4gbW9kZWxzXCJcclxuICAgICAgICAgICAgOmtleT1cIm1vZGVsLmlkXCJcclxuICAgICAgICAgICAgOm1vZGVsPVwibW9kZWxcIlxyXG4gICAgICAgICAgICA6cHJvamVjdD1cInByb2plY3RcIlxyXG4gICAgICAgICAgICBzaG93LXZlcnNpb25zXHJcbiAgICAgICAgICAgIHNob3ctYWN0aW9uc1xyXG4gICAgICAgICAgICA6cHJvamVjdC1pZD1cInByb2plY3QuaWRcIlxyXG4gICAgICAgICAgICBoZWlnaHQ9XCJoLTQ4XCJcclxuICAgICAgICAgICAgQGNsaWNrPVwicm91dGVyLnB1c2goZ2V0TW9kZWxJdGVtUm91dGUobW9kZWwpKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL1Byb2plY3REYXNoYm9hcmRDYXJkLnZ1ZTo5OToxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPFByb2plY3RDYXJkSW1wb3J0RmlsZUFyZWFcclxuICAgICAgICAgIHYtaWY9XCJoYXNOb01vZGVscyB8fCBpc01vZGVsVXBsb2FkaW5nXCJcclxuICAgICAgICAgIGVtcHR5LXN0YXRlLXZhcmlhbnQ9XCJtb2RlbHNTZWN0aW9uXCJcclxuICAgICAgICAgIDpwcm9qZWN0PVwicHJvamVjdFwiXHJcbiAgICAgICAgICBjbGFzcz1cImgtMjggY29sLXNwYW4tNFwiXHJcbiAgICAgICAgICBAdXBsb2FkaW5nPVwib25Nb2RlbFVwbG9hZGluZ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3RzL1Byb2plY3REYXNoYm9hcmRDYXJkLnZ1ZToxMTE6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuPHNjcmlwdCBsYW5nPVwidHNcIiBzZXR1cD5cclxuaW1wb3J0IHsgUm9sZXMgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQnXHJcbmltcG9ydCB7IEZvcm1CdXR0b24gfSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgdHlwZSB7IFByb2plY3REYXNoYm9hcmRJdGVtRnJhZ21lbnQgfSBmcm9tICd+fi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgcHJvamVjdFJvdXRlLCBhbGxQcm9qZWN0TW9kZWxzUm91dGUgfSBmcm9tICd+fi9saWIvY29tbW9uL2hlbHBlcnMvcm91dGUnXHJcbmltcG9ydCB7IHVzZUdlbmVyYWxQcm9qZWN0UGFnZVVwZGF0ZVRyYWNraW5nIH0gZnJvbSAnfn4vbGliL3Byb2plY3RzL2NvbXBvc2FibGVzL3Byb2plY3RQYWdlcydcclxuaW1wb3J0IHsgQ2hldnJvblJpZ2h0SWNvbiB9IGZyb20gJ0BoZXJvaWNvbnMvdnVlLzIwL3NvbGlkJ1xyXG5pbXBvcnQgeyB3b3Jrc3BhY2VSb3V0ZSB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL3JvdXRlJ1xyXG5pbXBvcnQgeyBSb2xlSW5mbywgdHlwZSBTdHJlYW1Sb2xlcyB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHR5cGUgeyBGaWxlQXJlYVVwbG9hZGluZ1BheWxvYWQgfSBmcm9tICd+L2xpYi9mb3JtL2hlbHBlcnMvZmlsZVVwbG9hZCdcclxuaW1wb3J0IHsgZ2V0TW9kZWxJdGVtUm91dGUgfSBmcm9tICd+L2xpYi9wcm9qZWN0cy9oZWxwZXJzL21vZGVscydcclxuXHJcbmRlZmluZUVtaXRzPHtcclxuICAoZTogJ21vdmVQcm9qZWN0Jyk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XHJcbiAgcHJvamVjdDogUHJvamVjdERhc2hib2FyZEl0ZW1GcmFnbWVudFxyXG4gIHNob3dXb3Jrc3BhY2VMaW5rPzogYm9vbGVhblxyXG4gIHdvcmtzcGFjZVBhZ2U/OiBib29sZWFuXHJcbn0+KClcclxuXHJcbmNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXHJcbmNvbnN0IGlzV29ya3NwYWNlc0VuYWJsZWQgPSB1c2VJc1dvcmtzcGFjZXNFbmFibGVkKClcclxuY29uc3QgeyBmb3JtYXR0ZWRSZWxhdGl2ZURhdGUsIGZvcm1hdHRlZEZ1bGxEYXRlIH0gPSB1c2VEYXRlRm9ybWF0dGVycygpXHJcblxyXG5jb25zdCBpc01vZGVsVXBsb2FkaW5nID0gcmVmKGZhbHNlKVxyXG5cclxuY29uc3QgaXNPd25lciA9IGNvbXB1dGVkKCgpID0+IHByb3BzLnByb2plY3Qucm9sZSA9PT0gUm9sZXMuU3RyZWFtLk93bmVyKVxyXG5jb25zdCBwcm9qZWN0SWQgPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5wcm9qZWN0LmlkKVxyXG5jb25zdCB1cGRhdGVkQXQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGZ1bGw6IGZvcm1hdHRlZEZ1bGxEYXRlKHByb3BzLnByb2plY3QudXBkYXRlZEF0KSxcclxuICAgIHJlbGF0aXZlOiBmb3JtYXR0ZWRSZWxhdGl2ZURhdGUocHJvcHMucHJvamVjdC51cGRhdGVkQXQsIHsgcHJlZml4OiB0cnVlIH0pXHJcbiAgfVxyXG59KVxyXG5cclxuLy8gVHJhY2tpbmcgdXBkYXRlcyB0byBwcm9qZWN0LCBpdHMgbW9kZWxzIGFuZCB2ZXJzaW9uc1xyXG51c2VHZW5lcmFsUHJvamVjdFBhZ2VVcGRhdGVUcmFja2luZyhcclxuICB7IHByb2plY3RJZCB9LFxyXG4gIHsgcmVkaXJlY3RIb21lT25Qcm9qZWN0RGVsZXRpb246IGZhbHNlIH1cclxuKVxyXG5cclxuY29uc3QgdGVhbVVzZXJzID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMucHJvamVjdC50ZWFtLm1hcCgodCkgPT4gdC51c2VyKSlcclxuY29uc3QgcGVuZGluZ01vZGVscyA9IGNvbXB1dGVkKCgpID0+IHByb3BzLnByb2plY3QucGVuZGluZ0ltcG9ydGVkTW9kZWxzKVxyXG5jb25zdCBtb2RlbHMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgaXRlbXMgPSBwcm9wcy5wcm9qZWN0Lm1vZGVscz8uaXRlbXMgfHwgW11cclxuICByZXR1cm4gaXRlbXMuc2xpY2UoMCwgTWF0aC5tYXgoMCwgMyAtIHBlbmRpbmdNb2RlbHMudmFsdWUubGVuZ3RoKSlcclxufSlcclxuXHJcbmNvbnN0IGhhc05vTW9kZWxzID0gY29tcHV0ZWQoKCkgPT4gIW1vZGVscy52YWx1ZS5sZW5ndGggJiYgIXBlbmRpbmdNb2RlbHMudmFsdWUubGVuZ3RoKVxyXG5jb25zdCBtb2RlbEl0ZW1Ub3RhbENvdW50ID0gY29tcHV0ZWQoXHJcbiAgKCkgPT4gcHJvcHMucHJvamVjdC5tb2RlbHMudG90YWxDb3VudCArIHBlbmRpbmdNb2RlbHMudmFsdWUubGVuZ3RoXHJcbilcclxuXHJcbmNvbnN0IGdyaWRDbGFzc2VzID0gY29tcHV0ZWQoKCkgPT4gW1xyXG4gIC8vIEJhc2UgY2xhc3Nlc1xyXG4gICdncmlkJyxcclxuICAnZ2FwLTInLFxyXG4gICdmbGV4LWdyb3cnLFxyXG4gICdjb2wtc3Bhbi00JyxcclxuICAneGw6Y29sLXNwYW4tMycsXHJcbiAgJ3ctZnVsbCcsXHJcblxyXG4gIC8vIEdyaWQgY29sdW1uc1xyXG4gICdncmlkLWNvbHMtMScsXHJcbiAgJ3NtOmdyaWQtY29scy0yJyxcclxuICBwcm9wcy53b3Jrc3BhY2VQYWdlICYmICdsZzpncmlkLWNvbHMtMScsXHJcbiAgcHJvcHMud29ya3NwYWNlUGFnZSA/ICd4bDpncmlkLWNvbHMtMicgOiAneGw6Z3JpZC1jb2xzLTMnLFxyXG4gIHByb3BzLndvcmtzcGFjZVBhZ2UgJiYgJzJ4bDpncmlkLWNvbHMtMycsXHJcblxyXG4gIC8vIFZpc2liaWxpdHkgcnVsZXNcclxuICAnc206WyY+KjpudGgtY2hpbGQobiszKV06aGlkZGVuJyxcclxuICBwcm9wcy53b3Jrc3BhY2VQYWdlICYmICdsZzpbJj4qOm50aC1jaGlsZChuKzIpXTpoaWRkZW4nLFxyXG4gIHByb3BzLndvcmtzcGFjZVBhZ2UgJiYgJ3hsOlsmPio6bnRoLWNoaWxkKG4rMildOmJsb2NrJyxcclxuICAhcHJvcHMud29ya3NwYWNlUGFnZSAmJiAneGw6WyY+KjpudGgtY2hpbGQobiszKV06YmxvY2snLFxyXG4gIHByb3BzLndvcmtzcGFjZVBhZ2UgJiYgJzJ4bDpbJj4qOm50aC1jaGlsZChuKzIpXTpibG9jaycsXHJcbiAgJzJ4bDpbJj4qOm50aC1jaGlsZChuKzMpXTpibG9jaydcclxuXSlcclxuXHJcbmNvbnN0IG9uTW9kZWxVcGxvYWRpbmcgPSAocGF5bG9hZDogRmlsZUFyZWFVcGxvYWRpbmdQYXlsb2FkKSA9PiB7XHJcbiAgaXNNb2RlbFVwbG9hZGluZy52YWx1ZSA9IHBheWxvYWQuaXNVcGxvYWRpbmdcclxufVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvcHJvamVjdHMvUHJvamVjdERhc2hib2FyZENhcmQudnVlIn0= |