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

258 lines
28 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue");/* Injection by vite-plugin-vue-inspector Start */
import { createElementVNode as __createElementVNode,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 _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 { ref, watchEffect } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { PANEL_MAX, PANEL_MIN, popupWindow, state } from "/_nuxt/node_modules/@nuxt/devtools/dist/runtime/plugins/view/state.js?v=e4f18c29";
import { useEventListener } from "/_nuxt/node_modules/@nuxt/devtools/dist/runtime/plugins/view/utils.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "FrameBox",
props: {
client: { type: Object, required: true },
isDragging: { type: Boolean, required: true }
},
setup(__props, { expose: __expose }) {
__expose();
const props = __props;
const container = ref();
const isResizing = ref(false);
watchEffect(() => {
if (!container.value)
return;
if (state.value.open) {
const iframe = props.client.getIframe();
if (!iframe)
return;
iframe.style.pointerEvents = isResizing.value || props.isDragging || props.client.inspector?.isEnabled.value ? "none" : "auto";
if (!popupWindow.value) {
if (Array.from(container.value.children).every((el) => el !== iframe))
container.value.appendChild(iframe);
}
}
});
useEventListener(window, "keydown", (e) => {
if (e.key === "Escape" && props.client.inspector?.isEnabled.value) {
e.preventDefault();
props.client.inspector?.disable();
props.client.devtools.close();
}
});
useEventListener(window, "mousedown", (e) => {
if (!state.value.closeOnOutsideClick)
return;
if (popupWindow.value)
return;
if (!state.value.open || isResizing.value || props.client.inspector?.isEnabled.value)
return;
const matched = e.composedPath().find((_el) => {
const el = _el;
return Array.from(el.classList || []).some((c) => c.startsWith("nuxt-devtools-")) || el.tagName?.toLowerCase() === "iframe";
});
if (!matched)
state.value.open = false;
});
function handleResize(e) {
if (!isResizing.value || !state.value.open)
return;
const iframe = props.client.getIframe();
if (!iframe)
return;
const box = iframe.getBoundingClientRect();
let widthPx, heightPx;
if (isResizing.value.right) {
widthPx = Math.abs(e instanceof MouseEvent ? e.clientX : (e.touches[0]?.clientX || 0) - (box?.left || 0));
state.value.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
} else if (isResizing.value.left) {
widthPx = Math.abs((box?.right || 0) - (e instanceof MouseEvent ? e.clientX : e.touches[0]?.clientX || 0));
state.value.width = Math.min(PANEL_MAX, Math.max(PANEL_MIN, widthPx / window.innerWidth * 100));
}
if (isResizing.value.top) {
heightPx = Math.abs((box?.bottom || 0) - (e instanceof MouseEvent ? e.clientY : e.touches[0]?.clientY || 0));
state.value.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
} else if (isResizing.value.bottom) {
heightPx = Math.abs(e instanceof MouseEvent ? e.clientY : (e.touches[0]?.clientY || 0) - (box?.top || 0));
state.value.height = Math.min(PANEL_MAX, Math.max(PANEL_MIN, heightPx / window.innerHeight * 100));
}
}
useEventListener(window, "mousemove", handleResize);
useEventListener(window, "touchmove", handleResize);
useEventListener(window, "mouseup", () => isResizing.value = false);
useEventListener(window, "touchend", () => isResizing.value = false);
useEventListener(window, "mouseleave", () => isResizing.value = false);
const __returned__ = { props, container, isResizing, handleResize, get popupWindow() {
return popupWindow;
}, get state() {
return state;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { createCommentVNode as _createCommentVNode, vShow as _vShow, withModifiers as _withModifiers, withDirectives as _withDirectives, openBlock as _openBlock, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = {
ref: "container",
class: "nuxt-devtools-frame",
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:100:3"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return _withDirectives((_openBlock(), _createElementBlock(
"div",
_hoisted_1,
[
_createCommentVNode(" Handlers "),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-horizontal",
style: { top: 0 },
onMousedown: _cache[0] || (_cache[0] = _withModifiers(($event) => $setup.isResizing = { top: true }, ["prevent"])),
onTouchstartPassive: _cache[1] || (_cache[1] = () => $setup.isResizing = { top: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:106:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "top"]
]),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-horizontal",
style: { bottom: 0 },
onMousedown: _cache[2] || (_cache[2] = _withModifiers(() => $setup.isResizing = { bottom: true }, ["prevent"])),
onTouchstartPassive: _cache[3] || (_cache[3] = () => $setup.isResizing = { bottom: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:113:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "bottom"]
]),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-vertical",
style: { left: 0 },
onMousedown: _cache[4] || (_cache[4] = _withModifiers(() => $setup.isResizing = { left: true }, ["prevent"])),
onTouchstartPassive: _cache[5] || (_cache[5] = () => $setup.isResizing = { left: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:120:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "left"]
]),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-vertical",
style: { right: 0 },
onMousedown: _cache[6] || (_cache[6] = _withModifiers(() => $setup.isResizing = { right: true }, ["prevent"])),
onTouchstartPassive: _cache[7] || (_cache[7] = () => $setup.isResizing = { right: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:127:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "right"]
]),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-corner",
style: { top: 0, left: 0, cursor: "nwse-resize" },
onMousedown: _cache[8] || (_cache[8] = _withModifiers(() => $setup.isResizing = { top: true, left: true }, ["prevent"])),
onTouchstartPassive: _cache[9] || (_cache[9] = () => $setup.isResizing = { top: true, left: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:134:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "top" && $setup.state.position !== "left"]
]),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-corner",
style: { top: 0, right: 0, cursor: "nesw-resize" },
onMousedown: _cache[10] || (_cache[10] = _withModifiers(() => $setup.isResizing = { top: true, right: true }, ["prevent"])),
onTouchstartPassive: _cache[11] || (_cache[11] = () => $setup.isResizing = { top: true, right: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:141:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "top" && $setup.state.position !== "right"]
]),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-corner",
style: { bottom: 0, left: 0, cursor: "nesw-resize" },
onMousedown: _cache[12] || (_cache[12] = _withModifiers(() => $setup.isResizing = { bottom: true, left: true }, ["prevent"])),
onTouchstartPassive: _cache[13] || (_cache[13] = () => $setup.isResizing = { bottom: true, left: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:148:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "bottom" && $setup.state.position !== "left"]
]),
_withDirectives(_createElementVNode(
"div",
{
class: "nuxt-devtools-resize-handle nuxt-devtools-resize-handle-corner",
style: { bottom: 0, right: 0, cursor: "nwse-resize" },
onMousedown: _cache[14] || (_cache[14] = _withModifiers(() => $setup.isResizing = { bottom: true, right: true }, ["prevent"])),
onTouchstartPassive: _cache[15] || (_cache[15] = () => $setup.isResizing = { bottom: true, right: true }),
"data-v-inspector": "node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue:155:5"
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vShow, $setup.state.position !== "bottom" && $setup.state.position !== "right"]
])
],
512
/* NEED_PATCH */
)), [
[_vShow, $setup.state.open && !$props.client.inspector?.isEnabled.value && !$setup.popupWindow]
]);
}
import "/_nuxt/node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue?vue&type=style&index=0&scoped=233db32a&lang.css";
_sfc_main.__hmrId = "233db32a";
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], ["__scopeId", "data-v-233db32a"], ["__file", "D:/speckle-server/packages/frontend-2/node_modules/@nuxt/devtools/dist/runtime/plugins/view/FrameBox.vue"]]);
//# sourceMappingURL=data:application/json;base64,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QUFXLFVBQVUsU0FBSyxDQUFLLGtCQUFXO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkZyYW1lQm94LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuaW1wb3J0IHR5cGUgeyBOdXh0RGV2dG9vbHNIb3N0Q2xpZW50IH0gZnJvbSAnQG51eHQvZGV2dG9vbHMvdHlwZXMnXG5pbXBvcnQgeyByZWYsIHdhdGNoRWZmZWN0IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgUEFORUxfTUFYLCBQQU5FTF9NSU4sIHBvcHVwV2luZG93LCBzdGF0ZSB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyB1c2VFdmVudExpc3RlbmVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XG4gIGNsaWVudDogTnV4dERldnRvb2xzSG9zdENsaWVudFxuICBpc0RyYWdnaW5nOiBib29sZWFuXG59PigpXG5cbmNvbnN0IGNvbnRhaW5lciA9IHJlZjxIVE1MRWxlbWVudD4oKVxuY29uc3QgaXNSZXNpemluZyA9IHJlZjxmYWxzZSB8IHsgdG9wPzogYm9vbGVhbiwgbGVmdD86IGJvb2xlYW4sIHJpZ2h0PzogYm9vbGVhbiwgYm90dG9tPzogYm9vbGVhbiB9PihmYWxzZSlcblxud2F0Y2hFZmZlY3QoKCkgPT4ge1xuICBpZiAoIWNvbnRhaW5lci52YWx1ZSlcbiAgICByZXR1cm5cblxuICBpZiAoc3RhdGUudmFsdWUub3Blbikge1xuICAgIGNvbnN0IGlmcmFtZSA9IHByb3BzLmNsaWVudC5nZXRJZnJhbWUoKVxuICAgIGlmICghaWZyYW1lKVxuICAgICAgcmV0dXJuXG5cbiAgICBpZnJhbWUuc3R5bGUucG9pbnRlckV2ZW50cyA9IChpc1Jlc2l6aW5nLnZhbHVlIHx8IHByb3BzLmlzRHJhZ2dpbmcgfHwgcHJvcHMuY2xpZW50Lmluc3BlY3Rvcj8uaXNFbmFibGVkLnZhbHVlKVxuICAgICAgPyAnbm9uZSdcbiAgICAgIDogJ2F1dG8nXG5cbiAgICBpZiAoIXBvcHVwV2luZG93LnZhbHVlKSB7XG4gICAgICBpZiAoQXJyYXkuZnJvbShjb250YWluZXIudmFsdWUuY2hpbGRyZW4pLmV2ZXJ5KGVsID0+IGVsICE9PSBpZnJhbWUpKVxuICAgICAgICBjb250YWluZXIudmFsdWUuYXBwZW5kQ2hpbGQoaWZyYW1lKVxuICAgIH1cbiAgfVxufSlcblxudXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdrZXlkb3duJywgKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgaWYgKGUua2V5ID09PSAnRXNjYXBlJyAmJiBwcm9wcy5jbGllbnQuaW5zcGVjdG9yPy5pc0VuYWJsZWQudmFsdWUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBwcm9wcy5jbGllbnQuaW5zcGVjdG9yPy5kaXNhYmxlKClcbiAgICBwcm9wcy5jbGllbnQuZGV2dG9vbHMuY2xvc2UoKVxuICB9XG59KVxuXG4vLyBDbG9zZSBwYW5lbCBvbiBvdXRzaWRlIGNsaWNrICh3aGVuIGVuYWJsZWQpXG51c2VFdmVudExpc3RlbmVyKHdpbmRvdywgJ21vdXNlZG93bicsIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gIGlmICghc3RhdGUudmFsdWUuY2xvc2VPbk91dHNpZGVDbGljaylcbiAgICByZXR1cm5cbiAgaWYgKHBvcHVwV2luZG93LnZhbHVlKVxuICAgIHJldHVyblxuICBpZiAoIXN0YXRlLnZhbHVlLm9wZW4gfHwgaXNSZXNpemluZy52YWx1ZSB8fCBwcm9wcy5jbGllbnQuaW5zcGVjdG9yPy5pc0VuYWJsZWQudmFsdWUpXG4gICAgcmV0dXJuXG5cbiAgY29uc3QgbWF0Y2hlZCA9IGUuY29tcG9zZWRQYXRoKCkuZmluZCgoX2VsKSA9PiB7XG4gICAgY29uc3QgZWwgPSBfZWwgYXMgSFRNTEVsZW1lbnRcbiAgICByZXR1cm4gQXJyYXkuZnJvbShlbC5jbGFzc0xpc3QgfHwgW10pLnNvbWUoYyA9PiBjLnN0YXJ0c1dpdGgoJ251eHQtZGV2dG9vbHMtJykpXG4gICAgICB8fCBlbC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSAnaWZyYW1lJ1xuICB9KVxuXG4gIGlmICghbWF0Y2hlZClcbiAgICBzdGF0ZS52YWx1ZS5vcGVuID0gZmFsc2Vcbn0pXG5cbmZ1bmN0aW9uIGhhbmRsZVJlc2l6ZShlOiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCkge1xuICBpZiAoIWlzUmVzaXppbmcudmFsdWUgfHwgIXN0YXRlLnZhbHVlLm9wZW4pXG4gICAgcmV0dXJuXG5cbiAgY29uc3QgaWZyYW1lID0gcHJvcHMuY2xpZW50LmdldElmcmFtZSgpXG4gIGlmICghaWZyYW1lKVxuICAgIHJldHVyblxuXG4gIGNvbnN0IGJveCA9IGlmcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gIGxldCB3aWR0aFB4OiBudW1iZXIsIGhlaWdodFB4OiBudW1iZXJcbiAgaWYgKGlzUmVzaXppbmcudmFsdWUucmlnaHQpIHtcbiAgICB3aWR0aFB4ID0gTWF0aC5hYnMoZSBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgPyBlLmNsaWVudFggOiAoZS50b3VjaGVzWzBdPy5jbGllbnRYIHx8IDApIC0gKGJveD8ubGVmdCB8fCAwKSlcbiAgICBzdGF0ZS52YWx1ZS53aWR0aCA9IE1hdGgubWluKFBBTkVMX01BWCwgTWF0aC5tYXgoUEFORUxfTUlOLCB3aWR0aFB4IC8gd2luZG93LmlubmVyV2lkdGggKiAxMDApKVxuICB9XG4gIGVsc2UgaWYgKGlzUmVzaXppbmcudmFsdWUubGVmdCkge1xuICAgIHdpZHRoUHggPSBNYXRoLmFicygoYm94Py5yaWdodCB8fCAwKSAtIChlIGluc3RhbmNlb2YgTW91c2VFdmVudCA/IGUuY2xpZW50WCA6IChlLnRvdWNoZXNbMF0/LmNsaWVudFggfHwgMCkpKVxuICAgIHN0YXRlLnZhbHVlLndpZHRoID0gTWF0aC5taW4oUEFORUxfTUFYLCBNYXRoLm1heChQQU5FTF9NSU4sIHdpZHRoUHggLyB3aW5kb3cuaW5uZXJXaWR0aCAqIDEwMCkpXG4gIH1cblxuICBpZiAoaXNSZXNpemluZy52YWx1ZS50b3ApIHtcbiAgICBoZWlnaHRQeCA9IE1hdGguYWJzKChib3g/LmJvdHRvbSB8fCAwKSAtIChlIGluc3RhbmNlb2YgTW91c2VFdmVudCA/IGUuY2xpZW50WSA6IChlLnRvdWNoZXNbMF0/LmNsaWVudFkgfHwgMCkpKVxuICAgIHN0YXRlLnZhbHVlLmhlaWdodCA9IE1hdGgubWluKFBBTkVMX01BWCwgTWF0aC5tYXgoUEFORUxfTUlOLCBoZWlnaHRQeCAvIHdpbmRvdy5pbm5lckhlaWdodCAqIDEwMCkpXG4gIH1cbiAgZWxzZSBpZiAoaXNSZXNpemluZy52YWx1ZS5ib3R0b20pIHtcbiAgICBoZWlnaHRQeCA9IE1hdGguYWJzKGUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ID8gZS5jbGllbnRZIDogKGUudG91Y2hlc1swXT8uY2xpZW50WSB8fCAwKSAtIChib3g/LnRvcCB8fCAwKSlcbiAgICBzdGF0ZS52YWx1ZS5oZWlnaHQgPSBNYXRoLm1pbihQQU5FTF9NQVgsIE1hdGgubWF4KFBBTkVMX01JTiwgaGVpZ2h0UHggLyB3aW5kb3cuaW5uZXJIZWlnaHQgKiAxMDApKVxuICB9XG59XG5cbnVzZUV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2Vtb3ZlJywgaGFuZGxlUmVzaXplKVxudXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csICd0b3VjaG1vdmUnLCBoYW5kbGVSZXNpemUpXG51c2VFdmVudExpc3RlbmVyKHdpbmRvdywgJ21vdXNldXAnLCAoKSA9PiBpc1Jlc2l6aW5nLnZhbHVlID0gZmFsc2UpXG51c2VFdmVudExpc3RlbmVyKHdpbmRvdywgJ3RvdWNoZW5kJywgKCkgPT4gaXNSZXNpemluZy52YWx1ZSA9IGZhbHNlKVxudXNlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdtb3VzZWxlYXZlJywgKCkgPT4gaXNSZXNpemluZy52YWx1ZSA9IGZhbHNlKVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIHYtc2hvdz1cInN0YXRlLm9wZW4gJiYgIWNsaWVudC5pbnNwZWN0b3I/LmlzRW5hYmxlZC52YWx1ZSAmJiAhcG9wdXBXaW5kb3dcIlxuICAgIHJlZj1cImNvbnRhaW5lclwiXG4gICAgY2xhc3M9XCJudXh0LWRldnRvb2xzLWZyYW1lXCIgZGF0YS12LWluc3BlY3Rvcj1cIm5vZGVfbW9kdWxlcy9AbnV4dC9kZXZ0b29scy9kaXN0L3J1bnRpbWUvcGx1Z2lucy92aWV3L0ZyYW1lQm94LnZ1ZToxMDA6M1wiXG4gID5cbiAgICA8IS0tIEhhbmRsZXJzIC0tPlxuICAgIDxkaXZcbiAgICAgIHYtc2hvdz1cInN0YXRlLnBvc2l0aW9uICE9PSAndG9wJ1wiXG4gICAgICBjbGFzcz1cIm51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZSBudXh0LWRldnRvb2xzLXJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbFwiXG4gICAgICA6c3R5bGU9XCJ7IHRvcDogMCB9XCJcbiAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cImlzUmVzaXppbmcgPSB7IHRvcDogdHJ1ZSB9XCJcbiAgICAgIEB0b3VjaHN0YXJ0LnBhc3NpdmU9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyB0b3A6IHRydWUgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJub2RlX21vZHVsZXMvQG51eHQvZGV2dG9vbHMvZGlzdC9ydW50aW1lL3BsdWdpbnMvdmlldy9GcmFtZUJveC52dWU6MTA2OjVcIlxuICAgIC8+XG4gICAgPGRpdlxuICAgICAgdi1zaG93PVwic3RhdGUucG9zaXRpb24gIT09ICdib3R0b20nXCJcbiAgICAgIGNsYXNzPVwibnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlIG51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZS1ob3Jpem9udGFsXCJcbiAgICAgIDpzdHlsZT1cInsgYm90dG9tOiAwIH1cIlxuICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwiKCkgPT4gaXNSZXNpemluZyA9IHsgYm90dG9tOiB0cnVlIH1cIlxuICAgICAgQHRvdWNoc3RhcnQucGFzc2l2ZT1cIigpID0+IGlzUmVzaXppbmcgPSB7IGJvdHRvbTogdHJ1ZSB9XCIgZGF0YS12LWluc3BlY3Rvcj1cIm5vZGVfbW9kdWxlcy9AbnV4dC9kZXZ0b29scy9kaXN0L3J1bnRpbWUvcGx1Z2lucy92aWV3L0ZyYW1lQm94LnZ1ZToxMTM6NVwiXG4gICAgLz5cbiAgICA8ZGl2XG4gICAgICB2LXNob3c9XCJzdGF0ZS5wb3NpdGlvbiAhPT0gJ2xlZnQnXCJcbiAgICAgIGNsYXNzPVwibnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlIG51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZS12ZXJ0aWNhbFwiXG4gICAgICA6c3R5bGU9XCJ7IGxlZnQ6IDAgfVwiXG4gICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyBsZWZ0OiB0cnVlIH1cIlxuICAgICAgQHRvdWNoc3RhcnQucGFzc2l2ZT1cIigpID0+IGlzUmVzaXppbmcgPSB7IGxlZnQ6IHRydWUgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJub2RlX21vZHVsZXMvQG51eHQvZGV2dG9vbHMvZGlzdC9ydW50aW1lL3BsdWdpbnMvdmlldy9GcmFtZUJveC52dWU6MTIwOjVcIlxuICAgIC8+XG4gICAgPGRpdlxuICAgICAgdi1zaG93PVwic3RhdGUucG9zaXRpb24gIT09ICdyaWdodCdcIlxuICAgICAgY2xhc3M9XCJudXh0LWRldnRvb2xzLXJlc2l6ZS1oYW5kbGUgbnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlLXZlcnRpY2FsXCJcbiAgICAgIDpzdHlsZT1cInsgcmlnaHQ6IDAgfVwiXG4gICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyByaWdodDogdHJ1ZSB9XCJcbiAgICAgIEB0b3VjaHN0YXJ0LnBhc3NpdmU9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyByaWdodDogdHJ1ZSB9XCIgZGF0YS12LWluc3BlY3Rvcj1cIm5vZGVfbW9kdWxlcy9AbnV4dC9kZXZ0b29scy9kaXN0L3J1bnRpbWUvcGx1Z2lucy92aWV3L0ZyYW1lQm94LnZ1ZToxMjc6NVwiXG4gICAgLz5cbiAgICA8ZGl2XG4gICAgICB2LXNob3c9XCJzdGF0ZS5wb3NpdGlvbiAhPT0gJ3RvcCcgJiYgc3RhdGUucG9zaXRpb24gIT09ICdsZWZ0J1wiXG4gICAgICBjbGFzcz1cIm51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZSBudXh0LWRldnRvb2xzLXJlc2l6ZS1oYW5kbGUtY29ybmVyXCJcbiAgICAgIDpzdHlsZT1cInsgdG9wOiAwLCBsZWZ0OiAwLCBjdXJzb3I6ICdud3NlLXJlc2l6ZScgfVwiXG4gICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyB0b3A6IHRydWUsIGxlZnQ6IHRydWUgfVwiXG4gICAgICBAdG91Y2hzdGFydC5wYXNzaXZlPVwiKCkgPT4gaXNSZXNpemluZyA9IHsgdG9wOiB0cnVlLCBsZWZ0OiB0cnVlIH1cIiBkYXRhLXYtaW5zcGVjdG9yPVwibm9kZV9tb2R1bGVzL0BudXh0L2RldnRvb2xzL2Rpc3QvcnVudGltZS9wbHVnaW5zL3ZpZXcvRnJhbWVCb3gudnVlOjEzNDo1XCJcbiAgICAvPlxuICAgIDxkaXZcbiAgICAgIHYtc2hvdz1cInN0YXRlLnBvc2l0aW9uICE9PSAndG9wJyAmJiBzdGF0ZS5wb3NpdGlvbiAhPT0gJ3JpZ2h0J1wiXG4gICAgICBjbGFzcz1cIm51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZSBudXh0LWRldnRvb2xzLXJlc2l6ZS1oYW5kbGUtY29ybmVyXCJcbiAgICAgIDpzdHlsZT1cInsgdG9wOiAwLCByaWdodDogMCwgY3Vyc29yOiAnbmVzdy1yZXNpemUnIH1cIlxuICAgICAgQG1vdXNlZG93bi5wcmV2ZW50PVwiKCkgPT4gaXNSZXNpemluZyA9IHsgdG9wOiB0cnVlLCByaWdodDogdHJ1ZSB9XCJcbiAgICAgIEB0b3VjaHN0YXJ0LnBhc3NpdmU9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyB0b3A6IHRydWUsIHJpZ2h0OiB0cnVlIH1cIiBkYXRhLXYtaW5zcGVjdG9yPVwibm9kZV9tb2R1bGVzL0BudXh0L2RldnRvb2xzL2Rpc3QvcnVudGltZS9wbHVnaW5zL3ZpZXcvRnJhbWVCb3gudnVlOjE0MTo1XCJcbiAgICAvPlxuICAgIDxkaXZcbiAgICAgIHYtc2hvdz1cInN0YXRlLnBvc2l0aW9uICE9PSAnYm90dG9tJyAmJiBzdGF0ZS5wb3NpdGlvbiAhPT0gJ2xlZnQnXCJcbiAgICAgIGNsYXNzPVwibnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlIG51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZS1jb3JuZXJcIlxuICAgICAgOnN0eWxlPVwieyBib3R0b206IDAsIGxlZnQ6IDAsIGN1cnNvcjogJ25lc3ctcmVzaXplJyB9XCJcbiAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIigpID0+IGlzUmVzaXppbmcgPSB7IGJvdHRvbTogdHJ1ZSwgbGVmdDogdHJ1ZSB9XCJcbiAgICAgIEB0b3VjaHN0YXJ0LnBhc3NpdmU9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyBib3R0b206IHRydWUsIGxlZnQ6IHRydWUgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJub2RlX21vZHVsZXMvQG51eHQvZGV2dG9vbHMvZGlzdC9ydW50aW1lL3BsdWdpbnMvdmlldy9GcmFtZUJveC52dWU6MTQ4OjVcIlxuICAgIC8+XG4gICAgPGRpdlxuICAgICAgdi1zaG93PVwic3RhdGUucG9zaXRpb24gIT09ICdib3R0b20nICYmIHN0YXRlLnBvc2l0aW9uICE9PSAncmlnaHQnXCJcbiAgICAgIGNsYXNzPVwibnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlIG51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZS1jb3JuZXJcIlxuICAgICAgOnN0eWxlPVwieyBib3R0b206IDAsIHJpZ2h0OiAwLCBjdXJzb3I6ICdud3NlLXJlc2l6ZScgfVwiXG4gICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCIoKSA9PiBpc1Jlc2l6aW5nID0geyBib3R0b206IHRydWUsIHJpZ2h0OiB0cnVlIH1cIlxuICAgICAgQHRvdWNoc3RhcnQucGFzc2l2ZT1cIigpID0+IGlzUmVzaXppbmcgPSB7IGJvdHRvbTogdHJ1ZSwgcmlnaHQ6IHRydWUgfVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJub2RlX21vZHVsZXMvQG51eHQvZGV2dG9vbHMvZGlzdC9ydW50aW1lL3BsdWdpbnMvdmlldy9GcmFtZUJveC52dWU6MTU1OjVcIlxuICAgIC8+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIHNjb3BlZD5cbi5udXh0LWRldnRvb2xzLWZyYW1le2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ1Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9Lm51eHQtZGV2dG9vbHMtZnJhbWUgOmRlZXAoaWZyYW1lKXtiYWNrZ3JvdW5kOnZhcigtLW51eHQtZGV2dG9vbHMtd2lkZ2V0LWJnKTtib3JkZXI6MXB4IHNvbGlkIGhzbGEoMCwwJSw0OSUsLjIpO2JvcmRlci1yYWRpdXM6MTBweDtoZWlnaHQ6MTAwJTtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX0ubnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlLWhvcml6b250YWx7Ym9yZGVyLXJhZGl1czo1cHg7Y3Vyc29yOm5zLXJlc2l6ZTtoZWlnaHQ6MTBweDtsZWZ0OjZweDttYXJnaW46LTVweCAwO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjZweH0ubnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlLXZlcnRpY2Fse2JvcmRlci1yYWRpdXM6NXB4O2JvdHRvbTowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luOjAgLTVweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NnB4O3dpZHRoOjEwcHh9Lm51eHQtZGV2dG9vbHMtcmVzaXplLWhhbmRsZS1jb3JuZXJ7Ym9yZGVyLXJhZGl1czo2cHg7aGVpZ2h0OjE0cHg7bWFyZ2luOi02cHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTRweH0ubnV4dC1kZXZ0b29scy1yZXNpemUtaGFuZGxlOmhvdmVye2JhY2tncm91bmQ6aHNsYSgwLDAlLDQ5JSwuMSl9XG48L3N0eWxlPlxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL25vZGVfbW9kdWxlcy9AbnV4dC9kZXZ0b29scy9kaXN0L3J1bnRpbWUvcGx1Z2lucy92aWV3L0ZyYW1lQm94LnZ1ZSIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswXX0=