@daimo/pay 0.3.5 → 0.3.6

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 (23) hide show
  1. package/build/index.es.js +49 -38
  2. package/build/index.es.js.map +1 -1
  3. package/build/packages/paykit/packages/connectkit/src/assets/chains.d.ts +14 -14
  4. package/build/packages/paykit/packages/connectkit/src/components/Common/Alert/types.d.ts +0 -1
  5. package/build/packages/paykit/packages/connectkit/src/components/Common/ChainSelectList/index.d.ts +1 -1
  6. package/build/packages/paykit/packages/connectkit/src/components/Common/CopyToClipboard/CopyToClipboardIcon.d.ts +2 -2
  7. package/build/packages/paykit/packages/connectkit/src/components/Common/OptionsList/index.d.ts +2 -3
  8. package/build/packages/paykit/packages/connectkit/src/components/Common/OrderHeader/index.d.ts +1 -1
  9. package/build/packages/paykit/packages/connectkit/src/components/Common/Portal/index.d.ts +0 -1
  10. package/build/packages/paykit/packages/connectkit/src/components/Common/ScrollArea/index.d.ts +3 -3
  11. package/build/packages/paykit/packages/connectkit/src/components/Common/Tooltip/types.d.ts +0 -1
  12. package/build/packages/paykit/packages/connectkit/src/components/ConnectModal/index.d.ts +0 -1
  13. package/build/packages/paykit/packages/connectkit/src/components/Spinners/CircleSpinner/index.d.ts +4 -4
  14. package/build/packages/paykit/packages/connectkit/src/components/Spinners/SquircleSpinner/index.d.ts +1 -1
  15. package/build/packages/paykit/packages/connectkit/src/components/contexts/web3/index.d.ts +1 -1
  16. package/build/packages/paykit/packages/connectkit/src/hooks/useConnect.d.ts +11 -11
  17. package/build/packages/paykit/packages/connectkit/src/hooks/useDaimoPayStatus.d.ts +1 -7
  18. package/build/packages/paykit/packages/connectkit/src/hooks/useFitText.d.ts +0 -1
  19. package/build/packages/paykit/packages/connectkit/src/hooks/useLockBodyScroll.d.ts +0 -1
  20. package/build/packages/paykit/packages/connectkit/src/utils/getPaymentInfo.d.ts +1 -2
  21. package/build/packages/paykit/packages/connectkit/src/utils/index.d.ts +6 -7
  22. package/build/packages/paykit/packages/connectkit/src/wallets/walletConfigs.d.ts +0 -1
  23. package/package.json +3 -3
package/build/index.es.js CHANGED
@@ -5,7 +5,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
5
  import { detect } from 'detect-browser';
6
6
  import React, { useEffect, useState, useCallback, useRef, useLayoutEffect, useMemo, createContext, createElement } from 'react';
7
7
  import { Buffer } from 'buffer';
8
- import { readDaimoPayOrderID, assert, assertNotNull, DaimoPayOrderMode, DaimoPayOrderStatusDest, capitalize, ExternalPaymentOptions, getAddressContraction, getDisplayPrice, writeDaimoPayOrderID, DaimoPayOrderStatusSource } from '@daimo/common';
8
+ import { readDaimoPayOrderID, assert, assertNotNull, DaimoPayOrderMode, DaimoPayOrderStatusDest, capitalize, ExternalPaymentOptions, getAddressContraction, getDisplayPrice, writeDaimoPayOrderID, DaimoPayIntentStatus, DaimoPayOrderStatusSource } from '@daimo/common';
9
9
  import styled$1, { css, keyframes, ThemeProvider } from 'styled-components';
10
10
  import { erc20Abi, getChainName, ethereum, arbitrum as arbitrum$1, base as base$2, optimism as optimism$1, polygon as polygon$1, ethereumSepolia, baseSepolia as baseSepolia$1, getChainExplorerTxUrl } from '@daimo/contract';
11
11
  import { zeroAddress, parseUnits } from 'viem';
@@ -900,7 +900,7 @@ const trpc = createTRPCClient({
900
900
  ],
901
901
  });
902
902
 
