humanish 0.96.0 → 0.97.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/dist/automatic-analysis-config.d.ts +15 -5
- package/dist/automatic-analysis-config.js +25 -4
- package/dist/automatic-analysis-config.js.map +1 -1
- package/dist/automatic-study-analysis.js +4 -2
- package/dist/automatic-study-analysis.js.map +1 -1
- package/dist/cua-actor-lab.d.ts +18 -286
- package/dist/cua-actor-lab.js +151 -1955
- package/dist/cua-actor-lab.js.map +1 -1
- package/dist/cua-desktop-lane.d.ts +35 -0
- package/dist/cua-desktop-lane.js +13 -0
- package/dist/cua-desktop-lane.js.map +1 -0
- package/dist/desktop-session.d.ts +41 -0
- package/dist/desktop-session.js +44 -0
- package/dist/desktop-session.js.map +1 -0
- package/dist/doctor-lab.d.ts +6 -1
- package/dist/doctor-lab.js +17 -3
- package/dist/doctor-lab.js.map +1 -1
- package/dist/e2b-cua-desktop.d.ts +3 -0
- package/dist/e2b-cua-desktop.js +675 -0
- package/dist/e2b-cua-desktop.js.map +1 -0
- package/dist/e2b-cua-provisioning.d.ts +311 -0
- package/dist/e2b-cua-provisioning.js +1213 -0
- package/dist/e2b-cua-provisioning.js.map +1 -0
- package/dist/e2b-desktop-session.d.ts +7 -0
- package/dist/e2b-desktop-session.js +29 -0
- package/dist/e2b-desktop-session.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/lab-summary.d.ts +3 -1
- package/dist/local-agent-cli.js +1 -1
- package/dist/local-agent-cli.js.map +1 -1
- package/dist/observer-app.html +2 -2
- package/dist/program.js +24 -9
- package/dist/program.js.map +1 -1
- package/dist/restricted-codex-analysis.d.ts +15 -0
- package/dist/restricted-codex-analysis.js +13 -0
- package/dist/restricted-codex-analysis.js.map +1 -0
- package/dist/restricted-codex-policy.d.ts +56 -0
- package/dist/restricted-codex-policy.js +151 -0
- package/dist/restricted-codex-policy.js.map +1 -0
- package/dist/restricted-codex-session.d.ts +19 -0
- package/dist/restricted-codex-session.js +419 -0
- package/dist/restricted-codex-session.js.map +1 -0
- package/dist/restricted-codex-transport.d.ts +58 -0
- package/dist/restricted-codex-transport.js +233 -0
- package/dist/restricted-codex-transport.js.map +1 -0
- package/dist/run.d.ts +1 -1
- package/dist/run.js +1 -1
- package/dist/run.js.map +1 -1
- package/dist/study-analysis-codex-config.d.ts +11 -0
- package/dist/study-analysis-codex-config.js +34 -0
- package/dist/study-analysis-codex-config.js.map +1 -0
- package/dist/study-analysis-engine.d.ts +6 -3
- package/dist/study-analysis-engine.js +19 -10
- package/dist/study-analysis-engine.js.map +1 -1
- package/dist/study-analysis-job.d.ts +1 -0
- package/dist/study-analysis-job.js +1 -1
- package/dist/study-analysis-job.js.map +1 -1
- package/dist/study-analysis-provider.d.ts +4 -2
- package/dist/study-analysis-provider.js +1 -1
- package/dist/study-analysis-provider.js.map +1 -1
- package/dist/study-analysis-service.d.ts +3 -0
- package/dist/study-analysis-service.js +24 -6
- package/dist/study-analysis-service.js.map +1 -1
- package/dist/study-analysis-validation.d.ts +29 -5
- package/dist/study-analysis-validation.js +23 -10
- package/dist/study-analysis-validation.js.map +1 -1
- package/dist/study-analysis.d.ts +27 -2
- package/dist/tui-app.js +102 -102
- package/docs/architecture/desktop-sessions.md +80 -0
- package/docs/architecture/restricted-codex-analysis.md +89 -0
- package/docs/contracts/run-bundle.md +7 -4
- package/docs/contracts/schemas.md +1 -1
- package/docs/contracts/study-analysis.md +44 -2
- package/docs/goals/current.md +4 -4
- package/docs/product/automatic-analysis.md +24 -3
- package/docs/ramp/README.md +11 -1
- package/docs/release/0.96.1-browser-navigation.md +22 -0
- package/docs/release/0.97.0-codex-account-analysis.md +45 -0
- package/package.json +1 -1
- package/skills/humanish/SKILL.md +19 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { CuaExecutor } from './computer-use.js';
|
|
2
|
+
import type { LaneRunOutcome } from './cua-actor-lab.js';
|
|
3
|
+
import type { LabCommsEmail, LabCommsRecipient } from './lab-config.js';
|
|
4
|
+
/** A prepared desktop supplies only participant input/observation and its inbox location. */
|
|
5
|
+
export interface ReadyCuaDesktop {
|
|
6
|
+
executor: CuaExecutor;
|
|
7
|
+
inbox?: {
|
|
8
|
+
url: string;
|
|
9
|
+
address?: string;
|
|
10
|
+
receiving?: boolean;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** Existing bundle fields. Provider-specific facts remain optional and must be measured. */
|
|
14
|
+
export type DesktopLaneEvidence = Pick<LaneRunOutcome, 'sandboxId' | 'desktopDurationMs' | 'desktopResources' | 'killed' | 'streamUrlPresent' | 'subjectCommit' | 'desktopBrowser' | 'desktopGeometry' | 'stateStepRecords' | 'phaseRecords' | 'failureCode' | 'commsArtifactPath'>;
|
|
15
|
+
/** One lane owns its desktop through preparation failure and final evidence collection.
|
|
16
|
+
* Call methods sequentially: prepare, openSession, then finalize in a finally block.
|
|
17
|
+
* finalize must be idempotent, record unavailable evidence/cleanup as warnings, and not throw.
|
|
18
|
+
* A constructor must not acquire resources. Participant/model behavior stays in the runner.
|
|
19
|
+
*/
|
|
20
|
+
export interface CuaDesktopLane {
|
|
21
|
+
prepare(): Promise<void>;
|
|
22
|
+
openSession(): Promise<ReadyCuaDesktop>;
|
|
23
|
+
finalize(options: {
|
|
24
|
+
failed: boolean;
|
|
25
|
+
}): Promise<void>;
|
|
26
|
+
snapshot(): DesktopLaneEvidence;
|
|
27
|
+
}
|
|
28
|
+
/** The lane's addressed comms recipient, when one exists — the gate AND the address source for the
|
|
29
|
+
* inbox instruction (#351). A lane told to check an inbox it can never receive into would stall,
|
|
30
|
+
* so no addressed recipient means no instruction. */
|
|
31
|
+
export declare function inboxRecipientFor(commsEmail: LabCommsEmail, laneId: string): LabCommsRecipient | undefined;
|
|
32
|
+
/** True when a lane has a declared comms recipient WITH an address, so the drain can actually match the
|
|
33
|
+
* mail the persona will be told to read. Gates the inbox instruction to lanes that can receive mail —
|
|
34
|
+
* a lane told to check an inbox it can never receive into would just stall. */
|
|
35
|
+
export declare function laneHasInboxRecipient(commsEmail: LabCommsEmail, laneId: string): boolean;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** The lane's addressed comms recipient, when one exists — the gate AND the address source for the
|
|
2
|
+
* inbox instruction (#351). A lane told to check an inbox it can never receive into would stall,
|
|
3
|
+
* so no addressed recipient means no instruction. */
|
|
4
|
+
export function inboxRecipientFor(commsEmail, laneId) {
|
|
5
|
+
return (commsEmail.recipients ?? []).find((recipient) => recipient.lane === laneId && recipient.address !== undefined);
|
|
6
|
+
}
|
|
7
|
+
/** True when a lane has a declared comms recipient WITH an address, so the drain can actually match the
|
|
8
|
+
* mail the persona will be told to read. Gates the inbox instruction to lanes that can receive mail —
|
|
9
|
+
* a lane told to check an inbox it can never receive into would just stall. */
|
|
10
|
+
export function laneHasInboxRecipient(commsEmail, laneId) {
|
|
11
|
+
return inboxRecipientFor(commsEmail, laneId) !== undefined;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=cua-desktop-lane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cua-desktop-lane.js","sourceRoot":"","sources":["../src/cua-desktop-lane.ts"],"names":[],"mappings":"AA4BA;;sDAEsD;AACtD,MAAM,UAAU,iBAAiB,CAAC,UAAyB,EAAE,MAAc;IACzE,OAAO,CAAC,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;AACzH,CAAC;AAED;;gFAEgF;AAChF,MAAM,UAAU,qBAAqB,CAAC,UAAyB,EAAE,MAAc;IAC7E,OAAO,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,SAAS,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CuaExecutor } from "./computer-use.js";
|
|
2
|
+
/** Internal lifecycle contract. Provider IDs are evidence, not permission to acquire a handle. */
|
|
3
|
+
export type DesktopReleaseResult = {
|
|
4
|
+
status: "released";
|
|
5
|
+
reason: "terminated" | "already_gone";
|
|
6
|
+
} | {
|
|
7
|
+
status: "retained";
|
|
8
|
+
reason: "debug";
|
|
9
|
+
} | {
|
|
10
|
+
status: "unconfirmed";
|
|
11
|
+
reason: "release_unavailable" | "invalid_result" | "release_failed";
|
|
12
|
+
error?: unknown;
|
|
13
|
+
};
|
|
14
|
+
export interface DesktopSession {
|
|
15
|
+
readonly resourceId: string;
|
|
16
|
+
readonly executor: CuaExecutor;
|
|
17
|
+
close(options?: {
|
|
18
|
+
retainForDebug?: boolean;
|
|
19
|
+
}): Promise<DesktopReleaseResult>;
|
|
20
|
+
}
|
|
21
|
+
export interface OwnedDesktopAllocation {
|
|
22
|
+
readonly resourceId: string;
|
|
23
|
+
/** Bind after adapter-specific provisioning, once per allocation. */
|
|
24
|
+
open(executor: CuaExecutor): DesktopSession;
|
|
25
|
+
/** Also available before open, so a provisioning failure cannot lose its cleanup handle. */
|
|
26
|
+
close(options?: {
|
|
27
|
+
retainForDebug?: boolean;
|
|
28
|
+
}): Promise<DesktopReleaseResult>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Wrap an already-acquired resource. The adapter supplies release authority as a closure;
|
|
32
|
+
* this layer never reconstructs it from a saved ID or enumerates provider resources.
|
|
33
|
+
* Closing immediately rejects new actions, including when release is unconfirmed. An
|
|
34
|
+
* in-flight backend operation may reject as the resource stops; close does not wait for it.
|
|
35
|
+
*/
|
|
36
|
+
export declare function ownDesktopAllocation(options: {
|
|
37
|
+
resourceId: string;
|
|
38
|
+
release: () => Promise<Exclude<DesktopReleaseResult, {
|
|
39
|
+
status: "retained";
|
|
40
|
+
}>>;
|
|
41
|
+
}): OwnedDesktopAllocation;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap an already-acquired resource. The adapter supplies release authority as a closure;
|
|
3
|
+
* this layer never reconstructs it from a saved ID or enumerates provider resources.
|
|
4
|
+
* Closing immediately rejects new actions, including when release is unconfirmed. An
|
|
5
|
+
* in-flight backend operation may reject as the resource stops; close does not wait for it.
|
|
6
|
+
*/
|
|
7
|
+
export function ownDesktopAllocation(options) {
|
|
8
|
+
const resourceId = options.resourceId;
|
|
9
|
+
const release = options.release;
|
|
10
|
+
let opened = false;
|
|
11
|
+
let closing;
|
|
12
|
+
const assertOpen = () => {
|
|
13
|
+
if (closing !== undefined)
|
|
14
|
+
throw new Error("Desktop session is closed.");
|
|
15
|
+
};
|
|
16
|
+
const close = (policy = {}) => {
|
|
17
|
+
// Install the promise before invoking release: concurrent/reentrant callers share it.
|
|
18
|
+
closing ??= policy.retainForDebug === true
|
|
19
|
+
? Promise.resolve({ status: "retained", reason: "debug" })
|
|
20
|
+
: Promise.resolve().then(release).catch((error) => ({
|
|
21
|
+
status: "unconfirmed", reason: "release_failed", error
|
|
22
|
+
}));
|
|
23
|
+
return closing;
|
|
24
|
+
};
|
|
25
|
+
return Object.freeze({
|
|
26
|
+
resourceId,
|
|
27
|
+
close,
|
|
28
|
+
open(executor) {
|
|
29
|
+
assertOpen();
|
|
30
|
+
if (opened)
|
|
31
|
+
throw new Error("Desktop allocation already has a participant session.");
|
|
32
|
+
opened = true;
|
|
33
|
+
return Object.freeze({
|
|
34
|
+
resourceId,
|
|
35
|
+
close,
|
|
36
|
+
executor: {
|
|
37
|
+
observe: async () => { assertOpen(); return executor.observe(); },
|
|
38
|
+
execute: async (action, signal) => { assertOpen(); return executor.execute(action, signal); }
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=desktop-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-session.js","sourceRoot":"","sources":["../src/desktop-session.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAGpC;IACC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,OAAkD,CAAC;IACvD,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3E,CAAC,CAAC;IACF,MAAM,KAAK,GAAoC,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE;QAC7D,sFAAsF;QACtF,OAAO,KAAK,MAAM,CAAC,cAAc,KAAK,IAAI;YACxC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC1D,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAwB,EAAE,CAAC,CAAC;gBAC/E,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK;aACvD,CAAC,CAAC,CAAC;QACR,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU;QACV,KAAK;QACL,IAAI,CAAC,QAAqB;YACxB,UAAU,EAAE,CAAC;YACb,IAAI,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACrF,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,UAAU;gBACV,KAAK;gBACL,QAAQ,EAAE;oBACR,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACjE,OAAO,EAAE,KAAK,EAAE,MAAiB,EAAE,MAAoB,EAAE,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;iBACvH;aACF,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/dist/doctor-lab.d.ts
CHANGED
|
@@ -3,13 +3,18 @@ import type { LabBackend } from "./lab-engine.js";
|
|
|
3
3
|
import type { DetectedLocalAgent } from "./local-agent-cli.js";
|
|
4
4
|
import type { DoctorResult } from "./run.js";
|
|
5
5
|
type Check = DoctorResult["checks"][number];
|
|
6
|
-
/** Setup checks only: no
|
|
6
|
+
/** Setup checks only: no model turn, browser or desktop creation. CLI startup may use the network. */
|
|
7
7
|
export declare function labSetupChecks(args: {
|
|
8
8
|
cwd: string;
|
|
9
9
|
lab: string;
|
|
10
10
|
env: NodeJS.ProcessEnv;
|
|
11
11
|
agents: DetectedLocalAgent[];
|
|
12
12
|
keyPresent: (name: string) => boolean;
|
|
13
|
+
/** Internal read-only qualification seam; never a participant/model request. */
|
|
14
|
+
codexAnalysisReadiness?: (env: NodeJS.ProcessEnv) => Promise<{
|
|
15
|
+
ready: boolean;
|
|
16
|
+
errorCode: string | null;
|
|
17
|
+
}>;
|
|
13
18
|
}): Promise<{
|
|
14
19
|
desktop: boolean;
|
|
15
20
|
keys: string[];
|
package/dist/doctor-lab.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { automaticAnalysisBudget } from "./automatic-analysis-config.js";
|
|
2
2
|
import { receivingRequiredKey } from "./comms-setup.js";
|
|
3
|
-
/** Setup checks only: no
|
|
3
|
+
/** Setup checks only: no model turn, browser or desktop creation. CLI startup may use the network. */
|
|
4
4
|
export async function labSetupChecks(args) {
|
|
5
5
|
const { resolveLabManifest } = await import("./labs.js");
|
|
6
6
|
const { selectLabBackend, resolveLabDryRun } = await import("./lab-engine.js");
|
|
@@ -46,12 +46,26 @@ export async function labSetupChecks(args) {
|
|
|
46
46
|
checks.push({ name: `subject env ${name}`, ok: !!args.env[name]?.trim() || args.keyPresent(name), message: args.env[name]?.trim() || args.keyPresent(name) ? "present; value not shown" : "missing declared subject environment variable; provide it with --env-file" });
|
|
47
47
|
}
|
|
48
48
|
const analysis = automaticAnalysisBudget(config.review?.analysis, backend);
|
|
49
|
-
if (analysis) {
|
|
49
|
+
if (analysis?.provider === "codex") {
|
|
50
|
+
const check = args.codexAnalysisReadiness ?? (async (env) => (await import("./restricted-codex-analysis.js")).checkRestrictedCodexAnalysisReadiness({ timeoutMs: 5000 }, { env }));
|
|
51
|
+
const readiness = await check(args.env).catch(() => ({ ready: false, errorCode: "codex_unavailable" }));
|
|
52
|
+
const recovery = readiness.errorCode === "codex_unsupported_platform"
|
|
53
|
+
? "Use a Linux x64 host for this qualified account route, or explicitly select provider: openai with an API key."
|
|
54
|
+
: readiness.errorCode === "codex_busy"
|
|
55
|
+
? "Another restricted Codex analyst or setup check is active in this process. Wait for it to finish, then retry."
|
|
56
|
+
: "Install the qualified CLI and sign in with a ChatGPT account.";
|
|
57
|
+
checks.push({ name: "post-run analysis", ok: readiness.ready, message: readiness.ready
|
|
58
|
+
? "Qualified Codex CLI and ChatGPT account login are ready for a separate restricted analyst. Analysis sends selected evidence to remote inference; model access and account allowance remain untested. Dollar cost and output-token ceilings are unavailable."
|
|
59
|
+
: `Codex account analysis is unavailable (${readiness.errorCode ?? "codex_unavailable"}). ${recovery} No API fallback is used; participant readiness is independent.` });
|
|
60
|
+
}
|
|
61
|
+
else if (analysis) {
|
|
50
62
|
checks.push({ name: "post-run analysis", ok: true, message: args.keyPresent("OPENAI_API_KEY")
|
|
51
63
|
? `OPENAI_API_KEY is present for the separate automatic analysis request; model access and quota are not tested. Its $${analysis.maxCostUsd} admission estimate limit may decline larger studies before dispatch; it is not a provider billing cap. Participant readiness is independent.`
|
|
52
64
|
: "Will be skipped: OPENAI_API_KEY is missing. The participant may run, but there will be no automatic findings report. Add an OpenAI API key or set review.analysis: false deliberately." });
|
|
53
65
|
}
|
|
54
|
-
checks.push({ name: "check scope", ok: true, message:
|
|
66
|
+
checks.push({ name: "check scope", ok: true, message: analysis?.provider === "codex"
|
|
67
|
+
? "The Codex setup check inspects local login and configuration without a model turn or participant resources. Remote account validity, model access, quota and target reachability remain untested; CLI startup may use the network."
|
|
68
|
+
: "Local setup only. Provider credentials are not validated, model access/quota and target reachability are untested, and no paid resources were created." });
|
|
55
69
|
return { desktop, keys, checks };
|
|
56
70
|
}
|
|
57
71
|
/** Required participant provider keys, shared by doctor and the TUI. Optional analysis is separate. */
|
package/dist/doctor-lab.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-lab.js","sourceRoot":"","sources":["../src/doctor-lab.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIxD,
|
|
1
|
+
{"version":3,"file":"doctor-lab.js","sourceRoot":"","sources":["../src/doctor-lab.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIxD,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAKpC;IACC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;IAC7H,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;IAClE,MAAM,MAAM,GAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI;YACpD,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,WAAW,MAAM,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3I,IAAI,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IACxD,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,WAAW;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IACnI,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACtF,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjF,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI;gBAC7G,CAAC,CAAC,mFAAmF;gBACrF,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACxB,CAAC,CAAC,WAAW,IAAI,wHAAwH;oBACzI,CAAC,CAAC,yKAAyK,EAAE,CAAC,CAAC;IACnL,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,CAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EACpF,mKAAmK,EAAE,CAAC,CAAC;IAC3K,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,OAAO,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kCAAkC,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,KAAK,eAAe,EAAE,OAAO,EACxG,KAAK,EAAE,UAAU,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,mHAAmH;gBACvK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,iBAAiB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,qCAAqC,WAAW,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,+CAA+C;oBAC5P,CAAC,CAAC,GAAG,MAAM,qHAAqH,EAAE,CAAC,CAAC;IAC5I,CAAC;IACD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,qBAAqB,EAAE,EAAE,OAAO,EAClF,wKAAwK,EAAE,CAAC,CAAC;IAChL,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EACvG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,2EAA2E,EAAE,CAAC,CAAC;IAClK,CAAC;IACD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC3E,IAAI,QAAQ,EAAE,QAAQ,KAAK,OAAO,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,IAAI,CAAC,KAAK,EAAE,GAAsB,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC,qCAAqC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACtM,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;QACxG,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,KAAK,4BAA4B;YACnE,CAAC,CAAC,+GAA+G;YACjH,CAAC,CAAC,SAAS,CAAC,SAAS,KAAK,YAAY;gBACtC,CAAC,CAAC,+GAA+G;gBACjH,CAAC,CAAC,+DAA+D,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK;gBACpF,CAAC,CAAC,6PAA6P;gBAC/P,CAAC,CAAC,0CAA0C,SAAS,CAAC,SAAS,IAAI,mBAAmB,MAAM,QAAQ,iEAAiE,EAAE,CAAC,CAAC;IAC7K,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;gBAC3F,CAAC,CAAC,sHAAsH,QAAQ,CAAC,UAAU,+IAA+I;gBAC1R,CAAC,CAAC,wLAAwL,EAAE,CAAC,CAAC;IAClM,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO;YAClF,CAAC,CAAC,oOAAoO;YACtO,CAAC,CAAC,wJAAwJ,EAAE,CAAC,CAAC;IAChK,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,OAAmB,EACnB,MAAe,EACf,UAAqC;IAErC,IAAI,MAAM,IAAI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;WAC1F,OAAO,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC;IACjE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5C,IAAI,OAAO,KAAK,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;SACnG,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,aAAa,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1I,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAiB,EAAE,OAAmB;IACjE,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,+GAA+G,CAAC;IAClK,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,kIAAkI,CAAC;IAClK,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,oGAAoG,CAAC;IACzI,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,qBAAqB;QAAE,OAAO,iIAAiI,CAAC;IACnO,OAAO,SAAS,CAAC;AACnB,CAAC"}
|