import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/invite/dialog/Server.vue");import { FormTextInput as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_1 } from "/_nuxt/components/form/select/ServerRoles.vue"; import { default as __nuxt_component_2 } from "/_nuxt/components/form/select/Projects.vue"; import { CommonTextLink as __nuxt_component_3 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { FormButton as __nuxt_component_4 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { LayoutDialog as __nuxt_component_5 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementBlock as __createElementBlock,createVNode as __createVNode,createElementVNode as __createElementVNode,createBlock as __createBlock } 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 _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { useModel as _useModel, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useMutationLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { useForm, useFieldArray } from "/_nuxt/node_modules/.cache/vite/client/deps/vee-validate.js?v=e4f18c29"; import { useActiveUser } from "/_nuxt/lib/auth/composables/activeUser.ts"; import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts"; import { useServerInfo } from "/_nuxt/lib/core/composables/server.ts"; import { useInviteUserToProject } from "/_nuxt/lib/projects/composables/projectManagement.ts"; import { useInviteUserToServer } from "/_nuxt/lib/server/composables/invites.ts"; import { PlusIcon, TrashIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29"; import { emptyInviteServerItem } from "/_nuxt/lib/invites/helpers/constants.ts"; import { isEmail } from "/_nuxt/lib/common/helpers/validation.ts"; import { useGlobalToast } from "/_nuxt/lib/common/composables/toast.ts"; import { computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { ToastNotificationType } from "/_nuxt/utils/globals.ts"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "InviteDialogServer", props: { "open": { type: Boolean, ...{ required: true } }, "openModifiers": {} }, emits: ["update:open"], setup(__props, { expose: __expose }) { __expose(); const isOpen = _useModel(__props, "open"); const { handleSubmit } = useForm({ initialValues: { fields: [ { ...emptyInviteServerItem } ] } }); const { fields, replace: replaceFields, push: pushInvite, remove: removeInvite } = useFieldArray("fields"); const { mutate: inviteUserToServer } = useInviteUserToServer(); const inviteUserToProject = useInviteUserToProject(); const anyMutationsLoading = useMutationLoading(); const { isAdmin } = useActiveUser(); const { isGuestMode } = useServerInfo(); const mixpanel = useMixpanel(); const { triggerNotification } = useGlobalToast(); const allowServerRoleSelect = computed(() => isAdmin.value || isGuestMode.value); const dialogButtons = computed(() => [ { text: "Cancel", props: { color: "outline" }, onClick: () => { isOpen.value = false; } }, { text: "Invite", props: { submit: true, disabled: anyMutationsLoading.value }, onClick: onSubmit } ]); const addInviteItem = () => { pushInvite({ ...emptyInviteServerItem }); }; const removeInviteItem = (index) => { removeInvite(index); }; const onSubmit = handleSubmit(async () => { const invites = fields.value.filter((invite) => invite.value.email); try { await Promise.all( invites.map( (invite) => invite.value.project ? inviteUserToProject( invite.value.project.id, [{ email: invite.value.email, serverRole: invite.value.serverRole }], { hideToasts: true } ) : inviteUserToServer( [{ email: invite.value.email, serverRole: invite.value.serverRole }], { hideToasts: true } ) ) ); triggerNotification({ type: ToastNotificationType.Success, title: invites.length > 1 ? "Invites successfully send" : `Invite successfully sent to ${invites[0].value.email}` }); mixpanel.track("Invite Action", { type: "server invite", name: "send", multiple: fields.value.length !== 1, count: fields.value.length, hasProject: !!fields.value.some((invite) => invite.value.project), to: "email" }); isOpen.value = false; } catch { triggerNotification({ type: ToastNotificationType.Danger, title: invites.length > 1 ? "One or more invites failed to send" : `Failed to send invite to ${invites[0].value.email}` }); } }); watch(isOpen, (newVal, oldVal) => { if (newVal && !oldVal) { replaceFields([ { ...emptyInviteServerItem } ]); } }); const __returned__ = { isOpen, handleSubmit, fields, replaceFields, pushInvite, removeInvite, inviteUserToServer, inviteUserToProject, anyMutationsLoading, isAdmin, isGuestMode, mixpanel, triggerNotification, allowServerRoleSelect, dialogButtons, addInviteItem, removeInviteItem, onSubmit, get PlusIcon() { return PlusIcon; }, get TrashIcon() { return TrashIcon; }, get isEmail() { return isEmail; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, normalizeClass as _normalizeClass, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "flex flex-col gap-y-5 text-foreground", "data-v-inspector": "components/invite/dialog/Server.vue:5:7" }; const _hoisted_2 = { class: "flex flex-col gap-y-3 flex-1", "data-v-inspector": "components/invite/dialog/Server.vue:7:11" }; const _hoisted_3 = { key: 0, class: "border-outline-3", "data-v-inspector": "components/invite/dialog/Server.vue:8:13" }; const _hoisted_4 = { class: "flex flex-row gap-x-3 items-center", "data-v-inspector": "components/invite/dialog/Server.vue:9:13" }; const _hoisted_5 = { class: "flex-1", "data-v-inspector": "components/invite/dialog/Server.vue:10:15" }; const _hoisted_6 = { class: "relative w-4", "data-v-inspector": "components/invite/dialog/Server.vue:48:11" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_FormTextInput = __nuxt_component_0; const _component_FormSelectServerRoles = __nuxt_component_1; const _component_FormSelectProjects = __nuxt_component_2; const _component_CommonTextLink = __nuxt_component_3; const _component_FormButton = __nuxt_component_4; const _component_LayoutDialog = __nuxt_component_5; return _openBlock(), _createBlock(_component_LayoutDialog, { open: $setup.isOpen, "onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.isOpen = $event), "max-width": "md", buttons: $setup.dialogButtons, "data-v-inspector": "components/invite/dialog/Server.vue:2:3" }, { header: _withCtx(() => [..._cache[2] || (_cache[2] = [ _createTextVNode( "Invite to Speckle", -1 /* CACHED */ ) ])]), default: _withCtx(() => [ _createElementVNode( "form", { onSubmit: _cache[0] || (_cache[0] = (...args) => $setup.onSubmit && $setup.onSubmit(...args)), "data-v-inspector": "components/invite/dialog/Server.vue:4:5" }, [ _createElementVNode("div", _hoisted_1, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.fields, (item, index) => { return _openBlock(), _createElementBlock("div", { key: item.key, class: "flex gap-x-3", "data-v-inspector": "components/invite/dialog/Server.vue:6:9" }, [ _createElementVNode("div", _hoisted_2, [ index !== 0 ? (_openBlock(), _createElementBlock("hr", _hoisted_3)) : _createCommentVNode("v-if", true), _createElementVNode("div", _hoisted_4, [ _createElementVNode("div", _hoisted_5, [ _createVNode(_component_FormTextInput, { modelValue: item.value.email, "onUpdate:modelValue": ($event) => item.value.email = $event, name: `email-${item.key}`, color: "foundation", placeholder: "Email address", "show-clear": "", "full-width": "", "use-label-in-errors": "", "show-label": "", label: "Email", rules: [$setup.isEmail], "data-v-inspector": "components/invite/dialog/Server.vue:11:17" }, null, 8, ["modelValue", "onUpdate:modelValue", "name", "rules"]) ]), $setup.allowServerRoleSelect ? (_openBlock(), _createBlock(_component_FormSelectServerRoles, { key: 0, modelValue: item.value.serverRole, "onUpdate:modelValue": ($event) => item.value.serverRole = $event, label: "Select role", name: `role-${item.key}`, class: "sm:w-48", "show-label": "", disabled: $setup.anyMutationsLoading, "allow-guest": $setup.isGuestMode, "allow-admin": $setup.isAdmin, "mount-menu-on-body": "", "data-v-inspector": "components/invite/dialog/Server.vue:24:15" }, null, 8, ["modelValue", "onUpdate:modelValue", "name", "disabled", "allow-guest", "allow-admin"])) : _createCommentVNode("v-if", true) ]), _createVNode(_component_FormSelectProjects, { modelValue: item.value.project, "onUpdate:modelValue": ($event) => item.value.project = $event, label: "Select project", class: "w-full", "owned-only": "", "show-optional": "", "mount-menu-on-body": "", "show-label": "", name: `project-${index}`, "data-v-inspector": "components/invite/dialog/Server.vue:37:13" }, null, 8, ["modelValue", "onUpdate:modelValue", "name"]) ]), _createElementVNode("div", _hoisted_6, [ $setup.fields.length > 1 ? (_openBlock(), _createBlock(_component_CommonTextLink, { key: 0, class: _normalizeClass(["top-10 absolute right-0", { "top-7": index === 0 }]), onClick: ($event) => $setup.removeInviteItem(index), "data-v-inspector": "components/invite/dialog/Server.vue:49:13" }, { default: _withCtx(() => [ _createVNode($setup["TrashIcon"], { class: "h-4 w-4 text-foreground-2", "data-v-inspector": "components/invite/dialog/Server.vue:55:15" }) ]), _: 2 /* DYNAMIC */ }, 1032, ["class", "onClick"])) : _createCommentVNode("v-if", true) ]) ]); }), 128 /* KEYED_FRAGMENT */ )), _createVNode(_component_FormButton, { color: "subtle", "icon-left": $setup.PlusIcon, disabled: $setup.anyMutationsLoading, onClick: $setup.addInviteItem, "data-v-inspector": "components/invite/dialog/Server.vue:59:9" }, { default: _withCtx(() => [..._cache[3] || (_cache[3] = [ _createTextVNode( " Invite another user ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["icon-left", "disabled"]) ]) ], 32 /* NEED_HYDRATION */ ) ]), _: 1 /* STABLE */ }, 8, ["open", "buttons"]); } _sfc_main.__hmrId = "669bb4ae"; 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/invite/dialog/Server.vue"]]); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdFQSxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLFNBQVMscUJBQXFCO0FBQ3ZDLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsVUFBVSxpQkFBaUI7QUFFcEMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsc0JBQXNCOzs7Ozs7Ozs7Ozs7O0FBRS9CLFVBQU0sU0FBUyxVQUFvQixTQUFDLE1BQTBCO0FBRTlELFVBQU0sRUFBRSxhQUFhLElBQUksUUFBMEI7QUFBQSxNQUNqRCxlQUFlO0FBQUEsUUFDYixRQUFRO0FBQUEsVUFDTjtBQUFBLFlBQ0UsR0FBRztBQUFBLFVBQ0w7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQztBQUNELFVBQU07QUFBQSxNQUNKO0FBQUEsTUFDQSxTQUFTO0FBQUEsTUFDVCxNQUFNO0FBQUEsTUFDTixRQUFRO0FBQUEsSUFDVixJQUFJLGNBQWdDLFFBQVE7QUFDNUMsVUFBTSxFQUFFLFFBQVEsbUJBQW1CLElBQUksc0JBQXNCO0FBQzdELFVBQU0sc0JBQXNCLHVCQUF1QjtBQUNuRCxVQUFNLHNCQUFzQixtQkFBbUI7QUFDL0MsVUFBTSxFQUFFLFFBQVEsSUFBSSxjQUFjO0FBQ2xDLFVBQU0sRUFBRSxZQUFZLElBQUksY0FBYztBQUN0QyxVQUFNLFdBQVcsWUFBWTtBQUM3QixVQUFNLEVBQUUsb0JBQW9CLElBQUksZUFBZTtBQUUvQyxVQUFNLHdCQUF3QixTQUFTLE1BQU0sUUFBUSxTQUFTLFlBQVksS0FBSztBQUMvRSxVQUFNLGdCQUFnQixTQUFTLE1BQTRCO0FBQUEsTUFDekQ7QUFBQSxRQUNFLE1BQU07QUFBQSxRQUNOLE9BQU8sRUFBRSxPQUFPLFVBQVU7QUFBQSxRQUMxQixTQUFTLE1BQU07QUFDYixpQkFBTyxRQUFRO0FBQUEsUUFDakI7QUFBQSxNQUNGO0FBQUEsTUFDQTtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFVBQ0wsUUFBUTtBQUFBLFVBQ1IsVUFBVSxvQkFBb0I7QUFBQSxRQUNoQztBQUFBLFFBQ0EsU0FBUztBQUFBLE1BQ1g7QUFBQSxJQUNGLENBQUM7QUFFRCxVQUFNLGdCQUFnQixNQUFNO0FBQzFCLGlCQUFXLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQztBQUFBLElBQ3pDO0FBRUEsVUFBTSxtQkFBbUIsQ0FBQyxVQUFrQjtBQUMxQyxtQkFBYSxLQUFLO0FBQUEsSUFDcEI7QUFFQSxVQUFNLFdBQVcsYUFBYSxZQUFZO0FBQ3hDLFlBQU0sVUFBVSxPQUFPLE1BQU0sT0FBTyxDQUFDLFdBQVcsT0FBTyxNQUFNLEtBQUs7QUFFbEUsVUFBSTtBQUNGLGNBQU0sUUFBUTtBQUFBLFVBQ1osUUFBUTtBQUFBLFlBQUksQ0FBQyxXQUNYLE9BQU8sTUFBTSxVQUNUO0FBQUEsY0FDRSxPQUFPLE1BQU0sUUFBUTtBQUFBLGNBQ3JCLENBQUMsRUFBRSxPQUFPLE9BQU8sTUFBTSxPQUFPLFlBQVksT0FBTyxNQUFNLFdBQVcsQ0FBQztBQUFBLGNBQ25FLEVBQUUsWUFBWSxLQUFLO0FBQUEsWUFDckIsSUFDQTtBQUFBLGNBQ0UsQ0FBQyxFQUFFLE9BQU8sT0FBTyxNQUFNLE9BQU8sWUFBWSxPQUFPLE1BQU0sV0FBVyxDQUFDO0FBQUEsY0FDbkUsRUFBRSxZQUFZLEtBQUs7QUFBQSxZQUNyQjtBQUFBLFVBQ047QUFBQSxRQUNGO0FBRUEsNEJBQW9CO0FBQUEsVUFDbEIsTUFBTSxzQkFBc0I7QUFBQSxVQUM1QixPQUNFLFFBQVEsU0FBUyxJQUNiLDhCQUNBLCtCQUErQixRQUFRLENBQUMsRUFBRSxNQUFNLEtBQUs7QUFBQSxRQUM3RCxDQUFDO0FBRUQsaUJBQVMsTUFBTSxpQkFBaUI7QUFBQSxVQUM5QixNQUFNO0FBQUEsVUFDTixNQUFNO0FBQUEsVUFDTixVQUFVLE9BQU8sTUFBTSxXQUFXO0FBQUEsVUFDbEMsT0FBTyxPQUFPLE1BQU07QUFBQSxVQUNwQixZQUFZLENBQUMsQ0FBQyxPQUFPLE1BQU0sS0FBSyxDQUFDLFdBQVcsT0FBTyxNQUFNLE9BQU87QUFBQSxVQUNoRSxJQUFJO0FBQUEsUUFDTixDQUFDO0FBRUQsZUFBTyxRQUFRO0FBQUEsTUFDakIsUUFBUTtBQUNOLDRCQUFvQjtBQUFBLFVBQ2xCLE1BQU0sc0JBQXNCO0FBQUEsVUFDNUIsT0FDRSxRQUFRLFNBQVMsSUFDYix1Q0FDQSw0QkFBNEIsUUFBUSxDQUFDLEVBQUUsTUFBTSxLQUFLO0FBQUEsUUFDMUQsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGLENBQUM7QUFFRCxVQUFNLFFBQVEsQ0FBQyxRQUFRLFdBQVc7QUFDaEMsVUFBSSxVQUFVLENBQUMsUUFBUTtBQUNyQixzQkFBYztBQUFBLFVBQ1o7QUFBQSxZQUNFLEdBQUc7QUFBQSxVQUNMO0FBQUEsUUFDRixDQUFDO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7RUE3TFUsT0FBTTtBQUFBLEVBQXdDLG9CQUFpQjs7O0VBRTNELE9BQU07QUFBQSxFQUErQixvQkFBaUI7Ozs7RUFDbEMsT0FBTTtBQUFBLEVBQW1CLG9CQUFpQjs7O0VBQzVELE9BQU07QUFBQSxFQUFxQyxvQkFBaUI7OztFQUMxRCxPQUFNO0FBQUEsRUFBUyxvQkFBaUI7OztFQXNDcEMsT0FBTTtBQUFBLEVBQWUsb0JBQWlCOzs7Ozs7Ozs7dUJBOUNuRCxhQW1FZTtBQUFBLElBbkVPLE1BQU07QUFBQSwyRUFBTTtBQUFBLElBQUUsYUFBVTtBQUFBLElBQU0sU0FBUztBQUFBLElBQWUsb0JBQWlCO0FBQUE7SUFDaEYsUUFBTSxTQUFDLE1BQWlCO0FBQUE7UUFBakI7QUFBQSxRQUFpQjtBQUFBO0FBQUE7QUFBQTtzQkFDbkMsTUFnRU87QUFBQSxNQWhFUDtBQUFBLFFBZ0VPO0FBQUE7QUFBQSxVQWhFQSxVQUFNLHVDQUFFO0FBQUEsVUFBVSxvQkFBaUI7QUFBQTs7VUFDeEMsb0JBOERNLE9BOUROLFlBOERNO0FBQUEsK0JBN0RKO0FBQUEsY0FvRE07QUFBQTtBQUFBLDBCQXBEdUIsZUFBTSxDQUF0QixNQUFNLFVBQUs7cUNBQXhCLG9CQW9ETTtBQUFBLGtCQXBEZ0MsS0FBSyxLQUFLO0FBQUEsa0JBQUssT0FBTTtBQUFBLGtCQUFlLG9CQUFpQjtBQUFBO2tCQUN6RixvQkF3Q00sT0F4Q04sWUF3Q007QUFBQSxvQkF2Q00sVUFBSyxtQkFBZixvQkFBOEcsTUFBOUcsVUFBOEc7b0JBQzlHLG9CQTJCTSxPQTNCTixZQTJCTTtBQUFBLHNCQTFCSixvQkFhTSxPQWJOLFlBYU07QUFBQSx3QkFaSixhQVdFO0FBQUEsc0NBVlMsS0FBSyxNQUFNO0FBQUEsNkRBQVgsS0FBSyxNQUFNLFFBQUs7QUFBQSwwQkFDeEIsTUFBSSxTQUFXLEtBQUssR0FBRztBQUFBLDBCQUN4QixPQUFNO0FBQUEsMEJBQ04sYUFBWTtBQUFBLDBCQUNaO0FBQUEsMEJBQ0E7QUFBQSwwQkFDQTtBQUFBLDBCQUNBO0FBQUEsMEJBQ0EsT0FBTTtBQUFBLDBCQUNMLE9BQUssQ0FBRyxjQUFPO0FBQUEsMEJBQUcsb0JBQWlCO0FBQUE7O3NCQUloQyw4Q0FEUixhQVdFO0FBQUE7b0NBVFMsS0FBSyxNQUFNO0FBQUEsMkRBQVgsS0FBSyxNQUFNLGFBQVU7QUFBQSx3QkFDOUIsT0FBTTtBQUFBLHdCQUNMLE1BQUksUUFBVSxLQUFLLEdBQUc7QUFBQSx3QkFDdkIsT0FBTTtBQUFBLHdCQUNOO0FBQUEsd0JBQ0MsVUFBVTtBQUFBLHdCQUNWLGVBQWE7QUFBQSx3QkFDYixlQUFhO0FBQUEsd0JBQ2Q7QUFBQSx3QkFBbUIsb0JBQWlCO0FBQUE7O29CQUd4QyxhQVNFO0FBQUEsa0NBUlMsS0FBSyxNQUFNO0FBQUEseURBQVgsS0FBSyxNQUFNLFVBQU87QUFBQSxzQkFDM0IsT0FBTTtBQUFBLHNCQUNOLE9BQU07QUFBQSxzQkFDTjtBQUFBLHNCQUNBO0FBQUEsc0JBQ0E7QUFBQSxzQkFDQTtBQUFBLHNCQUNDLE1BQUksV0FBYSxLQUFLO0FBQUEsc0JBQUksb0JBQWlCO0FBQUE7O2tCQUdoRCxvQkFTTSxPQVROLFlBU007QUFBQSxvQkFQSSxjQUFPLFNBQU0sbUJBRHJCLGFBT2lCO0FBQUE7c0JBTGYsT0FBSyxpQkFBQywyQkFBeUIsV0FDWixVQUFLO0FBQUEsc0JBQ3ZCLFNBQUssWUFBRSx3QkFBaUIsS0FBSztBQUFBLHNCQUFHLG9CQUFpQjtBQUFBO3dDQUVsRCxNQUE0RztBQUFBLHdCQUE1RyxhQUE0RztBQUFBLDBCQUFqRyxPQUFNO0FBQUEsMEJBQTRCLG9CQUFpQjtBQUFBOzs7Ozs7Ozs7OztZQUlwRSxhQU9hO0FBQUEsY0FOWCxPQUFNO0FBQUEsY0FDTCxhQUFXO0FBQUEsY0FDWCxVQUFVO0FBQUEsY0FDVixTQUFPO0FBQUEsY0FBZSxvQkFBaUI7QUFBQTtnQ0FDekMsTUFFRDtBQUFBO2tCQUZDO0FBQUEsa0JBRUQ7QUFBQTtBQUFBO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlNlcnZlci52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxMYXlvdXREaWFsb2cgdi1tb2RlbDpvcGVuPVwiaXNPcGVuXCIgbWF4LXdpZHRoPVwibWRcIiA6YnV0dG9ucz1cImRpYWxvZ0J1dHRvbnNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6MjozXCI+XHJcbiAgICA8dGVtcGxhdGUgI2hlYWRlcj5JbnZpdGUgdG8gU3BlY2tsZTwvdGVtcGxhdGU+XHJcbiAgICA8Zm9ybSBAc3VibWl0PVwib25TdWJtaXRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6NDo1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC15LTUgdGV4dC1mb3JlZ3JvdW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9TZXJ2ZXIudnVlOjU6N1wiPlxyXG4gICAgICAgIDxkaXYgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGZpZWxkc1wiIDprZXk9XCJpdGVtLmtleVwiIGNsYXNzPVwiZmxleCBnYXAteC0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9TZXJ2ZXIudnVlOjY6OVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLXktMyBmbGV4LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6NzoxMVwiPlxyXG4gICAgICAgICAgICA8aHIgdi1pZj1cImluZGV4ICE9PSAwXCIgY2xhc3M9XCJib3JkZXItb3V0bGluZS0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9TZXJ2ZXIudnVlOjg6MTNcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAteC0zIGl0ZW1zLWNlbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvU2VydmVyLnZ1ZTo5OjEzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvU2VydmVyLnZ1ZToxMDoxNVwiPlxyXG4gICAgICAgICAgICAgICAgPEZvcm1UZXh0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cIml0ZW0udmFsdWUuZW1haWxcIlxyXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImBlbWFpbC0ke2l0ZW0ua2V5fWBcIlxyXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cImZvdW5kYXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVtYWlsIGFkZHJlc3NcIlxyXG4gICAgICAgICAgICAgICAgICBzaG93LWNsZWFyXHJcbiAgICAgICAgICAgICAgICAgIGZ1bGwtd2lkdGhcclxuICAgICAgICAgICAgICAgICAgdXNlLWxhYmVsLWluLWVycm9yc1xyXG4gICAgICAgICAgICAgICAgICBzaG93LWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiRW1haWxcIlxyXG4gICAgICAgICAgICAgICAgICA6cnVsZXM9XCJbaXNFbWFpbF1cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6MTE6MTdcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8Rm9ybVNlbGVjdFNlcnZlclJvbGVzXHJcbiAgICAgICAgICAgICAgICB2LWlmPVwiYWxsb3dTZXJ2ZXJSb2xlU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJpdGVtLnZhbHVlLnNlcnZlclJvbGVcIlxyXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJTZWxlY3Qgcm9sZVwiXHJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImByb2xlLSR7aXRlbS5rZXl9YFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNtOnctNDhcIlxyXG4gICAgICAgICAgICAgICAgc2hvdy1sYWJlbFxyXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiYW55TXV0YXRpb25zTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICA6YWxsb3ctZ3Vlc3Q9XCJpc0d1ZXN0TW9kZVwiXHJcbiAgICAgICAgICAgICAgICA6YWxsb3ctYWRtaW49XCJpc0FkbWluXCJcclxuICAgICAgICAgICAgICAgIG1vdW50LW1lbnUtb24tYm9keSBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6MjQ6MTVcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8Rm9ybVNlbGVjdFByb2plY3RzXHJcbiAgICAgICAgICAgICAgdi1tb2RlbD1cIml0ZW0udmFsdWUucHJvamVjdFwiXHJcbiAgICAgICAgICAgICAgbGFiZWw9XCJTZWxlY3QgcHJvamVjdFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxyXG4gICAgICAgICAgICAgIG93bmVkLW9ubHlcclxuICAgICAgICAgICAgICBzaG93LW9wdGlvbmFsXHJcbiAgICAgICAgICAgICAgbW91bnQtbWVudS1vbi1ib2R5XHJcbiAgICAgICAgICAgICAgc2hvdy1sYWJlbFxyXG4gICAgICAgICAgICAgIDpuYW1lPVwiYHByb2plY3QtJHtpbmRleH1gXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9TZXJ2ZXIudnVlOjM3OjEzXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHctNFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2ludml0ZS9kaWFsb2cvU2VydmVyLnZ1ZTo0ODoxMVwiPlxyXG4gICAgICAgICAgICA8Q29tbW9uVGV4dExpbmtcclxuICAgICAgICAgICAgICB2LWlmPVwiZmllbGRzLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwidG9wLTEwIGFic29sdXRlIHJpZ2h0LTBcIlxyXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgJ3RvcC03JzogaW5kZXggPT09IDAgfVwiXHJcbiAgICAgICAgICAgICAgQGNsaWNrPVwicmVtb3ZlSW52aXRlSXRlbShpbmRleClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6NDk6MTNcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPFRyYXNoSWNvbiBjbGFzcz1cImgtNCB3LTQgdGV4dC1mb3JlZ3JvdW5kLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6NTU6MTVcIiAvPlxyXG4gICAgICAgICAgICA8L0NvbW1vblRleHRMaW5rPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgIGNvbG9yPVwic3VidGxlXCJcclxuICAgICAgICAgIDppY29uLWxlZnQ9XCJQbHVzSWNvblwiXHJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJhbnlNdXRhdGlvbnNMb2FkaW5nXCJcclxuICAgICAgICAgIEBjbGljaz1cImFkZEludml0ZUl0ZW1cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9pbnZpdGUvZGlhbG9nL1NlcnZlci52dWU6NTk6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgSW52aXRlIGFub3RoZXIgdXNlclxyXG4gICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9MYXlvdXREaWFsb2c+XHJcbjwvdGVtcGxhdGU+XHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB0eXBlIHsgTGF5b3V0RGlhbG9nQnV0dG9uIH0gZnJvbSAnQHNwZWNrbGUvdWktY29tcG9uZW50cydcclxuaW1wb3J0IHsgdXNlTXV0YXRpb25Mb2FkaW5nIH0gZnJvbSAnQHZ1ZS9hcG9sbG8tY29tcG9zYWJsZSdcclxuaW1wb3J0IHsgdXNlRm9ybSwgdXNlRmllbGRBcnJheSB9IGZyb20gJ3ZlZS12YWxpZGF0ZSdcclxuaW1wb3J0IHsgdXNlQWN0aXZlVXNlciB9IGZyb20gJ35+L2xpYi9hdXRoL2NvbXBvc2FibGVzL2FjdGl2ZVVzZXInXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfn4vbGliL2NvcmUvY29tcG9zYWJsZXMvbXAnXHJcbmltcG9ydCB7IHVzZVNlcnZlckluZm8gfSBmcm9tICd+fi9saWIvY29yZS9jb21wb3NhYmxlcy9zZXJ2ZXInXHJcbmltcG9ydCB7IHVzZUludml0ZVVzZXJUb1Byb2plY3QgfSBmcm9tICd+fi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvcHJvamVjdE1hbmFnZW1lbnQnXHJcbmltcG9ydCB7IHVzZUludml0ZVVzZXJUb1NlcnZlciB9IGZyb20gJ35+L2xpYi9zZXJ2ZXIvY29tcG9zYWJsZXMvaW52aXRlcydcclxuaW1wb3J0IHsgUGx1c0ljb24sIFRyYXNoSWNvbiB9IGZyb20gJ0BoZXJvaWNvbnMvdnVlLzI0L291dGxpbmUnXHJcbmltcG9ydCB0eXBlIHsgSW52aXRlU2VydmVyRm9ybSwgSW52aXRlU2VydmVySXRlbSB9IGZyb20gJ35+L2xpYi9pbnZpdGVzL2hlbHBlcnMvdHlwZXMnXHJcbmltcG9ydCB7IGVtcHR5SW52aXRlU2VydmVySXRlbSB9IGZyb20gJ35+L2xpYi9pbnZpdGVzL2hlbHBlcnMvY29uc3RhbnRzJ1xyXG5pbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL3ZhbGlkYXRpb24nXHJcbmltcG9ydCB7IHVzZUdsb2JhbFRvYXN0IH0gZnJvbSAnfn4vbGliL2NvbW1vbi9jb21wb3NhYmxlcy90b2FzdCdcclxuXHJcbmNvbnN0IGlzT3BlbiA9IGRlZmluZU1vZGVsPGJvb2xlYW4+KCdvcGVuJywgeyByZXF1aXJlZDogdHJ1ZSB9KVxyXG5cclxuY29uc3QgeyBoYW5kbGVTdWJtaXQgfSA9IHVzZUZvcm08SW52aXRlU2VydmVyRm9ybT4oe1xyXG4gIGluaXRpYWxWYWx1ZXM6IHtcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgLi4uZW1wdHlJbnZpdGVTZXJ2ZXJJdGVtXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcbn0pXHJcbmNvbnN0IHtcclxuICBmaWVsZHMsXHJcbiAgcmVwbGFjZTogcmVwbGFjZUZpZWxkcyxcclxuICBwdXNoOiBwdXNoSW52aXRlLFxyXG4gIHJlbW92ZTogcmVtb3ZlSW52aXRlXHJcbn0gPSB1c2VGaWVsZEFycmF5PEludml0ZVNlcnZlckl0ZW0+KCdmaWVsZHMnKVxyXG5jb25zdCB7IG11dGF0ZTogaW52aXRlVXNlclRvU2VydmVyIH0gPSB1c2VJbnZpdGVVc2VyVG9TZXJ2ZXIoKVxyXG5jb25zdCBpbnZpdGVVc2VyVG9Qcm9qZWN0ID0gdXNlSW52aXRlVXNlclRvUHJvamVjdCgpXHJcbmNvbnN0IGFueU11dGF0aW9uc0xvYWRpbmcgPSB1c2VNdXRhdGlvbkxvYWRpbmcoKVxyXG5jb25zdCB7IGlzQWRtaW4gfSA9IHVzZUFjdGl2ZVVzZXIoKVxyXG5jb25zdCB7IGlzR3Vlc3RNb2RlIH0gPSB1c2VTZXJ2ZXJJbmZvKClcclxuY29uc3QgbWl4cGFuZWwgPSB1c2VNaXhwYW5lbCgpXHJcbmNvbnN0IHsgdHJpZ2dlck5vdGlmaWNhdGlvbiB9ID0gdXNlR2xvYmFsVG9hc3QoKVxyXG5cclxuY29uc3QgYWxsb3dTZXJ2ZXJSb2xlU2VsZWN0ID0gY29tcHV0ZWQoKCkgPT4gaXNBZG1pbi52YWx1ZSB8fCBpc0d1ZXN0TW9kZS52YWx1ZSlcclxuY29uc3QgZGlhbG9nQnV0dG9ucyA9IGNvbXB1dGVkKCgpOiBMYXlvdXREaWFsb2dCdXR0b25bXSA9PiBbXHJcbiAge1xyXG4gICAgdGV4dDogJ0NhbmNlbCcsXHJcbiAgICBwcm9wczogeyBjb2xvcjogJ291dGxpbmUnIH0sXHJcbiAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICB7XHJcbiAgICB0ZXh0OiAnSW52aXRlJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgIHN1Ym1pdDogdHJ1ZSxcclxuICAgICAgZGlzYWJsZWQ6IGFueU11dGF0aW9uc0xvYWRpbmcudmFsdWVcclxuICAgIH0sXHJcbiAgICBvbkNsaWNrOiBvblN1Ym1pdFxyXG4gIH1cclxuXSlcclxuXHJcbmNvbnN0IGFkZEludml0ZUl0ZW0gPSAoKSA9PiB7XHJcbiAgcHVzaEludml0ZSh7IC4uLmVtcHR5SW52aXRlU2VydmVySXRlbSB9KVxyXG59XHJcblxyXG5jb25zdCByZW1vdmVJbnZpdGVJdGVtID0gKGluZGV4OiBudW1iZXIpID0+IHtcclxuICByZW1vdmVJbnZpdGUoaW5kZXgpXHJcbn1cclxuXHJcbmNvbnN0IG9uU3VibWl0ID0gaGFuZGxlU3VibWl0KGFzeW5jICgpID0+IHtcclxuICBjb25zdCBpbnZpdGVzID0gZmllbGRzLnZhbHVlLmZpbHRlcigoaW52aXRlKSA9PiBpbnZpdGUudmFsdWUuZW1haWwpXHJcblxyXG4gIHRyeSB7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgaW52aXRlcy5tYXAoKGludml0ZSkgPT5cclxuICAgICAgICBpbnZpdGUudmFsdWUucHJvamVjdFxyXG4gICAgICAgICAgPyBpbnZpdGVVc2VyVG9Qcm9qZWN0KFxyXG4gICAgICAgICAgICAgIGludml0ZS52YWx1ZS5wcm9qZWN0LmlkLFxyXG4gICAgICAgICAgICAgIFt7IGVtYWlsOiBpbnZpdGUudmFsdWUuZW1haWwsIHNlcnZlclJvbGU6IGludml0ZS52YWx1ZS5zZXJ2ZXJSb2xlIH1dLFxyXG4gICAgICAgICAgICAgIHsgaGlkZVRvYXN0czogdHJ1ZSB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIDogaW52aXRlVXNlclRvU2VydmVyKFxyXG4gICAgICAgICAgICAgIFt7IGVtYWlsOiBpbnZpdGUudmFsdWUuZW1haWwsIHNlcnZlclJvbGU6IGludml0ZS52YWx1ZS5zZXJ2ZXJSb2xlIH1dLFxyXG4gICAgICAgICAgICAgIHsgaGlkZVRvYXN0czogdHJ1ZSB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgKVxyXG4gICAgKVxyXG5cclxuICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuU3VjY2VzcyxcclxuICAgICAgdGl0bGU6XHJcbiAgICAgICAgaW52aXRlcy5sZW5ndGggPiAxXHJcbiAgICAgICAgICA/ICdJbnZpdGVzIHN1Y2Nlc3NmdWxseSBzZW5kJ1xyXG4gICAgICAgICAgOiBgSW52aXRlIHN1Y2Nlc3NmdWxseSBzZW50IHRvICR7aW52aXRlc1swXS52YWx1ZS5lbWFpbH1gXHJcbiAgICB9KVxyXG5cclxuICAgIG1peHBhbmVsLnRyYWNrKCdJbnZpdGUgQWN0aW9uJywge1xyXG4gICAgICB0eXBlOiAnc2VydmVyIGludml0ZScsXHJcbiAgICAgIG5hbWU6ICdzZW5kJyxcclxuICAgICAgbXVsdGlwbGU6IGZpZWxkcy52YWx1ZS5sZW5ndGggIT09IDEsXHJcbiAgICAgIGNvdW50OiBmaWVsZHMudmFsdWUubGVuZ3RoLFxyXG4gICAgICBoYXNQcm9qZWN0OiAhIWZpZWxkcy52YWx1ZS5zb21lKChpbnZpdGUpID0+IGludml0ZS52YWx1ZS5wcm9qZWN0KSxcclxuICAgICAgdG86ICdlbWFpbCdcclxuICAgIH0pXHJcblxyXG4gICAgaXNPcGVuLnZhbHVlID0gZmFsc2VcclxuICB9IGNhdGNoIHtcclxuICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyLFxyXG4gICAgICB0aXRsZTpcclxuICAgICAgICBpbnZpdGVzLmxlbmd0aCA+IDFcclxuICAgICAgICAgID8gJ09uZSBvciBtb3JlIGludml0ZXMgZmFpbGVkIHRvIHNlbmQnXHJcbiAgICAgICAgICA6IGBGYWlsZWQgdG8gc2VuZCBpbnZpdGUgdG8gJHtpbnZpdGVzWzBdLnZhbHVlLmVtYWlsfWBcclxuICAgIH0pXHJcbiAgfVxyXG59KVxyXG5cclxud2F0Y2goaXNPcGVuLCAobmV3VmFsLCBvbGRWYWwpID0+IHtcclxuICBpZiAobmV3VmFsICYmICFvbGRWYWwpIHtcclxuICAgIHJlcGxhY2VGaWVsZHMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgLi4uZW1wdHlJbnZpdGVTZXJ2ZXJJdGVtXHJcbiAgICAgIH1cclxuICAgIF0pXHJcbiAgfVxyXG59KVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvaW52aXRlL2RpYWxvZy9TZXJ2ZXIudnVlIn0=