{"version":3,"file":"walletConnect.cjs","names":["methodsThatRequireUserAction: string[]","SessionClosedUnexpectedlyError","WalletProviderEnum","getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId']","switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork']","request: WalletConnectEvmWalletProvider['request']","disconnect: NonNullable<\n    WalletConnectEvmWalletProvider['disconnect']\n  >","SDK_ERRORS","disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount']","signMessage: WalletConnectEvmWalletProvider['signMessage']","getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses']","formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress']","viemGetAddress","terminate: WalletConnectEvmWalletProvider['terminate']","evmConfirmTransaction","evmExecuteSwapTransaction","evmTransferAmount","WalletProviderPriority","CHAINS_INFO_MAP","packageName","packageVersion"],"sources":["../src/walletConnect/createWalletProviderFromEIP155Session/createWalletProviderFromEIP155Session.ts","../src/walletConnect/recoverEvmWalletConnectWalletProviders/recoverEvmWalletConnectWalletProviders.ts","../src/walletConnect/addWalletConnectEvmExtension/addWalletConnectEvmExtension.ts","../src/walletConnect/consts.ts","../src/walletConnect/connectAndVerifyWithWalletConnectEvm/connectAndVerifyWithWalletConnectEvm.ts","../src/walletConnect/connectWithWalletConnectEvm/connectWithWalletConnectEvm.ts","../src/exports/walletConnect.ts"],"sourcesContent":["import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n  emitEvent,\n  filterDuplicates,\n  formatWalletProviderGroupKey,\n  formatWalletProviderKey,\n  getActiveNetworkIdFromLastKnownRegistry,\n  getWalletProviderRegistry,\n  switchActiveNetworkInLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { SessionClosedUnexpectedlyError } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n  createWalletConnectSessionEventEmitter,\n  getSignClient,\n  splitCaip10Token,\n} from '@dynamic-labs-sdk/wallet-connect/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\nimport { SDK_ERRORS } from '@walletconnect/utils';\nimport { getAddress as viemGetAddress } from 'viem';\n\nimport { evmConfirmTransaction } from '../../utils/evmConfirmTransaction';\nimport { evmExecuteSwapTransaction } from '../../utils/evmExecuteSwapTransaction';\nimport { evmTransferAmount } from '../../utils/evmTransferAmount';\nimport type { evmMethods } from '../consts';\nimport type { WalletConnectEvmWalletProvider } from '../walletConnectEvmWalletProvider.types';\n\ntype CreateWalletProviderFromEIP155SessionParams = {\n  sessionTopic: string;\n};\n\n/**\n * The list of ethereum request methods that require user action.\n * We will raise a user action requested event for these methods.\n */\nconst methodsThatRequireUserAction: string[] = [\n  'personal_sign',\n  'eth_sendTransaction',\n  // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n  'eth_signTypedData_v4',\n] satisfies (typeof evmMethods)[number][];\n\n/** @not-instrumented */\nexport const createWalletProviderFromEIP155Session = async (\n  { sessionTopic }: CreateWalletProviderFromEIP155SessionParams,\n  client: DynamicClient\n): Promise<WalletConnectEvmWalletProvider> => {\n  const signClient = await getSignClient(client);\n\n  const getSession = () => {\n    const session = signClient.session.get(sessionTopic);\n\n    if (!session) {\n      void disconnect();\n\n      throw new SessionClosedUnexpectedlyError({\n        sessionTopic,\n        walletDisplayName: displayName,\n      });\n    }\n\n    return session;\n  };\n\n  const displayName = getSession().peer.metadata.name;\n\n  const namespaceKey = 'eip155';\n\n  const walletProviderType = WalletProviderEnum.WalletConnect;\n\n  const key = formatWalletProviderKey({\n    chain: 'EVM',\n    displayName,\n    suffix: sessionTopic,\n    walletProviderType,\n  });\n\n  const getActiveNetworkId: WalletConnectEvmWalletProvider['getActiveNetworkId'] =\n    async () => {\n      // Assert the session is still valid\n      getSession();\n\n      return await getActiveNetworkIdFromLastKnownRegistry({\n        client,\n        walletProviderKey: key,\n      });\n    };\n\n  const switchActiveNetwork: WalletConnectEvmWalletProvider['switchActiveNetwork'] =\n    async ({ networkId }) => {\n      // Assert the session is still valid\n      getSession();\n\n      await switchActiveNetworkInLastKnownRegistry({\n        client,\n        networkId,\n        walletProviderKey: key,\n      });\n    };\n\n  const request: WalletConnectEvmWalletProvider['request'] = async (args) => {\n    const { networkId } = await getActiveNetworkId();\n\n    const session = getSession();\n\n    if (methodsThatRequireUserAction.includes(args.method)) {\n      emitEvent(\n        {\n          args: {\n            walletMetadata: session.peer.metadata,\n            walletProviderKey: key,\n          },\n          event: 'walletConnectUserActionRequested',\n        },\n        client\n      );\n    }\n\n    return signClient.request({\n      // signClient expects the chainId to be in CAIP-2 format \"eip155:<networkId>\"\n      chainId: `${namespaceKey}:${networkId}`,\n      request: args,\n      topic: sessionTopic,\n    });\n  };\n\n  const disconnect: NonNullable<\n    WalletConnectEvmWalletProvider['disconnect']\n  > = async () => {\n    await signClient.disconnect({\n      reason: SDK_ERRORS.USER_DISCONNECTED,\n      topic: sessionTopic,\n    });\n\n    const walletProviderRegistry = getWalletProviderRegistry(client);\n\n    walletProviderRegistry.unregister(key);\n  };\n\n  /**\n   * We actually clear up the entire WC session and its wallet provider\n   */\n  const disconnectWalletAccount: WalletConnectEvmWalletProvider['disconnectWalletAccount'] =\n    async () => disconnect();\n\n  const signMessage: WalletConnectEvmWalletProvider['signMessage'] = async ({\n    message,\n    walletAccount,\n  }) => {\n    const params = [message];\n\n    if (walletAccount) {\n      params.push(walletAccount.address);\n    }\n\n    const requestPromise = request<string>({\n      method: 'personal_sign',\n      params,\n    });\n\n    const signature = await requestPromise;\n\n    return { signature };\n  };\n\n  const getConnectedAddresses: WalletConnectEvmWalletProvider['getConnectedAddresses'] =\n    async () => {\n      const addresses = filterDuplicates(\n        getSession().namespaces[namespaceKey].accounts.map(\n          (account) => splitCaip10Token(account).address\n        )\n      ).map((address) => viemGetAddress(address));\n\n      return { addresses };\n    };\n\n  const formatWalletAddress: WalletConnectEvmWalletProvider['formatWalletAddress'] =\n    ({ address }) => viemGetAddress(address);\n\n  const { cleanupEventEmitter, getEventEmitter } =\n    createWalletConnectSessionEventEmitter({\n      formatAddress: viemGetAddress,\n      getSession,\n      namespaceKey,\n      sessionTopic,\n      signClient,\n    });\n\n  const terminate: WalletConnectEvmWalletProvider['terminate'] = async () =>\n    cleanupEventEmitter();\n\n  return {\n    chain: 'EVM',\n    confirmTransaction: (args) => evmConfirmTransaction(args, client),\n    disconnect,\n    disconnectWalletAccount,\n    get events() {\n      return getEventEmitter();\n    },\n    executeSwapTransaction: (args) => evmExecuteSwapTransaction(args, client),\n    formatWalletAddress,\n    getActiveNetworkId,\n    getConnectedAddresses,\n    getSession,\n    groupKey: formatWalletProviderGroupKey(displayName),\n    key,\n    metadata: {\n      displayName,\n      icon: getSession().peer.metadata.icons[0],\n    },\n    namespaceKey,\n    request,\n    signMessage,\n    switchActiveNetwork,\n    terminate,\n    transferAmount: (args) => evmTransferAmount(args, client),\n    walletProviderType,\n  };\n};\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n  WalletProviderPriority,\n  getWalletProviderRegistry,\n  waitForProjectSettings,\n} from '@dynamic-labs-sdk/client/core';\nimport { getSignClient } from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/** @not-instrumented */\nexport const recoverEvmWalletConnectWalletProviders = async (\n  client: DynamicClient\n) => {\n  await waitForProjectSettings(client);\n\n  const signClient = await getSignClient(client);\n\n  /**\n   * Recreate the wallet providers for all existing EVM sessions\n   */\n  const sessions = signClient.session.getAll();\n\n  const currentTime = Math.floor(Date.now() / 1000);\n\n  for (const session of sessions) {\n    if (!('eip155' in session.namespaces)) {\n      continue;\n    }\n\n    if (session.expiry <= currentTime) {\n      continue;\n    }\n\n    const walletProvider = await createWalletProviderFromEIP155Session(\n      {\n        sessionTopic: session.topic,\n      },\n      client\n    );\n\n    getWalletProviderRegistry(client).register({\n      priority: WalletProviderPriority.WALLET_SDK,\n      walletProvider,\n    });\n  }\n};\n","import { getDefaultClient, hasExtension } from '@dynamic-labs-sdk/client';\nimport { registerExtension } from '@dynamic-labs-sdk/client/core';\n\nimport { registerEvmNetworkProviderBuilder } from '../../registerEvmNetworkProviderBuilder';\nimport { recoverEvmWalletConnectWalletProviders } from '../recoverEvmWalletConnectWalletProviders';\n\nexport const WALLET_CONNECT_EVM_EXTENSION_KEY = 'walletConnectEvm';\n\n/** @not-instrumented */\nexport const addWalletConnectEvmExtension = async (\n  client = getDefaultClient()\n) => {\n  if (\n    hasExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client)\n  ) {\n    return;\n  }\n\n  registerExtension({ extensionKey: WALLET_CONNECT_EVM_EXTENSION_KEY }, client);\n  registerEvmNetworkProviderBuilder(client);\n\n  await recoverEvmWalletConnectWalletProviders(client);\n};\n","import { CHAINS_INFO_MAP } from '@dynamic-labs-sdk/client/core';\n\nexport const evmApiChainName = CHAINS_INFO_MAP.EVM.apiChainName;\n\n/**\n * List of methods that may be requested from EVM wallet applications.\n *\n * Source: https://github.com/WalletConnect/walletconnect-monorepo/blob/v2.0/providers/ethereum-provider/src/EthereumProvider.ts\n */\nexport const evmMethods = [\n  'personal_sign',\n  'eth_sendTransaction',\n  'eth_accounts',\n  'eth_requestAccounts',\n  'eth_call',\n  'eth_getBalance',\n  'eth_sendRawTransaction',\n  'eth_sign',\n  'eth_signTransaction',\n  'eth_signTypedData',\n  // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n  'eth_signTypedData_v3',\n  // eslint-disable-next-line custom-rules/ban-ethereum-eth-terms\n  'eth_signTypedData_v4',\n  'wallet_switchEthereumChain',\n  'wallet_addEthereumChain',\n  'wallet_getPermissions',\n  'wallet_requestPermissions',\n  'wallet_registerOnboarding',\n  'wallet_watchAsset',\n  'wallet_scanQRCode',\n  'wallet_sendCalls',\n  'wallet_getCapabilities',\n  'wallet_getCallsStatus',\n  'wallet_showCallsStatus',\n] as const;\n","import {\n  assertDefined,\n  createSignInMessageStatement,\n  getCore,\n  getDefaultClient,\n  getNonce,\n} from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n  getSignClient,\n  importWalletConnectAuthResponse,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { evmApiChainName, evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\n/**\n * Connects to a WalletConnect EVM wallet and verifies ownership through message signing.\n *\n * This function combines wallet connection and verification in a single step,\n * requiring the user to sign a message to prove wallet ownership before\n * the wallet account is added to their profile.\n *\n * If the wallet app does not support the WalletConnect authenticate method,\n * this prompts for connection and then verification as 2 separate steps.\n *\n * @see WalletConnect's docs on [session authentication](https://docs.reown.com/advanced/api/sign/dapp-usage#session-authenticate-with-recaps)\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to the connected and verified wallet account.\n  * @not-instrumented\n */\nexport const connectAndVerifyWithWalletConnectEvm = async (\n  client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n  const signClient = await getSignClient(client);\n  const core = getCore(client);\n\n  const universalLink = core.metadata?.universalLink;\n\n  assertDefined(universalLink, 'Universal link is not set');\n\n  const url = new URL(universalLink);\n\n  assertDefined(client.projectSettings, 'Project settings unavailable');\n\n  /**\n   * Customer enabled networks, with mainnet first if available.\n   */\n  const evmNetworks = client.projectSettings.networks\n    ?.find((network) => network.chainName === evmApiChainName)\n    ?.networks?.sort((a, b) => {\n      if (a.networkId === '1') return -1;\n      if (b.networkId === '1') return 1;\n\n      return 0;\n    });\n\n  assertDefined(evmNetworks, 'EVM networks not found');\n\n  const caip2Networks = evmNetworks.map(\n    (network) => `eip155:${network.networkId}`\n  );\n\n  /**\n   * WalletConnect formats its own message for SIWE, so we need to provide the fields.\n   * We later reconstruct what that message was so we can verify the signature in backend.\n   */\n  const nonce = await getNonce(client);\n\n  /**\n   * A WalletConnect connection request generates a URI and a promise.\n   *\n   * The URI must be handed to an external wallet application that will use it\n   * to establish a connection via a WalletConnect relay server. Typically, this\n   * is done by scanning a QR code or deep linking to the wallet application.\n   *\n   * The promise will resolve when the connection is established.\n   */\n  const { uri, response } = await signClient.authenticate({\n    chainId: evmNetworks[0].networkId,\n    chains: caip2Networks,\n    domain: url.host,\n    iat: new Date().toISOString(),\n    methods: evmMethods as unknown as string[],\n    nonce,\n    requestId: core.environmentId,\n    statement: createSignInMessageStatement(client),\n    uri: url.toString(),\n  });\n\n  assertDefined(\n    uri,\n    'Failed to establish WalletConnect session: no URI returned'\n  );\n\n  /**\n   * Once the approval promise resolves, the WalletConnect session is established\n   * between the wallet application and the dapp (this app).\n   */\n  const walletAccountsPromise = response().then((authResponse) =>\n    importWalletConnectAuthResponse(\n      {\n        authResponse,\n        chain: 'EVM',\n        walletProviderBuilder: createWalletProviderFromEIP155Session,\n      },\n      client\n    )\n  );\n\n  return { approval: () => walletAccountsPromise, uri };\n};\n","import { getDefaultClient } from '@dynamic-labs-sdk/client';\nimport { assertDefined } from '@dynamic-labs-sdk/client/core';\nimport type { WalletConnectConnectionResult } from '@dynamic-labs-sdk/wallet-connect';\nimport {\n  getSignClient,\n  importWalletConnectSession,\n} from '@dynamic-labs-sdk/wallet-connect/core';\n\nimport { evmApiChainName, evmMethods } from '../consts';\nimport { createWalletProviderFromEIP155Session } from '../createWalletProviderFromEIP155Session';\n\ntype ConnectWithWalletConnectEvmParams = {\n  /**\n   * Whether this session's wallet accounts should be added to the dynamic's wallet accounts.\n   */\n  addToDynamicWalletAccounts?: boolean;\n};\n\n/** @not-instrumented */\nexport const connectWithWalletConnectEvm = async (\n  { addToDynamicWalletAccounts = true }: ConnectWithWalletConnectEvmParams = {},\n  client = getDefaultClient()\n): Promise<WalletConnectConnectionResult> => {\n  const signClient = await getSignClient(client);\n\n  assertDefined(client.projectSettings, 'Project settings unavailable');\n\n  const evmNetworks = client.projectSettings.networks?.find(\n    (network) => network.chainName === evmApiChainName\n  )?.networks;\n\n  assertDefined(evmNetworks, 'EVM networks not found');\n\n  const walletConnectChains = evmNetworks.map(\n    (network) => `eip155:${network.networkId}`\n  );\n\n  /**\n   * A WalletConnect connection request generates a URI and a promise.\n   *\n   * The URI must be handed to an external wallet application that will use it\n   * to establish a connection via a WalletConnect relay server. Typically, this\n   * is done by scanning a QR code or deep linking to the wallet application.\n   *\n   * The promise will resolve when the connection is established.\n   */\n  const { approval, uri } = await signClient.connect({\n    optionalNamespaces: {\n      eip155: {\n        chains: walletConnectChains,\n        events: ['accountsChanged', 'chainChanged', 'disconnected'],\n        methods: evmMethods as unknown as string[],\n      },\n    },\n  });\n\n  assertDefined(\n    uri,\n    'Failed to establish WalletConnect session: no URI returned'\n  );\n\n  /**\n   * Once the approval promise resolves, the WalletConnect session is established\n   * between the wallet application and the dapp (this app).\n   */\n  const walletAccountsPromise = approval().then(async (session) => {\n    assertDefined(\n      session.namespaces.eip155,\n      `WalletConnect session did not establish an EIP155 connection. Found instead: ${Object.keys(\n        session.namespaces\n      ).join(', ')}`\n    );\n\n    return importWalletConnectSession(\n      {\n        addToDynamicWalletAccounts,\n        sessionTopic: session.topic,\n        walletProviderBuilder: createWalletProviderFromEIP155Session,\n      },\n      client\n    );\n  });\n\n  return { approval: () => walletAccountsPromise, uri };\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n  name as packageName,\n  version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\nexport { addWalletConnectEvmExtension } from '../walletConnect/addWalletConnectEvmExtension';\nexport { connectAndVerifyWithWalletConnectEvm } from '../walletConnect/connectAndVerifyWithWalletConnectEvm';\nexport { connectWithWalletConnectEvm } from '../walletConnect/connectWithWalletConnectEvm';\nexport type { WalletConnectEvmWalletProvider } from '../walletConnect/walletConnectEvmWalletProvider.types';\n"],"mappings":";;;;;;;;;;;;;;;;AAkCA,MAAMA,+BAAyC;CAC7C;CACA;CAEA;CACD;;AAGD,MAAa,wCAAwC,OACnD,EAAE,gBACF,WAC4C;CAC5C,MAAM,aAAa,+DAAoB,OAAO;CAE9C,MAAM,mBAAmB;EACvB,MAAM,UAAU,WAAW,QAAQ,IAAI,aAAa;AAEpD,MAAI,CAAC,SAAS;AACZ,GAAK,YAAY;AAEjB,SAAM,IAAIC,gEAA+B;IACvC;IACA,mBAAmB;IACpB,CAAC;;AAGJ,SAAO;;CAGT,MAAM,cAAc,YAAY,CAAC,KAAK,SAAS;CAE/C,MAAM,eAAe;CAErB,MAAM,qBAAqBC,8CAAmB;CAE9C,MAAM,iEAA8B;EAClC,OAAO;EACP;EACA,QAAQ;EACR;EACD,CAAC;CAEF,MAAMC,qBACJ,YAAY;AAEV,cAAY;AAEZ,SAAO,iFAA8C;GACnD;GACA,mBAAmB;GACpB,CAAC;;CAGN,MAAMC,sBACJ,OAAO,EAAE,gBAAgB;AAEvB,cAAY;AAEZ,kFAA6C;GAC3C;GACA;GACA,mBAAmB;GACpB,CAAC;;CAGN,MAAMC,UAAqD,OAAO,SAAS;EACzE,MAAM,EAAE,cAAc,MAAM,oBAAoB;EAEhD,MAAM,UAAU,YAAY;AAE5B,MAAI,6BAA6B,SAAS,KAAK,OAAO,CACpD,8CACE;GACE,MAAM;IACJ,gBAAgB,QAAQ,KAAK;IAC7B,mBAAmB;IACpB;GACD,OAAO;GACR,EACD,OACD;AAGH,SAAO,WAAW,QAAQ;GAExB,SAAS,GAAG,aAAa,GAAG;GAC5B,SAAS;GACT,OAAO;GACR,CAAC;;CAGJ,MAAMC,aAEF,YAAY;AACd,QAAM,WAAW,WAAW;GAC1B,QAAQC,gCAAW;GACnB,OAAO;GACR,CAAC;AAIF,+DAFyD,OAAO,CAEzC,WAAW,IAAI;;;;;CAMxC,MAAMC,0BACJ,YAAY,YAAY;CAE1B,MAAMC,cAA6D,OAAO,EACxE,SACA,oBACI;EACJ,MAAM,SAAS,CAAC,QAAQ;AAExB,MAAI,cACF,QAAO,KAAK,cAAc,QAAQ;AAUpC,SAAO,EAAE,WAFS,MALK,QAAgB;GACrC,QAAQ;GACR;GACD,CAAC,EAIkB;;CAGtB,MAAMC,wBACJ,YAAY;AAOV,SAAO,EAAE,+DALP,YAAY,CAAC,WAAW,cAAc,SAAS,KAC5C,wEAA6B,QAAQ,CAAC,QACxC,CACF,CAAC,KAAK,iCAA2B,QAAQ,CAAC,EAEvB;;CAGxB,MAAMC,uBACH,EAAE,mCAA6B,QAAQ;CAE1C,MAAM,EAAE,qBAAqB,sGACY;EACrC,eAAeC;EACf;EACA;EACA;EACA;EACD,CAAC;CAEJ,MAAMC,YAAyD,YAC7D,qBAAqB;AAEvB,QAAO;EACL,OAAO;EACP,qBAAqB,SAASC,gDAAsB,MAAM,OAAO;EACjE;EACA;EACA,IAAI,SAAS;AACX,UAAO,iBAAiB;;EAE1B,yBAAyB,SAASC,oDAA0B,MAAM,OAAO;EACzE;EACA;EACA;EACA;EACA,0EAAuC,YAAY;EACnD;EACA,UAAU;GACR;GACA,MAAM,YAAY,CAAC,KAAK,SAAS,MAAM;GACxC;EACD;EACA;EACA;EACA;EACA;EACA,iBAAiB,SAASC,4CAAkB,MAAM,OAAO;EACzD;EACD;;;;;;AC7MH,MAAa,yCAAyC,OACpD,WACG;AACH,iEAA6B,OAAO;;;;CAOpC,MAAM,YALa,+DAAoB,OAAO,EAKlB,QAAQ,QAAQ;CAE5C,MAAM,cAAc,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;AAEjD,MAAK,MAAM,WAAW,UAAU;AAC9B,MAAI,EAAE,YAAY,QAAQ,YACxB;AAGF,MAAI,QAAQ,UAAU,YACpB;EAGF,MAAM,iBAAiB,MAAM,sCAC3B,EACE,cAAc,QAAQ,OACvB,EACD,OACD;AAED,+DAA0B,OAAO,CAAC,SAAS;GACzC,UAAUC,qDAAuB;GACjC;GACD,CAAC;;;;;;ACtCN,MAAa,mCAAmC;;AAGhD,MAAa,+BAA+B,OAC1C,yDAA2B,KACxB;AACH,gDACe,EAAE,cAAc,kCAAkC,EAAE,OAAO,CAExE;AAGF,sDAAkB,EAAE,cAAc,kCAAkC,EAAE,OAAO;AAC7E,6DAAkC,OAAO;AAEzC,OAAM,uCAAuC,OAAO;;;;;ACnBtD,MAAa,kBAAkBC,8CAAgB,IAAI;;;;;;AAOnD,MAAa,aAAa;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CAEA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;;;;;;;;;;;;ACJD,MAAa,uCAAuC,OAClD,8DAA2B,KACgB;CAC3C,MAAM,aAAa,+DAAoB,OAAO;CAC9C,MAAM,kDAAe,OAAO;CAE5B,MAAM,gBAAgB,KAAK,UAAU;AAErC,kDAAc,eAAe,4BAA4B;CAEzD,MAAM,MAAM,IAAI,IAAI,cAAc;AAElC,kDAAc,OAAO,iBAAiB,+BAA+B;;;;CAKrE,MAAM,cAAc,OAAO,gBAAgB,UACvC,MAAM,YAAY,QAAQ,cAAc,gBAAgB,EACxD,UAAU,MAAM,GAAG,MAAM;AACzB,MAAI,EAAE,cAAc,IAAK,QAAO;AAChC,MAAI,EAAE,cAAc,IAAK,QAAO;AAEhC,SAAO;GACP;AAEJ,kDAAc,aAAa,yBAAyB;CAEpD,MAAM,gBAAgB,YAAY,KAC/B,YAAY,UAAU,QAAQ,YAChC;;;;;CAMD,MAAM,QAAQ,kDAAe,OAAO;;;;;;;;;;CAWpC,MAAM,EAAE,KAAK,aAAa,MAAM,WAAW,aAAa;EACtD,SAAS,YAAY,GAAG;EACxB,QAAQ;EACR,QAAQ,IAAI;EACZ,sBAAK,IAAI,MAAM,EAAC,aAAa;EAC7B,SAAS;EACT;EACA,WAAW,KAAK;EAChB,2EAAwC,OAAO;EAC/C,KAAK,IAAI,UAAU;EACpB,CAAC;AAEF,kDACE,KACA,6DACD;;;;;CAMD,MAAM,wBAAwB,UAAU,CAAC,MAAM,4FAE3C;EACE;EACA,OAAO;EACP,uBAAuB;EACxB,EACD,OACD,CACF;AAED,QAAO;EAAE,gBAAgB;EAAuB;EAAK;;;;;;AC3FvD,MAAa,8BAA8B,OACzC,EAAE,6BAA6B,SAA4C,EAAE,EAC7E,yDAA2B,KACgB;CAC3C,MAAM,aAAa,+DAAoB,OAAO;AAE9C,kDAAc,OAAO,iBAAiB,+BAA+B;CAErE,MAAM,cAAc,OAAO,gBAAgB,UAAU,MAClD,YAAY,QAAQ,cAAc,gBACpC,EAAE;AAEH,kDAAc,aAAa,yBAAyB;CAEpD,MAAM,sBAAsB,YAAY,KACrC,YAAY,UAAU,QAAQ,YAChC;;;;;;;;;;CAWD,MAAM,EAAE,UAAU,QAAQ,MAAM,WAAW,QAAQ,EACjD,oBAAoB,EAClB,QAAQ;EACN,QAAQ;EACR,QAAQ;GAAC;GAAmB;GAAgB;GAAe;EAC3D,SAAS;EACV,EACF,EACF,CAAC;AAEF,kDACE,KACA,6DACD;;;;;CAMD,MAAM,wBAAwB,UAAU,CAAC,KAAK,OAAO,YAAY;AAC/D,mDACE,QAAQ,WAAW,QACnB,gFAAgF,OAAO,KACrF,QAAQ,WACT,CAAC,KAAK,KAAK,GACb;AAED,+EACE;GACE;GACA,cAAc,QAAQ;GACtB,uBAAuB;GACxB,EACD,OACD;GACD;AAEF,QAAO;EAAE,gBAAgB;EAAuB;EAAK;;;;;mEC7ElCC,iDAAaC,mDAAe"}