903
- function getPaymentInfo() {
903
+ function getPaymentInfo(log) {
904
904
  // Wallet state.
905
905
  const { address: senderAddr } = useAccount();
906
906
  const { writeContractAsync } = useWriteContract();
@@ -918,7 +918,7 @@ function getPaymentInfo() {
918
918
  platform: detectPlatform(window.navigator.userAgent),
919
919
  refundAddress: senderAddr,
920
920
  });
921
- console.log(`[CHECKOUT] Hydrated order: ${JSON.stringify(hydratedOrder)}, checking out with ${tokenAmount.token.token}`);
921
+ log(`[CHECKOUT] Hydrated order: ${JSON.stringify(hydratedOrder)}, checking out with ${tokenAmount.token.token}`);
922
922
  const txHash = await (async () => {
923
923
  try {
924
924
  if (tokenAmount.token.token === zeroAddress) {
@@ -979,7 +979,7 @@ function getPaymentInfo() {
979
979
  setDaimoPayOrder(order);
980
980
  }, [daimoPayOrder?.id]);
981
981
  const setChosenUsd = (usdAmount) => {
982
- console.log(`[CHECKOUT] Setting chosen USD amount to ${usdAmount}`);
982
+ log(`[CHECKOUT] Setting chosen USD amount to ${usdAmount}`);
983
983
  assert(!!daimoPayOrder);
984
984
  const token = daimoPayOrder.destFinalCallTokenAmount.token;
985
985
  const tokenAmount = parseUnits((usdAmount / token.usd).toString(), token.decimals);
@@ -1005,7 +1005,7 @@ function getPaymentInfo() {
1005
1005
  console.error(`[CHECKOUT] No order found for ${payId}`);
1006
1006
  return;
1007
1007
  }
1008
- console.log(`[CHECKOUT] Parsed order: ${JSON.stringify(order)}`);
1008
+ log(`[CHECKOUT] Parsed order: ${JSON.stringify(order)}`);
1009
1009
  setDaimoPayOrder(order);
1010
1010
  }, [daimoPayOrder]);
1011
1011
  return {
@@ -2164,7 +2164,7 @@ const ResetContainer = styled(motion.div) `
2164
2164
  `;
2165
2165
 
2166
2166
  var name = "@daimo/pay";
2167
- var version = "0.3.5";
2167
+ var version = "0.3.6";
2168
2168
  var author = "Daimo";
2169
2169
  var homepage = "https://pay.daimo.com";
2170
2170
  var license = "BSD-2-Clause license";
@@ -2203,8 +2203,8 @@ var keywords = [
2203
2203
  "crypto"
2204
2204
  ];
2205
2205
  var dependencies = {
2206
- "@daimo/common": "0.3.1",
2207
- "@daimo/contract": "0.3.1",
2206
+ "@daimo/common": "0.3.6",
2207
+ "@daimo/contract": "0.3.6",
2208
2208
  "@trpc/client": "^11.0.0-next-beta.318",
2209
2209
  "@trpc/server": "^11.0.0-next-beta.318",
2210
2210
  buffer: "^6.0.3",
@@ -6609,6 +6609,7 @@ const ScrollAreaContainer = styled.div `
6609
6609
 
6610
6610
  const ArrowDown = () => (jsx("svg", { width: "11", height: "12", viewBox: "0 0 11 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { d: "M5.49438 1L5.49438 11M5.49438 11L9.5 7M5.49438 11L1.5 7", stroke: "currentColor", strokeWidth: "1.75", strokeLinecap: "round", strokeLinejoin: "round" }) }));
6611
6611
  const ScrollArea = ({ children, height, backgroundColor, mobileDirection, }) => {
6612
+ const { log } = useContext();
6612
6613
  const ref = useRef(null);
6613
6614
  const moreRef = useRef(null);
6614
6615
  const isMobile = useIsMobile();
@@ -6622,7 +6623,7 @@ const ScrollArea = ({ children, height, backgroundColor, mobileDirection, }) =>
6622
6623
  moreRef.current.classList.remove("hide");
6623
6624
  }
6624
6625
  }
6625
- console.log(`[SCROLL AREA]: ${el.scrollHeight}, ${el.clientHeight}`);
6626
+ log(`[SCROLL AREA]: ${el.scrollHeight}, ${el.clientHeight}`);
6626
6627
  const handleScroll = (e) => {
6627
6628
  const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth, } = e.target;
6628
6629
  if (moreRef.current) {
@@ -6959,6 +6960,7 @@ const InputField = styled(motion.input) `
6959
6960
  line-height: inherit;
6960
6961
  font-size: inherit;
6961
6962
  font-weight: inherit;
6963
+ color: inherit;
6962
6964
  border: none;
6963
6965
  padding: 0;
6964
6966
  &:focus {
@@ -10038,8 +10040,10 @@ const Confirmation = () => {
10038
10040
  }, [refreshOrder]);
10039
10041
  const { done, txURL, currency } = (() => {
10040
10042
  if (daimoPayOrder && daimoPayOrder.mode === DaimoPayOrderMode.HYDRATED) {
10041
- if (daimoPayOrder.destStatus === DaimoPayOrderStatusDest.CLAIMED ||
10042
- daimoPayOrder.destStatus === DaimoPayOrderStatusDest.FAST_FINISHED) {
10043
+ if (daimoPayOrder.destStatus ===
10044
+ DaimoPayOrderStatusDest.FAST_FINISH_SUBMITTED || // Frontends are optimistic, assume submits will be successful
10045
+ daimoPayOrder.destStatus === DaimoPayOrderStatusDest.FAST_FINISHED ||
10046
+ daimoPayOrder.destStatus === DaimoPayOrderStatusDest.CLAIM_SUCCESSFUL) {
10043
10047
  const txHash = daimoPayOrder.destFastFinishTxHash ?? daimoPayOrder.destClaimTxHash;
10044
10048
  const chainId = daimoPayOrder.destFinalCallTokenAmount.token.chainId;
10045
10049
  const currency = `${capitalize(getChainName(chainId))} ${daimoPayOrder.destFinalCallTokenAmount.token.symbol}`;
@@ -10131,7 +10135,7 @@ var PayState;
10131
10135
  PayState["RequestSuccessful"] = "Payment Successful";
10132
10136
  })(PayState || (PayState = {}));
10133
10137
  const PayWithToken = () => {
10134
- const { triggerResize, paymentInfo, setRoute } = useContext();
10138
+ const { triggerResize, paymentInfo, setRoute, log } = useContext();
10135
10139
  const { selectedTokenOption, payWithToken } = paymentInfo;
10136
10140
  const [payState, setPayState] = useState(PayState.RequestingPayment);
10137
10141
  const walletChainId = useChainId();
@@ -10160,7 +10164,7 @@ const PayWithToken = () => {
10160
10164
  setPayState(PayState.SwitchingChain);
10161
10165
  const switchChain = await trySwitchingChain(option);
10162
10166
  if (!switchChain) {
10163
- console.log("Switching chain failed");
10167
+ console.error("Switching chain failed");
10164
10168
  setPayState(PayState.RequestCancelled);
10165
10169
  return;
10166
10170
  }
@@ -10176,7 +10180,7 @@ const PayWithToken = () => {
10176
10180
  if (e?.name === "ConnectorChainMismatchError") {
10177
10181
  // Workaround for Rainbow wallet bug -- user is able to switch chain without
10178
10182
  // the wallet updating the chain ID for wagmi.
10179
- console.log("Chain mismatch detected, attempting to switch and retry");
10183
+ log("Chain mismatch detected, attempting to switch and retry");
10180
10184
  const switchSuccessful = await trySwitchingChain(option, true);
10181
10185
  if (switchSuccessful) {
10182
10186
  try {
@@ -10434,10 +10438,10 @@ const OptionsContainer = styled.div `
10434
10438
  `;
10435
10439
 
10436
10440
  const OptionsList = ({ options, isLoading, requiredSkeletons, }) => {
10437
- const { triggerResize } = useContext();
10441
+ const { triggerResize, log } = useContext();
10438
10442
  const optionsLength = options.length;
10439
10443
  useEffect(() => {
10440
- console.log(`[OPTIONS RESIZE]: ${optionsLength}, triggering resize`);
10444
+ log(`[OPTIONS RESIZE]: ${optionsLength}, triggering resize`);
10441
10445
  if (optionsLength > 0) {
10442
10446
  triggerResize();
10443
10447
  }
@@ -10649,6 +10653,7 @@ const SelectToken = () => {
10649
10653
  useEffect(() => {
10650
10654
  if (!payerAddress || !daimoPayOrder)
10651
10655
  return;
10656
+ setPaymentOptions(null);
10652
10657
  setIsLoadingOptions(true);
10653
10658
  const destChainId = daimoPayOrder.destFinalCallTokenAmount.token.chainId;
10654
10659
  trpc.getWalletPaymentOptions
@@ -10666,7 +10671,7 @@ const SelectToken = () => {
10666
10671
  justifyContent: "center",
10667
10672
  paddingTop: 16,
10668
10673
  paddingBottom: 16,
10669
- }, children: [jsx(ModalH1, { children: "Insufficient balance. Please select an alternative payment method." }), jsx(Button, { onClick: () => setRoute(ROUTES.SELECT_METHOD), children: "Select another method" })] })), jsx(OptionsList, { requiredSkeletons: 4, isLoading: isLoadingOptions, options: paymentOptions?.map((option) => {
10674
+ }, children: [jsx(ModalH1, { children: "Insufficient balance. Please select an alternative payment method." }), jsx(Button, { onClick: () => setRoute(ROUTES.SELECT_METHOD), children: "Select Another Method" })] })), jsx(OptionsList, { requiredSkeletons: 4, isLoading: isLoadingOptions, options: paymentOptions?.map((option) => {
10670
10675
  const capitalizedChainName = capitalize(getChainName(option.required.token.chainId));
10671
10676
  const title = `${getDisplayPrice(option.required)} ${option.required.token.symbol} on ${capitalizedChainName}`;
10672
10677
  const subtitle = `Balance: ${getDisplayPrice(option.balance)} ${option.balance.token.symbol}`;
@@ -10688,6 +10693,7 @@ const SelectToken = () => {
10688
10693
  const WaitingOther = () => {
10689
10694
  const { triggerResize, paymentInfo, setRoute } = useContext();
10690
10695
  const { selectedExternalOption, payWithExternal, paymentWaitingMessage, daimoPayOrder, } = paymentInfo;
10696
+ const [externalURL, setExternalURL] = useState(null);
10691
10697
  useEffect(() => {
10692
10698
  const checkForSourcePayment = async () => {
10693
10699
  if (!daimoPayOrder)
@@ -10702,6 +10708,20 @@ const WaitingOther = () => {
10702
10708
  const interval = setInterval(checkForSourcePayment, 1000);
10703
10709
  return () => clearInterval(interval);
10704
10710
  }, [daimoPayOrder?.id]);
10711
+ useEffect(() => {
10712
+ if (!selectedExternalOption)
10713
+ return;
10714
+ payWithExternal(selectedExternalOption.id).then((url) => {
10715
+ setExternalURL(url);
10716
+ setTimeout(() => {
10717
+ window.open(url, "_blank");
10718
+ });
10719
+ });
10720
+ }, [selectedExternalOption]);
10721
+ const waitingMessageLength = paymentWaitingMessage?.length;
10722
+ useEffect(() => {
10723
+ triggerResize();
10724
+ }, [waitingMessageLength, externalURL]);
10705
10725
  if (!selectedExternalOption) {
10706
10726
  return jsx(PageContent, {});
10707
10727
  }
@@ -10713,23 +10733,10 @@ const WaitingOther = () => {
10713
10733
  return (jsx(SquircleSpinner, { logo: jsx("img", { src: selectedExternalOption.logoURI }), connecting: true }));
10714
10734
  }
10715
10735
  })();
10716
- useEffect(() => {
10717
- if (!selectedExternalOption)
10718
- return;
10719
- // Note: Safari doesn't support window.open in an async function.
10720
- // We need to trigger this in the main thread:
10721
- // https://stackoverflow.com/a/39387533
10722
- const windowOpen = window.open("about:blank", "_blank");
10723
- payWithExternal(selectedExternalOption.id).then((url) => {
10724
- if (windowOpen)
10725
- windowOpen.location.href = url;
10726
- });
10727
- }, [selectedExternalOption]);
10728
- const waitingMessageLength = paymentWaitingMessage?.length;
10729
- useEffect(() => {
10730
- triggerResize();
10731
- }, [waitingMessageLength]);
10732
- return (jsxs(PageContent, { children: [jsx(LoadingContainer, { children: jsx(AnimationContainer, { "$circle": selectedExternalOption.logoShape === "circle", children: jsx(AnimatePresence, { children: optionSpinner }) }) }), jsxs(ModalContent, { style: { marginLeft: 24, marginRight: 24 }, children: [jsx(ModalH1, { children: "Waiting for Payment" }), paymentWaitingMessage && (jsx(ModalBody, { style: { marginTop: 12 }, children: paymentWaitingMessage }))] })] }));
10736
+ return (jsxs(PageContent, { children: [jsx(LoadingContainer, { children: jsx(AnimationContainer, { "$circle": selectedExternalOption.logoShape === "circle", children: jsx(AnimatePresence, { children: optionSpinner }) }) }), jsxs(ModalContent, { style: { marginLeft: 24, marginRight: 24 }, children: [jsx(ModalH1, { children: "Waiting for Payment" }), paymentWaitingMessage && (jsx(ModalBody, { style: { marginTop: 12, marginBottom: 12 }, children: paymentWaitingMessage })), jsx(Button, { icon: jsx(ExternalLinkIcon, {}), onClick: () => {
10737
+ if (externalURL)
10738
+ window.open(externalURL, "_blank");
10739
+ }, children: "Open in New Tab" })] })] }));
10733
10740
  };
10734
10741
  const LoadingContainer = styled(motion.div) `
10735
10742
  display: flex;
@@ -10820,7 +10827,9 @@ const ConnectModal = ({ mode = "auto", theme = "auto", customTheme = customTheme
10820
10827
  context.setOpen(false);
10821
10828
  }
10822
10829
  useEffect(() => {
10823
- if (context.route === ROUTES.CONNECT || context.route === ROUTES.CONNECTORS || context.route === ROUTES.MOBILECONNECTORS) {
10830
+ if (context.route === ROUTES.CONNECT ||
10831
+ context.route === ROUTES.CONNECTORS ||
10832
+ context.route === ROUTES.MOBILECONNECTORS) {
10824
10833
  if (isConnected) {
10825
10834
  context.setRoute(ROUTES.SELECT_TOKEN);
10826
10835
  }
@@ -10963,7 +10972,7 @@ const DaimoPayProvider = ({ children, theme = "auto", mode = "auto", customTheme
10963
10972
  }
10964
10973
  }, [injectedConnector]);
10965
10974
  const log = debugMode ? console.log : () => { };
10966
- const paymentInfo = getPaymentInfo();
10975
+ const paymentInfo = getPaymentInfo(log);
10967
10976
  const loadPayment = async (payId) => {
10968
10977
  await paymentInfo.setPayId(payId);
10969
10978
  const daimoPayOrder = paymentInfo.daimoPayOrder;
@@ -11375,9 +11384,11 @@ function useDaimoPayStatus() {
11375
11384
  const order = paymentInfo.daimoPayOrder;
11376
11385
  const paymentId = writeDaimoPayOrderID(order.id);
11377
11386
  if (order.mode === DaimoPayOrderMode.HYDRATED) {
11378
- if (order.destStatus === DaimoPayOrderStatusDest.FAST_FINISHED || order.destStatus === DaimoPayOrderStatusDest.CLAIMED) {
11387
+ if (order.intentStatus != DaimoPayIntentStatus.PENDING) {
11379
11388
  return {
11380
- status: "payment_completed",
11389
+ status: order.intentStatus === DaimoPayIntentStatus.SUCCESSFUL
11390
+ ? "payment_completed"
11391
+ : "payment_bounced",
11381
11392
  paymentId,
11382
11393
  };
11383
11394
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -7,7 +7,7 @@ export declare const Optimism: ({ testnet, ...props }: Logo) => import("react/js
7
7
  export declare const Arbitrum: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
8
8
  export declare const Telos: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
9
9
  export declare const Base: ({ testnet, ...props }: {
10
- testnet?: boolean | undefined;
10
+ testnet?: boolean;
11
11
  }) => import("react/jsx-runtime").JSX.Element;
12
12
  export declare const chainToLogo: {
13
13
  [x: number]: import("react/jsx-runtime").JSX.Element;
@@ -15,30 +15,30 @@ export declare const chainToLogo: {
15
15
  declare const _default: {
16
16
  UnknownChain: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
17
17
  Base: ({ testnet, ...props }: {
18
- testnet?: boolean | undefined;
18
+ testnet?: boolean;
19
19
  }) => import("react/jsx-runtime").JSX.Element;
20
20
  Ethereum: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
21
21
  Polygon: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
22
22
  Optimism: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
23
23
  Arbitrum: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
24
24
  Aurora: ({ testnet, ...props }: {
25
- testnet?: boolean | undefined;
25
+ testnet?: boolean;
26
26
  }) => import("react/jsx-runtime").JSX.Element;
27
27
  Avalanche: ({ testnet, ...props }: {
28
- testnet?: boolean | undefined;
28
+ testnet?: boolean;
29
29
  }) => import("react/jsx-runtime").JSX.Element;
30
30
  Celo: ({ testnet, ...props }: {
31
- testnet?: boolean | undefined;
31
+ testnet?: boolean;
32
32
  }) => import("react/jsx-runtime").JSX.Element;
33
33
  Telos: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
34
34
  Gnosis: ({ testnet, ...props }: {
35
- testnet?: boolean | undefined;
35
+ testnet?: boolean;
36
36
  }) => import("react/jsx-runtime").JSX.Element;
37
37
  Evmos: ({ testnet, ...props }: {
38
- testnet?: boolean | undefined;
38
+ testnet?: boolean;
39
39
  }) => import("react/jsx-runtime").JSX.Element;
40
40
  BinanceSmartChain: ({ testnet, ...props }: {
41
- testnet?: boolean | undefined;
41
+ testnet?: boolean;
42
42
  }) => import("react/jsx-runtime").JSX.Element;
43
43
  Foundry: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
44
44
  Sepolia: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
@@ -46,22 +46,22 @@ declare const _default: {
46
46
  zkSync: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
47
47
  Flare: ({ testnet, ...props }: Logo) => import("react/jsx-runtime").JSX.Element;
48
48
  Canto: ({ testnet, ...props }: {
49
- testnet?: boolean | undefined;
49
+ testnet?: boolean;
50
50
  }) => import("react/jsx-runtime").JSX.Element;
51
51
  Fantom: ({ testnet, ...props }: {
52
- testnet?: boolean | undefined;
52
+ testnet?: boolean;
53
53
  }) => import("react/jsx-runtime").JSX.Element;
54
54
  Filecoin: ({ testnet, ...props }: {
55
- testnet?: boolean | undefined;
55
+ testnet?: boolean;
56
56
  }) => import("react/jsx-runtime").JSX.Element;
57
57
  Metis: ({ testnet, ...props }: {
58
- testnet?: boolean | undefined;
58
+ testnet?: boolean;
59
59
  }) => import("react/jsx-runtime").JSX.Element;
60
60
  IoTeX: ({ testnet, ...props }: {
61
- testnet?: boolean | undefined;
61
+ testnet?: boolean;
62
62
  }) => import("react/jsx-runtime").JSX.Element;
63
63
  Zora: ({ testnet, ...props }: {
64
- testnet?: boolean | undefined;
64
+ testnet?: boolean;
65
65
  }) => import("react/jsx-runtime").JSX.Element;
66
66
  };
67
67
  export default _default;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type AlertProps = {
3
2
  children?: React.ReactNode;
4
3
  icon?: React.ReactNode;
@@ -1,4 +1,4 @@
1
1
  declare const ChainSelectList: ({ variant, }: {
2
- variant?: "primary" | "secondary" | undefined;
2
+ variant?: "primary" | "secondary";
3
3
  }) => import("react/jsx-runtime").JSX.Element;
4
4
  export default ChainSelectList;
@@ -1,5 +1,5 @@
1
1
  declare const CopyToClipboardIcon: ({ copied, small, }: {
2
- copied?: boolean | undefined;
3
- small?: boolean | undefined;
2
+ copied?: boolean;
3
+ small?: boolean;
4
4
  }) => import("react/jsx-runtime").JSX.Element;
5
5
  export default CopyToClipboardIcon;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  interface Option {
3
2
  id: string;
4
3
  title: string;
@@ -8,7 +7,7 @@ interface Option {
8
7
  }
9
8
  declare const OptionsList: ({ options, isLoading, requiredSkeletons, }: {
10
9
  options: Option[];
11
- isLoading?: boolean | undefined;
12
- requiredSkeletons?: number | undefined;
10
+ isLoading?: boolean;
11
+ requiredSkeletons?: number;
13
12
  }) => import("react/jsx-runtime").JSX.Element;
14
13
  export default OptionsList;
@@ -1,3 +1,3 @@
1
1
  export declare const OrderHeader: ({ minified }: {
2
- minified?: boolean | undefined;
2
+ minified?: boolean;
3
3
  }) => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,2 @@
1
- /// <reference types="react" />
2
1
  declare const Portal: (props: any) => import("react").ReactPortal | null;
3
2
  export default Portal;
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  export declare const ScrollArea: ({ children, height, backgroundColor, mobileDirection, }: {
3
3
  children: React.ReactNode;
4
- height?: number | undefined;
5
- backgroundColor?: string | undefined;
6
- mobileDirection?: "horizontal" | "vertical" | undefined;
4
+ height?: number;
5
+ backgroundColor?: string;
6
+ mobileDirection?: "horizontal" | "vertical";
7
7
  }) => import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type TooltipSizeProps = "small" | "large";
3
2
  export type TooltipProps = {
4
3
  message?: string | React.ReactNode;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { CustomTheme, Languages, Mode, Theme } from "../../types";
3
2
  declare const ConnectModal: React.FC<{
4
3
  mode?: Mode;
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  declare const CircleSpinner: ({ logo, smallLogo, connecting, unavailable, countdown, }: {
3
3
  logo?: React.ReactNode;
4
- smallLogo?: boolean | undefined;
5
- connecting?: boolean | undefined;
6
- unavailable?: boolean | undefined;
7
- countdown?: boolean | undefined;
4
+ smallLogo?: boolean;
5
+ connecting?: boolean;
6
+ unavailable?: boolean;
7
+ countdown?: boolean;
8
8
  }) => import("react/jsx-runtime").JSX.Element;
9
9
  export default CircleSpinner;
@@ -1,5 +1,5 @@
1
1
  declare const SquircleSpinner: ({ logo, connecting, }: {
2
2
  logo?: React.ReactNode;
3
- connecting?: boolean | undefined;
3
+ connecting?: boolean;
4
4
  }) => import("react/jsx-runtime").JSX.Element;
5
5
  export default SquircleSpinner;
@@ -18,7 +18,7 @@ type Web3Context = {
18
18
  };
19
19
  declare const Web3Context: React.Context<Web3Context>;
20
20
  export declare const Web3ContextProvider: ({ enabled, children, }: {
21
- enabled?: boolean | undefined;
21
+ enabled?: boolean;
22
22
  children: React.ReactNode;
23
23
  }) => import("react/jsx-runtime").JSX.Element;
24
24
  export declare const useWeb3: () => Web3Context;
@@ -20,12 +20,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
20
20
  submittedAt: number;
21
21
  connect: ({ connector, chainId, mutation, }: {
22
22
  connector: CreateConnectorFn | Connector;
23
- chainId?: number | undefined;
23
+ chainId?: number;
24
24
  mutation?: UseConnectParameters["mutation"];
25
25
  }) => void;
26
26
  connectAsync: ({ connector, chainId, mutation, }: {
27
27
  connector: CreateConnectorFn | Connector;
28
- chainId?: number | undefined;
28
+ chainId?: number;
29
29
  mutation?: UseConnectParameters["mutation"];
30
30
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
31
31
  connectors: readonly Connector[];
@@ -33,7 +33,7 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
33
33
  data: undefined;
34
34
  variables: {
35
35
  chainId?: number | undefined;
36
- connector: CreateConnectorFn | Connector;
36
+ connector: Connector | CreateConnectorFn;
37
37
  };
38
38
  error: null;
39
39
  isError: false;
@@ -49,12 +49,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
49
49
  submittedAt: number;
50
50
  connect: ({ connector, chainId, mutation, }: {
51
51
  connector: CreateConnectorFn | Connector;
52
- chainId?: number | undefined;
52
+ chainId?: number;
53
53
  mutation?: UseConnectParameters["mutation"];
54
54
  }) => void;
55
55
  connectAsync: ({ connector, chainId, mutation, }: {
56
56
  connector: CreateConnectorFn | Connector;
57
- chainId?: number | undefined;
57
+ chainId?: number;
58
58
  mutation?: UseConnectParameters["mutation"];
59
59
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
60
60
  connectors: readonly Connector[];
@@ -62,7 +62,7 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
62
62
  data: undefined;
63
63
  variables: {
64
64
  chainId?: number | undefined;
65
- connector: CreateConnectorFn | Connector;
65
+ connector: Connector | CreateConnectorFn;
66
66
  };
67
67
  error: import("@wagmi/core").ConnectErrorType;
68
68
  isError: true;
@@ -78,12 +78,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
78
78
  submittedAt: number;
79
79
  connect: ({ connector, chainId, mutation, }: {
80
80
  connector: CreateConnectorFn | Connector;
81
- chainId?: number | undefined;
81
+ chainId?: number;
82
82
  mutation?: UseConnectParameters["mutation"];
83
83
  }) => void;
84
84
  connectAsync: ({ connector, chainId, mutation, }: {
85
85
  connector: CreateConnectorFn | Connector;
86
- chainId?: number | undefined;
86
+ chainId?: number;
87
87
  mutation?: UseConnectParameters["mutation"];
88
88
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
89
89
  connectors: readonly Connector[];
@@ -91,7 +91,7 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
91
91
  data: import("wagmi/query").ConnectData<import("wagmi").Config>;
92
92
  variables: {
93
93
  chainId?: number | undefined;
94
- connector: CreateConnectorFn | Connector;
94
+ connector: Connector | CreateConnectorFn;
95
95
  };
96
96
  error: null;
97
97
  isError: false;
@@ -107,12 +107,12 @@ export declare function useConnect({ ...props }?: UseConnectParameters): {
107
107
  submittedAt: number;
108
108
  connect: ({ connector, chainId, mutation, }: {
109
109
  connector: CreateConnectorFn | Connector;
110
- chainId?: number | undefined;
110
+ chainId?: number;
111
111
  mutation?: UseConnectParameters["mutation"];
112
112
  }) => void;
113
113
  connectAsync: ({ connector, chainId, mutation, }: {
114
114
  connector: CreateConnectorFn | Connector;
115
- chainId?: number | undefined;
115
+ chainId?: number;
116
116
  mutation?: UseConnectParameters["mutation"];
117
117
  }) => Promise<import("wagmi/query").ConnectData<import("wagmi").Config>>;
118
118
  connectors: readonly Connector[];
@@ -1,10 +1,4 @@
1
1
  export declare function useDaimoPayStatus(): {
2
- status: "payment_completed";
3
- paymentId: string;
4
- } | {
5
- status: "payment_started";
6
- paymentId: string;
7
- } | {
8
- status: "payment_pending";
2
+ status: string;
9
3
  paymentId: string;
10
4
  } | undefined;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  export type TLogLevel = "debug" | "info" | "warn" | "error" | "none";
3
2
  export type TOptions = {
4
3
  logLevel?: TLogLevel;
@@ -1,2 +1 @@
1
- /// <reference types="react" />
2
1
  export default function useLockBodyScroll(initialLocked: boolean): (boolean | import("react").Dispatch<import("react").SetStateAction<boolean>>)[];
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { DaimoPayOrder, DaimoPayTokenAmount, ExternalPaymentOptionMetadata, ExternalPaymentOptions } from "@daimo/common";
3
2
  import { trpc } from "./trpc";
4
3
  export type SourcePayment = Parameters<typeof trpc.processSourcePayment.mutate>[0];
@@ -16,7 +15,7 @@ export interface PaymentInfo {
16
15
  payWithExternal: (option: ExternalPaymentOptions) => Promise<string>;
17
16
  refreshOrder: () => Promise<void>;
18
17
  }
19
- export declare function getPaymentInfo(): {
18
+ export declare function getPaymentInfo(log: (...args: any[]) => void): {
20
19
  setPayId: (payId: string | null) => Promise<void>;
21
20
  daimoPayOrder: DaimoPayOrder | null;
22
21
  paymentWaitingMessage: string | null;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import React from "react";
3
2
  declare const truncateEthAddress: (address?: string, separator?: string) => string;
4
3
  declare const truncateENSAddress: (ensName: string, maxLength: number) => string;
@@ -9,10 +8,10 @@ declare const isAndroid: () => boolean;
9
8
  declare const isMobile: () => boolean;
10
9
  type ReactChildArray = ReturnType<typeof React.Children.toArray>;
11
10
  declare function flattenChildren(children: React.ReactNode): ReactChildArray;
12
- export declare const isWalletConnectConnector: (connectorId?: string) => boolean;
13
- export declare const isMetaMaskConnector: (connectorId?: string) => boolean;
14
- export declare const isCoinbaseWalletConnector: (connectorId?: string) => boolean;
15
- export declare const isLedgerConnector: (connectorId?: string) => boolean;
16
- export declare const isSafeConnector: (connectorId?: string) => boolean;
17
- export declare const isInjectedConnector: (connectorId?: string) => boolean;
11
+ export declare const isWalletConnectConnector: (connectorId?: string) => connectorId is "walletConnect";
12
+ export declare const isMetaMaskConnector: (connectorId?: string) => connectorId is "metaMaskSDK";
13
+ export declare const isCoinbaseWalletConnector: (connectorId?: string) => connectorId is "coinbaseWalletSDK";
14
+ export declare const isLedgerConnector: (connectorId?: string) => connectorId is "ledger";
15
+ export declare const isSafeConnector: (connectorId?: string) => connectorId is "safe";
16
+ export declare const isInjectedConnector: (connectorId?: string) => connectorId is "injected";
18
17
  export { detectBrowser, detectOS, flattenChildren, isAndroid, isMobile, nFormatter, truncateENSAddress, truncateEthAddress };
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  /**
3
2
  * EIP-6963: Multi Injected Provider Discovery
4
3
  * https://eips.ethereum.org/EIPS/eip-6963
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@daimo/pay",
3
3
  "private": false,
4
- "version": "0.3.5",
4
+ "version": "0.3.6",
5
5
  "author": "Daimo",
6
6
  "homepage": "https://pay.daimo.com",
7
7
  "license": "BSD-2-Clause license",
@@ -40,8 +40,8 @@
40
40
  "crypto"
41
41
  ],
42
42
  "dependencies": {
43
- "@daimo/common": "0.3.1",
44
- "@daimo/contract": "0.3.1",
43
+ "@daimo/common": "0.3.6",
44
+ "@daimo/contract": "0.3.6",
45
45
  "@trpc/client": "^11.0.0-next-beta.318",
46
46
  "@trpc/server": "^11.0.0-next-beta.318",
47
47
  "buffer": "^6.0.3",