__vite_ssr_exportName__("PROVIDER_SEND_TURN_MAX_INPUT_CHARS", () => { try { return PROVIDER_SEND_TURN_MAX_INPUT_CHARS } catch {} });
__vite_ssr_exportName__("PROVIDER_SEND_TURN_MAX_ATTACHMENTS", () => { try { return PROVIDER_SEND_TURN_MAX_ATTACHMENTS } catch {} });
__vite_ssr_exportName__("PROVIDER_SEND_TURN_MAX_IMAGE_BYTES", () => { try { return PROVIDER_SEND_TURN_MAX_IMAGE_BYTES } catch {} });
__vite_ssr_exportName__("PROVIDER_SEND_TURN_MAX_FILE_BYTES", () => { try { return PROVIDER_SEND_TURN_MAX_FILE_BYTES } catch {} });
__vite_ssr_exportName__("PROVIDER_SEND_TURN_SUPPORTED_IMAGE_MIME_TYPES", () => { try { return PROVIDER_SEND_TURN_SUPPORTED_IMAGE_MIME_TYPES } catch {} });
__vite_ssr_exportName__("isProviderSendTurnSupportedImageMimeType", () => { try { return isProviderSendTurnSupportedImageMimeType } catch {} });
__vite_ssr_exportName__("ChatAttachmentId", () => { try { return ChatAttachmentId } catch {} });
__vite_ssr_exportName__("SNAP_SHOT_ACCESSIBLE_TEXT_MAX_CHARS", () => { try { return SNAP_SHOT_ACCESSIBLE_TEXT_MAX_CHARS } catch {} });
__vite_ssr_exportName__("SNAP_SHOT_ACCESSIBILITY_MAX_NODES", () => { try { return SNAP_SHOT_ACCESSIBILITY_MAX_NODES } catch {} });
__vite_ssr_exportName__("SNAP_SHOT_ACCESSIBILITY_MAX_SERIALIZED_CHARS", () => { try { return SNAP_SHOT_ACCESSIBILITY_MAX_SERIALIZED_CHARS } catch {} });
__vite_ssr_exportName__("SnapShotAccessibilityNode", () => { try { return SnapShotAccessibilityNode } catch {} });
__vite_ssr_exportName__("SnapShotAccessibility", () => { try { return SnapShotAccessibility } catch {} });
__vite_ssr_exportName__("SnapShotSource", () => { try { return SnapShotSource } catch {} });
__vite_ssr_exportName__("ChatImageAttachment", () => { try { return ChatImageAttachment } catch {} });
__vite_ssr_exportName__("PastedTextAttachmentSource", () => { try { return PastedTextAttachmentSource } catch {} });
__vite_ssr_exportName__("ChatFileAttachment", () => { try { return ChatFileAttachment } catch {} });
__vite_ssr_exportName__("ChatUnknownAttachment", () => { try { return ChatUnknownAttachment } catch {} });
__vite_ssr_exportName__("UploadChatImageAttachment", () => { try { return UploadChatImageAttachment } catch {} });
__vite_ssr_exportName__("ChatAttachment", () => { try { return ChatAttachment } catch {} });
__vite_ssr_exportName__("getProviderAttachmentLimitError", () => { try { return getProviderAttachmentLimitError } catch {} });
__vite_ssr_exportName__("UploadChatAttachment", () => { try { return UploadChatAttachment } catch {} });
__vite_ssr_exportName__("PersistChatAttachmentsInput", () => { try { return PersistChatAttachmentsInput } catch {} });
__vite_ssr_exportName__("PersistChatAttachmentsResult", () => { try { return PersistChatAttachmentsResult } catch {} });
__vite_ssr_exportName__("PersistChatAttachmentsError", () => { try { return PersistChatAttachmentsError } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Schema.js");
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["IsoDateTime","MessageId","NonNegativeInt","PositiveInt","ThreadId","TrimmedNonEmptyString","TrimmedString"]});


