import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/measurements/Menu.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/viewer/measurements/UnitSelect.vue"; import { FormRange 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/viewer/layout/Panel.vue"; import { default as __nuxt_component_4 } from "/_nuxt/components/viewer/button-group/Button.vue"; import { default as __nuxt_component_5 } from "/_nuxt/components/viewer/button-group/ButtonGroup.vue"; import { FormButton as __nuxt_component_6 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_7 } from "/_nuxt/components/global/icon/viewer/Settings.vue"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementVNode as __createElementVNode,createVNode as __createVNode,createBlock as __createBlock,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 _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...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 { MeasurementType } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/viewer/helpers/state.js"; import { useMeasurementUtilities } from "/_nuxt/lib/viewer/composables/ui.ts"; import { useSmartTooltipDelay } from "/_nuxt/composables/tooltips.ts"; import { ref } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ViewerMeasurementsMenu", setup(__props, { expose: __expose }) { __expose(); const { measurementOptions, setMeasurementOptions, clearMeasurements } = useMeasurementUtilities(); const { getTooltipProps } = useSmartTooltipDelay(); const showSettings = ref(false); const updateMeasurementsType = (selectedOption) => { setMeasurementOptions({ ...measurementOptions.value, type: selectedOption.value }); }; const onChangeMeasurementUnits = (newUnit) => { setMeasurementOptions({ ...measurementOptions.value, units: newUnit }); }; const toggleMeasurementsChaining = () => { setMeasurementOptions({ ...measurementOptions.value, chain: !measurementOptions.value.chain }); }; const toggleMeasurementsSnap = () => { setMeasurementOptions({ ...measurementOptions.value, vertexSnap: !measurementOptions.value.vertexSnap }); }; const measurementTypeOptions = [ { title: "Point to Point", icon: "IconMeasurePointToPoint", value: MeasurementType.POINTTOPOINT, description: "Measure between two points" }, { title: "Perpendicular", icon: "IconMeasurePerpendicular", value: MeasurementType.PERPENDICULAR, description: "Measure at a 90° angle" }, { title: "Area", icon: "IconMeasureArea", value: MeasurementType.AREA, description: "Measure area between points" }, { title: "Point coordinates", icon: "IconMeasurePoint", value: MeasurementType.POINT, description: "Measure XYZ coordinates" } ]; const __returned__ = { measurementOptions, setMeasurementOptions, clearMeasurements, getTooltipProps, showSettings, updateMeasurementsType, onChangeMeasurementUnits, toggleMeasurementsChaining, toggleMeasurementsSnap, measurementTypeOptions }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, resolveDynamicComponent as _resolveDynamicComponent, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { "data-v-inspector": "components/viewer/measurements/Menu.vue:2:3" }; const _hoisted_2 = { class: "flex flex-col gap-1.5", "data-v-inspector": "components/viewer/measurements/Menu.vue:4:7" }; const _hoisted_3 = { class: "flex flex-col gap-1.5 py-3", "data-v-inspector": "components/viewer/measurements/Menu.vue:13:7" }; const _hoisted_4 = { class: "flex flex-col gap-1.5 pb-1", "data-v-inspector": "components/viewer/measurements/Menu.vue:24:7" }; const _hoisted_5 = { class: "flex gap-2 justify-between items-center", "data-v-inspector": "components/viewer/measurements/Menu.vue:43:7" }; const _hoisted_6 = { class: "flex gap-1.5", "data-v-inspector": "components/viewer/measurements/Menu.vue:57:9" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ViewerMeasurementsUnitSelect = __nuxt_component_0; const _component_FormRange = __nuxt_component_1; const _component_FormCheckbox = __nuxt_component_2; const _component_ViewerLayoutPanel = __nuxt_component_3; const _component_ViewerButtonGroupButton = __nuxt_component_4; const _component_ViewerButtonGroup = __nuxt_component_5; const _component_FormButton = __nuxt_component_6; const _component_IconViewerSettings = __nuxt_component_7; const _directive_tippy = _resolveDirective("tippy"); return _openBlock(), _createElementBlock("div", _hoisted_1, [ $setup.showSettings ? (_openBlock(), _createBlock(_component_ViewerLayoutPanel, { key: 0, class: "p-3 pb-2", "data-v-inspector": "components/viewer/measurements/Menu.vue:3:5" }, { default: _withCtx(() => [ _createElementVNode("span", _hoisted_2, [ _cache[3] || (_cache[3] = _createElementVNode( "label", { class: "text-body-2xs", for: "units", "data-v-inspector": "components/viewer/measurements/Menu.vue:5:9" }, "Units", -1 /* CACHED */ )), _createVNode(_component_ViewerMeasurementsUnitSelect, { modelValue: $setup.measurementOptions.units, "onUpdate:modelValue": [ _cache[0] || (_cache[0] = ($event) => $setup.measurementOptions.units = $event), $setup.onChangeMeasurementUnits ], "mount-menu-on-body": "", "data-v-inspector": "components/viewer/measurements/Menu.vue:6:9" }, null, 8, ["modelValue"]) ]), _createElementVNode("span", _hoisted_3, [ _createVNode(_component_FormRange, { modelValue: $setup.measurementOptions.precision, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.measurementOptions.precision = $event), name: "precision", label: "Precision", min: 1, max: 5, step: 1, "data-v-inspector": "components/viewer/measurements/Menu.vue:14:9" }, null, 8, ["modelValue"]) ]), _createElementVNode("div", _hoisted_4, [ _createVNode(_component_FormCheckbox, { name: "Chain measurements", "label-position": "right", "label-classes": "text-body-2xs font-normal", "model-value": $setup.measurementOptions.chain, "onUpdate:modelValue": $setup.toggleMeasurementsChaining, "data-v-inspector": "components/viewer/measurements/Menu.vue:25:9" }, null, 8, ["model-value"]), _createVNode(_component_FormCheckbox, { name: "Snap to vertices", "label-position": "right", "label-classes": "text-body-2xs font-normal", "model-value": $setup.measurementOptions.vertexSnap, "onUpdate:modelValue": $setup.toggleMeasurementsSnap, "data-v-inspector": "components/viewer/measurements/Menu.vue:33:9" }, null, 8, ["model-value"]) ]) ]), _: 1 /* STABLE */ })) : _createCommentVNode("v-if", true), _createVNode(_component_ViewerLayoutPanel, { class: "mt-1 p-1 pr-2", "data-v-inspector": "components/viewer/measurements/Menu.vue:42:5" }, { default: _withCtx(() => [ _createElementVNode("div", _hoisted_5, [ _createVNode(_component_ViewerButtonGroup, { "data-v-inspector": "components/viewer/measurements/Menu.vue:44:9" }, { default: _withCtx(() => [ (_openBlock(), _createElementBlock( _Fragment, null, _renderList($setup.measurementTypeOptions, (option) => { return _withDirectives(_createVNode(_component_ViewerButtonGroupButton, { key: option.value, class: "size-8", "is-active": $setup.measurementOptions.type === option.value, onClick: ($event) => $setup.updateMeasurementsType(option), "data-v-inspector": "components/viewer/measurements/Menu.vue:45:11" }, { default: _withCtx(() => [ (_openBlock(), _createBlock(_resolveDynamicComponent(option.icon), { class: "size-5 flex-shrink-0", "data-v-inspector": "components/viewer/measurements/Menu.vue:53:13" })) ]), _: 2 /* DYNAMIC */ }, 1032, ["is-active", "onClick"]), [ [_directive_tippy, $setup.getTooltipProps(option.title)] ]); }), 64 /* STABLE_FRAGMENT */ )) ]), _: 1 /* STABLE */ }), _createElementVNode("div", _hoisted_6, [ _createVNode(_component_FormButton, { size: "sm", color: "outline", tabindex: "-1", onClick: $setup.clearMeasurements, "data-v-inspector": "components/viewer/measurements/Menu.vue:58:11" }, { default: _withCtx(() => [..._cache[4] || (_cache[4] = [ _createTextVNode( " Delete all ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["onClick"]), _createElementVNode( "button", { class: _normalizeClass(["size-6 flex items-center justify-center rounded-md", [ $setup.showSettings && "text-primary-focus bg-info-lighter dark:text-foreground-on-primary", !$setup.showSettings && "text-foreground hover:bg-foundation-2" ]]), onClick: _cache[2] || (_cache[2] = ($event) => $setup.showSettings = !$setup.showSettings), "data-v-inspector": "components/viewer/measurements/Menu.vue:66:11" }, [ _createVNode(_component_IconViewerSettings, { class: "size-4", "data-v-inspector": "components/viewer/measurements/Menu.vue:75:13" }) ], 2 /* CLASS */ ) ]) ]) ]), _: 1 /* STABLE */ }) ]); } _sfc_main.__hmrId = "d90d9b87"; 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/viewer/measurements/Menu.vue"]]); //# sourceMappingURL=data:application/json;base64,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QkFUUCxPQUFLLGlCQUFDLHNEQUFvRDtBQUFBLGtCQUNqQzttQkFBdUgsdUJBQVk7QUFBQTtnQkFLM0osU0FBSyxzQ0FBRSxzQkFBWSxDQUFJO0FBQUEsZ0JBQWMsb0JBQWlCO0FBQUE7O2dCQUV2RCxhQUFzRztBQUFBLGtCQUFsRixPQUFNO0FBQUEsa0JBQVMsb0JBQWlCO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIk1lbnUudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9tZWFzdXJlbWVudHMvTWVudS52dWU6MjozXCI+XHJcbiAgICA8Vmlld2VyTGF5b3V0UGFuZWwgdi1pZj1cInNob3dTZXR0aW5nc1wiIGNsYXNzPVwicC0zIHBiLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjM6NVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEuNVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9tZWFzdXJlbWVudHMvTWVudS52dWU6NDo3XCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1ib2R5LTJ4c1wiIGZvcj1cInVuaXRzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL21lYXN1cmVtZW50cy9NZW51LnZ1ZTo1OjlcIj5Vbml0czwvbGFiZWw+XHJcbiAgICAgICAgPFZpZXdlck1lYXN1cmVtZW50c1VuaXRTZWxlY3RcclxuICAgICAgICAgIHYtbW9kZWw9XCJtZWFzdXJlbWVudE9wdGlvbnMudW5pdHNcIlxyXG4gICAgICAgICAgbW91bnQtbWVudS1vbi1ib2R5XHJcbiAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwib25DaGFuZ2VNZWFzdXJlbWVudFVuaXRzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL21lYXN1cmVtZW50cy9NZW51LnZ1ZTo2OjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMS41IHB5LTNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjEzOjdcIj5cclxuICAgICAgICA8Rm9ybVJhbmdlXHJcbiAgICAgICAgICB2LW1vZGVsPVwibWVhc3VyZW1lbnRPcHRpb25zLnByZWNpc2lvblwiXHJcbiAgICAgICAgICBuYW1lPVwicHJlY2lzaW9uXCJcclxuICAgICAgICAgIGxhYmVsPVwiUHJlY2lzaW9uXCJcclxuICAgICAgICAgIDptaW49XCIxXCJcclxuICAgICAgICAgIDptYXg9XCI1XCJcclxuICAgICAgICAgIDpzdGVwPVwiMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9tZWFzdXJlbWVudHMvTWVudS52dWU6MTQ6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEuNSBwYi0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL21lYXN1cmVtZW50cy9NZW51LnZ1ZToyNDo3XCI+XHJcbiAgICAgICAgPEZvcm1DaGVja2JveFxyXG4gICAgICAgICAgbmFtZT1cIkNoYWluIG1lYXN1cmVtZW50c1wiXHJcbiAgICAgICAgICBsYWJlbC1wb3NpdGlvbj1cInJpZ2h0XCJcclxuICAgICAgICAgIGxhYmVsLWNsYXNzZXM9XCJ0ZXh0LWJvZHktMnhzIGZvbnQtbm9ybWFsXCJcclxuICAgICAgICAgIDptb2RlbC12YWx1ZT1cIm1lYXN1cmVtZW50T3B0aW9ucy5jaGFpblwiXHJcbiAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwidG9nZ2xlTWVhc3VyZW1lbnRzQ2hhaW5pbmdcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjI1OjlcIlxyXG4gICAgICAgIC8+XHJcblxyXG4gICAgICAgIDxGb3JtQ2hlY2tib3hcclxuICAgICAgICAgIG5hbWU9XCJTbmFwIHRvIHZlcnRpY2VzXCJcclxuICAgICAgICAgIGxhYmVsLXBvc2l0aW9uPVwicmlnaHRcIlxyXG4gICAgICAgICAgbGFiZWwtY2xhc3Nlcz1cInRleHQtYm9keS0yeHMgZm9udC1ub3JtYWxcIlxyXG4gICAgICAgICAgOm1vZGVsLXZhbHVlPVwibWVhc3VyZW1lbnRPcHRpb25zLnZlcnRleFNuYXBcIlxyXG4gICAgICAgICAgQHVwZGF0ZTptb2RlbC12YWx1ZT1cInRvZ2dsZU1lYXN1cmVtZW50c1NuYXBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjMzOjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9WaWV3ZXJMYXlvdXRQYW5lbD5cclxuICAgIDxWaWV3ZXJMYXlvdXRQYW5lbCBjbGFzcz1cIm10LTEgcC0xIHByLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjQyOjVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9tZWFzdXJlbWVudHMvTWVudS52dWU6NDM6N1wiPlxyXG4gICAgICAgIDxWaWV3ZXJCdXR0b25Hcm91cCBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjQ0OjlcIj5cclxuICAgICAgICAgIDxWaWV3ZXJCdXR0b25Hcm91cEJ1dHRvblxyXG4gICAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBtZWFzdXJlbWVudFR5cGVPcHRpb25zXCJcclxuICAgICAgICAgICAgOmtleT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgIHYtdGlwcHk9XCJnZXRUb29sdGlwUHJvcHMob3B0aW9uLnRpdGxlKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2l6ZS04XCJcclxuICAgICAgICAgICAgOmlzLWFjdGl2ZT1cIm1lYXN1cmVtZW50T3B0aW9ucy50eXBlID09PSBvcHRpb24udmFsdWVcIlxyXG4gICAgICAgICAgICBAY2xpY2s9XCJ1cGRhdGVNZWFzdXJlbWVudHNUeXBlKG9wdGlvbilcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjQ1OjExXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGNvbXBvbmVudCA6aXM9XCJvcHRpb24uaWNvblwiIGNsYXNzPVwic2l6ZS01IGZsZXgtc2hyaW5rLTBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjUzOjEzXCIgLz5cclxuICAgICAgICAgIDwvVmlld2VyQnV0dG9uR3JvdXBCdXR0b24+XHJcbiAgICAgICAgPC9WaWV3ZXJCdXR0b25Hcm91cD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTEuNVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9tZWFzdXJlbWVudHMvTWVudS52dWU6NTc6OVwiPlxyXG4gICAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgICAgc2l6ZT1cInNtXCJcclxuICAgICAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cImNsZWFyTWVhc3VyZW1lbnRzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL21lYXN1cmVtZW50cy9NZW51LnZ1ZTo1ODoxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIERlbGV0ZSBhbGxcclxuICAgICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJzaXplLTYgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1tZFwiXHJcbiAgICAgICAgICAgIDpjbGFzcz1cIltcclxuICAgICAgICAgICAgICBzaG93U2V0dGluZ3MgJiZcclxuICAgICAgICAgICAgICAgICd0ZXh0LXByaW1hcnktZm9jdXMgYmctaW5mby1saWdodGVyIGRhcms6dGV4dC1mb3JlZ3JvdW5kLW9uLXByaW1hcnknLFxyXG4gICAgICAgICAgICAgICFzaG93U2V0dGluZ3MgJiYgJ3RleHQtZm9yZWdyb3VuZCBob3ZlcjpiZy1mb3VuZGF0aW9uLTInXHJcbiAgICAgICAgICAgIF1cIlxyXG4gICAgICAgICAgICBAY2xpY2s9XCJzaG93U2V0dGluZ3MgPSAhc2hvd1NldHRpbmdzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL21lYXN1cmVtZW50cy9NZW51LnZ1ZTo2NjoxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxJY29uVmlld2VyU2V0dGluZ3MgY2xhc3M9XCJzaXplLTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvbWVhc3VyZW1lbnRzL01lbnUudnVlOjc1OjEzXCIgLz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvVmlld2VyTGF5b3V0UGFuZWw+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBNZWFzdXJlbWVudFR5cGUgfSBmcm9tICdAc3BlY2tsZS9zaGFyZWQvdmlld2VyL3N0YXRlJ1xyXG5pbXBvcnQgeyB1c2VNZWFzdXJlbWVudFV0aWxpdGllcyB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvdWknXHJcblxyXG5pbnRlcmZhY2UgTWVhc3VyZW1lbnRUeXBlT3B0aW9uIHtcclxuICB0aXRsZTogc3RyaW5nXHJcbiAgdmFsdWU6IE1lYXN1cmVtZW50VHlwZVxyXG59XHJcblxyXG5jb25zdCB7IG1lYXN1cmVtZW50T3B0aW9ucywgc2V0TWVhc3VyZW1lbnRPcHRpb25zLCBjbGVhck1lYXN1cmVtZW50cyB9ID1cclxuICB1c2VNZWFzdXJlbWVudFV0aWxpdGllcygpXHJcbmNvbnN0IHsgZ2V0VG9vbHRpcFByb3BzIH0gPSB1c2VTbWFydFRvb2x0aXBEZWxheSgpXHJcblxyXG5jb25zdCBzaG93U2V0dGluZ3MgPSByZWYoZmFsc2UpXHJcblxyXG5jb25zdCB1cGRhdGVNZWFzdXJlbWVudHNUeXBlID0gKHNlbGVjdGVkT3B0aW9uOiBNZWFzdXJlbWVudFR5cGVPcHRpb24pID0+IHtcclxuICBzZXRNZWFzdXJlbWVudE9wdGlvbnMoe1xyXG4gICAgLi4ubWVhc3VyZW1lbnRPcHRpb25zLnZhbHVlLFxyXG4gICAgdHlwZTogc2VsZWN0ZWRPcHRpb24udmFsdWVcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBvbkNoYW5nZU1lYXN1cmVtZW50VW5pdHMgPSAobmV3VW5pdDogc3RyaW5nKSA9PiB7XHJcbiAgc2V0TWVhc3VyZW1lbnRPcHRpb25zKHtcclxuICAgIC4uLm1lYXN1cmVtZW50T3B0aW9ucy52YWx1ZSxcclxuICAgIHVuaXRzOiBuZXdVbml0XHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgdG9nZ2xlTWVhc3VyZW1lbnRzQ2hhaW5pbmcgPSAoKSA9PiB7XHJcbiAgc2V0TWVhc3VyZW1lbnRPcHRpb25zKHtcclxuICAgIC4uLm1lYXN1cmVtZW50T3B0aW9ucy52YWx1ZSxcclxuICAgIGNoYWluOiAhbWVhc3VyZW1lbnRPcHRpb25zLnZhbHVlLmNoYWluXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgdG9nZ2xlTWVhc3VyZW1lbnRzU25hcCA9ICgpID0+IHtcclxuICBzZXRNZWFzdXJlbWVudE9wdGlvbnMoe1xyXG4gICAgLi4ubWVhc3VyZW1lbnRPcHRpb25zLnZhbHVlLFxyXG4gICAgdmVydGV4U25hcDogIW1lYXN1cmVtZW50T3B0aW9ucy52YWx1ZS52ZXJ0ZXhTbmFwXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgbWVhc3VyZW1lbnRUeXBlT3B0aW9ucyA9IFtcclxuICB7XHJcbiAgICB0aXRsZTogJ1BvaW50IHRvIFBvaW50JyxcclxuICAgIGljb246ICdJY29uTWVhc3VyZVBvaW50VG9Qb2ludCcsXHJcbiAgICB2YWx1ZTogTWVhc3VyZW1lbnRUeXBlLlBPSU5UVE9QT0lOVCxcclxuICAgIGRlc2NyaXB0aW9uOiAnTWVhc3VyZSBiZXR3ZWVuIHR3byBwb2ludHMnXHJcbiAgfSxcclxuICB7XHJcbiAgICB0aXRsZTogJ1BlcnBlbmRpY3VsYXInLFxyXG4gICAgaWNvbjogJ0ljb25NZWFzdXJlUGVycGVuZGljdWxhcicsXHJcbiAgICB2YWx1ZTogTWVhc3VyZW1lbnRUeXBlLlBFUlBFTkRJQ1VMQVIsXHJcbiAgICBkZXNjcmlwdGlvbjogJ01lYXN1cmUgYXQgYSA5MMKwIGFuZ2xlJ1xyXG4gIH0sXHJcbiAge1xyXG4gICAgdGl0bGU6ICdBcmVhJyxcclxuICAgIGljb246ICdJY29uTWVhc3VyZUFyZWEnLFxyXG4gICAgdmFsdWU6IE1lYXN1cmVtZW50VHlwZS5BUkVBLFxyXG4gICAgZGVzY3JpcHRpb246ICdNZWFzdXJlIGFyZWEgYmV0d2VlbiBwb2ludHMnXHJcbiAgfSxcclxuICB7XHJcbiAgICB0aXRsZTogJ1BvaW50IGNvb3JkaW5hdGVzJyxcclxuICAgIGljb246ICdJY29uTWVhc3VyZVBvaW50JyxcclxuICAgIHZhbHVlOiBNZWFzdXJlbWVudFR5cGUuUE9JTlQsXHJcbiAgICBkZXNjcmlwdGlvbjogJ01lYXN1cmUgWFlaIGNvb3JkaW5hdGVzJ1xyXG4gIH1cclxuXVxyXG48L3NjcmlwdD5cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2NvbXBvbmVudHMvdmlld2VyL21lYXN1cmVtZW50cy9NZW51LnZ1ZSJ9