@just-every/ensemble 0.2.264 → 0.2.266
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 +19 -0
- package/dist/cjs/index.cjs +7 -2
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/model_providers/gemini.cjs +1 -1
- package/dist/cjs/model_providers/gemini.js.map +1 -1
- package/dist/cjs/model_providers/openai.cjs +67 -91
- package/dist/cjs/model_providers/openai.d.ts.map +1 -1
- package/dist/cjs/model_providers/openai.js.map +1 -1
- package/dist/cjs/model_providers/openai_image_edit_input.cjs +73 -0
- package/dist/cjs/model_providers/openai_image_edit_input.d.ts +27 -0
- package/dist/cjs/model_providers/openai_image_edit_input.d.ts.map +1 -0
- package/dist/cjs/model_providers/openai_image_edit_input.js.map +1 -0
- package/dist/cjs/model_providers/openai_image_request.cjs +153 -0
- package/dist/cjs/model_providers/openai_image_request.d.ts +36 -0
- package/dist/cjs/model_providers/openai_image_request.d.ts.map +1 -0
- package/dist/cjs/model_providers/openai_image_request.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types/types.d.ts +6 -1
- package/dist/cjs/types/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/model_providers/gemini.js +1 -1
- package/dist/model_providers/gemini.js.map +1 -1
- package/dist/model_providers/openai.d.ts.map +1 -1
- package/dist/model_providers/openai.js +64 -91
- package/dist/model_providers/openai.js.map +1 -1
- package/dist/model_providers/openai_image_edit_input.d.ts +27 -0
- package/dist/model_providers/openai_image_edit_input.d.ts.map +1 -0
- package/dist/model_providers/openai_image_edit_input.js +69 -0
- package/dist/model_providers/openai_image_edit_input.js.map +1 -0
- package/dist/model_providers/openai_image_request.d.ts +36 -0
- package/dist/model_providers/openai_image_request.d.ts.map +1 -0
- package/dist/model_providers/openai_image_request.js +147 -0
- package/dist/model_providers/openai_image_request.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types.d.ts +6 -1
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export class OpenAIImageRequestError extends Error {
|
|
2
|
+
reason;
|
|
3
|
+
retryable;
|
|
4
|
+
recoverable;
|
|
5
|
+
status;
|
|
6
|
+
requestID;
|
|
7
|
+
request_id;
|
|
8
|
+
code;
|
|
9
|
+
type;
|
|
10
|
+
param;
|
|
11
|
+
providerCode;
|
|
12
|
+
providerType;
|
|
13
|
+
providerParam;
|
|
14
|
+
cause;
|
|
15
|
+
constructor(message, details) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = 'OpenAIImageRequestError';
|
|
18
|
+
this.reason = details.reason;
|
|
19
|
+
this.retryable = details.retryable;
|
|
20
|
+
this.recoverable = details.retryable;
|
|
21
|
+
this.status = details.status;
|
|
22
|
+
this.requestID = details.providerRequestId;
|
|
23
|
+
this.request_id = details.providerRequestId;
|
|
24
|
+
this.code = details.providerCode;
|
|
25
|
+
this.type = details.providerType;
|
|
26
|
+
this.param = details.providerParam;
|
|
27
|
+
this.providerCode = details.providerCode;
|
|
28
|
+
this.providerType = details.providerType;
|
|
29
|
+
this.providerParam = details.providerParam;
|
|
30
|
+
this.cause = details.cause;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export const DEFAULT_OPENAI_IMAGE_TIMEOUT_MS = 5 * 60 * 1000;
|
|
34
|
+
const normalizedString = (value) => {
|
|
35
|
+
if (typeof value !== 'string')
|
|
36
|
+
return undefined;
|
|
37
|
+
const normalized = value.trim();
|
|
38
|
+
return normalized.length > 0 ? normalized : undefined;
|
|
39
|
+
};
|
|
40
|
+
const nestedProviderError = (error) => error.error && typeof error.error === 'object' ? error.error : {};
|
|
41
|
+
const providerRequestId = (error) => {
|
|
42
|
+
const direct = normalizedString(error.requestID) ?? normalizedString(error.request_id);
|
|
43
|
+
if (direct)
|
|
44
|
+
return direct;
|
|
45
|
+
return error.headers instanceof Headers ? normalizedString(error.headers.get('x-request-id')) : undefined;
|
|
46
|
+
};
|
|
47
|
+
const isPolicyFailure = (values) => {
|
|
48
|
+
const description = values.filter(Boolean).join(' ').toLowerCase();
|
|
49
|
+
return (description.includes('content_policy') ||
|
|
50
|
+
description.includes('content policy') ||
|
|
51
|
+
description.includes('moderation_blocked') ||
|
|
52
|
+
description.includes('moderation blocked') ||
|
|
53
|
+
description.includes('safety violation'));
|
|
54
|
+
};
|
|
55
|
+
export function normalizeOpenAIImageError(error) {
|
|
56
|
+
if (error instanceof OpenAIImageRequestError)
|
|
57
|
+
return error;
|
|
58
|
+
const raw = error && typeof error === 'object' ? error : {};
|
|
59
|
+
const nested = nestedProviderError(raw);
|
|
60
|
+
const name = normalizedString(raw.name) ?? (error instanceof Error ? error.name : undefined);
|
|
61
|
+
const message = normalizedString(raw.message) ??
|
|
62
|
+
normalizedString(nested.message) ??
|
|
63
|
+
(typeof error === 'string' ? error : undefined) ??
|
|
64
|
+
'OpenAI image request failed.';
|
|
65
|
+
const status = typeof raw.status === 'number' && Number.isFinite(raw.status) ? raw.status : undefined;
|
|
66
|
+
const providerCode = normalizedString(raw.code) ?? normalizedString(nested.code);
|
|
67
|
+
const providerType = normalizedString(raw.type) ?? normalizedString(nested.type);
|
|
68
|
+
const providerParam = normalizedString(raw.param) ?? normalizedString(nested.param);
|
|
69
|
+
const requestId = providerRequestId(raw);
|
|
70
|
+
const policyFailure = isPolicyFailure([providerCode, providerType, message]);
|
|
71
|
+
const timeout = name === 'APIConnectionTimeoutError' || name === 'TimeoutError' || providerCode === 'ETIMEDOUT';
|
|
72
|
+
const aborted = name === 'AbortError' || providerCode === 'ABORT_ERR';
|
|
73
|
+
const connection = name === 'APIConnectionError';
|
|
74
|
+
const retryableStatus = status === 408 || status === 409 || status === 429 || (status !== undefined && status >= 500);
|
|
75
|
+
const reason = policyFailure
|
|
76
|
+
? 'content_policy_violation'
|
|
77
|
+
: timeout
|
|
78
|
+
? 'timeout'
|
|
79
|
+
: aborted
|
|
80
|
+
? 'aborted'
|
|
81
|
+
: connection
|
|
82
|
+
? 'connection'
|
|
83
|
+
: 'http';
|
|
84
|
+
return new OpenAIImageRequestError(message, {
|
|
85
|
+
reason,
|
|
86
|
+
retryable: timeout || connection || retryableStatus,
|
|
87
|
+
status,
|
|
88
|
+
providerRequestId: requestId,
|
|
89
|
+
providerCode,
|
|
90
|
+
providerType,
|
|
91
|
+
providerParam,
|
|
92
|
+
cause: error,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const timeoutError = (operationName, timeoutMs) => new OpenAIImageRequestError(`${operationName} timed out after ${timeoutMs}ms`, {
|
|
96
|
+
reason: 'timeout',
|
|
97
|
+
retryable: true,
|
|
98
|
+
providerCode: 'ETIMEDOUT',
|
|
99
|
+
});
|
|
100
|
+
const abortError = (operationName, cause) => new OpenAIImageRequestError(`${operationName} aborted`, {
|
|
101
|
+
reason: 'aborted',
|
|
102
|
+
retryable: false,
|
|
103
|
+
providerCode: 'ABORT_ERR',
|
|
104
|
+
cause,
|
|
105
|
+
});
|
|
106
|
+
export async function runOpenAIImageRequest(options) {
|
|
107
|
+
if (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0) {
|
|
108
|
+
throw new RangeError('OpenAI image timeoutMs must be a positive finite number.');
|
|
109
|
+
}
|
|
110
|
+
const controller = new AbortController();
|
|
111
|
+
let abortListener;
|
|
112
|
+
let rejectGuard;
|
|
113
|
+
const guardPromise = new Promise((_, reject) => {
|
|
114
|
+
rejectGuard = reject;
|
|
115
|
+
});
|
|
116
|
+
const abortWith = (error) => {
|
|
117
|
+
if (!controller.signal.aborted)
|
|
118
|
+
controller.abort(error);
|
|
119
|
+
rejectGuard?.(error);
|
|
120
|
+
};
|
|
121
|
+
if (options.abortSignal?.aborted) {
|
|
122
|
+
abortWith(abortError(options.operationName, options.abortSignal.reason));
|
|
123
|
+
}
|
|
124
|
+
else if (options.abortSignal) {
|
|
125
|
+
abortListener = () => abortWith(abortError(options.operationName, options.abortSignal?.reason));
|
|
126
|
+
options.abortSignal.addEventListener('abort', abortListener, { once: true });
|
|
127
|
+
}
|
|
128
|
+
const timeoutId = setTimeout(() => {
|
|
129
|
+
abortWith(timeoutError(options.operationName, options.timeoutMs));
|
|
130
|
+
}, options.timeoutMs);
|
|
131
|
+
const operationPromise = Promise.resolve().then(() => options.execute(controller.signal));
|
|
132
|
+
try {
|
|
133
|
+
return await Promise.race([operationPromise, guardPromise]);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
operationPromise.catch(() => {
|
|
137
|
+
});
|
|
138
|
+
throw normalizeOpenAIImageError(error);
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
clearTimeout(timeoutId);
|
|
142
|
+
if (options.abortSignal && abortListener) {
|
|
143
|
+
options.abortSignal.removeEventListener('abort', abortListener);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=openai_image_request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai_image_request.js","sourceRoot":"","sources":["../../model_providers/openai_image_request.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACrC,MAAM,CAA2B;IACjC,SAAS,CAAU;IACnB,WAAW,CAAU;IACrB,MAAM,CAAU;IAChB,SAAS,CAAU;IACnB,UAAU,CAAU;IACpB,IAAI,CAAU;IACd,IAAI,CAAU;IACd,KAAK,CAAU;IACf,YAAY,CAAU;IACtB,YAAY,CAAU;IACtB,aAAa,CAAU;IACvB,KAAK,CAAW;IAEzB,YAAY,OAAe,EAAE,OAAgC;QACzD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAe7D,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,KAAyB,EAAsB,EAAE,CAC1E,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,KAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9F,MAAM,iBAAiB,GAAG,CAAC,KAAyB,EAAsB,EAAE;IACxE,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvF,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,OAAO,KAAK,CAAC,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9G,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,MAAiC,EAAW,EAAE;IACnE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,OAAO,CACH,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtC,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtC,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC1C,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAC3C,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACpD,IAAI,KAAK,YAAY,uBAAuB;QAAE,OAAO,KAAK,CAAC;IAE3D,MAAM,GAAG,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7F,MAAM,OAAO,GACT,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;QAChC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/C,8BAA8B,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,KAAK,2BAA2B,IAAI,IAAI,KAAK,cAAc,IAAI,YAAY,KAAK,WAAW,CAAC;IAChH,MAAM,OAAO,GAAG,IAAI,KAAK,YAAY,IAAI,YAAY,KAAK,WAAW,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,KAAK,oBAAoB,CAAC;IACjD,MAAM,eAAe,GACjB,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC;IAElG,MAAM,MAAM,GAA6B,aAAa;QAClD,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,OAAO;YACP,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,OAAO;gBACP,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,UAAU;oBACV,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,MAAM,CAAC;IAEnB,OAAO,IAAI,uBAAuB,CAAC,OAAO,EAAE;QACxC,MAAM;QACN,SAAS,EAAE,OAAO,IAAI,UAAU,IAAI,eAAe;QACnD,MAAM;QACN,iBAAiB,EAAE,SAAS;QAC5B,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,KAAK,EAAE,KAAK;KACf,CAAC,CAAC;AACP,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,aAAqB,EAAE,SAAiB,EAA2B,EAAE,CACvF,IAAI,uBAAuB,CAAC,GAAG,aAAa,oBAAoB,SAAS,IAAI,EAAE;IAC3E,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,WAAW;CAC5B,CAAC,CAAC;AAEP,MAAM,UAAU,GAAG,CAAC,aAAqB,EAAE,KAAe,EAA2B,EAAE,CACnF,IAAI,uBAAuB,CAAC,GAAG,aAAa,UAAU,EAAE;IACpD,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,WAAW;IACzB,KAAK;CACR,CAAC,CAAC;AAEP,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAI,OAK9C;IACG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,aAAuC,CAAC;IAC5C,IAAI,WAAmE,CAAC;IACxE,MAAM,YAAY,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAClD,WAAW,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,CAAC,KAA8B,EAAE,EAAE;QACjD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO;YAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxD,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QAC/B,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC7B,aAAa,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9B,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACtE,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACtB,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1F,IAAI,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE;QAE5B,CAAC,CAAC,CAAC;QACH,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACP,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,OAAO,CAAC,WAAW,IAAI,aAAa,EAAE,CAAC;YACvC,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;AACL,CAAC"}
|