@curless/hotel-storefront 0.49.1 → 0.49.2

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.
Files changed (44) hide show
  1. package/dist/backend.d.ts +1 -1
  2. package/dist/card.generated.d.ts +1 -1
  3. package/dist/card.generated.js +2 -2
  4. package/dist/card.generated.js.map +1 -1
  5. package/dist/config.d.ts +16 -18
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/huazhu/backend.d.ts +2 -2
  9. package/dist/huazhu/backend.js +10 -10
  10. package/dist/huazhu/backend.js.map +1 -1
  11. package/dist/huazhu/bookings.d.ts +8 -5
  12. package/dist/huazhu/bookings.d.ts.map +1 -1
  13. package/dist/huazhu/bookings.js.map +1 -1
  14. package/dist/huazhu/check.d.ts +1 -1
  15. package/dist/huazhu/make.d.ts.map +1 -1
  16. package/dist/huazhu/make.js +6 -32
  17. package/dist/huazhu/make.js.map +1 -1
  18. package/dist/huazhu/sellable.d.ts.map +1 -1
  19. package/dist/huazhu/sellable.js +4 -3
  20. package/dist/huazhu/sellable.js.map +1 -1
  21. package/dist/legal.d.ts.map +1 -1
  22. package/dist/legal.js +9 -15
  23. package/dist/legal.js.map +1 -1
  24. package/dist/payments/checkout.d.ts +10 -70
  25. package/dist/payments/checkout.d.ts.map +1 -1
  26. package/dist/payments/checkout.js +14 -131
  27. package/dist/payments/checkout.js.map +1 -1
  28. package/dist/payments/stripe-checkout.js +4 -4
  29. package/dist/payments/stripe-checkout.js.map +1 -1
  30. package/dist/server.d.ts +3 -3
  31. package/dist/server.d.ts.map +1 -1
  32. package/dist/server.js +2 -2
  33. package/dist/supplier.d.ts +4 -1
  34. package/dist/supplier.d.ts.map +1 -1
  35. package/dist/supplier.js.map +1 -1
  36. package/dist/surface.js +2 -2
  37. package/dist/surface.js.map +1 -1
  38. package/dist/types.d.ts +5 -4
  39. package/dist/types.d.ts.map +1 -1
  40. package/package.json +2 -2
  41. package/dist/payments/fake-gateway.d.ts +0 -43
  42. package/dist/payments/fake-gateway.d.ts.map +0 -1
  43. package/dist/payments/fake-gateway.js +0 -135
  44. package/dist/payments/fake-gateway.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curless/hotel-storefront",
3
- "version": "0.49.1",
3
+ "version": "0.49.2",
4
4
  "type": "module",
5
5
  "description": "One hotel-booking MCP connector, driven by a config file. Brand, tool names, vocabulary and where the rooms come from live in a HotelConfig, so the second hotel group is a JSON file rather than a fork.",
6
6
  "keywords": [
@@ -44,7 +44,7 @@
44
44
  "@hono/node-server": ">=2.0.5 <3",
45
45
  "hono": ">=4.12.27 <5",
46
46
  "opencc-js": "1.4.2",
47
- "@curless/agentbank-protocols": "^0.16.0",
47
+ "@curless/agentbank-protocols": "^0.17.0",
48
48
  "@curless/brand-fonts": "^0.3.0"
49
49
  },