const PROVIDER_SEND_TURN_MAX_INPUT_CHARS = 12e4;
const PROVIDER_SEND_TURN_MAX_ATTACHMENTS = 100;
const PROVIDER_SEND_TURN_MAX_IMAGE_BYTES = 10 * 1024 * 1024;
const PROVIDER_SEND_TURN_MAX_TOTAL_IMAGE_BYTES = 80 * 1024 * 1024;
const PROVIDER_SEND_TURN_MAX_FILE_BYTES = 50 * 1024 * 1024;
const PROVIDER_SEND_TURN_SUPPORTED_IMAGE_MIME_TYPES = [
	"image/gif",
	"image/jpeg",
	"image/png",
	"image/webp"
];
const PROVIDER_SEND_TURN_SUPPORTED_IMAGE_MIME_TYPE_SET = new Set(PROVIDER_SEND_TURN_SUPPORTED_IMAGE_MIME_TYPES);
function isProviderSendTurnSupportedImageMimeType(mimeType) {
	return PROVIDER_SEND_TURN_SUPPORTED_IMAGE_MIME_TYPE_SET.has(mimeType.toLowerCase());
};
const PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS = 14e6;
const CHAT_ATTACHMENT_ID_MAX_CHARS = 128;
const ChatAttachmentId = __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(CHAT_ATTACHMENT_ID_MAX_CHARS), __vite_ssr_import_0__.isPattern(/^[a-z0-9_-]+$/i));
const SNAP_SHOT_ACCESSIBLE_TEXT_MAX_CHARS = 32e3;
const SNAP_SHOT_ACCESSIBILITY_MAX_NODES = 1e4;
const SNAP_SHOT_ACCESSIBILITY_MAX_SERIALIZED_CHARS = 32e3;
const SnapShotAccessibilityBounds = __vite_ssr_import_0__.Struct({
	x: __vite_ssr_import_1__.NonNegativeInt,
	y: __vite_ssr_import_1__.NonNegativeInt,
	width: __vite_ssr_import_1__.PositiveInt,
	height: __vite_ssr_import_1__.PositiveInt
});
const SnapShotAccessibilityState = __vite_ssr_import_0__.Struct({
	active: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	busy: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	checked: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Literals([
		"on",
		"off",
		"mixed"
	])),
	editable: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	enabled: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	expanded: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	focused: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	selected: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	visible: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean)
});
const SnapShotAccessibilityNode = __vite_ssr_import_0__.Struct({
	role: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(100)),
	name: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(1e3))),
	value: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(8e3))),
	description: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(2e3))),
	bounds: __vite_ssr_import_0__.NullOr(SnapShotAccessibilityBounds),
	state: __vite_ssr_import_0__.optionalKey(SnapShotAccessibilityState),
	actions: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.mutable(__vite_ssr_import_0__.Array(__vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(100)))).check(__vite_ssr_import_0__.isMaxLength(32))),
	children: __vite_ssr_import_0__.mutable(__vite_ssr_import_0__.Array(__vite_ssr_import_0__.suspend(() => SnapShotAccessibilityNode))).check(__vite_ssr_import_0__.isMaxLength(SNAP_SHOT_ACCESSIBILITY_MAX_NODES))
});
const SnapShotAccessibilityWire = __vite_ssr_import_0__.Union([__vite_ssr_import_0__.Struct({
	format: __vite_ssr_import_0__.Literal("flat-text"),
	text: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(SNAP_SHOT_ACCESSIBLE_TEXT_MAX_CHARS)),
	truncated: __vite_ssr_import_0__.Boolean
}), __vite_ssr_import_0__.Struct({
	format: __vite_ssr_import_0__.Literal("element-tree"),
	coordinateSpace: __vite_ssr_import_0__.Literal("captured-image"),
	imageSize: __vite_ssr_import_0__.Struct({
		width: __vite_ssr_import_1__.PositiveInt,
		height: __vite_ssr_import_1__.PositiveInt
	}),
	truncated: __vite_ssr_import_0__.Boolean,
	root: SnapShotAccessibilityNode
})]);
const SnapShotAccessibility = SnapShotAccessibilityWire.check(__vite_ssr_import_0__.makeFilter((accessibility) => {
	if (accessibility.format === "flat-text") return undefined;
	let nodes = 0;
	const stack = [accessibility.root];
	while (stack.length > 0) {
		const node = stack.pop();
		nodes += 1;
		if (nodes > SNAP_SHOT_ACCESSIBILITY_MAX_NODES) {
			return `Accessibility trees must not exceed ${SNAP_SHOT_ACCESSIBILITY_MAX_NODES} nodes.`;
		};
		stack.push(...node.children);
	};
	return JSON.stringify(accessibility).length <= SNAP_SHOT_ACCESSIBILITY_MAX_SERIALIZED_CHARS || `Accessibility trees must not exceed ${SNAP_SHOT_ACCESSIBILITY_MAX_SERIALIZED_CHARS} serialized characters.`;
}));
const SnapShotSource = __vite_ssr_import_0__.Struct({
	kind: __vite_ssr_import_0__.Literal("snap-shot"),
	capturedAt: __vite_ssr_import_1__.IsoDateTime,
	appName: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	windowTitle: __vite_ssr_import_1__.TrimmedString.check(__vite_ssr_import_0__.isMaxLength(1e3)),
	accessibleText: __vite_ssr_import_0__.optional(__vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(SNAP_SHOT_ACCESSIBLE_TEXT_MAX_CHARS))),
	accessibility: __vite_ssr_import_0__.optional(SnapShotAccessibility),
	appIdentifier: __vite_ssr_import_0__.optional(__vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255))),
	appIconDataUrl: __vite_ssr_import_0__.optional(__vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(1e5), __vite_ssr_import_0__.isPattern(/^data:image\/png;base64,/i)))
});
const ChatImageAttachment = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("image"),
	id: ChatAttachmentId,
	name: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	mimeType: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(100), __vite_ssr_import_0__.isPattern(/^image\//i)),
	sizeBytes: __vite_ssr_import_1__.NonNegativeInt.check(__vite_ssr_import_0__.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_IMAGE_BYTES)),
	source: __vite_ssr_import_0__.optional(SnapShotSource)
});
const PastedTextAttachmentSource = __vite_ssr_import_0__.TaggedStruct("pasted-text", {});
const ChatFileAttachment = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("file"),
	id: ChatAttachmentId,
	name: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	mimeType: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(100)),
	sizeBytes: __vite_ssr_import_1__.NonNegativeInt.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(1), __vite_ssr_import_0__.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_FILE_BYTES)),
	/** Keep path-only so agents inspect selectively without consuming the context folding preserves. */
	source: __vite_ssr_import_0__.optional(PastedTextAttachmentSource)
});
/** Accepts unknown attachment types for older readers; malformed known types must fail their own schema. */
const ChatUnknownAttachment = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(50), __vite_ssr_import_0__.isPattern(/^(?!(?:image|file)$)/)),
	id: ChatAttachmentId,
	name: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	mimeType: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(100)),
	sizeBytes: __vite_ssr_import_1__.NonNegativeInt
});
const UploadChatImageAttachment = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_0__.optional(ChatAttachmentId),
	type: __vite_ssr_import_0__.Literal("image"),
	name: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(255)),
	mimeType: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(100), __vite_ssr_import_0__.isPattern(/^image\//i)),
	sizeBytes: __vite_ssr_import_1__.NonNegativeInt.check(__vite_ssr_import_0__.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_IMAGE_BYTES)),
	dataUrl: __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isMaxLength(PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS)),
	source: __vite_ssr_import_0__.optional(SnapShotSource)
});
const ChatAttachment = __vite_ssr_import_0__.Union([
	ChatImageAttachment,
	ChatFileAttachment,
	ChatUnknownAttachment
]);
function getProviderAttachmentLimitError(attachments) {
	if (attachments.length > PROVIDER_SEND_TURN_MAX_ATTACHMENTS) {
		return `You can attach up to ${PROVIDER_SEND_TURN_MAX_ATTACHMENTS} files per message or question response.`;
	};
	const imageBytes = attachments.reduce((total, attachment) => total + (attachment.type === "image" || isProviderSendTurnSupportedImageMimeType(attachment.mimeType) ? attachment.sizeBytes : 0), 0);
	if (imageBytes > PROVIDER_SEND_TURN_MAX_TOTAL_IMAGE_BYTES) {
		return "Images can total up to 80 MiB per message or question response. Use smaller images or send fewer at once.";
	}
};
const UploadChatAttachment = __vite_ssr_import_0__.Union([UploadChatImageAttachment]);
const PersistChatAttachmentsInput = __vite_ssr_import_0__.Struct({
	threadId: __vite_ssr_import_1__.ThreadId,
	messageId: __vite_ssr_import_1__.MessageId,
	attachments: __vite_ssr_import_0__.Array(UploadChatAttachment)
});
const PersistChatAttachmentsResult = __vite_ssr_import_0__.Struct({ attachments: __vite_ssr_import_0__.Array(ChatAttachment) });
class PersistChatAttachmentsError extends __vite_ssr_import_0__.TaggedError()("PersistChatAttachmentsError", {
	message: __vite_ssr_import_0__.String,
	cause: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Defect())
}) {}
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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O0NBQzlGLFNBQVMsNENBQXNCLE1BQzdCLHNCQUFPLFlBQVksMkNBQTJDLENBQ2hFO0NBQ0EsUUFBUSxzQkFBTyxTQUFTLGNBQWM7QUFDeEMsQ0FBQztBQUdNLE1BQU0saUJBQWlCLHNCQUFPLE1BQU07Q0FDekM7Q0FDQTtDQUNBO0FBQ0YsQ0FBQztBQUdNLFNBQVMsZ0NBQ2QsYUFDb0I7Q0FDcEIsSUFBSSxZQUFZLFNBQVMsb0NBQW9DO0VBQzNELE9BQU8sd0JBQXdCLG1DQUFtQztDQUNwRTtDQUNBLE1BQU0sYUFBYSxZQUFZLFFBQzVCLE9BQU8sZUFDTixTQUNDLFdBQVcsU0FBUyxXQUFXLHlDQUF5QyxXQUFXLFFBQVEsSUFDeEYsV0FBVyxZQUNYLElBQ04sQ0FDRjtDQUNBLElBQUksYUFBYSwwQ0FBMEM7RUFDekQsT0FBTztDQUNUO0FBQ0Y7QUFFTyxNQUFNLHVCQUF1QixzQkFBTyxNQUFNLENBQUMseUJBQXlCLENBQUM7QUFHckUsTUFBTSw4QkFBOEIsc0JBQU8sT0FBTztDQUN2RCxVQUFVO0NBQ1YsV0FBVztDQUNYLGFBQWEsc0JBQU8sTUFBTSxvQkFBb0I7QUFDaEQsQ0FBQztBQUdNLE1BQU0sK0JBQStCLHNCQUFPLE9BQU8sRUFDeEQsYUFBYSxzQkFBTyxNQUFNLGNBQWMsRUFDMUMsQ0FBQztBQUdNLE1BQU0sb0NBQW9DLHNCQUFPLFlBQXlDLENBQUMsQ0FDaEcsK0JBQ0E7Q0FDRSxTQUFTLHNCQUFPO0NBQ2hCLE9BQU8sc0JBQU8sU0FBUyxzQkFBTyxPQUFPLENBQUM7QUFDeEMsQ0FDRixDQUFDLENBQUMsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiY2hhdEF0dGFjaG1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5cbmltcG9ydCB7XG4gIElzb0RhdGVUaW1lLFxuICBNZXNzYWdlSWQsXG4gIE5vbk5lZ2F0aXZlSW50LFxuICBQb3NpdGl2ZUludCxcbiAgVGhyZWFkSWQsXG4gIFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgVHJpbW1lZFN0cmluZyxcbn0gZnJvbSBcIi4vYmFzZVNjaGVtYXMudHNcIjtcblxuZXhwb3J0IGNvbnN0IFBST1ZJREVSX1NFTkRfVFVSTl9NQVhfSU5QVVRfQ0hBUlMgPSAxMjBfMDAwO1xuZXhwb3J0IGNvbnN0IFBST1ZJREVSX1NFTkRfVFVSTl9NQVhfQVRUQUNITUVOVFMgPSAxMDA7XG5leHBvcnQgY29uc3QgUFJPVklERVJfU0VORF9UVVJOX01BWF9JTUFHRV9CWVRFUyA9IDEwICogMTAyNCAqIDEwMjQ7XG5jb25zdCBQUk9WSURFUl9TRU5EX1RVUk5fTUFYX1RPVEFMX0lNQUdFX0JZVEVTID0gODAgKiAxMDI0ICogMTAyNDtcbmV4cG9ydCBjb25zdCBQUk9WSURFUl9TRU5EX1RVUk5fTUFYX0ZJTEVfQllURVMgPSA1MCAqIDEwMjQgKiAxMDI0O1xuZXhwb3J0IGNvbnN0IFBST1ZJREVSX1NFTkRfVFVSTl9TVVBQT1JURURfSU1BR0VfTUlNRV9UWVBFUyA9IFtcbiAgXCJpbWFnZS9naWZcIixcbiAgXCJpbWFnZS9qcGVnXCIsXG4gIFwiaW1hZ2UvcG5nXCIsXG4gIFwiaW1hZ2Uvd2VicFwiLFxuXSBhcyBjb25zdDtcbmNvbnN0IFBST1ZJREVSX1NFTkRfVFVSTl9TVVBQT1JURURfSU1BR0VfTUlNRV9UWVBFX1NFVCA9IG5ldyBTZXQ8c3RyaW5nPihcbiAgUFJPVklERVJfU0VORF9UVVJOX1NVUFBPUlRFRF9JTUFHRV9NSU1FX1RZUEVTLFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdmlkZXJTZW5kVHVyblN1cHBvcnRlZEltYWdlTWltZVR5cGUobWltZVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gUFJPVklERVJfU0VORF9UVVJOX1NVUFBPUlRFRF9JTUFHRV9NSU1FX1RZUEVfU0VULmhhcyhtaW1lVHlwZS50b0xvd2VyQ2FzZSgpKTtcbn1cbmNvbnN0IFBST1ZJREVSX1NFTkRfVFVSTl9NQVhfSU1BR0VfREFUQV9VUkxfQ0hBUlMgPSAxNF8wMDBfMDAwO1xuY29uc3QgQ0hBVF9BVFRBQ0hNRU5UX0lEX01BWF9DSEFSUyA9IDEyODtcblxuZXhwb3J0IGNvbnN0IENoYXRBdHRhY2htZW50SWQgPSBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soXG4gIFNjaGVtYS5pc01heExlbmd0aChDSEFUX0FUVEFDSE1FTlRfSURfTUFYX0NIQVJTKSxcbiAgU2NoZW1hLmlzUGF0dGVybigvXlthLXowLTlfLV0rJC9pKSxcbik7XG5leHBvcnQgdHlwZSBDaGF0QXR0YWNobWVudElkID0gdHlwZW9mIENoYXRBdHRhY2htZW50SWQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNOQVBfU0hPVF9BQ0NFU1NJQkxFX1RFWFRfTUFYX0NIQVJTID0gMzJfMDAwO1xuZXhwb3J0IGNvbnN0IFNOQVBfU0hPVF9BQ0NFU1NJQklMSVRZX01BWF9OT0RFUyA9IDEwXzAwMDtcbmV4cG9ydCBjb25zdCBTTkFQX1NIT1RfQUNDRVNTSUJJTElUWV9NQVhfU0VSSUFMSVpFRF9DSEFSUyA9IDMyXzAwMDtcblxuY29uc3QgU25hcFNob3RBY2Nlc3NpYmlsaXR5Qm91bmRzID0gU2NoZW1hLlN0cnVjdCh7XG4gIHg6IE5vbk5lZ2F0aXZlSW50LFxuICB5OiBOb25OZWdhdGl2ZUludCxcbiAgd2lkdGg6IFBvc2l0aXZlSW50LFxuICBoZWlnaHQ6IFBvc2l0aXZlSW50LFxufSk7XG5cbmNvbnN0IFNuYXBTaG90QWNjZXNzaWJpbGl0eVN0YXRlID0gU2NoZW1hLlN0cnVjdCh7XG4gIGFjdGl2ZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgYnVzeTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgY2hlY2tlZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5MaXRlcmFscyhbXCJvblwiLCBcIm9mZlwiLCBcIm1peGVkXCJdKSksXG4gIGVkaXRhYmxlOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxuICBlbmFibGVkOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxuICBleHBhbmRlZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgZm9jdXNlZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgc2VsZWN0ZWQ6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIHZpc2libGU6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBTbmFwU2hvdEFjY2Vzc2liaWxpdHlOb2RlIHtcbiAgcmVhZG9ubHkgcm9sZTogc3RyaW5nO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJvdW5kczogdHlwZW9mIFNuYXBTaG90QWNjZXNzaWJpbGl0eUJvdW5kcy5UeXBlIHwgbnVsbDtcbiAgcmVhZG9ubHkgc3RhdGU/OiB0eXBlb2YgU25hcFNob3RBY2Nlc3NpYmlsaXR5U3RhdGUuVHlwZTtcbiAgcmVhZG9ubHkgYWN0aW9ucz86IEFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IGNoaWxkcmVuOiBBcnJheTxTbmFwU2hvdEFjY2Vzc2liaWxpdHlOb2RlPjtcbn1cblxuZXhwb3J0IGNvbnN0IFNuYXBTaG90QWNjZXNzaWJpbGl0eU5vZGU6IFNjaGVtYS5Db2RlYzxTbmFwU2hvdEFjY2Vzc2liaWxpdHlOb2RlPiA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICByb2xlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEwMCkpLFxuICBuYW1lOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgxXzAwMCkpKSxcbiAgdmFsdWU6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDhfMDAwKSkpLFxuICBkZXNjcmlwdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoMl8wMDApKSksXG4gIGJvdW5kczogU2NoZW1hLk51bGxPcihTbmFwU2hvdEFjY2Vzc2liaWxpdHlCb3VuZHMpLFxuICBzdGF0ZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNuYXBTaG90QWNjZXNzaWJpbGl0eVN0YXRlKSxcbiAgYWN0aW9uczogU2NoZW1hLm9wdGlvbmFsS2V5KFxuICAgIFNjaGVtYS5tdXRhYmxlKFNjaGVtYS5BcnJheShUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEwMCkpKSkuY2hlY2soXG4gICAgICBTY2hlbWEuaXNNYXhMZW5ndGgoMzIpLFxuICAgICksXG4gICksXG4gIGNoaWxkcmVuOiBTY2hlbWEubXV0YWJsZShcbiAgICBTY2hlbWEuQXJyYXkoXG4gICAgICBTY2hlbWEuc3VzcGVuZCgoKTogU2NoZW1hLkNvZGVjPFNuYXBTaG90QWNjZXNzaWJpbGl0eU5vZGU+ID0+IFNuYXBTaG90QWNjZXNzaWJpbGl0eU5vZGUpLFxuICAgICksXG4gICkuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKFNOQVBfU0hPVF9BQ0NFU1NJQklMSVRZX01BWF9OT0RFUykpLFxufSk7XG5cbmNvbnN0IFNuYXBTaG90QWNjZXNzaWJpbGl0eVdpcmUgPSBTY2hlbWEuVW5pb24oW1xuICBTY2hlbWEuU3RydWN0KHtcbiAgICBmb3JtYXQ6IFNjaGVtYS5MaXRlcmFsKFwiZmxhdC10ZXh0XCIpLFxuICAgIHRleHQ6IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoU05BUF9TSE9UX0FDQ0VTU0lCTEVfVEVYVF9NQVhfQ0hBUlMpKSxcbiAgICB0cnVuY2F0ZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICB9KSxcbiAgU2NoZW1hLlN0cnVjdCh7XG4gICAgZm9ybWF0OiBTY2hlbWEuTGl0ZXJhbChcImVsZW1lbnQtdHJlZVwiKSxcbiAgICBjb29yZGluYXRlU3BhY2U6IFNjaGVtYS5MaXRlcmFsKFwiY2FwdHVyZWQtaW1hZ2VcIiksXG4gICAgaW1hZ2VTaXplOiBTY2hlbWEuU3RydWN0KHsgd2lkdGg6IFBvc2l0aXZlSW50LCBoZWlnaHQ6IFBvc2l0aXZlSW50IH0pLFxuICAgIHRydW5jYXRlZDogU2NoZW1hLkJvb2xlYW4sXG4gICAgcm9vdDogU25hcFNob3RBY2Nlc3NpYmlsaXR5Tm9kZSxcbiAgfSksXG5dKTtcblxuZXhwb3J0IGNvbnN0IFNuYXBTaG90QWNjZXNzaWJpbGl0eSA9IFNuYXBTaG90QWNjZXNzaWJpbGl0eVdpcmUuY2hlY2soXG4gIFNjaGVtYS5tYWtlRmlsdGVyKChhY2Nlc3NpYmlsaXR5OiB0eXBlb2YgU25hcFNob3RBY2Nlc3NpYmlsaXR5V2lyZS5UeXBlKSA9PiB7XG4gICAgaWYgKGFjY2Vzc2liaWxpdHkuZm9ybWF0ID09PSBcImZsYXQtdGV4dFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGxldCBub2RlcyA9IDA7XG4gICAgY29uc3Qgc3RhY2sgPSBbYWNjZXNzaWJpbGl0eS5yb290XTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIG5vZGVzICs9IDE7XG4gICAgICBpZiAobm9kZXMgPiBTTkFQX1NIT1RfQUNDRVNTSUJJTElUWV9NQVhfTk9ERVMpIHtcbiAgICAgICAgcmV0dXJuIGBBY2Nlc3NpYmlsaXR5IHRyZWVzIG11c3Qgbm90IGV4Y2VlZCAke1NOQVBfU0hPVF9BQ0NFU1NJQklMSVRZX01BWF9OT0RFU30gbm9kZXMuYDtcbiAgICAgIH1cbiAgICAgIHN0YWNrLnB1c2goLi4ubm9kZS5jaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBKU09OLnN0cmluZ2lmeShhY2Nlc3NpYmlsaXR5KS5sZW5ndGggPD0gU05BUF9TSE9UX0FDQ0VTU0lCSUxJVFlfTUFYX1NFUklBTElaRURfQ0hBUlMgfHxcbiAgICAgIGBBY2Nlc3NpYmlsaXR5IHRyZWVzIG11c3Qgbm90IGV4Y2VlZCAke1NOQVBfU0hPVF9BQ0NFU1NJQklMSVRZX01BWF9TRVJJQUxJWkVEX0NIQVJTfSBzZXJpYWxpemVkIGNoYXJhY3RlcnMuYFxuICAgICk7XG4gIH0pLFxuKTtcbmV4cG9ydCB0eXBlIFNuYXBTaG90QWNjZXNzaWJpbGl0eSA9IHR5cGVvZiBTbmFwU2hvdEFjY2Vzc2liaWxpdHkuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNuYXBTaG90U291cmNlID0gU2NoZW1hLlN0cnVjdCh7XG4gIGtpbmQ6IFNjaGVtYS5MaXRlcmFsKFwic25hcC1zaG90XCIpLFxuICBjYXB0dXJlZEF0OiBJc29EYXRlVGltZSxcbiAgYXBwTmFtZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgyNTUpKSxcbiAgd2luZG93VGl0bGU6IFRyaW1tZWRTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDFfMDAwKSksXG4gIGFjY2Vzc2libGVUZXh0OiBTY2hlbWEub3B0aW9uYWwoXG4gICAgVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aChTTkFQX1NIT1RfQUNDRVNTSUJMRV9URVhUX01BWF9DSEFSUykpLFxuICApLFxuICBhY2Nlc3NpYmlsaXR5OiBTY2hlbWEub3B0aW9uYWwoU25hcFNob3RBY2Nlc3NpYmlsaXR5KSxcbiAgYXBwSWRlbnRpZmllcjogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoMjU1KSkpLFxuICBhcHBJY29uRGF0YVVybDogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhcbiAgICAgIFNjaGVtYS5pc01heExlbmd0aCgxMDBfMDAwKSxcbiAgICAgIFNjaGVtYS5pc1BhdHRlcm4oL15kYXRhOmltYWdlXFwvcG5nO2Jhc2U2NCwvaSksXG4gICAgKSxcbiAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgU25hcFNob3RTb3VyY2UgPSB0eXBlb2YgU25hcFNob3RTb3VyY2UuVHlwZTtcblxuZXhwb3J0IGNvbnN0IENoYXRJbWFnZUF0dGFjaG1lbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJpbWFnZVwiKSxcbiAgaWQ6IENoYXRBdHRhY2htZW50SWQsXG4gIG5hbWU6IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoMjU1KSksXG4gIG1pbWVUeXBlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEwMCksIFNjaGVtYS5pc1BhdHRlcm4oL15pbWFnZVxcLy9pKSksXG4gIHNpemVCeXRlczogTm9uTmVnYXRpdmVJbnQuY2hlY2soU2NoZW1hLmlzTGVzc1RoYW5PckVxdWFsVG8oUFJPVklERVJfU0VORF9UVVJOX01BWF9JTUFHRV9CWVRFUykpLFxuICBzb3VyY2U6IFNjaGVtYS5vcHRpb25hbChTbmFwU2hvdFNvdXJjZSksXG59KTtcbmV4cG9ydCB0eXBlIENoYXRJbWFnZUF0dGFjaG1lbnQgPSB0eXBlb2YgQ2hhdEltYWdlQXR0YWNobWVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgUGFzdGVkVGV4dEF0dGFjaG1lbnRTb3VyY2UgPSBTY2hlbWEuVGFnZ2VkU3RydWN0KFwicGFzdGVkLXRleHRcIiwge30pO1xuZXhwb3J0IHR5cGUgUGFzdGVkVGV4dEF0dGFjaG1lbnRTb3VyY2UgPSB0eXBlb2YgUGFzdGVkVGV4dEF0dGFjaG1lbnRTb3VyY2UuVHlwZTtcblxuZXhwb3J0IGNvbnN0IENoYXRGaWxlQXR0YWNobWVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcImZpbGVcIiksXG4gIGlkOiBDaGF0QXR0YWNobWVudElkLFxuICBuYW1lOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDI1NSkpLFxuICBtaW1lVHlwZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCgxMDApKSxcbiAgc2l6ZUJ5dGVzOiBOb25OZWdhdGl2ZUludC5jaGVjayhcbiAgICBTY2hlbWEuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbygxKSxcbiAgICBTY2hlbWEuaXNMZXNzVGhhbk9yRXF1YWxUbyhQUk9WSURFUl9TRU5EX1RVUk5fTUFYX0ZJTEVfQllURVMpLFxuICApLFxuICAvKiogS2VlcCBwYXRoLW9ubHkgc28gYWdlbnRzIGluc3BlY3Qgc2VsZWN0aXZlbHkgd2l0aG91dCBjb25zdW1pbmcgdGhlIGNvbnRleHQgZm9sZGluZyBwcmVzZXJ2ZXMuICovXG4gIHNvdXJjZTogU2NoZW1hLm9wdGlvbmFsKFBhc3RlZFRleHRBdHRhY2htZW50U291cmNlKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ2hhdEZpbGVBdHRhY2htZW50ID0gdHlwZW9mIENoYXRGaWxlQXR0YWNobWVudC5UeXBlO1xuXG4vKiogQWNjZXB0cyB1bmtub3duIGF0dGFjaG1lbnQgdHlwZXMgZm9yIG9sZGVyIHJlYWRlcnM7IG1hbGZvcm1lZCBrbm93biB0eXBlcyBtdXN0IGZhaWwgdGhlaXIgb3duIHNjaGVtYS4gKi9cbmV4cG9ydCBjb25zdCBDaGF0VW5rbm93bkF0dGFjaG1lbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdHlwZTogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFxuICAgIFNjaGVtYS5pc01heExlbmd0aCg1MCksXG4gICAgU2NoZW1hLmlzUGF0dGVybigvXig/ISg/OmltYWdlfGZpbGUpJCkvKSxcbiAgKSxcbiAgaWQ6IENoYXRBdHRhY2htZW50SWQsXG4gIG5hbWU6IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoMjU1KSksXG4gIG1pbWVUeXBlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEwMCkpLFxuICBzaXplQnl0ZXM6IE5vbk5lZ2F0aXZlSW50LFxufSk7XG5leHBvcnQgdHlwZSBDaGF0VW5rbm93bkF0dGFjaG1lbnQgPSB0eXBlb2YgQ2hhdFVua25vd25BdHRhY2htZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBVcGxvYWRDaGF0SW1hZ2VBdHRhY2htZW50ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBTY2hlbWEub3B0aW9uYWwoQ2hhdEF0dGFjaG1lbnRJZCksXG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwiaW1hZ2VcIiksXG4gIG5hbWU6IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhTY2hlbWEuaXNNYXhMZW5ndGgoMjU1KSksXG4gIG1pbWVUeXBlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEwMCksIFNjaGVtYS5pc1BhdHRlcm4oL15pbWFnZVxcLy9pKSksXG4gIHNpemVCeXRlczogTm9uTmVnYXRpdmVJbnQuY2hlY2soU2NoZW1hLmlzTGVzc1RoYW5PckVxdWFsVG8oUFJPVklERVJfU0VORF9UVVJOX01BWF9JTUFHRV9CWVRFUykpLFxuICBkYXRhVXJsOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcuY2hlY2soXG4gICAgU2NoZW1hLmlzTWF4TGVuZ3RoKFBST1ZJREVSX1NFTkRfVFVSTl9NQVhfSU1BR0VfREFUQV9VUkxfQ0hBUlMpLFxuICApLFxuICBzb3VyY2U6IFNjaGVtYS5vcHRpb25hbChTbmFwU2hvdFNvdXJjZSksXG59KTtcbmV4cG9ydCB0eXBlIFVwbG9hZENoYXRJbWFnZUF0dGFjaG1lbnQgPSB0eXBlb2YgVXBsb2FkQ2hhdEltYWdlQXR0YWNobWVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQ2hhdEF0dGFjaG1lbnQgPSBTY2hlbWEuVW5pb24oW1xuICBDaGF0SW1hZ2VBdHRhY2htZW50LFxuICBDaGF0RmlsZUF0dGFjaG1lbnQsXG4gIENoYXRVbmtub3duQXR0YWNobWVudCxcbl0pO1xuZXhwb3J0IHR5cGUgQ2hhdEF0dGFjaG1lbnQgPSB0eXBlb2YgQ2hhdEF0dGFjaG1lbnQuVHlwZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3ZpZGVyQXR0YWNobWVudExpbWl0RXJyb3IoXG4gIGF0dGFjaG1lbnRzOiBSZWFkb25seUFycmF5PFBpY2s8Q2hhdEF0dGFjaG1lbnQsIFwidHlwZVwiIHwgXCJtaW1lVHlwZVwiIHwgXCJzaXplQnl0ZXNcIj4+LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA+IFBST1ZJREVSX1NFTkRfVFVSTl9NQVhfQVRUQUNITUVOVFMpIHtcbiAgICByZXR1cm4gYFlvdSBjYW4gYXR0YWNoIHVwIHRvICR7UFJPVklERVJfU0VORF9UVVJOX01BWF9BVFRBQ0hNRU5UU30gZmlsZXMgcGVyIG1lc3NhZ2Ugb3IgcXVlc3Rpb24gcmVzcG9uc2UuYDtcbiAgfVxuICBjb25zdCBpbWFnZUJ5dGVzID0gYXR0YWNobWVudHMucmVkdWNlKFxuICAgICh0b3RhbCwgYXR0YWNobWVudCkgPT5cbiAgICAgIHRvdGFsICtcbiAgICAgIChhdHRhY2htZW50LnR5cGUgPT09IFwiaW1hZ2VcIiB8fCBpc1Byb3ZpZGVyU2VuZFR1cm5TdXBwb3J0ZWRJbWFnZU1pbWVUeXBlKGF0dGFjaG1lbnQubWltZVR5cGUpXG4gICAgICAgID8gYXR0YWNobWVudC5zaXplQnl0ZXNcbiAgICAgICAgOiAwKSxcbiAgICAwLFxuICApO1xuICBpZiAoaW1hZ2VCeXRlcyA+IFBST1ZJREVSX1NFTkRfVFVSTl9NQVhfVE9UQUxfSU1BR0VfQllURVMpIHtcbiAgICByZXR1cm4gXCJJbWFnZXMgY2FuIHRvdGFsIHVwIHRvIDgwIE1pQiBwZXIgbWVzc2FnZSBvciBxdWVzdGlvbiByZXNwb25zZS4gVXNlIHNtYWxsZXIgaW1hZ2VzIG9yIHNlbmQgZmV3ZXIgYXQgb25jZS5cIjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVXBsb2FkQ2hhdEF0dGFjaG1lbnQgPSBTY2hlbWEuVW5pb24oW1VwbG9hZENoYXRJbWFnZUF0dGFjaG1lbnRdKTtcbmV4cG9ydCB0eXBlIFVwbG9hZENoYXRBdHRhY2htZW50ID0gdHlwZW9mIFVwbG9hZENoYXRBdHRhY2htZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBQZXJzaXN0Q2hhdEF0dGFjaG1lbnRzSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGhyZWFkSWQ6IFRocmVhZElkLFxuICBtZXNzYWdlSWQ6IE1lc3NhZ2VJZCxcbiAgYXR0YWNobWVudHM6IFNjaGVtYS5BcnJheShVcGxvYWRDaGF0QXR0YWNobWVudCksXG59KTtcbmV4cG9ydCB0eXBlIFBlcnNpc3RDaGF0QXR0YWNobWVudHNJbnB1dCA9IHR5cGVvZiBQZXJzaXN0Q2hhdEF0dGFjaG1lbnRzSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFBlcnNpc3RDaGF0QXR0YWNobWVudHNSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgYXR0YWNobWVudHM6IFNjaGVtYS5BcnJheShDaGF0QXR0YWNobWVudCksXG59KTtcbmV4cG9ydCB0eXBlIFBlcnNpc3RDaGF0QXR0YWNobWVudHNSZXN1bHQgPSB0eXBlb2YgUGVyc2lzdENoYXRBdHRhY2htZW50c1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY2xhc3MgUGVyc2lzdENoYXRBdHRhY2htZW50c0Vycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPFBlcnNpc3RDaGF0QXR0YWNobWVudHNFcnJvcj4oKShcbiAgXCJQZXJzaXN0Q2hhdEF0dGFjaG1lbnRzRXJyb3JcIixcbiAge1xuICAgIG1lc3NhZ2U6IFNjaGVtYS5TdHJpbmcsXG4gICAgY2F1c2U6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuRGVmZWN0KCkpLFxuICB9LFxuKSB7fVxuIl0sImZpbGUiOiIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvY2hhdEF0dGFjaG1lbnQudHMifQ==

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9jaGF0QXR0YWNobWVudC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9jaGF0QXR0YWNobWVudC50cyIseyJ1cmxzIjoiNiIsImlkcyI6IjcifSxbIjgiLCI5Il0sW10sWyI4IiwiOSJdLHt9LCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L1NjaGVtYS5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9iYXNlU2NoZW1hcy50cyJd