@rhinestone/sdk 2.0.0-beta.0 → 2.0.0-beta.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.
- package/README.md +43 -2
- package/dist/src/accounts/index.d.ts.map +1 -1
- package/dist/src/accounts/index.js +6 -34
- package/dist/src/accounts/json-rpc/providers.d.ts.map +1 -1
- package/dist/src/accounts/json-rpc/providers.js +3 -2
- package/dist/src/actions/smart-sessions.d.ts.map +1 -1
- package/dist/src/actions/smart-sessions.js +3 -3
- package/dist/src/errors/index.d.ts +3 -3
- package/dist/src/errors/index.d.ts.map +1 -1
- package/dist/src/errors/index.js +6 -4
- package/dist/src/execution/compact.d.ts +1 -144
- package/dist/src/execution/compact.d.ts.map +1 -1
- package/dist/src/execution/compact.js +1 -109
- package/dist/src/execution/error.d.ts +10 -1
- package/dist/src/execution/error.d.ts.map +1 -1
- package/dist/src/execution/error.js +9 -1
- package/dist/src/execution/index.d.ts +5 -7
- package/dist/src/execution/index.d.ts.map +1 -1
- package/dist/src/execution/index.js +24 -44
- package/dist/src/execution/utils.d.ts +29 -13
- package/dist/src/execution/utils.d.ts.map +1 -1
- package/dist/src/execution/utils.js +174 -122
- package/dist/src/index.d.ts +21 -16
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +15 -45
- package/dist/src/modules/index.d.ts +2 -2
- package/dist/src/modules/index.d.ts.map +1 -1
- package/dist/src/modules/index.js +2 -2
- package/dist/src/modules/read.d.ts.map +1 -1
- package/dist/src/modules/read.js +2 -4
- package/dist/src/modules/validators/index.d.ts +2 -2
- package/dist/src/modules/validators/index.d.ts.map +1 -1
- package/dist/src/modules/validators/index.js +2 -2
- package/dist/src/modules/validators/permissions.d.ts +5 -0
- package/dist/src/modules/validators/permissions.d.ts.map +1 -0
- package/dist/src/modules/validators/permissions.js +111 -0
- package/dist/src/modules/validators/policies/claim/permit2.d.ts +29 -3
- package/dist/src/modules/validators/policies/claim/permit2.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.d.ts +14 -27
- package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.js +74 -22
- package/dist/src/orchestrator/caip2.d.ts +7 -0
- package/dist/src/orchestrator/caip2.d.ts.map +1 -0
- package/dist/src/orchestrator/caip2.js +17 -0
- package/dist/src/orchestrator/client.d.ts +11 -11
- package/dist/src/orchestrator/client.d.ts.map +1 -1
- package/dist/src/orchestrator/client.js +193 -295
- package/dist/src/orchestrator/consts.d.ts +2 -2
- package/dist/src/orchestrator/consts.d.ts.map +1 -1
- package/dist/src/orchestrator/consts.js +2 -2
- package/dist/src/orchestrator/error.d.ts +72 -217
- package/dist/src/orchestrator/error.d.ts.map +1 -1
- package/dist/src/orchestrator/error.js +117 -195
- package/dist/src/orchestrator/index.d.ts +5 -5
- package/dist/src/orchestrator/index.d.ts.map +1 -1
- package/dist/src/orchestrator/index.js +3 -3
- package/dist/src/orchestrator/registry.d.ts +1 -8
- package/dist/src/orchestrator/registry.d.ts.map +1 -1
- package/dist/src/orchestrator/registry.js +1 -26
- package/dist/src/orchestrator/types.d.ts +97 -232
- package/dist/src/orchestrator/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +101 -32
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +2 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +2 -1
- package/dist/src/utils/walletClient.d.ts.map +1 -0
- package/dist/src/{accounts → utils}/walletClient.js +1 -1
- package/package.json +1 -5
- package/dist/src/accounts/passport.d.ts +0 -9
- package/dist/src/accounts/passport.d.ts.map +0 -1
- package/dist/src/accounts/passport.js +0 -78
- package/dist/src/accounts/walletClient.d.ts.map +0 -1
- package/dist/src/actions/compact.d.ts +0 -15
- package/dist/src/actions/compact.d.ts.map +0 -1
- package/dist/src/actions/compact.js +0 -200
- package/dist/src/actions/deployment.d.ts +0 -19
- package/dist/src/actions/deployment.d.ts.map +0 -1
- package/dist/src/actions/deployment.js +0 -76
- package/dist/src/execution/permit2.d.ts +0 -143
- package/dist/src/execution/permit2.d.ts.map +0 -1
- package/dist/src/execution/permit2.js +0 -280
- package/dist/src/execution/singleChainOps.d.ts +0 -41
- package/dist/src/execution/singleChainOps.d.ts.map +0 -1
- package/dist/src/execution/singleChainOps.js +0 -42
- package/dist/src/execution/types.d.ts +0 -36
- package/dist/src/execution/types.d.ts.map +0 -1
- package/dist/src/execution/types.js +0 -1
- /package/dist/src/{accounts → utils}/walletClient.d.ts +0 -0
|
@@ -10,6 +10,7 @@ import { getChainById, getWrappedTokenAddress, } from '../../orchestrator/regist
|
|
|
10
10
|
import smartSessionEmissaryAbi from '../abi/smart-session-emissary.js';
|
|
11
11
|
import { MODULE_TYPE_ID_VALIDATOR } from '../common.js';
|
|
12
12
|
import { getOwnerValidator, getValidator, SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, } from './core.js';
|
|
13
|
+
import { resolvePermissions } from './permissions.js';
|
|
13
14
|
import { encodePermit2ClaimPolicyInitData, PERMIT2_CLAIM_POLICY_ADDRESS, } from './policies/claim/permit2.js';
|
|
14
15
|
const types = {
|
|
15
16
|
PolicyData: [
|
|
@@ -62,12 +63,10 @@ const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG = '0x00000001';
|
|
|
62
63
|
const SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION = '0x00000002';
|
|
63
64
|
// Dummy preclaimop action injected into every session so that the filler can trigger
|
|
64
65
|
// verifyExecution (ENABLE mode) using an injected dummy preclaimop when there are no
|
|
65
|
-
// real preclaimops. Target 0x...
|
|
66
|
+
// real preclaimops. Target 0x...0420 is the ecRecover precompile; calls to it fail
|
|
66
67
|
// silently because preclaimops are failure-tolerant. Selector 0x69123456 is
|
|
67
|
-
// intentionally uncommon.
|
|
68
|
-
|
|
69
|
-
// different contexts (action matching vs. literal execution target).
|
|
70
|
-
const DUMMY_PRECLAIMOP_TARGET = '0x0000000000000000000000000000000000000001';
|
|
68
|
+
// intentionally uncommon.
|
|
69
|
+
const DUMMY_PRECLAIMOP_TARGET = '0x0000000000000000000000000000000000000420';
|
|
71
70
|
const DUMMY_PRECLAIMOP_SELECTOR = '0x69123456';
|
|
72
71
|
const SPENDING_LIMITS_POLICY_ADDRESS = '0x00000088d48cf102a8cdb0137a9b173f957c6343';
|
|
73
72
|
const TIME_FRAME_POLICY_ADDRESS = '0x8177451511de0577b911c254e9551d981c26dc72';
|
|
@@ -232,7 +231,7 @@ function packSignature(signers, validatorSignature) {
|
|
|
232
231
|
async function getSessionDetails(account, sessions, provider, useDevContracts) {
|
|
233
232
|
const lockTag = '0x000000000000000000000000';
|
|
234
233
|
const sessionNonces = await Promise.all(sessions.map((session) => getSessionNonce(account, session, lockTag, provider, useDevContracts)));
|
|
235
|
-
const sessionDatas = sessions.map((session) => getSessionData(session
|
|
234
|
+
const sessionDatas = sessions.map((session) => getSessionData(session));
|
|
236
235
|
const signedSessions = sessionDatas.map((session, index) => getSignedSession(account, lockTag, session, sessionNonces[index], useDevContracts));
|
|
237
236
|
const chains = sessions.map((session) => session.chain);
|
|
238
237
|
const hashesAndChainIds = signedSessions.map((session, index) => ({
|
|
@@ -361,7 +360,7 @@ function getSignedSession(account, lockTag, session, nonce, useDevContracts) {
|
|
|
361
360
|
};
|
|
362
361
|
}
|
|
363
362
|
async function getEnableSessionCall(account, session, enableSessionSignature, hashesAndChainIds, sessionToEnableIndex, useDevContracts) {
|
|
364
|
-
const sessionData = getSessionData(session
|
|
363
|
+
const sessionData = getSessionData(session);
|
|
365
364
|
const permissionId = getPermissionId(session);
|
|
366
365
|
return {
|
|
367
366
|
to: getSmartSessionEmissaryAddress(useDevContracts),
|
|
@@ -390,7 +389,47 @@ async function getEnableSessionCall(account, session, enableSessionSignature, ha
|
|
|
390
389
|
}),
|
|
391
390
|
};
|
|
392
391
|
}
|
|
393
|
-
function
|
|
392
|
+
function toSession(definition, options = {}) {
|
|
393
|
+
const sessionData = resolveSessionData(definition, options.useDevContracts);
|
|
394
|
+
return {
|
|
395
|
+
chain: definition.chain,
|
|
396
|
+
owners: definition.owners,
|
|
397
|
+
hasExplicitPermissions: !!definition.permissions?.length,
|
|
398
|
+
permissionId: getPermissionIdFromData(sessionData),
|
|
399
|
+
sessionValidator: sessionData.sessionValidator,
|
|
400
|
+
sessionValidatorInitData: sessionData.sessionValidatorInitData,
|
|
401
|
+
salt: sessionData.salt,
|
|
402
|
+
erc7739Policies: sessionData.erc7739Policies,
|
|
403
|
+
actions: sessionData.actions,
|
|
404
|
+
claimPolicies: definition.claimPolicies ?? [],
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
function resolvePermit2ClaimPolicy(policy) {
|
|
408
|
+
return {
|
|
409
|
+
type: 'permit2-claim',
|
|
410
|
+
arbiters: policy.spenders,
|
|
411
|
+
tokensIn: policy.sourceTokens?.map(({ chain, address }) => ({
|
|
412
|
+
chainId: chain.id,
|
|
413
|
+
token: address,
|
|
414
|
+
})),
|
|
415
|
+
tokensOut: policy.destinationTokens?.map(({ chain, address }) => ({
|
|
416
|
+
chainId: chain.id,
|
|
417
|
+
token: address,
|
|
418
|
+
})),
|
|
419
|
+
recipients: policy.recipients?.map(({ chain, address }) => ({
|
|
420
|
+
chainId: chain.id,
|
|
421
|
+
recipient: address,
|
|
422
|
+
})),
|
|
423
|
+
recipientIsSponsor: policy.recipientIsAccount,
|
|
424
|
+
expiryBounds: policy.permitDeadline,
|
|
425
|
+
fillExpiryBounds: policy.fillDeadline?.map(({ chain, min, max }) => ({
|
|
426
|
+
chainId: chain.id,
|
|
427
|
+
min,
|
|
428
|
+
max,
|
|
429
|
+
})),
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
function resolveSessionData(session, useDevContracts) {
|
|
394
433
|
const validator = getValidator(session.owners);
|
|
395
434
|
const allowedContent = [
|
|
396
435
|
{
|
|
@@ -417,7 +456,9 @@ function getSessionData(session, useDevContracts) {
|
|
|
417
456
|
},
|
|
418
457
|
],
|
|
419
458
|
};
|
|
420
|
-
const
|
|
459
|
+
const userActions = session.permissions?.length
|
|
460
|
+
? resolvePermissions(session.permissions)
|
|
461
|
+
: [];
|
|
421
462
|
const injectedActions = [
|
|
422
463
|
// Native token wrapping
|
|
423
464
|
{
|
|
@@ -430,12 +471,8 @@ function getSessionData(session, useDevContracts) {
|
|
|
430
471
|
stateMutability: 'payable',
|
|
431
472
|
}),
|
|
432
473
|
},
|
|
433
|
-
//
|
|
434
|
-
|
|
435
|
-
// causing IntentExecutionPolicy to be required for all fallback calls
|
|
436
|
-
...(!userHasFallbackAction
|
|
437
|
-
? [{ policies: [{ type: 'intent-execution' }] }]
|
|
438
|
-
: []),
|
|
474
|
+
// Intent-execution fallback for any non-scoped call.
|
|
475
|
+
{ policies: [{ type: 'intent-execution' }] },
|
|
439
476
|
// Dummy action: allows the filler to call verifyExecution in ENABLE mode using
|
|
440
477
|
// an injected dummy preclaimop so any session can be enabled on-chain without
|
|
441
478
|
// a separate UserOp, regardless of whether it has claim or action policies.
|
|
@@ -445,8 +482,9 @@ function getSessionData(session, useDevContracts) {
|
|
|
445
482
|
policies: [{ type: 'sudo' }],
|
|
446
483
|
},
|
|
447
484
|
];
|
|
448
|
-
const
|
|
449
|
-
|
|
485
|
+
const allActions = [...userActions, ...injectedActions];
|
|
486
|
+
const actions = userActions.length
|
|
487
|
+
? allActions.map((action) => ({
|
|
450
488
|
actionTargetSelector: 'selector' in action
|
|
451
489
|
? action.selector
|
|
452
490
|
: SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG,
|
|
@@ -467,15 +505,29 @@ function getSessionData(session, useDevContracts) {
|
|
|
467
505
|
sessionValidatorInitData: validator.initData,
|
|
468
506
|
erc7739Policies: erc7739Data,
|
|
469
507
|
actions,
|
|
470
|
-
|
|
471
|
-
claimPolicies: session.claimPolicies?.map((p) => ({
|
|
508
|
+
claimPolicies: session.claimPolicies?.map((policy) => ({
|
|
472
509
|
policy: PERMIT2_CLAIM_POLICY_ADDRESS,
|
|
473
|
-
initData: encodePermit2ClaimPolicyInitData(
|
|
510
|
+
initData: encodePermit2ClaimPolicyInitData(resolvePermit2ClaimPolicy(policy)),
|
|
474
511
|
})) ?? [],
|
|
475
512
|
};
|
|
476
513
|
}
|
|
514
|
+
function getSessionData(session) {
|
|
515
|
+
return {
|
|
516
|
+
sessionValidator: session.sessionValidator,
|
|
517
|
+
salt: session.salt,
|
|
518
|
+
sessionValidatorInitData: session.sessionValidatorInitData,
|
|
519
|
+
erc7739Policies: session.erc7739Policies,
|
|
520
|
+
actions: session.actions,
|
|
521
|
+
claimPolicies: session.claimPolicies.map((policy) => ({
|
|
522
|
+
policy: PERMIT2_CLAIM_POLICY_ADDRESS,
|
|
523
|
+
initData: encodePermit2ClaimPolicyInitData(resolvePermit2ClaimPolicy(policy)),
|
|
524
|
+
})),
|
|
525
|
+
};
|
|
526
|
+
}
|
|
477
527
|
function getPermissionId(session) {
|
|
478
|
-
|
|
528
|
+
return session.permissionId;
|
|
529
|
+
}
|
|
530
|
+
function getPermissionIdFromData(sessionData) {
|
|
479
531
|
return keccak256(encodeAbiParameters([
|
|
480
532
|
{
|
|
481
533
|
type: 'address',
|
|
@@ -717,4 +769,4 @@ function buildMockSignature(session, useDevContracts, chainCount = 1, targetChai
|
|
|
717
769
|
function createFixedArray(length, getValue) {
|
|
718
770
|
return Array.from({ length }, (_, i) => getValue(i));
|
|
719
771
|
}
|
|
720
|
-
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, DUMMY_PRECLAIMOP_TARGET, DUMMY_PRECLAIMOP_SELECTOR, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
772
|
+
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, DUMMY_PRECLAIMOP_TARGET, DUMMY_PRECLAIMOP_SELECTOR, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, toSession, resolvePermit2ClaimPolicy, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
type Caip2ChainId = `eip155:${number}`;
|
|
2
|
+
declare function toCaip2(chainId: number): Caip2ChainId;
|
|
3
|
+
declare function fromCaip2(chainId: string): number;
|
|
4
|
+
declare function isCaip2(chainId: string): chainId is Caip2ChainId;
|
|
5
|
+
export type { Caip2ChainId };
|
|
6
|
+
export { fromCaip2, isCaip2, toCaip2 };
|
|
7
|
+
//# sourceMappingURL=caip2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"caip2.d.ts","sourceRoot":"","sources":["../../../orchestrator/caip2.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG,UAAU,MAAM,EAAE,CAAA;AAItC,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAK9C;AAED,iBAAS,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAK1C;AAED,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,YAAY,CAEzD;AAED,YAAY,EAAE,YAAY,EAAE,CAAA;AAC5B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const EIP155_CAIP2_REGEX = /^eip155:\d+$/;
|
|
2
|
+
function toCaip2(chainId) {
|
|
3
|
+
if (!Number.isInteger(chainId) || chainId < 0) {
|
|
4
|
+
throw new Error(`Invalid EVM chain id: ${chainId}`);
|
|
5
|
+
}
|
|
6
|
+
return `eip155:${chainId}`;
|
|
7
|
+
}
|
|
8
|
+
function fromCaip2(chainId) {
|
|
9
|
+
if (!EIP155_CAIP2_REGEX.test(chainId)) {
|
|
10
|
+
throw new Error(`Invalid CAIP-2 chain id: ${chainId}`);
|
|
11
|
+
}
|
|
12
|
+
return Number(chainId.slice('eip155:'.length));
|
|
13
|
+
}
|
|
14
|
+
function isCaip2(chainId) {
|
|
15
|
+
return EIP155_CAIP2_REGEX.test(chainId);
|
|
16
|
+
}
|
|
17
|
+
export { fromCaip2, isCaip2, toCaip2 };
|
|
@@ -1,28 +1,28 @@
|
|
|
1
1
|
import type { Address } from 'viem';
|
|
2
2
|
import type { AuthProvider } from '../auth/provider.js';
|
|
3
|
-
import type { IntentInput, IntentOpStatus,
|
|
3
|
+
import type { IntentInput, IntentOpStatus, IntentSubmitRequestInternal, IntentSubmitResponse, Portfolio, QuoteResponse, SplitIntentsInput, SplitIntentsResult } from './types.js';
|
|
4
|
+
interface PolicyContext {
|
|
5
|
+
intentInput: unknown;
|
|
6
|
+
isSponsored: boolean;
|
|
7
|
+
}
|
|
4
8
|
export declare class Orchestrator {
|
|
5
9
|
private serverUrl;
|
|
6
10
|
private authProvider;
|
|
7
11
|
private extraHeaders?;
|
|
8
12
|
constructor(serverUrl: string, authProvider: AuthProvider, headers?: Record<string, string>);
|
|
9
|
-
getPortfolio(
|
|
13
|
+
getPortfolio(accountAddress: Address, filter?: {
|
|
10
14
|
chainIds?: number[];
|
|
11
15
|
tokens?: {
|
|
12
16
|
[chainId: number]: Address[];
|
|
13
17
|
};
|
|
14
18
|
}): Promise<Portfolio>;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
isSponsored: boolean;
|
|
20
|
-
}): Promise<IntentResult>;
|
|
21
|
-
getIntentOpStatus(intentId: bigint): Promise<IntentOpStatus>;
|
|
19
|
+
createQuote(input: IntentInput): Promise<QuoteResponse>;
|
|
20
|
+
getSplit(input: SplitIntentsInput): Promise<SplitIntentsResult>;
|
|
21
|
+
createIntent(request: IntentSubmitRequestInternal, policyContext?: PolicyContext): Promise<IntentSubmitResponse>;
|
|
22
|
+
getIntent(intentId: string): Promise<IntentOpStatus>;
|
|
22
23
|
private getHeaders;
|
|
23
24
|
private getSubmitHeaders;
|
|
24
25
|
private fetch;
|
|
25
|
-
private parseError;
|
|
26
|
-
private parseErrorMessage;
|
|
27
26
|
}
|
|
27
|
+
export {};
|
|
28
28
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAQpD,OAAO,KAAK,EAKV,WAAW,EACX,cAAc,EAEd,2BAA2B,EAC3B,oBAAoB,EACpB,SAAS,EAET,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,SAAS,CAAA;AAGhB,UAAU,aAAa;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,YAAY,CAAC,CAAwB;gBAG3C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO5B,YAAY,CAChB,cAAc,EAAE,OAAO,EACvB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,CAAC,EAAE;YAAE,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;SAAE,CAAA;KAC1C,GACA,OAAO,CAAC,SAAS,CAAC;IA0Cf,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAUvD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkB/D,YAAY,CAChB,OAAO,EAAE,2BAA2B,EACpC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,oBAAoB,CAAC;IAe1B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YAoB5C,UAAU;YAWV,gBAAgB;YAiBhB,KAAK;CAwBpB"}
|