__vite_ssr_exportName__("MIN_SCHEDULED_TASK_INTERVAL_MS", () => { try { return MIN_SCHEDULED_TASK_INTERVAL_MS } catch {} });
__vite_ssr_exportName__("ScheduledTaskWebhookSignature", () => { try { return ScheduledTaskWebhookSignature } catch {} });
__vite_ssr_exportName__("MAX_WEBHOOK_DELIVERY_AGE_MINUTES", () => { try { return MAX_WEBHOOK_DELIVERY_AGE_MINUTES } catch {} });
__vite_ssr_exportName__("isWebhookDedupeTemplate", () => { try { return isWebhookDedupeTemplate } catch {} });
__vite_ssr_exportName__("MAX_WEBHOOK_FILTERS", () => { try { return MAX_WEBHOOK_FILTERS } catch {} });
__vite_ssr_exportName__("ScheduledTaskWebhookFilter", () => { try { return ScheduledTaskWebhookFilter } catch {} });
__vite_ssr_exportName__("ScheduledTaskSchedule", () => { try { return ScheduledTaskSchedule } catch {} });
__vite_ssr_exportName__("ScheduledTaskUpsertSchedule", () => { try { return ScheduledTaskUpsertSchedule } catch {} });
__vite_ssr_exportName__("ScheduledTaskRunStatus", () => { try { return ScheduledTaskRunStatus } catch {} });
__vite_ssr_exportName__("ScheduledTaskWebhookEndpoint", () => { try { return ScheduledTaskWebhookEndpoint } catch {} });
__vite_ssr_exportName__("ScheduledTask", () => { try { return ScheduledTask } catch {} });
__vite_ssr_exportName__("ScheduledTaskListInput", () => { try { return ScheduledTaskListInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskListResult", () => { try { return ScheduledTaskListResult } catch {} });
__vite_ssr_exportName__("ScheduledTaskUpsertInput", () => { try { return ScheduledTaskUpsertInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskSetEnabledInput", () => { try { return ScheduledTaskSetEnabledInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskDeleteInput", () => { try { return ScheduledTaskDeleteInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskRunNowInput", () => { try { return ScheduledTaskRunNowInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskRotateWebhookTokenInput", () => { try { return ScheduledTaskRotateWebhookTokenInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskWebhookDeliveryId", () => { try { return ScheduledTaskWebhookDeliveryId } catch {} });
__vite_ssr_exportName__("ScheduledTaskWebhookDeliveryOutcome", () => { try { return ScheduledTaskWebhookDeliveryOutcome } catch {} });
__vite_ssr_exportName__("ScheduledTaskWebhookDeliverySummary", () => { try { return ScheduledTaskWebhookDeliverySummary } catch {} });
__vite_ssr_exportName__("ScheduledTaskWebhookDelivery", () => { try { return ScheduledTaskWebhookDelivery } catch {} });
__vite_ssr_exportName__("ScheduledTaskListWebhookDeliveriesInput", () => { try { return ScheduledTaskListWebhookDeliveriesInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskListWebhookDeliveriesResult", () => { try { return ScheduledTaskListWebhookDeliveriesResult } catch {} });
__vite_ssr_exportName__("ScheduledTaskGetWebhookDeliveryInput", () => { try { return ScheduledTaskGetWebhookDeliveryInput } catch {} });
__vite_ssr_exportName__("ScheduledTaskGetWebhookDeliveryResult", () => { try { return ScheduledTaskGetWebhookDeliveryResult } catch {} });
__vite_ssr_exportName__("ScheduledTaskMutationResult", () => { try { return ScheduledTaskMutationResult } catch {} });
__vite_ssr_exportName__("ScheduledTaskDeleteResult", () => { try { return ScheduledTaskDeleteResult } catch {} });
__vite_ssr_exportName__("ScheduledTaskRunNowResult", () => { try { return ScheduledTaskRunNowResult } catch {} });
__vite_ssr_exportName__("ScheduledTaskError", () => { try { return ScheduledTaskError } 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":["CommandId","ForwardCompatibleArray","IsoDateTime","ProjectId","ScheduledTaskId","SecretRef","ThreadId","TrimmedNonEmptyString"]});
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/modelSelection.ts", {"importedNames":["ModelSelection"]});
const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/orchestrationV2.ts", {"importedNames":["OrchestrationV2Actor","OrchestrationV2CreationSource","OrchestrationV2ThreadLaunchWorkspaceStrategy"]});
const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerPolicy.ts", {"importedNames":["ProviderInteractionMode","RuntimeMode"]});





const TimeOfDay = __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isPattern(/^([01]?\d|2[0-3]):([0-5]\d)$/)).annotate({ description: "Local wall-clock time in 24-hour HH:MM form, such as 09:30." });
const MIN_SCHEDULED_TASK_INTERVAL_MS = 6e4;
const ScheduledTaskIntervalMs = __vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThan(0)).annotate({ description: "Positive interval in milliseconds." });
const ScheduledTaskIntervalSchedule = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("interval").annotate({ description: "Select interval scheduling." }),
	everyMs: ScheduledTaskIntervalMs
}).annotate({ description: "Run repeatedly after a fixed number of milliseconds." });
const ScheduledTaskFixedTimeSchedule = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("fixed_time").annotate({ description: "Select a fixed local wall-clock time." }),
	timeOfDay: TimeOfDay,
	weekdays: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Array(__vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isBetween({
		minimum: 0,
		maximum: 6
	})).annotate({ description: "Weekday number where 0 is Sunday and 6 is Saturday." })).annotate({ description: "Optional weekdays; omit to run every day." }))
}).annotate({ description: "Run at a fixed local wall-clock time on selected weekdays." });
const ScheduledTaskWebhookSignatureFields = {
	header: __vite_ssr_import_1__.TrimmedNonEmptyString.annotate({ description: "Request header carrying the signature, such as x-hub-signature-256." }),
	encoding: __vite_ssr_import_0__.Literals(["hex", "base64"]).annotate({ description: "How the HMAC-SHA256 digest is encoded in the header." }),
	prefix: __vite_ssr_import_0__.String.annotate({ description: "Text before the digest in the header value, such as 'sha256='. Empty for none." })
};
const ScheduledTaskWebhookSignature = __vite_ssr_import_0__.Struct(ScheduledTaskWebhookSignatureFields).annotate({ description: "Optional HMAC-SHA256 signature check over the raw request body." });
/** Matches how long the relay holds a request for an offline environment. */
const MAX_WEBHOOK_DELIVERY_AGE_MINUTES = 24 * 60;
const WebhookMaxDeliveryAgeMinutes = __vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isBetween({
	minimum: 1,
	maximum: MAX_WEBHOOK_DELIVERY_AGE_MINUTES
})).annotate({ description: "Skip requests the relay held longer than this many minutes while the environment was offline. Null runs every request." });
function isWebhookDedupeTemplate(template) {
	const placeholders = /\{\{\s*(?:(?:body|headers|query)(?:\.[^{}.\s]+)*|request)\s*\}\}/g;
	const matches = [...template.matchAll(placeholders)];
	const remainder = template.replace(placeholders, "");
	return matches.length > 0 && !remainder.includes("{{") && !remainder.includes("}}");
};
const WebhookDedupeTemplate = __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.makeFilter(isWebhookDedupeTemplate));
const ScheduledTaskWebhookDedupe = __vite_ssr_import_0__.Struct({
	replayKey: __vite_ssr_import_0__.optional(WebhookDedupeTemplate),
	coalesceKey: __vite_ssr_import_0__.optional(WebhookDedupeTemplate),
	coalesceWindowSeconds: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isBetween({
		minimum: 10,
		maximum: 3600
	})))
}).annotate({ description: "Replay key template (7 days), coalesce key template, and fixed window in seconds (default 120)." });
const MAX_WEBHOOK_FILTERS = 16;
const WebhookFilterPath = __vite_ssr_import_1__.TrimmedNonEmptyString.check(__vite_ssr_import_0__.isPattern(/^(body|headers|query)(\.|$)/)).annotate({ description: "Request value to test, in placeholder syntax without braces: headers.x-github-event, body.action, query.source. A segment ending in [] fans out over an array, so body.issue.labels[].name tests every label's name." });
/**
* Forms edit an `in` list as comma-separated text, so a value that has no
* comma and no surrounding whitespace survives that round trip unchanged.
*/
const WebhookFilterListValue = __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isPattern(/^[^,\s](?:[^,]*[^,\s])?$/)).annotate({ description: "Non-empty, without commas or surrounding whitespace." });
const ScheduledTaskWebhookFilter = __vite_ssr_import_0__.Union([
	__vite_ssr_import_0__.Struct({
		path: WebhookFilterPath,
		op: __vite_ssr_import_0__.Literals([
			"equals",
			"notEquals",
			"startsWith"
		]),
		value: __vite_ssr_import_0__.String
	}),
	__vite_ssr_import_0__.Struct({
		path: WebhookFilterPath,
		op: __vite_ssr_import_0__.Literal("in"),
		value: __vite_ssr_import_0__.Array(WebhookFilterListValue).check(__vite_ssr_import_0__.isMinLength(1))
	}),
	__vite_ssr_import_0__.Struct({
		path: WebhookFilterPath,
		op: __vite_ssr_import_0__.Literal("exists")
	})
]).annotate({ description: "Scalars compare as strings; objects and arrays only satisfy 'exists'. Every op but 'exists' fails when the path is missing. A [] wildcard path yields a list: equals, in and startsWith match when any element does, notEquals when no element equals the value, exists when the list is not empty." });
const ScheduledTaskWebhookFilters = __vite_ssr_import_0__.Array(ScheduledTaskWebhookFilter).check(__vite_ssr_import_0__.isMaxLength(MAX_WEBHOOK_FILTERS)).annotate({ description: "Run only when every filter matches the request; other requests are logged as filtered. Up to 16. Omit to keep the stored filters; pass [] to clear them." });
const ScheduledTaskWebhookSchedule = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("webhook").annotate({ description: "Run when the task's webhook URL receives a request." }),
	signature: __vite_ssr_import_0__.NullOr(ScheduledTaskWebhookSignature),
	maxDeliveryAgeMinutes: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.NullOr(WebhookMaxDeliveryAgeMinutes)),
	dedupe: __vite_ssr_import_0__.optional(ScheduledTaskWebhookDedupe),
	filters: __vite_ssr_import_0__.optional(ScheduledTaskWebhookFilters)
}).annotate({ description: "Run on each request to the task's webhook URL. The prompt may use {{body.path}}, {{headers.name}}, {{query.name}}, {{body}} and {{request}} placeholders." });
const ScheduledTaskUpsertWebhookSchedule = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("webhook").annotate({ description: "Run when the task's webhook URL receives a request." }),
	signature: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Struct({
		...ScheduledTaskWebhookSignatureFields,
		secret: __vite_ssr_import_0__.optional((0,__vite_ssr_import_1__.TrimmedNonEmptyString)).annotate({ description: "Shared signing secret. Omit to keep the stored secret." }),
		secretRef: __vite_ssr_import_0__.optional((0,__vite_ssr_import_1__.SecretRef)).annotate({ description: "A secret the user entered through request_secret, used instead of secret. It is consumed by this save." })
	}))).annotate({ description: "Signature check; omit or null to accept requests by URL token only." }),
	maxDeliveryAgeMinutes: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.NullOr(WebhookMaxDeliveryAgeMinutes)),
	dedupe: __vite_ssr_import_0__.optional(ScheduledTaskWebhookDedupe),
	filters: __vite_ssr_import_0__.optional(ScheduledTaskWebhookFilters)
}).annotate({ description: "Run on each request to the task's webhook URL. The prompt may use {{body.path}}, {{headers.name}}, {{query.name}}, {{body}} and {{request}} placeholders." });
/** Accept legacy sub-minute schedules so users can still manage them. */
const ScheduledTaskSchedule = __vite_ssr_import_0__.Union([
	ScheduledTaskIntervalSchedule,
	ScheduledTaskFixedTimeSchedule,
	ScheduledTaskWebhookSchedule
]).annotate({ description: "Structured trigger. Pass an object with type 'interval', 'fixed_time' or 'webhook'." });
const ScheduledTaskUpsertSchedule = __vite_ssr_import_0__.Union([
	__vite_ssr_import_0__.Struct({
		type: __vite_ssr_import_0__.Literal("interval").annotate({ description: "Select interval scheduling." }),
		everyMs: ScheduledTaskIntervalMs.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(MIN_SCHEDULED_TASK_INTERVAL_MS)).annotate({ description: "Interval in milliseconds, with a minimum of 60000 (one minute)." })
	}).annotate({ description: "Run repeatedly after a fixed number of milliseconds." }),
	ScheduledTaskFixedTimeSchedule,
	ScheduledTaskUpsertWebhookSchedule
]).annotate({ description: "Writable trigger. Pass an object with type 'interval', 'fixed_time' or 'webhook'." });
const ScheduledTaskRunStatus = __vite_ssr_import_0__.Literals([
	"never",
	"running",
	"succeeded",
	"failed"
]);
const ScheduledTaskWebhookEndpoint = __vite_ssr_import_0__.Struct({
	path: __vite_ssr_import_1__.TrimmedNonEmptyString,
	url: __vite_ssr_import_0__.NullOr((0,__vite_ssr_import_1__.TrimmedNonEmptyString)),
	hasSecret: __vite_ssr_import_0__.Boolean
});
const ScheduledTask = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_1__.ScheduledTaskId,
	title: __vite_ssr_import_1__.TrimmedNonEmptyString,
	prompt: __vite_ssr_import_1__.TrimmedNonEmptyString,
	enabled: __vite_ssr_import_0__.Boolean,
	schedule: ScheduledTaskSchedule,
	projectId: __vite_ssr_import_1__.ProjectId,
	threadId: __vite_ssr_import_0__.NullOr((0,__vite_ssr_import_1__.ThreadId)),
	workspaceStrategy: __vite_ssr_import_3__.OrchestrationV2ThreadLaunchWorkspaceStrategy,
	modelSelection: __vite_ssr_import_2__.ModelSelection,
	runtimeMode: __vite_ssr_import_4__.RuntimeMode,
	interactionMode: __vite_ssr_import_4__.ProviderInteractionMode,
	createdBy: __vite_ssr_import_3__.OrchestrationV2Actor,
	creationSource: __vite_ssr_import_3__.OrchestrationV2CreationSource,
	createdAt: __vite_ssr_import_1__.IsoDateTime,
	updatedAt: __vite_ssr_import_1__.IsoDateTime,
	nextRunAt: __vite_ssr_import_0__.NullOr((0,__vite_ssr_import_1__.IsoDateTime)),
	lastRunAt: __vite_ssr_import_0__.NullOr((0,__vite_ssr_import_1__.IsoDateTime)),
	lastRunStatus: ScheduledTaskRunStatus,
	lastRunError: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.String),
	runCount: __vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(0)),
	webhook: __vite_ssr_import_0__.optional(ScheduledTaskWebhookEndpoint)
});
const ScheduledTaskListInput = __vite_ssr_import_0__.Struct({});
const ScheduledTaskListResult = __vite_ssr_import_0__.Struct({ tasks: (0,__vite_ssr_import_1__.ForwardCompatibleArray)(ScheduledTask) });
const ScheduledTaskUpsertInput = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_0__.optional((0,__vite_ssr_import_1__.ScheduledTaskId)),
	requireExisting: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean).annotate({ description: "Reject the save if the task no longer exists, for edits from a client form." }),
	commandId: __vite_ssr_import_0__.optional((0,__vite_ssr_import_1__.CommandId)),
	title: __vite_ssr_import_1__.TrimmedNonEmptyString,
	prompt: __vite_ssr_import_1__.TrimmedNonEmptyString,
	enabled: __vite_ssr_import_0__.Boolean,
	schedule: ScheduledTaskUpsertSchedule,
	projectId: __vite_ssr_import_1__.ProjectId,
	threadId: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.NullOr((0,__vite_ssr_import_1__.ThreadId))),
	workspaceStrategy: __vite_ssr_import_3__.OrchestrationV2ThreadLaunchWorkspaceStrategy,
	modelSelection: __vite_ssr_import_2__.ModelSelection,
	runtimeMode: __vite_ssr_import_4__.RuntimeMode,
	interactionMode: __vite_ssr_import_4__.ProviderInteractionMode,
	createdBy: __vite_ssr_import_0__.optional((0,__vite_ssr_import_3__.OrchestrationV2Actor)),
	creationSource: __vite_ssr_import_0__.optional((0,__vite_ssr_import_3__.OrchestrationV2CreationSource))
});
const ScheduledTaskSetEnabledInput = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_1__.ScheduledTaskId,
	enabled: __vite_ssr_import_0__.Boolean
});
const ScheduledTaskDeleteInput = __vite_ssr_import_0__.Struct({ id: __vite_ssr_import_1__.ScheduledTaskId });
const ScheduledTaskRunNowInput = __vite_ssr_import_0__.Struct({ id: __vite_ssr_import_1__.ScheduledTaskId });
const ScheduledTaskRotateWebhookTokenInput = __vite_ssr_import_0__.Struct({ id: __vite_ssr_import_1__.ScheduledTaskId });
const ScheduledTaskWebhookDeliveryId = __vite_ssr_import_1__.TrimmedNonEmptyString.pipe(__vite_ssr_import_0__.brand("ScheduledTaskWebhookDeliveryId"));
const ScheduledTaskWebhookDeliveryOutcome = __vite_ssr_import_0__.Literals([
	"accepted",
	"dispatch_failed",
	"duplicate",
	"coalesced",
	"rejected_signature",
	"disabled",
	"rate_limited",
	"expired",
	"filtered"
]);
const ScheduledTaskWebhookDeliverySummary = __vite_ssr_import_0__.Struct({
	id: ScheduledTaskWebhookDeliveryId,
	taskId: __vite_ssr_import_1__.ScheduledTaskId,
	receivedAt: __vite_ssr_import_1__.IsoDateTime,
	method: __vite_ssr_import_1__.TrimmedNonEmptyString,
	contentType: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.String),
	bodyBytes: __vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(0)),
	// Any string, so an outcome added later doesn't break a client's whole list.
	outcome: __vite_ssr_import_0__.Union([ScheduledTaskWebhookDeliveryOutcome, __vite_ssr_import_0__.String]),
	signatureVerified: __vite_ssr_import_0__.Boolean,
	pendingWindow: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	missingFields: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.String),
	error: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.String)
});
const ScheduledTaskWebhookDelivery = __vite_ssr_import_0__.Struct({
	...ScheduledTaskWebhookDeliverySummary.fields,
	query: __vite_ssr_import_0__.String,
	headers: __vite_ssr_import_0__.Record(__vite_ssr_import_0__.String, __vite_ssr_import_0__.String),
	body: __vite_ssr_import_0__.String,
	bodyTruncated: __vite_ssr_import_0__.Boolean,
	renderedPrompt: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.String)
});
const ScheduledTaskListWebhookDeliveriesInput = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_1__.ScheduledTaskId,
	/**
	* Sent by clients that decode any outcome. Shipped clients decode a closed
	* list and fail on the whole response, so without it the server leaves out
	* rows with outcomes they don't know.
	*/
	acceptAnyOutcome: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean)
});
const ScheduledTaskListWebhookDeliveriesResult = __vite_ssr_import_0__.Struct({ deliveries: __vite_ssr_import_0__.Array(ScheduledTaskWebhookDeliverySummary) });
const ScheduledTaskGetWebhookDeliveryInput = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_1__.ScheduledTaskId,
	deliveryId: ScheduledTaskWebhookDeliveryId,
	acceptAnyOutcome: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean)
});
const ScheduledTaskGetWebhookDeliveryResult = __vite_ssr_import_0__.Struct({ delivery: ScheduledTaskWebhookDelivery });
const ScheduledTaskMutationResult = __vite_ssr_import_0__.Struct({ task: ScheduledTask });
const ScheduledTaskDeleteResult = __vite_ssr_import_0__.Struct({ id: __vite_ssr_import_1__.ScheduledTaskId });
const ScheduledTaskRunNowResult = __vite_ssr_import_0__.Struct({ task: ScheduledTask });
class ScheduledTaskError extends __vite_ssr_import_0__.TaggedError()("ScheduledTaskError", {
	message: __vite_ssr_import_0__.String,
	taskId: __vite_ssr_import_0__.optional((0,__vite_ssr_import_1__.ScheduledTaskId)),
	cause: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Defect())
}) {}
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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QyxzQkFBTyxPQUFPO0NBQ25FLElBQUk7Ozs7OztDQU1KLGtCQUFrQixzQkFBTyxTQUFTLHNCQUFPLE9BQU87QUFDbEQsQ0FBQztBQUlNLE1BQU0sMkNBQTJDLHNCQUFPLE9BQU8sRUFDcEUsWUFBWSxzQkFBTyxNQUFNLG1DQUFtQyxFQUM5RCxDQUFDO0FBSU0sTUFBTSx1Q0FBdUMsc0JBQU8sT0FBTztDQUNoRSxJQUFJO0NBQ0osWUFBWTtDQUNaLGtCQUFrQixzQkFBTyxTQUFTLHNCQUFPLE9BQU87QUFDbEQsQ0FBQztBQUdNLE1BQU0sd0NBQXdDLHNCQUFPLE9BQU8sRUFDakUsVUFBVSw2QkFDWixDQUFDO0FBSU0sTUFBTSw4QkFBOEIsc0JBQU8sT0FBTyxFQUN2RCxNQUFNLGNBQ1IsQ0FBQztBQUdNLE1BQU0sNEJBQTRCLHNCQUFPLE9BQU8sRUFDckQsSUFBSSxzQ0FDTixDQUFDO0FBR00sTUFBTSw0QkFBNEIsc0JBQU8sT0FBTyxFQUNyRCxNQUFNLGNBQ1IsQ0FBQztBQUdNLE1BQU0sMkJBQTJCLHNCQUFPLFlBQWdDLENBQUMsQ0FDOUUsc0JBQ0E7Q0FDRSxTQUFTLHNCQUFPO0NBQ2hCLFFBQVEsc0JBQU8sWUFBUyxzQ0FBZTtDQUN2QyxPQUFPLHNCQUFPLFNBQVMsc0JBQU8sT0FBTyxDQUFDO0FBQ3hDLENBQ0YsQ0FBQyxDQUFDLENBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbInNjaGVkdWxlZFRhc2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5cbmltcG9ydCB7XG4gIENvbW1hbmRJZCxcbiAgRm9yd2FyZENvbXBhdGlibGVBcnJheSxcbiAgSXNvRGF0ZVRpbWUsXG4gIFByb2plY3RJZCxcbiAgU2NoZWR1bGVkVGFza0lkLFxuICBTZWNyZXRSZWYsXG4gIFRocmVhZElkLFxuICBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG59IGZyb20gXCIuL2Jhc2VTY2hlbWFzLnRzXCI7XG5pbXBvcnQgeyBNb2RlbFNlbGVjdGlvbiB9IGZyb20gXCIuL21vZGVsU2VsZWN0aW9uLnRzXCI7XG5pbXBvcnQge1xuICBPcmNoZXN0cmF0aW9uVjJBY3RvcixcbiAgT3JjaGVzdHJhdGlvblYyQ3JlYXRpb25Tb3VyY2UsXG4gIE9yY2hlc3RyYXRpb25WMlRocmVhZExhdW5jaFdvcmtzcGFjZVN0cmF0ZWd5LFxufSBmcm9tIFwiLi9vcmNoZXN0cmF0aW9uVjIudHNcIjtcbmltcG9ydCB7IFByb3ZpZGVySW50ZXJhY3Rpb25Nb2RlLCBSdW50aW1lTW9kZSB9IGZyb20gXCIuL3Byb3ZpZGVyUG9saWN5LnRzXCI7XG5cbmNvbnN0IFRpbWVPZkRheSA9IFRyaW1tZWROb25FbXB0eVN0cmluZy5jaGVjayhcbiAgU2NoZW1hLmlzUGF0dGVybigvXihbMDFdP1xcZHwyWzAtM10pOihbMC01XVxcZCkkLyksXG4pLmFubm90YXRlKHsgZGVzY3JpcHRpb246IFwiTG9jYWwgd2FsbC1jbG9jayB0aW1lIGluIDI0LWhvdXIgSEg6TU0gZm9ybSwgc3VjaCBhcyAwOTozMC5cIiB9KTtcblxuZXhwb3J0IGNvbnN0IE1JTl9TQ0hFRFVMRURfVEFTS19JTlRFUlZBTF9NUyA9IDYwXzAwMDtcblxuY29uc3QgU2NoZWR1bGVkVGFza0ludGVydmFsTXMgPSBTY2hlbWEuSW50LmNoZWNrKFNjaGVtYS5pc0dyZWF0ZXJUaGFuKDApKS5hbm5vdGF0ZSh7XG4gIGRlc2NyaXB0aW9uOiBcIlBvc2l0aXZlIGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cIixcbn0pO1xuXG5jb25zdCBTY2hlZHVsZWRUYXNrSW50ZXJ2YWxTY2hlZHVsZSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcImludGVydmFsXCIpLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJTZWxlY3QgaW50ZXJ2YWwgc2NoZWR1bGluZy5cIixcbiAgfSksXG4gIGV2ZXJ5TXM6IFNjaGVkdWxlZFRhc2tJbnRlcnZhbE1zLFxufSkuYW5ub3RhdGUoe1xuICBkZXNjcmlwdGlvbjogXCJSdW4gcmVwZWF0ZWRseSBhZnRlciBhIGZpeGVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXCIsXG59KTtcblxuY29uc3QgU2NoZWR1bGVkVGFza0ZpeGVkVGltZVNjaGVkdWxlID0gU2NoZW1hLlN0cnVjdCh7XG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwiZml4ZWRfdGltZVwiKS5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246IFwiU2VsZWN0IGEgZml4ZWQgbG9jYWwgd2FsbC1jbG9jayB0aW1lLlwiLFxuICB9KSxcbiAgdGltZU9mRGF5OiBUaW1lT2ZEYXksXG4gIHdlZWtkYXlzOiBTY2hlbWEub3B0aW9uYWwoXG4gICAgU2NoZW1hLkFycmF5KFxuICAgICAgU2NoZW1hLkludC5jaGVjayhTY2hlbWEuaXNCZXR3ZWVuKHsgbWluaW11bTogMCwgbWF4aW11bTogNiB9KSkuYW5ub3RhdGUoe1xuICAgICAgICBkZXNjcmlwdGlvbjogXCJXZWVrZGF5IG51bWJlciB3aGVyZSAwIGlzIFN1bmRheSBhbmQgNiBpcyBTYXR1cmRheS5cIixcbiAgICAgIH0pLFxuICAgICkuYW5ub3RhdGUoe1xuICAgICAgZGVzY3JpcHRpb246IFwiT3B0aW9uYWwgd2Vla2RheXM7IG9taXQgdG8gcnVuIGV2ZXJ5IGRheS5cIixcbiAgICB9KSxcbiAgKSxcbn0pLmFubm90YXRlKHtcbiAgZGVzY3JpcHRpb246IFwiUnVuIGF0IGEgZml4ZWQgbG9jYWwgd2FsbC1jbG9jayB0aW1lIG9uIHNlbGVjdGVkIHdlZWtkYXlzLlwiLFxufSk7XG5cbmNvbnN0IFNjaGVkdWxlZFRhc2tXZWJob29rU2lnbmF0dXJlRmllbGRzID0ge1xuICBoZWFkZXI6IFRyaW1tZWROb25FbXB0eVN0cmluZy5hbm5vdGF0ZSh7XG4gICAgZGVzY3JpcHRpb246IFwiUmVxdWVzdCBoZWFkZXIgY2FycnlpbmcgdGhlIHNpZ25hdHVyZSwgc3VjaCBhcyB4LWh1Yi1zaWduYXR1cmUtMjU2LlwiLFxuICB9KSxcbiAgZW5jb2Rpbmc6IFNjaGVtYS5MaXRlcmFscyhbXCJoZXhcIiwgXCJiYXNlNjRcIl0pLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJIb3cgdGhlIEhNQUMtU0hBMjU2IGRpZ2VzdCBpcyBlbmNvZGVkIGluIHRoZSBoZWFkZXIuXCIsXG4gIH0pLFxuICBwcmVmaXg6IFNjaGVtYS5TdHJpbmcuYW5ub3RhdGUoe1xuICAgIGRlc2NyaXB0aW9uOiBcIlRleHQgYmVmb3JlIHRoZSBkaWdlc3QgaW4gdGhlIGhlYWRlciB2YWx1ZSwgc3VjaCBhcyAnc2hhMjU2PScuIEVtcHR5IGZvciBub25lLlwiLFxuICB9KSxcbn07XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrV2ViaG9va1NpZ25hdHVyZSA9IFNjaGVtYS5TdHJ1Y3QoXG4gIFNjaGVkdWxlZFRhc2tXZWJob29rU2lnbmF0dXJlRmllbGRzLFxuKS5hbm5vdGF0ZSh7IGRlc2NyaXB0aW9uOiBcIk9wdGlvbmFsIEhNQUMtU0hBMjU2IHNpZ25hdHVyZSBjaGVjayBvdmVyIHRoZSByYXcgcmVxdWVzdCBib2R5LlwiIH0pO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza1dlYmhvb2tTaWduYXR1cmUgPSB0eXBlb2YgU2NoZWR1bGVkVGFza1dlYmhvb2tTaWduYXR1cmUuVHlwZTtcblxuLyoqIE1hdGNoZXMgaG93IGxvbmcgdGhlIHJlbGF5IGhvbGRzIGEgcmVxdWVzdCBmb3IgYW4gb2ZmbGluZSBlbnZpcm9ubWVudC4gKi9cbmV4cG9ydCBjb25zdCBNQVhfV0VCSE9PS19ERUxJVkVSWV9BR0VfTUlOVVRFUyA9IDI0ICogNjA7XG5cbmNvbnN0IFdlYmhvb2tNYXhEZWxpdmVyeUFnZU1pbnV0ZXMgPSBTY2hlbWEuSW50LmNoZWNrKFxuICBTY2hlbWEuaXNCZXR3ZWVuKHsgbWluaW11bTogMSwgbWF4aW11bTogTUFYX1dFQkhPT0tfREVMSVZFUllfQUdFX01JTlVURVMgfSksXG4pLmFubm90YXRlKHtcbiAgZGVzY3JpcHRpb246XG4gICAgXCJTa2lwIHJlcXVlc3RzIHRoZSByZWxheSBoZWxkIGxvbmdlciB0aGFuIHRoaXMgbWFueSBtaW51dGVzIHdoaWxlIHRoZSBlbnZpcm9ubWVudCB3YXMgb2ZmbGluZS4gTnVsbCBydW5zIGV2ZXJ5IHJlcXVlc3QuXCIsXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViaG9va0RlZHVwZVRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgcGxhY2Vob2xkZXJzID0gL1xce1xce1xccyooPzooPzpib2R5fGhlYWRlcnN8cXVlcnkpKD86XFwuW157fS5cXHNdKykqfHJlcXVlc3QpXFxzKlxcfVxcfS9nO1xuICBjb25zdCBtYXRjaGVzID0gWy4uLnRlbXBsYXRlLm1hdGNoQWxsKHBsYWNlaG9sZGVycyldO1xuICBjb25zdCByZW1haW5kZXIgPSB0ZW1wbGF0ZS5yZXBsYWNlKHBsYWNlaG9sZGVycywgXCJcIik7XG4gIHJldHVybiBtYXRjaGVzLmxlbmd0aCA+IDAgJiYgIXJlbWFpbmRlci5pbmNsdWRlcyhcInt7XCIpICYmICFyZW1haW5kZXIuaW5jbHVkZXMoXCJ9fVwiKTtcbn1cblxuY29uc3QgV2ViaG9va0RlZHVwZVRlbXBsYXRlID0gU2NoZW1hLlN0cmluZy5jaGVjayhTY2hlbWEubWFrZUZpbHRlcihpc1dlYmhvb2tEZWR1cGVUZW1wbGF0ZSkpO1xuXG5jb25zdCBTY2hlZHVsZWRUYXNrV2ViaG9va0RlZHVwZSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICByZXBsYXlLZXk6IFNjaGVtYS5vcHRpb25hbChXZWJob29rRGVkdXBlVGVtcGxhdGUpLFxuICBjb2FsZXNjZUtleTogU2NoZW1hLm9wdGlvbmFsKFdlYmhvb2tEZWR1cGVUZW1wbGF0ZSksXG4gIGNvYWxlc2NlV2luZG93U2Vjb25kczogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFNjaGVtYS5JbnQuY2hlY2soU2NoZW1hLmlzQmV0d2Vlbih7IG1pbmltdW06IDEwLCBtYXhpbXVtOiAzNjAwIH0pKSxcbiAgKSxcbn0pLmFubm90YXRlKHtcbiAgZGVzY3JpcHRpb246XG4gICAgXCJSZXBsYXkga2V5IHRlbXBsYXRlICg3IGRheXMpLCBjb2FsZXNjZSBrZXkgdGVtcGxhdGUsIGFuZCBmaXhlZCB3aW5kb3cgaW4gc2Vjb25kcyAoZGVmYXVsdCAxMjApLlwiLFxufSk7XG5cbmV4cG9ydCBjb25zdCBNQVhfV0VCSE9PS19GSUxURVJTID0gMTY7XG5cbmNvbnN0IFdlYmhvb2tGaWx0ZXJQYXRoID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNQYXR0ZXJuKC9eKGJvZHl8aGVhZGVyc3xxdWVyeSkoXFwufCQpLyksXG4pLmFubm90YXRlKHtcbiAgZGVzY3JpcHRpb246XG4gICAgXCJSZXF1ZXN0IHZhbHVlIHRvIHRlc3QsIGluIHBsYWNlaG9sZGVyIHN5bnRheCB3aXRob3V0IGJyYWNlczogaGVhZGVycy54LWdpdGh1Yi1ldmVudCwgYm9keS5hY3Rpb24sIHF1ZXJ5LnNvdXJjZS4gQSBzZWdtZW50IGVuZGluZyBpbiBbXSBmYW5zIG91dCBvdmVyIGFuIGFycmF5LCBzbyBib2R5Lmlzc3VlLmxhYmVsc1tdLm5hbWUgdGVzdHMgZXZlcnkgbGFiZWwncyBuYW1lLlwiLFxufSk7XG5cbi8qKlxuICogRm9ybXMgZWRpdCBhbiBgaW5gIGxpc3QgYXMgY29tbWEtc2VwYXJhdGVkIHRleHQsIHNvIGEgdmFsdWUgdGhhdCBoYXMgbm9cbiAqIGNvbW1hIGFuZCBubyBzdXJyb3VuZGluZyB3aGl0ZXNwYWNlIHN1cnZpdmVzIHRoYXQgcm91bmQgdHJpcCB1bmNoYW5nZWQuXG4gKi9cbmNvbnN0IFdlYmhvb2tGaWx0ZXJMaXN0VmFsdWUgPSBTY2hlbWEuU3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNQYXR0ZXJuKC9eW14sXFxzXSg/OlteLF0qW14sXFxzXSk/JC8pLFxuKS5hbm5vdGF0ZSh7IGRlc2NyaXB0aW9uOiBcIk5vbi1lbXB0eSwgd2l0aG91dCBjb21tYXMgb3Igc3Vycm91bmRpbmcgd2hpdGVzcGFjZS5cIiB9KTtcblxuZXhwb3J0IGNvbnN0IFNjaGVkdWxlZFRhc2tXZWJob29rRmlsdGVyID0gU2NoZW1hLlVuaW9uKFtcbiAgU2NoZW1hLlN0cnVjdCh7XG4gICAgcGF0aDogV2ViaG9va0ZpbHRlclBhdGgsXG4gICAgb3A6IFNjaGVtYS5MaXRlcmFscyhbXCJlcXVhbHNcIiwgXCJub3RFcXVhbHNcIiwgXCJzdGFydHNXaXRoXCJdKSxcbiAgICB2YWx1ZTogU2NoZW1hLlN0cmluZyxcbiAgfSksXG4gIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgIHBhdGg6IFdlYmhvb2tGaWx0ZXJQYXRoLFxuICAgIG9wOiBTY2hlbWEuTGl0ZXJhbChcImluXCIpLFxuICAgIHZhbHVlOiBTY2hlbWEuQXJyYXkoV2ViaG9va0ZpbHRlckxpc3RWYWx1ZSkuY2hlY2soU2NoZW1hLmlzTWluTGVuZ3RoKDEpKSxcbiAgfSksXG4gIFNjaGVtYS5TdHJ1Y3QoeyBwYXRoOiBXZWJob29rRmlsdGVyUGF0aCwgb3A6IFNjaGVtYS5MaXRlcmFsKFwiZXhpc3RzXCIpIH0pLFxuXSkuYW5ub3RhdGUoe1xuICBkZXNjcmlwdGlvbjpcbiAgICBcIlNjYWxhcnMgY29tcGFyZSBhcyBzdHJpbmdzOyBvYmplY3RzIGFuZCBhcnJheXMgb25seSBzYXRpc2Z5ICdleGlzdHMnLiBFdmVyeSBvcCBidXQgJ2V4aXN0cycgZmFpbHMgd2hlbiB0aGUgcGF0aCBpcyBtaXNzaW5nLiBBIFtdIHdpbGRjYXJkIHBhdGggeWllbGRzIGEgbGlzdDogZXF1YWxzLCBpbiBhbmQgc3RhcnRzV2l0aCBtYXRjaCB3aGVuIGFueSBlbGVtZW50IGRvZXMsIG5vdEVxdWFscyB3aGVuIG5vIGVsZW1lbnQgZXF1YWxzIHRoZSB2YWx1ZSwgZXhpc3RzIHdoZW4gdGhlIGxpc3QgaXMgbm90IGVtcHR5LlwiLFxufSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrV2ViaG9va0ZpbHRlciA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrV2ViaG9va0ZpbHRlci5UeXBlO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza1dlYmhvb2tGaWx0ZXJPcCA9IFNjaGVkdWxlZFRhc2tXZWJob29rRmlsdGVyW1wib3BcIl07XG5cbmNvbnN0IFNjaGVkdWxlZFRhc2tXZWJob29rRmlsdGVycyA9IFNjaGVtYS5BcnJheShTY2hlZHVsZWRUYXNrV2ViaG9va0ZpbHRlcilcbiAgLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aChNQVhfV0VCSE9PS19GSUxURVJTKSlcbiAgLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUnVuIG9ubHkgd2hlbiBldmVyeSBmaWx0ZXIgbWF0Y2hlcyB0aGUgcmVxdWVzdDsgb3RoZXIgcmVxdWVzdHMgYXJlIGxvZ2dlZCBhcyBmaWx0ZXJlZC4gVXAgdG8gMTYuIE9taXQgdG8ga2VlcCB0aGUgc3RvcmVkIGZpbHRlcnM7IHBhc3MgW10gdG8gY2xlYXIgdGhlbS5cIixcbiAgfSk7XG5cbmNvbnN0IFNjaGVkdWxlZFRhc2tXZWJob29rU2NoZWR1bGUgPSBTY2hlbWEuU3RydWN0KHtcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJ3ZWJob29rXCIpLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJSdW4gd2hlbiB0aGUgdGFzaydzIHdlYmhvb2sgVVJMIHJlY2VpdmVzIGEgcmVxdWVzdC5cIixcbiAgfSksXG4gIHNpZ25hdHVyZTogU2NoZW1hLk51bGxPcihTY2hlZHVsZWRUYXNrV2ViaG9va1NpZ25hdHVyZSksXG4gIG1heERlbGl2ZXJ5QWdlTWludXRlczogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5OdWxsT3IoV2ViaG9va01heERlbGl2ZXJ5QWdlTWludXRlcykpLFxuICBkZWR1cGU6IFNjaGVtYS5vcHRpb25hbChTY2hlZHVsZWRUYXNrV2ViaG9va0RlZHVwZSksXG4gIGZpbHRlcnM6IFNjaGVtYS5vcHRpb25hbChTY2hlZHVsZWRUYXNrV2ViaG9va0ZpbHRlcnMpLFxufSkuYW5ub3RhdGUoe1xuICBkZXNjcmlwdGlvbjpcbiAgICBcIlJ1biBvbiBlYWNoIHJlcXVlc3QgdG8gdGhlIHRhc2sncyB3ZWJob29rIFVSTC4gVGhlIHByb21wdCBtYXkgdXNlIHt7Ym9keS5wYXRofX0sIHt7aGVhZGVycy5uYW1lfX0sIHt7cXVlcnkubmFtZX19LCB7e2JvZHl9fSBhbmQge3tyZXF1ZXN0fX0gcGxhY2Vob2xkZXJzLlwiLFxufSk7XG5cbmNvbnN0IFNjaGVkdWxlZFRhc2tVcHNlcnRXZWJob29rU2NoZWR1bGUgPSBTY2hlbWEuU3RydWN0KHtcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJ3ZWJob29rXCIpLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJSdW4gd2hlbiB0aGUgdGFzaydzIHdlYmhvb2sgVVJMIHJlY2VpdmVzIGEgcmVxdWVzdC5cIixcbiAgfSksXG4gIHNpZ25hdHVyZTogU2NoZW1hLm9wdGlvbmFsKFxuICAgIFNjaGVtYS5OdWxsT3IoXG4gICAgICBTY2hlbWEuU3RydWN0KHtcbiAgICAgICAgLi4uU2NoZWR1bGVkVGFza1dlYmhvb2tTaWduYXR1cmVGaWVsZHMsXG4gICAgICAgIHNlY3JldDogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZykuYW5ub3RhdGUoe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlNoYXJlZCBzaWduaW5nIHNlY3JldC4gT21pdCB0byBrZWVwIHRoZSBzdG9yZWQgc2VjcmV0LlwiLFxuICAgICAgICB9KSxcbiAgICAgICAgc2VjcmV0UmVmOiBTY2hlbWEub3B0aW9uYWwoU2VjcmV0UmVmKS5hbm5vdGF0ZSh7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBcIkEgc2VjcmV0IHRoZSB1c2VyIGVudGVyZWQgdGhyb3VnaCByZXF1ZXN0X3NlY3JldCwgdXNlZCBpbnN0ZWFkIG9mIHNlY3JldC4gSXQgaXMgY29uc3VtZWQgYnkgdGhpcyBzYXZlLlwiLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICksXG4gICkuYW5ub3RhdGUoe1xuICAgIGRlc2NyaXB0aW9uOiBcIlNpZ25hdHVyZSBjaGVjazsgb21pdCBvciBudWxsIHRvIGFjY2VwdCByZXF1ZXN0cyBieSBVUkwgdG9rZW4gb25seS5cIixcbiAgfSksXG4gIG1heERlbGl2ZXJ5QWdlTWludXRlczogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5OdWxsT3IoV2ViaG9va01heERlbGl2ZXJ5QWdlTWludXRlcykpLFxuICBkZWR1cGU6IFNjaGVtYS5vcHRpb25hbChTY2hlZHVsZWRUYXNrV2ViaG9va0RlZHVwZSksXG4gIGZpbHRlcnM6IFNjaGVtYS5vcHRpb25hbChTY2hlZHVsZWRUYXNrV2ViaG9va0ZpbHRlcnMpLFxufSkuYW5ub3RhdGUoe1xuICBkZXNjcmlwdGlvbjpcbiAgICBcIlJ1biBvbiBlYWNoIHJlcXVlc3QgdG8gdGhlIHRhc2sncyB3ZWJob29rIFVSTC4gVGhlIHByb21wdCBtYXkgdXNlIHt7Ym9keS5wYXRofX0sIHt7aGVhZGVycy5uYW1lfX0sIHt7cXVlcnkubmFtZX19LCB7e2JvZHl9fSBhbmQge3tyZXF1ZXN0fX0gcGxhY2Vob2xkZXJzLlwiLFxufSk7XG5cbi8qKiBBY2NlcHQgbGVnYWN5IHN1Yi1taW51dGUgc2NoZWR1bGVzIHNvIHVzZXJzIGNhbiBzdGlsbCBtYW5hZ2UgdGhlbS4gKi9cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrU2NoZWR1bGUgPSBTY2hlbWEuVW5pb24oW1xuICBTY2hlZHVsZWRUYXNrSW50ZXJ2YWxTY2hlZHVsZSxcbiAgU2NoZWR1bGVkVGFza0ZpeGVkVGltZVNjaGVkdWxlLFxuICBTY2hlZHVsZWRUYXNrV2ViaG9va1NjaGVkdWxlLFxuXSkuYW5ub3RhdGUoe1xuICBkZXNjcmlwdGlvbjpcbiAgICBcIlN0cnVjdHVyZWQgdHJpZ2dlci4gUGFzcyBhbiBvYmplY3Qgd2l0aCB0eXBlICdpbnRlcnZhbCcsICdmaXhlZF90aW1lJyBvciAnd2ViaG9vaycuXCIsXG59KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tTY2hlZHVsZSA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrU2NoZWR1bGUuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNjaGVkdWxlZFRhc2tVcHNlcnRTY2hlZHVsZSA9IFNjaGVtYS5VbmlvbihbXG4gIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwiaW50ZXJ2YWxcIikuYW5ub3RhdGUoe1xuICAgICAgZGVzY3JpcHRpb246IFwiU2VsZWN0IGludGVydmFsIHNjaGVkdWxpbmcuXCIsXG4gICAgfSksXG4gICAgZXZlcnlNczogU2NoZWR1bGVkVGFza0ludGVydmFsTXMuY2hlY2soXG4gICAgICBTY2hlbWEuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyhNSU5fU0NIRURVTEVEX1RBU0tfSU5URVJWQUxfTVMpLFxuICAgICkuYW5ub3RhdGUoe1xuICAgICAgZGVzY3JpcHRpb246IFwiSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLCB3aXRoIGEgbWluaW11bSBvZiA2MDAwMCAob25lIG1pbnV0ZSkuXCIsXG4gICAgfSksXG4gIH0pLmFubm90YXRlKHtcbiAgICBkZXNjcmlwdGlvbjogXCJSdW4gcmVwZWF0ZWRseSBhZnRlciBhIGZpeGVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXCIsXG4gIH0pLFxuICBTY2hlZHVsZWRUYXNrRml4ZWRUaW1lU2NoZWR1bGUsXG4gIFNjaGVkdWxlZFRhc2tVcHNlcnRXZWJob29rU2NoZWR1bGUsXG5dKS5hbm5vdGF0ZSh7XG4gIGRlc2NyaXB0aW9uOiBcIldyaXRhYmxlIHRyaWdnZXIuIFBhc3MgYW4gb2JqZWN0IHdpdGggdHlwZSAnaW50ZXJ2YWwnLCAnZml4ZWRfdGltZScgb3IgJ3dlYmhvb2snLlwiLFxufSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrVXBzZXJ0U2NoZWR1bGUgPSB0eXBlb2YgU2NoZWR1bGVkVGFza1Vwc2VydFNjaGVkdWxlLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrUnVuU3RhdHVzID0gU2NoZW1hLkxpdGVyYWxzKFtcIm5ldmVyXCIsIFwicnVubmluZ1wiLCBcInN1Y2NlZWRlZFwiLCBcImZhaWxlZFwiXSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrUnVuU3RhdHVzID0gdHlwZW9mIFNjaGVkdWxlZFRhc2tSdW5TdGF0dXMuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNjaGVkdWxlZFRhc2tXZWJob29rRW5kcG9pbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgcGF0aDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICB1cmw6IFNjaGVtYS5OdWxsT3IoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgaGFzU2VjcmV0OiBTY2hlbWEuQm9vbGVhbixcbn0pO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza1dlYmhvb2tFbmRwb2ludCA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrV2ViaG9va0VuZHBvaW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBTY2hlZHVsZWRUYXNrSWQsXG4gIHRpdGxlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIHByb21wdDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBlbmFibGVkOiBTY2hlbWEuQm9vbGVhbixcbiAgc2NoZWR1bGU6IFNjaGVkdWxlZFRhc2tTY2hlZHVsZSxcbiAgcHJvamVjdElkOiBQcm9qZWN0SWQsXG4gIHRocmVhZElkOiBTY2hlbWEuTnVsbE9yKFRocmVhZElkKSxcbiAgd29ya3NwYWNlU3RyYXRlZ3k6IE9yY2hlc3RyYXRpb25WMlRocmVhZExhdW5jaFdvcmtzcGFjZVN0cmF0ZWd5LFxuICBtb2RlbFNlbGVjdGlvbjogTW9kZWxTZWxlY3Rpb24sXG4gIHJ1bnRpbWVNb2RlOiBSdW50aW1lTW9kZSxcbiAgaW50ZXJhY3Rpb25Nb2RlOiBQcm92aWRlckludGVyYWN0aW9uTW9kZSxcbiAgY3JlYXRlZEJ5OiBPcmNoZXN0cmF0aW9uVjJBY3RvcixcbiAgY3JlYXRpb25Tb3VyY2U6IE9yY2hlc3RyYXRpb25WMkNyZWF0aW9uU291cmNlLFxuICBjcmVhdGVkQXQ6IElzb0RhdGVUaW1lLFxuICB1cGRhdGVkQXQ6IElzb0RhdGVUaW1lLFxuICBuZXh0UnVuQXQ6IFNjaGVtYS5OdWxsT3IoSXNvRGF0ZVRpbWUpLFxuICBsYXN0UnVuQXQ6IFNjaGVtYS5OdWxsT3IoSXNvRGF0ZVRpbWUpLFxuICBsYXN0UnVuU3RhdHVzOiBTY2hlZHVsZWRUYXNrUnVuU3RhdHVzLFxuICBsYXN0UnVuRXJyb3I6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZyksXG4gIHJ1bkNvdW50OiBTY2hlbWEuSW50LmNoZWNrKFNjaGVtYS5pc0dyZWF0ZXJUaGFuT3JFcXVhbFRvKDApKSxcbiAgd2ViaG9vazogU2NoZW1hLm9wdGlvbmFsKFNjaGVkdWxlZFRhc2tXZWJob29rRW5kcG9pbnQpLFxufSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrID0gdHlwZW9mIFNjaGVkdWxlZFRhc2suVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNjaGVkdWxlZFRhc2tMaXN0SW5wdXQgPSBTY2hlbWEuU3RydWN0KHt9KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tMaXN0SW5wdXQgPSB0eXBlb2YgU2NoZWR1bGVkVGFza0xpc3RJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza0xpc3RSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGFza3M6IEZvcndhcmRDb21wYXRpYmxlQXJyYXkoU2NoZWR1bGVkVGFzayksXG59KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tMaXN0UmVzdWx0ID0gdHlwZW9mIFNjaGVkdWxlZFRhc2tMaXN0UmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrVXBzZXJ0SW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgaWQ6IFNjaGVtYS5vcHRpb25hbChTY2hlZHVsZWRUYXNrSWQpLFxuICByZXF1aXJlRXhpc3Rpbmc6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbikuYW5ub3RhdGUoe1xuICAgIGRlc2NyaXB0aW9uOiBcIlJlamVjdCB0aGUgc2F2ZSBpZiB0aGUgdGFzayBubyBsb25nZXIgZXhpc3RzLCBmb3IgZWRpdHMgZnJvbSBhIGNsaWVudCBmb3JtLlwiLFxuICB9KSxcbiAgY29tbWFuZElkOiBTY2hlbWEub3B0aW9uYWwoQ29tbWFuZElkKSxcbiAgdGl0bGU6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgcHJvbXB0OiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGVuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICBzY2hlZHVsZTogU2NoZWR1bGVkVGFza1Vwc2VydFNjaGVkdWxlLFxuICBwcm9qZWN0SWQ6IFByb2plY3RJZCxcbiAgdGhyZWFkSWQ6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuTnVsbE9yKFRocmVhZElkKSksXG4gIHdvcmtzcGFjZVN0cmF0ZWd5OiBPcmNoZXN0cmF0aW9uVjJUaHJlYWRMYXVuY2hXb3Jrc3BhY2VTdHJhdGVneSxcbiAgbW9kZWxTZWxlY3Rpb246IE1vZGVsU2VsZWN0aW9uLFxuICBydW50aW1lTW9kZTogUnVudGltZU1vZGUsXG4gIGludGVyYWN0aW9uTW9kZTogUHJvdmlkZXJJbnRlcmFjdGlvbk1vZGUsXG4gIGNyZWF0ZWRCeTogU2NoZW1hLm9wdGlvbmFsKE9yY2hlc3RyYXRpb25WMkFjdG9yKSxcbiAgY3JlYXRpb25Tb3VyY2U6IFNjaGVtYS5vcHRpb25hbChPcmNoZXN0cmF0aW9uVjJDcmVhdGlvblNvdXJjZSksXG59KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tVcHNlcnRJbnB1dCA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrVXBzZXJ0SW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNjaGVkdWxlZFRhc2tTZXRFbmFibGVkSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgaWQ6IFNjaGVkdWxlZFRhc2tJZCxcbiAgZW5hYmxlZDogU2NoZW1hLkJvb2xlYW4sXG59KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tTZXRFbmFibGVkSW5wdXQgPSB0eXBlb2YgU2NoZWR1bGVkVGFza1NldEVuYWJsZWRJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza0RlbGV0ZUlucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBTY2hlZHVsZWRUYXNrSWQsXG59KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tEZWxldGVJbnB1dCA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrRGVsZXRlSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNjaGVkdWxlZFRhc2tSdW5Ob3dJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBpZDogU2NoZWR1bGVkVGFza0lkLFxufSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrUnVuTm93SW5wdXQgPSB0eXBlb2YgU2NoZWR1bGVkVGFza1J1bk5vd0lucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrUm90YXRlV2ViaG9va1Rva2VuSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgaWQ6IFNjaGVkdWxlZFRhc2tJZCxcbn0pO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza1JvdGF0ZVdlYmhvb2tUb2tlbklucHV0ID0gdHlwZW9mIFNjaGVkdWxlZFRhc2tSb3RhdGVXZWJob29rVG9rZW5JbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza1dlYmhvb2tEZWxpdmVyeUlkID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nLnBpcGUoXG4gIFNjaGVtYS5icmFuZChcIlNjaGVkdWxlZFRhc2tXZWJob29rRGVsaXZlcnlJZFwiKSxcbik7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5SWQgPSB0eXBlb2YgU2NoZWR1bGVkVGFza1dlYmhvb2tEZWxpdmVyeUlkLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5T3V0Y29tZSA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwiYWNjZXB0ZWRcIixcbiAgXCJkaXNwYXRjaF9mYWlsZWRcIixcbiAgXCJkdXBsaWNhdGVcIixcbiAgXCJjb2FsZXNjZWRcIixcbiAgXCJyZWplY3RlZF9zaWduYXR1cmVcIixcbiAgXCJkaXNhYmxlZFwiLFxuICBcInJhdGVfbGltaXRlZFwiLFxuICBcImV4cGlyZWRcIixcbiAgXCJmaWx0ZXJlZFwiLFxuXSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5T3V0Y29tZSA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5T3V0Y29tZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza1dlYmhvb2tEZWxpdmVyeVN1bW1hcnkgPSBTY2hlbWEuU3RydWN0KHtcbiAgaWQ6IFNjaGVkdWxlZFRhc2tXZWJob29rRGVsaXZlcnlJZCxcbiAgdGFza0lkOiBTY2hlZHVsZWRUYXNrSWQsXG4gIHJlY2VpdmVkQXQ6IElzb0RhdGVUaW1lLFxuICBtZXRob2Q6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgY29udGVudFR5cGU6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZyksXG4gIGJvZHlCeXRlczogU2NoZW1hLkludC5jaGVjayhTY2hlbWEuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbygwKSksXG4gIC8vIEFueSBzdHJpbmcsIHNvIGFuIG91dGNvbWUgYWRkZWQgbGF0ZXIgZG9lc24ndCBicmVhayBhIGNsaWVudCdzIHdob2xlIGxpc3QuXG4gIG91dGNvbWU6IFNjaGVtYS5VbmlvbihbU2NoZWR1bGVkVGFza1dlYmhvb2tEZWxpdmVyeU91dGNvbWUsIFNjaGVtYS5TdHJpbmddKSxcbiAgc2lnbmF0dXJlVmVyaWZpZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICBwZW5kaW5nV2luZG93OiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxuICBtaXNzaW5nRmllbGRzOiBTY2hlbWEuQXJyYXkoU2NoZW1hLlN0cmluZyksXG4gIGVycm9yOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5TdHJpbmcpLFxufSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5U3VtbWFyeSA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5U3VtbWFyeS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza1dlYmhvb2tEZWxpdmVyeSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAuLi5TY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5U3VtbWFyeS5maWVsZHMsXG4gIHF1ZXJ5OiBTY2hlbWEuU3RyaW5nLFxuICBoZWFkZXJzOiBTY2hlbWEuUmVjb3JkKFNjaGVtYS5TdHJpbmcsIFNjaGVtYS5TdHJpbmcpLFxuICBib2R5OiBTY2hlbWEuU3RyaW5nLFxuICBib2R5VHJ1bmNhdGVkOiBTY2hlbWEuQm9vbGVhbixcbiAgcmVuZGVyZWRQcm9tcHQ6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZyksXG59KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tXZWJob29rRGVsaXZlcnkgPSB0eXBlb2YgU2NoZWR1bGVkVGFza1dlYmhvb2tEZWxpdmVyeS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza0xpc3RXZWJob29rRGVsaXZlcmllc0lucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBTY2hlZHVsZWRUYXNrSWQsXG4gIC8qKlxuICAgKiBTZW50IGJ5IGNsaWVudHMgdGhhdCBkZWNvZGUgYW55IG91dGNvbWUuIFNoaXBwZWQgY2xpZW50cyBkZWNvZGUgYSBjbG9zZWRcbiAgICogbGlzdCBhbmQgZmFpbCBvbiB0aGUgd2hvbGUgcmVzcG9uc2UsIHNvIHdpdGhvdXQgaXQgdGhlIHNlcnZlciBsZWF2ZXMgb3V0XG4gICAqIHJvd3Mgd2l0aCBvdXRjb21lcyB0aGV5IGRvbid0IGtub3cuXG4gICAqL1xuICBhY2NlcHRBbnlPdXRjb21lOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxufSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrTGlzdFdlYmhvb2tEZWxpdmVyaWVzSW5wdXQgPVxuICB0eXBlb2YgU2NoZWR1bGVkVGFza0xpc3RXZWJob29rRGVsaXZlcmllc0lucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrTGlzdFdlYmhvb2tEZWxpdmVyaWVzUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGRlbGl2ZXJpZXM6IFNjaGVtYS5BcnJheShTY2hlZHVsZWRUYXNrV2ViaG9va0RlbGl2ZXJ5U3VtbWFyeSksXG59KTtcbmV4cG9ydCB0eXBlIFNjaGVkdWxlZFRhc2tMaXN0V2ViaG9va0RlbGl2ZXJpZXNSZXN1bHQgPVxuICB0eXBlb2YgU2NoZWR1bGVkVGFza0xpc3RXZWJob29rRGVsaXZlcmllc1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza0dldFdlYmhvb2tEZWxpdmVyeUlucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBTY2hlZHVsZWRUYXNrSWQsXG4gIGRlbGl2ZXJ5SWQ6IFNjaGVkdWxlZFRhc2tXZWJob29rRGVsaXZlcnlJZCxcbiAgYWNjZXB0QW55T3V0Y29tZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza0dldFdlYmhvb2tEZWxpdmVyeUlucHV0ID0gdHlwZW9mIFNjaGVkdWxlZFRhc2tHZXRXZWJob29rRGVsaXZlcnlJbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza0dldFdlYmhvb2tEZWxpdmVyeVJlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBkZWxpdmVyeTogU2NoZWR1bGVkVGFza1dlYmhvb2tEZWxpdmVyeSxcbn0pO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza0dldFdlYmhvb2tEZWxpdmVyeVJlc3VsdCA9XG4gIHR5cGVvZiBTY2hlZHVsZWRUYXNrR2V0V2ViaG9va0RlbGl2ZXJ5UmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTY2hlZHVsZWRUYXNrTXV0YXRpb25SZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGFzazogU2NoZWR1bGVkVGFzayxcbn0pO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza011dGF0aW9uUmVzdWx0ID0gdHlwZW9mIFNjaGVkdWxlZFRhc2tNdXRhdGlvblJlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2NoZWR1bGVkVGFza0RlbGV0ZVJlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBpZDogU2NoZWR1bGVkVGFza0lkLFxufSk7XG5leHBvcnQgdHlwZSBTY2hlZHVsZWRUYXNrRGVsZXRlUmVzdWx0ID0gdHlwZW9mIFNjaGVkdWxlZFRhc2tEZWxldGVSZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNjaGVkdWxlZFRhc2tSdW5Ob3dSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGFzazogU2NoZWR1bGVkVGFzayxcbn0pO1xuZXhwb3J0IHR5cGUgU2NoZWR1bGVkVGFza1J1bk5vd1Jlc3VsdCA9IHR5cGVvZiBTY2hlZHVsZWRUYXNrUnVuTm93UmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjbGFzcyBTY2hlZHVsZWRUYXNrRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8U2NoZWR1bGVkVGFza0Vycm9yPigpKFxuICBcIlNjaGVkdWxlZFRhc2tFcnJvclwiLFxuICB7XG4gICAgbWVzc2FnZTogU2NoZW1hLlN0cmluZyxcbiAgICB0YXNrSWQ6IFNjaGVtYS5vcHRpb25hbChTY2hlZHVsZWRUYXNrSWQpLFxuICAgIGNhdXNlOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkRlZmVjdCgpKSxcbiAgfSxcbikge31cbiJdLCJmaWxlIjoiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3NjaGVkdWxlZFRhc2sudHMifQ==

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9zY2hlZHVsZWRUYXNrLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3NjaGVkdWxlZFRhc2sudHMiLHsidXJscyI6IjYiLCJpZHMiOiI3In0sWyI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLFtdLFsiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSx7fSwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9TY2hlbWEuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvYmFzZVNjaGVtYXMudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvbW9kZWxTZWxlY3Rpb24udHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvb3JjaGVzdHJhdGlvblYyLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3Byb3ZpZGVyUG9saWN5LnRzIl0=