50
50
  "scripts": {
@@ -1,43 +0,0 @@
1
- type Session = {
2
- id: string;
3
- merchantId: string;
4
- status: 'ready_for_payment' | 'completed' | 'canceled';
5
- amount: number;
6
- currency: string;
7
- items: {
8
- id: string;
9
- quantity: number;
10
- unitPrice: number;
11
- name?: string;
12
- }[];
13
- pageOpen: boolean;
14
- };
15
- type Refund = {
16
- id: string;
17
- paymentIntentId: string;
18
- amount: number;
19
- status: 'requested' | 'approved' | 'refunded' | 'failed';
20
- reason?: string;
21
- };
22
- export declare const createFakeGateway: (opts: {
23
- merchantId: string;
24
- apiKey: string;
25
- currencies?: string[];
26
- }) => {
27
- fetch: typeof fetch;
28
- calls: {
29
- method: string;
30
- path: string;
31
- body: unknown;
32
- }[];
33
- sessions: Map<string, Session>;
34
- refunds: Map<string, Refund>;
35
- /** The guest pays on the card page. */
36
- pay(sessionId: string): void;
37
- /** The gateway's own expiry: an unpaid checkout past its deadline. */
38
- expire(sessionId: string): void;
39
- /** The provider confirms a refund's money moved. */
40
- settleRefunds(): void;
41
- };
42
- export {};
43
- //# sourceMappingURL=fake-gateway.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-gateway.d.ts","sourceRoot":"","sources":["../../src/payments/fake-gateway.ts"],"names":[],"mappings":"AAMA,KAAK,OAAO,GAAG;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,mBAAmB,GAAG,WAAW,GAAG,UAAU,CAAC;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5E,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;WAoGW,OAAO,KAAK;;gBAjGC,MAAM;cAAQ,MAAM;cAAQ,OAAO;;;;IAqGxD,uCAAuC;mBACxB,MAAM;IAMrB,sEAAsE;sBACpD,MAAM;IAOxB,oDAAoD;;CAKvD,CAAC"}
@@ -1,135 +0,0 @@
1
- // The agentbank gateway's checkout and refund routes, in memory - what a
2
- // prepaid stay is paid through - so the whole path can run in a test with no
3
- // gateway, no Stripe and no money. It keeps the gateway's own rules: only the
4
- // merchant's own key, only a currency the merchant takes, a checkout that is
5
- // paid cannot be cancelled, a refund only of a paid one, in full, one at a time.
6
- export const createFakeGateway = (opts) => {
7
- const sessions = new Map();
8
- const refunds = new Map();
9
- const calls = [];
10
- let seq = 0;
11
- const json = (status, body) => new Response(JSON.stringify(body), { status, headers: { 'content-type': 'application/json' } });
12
- const err = (status, message) => json(status, { error: { message } });
13
- const render = (s) => ({
14
- id: s.id,
15
- status: s.status,
16
- currency: s.currency,
17
- totals: [{ type: 'total', amount: s.amount }],
18
- });
19
- const handle = async (url, init) => {
20
- const method = (init.method ?? 'GET').toUpperCase();
21
- const path = url.pathname;
22
- const body = init.body ? JSON.parse(String(init.body)) : undefined;
23
- calls.push({ method, path, body });
24
- const auth = new Headers(init.headers).get('authorization');
25
- if (auth !== `Bearer ${opts.apiKey}`)
26
- return err(401, 'invalid api key');
27
- let m = /^\/acp\/([^/]+)\/checkout_sessions$/.exec(path);
28
- if (m && method === 'POST') {
29
- if (decodeURIComponent(m[1] ?? '') !== opts.merchantId)
30
- return err(403, 'not your merchant');
31
- const currency = String(body?.currency ?? 'USD');
32
- if (!(opts.currencies ?? ['CNY']).includes(currency))
33
- return err(400, `merchant ${opts.merchantId} does not accept ${currency}`);
34
- const items = (body?.items ?? []);
35
- seq += 1;
36
- const s = {
37
- id: `pi_fake${seq}`,
38
- merchantId: opts.merchantId,
39
- status: 'ready_for_payment',
40
- amount: items.reduce((a, i) => a + i.unitPrice * i.quantity, 0),
41
- currency,
42
- items,
43
- pageOpen: false,
44
- };
45
- sessions.set(s.id, s);
46
- return json(201, render(s));
47
- }
48
- m = /^\/acp\/([^/]+)\/checkout_sessions\/([^/]+)(\/card_page|\/cancel)?$/.exec(path);
49
- if (m) {
50
- const s = sessions.get(decodeURIComponent(m[2] ?? ''));
51
- if (!s || s.merchantId !== decodeURIComponent(m[1] ?? ''))
52
- return err(404, 'no such session');
53
- if (m[3] === '/card_page' && method === 'POST') {
54
- if (s.status !== 'ready_for_payment')
55
- return err(409, `session is ${s.status}`);
56
- s.pageOpen = true;
57
- return json(200, { url: `https://checkout.stripe.test/c/pay/${s.id}`, state: 'open' });
58
- }
59
- if (m[3] === '/cancel' && method === 'POST') {
60
- if (s.status === 'completed')
61
- return err(409, `payment_intent ${s.id} is captured, cannot cancel`);
62
- s.status = 'canceled';
63
- s.pageOpen = false;
64
- return json(200, render(s));
65
- }
66
- if (!m[3] && method === 'GET')
67
- return json(200, render(s));
68
- }
69
- if (path === '/v1/refund-requests' && method === 'POST') {
70
- const s = sessions.get(String(body?.paymentIntentId));
71
- if (!s)
72
- return err(404, 'no such payment intent');
73
- if (s.status !== 'completed')
74
- return err(409, `payment_intent ${s.id} is not refundable`);
75
- if ([...refunds.values()].some((r) => r.paymentIntentId === s.id && r.status !== 'failed'))
76
- return err(409, 'a refund is already open for this payment');
77
- if (body?.amount !== undefined && body.amount !== s.amount)
78
- return err(400, 'only a full refund is supported');
79
- seq += 1;
80
- const r = {
81
- id: `rfr_fake${seq}`,
82
- paymentIntentId: s.id,
83
- amount: s.amount,
84
- status: 'requested',
85
- reason: body?.reason,
86
- };
87
- refunds.set(r.id, r);
88
- return json(201, { refundRequest: r });
89
- }
90
- m = /^\/v1\/merchant\/([^/]+)\/refund-requests\/([^/]+)\/approve$/.exec(path);
91
- if (m && method === 'POST') {
92
- const r = refunds.get(decodeURIComponent(m[2] ?? ''));
93
- if (!r)
94
- return err(404, 'no such refund request');
95
- if (r.status === 'requested')
96
- r.status = 'approved';
97
- return json(200, { refundRequest: r });
98
- }
99
- m = /^\/v1\/refund-requests\/([^/]+)$/.exec(path);
100
- if (m && method === 'GET') {
101
- const r = refunds.get(decodeURIComponent(m[1] ?? ''));
102
- return r ? json(200, { refundRequest: r }) : err(404, 'no such refund request');
103
- }
104
- return err(404, `no route ${method} ${path}`);
105
- };
106
- return {
107
- fetch: (async (input, init) => handle(new URL(typeof input === 'string' ? input : input instanceof URL ? input.href : input.url), init ?? {})),
108
- calls,
109
- sessions,
110
- refunds,
111
- /** The guest pays on the card page. */
112
- pay(sessionId) {
113
- const s = sessions.get(sessionId);
114
- if (!s || s.status !== 'ready_for_payment')
115
- throw new Error(`cannot pay ${sessionId}`);
116
- s.status = 'completed';
117
- s.pageOpen = false;
118
- },
119
- /** The gateway's own expiry: an unpaid checkout past its deadline. */
120
- expire(sessionId) {
121
- const s = sessions.get(sessionId);
122
- if (s && s.status === 'ready_for_payment') {
123
- s.status = 'canceled';
124
- s.pageOpen = false;
125
- }
126
- },
127
- /** The provider confirms a refund's money moved. */
128
- settleRefunds() {
129
- for (const r of refunds.values())
130
- if (r.status === 'approved')
131
- r.status = 'refunded';
132
- },
133
- };
134
- };
135
- //# sourceMappingURL=fake-gateway.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fake-gateway.js","sourceRoot":"","sources":["../../src/payments/fake-gateway.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,iFAAiF;AAoBjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAIjC,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,MAAM,KAAK,GAAsD,EAAE,CAAC;IACpE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAa,EAAE,EAAE,CAC7C,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAClG,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC;QAC9B,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9C,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,KAAK,EAAE,GAAQ,EAAE,IAAiB,EAAqB,EAAE;QACtE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAEzE,IAAI,CAAC,GAAG,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,UAAU;gBAAE,OAAO,GAAG,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAClD,OAAO,GAAG,CAAC,GAAG,EAAE,YAAY,IAAI,CAAC,UAAU,oBAAoB,QAAQ,EAAE,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAqB,CAAC;YACtD,GAAG,IAAI,CAAC,CAAC;YACT,MAAM,CAAC,GAAY;gBACjB,EAAE,EAAE,UAAU,GAAG,EAAE;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,mBAAmB;gBAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC/D,QAAQ;gBACR,KAAK;gBACL,QAAQ,EAAE,KAAK;aAChB,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QACD,CAAC,GAAG,qEAAqE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,OAAO,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC9F,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC/C,IAAI,CAAC,CAAC,MAAM,KAAK,mBAAmB;oBAAE,OAAO,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAChF,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAClB,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,sCAAsC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;oBAC1B,OAAO,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC;gBACvE,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;gBACtB,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACnB,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,KAAK,qBAAqB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;gBAAE,OAAO,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAC1F,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;gBACxF,OAAO,GAAG,CAAC,GAAG,EAAE,2CAA2C,CAAC,CAAC;YAC/D,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBACxD,OAAO,GAAG,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;YACrD,GAAG,IAAI,CAAC,CAAC;YACT,MAAM,CAAC,GAAW;gBAChB,EAAE,EAAE,WAAW,GAAG,EAAE;gBACpB,eAAe,EAAE,CAAC,CAAC,EAAE;gBACrB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,IAAI,EAAE,MAAM;aACrB,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,CAAC,GAAG,8DAA8D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC;gBAAE,OAAO,GAAG,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW;gBAAE,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;YACpD,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,CAAC,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,GAAG,CAAC,GAAG,EAAE,YAAY,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,CAAC,KAAK,EAAE,KAA6B,EAAE,IAAkB,EAAE,EAAE,CAClE,MAAM,CACJ,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAC1F,IAAI,IAAI,EAAE,CACX,CAAiB;QACpB,KAAK;QACL,QAAQ;QACR,OAAO;QACP,uCAAuC;QACvC,GAAG,CAAC,SAAiB;YACnB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,mBAAmB;gBAAE,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;YACvF,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC;YACvB,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,sEAAsE;QACtE,MAAM,CAAC,SAAiB;YACtB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBAC1C,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;gBACtB,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;YACrB,CAAC;QACH,CAAC;QACD,oDAAoD;QACpD,aAAa;YACX,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU;oBAAE,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC;QACvF,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}