diff --git a/.env.example b/.env.example
index e992363..dfcd5eb 100644
--- a/.env.example
+++ b/.env.example
@@ -1,6 +1,7 @@
EXPO_PUBLIC_BASE_RPC_URL=https://mainnet.base.org
EXPO_PUBLIC_BUNDLER_RPC_URL=https://public.pimlico.io/v2/1/rpc
-EXPO_PUBLIC_API_URL=https://api.useliquid.xyz
+EXPO_PUBLIC_API_URL=https://development.useliquid.xyz
EXPO_PUBLIC_API_KEY=
EXPO_PUBLIC_PRIVY_APP_ID=
-EXPO_PUBLIC_PRIVY_CLIENT_ID=
\ No newline at end of file
+EXPO_PUBLIC_PRIVY_CLIENT_ID=
+EXPO_PUBLIC_PIMILCO_API_KEY=
\ No newline at end of file
diff --git a/README.md b/README.md
index a12fb01..3e5427e 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ This is an [Expo](https://expo.dev) project created with [`create-expo-app`](htt
2. Install dependencies:
```bash
- yarn i
+ yarn install
```
3. Setup your `.env` file based on `.env.example`. Make sure you have a valid Liquid API key.
diff --git a/app.json b/app.json
index 6793d41..646b79b 100644
--- a/app.json
+++ b/app.json
@@ -14,7 +14,7 @@
},
"ios": {
"supportsTablet": true,
- "bundleIdentifier": "com.liquid.supermigrate",
+ "bundleIdentifier": "xyz.useliquid.liquid",
"buildNumber": "1",
"infoPlist": {
"NSFaceIDUsageDescription": "This app uses Face ID to sign in with Passkeys."
@@ -22,18 +22,14 @@
"config": {
"usesNonExemptEncryption": false
},
- "associatedDomains": [
- "webcredentials:api.useliquid.xyz?mode=developer",
- "webcredentials:api.useliquid.xyz",
- "webcredentials:development.useliquid.xyz"
- ]
+ "associatedDomains": ["webcredentials:api.useliquid.xyz", "webcredentials:development.useliquid.xyz"]
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/liquid-adaptive-icon.png",
"backgroundColor": "#ffffff"
},
- "package": "com.liquid.supermigrate"
+ "package": "xyz.useliquid.liquid"
},
"web": {
"bundler": "metro",
@@ -70,4 +66,4 @@
},
"owner": "supermigrate"
}
-}
\ No newline at end of file
+}
diff --git a/app/(liquidity-actions)/_layout.tsx b/app/(liquidity-actions)/_layout.tsx
index 3d41e88..f224251 100644
--- a/app/(liquidity-actions)/_layout.tsx
+++ b/app/(liquidity-actions)/_layout.tsx
@@ -4,7 +4,7 @@ import { StatusBar } from 'expo-status-bar';
const LiquidityActionsStack = () => {
return (
<>
-
+
diff --git a/app/(onboarding)/_layout.tsx b/app/(onboarding)/_layout.tsx
index 240acfe..617c829 100644
--- a/app/(onboarding)/_layout.tsx
+++ b/app/(onboarding)/_layout.tsx
@@ -1,5 +1,5 @@
import { useState, useEffect, useRef } from 'react';
-import { StyleSheet, Dimensions, Platform, View, StatusBar as RNStatusBar } from 'react-native';
+import { StyleSheet, Dimensions, Platform, View, StatusBar as RNStatusBar, Pressable } from 'react-native';
import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
import { StatusBar } from 'expo-status-bar';
@@ -56,6 +56,17 @@ export default function OnboardingTabLayout() {
}
};
+ const navigateToPreviousScreen = () => {
+ switch (pathname) {
+ case '/step2':
+ router.push('/(onboarding)/step1');
+ break;
+ case '/step3':
+ router.push('/(onboarding)/step2');
+ break;
+ }
+ };
+
useEffect(() => {
if (!isPaused) {
intervalRef.current = setInterval(() => {
@@ -86,7 +97,7 @@ export default function OnboardingTabLayout() {
return (
<>
-
+
+ {
+ if (currentStep > 0) {
+ navigateToPreviousScreen();
+ }
+ }}
+ style={styles.prev}
+ />
+ {
+ if (currentStep < 2) {
+ navigateToNextScreen();
+ }
+ }}
+ style={styles.next}
+ />
+
router.replace('/(signup)')} title="Let's go!" />
@@ -155,4 +183,18 @@ const styles = StyleSheet.create({
paddingBottom: Platform.OS === 'ios' ? 33 : 16,
width: Dimensions.get('window').width,
},
+ prev: {
+ flex: 1,
+ position: 'absolute',
+ height: Dimensions.get('window').height,
+ left: 0,
+ width: 65,
+ },
+ next: {
+ flex: 1,
+ position: 'absolute',
+ height: Dimensions.get('window').height,
+ right: 0,
+ width: 65,
+ },
});
diff --git a/app/(onboarding)/step1.tsx b/app/(onboarding)/step1.tsx
index a67d764..6eddfb8 100644
--- a/app/(onboarding)/step1.tsx
+++ b/app/(onboarding)/step1.tsx
@@ -13,7 +13,7 @@ const Step1 = () => {
firstArc={arc}
secondArc={arc1}
title="DeFi made easy"
- subtitle="Deposit Liquidity on Aerodrome pools in 3 seconds"
+ subtitle="Earn more with your money, securely"
containerStyle={{ backgroundColor: '#4691FE' }}
imageStyle={{ left: 6 }}
firstArcStyle={styles.firstArc}
diff --git a/app/(portfolio)/_layout.tsx b/app/(portfolio)/_layout.tsx
new file mode 100644
index 0000000..1adc284
--- /dev/null
+++ b/app/(portfolio)/_layout.tsx
@@ -0,0 +1,24 @@
+import { Stack } from 'expo-router';
+import { LQDStackHeader } from '@/components';
+
+const PortfolioStack = () => {
+ return (
+ ,
+ headerShown: true,
+ }}
+ >
+ ,
+ headerShown: true,
+ headerTitle: 'Portfolio',
+ }}
+ />
+
+ );
+};
+
+export default PortfolioStack;
diff --git a/app/(portfolio)/index.tsx b/app/(portfolio)/index.tsx
new file mode 100644
index 0000000..67cc97d
--- /dev/null
+++ b/app/(portfolio)/index.tsx
@@ -0,0 +1,5 @@
+import { Portfolio } from '@/screens';
+
+const PortfolioScreen = () => ;
+
+export default PortfolioScreen;
diff --git a/app/(settings)/index.tsx b/app/(settings)/index.tsx
new file mode 100644
index 0000000..351a0c8
--- /dev/null
+++ b/app/(settings)/index.tsx
@@ -0,0 +1,7 @@
+import Settings from '@/screens/settings';
+
+const Settingscreen = () => {
+ return ;
+};
+
+export default Settingscreen;
diff --git a/app/(settings)/legal-privacy.tsx b/app/(settings)/legal-privacy.tsx
new file mode 100644
index 0000000..20883b8
--- /dev/null
+++ b/app/(settings)/legal-privacy.tsx
@@ -0,0 +1,20 @@
+import { StyleSheet, Text, View } from 'react-native';
+
+const LegalAndPrivacy = () => {
+ return (
+
+ Legal and Privacy
+
+ );
+};
+
+export default LegalAndPrivacy;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ backgroundColor: '#fff',
+ },
+});
diff --git a/app/(settings)/support.tsx b/app/(settings)/support.tsx
new file mode 100644
index 0000000..7a7ee52
--- /dev/null
+++ b/app/(settings)/support.tsx
@@ -0,0 +1,20 @@
+import { StyleSheet, Text, View } from 'react-native';
+
+const Support = () => {
+ return (
+
+ Support
+
+ );
+};
+
+export default Support;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ backgroundColor: '#fff',
+ },
+});
diff --git a/app/(strategy)/_layout.tsx b/app/(strategy)/_layout.tsx
new file mode 100644
index 0000000..5be549d
--- /dev/null
+++ b/app/(strategy)/_layout.tsx
@@ -0,0 +1,41 @@
+import { Stack } from 'expo-router';
+import { LQDStackHeader } from '@/components';
+
+const StrategyStack = () => {
+ return (
+ ,
+ headerTitle: 'Create Strategy',
+ }}
+ >
+ ,
+ headerTitle: 'New Action',
+ headerShown: true,
+ presentation: 'fullScreenModal',
+ animation: 'slide_from_bottom',
+ }}
+ />
+
+ ,
+ headerTitle: 'Preview and publish',
+ headerShown: true,
+ }}
+ />
+
+
+ );
+};
+
+export default StrategyStack;
diff --git a/app/(strategy)/create-strategy.tsx b/app/(strategy)/create-strategy.tsx
new file mode 100644
index 0000000..1ad00eb
--- /dev/null
+++ b/app/(strategy)/create-strategy.tsx
@@ -0,0 +1,5 @@
+import { CreateStrategy } from '@/screens';
+
+const CreateStrategyScreen = () => ;
+
+export default CreateStrategyScreen;
diff --git a/app/(strategy)/details/[id].tsx b/app/(strategy)/details/[id].tsx
new file mode 100644
index 0000000..d1161a8
--- /dev/null
+++ b/app/(strategy)/details/[id].tsx
@@ -0,0 +1,10 @@
+import { StrategyDetail } from '@/screens';
+import { useLocalSearchParams } from 'expo-router';
+
+const StrategyDetailScreen = () => {
+ const { id } = useLocalSearchParams();
+
+ return ;
+};
+
+export default StrategyDetailScreen;
diff --git a/app/(strategy)/details/_layout.tsx b/app/(strategy)/details/_layout.tsx
new file mode 100644
index 0000000..7217a3c
--- /dev/null
+++ b/app/(strategy)/details/_layout.tsx
@@ -0,0 +1,19 @@
+import { Stack } from 'expo-router';
+
+import { LQDStackHeader } from '@/components';
+
+const StrategyDetailLayout = () => {
+ return (
+ <>
+ ,
+ headerTitle: 'Strategy',
+ headerShown: true,
+ }}
+ >
+ >
+ );
+};
+
+export default StrategyDetailLayout;
diff --git a/app/(strategy)/new-action-strategy.tsx b/app/(strategy)/new-action-strategy.tsx
new file mode 100644
index 0000000..d1a9bb9
--- /dev/null
+++ b/app/(strategy)/new-action-strategy.tsx
@@ -0,0 +1,5 @@
+import { NewActionStrategy } from '@/screens';
+
+const NewActionScreen = () => ;
+
+export default NewActionScreen;
diff --git a/app/(strategy)/preview-strategy.tsx b/app/(strategy)/preview-strategy.tsx
new file mode 100644
index 0000000..40683a5
--- /dev/null
+++ b/app/(strategy)/preview-strategy.tsx
@@ -0,0 +1,5 @@
+import { PreviewStrategy } from '@/screens';
+
+const PreviewStrategyScreen = () => ;
+
+export default PreviewStrategyScreen;
diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx
index 61bc8ae..393e40d 100644
--- a/app/(tabs)/_layout.tsx
+++ b/app/(tabs)/_layout.tsx
@@ -4,41 +4,59 @@ import { StatusBar } from 'expo-status-bar';
import { TabBarIcon } from '@/components/navigation/TabBarIcon';
import { Colors } from '@/constants/Colors';
-import { LQDNavigation, LQDSearch } from '@/components';
+import { LQDActionCard, LQDBottomSheet, LQDFlatlist, LQDNavigation } from '@/components';
+import Header from '@/screens/home/header';
+import { useState } from 'react';
+import { sortList } from '@/screens/discover/dummy';
import useSystemFunctions from '@/hooks/useSystemFunctions';
export default function TabLayout() {
const colorScheme = useColorScheme();
- const { appState } = useSystemFunctions();
+ const [show, setShow] = useState(false);
+ const [selectedAction, setSelectedAction] = useState('');
+ const { router } = useSystemFunctions();
+
+ const navigate = () => {
+ router.push('/(portfolio)');
+ };
+
+ const openModal = () => {
+ setShow((prev) => !prev);
+ };
return (
<>
-
- {!appState.hideSearch && (
-
-
-
- )}
-
+
+
}
screenOptions={{
tabBarActiveTintColor: Colors[colorScheme ?? 'light'].tint,
- headerShown: false,
+ headerShown: true,
+ header: () => ,
}}
>
,
}}
/>
,
+ headerShown: false,
+ }}
+ />
+
+ ,
}}
/>
@@ -48,15 +66,10 @@ export default function TabLayout() {
}
const styles = StyleSheet.create({
- shortcut: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- alignItems: 'center',
- gap: 12,
- paddingHorizontal: 21,
- paddingBottom: 10,
- paddingTop: Platform.OS === 'android' ? RNStatusBar.currentHeight : 54,
- zIndex: 10,
+ container: {
+ paddingTop: Platform.OS === 'android' ? RNStatusBar.currentHeight : 48,
backgroundColor: '#fff',
},
+ protocalContainerStyle: { gap: 20, paddingBottom: 50 },
+ modalContainerStyle: { gap: 20, paddingBottom: 50 },
});
diff --git a/app/(tabs)/discover/_layout.tsx b/app/(tabs)/discover/_layout.tsx
new file mode 100644
index 0000000..3f2e6fe
--- /dev/null
+++ b/app/(tabs)/discover/_layout.tsx
@@ -0,0 +1,22 @@
+import { Stack } from 'expo-router';
+import { LQDStackHeader } from '@/components';
+
+const DiscoverStack = () => {
+ return (
+ ,
+ headerShown: true,
+ }}
+ >
+
+
+ );
+};
+
+export default DiscoverStack;
diff --git a/app/(tabs)/discover/index.tsx b/app/(tabs)/discover/index.tsx
new file mode 100644
index 0000000..28df840
--- /dev/null
+++ b/app/(tabs)/discover/index.tsx
@@ -0,0 +1,5 @@
+import { Discover } from '@/screens';
+
+const DiscoverScreen = () => ;
+
+export default DiscoverScreen;
diff --git a/app/(tabs)/holdings/[poolId]/_layout.tsx b/app/(tabs)/holdings/[poolId]/_layout.tsx
deleted file mode 100644
index 1f21bb1..0000000
--- a/app/(tabs)/holdings/[poolId]/_layout.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import { StyleSheet, View } from 'react-native';
-import { Stack } from 'expo-router';
-
-import { LQDButton, LQDStackHeader } from '@/components';
-import { ILQDButton } from '@/components/button/types';
-import useSystemFunctions from '@/hooks/useSystemFunctions';
-import { useEffect } from 'react';
-import useAppActions from '@/store/app/actions';
-
-const PoolDetailLayout = () => {
- const { router } = useSystemFunctions();
- const { hideSearch } = useAppActions();
-
- const actions: Array = [
- {
- title: 'Add Liquidity',
- onPress: () => router.push('/(liquidity-actions)/add'),
- variant: 'tertiary',
- },
- {
- title: 'Remove Liquidity',
- onPress: () => router.push('/(liquidity-actions)/remove'),
- variant: 'tertiaryOutline',
- },
- ];
-
- useEffect(() => {
- hideSearch(true);
-
- return () => hideSearch(false);
- }, []);
-
- return (
- <>
- ,
- headerShown: true,
- }}
- >
-
-
-
-
- {actions.map((action) => (
-
- ))}
-
- >
- );
-};
-
-export default PoolDetailLayout;
-
-const styles = StyleSheet.create({
- actionsContainer: {
- position: 'absolute',
- bottom: 85,
- paddingHorizontal: 16,
- paddingTop: 32,
- paddingBottom: 22,
- flexDirection: 'row',
- gap: 11,
- backgroundColor: '#FFF',
- },
-
- action: {
- flex: 1,
- },
-});
diff --git a/app/(tabs)/holdings/[poolId]/index.tsx b/app/(tabs)/holdings/[poolId]/index.tsx
deleted file mode 100644
index a72c84a..0000000
--- a/app/(tabs)/holdings/[poolId]/index.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import useSystemFunctions from '@/hooks/useSystemFunctions';
-import { PoolDetail } from '@/screens';
-
-const PoolDetailScreen = () => {
- const { params } = useSystemFunctions();
-
- const { poolId } = params;
-
- return ;
-};
-
-export default PoolDetailScreen;
diff --git a/app/(tabs)/holdings/assets.tsx b/app/(tabs)/holdings/assets.tsx
deleted file mode 100644
index 62dc847..0000000
--- a/app/(tabs)/holdings/assets.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Assets } from '@/screens';
-
-const AssetsScreen = () => ;
-
-export default AssetsScreen;
diff --git a/app/(tabs)/holdings/index.tsx b/app/(tabs)/holdings/index.tsx
deleted file mode 100644
index 226c1b8..0000000
--- a/app/(tabs)/holdings/index.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Holdings } from '@/screens';
-
-const HoldingsScreen = () => ;
-
-export default HoldingsScreen;
diff --git a/app/(tabs)/holdings/pools.tsx b/app/(tabs)/holdings/pools.tsx
deleted file mode 100644
index ae52b44..0000000
--- a/app/(tabs)/holdings/pools.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Pools } from '@/screens';
-
-const PoolsScreen = () => ;
-
-export default PoolsScreen;
diff --git a/app/(tabs)/holdings/rewards.tsx b/app/(tabs)/holdings/rewards.tsx
deleted file mode 100644
index 29e49d6..0000000
--- a/app/(tabs)/holdings/rewards.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Rewards } from '@/screens';
-import useSystemFunctions from '@/hooks/useSystemFunctions';
-
-const RewardsScreen = () => {
- const { params } = useSystemFunctions();
-
- const { type } = params;
-
- return ;
-};
-
-export default RewardsScreen;
diff --git a/app/(tabs)/home/[poolId]/_layout.tsx b/app/(tabs)/home/[poolId]/_layout.tsx
index 4a452f6..5f96911 100644
--- a/app/(tabs)/home/[poolId]/_layout.tsx
+++ b/app/(tabs)/home/[poolId]/_layout.tsx
@@ -1,15 +1,12 @@
-import { useEffect } from 'react';
import { StyleSheet, View } from 'react-native';
import { Stack } from 'expo-router';
import { LQDButton, LQDStackHeader } from '@/components';
import { ILQDButton } from '@/components/button/types';
import useSystemFunctions from '@/hooks/useSystemFunctions';
-import useAppActions from '@/store/app/actions';
const PoolDetailLayout = () => {
const { router } = useSystemFunctions();
- const { hideSearch } = useAppActions();
const actions: Array = [
{
@@ -24,16 +21,11 @@ const PoolDetailLayout = () => {
},
];
- useEffect(() => {
- hideSearch(true);
-
- return () => hideSearch(false);
- }, []);
return (
<>
,
+ header: (props) => ,
headerShown: true,
}}
>
diff --git a/app/(tabs)/holdings/_layout.tsx b/app/(tabs)/profile/_layout.tsx
similarity index 65%
rename from app/(tabs)/holdings/_layout.tsx
rename to app/(tabs)/profile/_layout.tsx
index f3740af..64dd7a8 100644
--- a/app/(tabs)/holdings/_layout.tsx
+++ b/app/(tabs)/profile/_layout.tsx
@@ -1,7 +1,7 @@
import { Stack } from 'expo-router';
import { LQDStackHeader } from '@/components';
-const HoldingsStack = () => {
+const ProfileStack = () => {
return (
{
/>
,
- }}
- />
-
- {
);
};
-export default HoldingsStack;
+export default ProfileStack;
diff --git a/app/(tabs)/profile/edit-profile.tsx b/app/(tabs)/profile/edit-profile.tsx
new file mode 100644
index 0000000..7a3406b
--- /dev/null
+++ b/app/(tabs)/profile/edit-profile.tsx
@@ -0,0 +1,5 @@
+import { EditProfile } from '@/screens';
+
+const EditProfileScreen = () => ;
+
+export default EditProfileScreen;
diff --git a/app/(tabs)/profile/index.tsx b/app/(tabs)/profile/index.tsx
new file mode 100644
index 0000000..31cb301
--- /dev/null
+++ b/app/(tabs)/profile/index.tsx
@@ -0,0 +1,5 @@
+import { Profile } from '@/screens';
+
+const ProfileScreen = () => ;
+
+export default ProfileScreen;
diff --git a/app/_layout.tsx b/app/_layout.tsx
index c817a2e..9966779 100644
--- a/app/_layout.tsx
+++ b/app/_layout.tsx
@@ -3,29 +3,23 @@ import 'react-native-reanimated';
import { Stack } from 'expo-router';
// setup viem and api on app start
-import '@/init/viem';
+import '@/init/useViem';
+import '@/init/client';
import '@/init/api';
import { AllProviders } from '@/providers';
-import { LQDStackHeader } from '@/components';
-import { useOnMount } from '@/hooks/useOnMount';
-import { usePoolActions } from '@/store/pools/actions';
+import { LQDStackHeader, LQToast } from '@/components';
export default function RootLayout() {
return (
+
);
}
function RootStack() {
- const { getPools } = usePoolActions();
-
- useOnMount(function loadData() {
- getPools();
- });
-
return (
@@ -55,14 +49,34 @@ function RootStack() {
}}
/>
,
+ headerTitle: 'Settings',
+ headerShown: true,
+ }}
+ />
+
+ ,
- headerTitle: 'Withdraw',
+ header: (props) => ,
+ headerTitle: 'Legal & Privacy',
headerShown: true,
}}
/>
+ ,
+ headerTitle: 'Support',
+ headerShown: true,
+ }}
+ />
+
+
+
{/* Common routes */}
diff --git a/app/deposit/_layout.tsx b/app/deposit/_layout.tsx
index a2efc28..7e553f6 100644
--- a/app/deposit/_layout.tsx
+++ b/app/deposit/_layout.tsx
@@ -5,13 +5,14 @@ const DepositStack = () => {
return (
,
+ header: (props) => ,
headerTitle: 'Deposit',
}}
>
+
);
};
diff --git a/app/deposit/crypto-wallet.tsx b/app/deposit/crypto-wallet.tsx
new file mode 100644
index 0000000..870c7f4
--- /dev/null
+++ b/app/deposit/crypto-wallet.tsx
@@ -0,0 +1,5 @@
+import { CryptoWalletDeposit } from '@/screens';
+
+const CryptoWalletDepositScreen = () => ;
+
+export default CryptoWalletDepositScreen;
diff --git a/app/index.tsx b/app/index.tsx
index 3763a24..af810fe 100644
--- a/app/index.tsx
+++ b/app/index.tsx
@@ -9,16 +9,22 @@ if (__DEV__) {
require('@/init/reactotron');
}
-import { Redirect } from 'expo-router';
+import FastImage from 'react-native-fast-image';
import { useAuth } from '@/providers/AuthProvider';
-import Step1 from './(onboarding)/step1';
+import { useEffect } from 'react';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
export default function AuthGate() {
+ const { router } = useSystemFunctions();
const { isLoading, session } = useAuth();
- if (isLoading) {
- return ;
- }
+ useEffect(() => {
+ if (!isLoading) {
+ const target = session ? '/(tabs)/home' : '/(onboarding)/step1';
- return session ? : ;
+ router.replace(target);
+ }
+ }, [isLoading, session]);
+
+ return ;
}
diff --git a/app/liquidity-management.tsx b/app/liquidity-management.tsx
index c6fd212..629572e 100644
--- a/app/liquidity-management.tsx
+++ b/app/liquidity-management.tsx
@@ -9,7 +9,7 @@ const LiquidityManagementScreen = () => {
return (
<>
-
+
>
diff --git a/app/withdraw/_layout.tsx b/app/withdraw/_layout.tsx
new file mode 100644
index 0000000..869d6b9
--- /dev/null
+++ b/app/withdraw/_layout.tsx
@@ -0,0 +1,32 @@
+import { Stack } from 'expo-router';
+import { LQDStackHeader } from '@/components';
+
+const WithdrawStack = () => {
+ return (
+ ,
+ headerTitle: 'Withdraw',
+ }}
+ >
+ ,
+ headerTitle: 'Withdraw',
+ headerShown: true,
+ }}
+ />
+ ,
+ headerTitle: 'Withdraw',
+ headerShown: true,
+ }}
+ />
+
+ );
+};
+
+export default WithdrawStack;
diff --git a/app/withdraw/recepient-address.tsx b/app/withdraw/recepient-address.tsx
new file mode 100644
index 0000000..92acc56
--- /dev/null
+++ b/app/withdraw/recepient-address.tsx
@@ -0,0 +1,7 @@
+import { RecepientAddress } from '@/screens';
+
+const RecepientAddressScreen = () => {
+ return ;
+};
+
+export default RecepientAddressScreen;
diff --git a/app/withdraw.tsx b/app/withdraw/withdraw.tsx
similarity index 100%
rename from app/withdraw.tsx
rename to app/withdraw/withdraw.tsx
diff --git a/assets/icons/aerodrome-icon.tsx b/assets/icons/aerodrome-icon.tsx
new file mode 100644
index 0000000..9cd4262
--- /dev/null
+++ b/assets/icons/aerodrome-icon.tsx
@@ -0,0 +1,19 @@
+import Svg, { Path, Defs, Pattern, Use, Image } from 'react-native-svg';
+
+const AerodromeIcon = ({ fill = '', height = 25, width = 25 }: IconProps) => (
+
+);
+export default AerodromeIcon;
diff --git a/assets/icons/arrow-circle-down-icon.tsx b/assets/icons/arrow-circle-down-icon.tsx
new file mode 100644
index 0000000..c8b7e07
--- /dev/null
+++ b/assets/icons/arrow-circle-down-icon.tsx
@@ -0,0 +1,23 @@
+import Svg, { Path } from 'react-native-svg';
+
+const ArrowCircleDownIcon = ({ fill = '#475569', height = 12, width = 12 }: IconProps) => (
+
+);
+export default ArrowCircleDownIcon;
diff --git a/assets/icons/arrow-dropdown-icon.tsx b/assets/icons/arrow-dropdown-icon.tsx
new file mode 100644
index 0000000..05f0a70
--- /dev/null
+++ b/assets/icons/arrow-dropdown-icon.tsx
@@ -0,0 +1,14 @@
+import Svg, { Path } from 'react-native-svg';
+
+const ArrowDropdownDownIcon = ({ fill = '#94A3B8', height = 16, width = 16 }: IconProps) => (
+
+);
+export default ArrowDropdownDownIcon;
diff --git a/assets/icons/arrow-up-circle.tsx b/assets/icons/arrow-up-circle.tsx
new file mode 100644
index 0000000..c339884
--- /dev/null
+++ b/assets/icons/arrow-up-circle.tsx
@@ -0,0 +1,11 @@
+import Svg, { Path } from 'react-native-svg';
+
+const ArrowUpCircleIcon = ({ fill = '#4691FE', height = 20, width = 20 }: IconProps) => (
+
+);
+export default ArrowUpCircleIcon;
diff --git a/assets/icons/borrow-icon.tsx b/assets/icons/borrow-icon.tsx
new file mode 100644
index 0000000..234a583
--- /dev/null
+++ b/assets/icons/borrow-icon.tsx
@@ -0,0 +1,22 @@
+import Svg, { Path } from 'react-native-svg';
+
+const BorrowIcon = ({ fill = '#AF1D38', height = 16, width = 16 }: IconProps) => (
+
+);
+export default BorrowIcon;
diff --git a/assets/icons/caret-left-icon.tsx b/assets/icons/caret-left-icon.tsx
index 40da8f1..138bb38 100644
--- a/assets/icons/caret-left-icon.tsx
+++ b/assets/icons/caret-left-icon.tsx
@@ -1,14 +1,14 @@
import Svg, { Path } from 'react-native-svg';
-const CaretLeftIcon = ({ fill = '#0F172A', height = 20, width = 20 }: IconProps) => (
-
);
};
@@ -44,10 +49,18 @@ const styles = StyleSheet.create({
justifyContent: 'center',
alignItems: 'center',
gap: 5,
+ paddingVertical: 8,
},
text: {
fontSize: adjustFontSizeForIOS(11, 2),
lineHeight: 13.64,
},
+
+ image: {
+ width: 24,
+ height: 24,
+ borderRadius: 100,
+ borderColor: '#000',
+ },
});
diff --git a/components/no-result/index.tsx b/components/no-result/index.tsx
new file mode 100644
index 0000000..881b4d4
--- /dev/null
+++ b/components/no-result/index.tsx
@@ -0,0 +1,40 @@
+import { View, Text, StyleSheet } from 'react-native';
+import React from 'react';
+import { SearchEmptyStateIcon } from '@/assets/icons';
+import { ILQNoResult } from './types';
+
+const LQNoResult = ({ title, description }: ILQNoResult) => {
+ return (
+
+
+ {title}
+ {description}
+
+ );
+};
+
+export default LQNoResult;
+
+const styles = StyleSheet.create({
+ emptyContainer: {
+ paddingHorizontal: 16,
+ paddingTop: 34,
+ alignItems: 'center',
+ gap: 10,
+ },
+
+ emptyTitle: {
+ textAlign: 'center',
+ color: '#334155',
+ fontSize: 17,
+ fontFamily: 'AeonikBold',
+ fontWeight: '700',
+ marginTop: 10,
+ },
+ emptyDescription: {
+ textAlign: 'center',
+ color: '#64748B',
+ fontSize: 15,
+ fontFamily: 'AeonikRegular',
+ },
+});
diff --git a/components/no-result/types.ts b/components/no-result/types.ts
new file mode 100644
index 0000000..b6a5894
--- /dev/null
+++ b/components/no-result/types.ts
@@ -0,0 +1,8 @@
+import { StyleProp, ViewStyle } from 'react-native';
+
+interface ILQNoResult {
+ title: string;
+ description: string;
+}
+
+export type { ILQNoResult };
diff --git a/components/onboarding/indicator/index.tsx b/components/onboarding/indicator/index.tsx
index 3fd9eb0..c570945 100644
--- a/components/onboarding/indicator/index.tsx
+++ b/components/onboarding/indicator/index.tsx
@@ -1,14 +1,14 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, useState } from 'react';
import { View, Text, Image, StyleSheet, TouchableOpacity } from 'react-native';
import Animated, { useSharedValue, withTiming, useAnimatedStyle, Easing } from 'react-native-reanimated';
-
import { adjustFontSizeForIOS } from '@/utils/helpers';
const LQDOnboardingIndicator = ({ currentStep, isPaused, timer, totalSteps, finished, togglePause }: ILQDOnboardingIndicator) => {
const actions = [require('../../../assets/images/pause.png'), require('../../../assets/images/play.png')];
+ const [progressValues, setProgressValues] = useState(new Array(totalSteps).fill(0));
const animatedWidthStyle = (index: number) => {
- const progress = useSharedValue(0);
+ const progress = useSharedValue(progressValues[index]);
useEffect(() => {
if (index === currentStep && !isPaused) {
@@ -21,21 +21,25 @@ const LQDOnboardingIndicator = ({ currentStep, isPaused, timer, totalSteps, fini
});
}
}
- }, [timer, isPaused, currentStep, finished]);
- return useAnimatedStyle(() => {
- if (index === 0 && currentStep === 0) {
- return { width: `${progress.value * 100}%` };
- } else if (index === 0 && currentStep > 0) {
- return { width: '100%' };
- } else if (index === currentStep) {
- return { width: `${progress.value * 100}%` };
- } else if (index < currentStep) {
- return { width: '100%' };
- } else {
- return { width: '0%' };
+ if (index === currentStep && progress.value !== progressValues[index]) {
+ setProgressValues((prevValues) => {
+ const newValues = [...prevValues];
+ newValues[index] = progress.value;
+ return newValues;
+ });
+ }
+
+ if (index < currentStep) {
+ progress.value = 1;
+ } else if (index > currentStep) {
+ progress.value = 0;
}
- });
+ }, [timer, isPaused, currentStep, finished]);
+
+ return useAnimatedStyle(() => ({
+ width: `${progress.value * 100}%`,
+ }));
};
return (
diff --git a/components/onboarding/step/index.tsx b/components/onboarding/step/index.tsx
index 3c9a688..f51719d 100644
--- a/components/onboarding/step/index.tsx
+++ b/components/onboarding/step/index.tsx
@@ -58,6 +58,6 @@ const styles = StyleSheet.create({
image: {
position: 'absolute',
- bottom: 136,
+ bottom: '25%',
},
});
diff --git a/components/pool-images/index.tsx b/components/pool-images/index.tsx
new file mode 100644
index 0000000..ef026f9
--- /dev/null
+++ b/components/pool-images/index.tsx
@@ -0,0 +1,60 @@
+import { StyleSheet, View } from 'react-native';
+import FastImage from 'react-native-fast-image';
+import { useState } from 'react';
+
+const defaultAIconUrl = 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png';
+const defaultBIconUrl = 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png';
+
+const LQDPoolImages = ({ tokenAIconURL, tokenBIconURL }: PoolImages) => {
+ const [tokenAIconError, setTokenAIconError] = useState(false);
+ const [tokenBIconError, setTokenBIconError] = useState(false);
+
+ const iconA = tokenAIconError ? defaultAIconUrl : tokenAIconURL || defaultAIconUrl;
+
+ const iconB = tokenBIconError ? defaultBIconUrl : tokenBIconURL || defaultBIconUrl;
+
+ return (
+
+ {[iconA, iconB].map((iconURL, index) => (
+
+ (index === 0 ? setTokenAIconError(true) : setTokenBIconError(true))}
+ />
+
+ ))}
+
+ );
+};
+
+export default LQDPoolImages;
+
+const styles = StyleSheet.create({
+ iconContainer: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+
+ icon: {
+ width: 24,
+ height: 24,
+ alignItems: 'center',
+ justifyContent: 'center',
+ borderRadius: 9999,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ marginRight: -12,
+ },
+
+ image: {
+ width: 16,
+ height: 16,
+ borderRadius: 9999,
+ },
+});
diff --git a/components/pool-images/token-image.tsx b/components/pool-images/token-image.tsx
new file mode 100644
index 0000000..c18b4a8
--- /dev/null
+++ b/components/pool-images/token-image.tsx
@@ -0,0 +1,47 @@
+import { StyleSheet, View } from 'react-native';
+import FastImage from 'react-native-fast-image';
+import { useState } from 'react';
+
+const defaultIconUrl = 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png';
+
+const LQDTokenImage = ({ iconURL, size }: TokenImage) => {
+ const [iconError, setIconError] = useState(false);
+
+ const icon = iconError ? defaultIconUrl : iconURL || defaultIconUrl;
+
+ return (
+
+ setIconError(true)}
+ />
+
+ );
+};
+
+export default LQDTokenImage;
+
+const styles = (size: number = 24) =>
+ StyleSheet.create({
+ iconContainer: {
+ width: size,
+ height: size,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ alignItems: 'center',
+ justifyContent: 'center',
+ borderRadius: 9999,
+ },
+
+ icon: {
+ width: size,
+ height: size,
+ objectFit: 'contain',
+ borderRadius: 9999,
+ },
+ });
diff --git a/components/pool-images/types.ts b/components/pool-images/types.ts
new file mode 100644
index 0000000..278209c
--- /dev/null
+++ b/components/pool-images/types.ts
@@ -0,0 +1,9 @@
+type PoolImages = {
+ tokenAIconURL?: string;
+ tokenBIconURL?: string;
+};
+
+type TokenImage = {
+ iconURL?: string;
+ size?: number;
+};
diff --git a/components/pool-pair-card/index.tsx b/components/pool-pair-card/index.tsx
index a68b0cd..1a26b82 100644
--- a/components/pool-pair-card/index.tsx
+++ b/components/pool-pair-card/index.tsx
@@ -1,4 +1,4 @@
-import { Image, View, Text, StyleSheet, TouchableOpacity } from 'react-native';
+import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
import { Href } from 'expo-router';
import useSystemFunctions from '@/hooks/useSystemFunctions';
@@ -6,6 +6,7 @@ import { adjustFontSizeForIOS } from '@/utils/helpers';
import { ArrowDownIcon, ArrowUpAltIcon } from '@/assets/icons';
import { setSelectedPool } from '@/store/pools';
import { PoolPairCard } from './types';
+import LQDPoolImages from '../pool-images';
const backgroundColors = ['#FDEAEA', '#EFFAF6'];
const textColors = ['#A4262C', '#156146'];
@@ -23,22 +24,16 @@ const LQDPoolPairCard = ({ pool, navigationVariant = 'primary' }: PoolPairCard)
router.push(paths[navigationVariant]);
};
- const primaryIconURL = pool.token0.logoUrl;
- const secondaryIconURL = pool.token1.logoUrl;
+ const tokenAIconURL = pool.token0.logoUrl;
+ const tokenBIconURL = pool.token1.logoUrl;
const symbol = pool.symbol.split('-')[1].replace('/', ' / ');
- const increased = pool.gauge.isAlive;
- const change = 2.3;
+ const increased = true;
+ const change = pool.apr;
return (
-
- {[primaryIconURL, secondaryIconURL].map((iconURL, index) => (
-
-
-
- ))}
-
+
{increased ? (
@@ -49,7 +44,6 @@ const LQDPoolPairCard = ({ pool, navigationVariant = 'primary' }: PoolPairCard)
{change}%
-
{symbol}
);
@@ -73,23 +67,6 @@ const styles = StyleSheet.create({
gap: 18 + 6,
},
- iconContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- },
-
- icon: {
- width: 24,
- height: 24,
- alignItems: 'center',
- justifyContent: 'center',
- borderRadius: 9999,
- borderWidth: 1,
- borderColor: '#EAEEF4',
- marginRight: -6,
- },
-
title: {
color: '#1E293B',
fontSize: adjustFontSizeForIOS(13, 2),
diff --git a/components/pool-pair-paper/index.tsx b/components/pool-pair-paper/index.tsx
index bd3382d..02e9845 100644
--- a/components/pool-pair-paper/index.tsx
+++ b/components/pool-pair-paper/index.tsx
@@ -1,12 +1,14 @@
-import { StyleSheet, View, Text, Image, TouchableOpacity } from 'react-native';
+import { StyleSheet, View, Text, TouchableOpacity } from 'react-native';
import { Href } from 'expo-router';
-import { adjustFontSizeForIOS, formatAmount, formatNumberWithSuffix } from '@/utils/helpers';
+import { adjustFontSizeForIOS, formatAmount, formatNumberWithSuffix, formatSymbol, roundUp } from '@/utils/helpers';
import useSystemFunctions from '@/hooks/useSystemFunctions';
-import { setSelectedPool } from '@/store/pools';
+import { setRecentSearchedPool, setSelectedPool } from '@/store/pools';
import { PoolPairPaper } from './types';
+import LQDImage from '../image';
+import { FillCheckIcon } from '@/assets/icons';
-const LQDPoolPairPaper = ({ pool, navigationVariant = 'primary' }: PoolPairPaper) => {
+const LQDPoolPairPaper = ({ pool, navigationVariant = 'primary', showFullSymbol, selected }: PoolPairPaper) => {
const { router, dispatch } = useSystemFunctions();
const paths = {
@@ -16,48 +18,31 @@ const LQDPoolPairPaper = ({ pool, navigationVariant = 'primary' }: PoolPairPaper
const handlePress = () => {
dispatch(setSelectedPool(pool));
+ dispatch(setRecentSearchedPool(pool));
router.push(paths[navigationVariant]);
};
- const primaryIconURL = pool.token0.logoUrl;
- const secondaryIconURL = pool.token1.logoUrl;
- const symbol = pool.symbol.split('-')[1].replace('/', ' / ');
- const apr = formatAmount(pool.emissions.rate, 2);
- const fees = pool.fees.poolFee;
- const volume = formatAmount(pool.volume.usd, 0);
- const isStable = pool.isStable;
+ const tokenIconURL = pool.token0.logoUrl;
+ const title = pool.symbol;
+ const subTitle = '4,506 USDC';
return (
-
- {[primaryIconURL, secondaryIconURL].map((iconURL, index) => (
-
-
-
- ))}
-
+
- {symbol}
-
-
- {isStable ? 'Basic Stable' : 'Basic Volatile'}
+ {title}
-
-
+ {subTitle && (
+
+ {subTitle}
-
- {fees}% Fee
-
+ )}
-
- APR: {apr.toLocaleString()}%
-
- VOL: ${formatNumberWithSuffix(volume)}
-
+ {selected && }
);
};
@@ -77,23 +62,7 @@ const styles = StyleSheet.create({
alignSelf: 'stretch',
alignItems: 'center',
gap: 10 + 6,
- },
-
- iconContainer: {
- flexDirection: 'row',
- alignItems: 'center',
- justifyContent: 'center',
- },
-
- icon: {
- width: 24,
- height: 24,
- alignItems: 'center',
- justifyContent: 'center',
- borderRadius: 9999,
- borderWidth: 1,
- borderColor: '#EAEEF4',
- marginRight: -6,
+ maxWidth: '70%',
},
detailContainer: {
@@ -106,6 +75,7 @@ const styles = StyleSheet.create({
fontSize: adjustFontSizeForIOS(14, 2),
lineHeight: 18.48,
fontWeight: '500',
+ marginLeft: -6,
fontFamily: 'AeonikMedium',
},
@@ -124,14 +94,14 @@ const styles = StyleSheet.create({
},
basicTextVolatile: {
- color: '#AF1D38',
+ color: '#B47818',
fontSize: adjustFontSizeForIOS(11, 2),
lineHeight: 13.64,
fontFamily: 'AeonikRegular',
},
basicTextStable: {
- color: '#B47818',
+ color: '#156146',
fontSize: adjustFontSizeForIOS(11, 2),
lineHeight: 13.64,
fontFamily: 'AeonikRegular',
diff --git a/components/pool-pair-paper/types.ts b/components/pool-pair-paper/types.ts
index 8430a2f..30f089b 100644
--- a/components/pool-pair-paper/types.ts
+++ b/components/pool-pair-paper/types.ts
@@ -3,4 +3,6 @@ import { Pool } from '@/store/pools/types';
export interface PoolPairPaper {
pool: Pool;
navigationVariant?: 'primary' | 'secondary';
+ showFullSymbol?: boolean;
+ selected?: boolean | null;
}
diff --git a/components/protocol-card/index.tsx b/components/protocol-card/index.tsx
new file mode 100644
index 0000000..fe2fe8a
--- /dev/null
+++ b/components/protocol-card/index.tsx
@@ -0,0 +1,51 @@
+import React from 'react';
+import { StyleSheet, View, Text, TouchableOpacity } from 'react-native';
+import { FillCheckIcon } from '@/assets/icons';
+import ICONS from '@/constants/icons';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { IProtocolCard } from './types';
+
+const LQDProtocolCard = ({ selected, onSelect, variant, protocol }: IProtocolCard) => {
+ const { title } = protocol;
+
+ return (
+
+
+ {ICONS[variant]}
+ {title}
+
+ {selected && }
+
+ );
+};
+
+export default LQDProtocolCard;
+
+const styles = StyleSheet.create({
+ container: {
+ backgroundColor: '#F8FAFC',
+ flexDirection: 'row',
+ alignItems: 'center',
+ borderRadius: 20,
+ height: 52,
+ paddingHorizontal: 16,
+ justifyContent: 'space-between',
+ },
+ innerWrapper: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 20,
+ },
+ volumeWrapper: {
+ alignItems: 'flex-end',
+ gap: 8,
+ },
+
+ title: {
+ color: '#1E293B',
+ fontSize: adjustFontSizeForIOS(16, 2),
+ lineHeight: 19.2,
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+});
diff --git a/components/protocol-card/types.ts b/components/protocol-card/types.ts
new file mode 100644
index 0000000..684c6d0
--- /dev/null
+++ b/components/protocol-card/types.ts
@@ -0,0 +1,9 @@
+export type IProtocolIconVariant = 'moonwell' | 'aerodrome' | 'morpho';
+
+export interface IProtocolCard {
+ protocol: any;
+ navigationVariant?: 'primary' | 'secondary';
+ variant: IProtocolIconVariant;
+ selected: boolean | null;
+ onSelect?: () => void;
+}
diff --git a/components/scrollview/index.tsx b/components/scrollview/index.tsx
new file mode 100644
index 0000000..fd071ee
--- /dev/null
+++ b/components/scrollview/index.tsx
@@ -0,0 +1,31 @@
+import React from 'react';
+import { RefreshControl, ScrollView } from 'react-native';
+import { ILQDScrollView } from './types';
+
+const LQDScrollView: React.FC = ({ children, onRefresh, refreshing = false, style, contentStyle }) => {
+ const Refresh = () => {
+ if (onRefresh) {
+ return ;
+ }
+
+ return null;
+ };
+
+ return (
+ }
+ >
+ {children}
+
+ );
+};
+
+export default LQDScrollView;
diff --git a/components/scrollview/types.ts b/components/scrollview/types.ts
new file mode 100644
index 0000000..41b4432
--- /dev/null
+++ b/components/scrollview/types.ts
@@ -0,0 +1,11 @@
+import { StyleProp, ViewStyle } from 'react-native';
+
+interface ILQDScrollView {
+ children?: React.ReactNode;
+ refreshing?: boolean;
+ onRefresh?: () => void;
+ style?: StyleProp;
+ contentStyle?: StyleProp;
+}
+
+export type { ILQDScrollView };
diff --git a/components/search-ui/dummy.ts b/components/search-ui/dummy.ts
new file mode 100644
index 0000000..3871c68
--- /dev/null
+++ b/components/search-ui/dummy.ts
@@ -0,0 +1,57 @@
+const recents: Array = [
+ {
+ id: '1',
+ primaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119033/is3tphz7tf06jpj5g7x3.png',
+ secondaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119032/uwficdtvggd49apjfpt4.png',
+ primaryTitle: 'USDC',
+ secondaryTitle: 'ETH',
+ },
+ {
+ id: '2',
+ primaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119033/is3tphz7tf06jpj5g7x3.png',
+ secondaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119032/uwficdtvggd49apjfpt4.png',
+ primaryTitle: 'DAI',
+ secondaryTitle: 'WBTC',
+ },
+ {
+ id: '3',
+ primaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119033/is3tphz7tf06jpj5g7x3.png',
+ secondaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119032/uwficdtvggd49apjfpt4.png',
+ primaryTitle: 'USDT',
+ secondaryTitle: 'BNB',
+ },
+ {
+ id: '4',
+ primaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119033/is3tphz7tf06jpj5g7x3.png',
+ secondaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119032/uwficdtvggd49apjfpt4.png',
+ primaryTitle: 'Tether',
+ secondaryTitle: 'LINK',
+ },
+ {
+ id: '5',
+ primaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119033/is3tphz7tf06jpj5g7x3.png',
+ secondaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119032/uwficdtvggd49apjfpt4.png',
+ primaryTitle: 'BUSD',
+ secondaryTitle: 'MATIC',
+ },
+];
+
+const explore: Array = [
+ {
+ id: '1',
+ title: 'Stable pairs',
+ variant: 'primary',
+ },
+ {
+ id: '2',
+ title: 'High APRs',
+ variant: 'secondary',
+ },
+ {
+ id: '3',
+ title: 'Volatile pairs',
+ variant: 'tertiary',
+ },
+];
+
+export { recents, explore };
diff --git a/components/search-ui/explore-card.tsx b/components/search-ui/explore-card.tsx
new file mode 100644
index 0000000..50d5b08
--- /dev/null
+++ b/components/search-ui/explore-card.tsx
@@ -0,0 +1,73 @@
+import { View, StyleSheet, Text, Image, TouchableOpacity } from 'react-native';
+
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import useAppActions from '@/store/app/actions';
+import { ChartSquareIcon, DollarCoinSMIcon, FavoriteChartIcon } from '@/assets/icons';
+
+const config = {
+ primary: {
+ iconContainerColor: '#5A36BF',
+ icon: ,
+ },
+ secondary: {
+ iconContainerColor: '#375DFB',
+ icon: ,
+ },
+ tertiary: {
+ iconContainerColor: '#1F87AD',
+ icon: ,
+ },
+};
+
+const ExploreCard = ({ id, title, variant }: IExploreCard) => {
+ const { router, pathname } = useSystemFunctions();
+ const { searchIsFocused } = useAppActions();
+ const onPress = () => {
+ searchIsFocused(false);
+ // router.push(`/(tabs)/home/${id}`);
+ };
+
+ return (
+
+ {config[variant].icon}
+
+ {title}
+
+ );
+};
+
+export default ExploreCard;
+
+const styles = StyleSheet.create({
+ container: {
+ flexDirection: 'row',
+ alignSelf: 'stretch',
+ alignItems: 'center',
+ justifyContent: 'center',
+ gap: 8,
+ paddingHorizontal: 16,
+ paddingVertical: 12,
+ borderRadius: 10,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ backgroundColor: '#fff',
+ },
+
+ iconContainer: {
+ padding: 4.8,
+ alignItems: 'center',
+ justifyContent: 'center',
+ width: 24,
+ height: 24,
+ borderRadius: 7.2,
+ },
+
+ text: {
+ color: '#1E293B',
+ fontSize: adjustFontSizeForIOS(14, 2),
+ lineHeight: 18.48,
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+});
diff --git a/components/search-ui/index.tsx b/components/search-ui/index.tsx
new file mode 100644
index 0000000..51e991e
--- /dev/null
+++ b/components/search-ui/index.tsx
@@ -0,0 +1,200 @@
+import { useEffect, useState } from 'react';
+import { View, StyleSheet, ScrollView, FlatList, Text, Pressable } from 'react-native';
+
+import SearchSection from './sections';
+import RecentCard from './popular-asset-card';
+import LQDSearch from '../search';
+import LQDPoolPairPaper from '../pool-pair-paper';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import { usePoolActions } from '@/store/pools/actions';
+import { SearchEmptyStateIcon } from '@/assets/icons';
+import { ISearchSection } from './types';
+import LQShrimeLoader from '../loader';
+import { createArrayWithIndexes } from '@/utils/helpers';
+import { clearRecentSearchedPools } from '@/store/pools';
+import LQNoResult from '../no-result';
+import Modal from 'react-native-modal';
+
+const SearchUI = () => {
+ const { router, poolsState, dispatch } = useSystemFunctions();
+ const { searchPools, getPaginatedSearchPools } = usePoolActions();
+ const [searchText, setSearchText] = useState('');
+
+ const trendingPools = poolsState.trendingPools.data.slice(0, 10);
+ const searchedPools = poolsState.searchedPools.data;
+ const loading = poolsState.searchingPools;
+ const recentSearch = poolsState.recentSearchedPools;
+
+ const [showRecents, setShowRecents] = useState(true);
+ const [selectedAsset, setSelectedAsset] = useState(null);
+
+ const emptysearch = createArrayWithIndexes(10);
+
+ useEffect(() => {
+ if (poolsState.recentSearchedPools.length > 0) {
+ setShowRecents(true);
+ } else {
+ setShowRecents(false);
+ }
+ }, [poolsState.recentSearchedPools]);
+
+ const sections: Array> = [
+ {
+ title: 'Popular',
+ children: (
+
+ {recentSearch.map((recent, index) => {
+ return ;
+ })}
+
+ ),
+ onClear: () => dispatch(clearRecentSearchedPools()),
+ },
+ {
+ title: 'All assets',
+ children: (
+
+ {trendingPools.map((pool, index) => (
+
+ ))}
+
+ ),
+ },
+ ];
+
+ const searchResultSection = [
+ {
+ title: 'Results',
+ children: (
+
+ {
+ console.log(item.address);
+ return ;
+ }}
+ keyExtractor={(_, index) => index.toString()}
+ contentContainerStyle={{ gap: 24 }}
+ onEndReached={() => getPaginatedSearchPools(searchText)}
+ onEndReachedThreshold={0.1}
+ bounces={true}
+ showsVerticalScrollIndicator={false}
+ />
+
+ ),
+ },
+ ];
+
+ const sectionsToShow = searchedPools.length > 0 ? searchResultSection : showRecents ? sections : sections.slice(1);
+
+ const handleQuery = (value: string) => {
+ searchPools(value);
+ setSearchText(value);
+ };
+
+ const Loader = () =>
+ emptysearch.map((_, index) => (
+
+
+
+
+
+
+
+
+ ));
+
+ return (
+
+
+
+
+
+
+
+ {loading && }
+
+ {searchedPools.length === 0 && searchText && !loading && (
+
+ )}
+
+ {searchedPools.length === 0 && !searchText && !loading && (
+
+ {sectionsToShow.map((section, index) => (
+
+ ))}
+
+ )}
+
+ {searchedPools.length > 0 && !loading && (
+
+ {sectionsToShow.map((section, index) => (
+
+ ))}
+
+ )}
+
+
+ );
+};
+
+export default SearchUI;
+
+const styles = StyleSheet.create({
+ container: {
+ backgroundColor: '#fff',
+ flex: 1,
+ paddingHorizontal: 16,
+ paddingBottom: 68,
+ },
+
+ overlay: {
+ flex: 1,
+ justifyContent: 'flex-end',
+ width: '100%',
+ },
+
+ bottomSheet: {
+ position: 'absolute',
+ bottom: 0,
+ zIndex: 30,
+ width: '100%',
+ paddingBottom: 10,
+ paddingTop: 17,
+ backgroundColor: '#fff',
+ borderTopLeftRadius: 20,
+ borderTopRightRadius: 20,
+ gap: 33,
+ maxHeight: '90%',
+ height: '90%',
+ },
+
+ mapContainer: {
+ gap: 24,
+ alignItems: 'stretch',
+ },
+
+ loaderContainer: {
+ flex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ marginTop: 15,
+ marginBottom: 15,
+ paddingHorizontal: 16,
+ gap: 10,
+ },
+
+ loaderCenterContainer: { flex: 1, gap: 5 },
+
+ loaderOne: { height: 45, width: 45, borderRadius: 100 },
+ loaderTwo: { height: 20, width: '40%', borderRadius: 6 },
+ loaderThree: { height: 20, width: '50%', borderRadius: 6 },
+ loaderFour: { height: 20, width: 56, borderRadius: 6 },
+});
diff --git a/components/search-ui/popular-asset-card.tsx b/components/search-ui/popular-asset-card.tsx
new file mode 100644
index 0000000..5e03446
--- /dev/null
+++ b/components/search-ui/popular-asset-card.tsx
@@ -0,0 +1,72 @@
+import { View, StyleSheet, Text, TouchableOpacity } from 'react-native';
+
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import useAppActions from '@/store/app/actions';
+import { IPopularAssetCard } from './types';
+import LQDImage from '../image';
+
+const PopularAssetCard = ({ pool, navigationVariant = 'primary' }: IPopularAssetCard) => {
+ const { router, pathname } = useSystemFunctions();
+ const { searchIsFocused, showSearch } = useAppActions();
+ const onPress = () => {
+ searchIsFocused(false);
+ showSearch(true);
+ };
+
+ const tokenIconURL = pool.token0.logoUrl;
+ const title = 'USDC';
+
+ return (
+
+
+
+
+
+ {title}
+
+ );
+};
+
+export default PopularAssetCard;
+
+const styles = StyleSheet.create({
+ container: {
+ flexDirection: 'row',
+ alignSelf: 'stretch',
+ alignItems: 'center',
+ justifyContent: 'center',
+ gap: 8 + 6,
+ paddingHorizontal: 14,
+ paddingVertical: 8,
+ borderRadius: 10,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ backgroundColor: '#fff',
+ },
+
+ iconContainer: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+
+ icon: {
+ width: 24,
+ height: 24,
+ alignItems: 'center',
+ justifyContent: 'center',
+ borderRadius: 9999,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ marginRight: -6,
+ },
+
+ text: {
+ color: '#1E293B',
+ fontSize: adjustFontSizeForIOS(14, 2),
+ lineHeight: 18.48,
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+});
diff --git a/components/search-ui/search-placeholder.tsx b/components/search-ui/search-placeholder.tsx
new file mode 100644
index 0000000..92ddfea
--- /dev/null
+++ b/components/search-ui/search-placeholder.tsx
@@ -0,0 +1,79 @@
+import { SearchIcon, SettingsIcon } from '@/assets/icons';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import useAppActions from '@/store/app/actions';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { Platform, StyleSheet, Text, TouchableOpacity, View, StatusBar as RNStatusBar } from 'react-native';
+import LQShrimeLoader from '../loader';
+
+const SearchPlaceholder = () => {
+ const { router } = useSystemFunctions();
+ const { searchIsFocused: focusSearch, showSearch } = useAppActions();
+
+ const focusInput = () => {
+ focusSearch(true);
+ showSearch(true);
+ };
+
+ return (
+
+
+
+
+
+
+ Search...
+
+
+
+
+ router.navigate('/(settings)')}>
+
+
+
+ );
+};
+
+export default SearchPlaceholder;
+
+const styles = StyleSheet.create({
+ searchInnerWrapper: {
+ paddingHorizontal: 16,
+ backgroundColor: '#fff',
+ paddingTop: Platform.OS === 'android' ? RNStatusBar.currentHeight : 20,
+ paddingBottom: Platform.OS === 'android' ? -(RNStatusBar.currentHeight || 0) : -48,
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+
+ inputWrapper: {
+ paddingHorizontal: 16,
+ paddingVertical: 10,
+ backgroundColor: '#fff',
+ width: '90%',
+ },
+
+ inputContainer: {
+ paddingHorizontal: 16,
+ paddingVertical: 10,
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 8,
+ borderRadius: 13,
+ borderColor: '#EAEEF4',
+ borderWidth: 1,
+ shadowColor: 'rgba(15, 23, 42, 0.04)',
+ shadowOffset: { width: 0, height: 1 },
+ shadowOpacity: 0.3,
+ shadowRadius: 3,
+ elevation: 1,
+ backgroundColor: '#fff',
+ width: '100%',
+ },
+
+ inputPlaceholderText: {
+ fontSize: adjustFontSizeForIOS(14, 2),
+ lineHeight: 18.48,
+ color: '#94A3B8',
+ fontFamily: 'AeonikRegular',
+ },
+});
diff --git a/components/search-ui/sections.tsx b/components/search-ui/sections.tsx
new file mode 100644
index 0000000..bad7b33
--- /dev/null
+++ b/components/search-ui/sections.tsx
@@ -0,0 +1,105 @@
+import { StyleSheet, Text, Touchable, TouchableOpacity, View } from 'react-native';
+
+import { CloseIcon } from '@/assets/icons';
+
+const queries: Array<{ value: SectionQuery; label: string }> = [
+ { value: 'vol', label: 'Volume' },
+ { value: 'fees', label: 'Fees' },
+ { value: 'tvl', label: 'TVL' },
+];
+
+const SearchSection = ({ children, title, onClear, query, setQuery }: ISearchSection) => (
+
+
+ {title}
+ {query && setQuery && (
+
+ {queries.map((item) => (
+ setQuery(item.value)}
+ disabled={query === item.value}
+ >
+ {item.label}
+
+ ))}
+
+ )}
+
+
+ {children}
+
+);
+
+export default SearchSection;
+
+const styles = StyleSheet.create({
+ section: {
+ alignSelf: 'stretch',
+ gap: 20,
+ marginBottom: 24,
+ },
+
+ title: {
+ color: '#0F172A',
+ fontSize: 16,
+ lineHeight: 23.2,
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+
+ header: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ },
+
+ clear: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 4,
+ },
+
+ clearText: {
+ color: '#1E293B',
+ fontSize: 13,
+ lineHeight: 16.12,
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ },
+
+ queryContainer: {
+ flexDirection: 'row',
+ gap: 12,
+ alignItems: 'center',
+ },
+
+ query: {
+ paddingHorizontal: 8,
+ paddingVertical: 4,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+
+ queryText: {
+ color: '#94A3B8',
+ fontSize: 14,
+ lineHeight: 18.48,
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ },
+
+ activeQueryText: {
+ color: '#1E293B',
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+
+ activeQuery: {
+ borderRadius: 3,
+ borderWidth: 1,
+ borderColor: '#F1F5F9',
+ backgroundColor: '#F8FAFC',
+ },
+});
diff --git a/components/search-ui/types.ts b/components/search-ui/types.ts
new file mode 100644
index 0000000..dec9c55
--- /dev/null
+++ b/components/search-ui/types.ts
@@ -0,0 +1,23 @@
+import { Pool } from '@/store/pools/types';
+
+type SectionQuery = 'vol' | 'fees' | 'tvl';
+
+export interface ISearchSection {
+ title: string;
+ children: React.ReactElement;
+ onClear?: () => void;
+ query?: SectionQuery;
+ setQuery?: (query: SectionQuery) => void;
+ index: number;
+}
+
+export interface IPopularAssetCard {
+ pool: any;
+ navigationVariant?: 'primary' | 'secondary';
+}
+
+interface IExploreCard {
+ variant: 'primary' | 'secondary' | 'tertiary';
+ title: string;
+ id: string;
+}
diff --git a/components/search/index.tsx b/components/search/index.tsx
index d21e6f4..6aa0e1b 100644
--- a/components/search/index.tsx
+++ b/components/search/index.tsx
@@ -1,66 +1,68 @@
-import { useState, useEffect } from 'react';
-import { StyleSheet, View, FlatList, Text } from 'react-native';
+import { useEffect } from 'react';
+import { StyleSheet, View, TouchableOpacity } from 'react-native';
import { useForm } from 'react-hook-form';
-import debounce from 'lodash/debounce';
-import Animated, { useSharedValue, withTiming, useAnimatedStyle } from 'react-native-reanimated';
+import Animated from 'react-native-reanimated';
-import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { CloseIcon } from '@/assets/icons';
+import useAppActions from '@/store/app/actions';
import LQDInput from '../input';
+import { useDebouncedEffect } from '@/hooks/useDebouncedEffect';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
-const LQDSearch = () => {
+const LQDSearch = ({ setQuery }: { setQuery?: (val: string) => void }) => {
const { control, watch } = useForm();
- const [results, setResults] = useState([]);
- const [query, setQuery] = useState('');
- const searchBoxHeight = useSharedValue(0);
+ const { searchIsFocused: focusSearch, showSearch } = useAppActions();
+
+ const focusInput = () => {
+ focusSearch(true);
+ };
+
+ const blurInput = () => {
+ focusSearch(false);
+ };
- const debouncedSearch = debounce((text: string) => {
- if (text.length >= 2) {
- setResults([`Result for "${text}"`, `Another result for "${text}"`]);
- searchBoxHeight.value = withTiming(200, { duration: 300 });
- } else {
- setResults([]);
- searchBoxHeight.value = withTiming(0, { duration: 300 });
- }
- }, 300);
+ const closeSearch = () => {
+ setQuery && setQuery('');
+ blurInput();
+ showSearch(false);
+ };
+
+ const searchValue = watch('search');
useEffect(() => {
- const subscription = watch((value) => {
- const searchText = value.search || '';
- setQuery(searchText);
- debouncedSearch(searchText);
- });
- return () => subscription.unsubscribe();
- }, [watch]);
+ return () => {
+ blurInput();
+ };
+ }, []);
- const animatedStyle = useAnimatedStyle(() => ({
- height: searchBoxHeight.value,
- opacity: searchBoxHeight.value > 0 ? withTiming(1) : withTiming(0),
- }));
+ useDebouncedEffect(
+ function setSearchValue() {
+ setQuery && setQuery(searchValue);
+ },
+ [searchValue],
+ 300
+ );
return (
-
+
+
+
-
- {results.length > 0 ? (
- index.toString()}
- renderItem={({ item }) => {item}}
- />
- ) : (
- No results found
- )}
+
+
);
@@ -70,38 +72,35 @@ export default LQDSearch;
const styles = StyleSheet.create({
container: {
- flex: 1,
zIndex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 10,
},
- resultBox: {
- position: 'absolute',
- zIndex: 10,
- top: '100%',
- left: 0,
- marginTop: 10,
- width: '100%',
- overflow: 'hidden',
- backgroundColor: '#fff',
- borderRadius: 10,
- borderWidth: 1,
+ inputContainer: {
+ paddingHorizontal: 16,
+ paddingVertical: 10,
+ flexDirection: 'row',
+ justifyContent: 'center',
+ alignItems: 'center',
+ gap: 8,
+ borderRadius: 13,
borderColor: '#EAEEF4',
+ borderWidth: 1,
shadowColor: 'rgba(15, 23, 42, 0.04)',
- shadowOffset: { width: 0, height: 2 },
- shadowOpacity: 1,
- shadowRadius: 6,
- elevation: 4,
- },
- resultText: {
- padding: 10,
- fontSize: adjustFontSizeForIOS(16, 2),
- borderBottomWidth: 1,
- borderBottomColor: '#eee',
+ shadowOffset: { width: 0, height: 1 },
+ shadowOpacity: 0.3,
+ shadowRadius: 3,
+ elevation: 1,
+ backgroundColor: '#fff',
},
- noResultText: {
- padding: 10,
- fontSize: adjustFontSizeForIOS(16, 2),
- textAlign: 'center',
- color: '#999',
+
+ inputPlaceholderText: {
+ flex: 1,
+ fontSize: adjustFontSizeForIOS(14, 2),
+ lineHeight: 18.48,
+ color: '#94A3B8',
+ fontFamily: 'AeonikRegular',
},
});
diff --git a/components/slider/index.tsx b/components/slider/index.tsx
new file mode 100644
index 0000000..cd23a4f
--- /dev/null
+++ b/components/slider/index.tsx
@@ -0,0 +1,144 @@
+import React, { useState, useRef } from 'react';
+import { StyleSheet, FlatList, Animated, Dimensions, View, Text, Image, StyleProp, ViewStyle } from 'react-native';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { ISlider, Slider } from './types';
+const { width } = Dimensions.get('window');
+
+let PADDING_HORIZONTAL = 2 * 18; // Left and right padding
+let SLIDE_WIDTH = width - PADDING_HORIZONTAL; // Carousel Width
+let INDICATOR_SIDES = 6; // Length of each side of the indicator
+let CAROUSEL_HEIGHT = 82;
+
+const LQDSlider = ({ items }: ISlider) => {
+ const slider1 = require('../../assets/images/slider-1.png');
+ const slider2 = require('../../assets/images/slider-2.png');
+ const scrollX = useRef(new Animated.Value(0)).current;
+ const [viewIndex, setViewIndex] = useState(0);
+ const flatListRef = useRef(null);
+
+ const images: Record = {
+ strategy: slider1,
+ deposit: slider2,
+ };
+
+ const onViewChangeRef = useRef(({ viewableItems }: { viewableItems: any[] }) => {
+ setViewIndex(viewableItems[0]?.index);
+ });
+
+ const renderItem = ({ item }: { item: Slider }) => {
+ const { title, subTitle, variant } = item;
+ const bg = variant === 'deposit' ? '#EFFAF6' : '#EEEBFF';
+ const borderColor = variant === 'deposit' ? '#CBF5E5' : '#CAC2FF';
+ const textColor = variant === 'deposit' ? '#156146' : '#2B1664';
+ const imageDimensions = variant === 'deposit' ? { width: 114, height: 53, bottom: 0 } : { width: 130, height: 75, bottom: null };
+
+ return (
+
+
+ {title}
+ {subTitle}
+
+
+
+ );
+ };
+
+ return (
+
+
+
+
+ {items.length > 0 && (
+
+ {items.map((_, index) => (
+
+ ))}
+
+ )}
+
+ );
+};
+
+const styles = StyleSheet.create({
+ carouselWrap: {
+ height: CAROUSEL_HEIGHT,
+ position: 'relative',
+ },
+ eachDotsWrap: {
+ flexDirection: 'row',
+ alignSelf: 'center',
+ gap: INDICATOR_SIDES / 2,
+ backgroundColor: 'transparent',
+ marginTop: 10,
+ },
+ eachIndicatorDots: {
+ width: INDICATOR_SIDES,
+ height: INDICATOR_SIDES,
+ borderRadius: INDICATOR_SIDES / 2,
+ },
+ slideContainer: {
+ width: SLIDE_WIDTH,
+ justifyContent: 'center',
+ paddingHorizontal: 20,
+ position: 'relative',
+ borderWidth: 1,
+ borderRadius: 12,
+ zIndex: 5,
+ backgroundColor: 'white',
+ overflow: 'hidden',
+ },
+ textContainer: {
+ width: '70%',
+ gap: 6,
+ },
+ image: {
+ position: 'absolute',
+ right: -20,
+ height: 60,
+ width: 114,
+ zIndex: 0,
+ },
+ title: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(16, 1),
+ lineHeight: 17.92,
+ fontWeight: '700',
+ fontFamily: 'QuantaGroteskProBold',
+ },
+ subTitle: {
+ color: '#1E293B',
+ fontSize: adjustFontSizeForIOS(11, 1),
+ lineHeight: 13.64,
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ },
+ contentContainerStyle: {
+ overflow: 'hidden',
+ gap: 20,
+ paddingHorizontal: 17,
+ },
+});
+
+export default LQDSlider;
diff --git a/components/slider/types.ts b/components/slider/types.ts
new file mode 100644
index 0000000..f390974
--- /dev/null
+++ b/components/slider/types.ts
@@ -0,0 +1,12 @@
+import { StyleProp, ViewStyle } from 'react-native';
+
+export interface Slider {
+ title?: string;
+ subTitle?: string;
+ image?: string;
+ variant?: 'strategy' | 'deposit';
+}
+
+export interface ISlider {
+ items: Slider[];
+}
diff --git a/components/stack-header/index.tsx b/components/stack-header/index.tsx
index 2371091..16f5888 100644
--- a/components/stack-header/index.tsx
+++ b/components/stack-header/index.tsx
@@ -1,58 +1,64 @@
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
-
import { adjustFontSizeForIOS } from '@/utils/helpers';
-import { CaretLeftIcon } from '@/assets/icons';
+import { CaretLeftIcon, CloseIcon, LampIcon } from '@/assets/icons';
import { ILQDStackHeader } from './types';
-const LQDStackHeader = ({ navigation, options, hasTitle, style }: ILQDStackHeader) => {
+const LQDStackHeader = ({ navigation, options, hasTitle, leftIcon = 'back', rightIcon = '', style }: ILQDStackHeader) => {
+ const lIcon = {
+ close: ,
+ back: ,
+ };
+ const rIcon = {
+ bulb: ,
+ };
+
return (
-
-
-
- Back
+
+ navigation.goBack()}>
+ {leftIcon && lIcon[leftIcon]}
- {hasTitle && {`${options?.headerTitle!}`}}
+ {hasTitle && (
+
+ {`${options?.headerTitle}`}
+
+ )}
+
+ {rightIcon && rIcon[rightIcon]}
);
};
+
export default LQDStackHeader;
const styles = StyleSheet.create({
container: {
flexDirection: 'row',
- backgroundColor: '#FFF',
- paddingBottom: 4,
+ backgroundColor: '#fff',
+ paddingBottom: 10,
paddingHorizontal: 16,
- },
-
- hasTitleContainer: { justifyContent: 'center', alignItems: 'center' },
-
- back: {
- flexDirection: 'row',
alignItems: 'center',
- gap: 2,
+ justifyContent: 'space-between',
+ position: 'relative',
},
- hasTitleBack: {
+ titleContainer: {
position: 'absolute',
- left: 16,
- bottom: 4,
+ left: 0,
+ right: 0,
+ bottom: 10,
+ justifyContent: 'center',
+ alignItems: 'center',
},
- backText: {
+ title: {
color: '#1E293B',
- fontSize: adjustFontSizeForIOS(14, 2),
- lineHeight: 17.64,
+ fontSize: adjustFontSizeForIOS(16, 1),
+ lineHeight: 19.84,
fontWeight: '500',
fontFamily: 'AeonikMedium',
},
-
- title: {
- color: '#181E00',
- fontSize: adjustFontSizeForIOS(20, 3),
- lineHeight: 23.2,
- fontWeight: '500',
- fontFamily: 'AeonikMedium',
+ icon: {
+ zIndex: 2,
},
});
diff --git a/components/stack-header/types.ts b/components/stack-header/types.ts
index 92eb9e1..0b5d621 100644
--- a/components/stack-header/types.ts
+++ b/components/stack-header/types.ts
@@ -4,6 +4,8 @@ import { StyleProp, ViewStyle } from 'react-native';
interface ILQDStackHeader extends NativeStackHeaderProps {
style?: StyleProp;
hasTitle?: boolean;
+ leftIcon?: '' | 'close' | 'back';
+ rightIcon?: '' | 'bulb';
}
export type { ILQDStackHeader };
diff --git a/components/strategy-card/index.tsx b/components/strategy-card/index.tsx
new file mode 100644
index 0000000..9619c97
--- /dev/null
+++ b/components/strategy-card/index.tsx
@@ -0,0 +1,128 @@
+import { View, StyleSheet, Text, TouchableOpacity } from 'react-native';
+
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import useAppActions from '@/store/app/actions';
+import LQDImage from '../image';
+import { MoneysIcon } from '@/assets/icons';
+
+const LQDStrategyCard = (strategy: Strategy) => {
+ const { router } = useSystemFunctions();
+ const { searchIsFocused } = useAppActions();
+
+ const { id, metrics, steps } = strategy;
+
+ const onPress = (strategyId: string) => {
+ searchIsFocused(false);
+ router.push(`/details/${strategyId}`);
+ };
+
+ const username = 'Meister';
+ const tvl = metrics?.tvl;
+ const apy = metrics?.apy;
+
+ return (
+ onPress(strategy.id)} style={styles.container}>
+
+
+
+ @{username}
+
+
+
+
+
+
+ {steps?.length} action{steps?.length > 1 ? 's' : ''}...
+
+
+
+
+ Est. APY
+ {apy}%
+
+
+
+ TVL
+ {tvl}
+
+
+ );
+};
+
+export default LQDStrategyCard;
+
+const styles = StyleSheet.create({
+ container: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignSelf: 'stretch',
+ alignItems: 'center',
+ paddingHorizontal: 14,
+ paddingVertical: 12,
+ borderRadius: 10,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ backgroundColor: '#fff',
+ },
+
+ iconContainer: {
+ gap: 5,
+ },
+
+ profileContainer: {
+ width: '25%',
+ },
+
+ actionsContainer: {
+ width: '30%',
+ },
+
+ apyContainer: {
+ width: '22%',
+ },
+
+ tvlContainer: {
+ width: '19%',
+ },
+
+ icon: {
+ width: 24,
+ height: 24,
+ alignItems: 'center',
+ justifyContent: 'center',
+ borderRadius: 9999,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ marginRight: -6,
+ },
+
+ username: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(12, 2),
+ fontWeight: '500',
+ lineHeight: 16,
+ fontFamily: 'AeonikMedium',
+ },
+ key: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(12, 2),
+ fontWeight: '400',
+ fontFamily: 'AeonikMedium',
+ },
+ value: {
+ color: '#4691FE',
+ fontSize: adjustFontSizeForIOS(13, 2),
+ fontWeight: '500',
+ fontFamily: 'ClashDisplayMedium',
+ lineHeight: 15.6,
+ marginTop: 4,
+ },
+ actions: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(13, 2),
+ fontWeight: '500',
+ lineHeight: 16.12,
+ fontFamily: 'ClashDisplayMedium',
+ },
+});
diff --git a/components/strategy-card/types.ts b/components/strategy-card/types.ts
new file mode 100644
index 0000000..5c3a8b6
--- /dev/null
+++ b/components/strategy-card/types.ts
@@ -0,0 +1,4 @@
+export interface IStrategyCard {
+ strategy: any;
+ navigationVariant?: 'primary' | 'secondary';
+}
diff --git a/components/toast/index.tsx b/components/toast/index.tsx
new file mode 100644
index 0000000..660d464
--- /dev/null
+++ b/components/toast/index.tsx
@@ -0,0 +1,75 @@
+import React, { useEffect, useRef } from 'react';
+import { Animated, Text, StyleSheet, View, TouchableOpacity } from 'react-native';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import { useToastActions } from '@/store/toast/actions';
+import { CloseToastIcon, ToastVarintIcon } from '@/assets/icons';
+
+const LQToast = () => {
+ const { toast } = useSystemFunctions();
+ const { hideToast } = useToastActions();
+
+ const { title, description, variant, isVisible } = toast;
+
+ const iconsMap = {
+ success: ,
+ error: ,
+ };
+
+ const icon = iconsMap[variant] || null;
+
+ const slideAnim = useRef(new Animated.Value(-100)).current;
+
+ useEffect(() => {
+ if (isVisible) {
+ Animated.timing(slideAnim, {
+ toValue: 60,
+ duration: 300,
+ useNativeDriver: true,
+ }).start();
+ } else {
+ Animated.timing(slideAnim, {
+ toValue: -100,
+ duration: 300,
+ useNativeDriver: true,
+ }).start();
+ }
+ }, [isVisible, slideAnim]);
+
+ const handleDismiss = () => {
+ hideToast();
+ };
+
+ return (
+
+ {icon}
+
+ {title}
+ {description}
+
+
+
+
+
+ );
+};
+
+export default LQToast;
+
+const styles = StyleSheet.create({
+ toastContainer: {
+ position: 'absolute',
+ paddingHorizontal: 10,
+ paddingVertical: 13,
+ right: 20,
+ left: 20,
+ borderRadius: 5,
+ zIndex: 23456789,
+ flexDirection: 'row',
+ gap: 10,
+ backgroundColor: 'red',
+ },
+ success: { backgroundColor: '#EFFAF6', top: 10 },
+ error: { backgroundColor: '#FDEDF0', top: 10 },
+ title: { fontSize: 15, fontFamily: 'AeonikMedium', fontWeight: '700', color: '#0A0D14' },
+ description: { color: '#64748B', fontSize: 15, fontFamily: 'AeonikRegular', fontWeight: '500' },
+});
diff --git a/components/toast/types.ts b/components/toast/types.ts
new file mode 100644
index 0000000..cb31fb5
--- /dev/null
+++ b/components/toast/types.ts
@@ -0,0 +1,7 @@
+interface ILQToast {
+ title: string;
+ description: string;
+ variant: 'error' | 'success';
+}
+
+export type { ILQToast };
diff --git a/components/verify-email/index.tsx b/components/verify-email/index.tsx
index 58de107..a81c772 100644
--- a/components/verify-email/index.tsx
+++ b/components/verify-email/index.tsx
@@ -1,5 +1,5 @@
import { useState, useEffect } from 'react';
-import { View, Text, StyleSheet, Platform, StatusBar as RNStatusBar, ViewStyle, Alert, Touchable, TouchableOpacity } from 'react-native';
+import { View, Text, StyleSheet, Platform, StatusBar as RNStatusBar, ViewStyle, TouchableOpacity } from 'react-native';
import { StatusBar } from 'expo-status-bar';
import { OtpInput } from 'react-native-otp-entry';
import { useLoginWithEmail } from '@privy-io/expo';
@@ -9,26 +9,37 @@ import LQDKeyboardWrapper from '@/components/keyboard-wrapper';
import useSystemFunctions from '@/hooks/useSystemFunctions';
import { adjustFontSizeForIOS } from '@/utils/helpers';
import { useSmartAccountActions } from '@/store/smartAccount/actions';
+import { useToastActions } from '@/store/toast/actions';
const VerifyEmail = ({ email, isSignup }: { email: string; isSignup?: boolean }) => {
const { router } = useSystemFunctions();
const { login } = useSmartAccountActions();
+ const { showToast } = useToastActions();
const { loginWithCode, sendCode } = useLoginWithEmail({
onError: (error) => {
console.log('error', error.message);
setLoading(false);
- Alert.alert('An error occurred. Please check your email and try again.');
+
+ showToast({
+ title: 'Error',
+ description: 'An error occurred. Please check your email and try again.',
+ variant: 'error',
+ });
},
onLoginSuccess: async () => {
if (isSignup) {
return router.push('/setup');
}
login(email);
- // smart account stuff
},
onSendCodeSuccess: () => {
setResendDisabled(true);
+ showToast({
+ title: 'OTP sent.',
+ description: 'An OTP has been sent. Please check your email',
+ variant: 'success',
+ });
setCountdownTimer(30);
startCountdown();
},
@@ -40,7 +51,7 @@ const VerifyEmail = ({ email, isSignup }: { email: string; isSignup?: boolean })
const [countdownTimer, setCountdownTimer] = useState(30);
const [resendDisabled, setResendDisabled] = useState(true);
- const disableButton = !otp || otp.length < 6;
+ const disableButton = !otp || otp.length < 6 || loading;
const onSubmit = async () => {
try {
@@ -48,7 +59,9 @@ const VerifyEmail = ({ email, isSignup }: { email: string; isSignup?: boolean })
await loginWithCode({ code: otp, email: email as string });
} catch (error) {
- setError(true);
+ setLoading(false);
+ } finally {
+ setLoading(false);
}
};
@@ -58,7 +71,12 @@ const VerifyEmail = ({ email, isSignup }: { email: string; isSignup?: boolean })
setResendDisabled(true);
await sendCode({ email });
} catch (error) {
- Alert.alert('An error occurred. Please check your email and try again.');
+ showToast({
+ title: 'Error',
+ description: 'An error occurred. Please check your email and try again.',
+ variant: 'error',
+ });
+ } finally {
setResendDisabled(false);
}
};
@@ -84,7 +102,7 @@ const VerifyEmail = ({ email, isSignup }: { email: string; isSignup?: boolean })
return (
-
+
diff --git a/constants/abis/AerodromeConnector.json b/constants/abis/AerodromeConnector.json
index de1b3cc..9b2d4b2 100644
--- a/constants/abis/AerodromeConnector.json
+++ b/constants/abis/AerodromeConnector.json
@@ -1 +1,591 @@
-{"abi":[{"type":"constructor","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"version","type":"uint256","internalType":"uint256"},{"name":"plugin","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"_plugin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"aerodromeFactory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPoolFactory"}],"stateMutability":"view"},{"type":"function","name":"aerodromeRouter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRouter"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"function","name":"execute","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"caller","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"function","name":"getName","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"quoteDepositLiquidity","inputs":[{"name":"tokenA","type":"address","internalType":"address"},{"name":"tokenB","type":"address","internalType":"address"},{"name":"stable","type":"bool","internalType":"bool"},{"name":"amountA","type":"uint256","internalType":"uint256"},{"name":"amountB","type":"uint256","internalType":"uint256"},{"name":"balanceTokenRatio","type":"bool","internalType":"bool"}],"outputs":[{"name":"amountAOut","type":"uint256","internalType":"uint256"},{"name":"amountBOut","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"AeroRewardsClaimed","inputs":[{"name":"guageAddress","type":"address","indexed":true,"internalType":"address"},{"name":"rewardToken","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"FeesWithdrawn","inputs":[{"name":"poolAddress","type":"address","indexed":true,"internalType":"address"},{"name":"token0","type":"address","indexed":false,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"token1","type":"address","indexed":false,"internalType":"address"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LPTokenStaked","inputs":[{"name":"guageAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LPTokenUnStaked","inputs":[{"name":"guageAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"recepient","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"LiquidityAdded","inputs":[{"name":"tokenA","type":"address","indexed":true,"internalType":"address"},{"name":"tokenB","type":"address","indexed":true,"internalType":"address"},{"name":"amountA","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountB","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"liquidity","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LiquidityRemoved","inputs":[{"name":"tokenA","type":"address","indexed":true,"internalType":"address"},{"name":"tokenB","type":"address","indexed":true,"internalType":"address"},{"name":"amountA","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountB","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"liquidity","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Swapped","inputs":[{"name":"tokenIn","type":"address","indexed":true,"internalType":"address"},{"name":"tokenOut","type":"address","indexed":true,"internalType":"address"},{"name":"amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountOut","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AerodromeUtils_ExceededMaxPriceImpact","inputs":[]},{"type":"error","name":"AerodromeUtils_ExceededMaxSlippage","inputs":[]},{"type":"error","name":"AerodromeUtils_ExceededMaxValueLoss","inputs":[]},{"type":"error","name":"DeadlineExpired","inputs":[]},{"type":"error","name":"ExecutionFailed","inputs":[{"name":"reason","type":"string","internalType":"string"}]},{"type":"error","name":"IncorrectETHAmount","inputs":[]},{"type":"error","name":"InsufficientLiquidity","inputs":[]},{"type":"error","name":"InvalidSelector","inputs":[]},{"type":"error","name":"InvalidVersionNumber","inputs":[]},{"type":"error","name":"PoolDoesNotExist","inputs":[]},{"type":"error","name":"SlippageExceeded","inputs":[]},{"type":"error","name":"UnauthorizedCaller","inputs":[]}],"bytecode":{"object":"0x610120604052346200018057620040c8803803806200001e81620001ac565b928339810190606081830312620001805780516001600160401b0392908381116200018057820181601f8201121562000180578051938411620001985760209362000072601f8201601f19168601620001ac565b92818452858284010111620001805784915f5b828110620001845750505f908301909101528183015160409290920151926001600160a01b0384168403620001805782156200016e57815191012060805260a05260c05273cf77a3ba9a5ca399b7c97c74d54e5b1beb874e4360e05261010073420dd381b31aef6683db6b902084cb0ffece40da8152604051613ef59182620001d383396080518261060c015260a05182610672015260c0518281816106df0152610912015260e0518281816104ce01528181611476015281816115140152818161167e01528181611db0015261213a01525181818161053c01528181610aa40152611cca0152f35b60405163ad92452760e01b8152600490fd5b5f80fd5b818101840151858201850152830162000085565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b03811183821017620001985760405256fe6101a0604052600436101561001b575b3615610019575f80fd5b005b5f3560e01c806309c5eabe146107035780630cfd9ad4146106955780630d8e6e2c1461063d57806317d7de7c146105d65780636accdc1314610560578063c45acd23146104f2578063e18e3a68146104845763e69224d40361000f57346104805760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805773ffffffffffffffffffffffffffffffffffffffff6004351660043503610480576100cf6107e4565b6044351515604435036104805760a435151560a43503610480576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152821660248201526044803515159082015260843590606480359060209083908173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f91610463575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f92610432575b505f925f915b600283106102be575b5050604080517fc92de3ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152958616602482015260448035151590820152949092166064850152506084830191909152818060a48101038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3576040915f915f91610284575b5082519182526020820152f35b90506102a69150823d84116102ac575b61029e81836108ca565b810190612cdd565b5f610277565b503d610294565b6040513d5f823e3d90fd5b60a4949192943561040d575b604051907fce700c2900000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff60043516600483015273ffffffffffffffffffffffffffffffffffffffff871660248301526044351515604483015273ffffffffffffffffffffffffffffffffffffffff851660648301528060848301528360a483015260608260c48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b3576103a9925f80915f936103d2575b5061039d906103a39394612be6565b95612be6565b92612d0e565b93604435156044356103c8575b6103c357600101916101d0565b6101d9565b5060a435156103b6565b6103a3935061039d92506103fe915060603d606011610406575b6103f681836108ca565b810190612cf3565b93509161038e565b503d6103ec565b61042b919261042360443582848a60043561358d565b919092613438565b91906102ca565b61045591925060203d60201161045c575b61044d81836108ca565b810190612b2c565b905f6101ca565b503d610443565b61047a9150823d841161045c5761044d81836108ca565b5f61018c565b5f80fd5b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6105b06105d292369060040161075a565b6105b86107e4565b9161090b565b604051918291602083526020830190610788565b0390f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610480576105d26040517f00000000000000000000000000000000000000000000000000000000000000006020820152602081526105be81610892565b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6107536105d292369060040161075a565b339161090b565b9181601f840112156104805782359167ffffffffffffffff8311610480576020838186019501011161048057565b91908251928382525f5b8481106107d05750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b602081830181015184830182015201610792565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b3590811515820361048057565b67ffffffffffffffff811161084957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761084957604052565b6040810190811067ffffffffffffffff82111761084957604052565b6060810190811067ffffffffffffffff82111761084957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761084957604052565b915f9190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603612b2457915b816004116104805783357fffffffff00000000000000000000000000000000000000000000000000000000167f5a47ddc3000000000000000000000000000000000000000000000000000000008103611ba757505f925f946101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc825f968101030112610480576109e260048201610807565b610180526109f260248201610807565b61014052610a0260448201610828565b90610a0f60e48201610828565b610a1c6101048301610807565b906101248301354211611b7d576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff90811660048401521660248201528415156044820152906020828060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156102b3575f92611b5c575b5073ffffffffffffffffffffffffffffffffffffffff821615611b32575f60648501356119cf575b6084850135611816575b5091610b1182612d1b565b92606485013560a0526084850135610160525f610120525b60026101205110611441575b5050610b4090612d1b565b818082111561143257610b5291612be6565b61271081029080820461271014901517156112e757606491610b7391613494565b11611408576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015216602482015282151560448201529060208260648173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f916113eb575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f926113ca575b50604080517fc92de3ec000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015290811660248301528515156044830152841660648201526084810188905291908260a48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3575f925f956113a3575b5060a482013583108015611396575b61136c5773ffffffffffffffffffffffffffffffffffffffff610d1c612dd9565b9460405192610d2a84610876565b8261014051168452826101805116602085015215156040840152166060820152610d5384612b88565b52610d5d83612b88565b50604051927f5509a1ac00000000000000000000000000000000000000000000000000000000845260848201356004850152604060248501525f8480610da66044820185612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b357610e2c610ded610de25f94610e6d988691611352575b50612bc2565b516064860135612d0e565b9685606486013511841461134b57610e09866064870135612be6565b945b81806084830135118614611342576084610e26920135612be6565b90612d0e565b60405195869283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9182156102b357610eb3935f93611314575b50610eac91610ea691612d0e565b91612bc2565b5190612d0e565b818110611286575b505060a051611134575b61016051610fa2575b505090610f73610f9f9260405173ffffffffffffffffffffffffffffffffffffffff6101405116907f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f773ffffffffffffffffffffffffffffffffffffffff61018051169180610f50868b8a846040919493926060820195825260208201520152565b0390a3604051948593602085016040919493926060820195825260208201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b90565b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101405116145f1461107957803b15611075578280916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083526101605160048401525af1801561106a57611052575b509161104b828080610f7395610f9f989761016051905af16110456134cb565b50613528565b9192610ece565b61105c8391610835565b611066575f611025565b5080fd5b6040513d85823e3d90fd5b8280fd5b506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101605173ffffffffffffffffffffffffffffffffffffffff9283166004830152602482015261014051909291602091849160449183918691165af1908115611128575091610f7391610f9f94936110f9575b5061104b565b61111a9060203d602011611121575b61111281836108ca565b810190612b58565b505f6110f3565b503d611108565b604051903d90823e3d90fd5b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101805116145f146111e457803b15610480575f80916024604051809481937f2e1a7d4d00000000000000000000000000000000000000000000000000000000835260a05160048401525af180156102b3576111d1575b506111cc8280808060a051865af16110456134cb565b610ec5565b6111dc919250610835565b5f905f6111b6565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260a05173ffffffffffffffffffffffffffffffffffffffff831660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611267575b50610ec5565b61127f9060203d6020116111215761111281836108ca565b505f611261565b6112909082612be6565b61271081029080820461271014901517156112e75760c8916112b191613494565b116112bd575f80610ebb565b60046040517ffe3cf204000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610ea691935091611339610eac933d805f833e61133181836108ca565b810190612bf3565b93915091610e98565b50508390612d0e565b8394610e0b565b61136691503d8088833e61133181836108ca565b5f610ddc565b60046040517fc990cf68000000000000000000000000000000000000000000000000000000008152fd5b5060c48201358510610cfb565b9094506113c091925060403d6040116102ac5761029e81836108ca565b919091935f610cec565b6113e491925060203d60201161045c5761044d81836108ca565b905f610c54565b6114029150823d841161045c5761044d81836108ca565b5f610c16565b60046040517fd0bcb760000000000000000000000000000000000000000000000000000000008152fd5b9061143c91612be6565b610b52565b90979998816117b7575b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815260a0517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611798575b506040517f095ea7b3000000000000000000000000000000000000000000000000000000008152610160517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61014051165af180156102b357611779575b50604051610100527f5a47ddc300000000000000000000000000000000000000000000000000000000610100515273ffffffffffffffffffffffffffffffffffffffff6101805116600461010051015273ffffffffffffffffffffffffffffffffffffffff61014051166024610100510152851515604461010051015260a05160646101005101526101605160846101005101525f60a46101005101525f60c461010051015273ffffffffffffffffffffffffffffffffffffffff891660e4610100510152610124850135610104610100510152606061010051610124610100515f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af160e05260e051156102b357611705905f6080525f60c0525f9060e051611730575b6116f56116ff916116d660805160a051612be6565b60a0526116e860c05161016051612be6565b6101605260805190612d0e565b9b60c05190612d0e565b9b612d0e565b97851586611728575b61172357600161012051016101205290610b29565b610b35565b50811561170e565b905060603d606011611772575b6116f5611762826117546116ff94610100516108ca565b610100510161010051612cf3565b9160805260c052929150506116c1565b503d61173d565b6117919060203d6020116111215761111281836108ca565b505f611585565b6117b09060203d6020116111215761111281836108ca565b505f6114e7565b61180a6117fe876101605160a05173ffffffffffffffffffffffffffffffffffffffff610140511673ffffffffffffffffffffffffffffffffffffffff6101805116612e30565b6101605160a051613438565b6101605260a05261144b565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff610140511614806119c6575b1561191a57608485013534036118f0577342000000000000000000000000000000000000063b156118e2576040517fd0e30db00000000000000000000000000000000000000000000000000000000081528181600481347342000000000000000000000000000000000000065af180156118e5576118ce575b50505b5f610b06565b6118d88291610835565b6118e257806118c5565b80fd5b6040513d84823e3d90fd5b60046040517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201523060248201526084860135604482015290602082806064810103818473ffffffffffffffffffffffffffffffffffffffff61014051165af190811561112857506119a7575b506118c8565b6119bf9060203d6020116111215761111281836108ca565b505f6119a1565b5034151561184c565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff61018051161480611b29575b15611a9557606485013534036118f0577342000000000000000000000000000000000000063b15610480576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f81600481347342000000000000000000000000000000000000065af180156102b357611a84575b50610afc565b611a8e9150610835565b5f80611a7e565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015230602483015260648781013560448401526101805160209284929183915f91165af180156102b357611b0a5750610afc565b611b229060203d6020116111215761111281836108ca565b505f611a7e565b50341515611a05565b60046040517f9c8787c0000000000000000000000000000000000000000000000000000000008152fd5b611b7691925060203d60201161045c5761044d81836108ca565b905f610ad4565b60046040517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b90507f0dede6c4000000000000000000000000000000000000000000000000000000008103611fe157507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8361010092810103011261048057611c0c60048301610807565b91611c1960248201610807565b91611c2660448301610828565b93611c3360c48401610807565b73ffffffffffffffffffffffffffffffffffffffff60e4850135921692824211611b7d576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528716602482015287151560448201526020818060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156102b35773ffffffffffffffffffffffffffffffffffffffff915f91611fc2575b5016968715611b32576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015230602483015260648681013560448401526020908390815f8c5af19182156102b357611e0b92611fa3575b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166004820181905260648801356024830152989092602091849182905f9082906044820190565b03925af180156102b35773ffffffffffffffffffffffffffffffffffffffff98604095610104945f93611f84575b5086519a8b9687957f0dede6c40000000000000000000000000000000000000000000000000000000087528a6004880152828d1660248801521515604487015260648b0135606487015260848b0135608487015260a48b013560a48701521660c485015260e48401525af19283156102b3575f945f94611f26575b506040805186815260208101869052606494909401359084015273ffffffffffffffffffffffffffffffffffffffff16917fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b90606090a3604051916020830152604082015260408152610f9f816108ae565b73ffffffffffffffffffffffffffffffffffffffff95507fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b919450611f799060403d6040116102ac5761029e81836108ca565b959095949150611eb4565b611f9c9060203d6020116111215761111281836108ca565b505f611e39565b611fbb9060203d6020116111215761111281836108ca565b505f611d87565b611fdb915060203d60201161045c5761044d81836108ca565b5f611d0f565b9293927fcac88ea90000000000000000000000000000000000000000000000000000000092919083810361282c5750840160a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301126104805760048501359160248087013593604488013567ffffffffffffffff811161048057880194846023870112156104805760048601359661207c88612b70565b9660409861208c8a51998a6108ca565b80895260209786898b019260071b84010192818411610480578701915b8383106127cc575050505060846120c260648c01610807565b9a0135928342116127a35773ffffffffffffffffffffffffffffffffffffffff6120eb89612b88565b515116955f8083612658575b6124fe575b505088517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820181905260248201839052929088816044815f8c5af180156124f4576124d7575b5088519b8c957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8097019d8e116124ab578a5f8d9e9f8c839f9d9e73ffffffffffffffffffffffffffffffffffffffff926121d891612bd2565b510151169b8a61221e825194859384937f5509a1ac0000000000000000000000000000000000000000000000000000000085528b60048601528401526044830190612c6d565b0381895afa9081156124a1575f91612487575b5080519088820191821161245b57879161224a91612bd2565b5110612432578c519b8c9485948552600485015286898501526044840160a0905260a4840161227891612c6d565b9173ffffffffffffffffffffffffffffffffffffffff166064840152608483015203815a5f948591f1968715612428575f9761240c575b5086518281019081116123e0576122c69088612bd2565b51106123b7576122d586612b88565b5191865191820191821161238c5750957fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb916123148798839798612bd2565b51825191825287820152a3805192839182018380840152815180915283606084019201935f5b82811061237557505050610f9f9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b85518452948101948694509281019260010161233a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b600487517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b837f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124219197503d805f833e61133181836108ca565b955f6122af565b88513d5f823e3d90fd5b60048d517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b897f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b61249b91503d805f833e61133181836108ca565b5f612231565b8e513d5f823e3d90fd5b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124ed90893d8b116111215761111281836108ca565b505f61217e565b8b513d5f823e3d90fd5b88818061264f575b156125bc575090503461259357734200000000000000000000000000000000000006803b1561106657816004918c51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af1801561258957612575575b50505b5f806120fc565b61257f8291610835565b6118e2578061256b565b8b513d84823e3d90fd5b60048a517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b8b517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff939093166004840152306024840152604483018290528260648184805af19081156126445750612627575b5061256e565b61263d90883d8a116111215761111281836108ca565b505f612621565b8b51903d90823e3d90fd5b50341515612506565b507342000000000000000000000000000000000000068089148061279a575b15612711578334036126e857803b15610480575f6004918d51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af180156126de576126cd575b50806120f7565b6126d79150610835565b5f806126c6565b8c513d5f823e3d90fd5b60048c517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b508a517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523060248201526044810184905289816064815f8d5af180156126de5790829161277d575b506120f7565b612793908b3d8d116111215761111281836108ca565b505f612777565b50341515612677565b600489517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b60808383031261048057896080918d8051906127e782610876565b6127f087610807565b82526127fd848801610807565b8483015261280c818801610828565b90820152606061281d818801610807565b908201528152019201916120a9565b9394937f6e553f6500000000000000000000000000000000000000000000000000000000935083146128825760046040517f7352d91c000000000000000000000000000000000000000000000000000000008152fd5b83907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604092839281010301126104805773ffffffffffffffffffffffffffffffffffffffff60246128d660048701610807565b95013594168151937f72f702f30000000000000000000000000000000000000000000000000000000085526020948581600481865afa908115612ad6579073ffffffffffffffffffffffffffffffffffffffff915f91612b07575b5084517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201523060248201526044810189905291169086816064815f865af18015612afd57612ae0575b5083517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101889052908690829060449082905f905af18015612ad657612ab9575b50813b156104805782519081526004810186905273ffffffffffffffffffffffffffffffffffffffff841660248201525f8160448183865af18015612aaf5791610f739391610f9f969593612aa0575b507ffa2529c0b8e878c5cfbd265efb60d6c35f0ba5ad1132da46b8bde097baac8a49858351898152a251948593840190929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b612aa990610835565b5f612a49565b83513d5f823e3d90fd5b612acf90863d88116111215761111281836108ca565b505f6129f9565b84513d5f823e3d90fd5b612af690873d89116111215761111281836108ca565b505f612997565b85513d5f823e3d90fd5b612b1e9150873d891161045c5761044d81836108ca565b5f612931565b50339161094e565b90816020910312610480575173ffffffffffffffffffffffffffffffffffffffff811681036104805790565b90816020910312610480575180151581036104805790565b67ffffffffffffffff81116108495760051b60200190565b805115612b955760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805160011015612b955760400190565b8051821015612b955760209160051b010190565b919082039182116112e757565b60209081818403126104805780519067ffffffffffffffff821161048057019180601f84011215610480578251612c2981612b70565b93612c3760405195866108ca565b818552838086019260051b820101928311610480578301905b828210612c5e575050505090565b81518152908301908301612c50565b9081518082526020808093019301915f5b828110612c8c575050505090565b8351805173ffffffffffffffffffffffffffffffffffffffff908116875281840151811687850152604080830151151590880152606091820151169086015260809094019392810192600101612c7e565b9190826040910312610480576020825192015190565b90816060910312610480578051916040602083015192015190565b919082018092116112e757565b606073ffffffffffffffffffffffffffffffffffffffff916004604051809481937f0902f1ac000000000000000000000000000000000000000000000000000000008352165afa80156102b357610f9f915f905f92612d7b575b50613a63565b9050612d96915060603d606011610406576103f681836108ca565b50905f612d75565b90816020910312610480575160ff811681036104805790565b60ff166012039060ff82116112e757565b60ff16604d81116112e757600a0a90565b60409060405191612de983610892565b6001835282915f5b602080821015612e2857835160209291612e0a82610876565b5f82525f818301525f868301525f6060830152828801015201612df1565b505091925050565b9493909291946040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff87165afa9081156102b357612e9e91612e99915f91613409575b50612db7565b612dc8565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff8a165afa9081156102b357612edf91612e99915f916134095750612db7565b96604051947fd4b6846d00000000000000000000000000000000000000000000000000000000865260208660048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9586156102b357612fa0966040915f916133ea575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152808b1660248301528815156044830152909116606482015296879081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f965f9a6133c3575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528916602482015286151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357876020916130a7965f916133a6575b506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35787945f9461336f575b5081613347575f985b899c8a155f1461333657906130f19794939291613bba565b925b83156133145750613102612dd9565b91861561330d57815b87156133075785905b604051967fd4b6846d00000000000000000000000000000000000000000000000000000000885260208860048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9485156102b35773ffffffffffffffffffffffffffffffffffffffff60209681966044965f9c8d936132e6575b508390816040519661319688610876565b1686521689850152151560408401521660608201526131b487612b88565b526131be86612b88565b508988146132df57505b60405196879384927f095ea7b300000000000000000000000000000000000000000000000000000000845273cf77a3ba9a5ca399b7c97c74d54e5b1beb874e436004850152886024850152165af19182156102b357613270935f936132c0575b5060405193849283927fcac88ea9000000000000000000000000000000000000000000000000000000008452600484015284602484015260a0604484015260a4830190612c6d565b30606483015242608483015203818373cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435af19081156102b3575f916132a857509190565b6132bc91503d805f833e61133181836108ca565b9190565b6132d89060203d6020116111215761111281836108ca565b505f613228565b90506131c8565b84919350613300908b3d8d1161045c5761044d81836108ca565b9290613185565b80613114565b849161310b565b955050505050604051613326816108ae565b6002815260403660208301379190565b613341979391613bba565b926130f3565b806133555760015b986130d9565b61335f8183613a63565b6133698d8b613a63565b1061334f565b945092506020843d60201161339e575b8161338c602093836108ca565b8101031261048057869351925f6130d0565b3d915061337f565b6133bd9150833d851161045c5761044d81836108ca565b5f61304f565b9099506133e091965060403d6040116102ac5761029e81836108ca565b959095985f612fc9565b613403915060203d60201161045c5761044d81836108ca565b5f612f39565b61342b915060203d602011613431575b61342381836108ca565b810190612d9e565b5f612e93565b503d613419565b9293929091156134635790610eac61345d610f9f9361345687612b88565b5190612be6565b94612bc2565b610eac61347861347e93613456879697612b88565b93612bc2565b91565b818102929181159184041417156112e757565b811561349e570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b3d15613523573d9067ffffffffffffffff8211610849576040519161351860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846108ca565b82523d5f602084013e565b606090565b1561352f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152fd5b919493926040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff89165afa9081156102b3576135f391612e99915f916134095750612db7565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff88165afa9081156102b35761363491612e99915f916134095750612db7565b96604051927fd4b6846d00000000000000000000000000000000000000000000000000000000845260208460048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3576136f5946040915f91613a44575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a16600483015280891660248301528a15156044830152909116606482015294859081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f945f9a613a1d575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528716602482015288151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357896020916137fb965f916133a657506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35789945f946139e6575b50816139be575f965b879c88155f146139ad57906138459794939291613bba565b905b81156133145750613856612dd9565b9186156139a657835b871561399e5750925b6040517fd4b6846d00000000000000000000000000000000000000000000000000000000815260208160048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b357613950965f9673ffffffffffffffffffffffffffffffffffffffff93889361397b575b50839081604051966138e588610876565b1686521660208501521515604084015216606082015261390483612b88565b5261390e82612b88565b5060405193849283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3575f916132a857509190565b849193506139979060203d60201161045c5761044d81836108ca565b92906138d4565b905092613868565b809361385f565b6139b8979391613bba565b90613847565b806139cc5760015b9661382d565b6139d68183613a63565b6139e08d89613a63565b106139c6565b945092506020843d602011613a15575b81613a03602093836108ca565b8101031261048057889351925f613824565b3d91506139f6565b909950613a3a91945060403d6040116102ac5761029e81836108ca565b939093985f61371e565b613a5d915060203d60201161045c5761044d81836108ca565b5f61368e565b906b033b2e3c9fd0803ce8000000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8284099282810292838086109503948086039514613bac5784831115610480578291098119600181018091116112e757613ae090831680930494600184805f030401908584119003613481565b9203041781600302916003830481036112e7576002809318613b028183613481565b84038481116112e757613b1491613481565b613b1e8183613481565b84038481116112e757613b3091613481565b613b3a8183613481565b84038481116112e757613b4c91613481565b613b568183613481565b84038481116112e757613b6891613481565b613b728183613481565b8403908482116112e757613b9091613b8991613481565b8092613481565b83039283116112e757610f9f92613ba691613481565b90613481565b505080925015610480570490565b94613be381613bdd87613bd781613be997999d989b9c9a9c613481565b99613481565b95613481565b97613481565b92670de0b6b3a76400009384613bff878a613481565b049185613c1881613c108a86613481565b04968b613481565b049315613c575750505090613c2c91612be6565b8181029181830414901517156112e757613c4c613c5292610f9f95612d0e565b90613494565b613494565b601e919492959650145f14613d1857613c708185612d0e565b91623cda2985810290810486036112e757826009026009810484036112e757613c9891612d0e565b90623cda2090808202918204036112e757613cc893613ba6613cbd92613cc294612d0e565b613da8565b93612d0e565b916107cd92808402938404036112e757613ceb92613ce591612be6565b94612d0e565b926107ca93808502948504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b613d228185612d0e565b91619ab185810290810486036112e75782613d3c91612d0e565b90619ab090808202918204036112e757613d6093613ba6613cbd92613cc294612d0e565b918260c7029260c78404036112e757613d7c92613ce591612be6565b928360c6029360c68504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b8015613ef057806001700100000000000000000000000000000000831015613eda575b60048268010000000000000000613e82941015613ecd575b640100000000811015613ec0575b62010000811015613eb3575b610100811015613ea7575b6010811015613e9b575b1015613e93575b613e238184613494565b0160011c613e318184613494565b0160011c613e3f8184613494565b0160011c613e4d8184613494565b0160011c613e5b8184613494565b0160011c613e698184613494565b0160011c613e778184613494565b0160011c8092613494565b80821015613e8e575090565b905090565b60011b613e19565b811c9160021b91613e12565b60081c91811b91613e08565b60101c9160081b91613dfd565b60201c9160101b91613df1565b60401c9160201b91613de3565b5050608081901c68010000000000000000613dcb565b505f9056","sourceMap":"585:11320:35:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;585:11320:35;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;-1:-1:-1;;;585:11320:35;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;585:11320:35;;;;;;880:13:30;;876:48;;585:11320:35;;;;943:23:30;935:31;;976:19;;1005:17;;768:42:37;1278:43:35;;1331:50;862:42:37;1331:50:35;;585:11320;;;;;;;;935:31:30;585:11320:35;;;;;976:19:30;585:11320:35;;;;;1005:17:30;585:11320:35;;;;;;;;;;1278:43;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;876:48:30;585:11320:35;;-1:-1:-1;;;902:22:30;;;;;585:11320:35;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;-1:-1:-1;585:11320:35;;;;;;;;-1:-1:-1;;585:11320:35;;;-1:-1:-1;;;;;585:11320:35;;;;;;;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x6101a0604052600436101561001b575b3615610019575f80fd5b005b5f3560e01c806309c5eabe146107035780630cfd9ad4146106955780630d8e6e2c1461063d57806317d7de7c146105d65780636accdc1314610560578063c45acd23146104f2578063e18e3a68146104845763e69224d40361000f57346104805760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805773ffffffffffffffffffffffffffffffffffffffff6004351660043503610480576100cf6107e4565b6044351515604435036104805760a435151560a43503610480576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152821660248201526044803515159082015260843590606480359060209083908173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f91610463575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f92610432575b505f925f915b600283106102be575b5050604080517fc92de3ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152958616602482015260448035151590820152949092166064850152506084830191909152818060a48101038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3576040915f915f91610284575b5082519182526020820152f35b90506102a69150823d84116102ac575b61029e81836108ca565b810190612cdd565b5f610277565b503d610294565b6040513d5f823e3d90fd5b60a4949192943561040d575b604051907fce700c2900000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff60043516600483015273ffffffffffffffffffffffffffffffffffffffff871660248301526044351515604483015273ffffffffffffffffffffffffffffffffffffffff851660648301528060848301528360a483015260608260c48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b3576103a9925f80915f936103d2575b5061039d906103a39394612be6565b95612be6565b92612d0e565b93604435156044356103c8575b6103c357600101916101d0565b6101d9565b5060a435156103b6565b6103a3935061039d92506103fe915060603d606011610406575b6103f681836108ca565b810190612cf3565b93509161038e565b503d6103ec565b61042b919261042360443582848a60043561358d565b919092613438565b91906102ca565b61045591925060203d60201161045c575b61044d81836108ca565b810190612b2c565b905f6101ca565b503d610443565b61047a9150823d841161045c5761044d81836108ca565b5f61018c565b5f80fd5b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6105b06105d292369060040161075a565b6105b86107e4565b9161090b565b604051918291602083526020830190610788565b0390f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610480576105d26040517f00000000000000000000000000000000000000000000000000000000000000006020820152602081526105be81610892565b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6107536105d292369060040161075a565b339161090b565b9181601f840112156104805782359167ffffffffffffffff8311610480576020838186019501011161048057565b91908251928382525f5b8481106107d05750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b602081830181015184830182015201610792565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b3590811515820361048057565b67ffffffffffffffff811161084957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761084957604052565b6040810190811067ffffffffffffffff82111761084957604052565b6060810190811067ffffffffffffffff82111761084957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761084957604052565b915f9190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603612b2457915b816004116104805783357fffffffff00000000000000000000000000000000000000000000000000000000167f5a47ddc3000000000000000000000000000000000000000000000000000000008103611ba757505f925f946101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc825f968101030112610480576109e260048201610807565b610180526109f260248201610807565b61014052610a0260448201610828565b90610a0f60e48201610828565b610a1c6101048301610807565b906101248301354211611b7d576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff90811660048401521660248201528415156044820152906020828060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156102b3575f92611b5c575b5073ffffffffffffffffffffffffffffffffffffffff821615611b32575f60648501356119cf575b6084850135611816575b5091610b1182612d1b565b92606485013560a0526084850135610160525f610120525b60026101205110611441575b5050610b4090612d1b565b818082111561143257610b5291612be6565b61271081029080820461271014901517156112e757606491610b7391613494565b11611408576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015216602482015282151560448201529060208260648173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f916113eb575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f926113ca575b50604080517fc92de3ec000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015290811660248301528515156044830152841660648201526084810188905291908260a48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3575f925f956113a3575b5060a482013583108015611396575b61136c5773ffffffffffffffffffffffffffffffffffffffff610d1c612dd9565b9460405192610d2a84610876565b8261014051168452826101805116602085015215156040840152166060820152610d5384612b88565b52610d5d83612b88565b50604051927f5509a1ac00000000000000000000000000000000000000000000000000000000845260848201356004850152604060248501525f8480610da66044820185612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b357610e2c610ded610de25f94610e6d988691611352575b50612bc2565b516064860135612d0e565b9685606486013511841461134b57610e09866064870135612be6565b945b81806084830135118614611342576084610e26920135612be6565b90612d0e565b60405195869283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9182156102b357610eb3935f93611314575b50610eac91610ea691612d0e565b91612bc2565b5190612d0e565b818110611286575b505060a051611134575b61016051610fa2575b505090610f73610f9f9260405173ffffffffffffffffffffffffffffffffffffffff6101405116907f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f773ffffffffffffffffffffffffffffffffffffffff61018051169180610f50868b8a846040919493926060820195825260208201520152565b0390a3604051948593602085016040919493926060820195825260208201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b90565b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101405116145f1461107957803b15611075578280916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083526101605160048401525af1801561106a57611052575b509161104b828080610f7395610f9f989761016051905af16110456134cb565b50613528565b9192610ece565b61105c8391610835565b611066575f611025565b5080fd5b6040513d85823e3d90fd5b8280fd5b506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101605173ffffffffffffffffffffffffffffffffffffffff9283166004830152602482015261014051909291602091849160449183918691165af1908115611128575091610f7391610f9f94936110f9575b5061104b565b61111a9060203d602011611121575b61111281836108ca565b810190612b58565b505f6110f3565b503d611108565b604051903d90823e3d90fd5b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101805116145f146111e457803b15610480575f80916024604051809481937f2e1a7d4d00000000000000000000000000000000000000000000000000000000835260a05160048401525af180156102b3576111d1575b506111cc8280808060a051865af16110456134cb565b610ec5565b6111dc919250610835565b5f905f6111b6565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260a05173ffffffffffffffffffffffffffffffffffffffff831660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611267575b50610ec5565b61127f9060203d6020116111215761111281836108ca565b505f611261565b6112909082612be6565b61271081029080820461271014901517156112e75760c8916112b191613494565b116112bd575f80610ebb565b60046040517ffe3cf204000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610ea691935091611339610eac933d805f833e61133181836108ca565b810190612bf3565b93915091610e98565b50508390612d0e565b8394610e0b565b61136691503d8088833e61133181836108ca565b5f610ddc565b60046040517fc990cf68000000000000000000000000000000000000000000000000000000008152fd5b5060c48201358510610cfb565b9094506113c091925060403d6040116102ac5761029e81836108ca565b919091935f610cec565b6113e491925060203d60201161045c5761044d81836108ca565b905f610c54565b6114029150823d841161045c5761044d81836108ca565b5f610c16565b60046040517fd0bcb760000000000000000000000000000000000000000000000000000000008152fd5b9061143c91612be6565b610b52565b90979998816117b7575b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815260a0517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611798575b506040517f095ea7b3000000000000000000000000000000000000000000000000000000008152610160517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61014051165af180156102b357611779575b50604051610100527f5a47ddc300000000000000000000000000000000000000000000000000000000610100515273ffffffffffffffffffffffffffffffffffffffff6101805116600461010051015273ffffffffffffffffffffffffffffffffffffffff61014051166024610100510152851515604461010051015260a05160646101005101526101605160846101005101525f60a46101005101525f60c461010051015273ffffffffffffffffffffffffffffffffffffffff891660e4610100510152610124850135610104610100510152606061010051610124610100515f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af160e05260e051156102b357611705905f6080525f60c0525f9060e051611730575b6116f56116ff916116d660805160a051612be6565b60a0526116e860c05161016051612be6565b6101605260805190612d0e565b9b60c05190612d0e565b9b612d0e565b97851586611728575b61172357600161012051016101205290610b29565b610b35565b50811561170e565b905060603d606011611772575b6116f5611762826117546116ff94610100516108ca565b610100510161010051612cf3565b9160805260c052929150506116c1565b503d61173d565b6117919060203d6020116111215761111281836108ca565b505f611585565b6117b09060203d6020116111215761111281836108ca565b505f6114e7565b61180a6117fe876101605160a05173ffffffffffffffffffffffffffffffffffffffff610140511673ffffffffffffffffffffffffffffffffffffffff6101805116612e30565b6101605160a051613438565b6101605260a05261144b565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff610140511614806119c6575b1561191a57608485013534036118f0577342000000000000000000000000000000000000063b156118e2576040517fd0e30db00000000000000000000000000000000000000000000000000000000081528181600481347342000000000000000000000000000000000000065af180156118e5576118ce575b50505b5f610b06565b6118d88291610835565b6118e257806118c5565b80fd5b6040513d84823e3d90fd5b60046040517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201523060248201526084860135604482015290602082806064810103818473ffffffffffffffffffffffffffffffffffffffff61014051165af190811561112857506119a7575b506118c8565b6119bf9060203d6020116111215761111281836108ca565b505f6119a1565b5034151561184c565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff61018051161480611b29575b15611a9557606485013534036118f0577342000000000000000000000000000000000000063b15610480576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f81600481347342000000000000000000000000000000000000065af180156102b357611a84575b50610afc565b611a8e9150610835565b5f80611a7e565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015230602483015260648781013560448401526101805160209284929183915f91165af180156102b357611b0a5750610afc565b611b229060203d6020116111215761111281836108ca565b505f611a7e565b50341515611a05565b60046040517f9c8787c0000000000000000000000000000000000000000000000000000000008152fd5b611b7691925060203d60201161045c5761044d81836108ca565b905f610ad4565b60046040517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b90507f0dede6c4000000000000000000000000000000000000000000000000000000008103611fe157507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8361010092810103011261048057611c0c60048301610807565b91611c1960248201610807565b91611c2660448301610828565b93611c3360c48401610807565b73ffffffffffffffffffffffffffffffffffffffff60e4850135921692824211611b7d576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528716602482015287151560448201526020818060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156102b35773ffffffffffffffffffffffffffffffffffffffff915f91611fc2575b5016968715611b32576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015230602483015260648681013560448401526020908390815f8c5af19182156102b357611e0b92611fa3575b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166004820181905260648801356024830152989092602091849182905f9082906044820190565b03925af180156102b35773ffffffffffffffffffffffffffffffffffffffff98604095610104945f93611f84575b5086519a8b9687957f0dede6c40000000000000000000000000000000000000000000000000000000087528a6004880152828d1660248801521515604487015260648b0135606487015260848b0135608487015260a48b013560a48701521660c485015260e48401525af19283156102b3575f945f94611f26575b506040805186815260208101869052606494909401359084015273ffffffffffffffffffffffffffffffffffffffff16917fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b90606090a3604051916020830152604082015260408152610f9f816108ae565b73ffffffffffffffffffffffffffffffffffffffff95507fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b919450611f799060403d6040116102ac5761029e81836108ca565b959095949150611eb4565b611f9c9060203d6020116111215761111281836108ca565b505f611e39565b611fbb9060203d6020116111215761111281836108ca565b505f611d87565b611fdb915060203d60201161045c5761044d81836108ca565b5f611d0f565b9293927fcac88ea90000000000000000000000000000000000000000000000000000000092919083810361282c5750840160a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301126104805760048501359160248087013593604488013567ffffffffffffffff811161048057880194846023870112156104805760048601359661207c88612b70565b9660409861208c8a51998a6108ca565b80895260209786898b019260071b84010192818411610480578701915b8383106127cc575050505060846120c260648c01610807565b9a0135928342116127a35773ffffffffffffffffffffffffffffffffffffffff6120eb89612b88565b515116955f8083612658575b6124fe575b505088517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820181905260248201839052929088816044815f8c5af180156124f4576124d7575b5088519b8c957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8097019d8e116124ab578a5f8d9e9f8c839f9d9e73ffffffffffffffffffffffffffffffffffffffff926121d891612bd2565b510151169b8a61221e825194859384937f5509a1ac0000000000000000000000000000000000000000000000000000000085528b60048601528401526044830190612c6d565b0381895afa9081156124a1575f91612487575b5080519088820191821161245b57879161224a91612bd2565b5110612432578c519b8c9485948552600485015286898501526044840160a0905260a4840161227891612c6d565b9173ffffffffffffffffffffffffffffffffffffffff166064840152608483015203815a5f948591f1968715612428575f9761240c575b5086518281019081116123e0576122c69088612bd2565b51106123b7576122d586612b88565b5191865191820191821161238c5750957fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb916123148798839798612bd2565b51825191825287820152a3805192839182018380840152815180915283606084019201935f5b82811061237557505050610f9f9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b85518452948101948694509281019260010161233a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b600487517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b837f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124219197503d805f833e61133181836108ca565b955f6122af565b88513d5f823e3d90fd5b60048d517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b897f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b61249b91503d805f833e61133181836108ca565b5f612231565b8e513d5f823e3d90fd5b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124ed90893d8b116111215761111281836108ca565b505f61217e565b8b513d5f823e3d90fd5b88818061264f575b156125bc575090503461259357734200000000000000000000000000000000000006803b1561106657816004918c51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af1801561258957612575575b50505b5f806120fc565b61257f8291610835565b6118e2578061256b565b8b513d84823e3d90fd5b60048a517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b8b517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff939093166004840152306024840152604483018290528260648184805af19081156126445750612627575b5061256e565b61263d90883d8a116111215761111281836108ca565b505f612621565b8b51903d90823e3d90fd5b50341515612506565b507342000000000000000000000000000000000000068089148061279a575b15612711578334036126e857803b15610480575f6004918d51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af180156126de576126cd575b50806120f7565b6126d79150610835565b5f806126c6565b8c513d5f823e3d90fd5b60048c517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b508a517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523060248201526044810184905289816064815f8d5af180156126de5790829161277d575b506120f7565b612793908b3d8d116111215761111281836108ca565b505f612777565b50341515612677565b600489517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b60808383031261048057896080918d8051906127e782610876565b6127f087610807565b82526127fd848801610807565b8483015261280c818801610828565b90820152606061281d818801610807565b908201528152019201916120a9565b9394937f6e553f6500000000000000000000000000000000000000000000000000000000935083146128825760046040517f7352d91c000000000000000000000000000000000000000000000000000000008152fd5b83907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604092839281010301126104805773ffffffffffffffffffffffffffffffffffffffff60246128d660048701610807565b95013594168151937f72f702f30000000000000000000000000000000000000000000000000000000085526020948581600481865afa908115612ad6579073ffffffffffffffffffffffffffffffffffffffff915f91612b07575b5084517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201523060248201526044810189905291169086816064815f865af18015612afd57612ae0575b5083517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101889052908690829060449082905f905af18015612ad657612ab9575b50813b156104805782519081526004810186905273ffffffffffffffffffffffffffffffffffffffff841660248201525f8160448183865af18015612aaf5791610f739391610f9f969593612aa0575b507ffa2529c0b8e878c5cfbd265efb60d6c35f0ba5ad1132da46b8bde097baac8a49858351898152a251948593840190929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b612aa990610835565b5f612a49565b83513d5f823e3d90fd5b612acf90863d88116111215761111281836108ca565b505f6129f9565b84513d5f823e3d90fd5b612af690873d89116111215761111281836108ca565b505f612997565b85513d5f823e3d90fd5b612b1e9150873d891161045c5761044d81836108ca565b5f612931565b50339161094e565b90816020910312610480575173ffffffffffffffffffffffffffffffffffffffff811681036104805790565b90816020910312610480575180151581036104805790565b67ffffffffffffffff81116108495760051b60200190565b805115612b955760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805160011015612b955760400190565b8051821015612b955760209160051b010190565b919082039182116112e757565b60209081818403126104805780519067ffffffffffffffff821161048057019180601f84011215610480578251612c2981612b70565b93612c3760405195866108ca565b818552838086019260051b820101928311610480578301905b828210612c5e575050505090565b81518152908301908301612c50565b9081518082526020808093019301915f5b828110612c8c575050505090565b8351805173ffffffffffffffffffffffffffffffffffffffff908116875281840151811687850152604080830151151590880152606091820151169086015260809094019392810192600101612c7e565b9190826040910312610480576020825192015190565b90816060910312610480578051916040602083015192015190565b919082018092116112e757565b606073ffffffffffffffffffffffffffffffffffffffff916004604051809481937f0902f1ac000000000000000000000000000000000000000000000000000000008352165afa80156102b357610f9f915f905f92612d7b575b50613a63565b9050612d96915060603d606011610406576103f681836108ca565b50905f612d75565b90816020910312610480575160ff811681036104805790565b60ff166012039060ff82116112e757565b60ff16604d81116112e757600a0a90565b60409060405191612de983610892565b6001835282915f5b602080821015612e2857835160209291612e0a82610876565b5f82525f818301525f868301525f6060830152828801015201612df1565b505091925050565b9493909291946040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff87165afa9081156102b357612e9e91612e99915f91613409575b50612db7565b612dc8565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff8a165afa9081156102b357612edf91612e99915f916134095750612db7565b96604051947fd4b6846d00000000000000000000000000000000000000000000000000000000865260208660048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9586156102b357612fa0966040915f916133ea575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152808b1660248301528815156044830152909116606482015296879081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f965f9a6133c3575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528916602482015286151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357876020916130a7965f916133a6575b506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35787945f9461336f575b5081613347575f985b899c8a155f1461333657906130f19794939291613bba565b925b83156133145750613102612dd9565b91861561330d57815b87156133075785905b604051967fd4b6846d00000000000000000000000000000000000000000000000000000000885260208860048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9485156102b35773ffffffffffffffffffffffffffffffffffffffff60209681966044965f9c8d936132e6575b508390816040519661319688610876565b1686521689850152151560408401521660608201526131b487612b88565b526131be86612b88565b508988146132df57505b60405196879384927f095ea7b300000000000000000000000000000000000000000000000000000000845273cf77a3ba9a5ca399b7c97c74d54e5b1beb874e436004850152886024850152165af19182156102b357613270935f936132c0575b5060405193849283927fcac88ea9000000000000000000000000000000000000000000000000000000008452600484015284602484015260a0604484015260a4830190612c6d565b30606483015242608483015203818373cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435af19081156102b3575f916132a857509190565b6132bc91503d805f833e61133181836108ca565b9190565b6132d89060203d6020116111215761111281836108ca565b505f613228565b90506131c8565b84919350613300908b3d8d1161045c5761044d81836108ca565b9290613185565b80613114565b849161310b565b955050505050604051613326816108ae565b6002815260403660208301379190565b613341979391613bba565b926130f3565b806133555760015b986130d9565b61335f8183613a63565b6133698d8b613a63565b1061334f565b945092506020843d60201161339e575b8161338c602093836108ca565b8101031261048057869351925f6130d0565b3d915061337f565b6133bd9150833d851161045c5761044d81836108ca565b5f61304f565b9099506133e091965060403d6040116102ac5761029e81836108ca565b959095985f612fc9565b613403915060203d60201161045c5761044d81836108ca565b5f612f39565b61342b915060203d602011613431575b61342381836108ca565b810190612d9e565b5f612e93565b503d613419565b9293929091156134635790610eac61345d610f9f9361345687612b88565b5190612be6565b94612bc2565b610eac61347861347e93613456879697612b88565b93612bc2565b91565b818102929181159184041417156112e757565b811561349e570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b3d15613523573d9067ffffffffffffffff8211610849576040519161351860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846108ca565b82523d5f602084013e565b606090565b1561352f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152fd5b919493926040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff89165afa9081156102b3576135f391612e99915f916134095750612db7565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff88165afa9081156102b35761363491612e99915f916134095750612db7565b96604051927fd4b6846d00000000000000000000000000000000000000000000000000000000845260208460048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3576136f5946040915f91613a44575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a16600483015280891660248301528a15156044830152909116606482015294859081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f945f9a613a1d575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528716602482015288151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357896020916137fb965f916133a657506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35789945f946139e6575b50816139be575f965b879c88155f146139ad57906138459794939291613bba565b905b81156133145750613856612dd9565b9186156139a657835b871561399e5750925b6040517fd4b6846d00000000000000000000000000000000000000000000000000000000815260208160048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b357613950965f9673ffffffffffffffffffffffffffffffffffffffff93889361397b575b50839081604051966138e588610876565b1686521660208501521515604084015216606082015261390483612b88565b5261390e82612b88565b5060405193849283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3575f916132a857509190565b849193506139979060203d60201161045c5761044d81836108ca565b92906138d4565b905092613868565b809361385f565b6139b8979391613bba565b90613847565b806139cc5760015b9661382d565b6139d68183613a63565b6139e08d89613a63565b106139c6565b945092506020843d602011613a15575b81613a03602093836108ca565b8101031261048057889351925f613824565b3d91506139f6565b909950613a3a91945060403d6040116102ac5761029e81836108ca565b939093985f61371e565b613a5d915060203d60201161045c5761044d81836108ca565b5f61368e565b906b033b2e3c9fd0803ce8000000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8284099282810292838086109503948086039514613bac5784831115610480578291098119600181018091116112e757613ae090831680930494600184805f030401908584119003613481565b9203041781600302916003830481036112e7576002809318613b028183613481565b84038481116112e757613b1491613481565b613b1e8183613481565b84038481116112e757613b3091613481565b613b3a8183613481565b84038481116112e757613b4c91613481565b613b568183613481565b84038481116112e757613b6891613481565b613b728183613481565b8403908482116112e757613b9091613b8991613481565b8092613481565b83039283116112e757610f9f92613ba691613481565b90613481565b505080925015610480570490565b94613be381613bdd87613bd781613be997999d989b9c9a9c613481565b99613481565b95613481565b97613481565b92670de0b6b3a76400009384613bff878a613481565b049185613c1881613c108a86613481565b04968b613481565b049315613c575750505090613c2c91612be6565b8181029181830414901517156112e757613c4c613c5292610f9f95612d0e565b90613494565b613494565b601e919492959650145f14613d1857613c708185612d0e565b91623cda2985810290810486036112e757826009026009810484036112e757613c9891612d0e565b90623cda2090808202918204036112e757613cc893613ba6613cbd92613cc294612d0e565b613da8565b93612d0e565b916107cd92808402938404036112e757613ceb92613ce591612be6565b94612d0e565b926107ca93808502948504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b613d228185612d0e565b91619ab185810290810486036112e75782613d3c91612d0e565b90619ab090808202918204036112e757613d6093613ba6613cbd92613cc294612d0e565b918260c7029260c78404036112e757613d7c92613ce591612be6565b928360c6029360c68504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b8015613ef057806001700100000000000000000000000000000000831015613eda575b60048268010000000000000000613e82941015613ecd575b640100000000811015613ec0575b62010000811015613eb3575b610100811015613ea7575b6010811015613e9b575b1015613e93575b613e238184613494565b0160011c613e318184613494565b0160011c613e3f8184613494565b0160011c613e4d8184613494565b0160011c613e5b8184613494565b0160011c613e698184613494565b0160011c613e778184613494565b0160011c8092613494565b80821015613e8e575090565b905090565b60011b613e19565b811c9160021b91613e12565b60081c91811b91613e08565b60101c9160081b91613dfd565b60201c9160101b91613df1565b60401c9160201b91613de3565b5050608081901c68010000000000000000613dcb565b505f9056","sourceMap":"585:11320:35:-:0;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;12908:63:36;;585:11320:35;;;;;;12908:63:36;;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;1394:42:36;12908:63;;;;;;;585:11320:35;12908:63:36;585:11320:35;12908:63:36;585:11320:35;12908:63:36;;;585:11320:35;;;;;12999:21:36;;;;585:11320:35;12999:21:36;;585:11320:35;12999:21:36;;;;;;;585:11320:35;12999:21:36;;;585:11320:35;13092:26:36;585:11320:35;13133:13:36;585:11320:35;13128:822:36;13148:5;13152:1;13148:5;;;;13128:822;-1:-1:-1;;585:11320:35;;;;13999:89:36;;585:11320:35;;;;;;13999:89:36;;;585:11320:35;;;;1300:42:36;;;585:11320:35;;;;;;1300:42:36;;;585:11320:35;;;;;1300:42:36;;;585:11320:35;-1:-1:-1;1300:42:36;;;585:11320:35;;;;;;1300:42:36;;;13999:89;;1300:42;13999:89;;;;;;;585:11320:35;13999:89:36;585:11320:35;;;13999:89:36;;;13128:822;585:11320:35;;;;;;;;;;;13999:89:36;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;585:11320:35;;;;;;;;;13155:3:36;585:11320:35;;;;;;13174:304:36;;13155:3;585:11320:35;;13582:92:36;585:11320:35;13582:92:36;;585:11320:35;;;;;13582:92:36;;585:11320:35;;;;;1300:42:36;;585:11320:35;;;;;;1300:42:36;;585:11320:35;;;;;1300:42:36;;585:11320:35;1300:42:36;585:11320:35;1300:42:36;;585:11320:35;1300:42:36;585:11320:35;1300:42:36;;585:11320:35;;13582:92:36;1300:42;13582:92;1300:42;13582:92;;;;;;13780:31;13582:92;585:11320:35;;;;13582:92:36;;;13155:3;13689:31;;;13734;13689;;;:::i;:::-;13734;;:::i;:::-;13780;;:::i;:::-;585:11320:35;;;;;;13830:29:36;;13155:3;13826:40;;585:11320:35;;13133:13:36;;;13826:40;13861:5;;13830:29;585:11320:35;;;;13830:29:36;;13582:92;13734:31;13582:92;;13689:31;13582:92;;;;;585:11320:35;13582:92:36;585:11320:35;13582:92:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;-1:-1:-1;13582:92:36;;;;;;;;13174:304;13401:62;585:11320:35;;13281:72:36;585:11320:35;;;;;;;13281:72:36;:::i;:::-;13401:62;;;;:::i;:::-;13372:91;;13174:304;;12999:21;;;;;585:11320:35;12999:21:36;585:11320:35;12999:21:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;12908:63;;;;;;;;;;;;;;:::i;:::-;;;;585:11320:35;;;;;;;;;;;;;;;;;;;664:40;585:11320;;;;;;;;;;;;;;;;;;;710:46;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1252:5:30;1235:23;;;585:11320:35;1235:23:30;;;;;;:::i;585:11320:35:-;;;;;;;;;;;;;;1469:8:30;585:11320:35;;;;;;;;;;;;;;;;;;530:32:30;585:11320:35;;;;;;;;;;;;;;;;;;;1712:25;585:11320;;;;;;;;:::i;:::-;1726:10;1712:25;;:::i;585:11320::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1820:1139::-;;-1:-1:-1;;1820:1139:35;2034:10;2048:7;585:11320;;2034:21;585:11320;;2034:43;;585:11320;2119:1;585:11320;;;;;;;;2137:49;;585:11320;;2258:44;-1:-1:-1;5124:19:35;-1:-1:-1;5145:26:35;585:11320;;5145:26;-1:-1:-1;5497:106:35;;;585:11320;;;;;;2119:1;585:11320;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;5618:15;:26;5614:56;;585:11320;;;5696:48;;5187:416;;;;585:11320;;;;2119:1;5696:48;;585:11320;;;;;;;;;;;;;;;;;;;;5696:48;:16;585:11320;5696:16;585:11320;5696:48;;;;;;;-1:-1:-1;5696:48:35;;;2133:786;585:11320;;;;5758:18;5754:49;;-1:-1:-1;585:11320:35;;;;10224:320;;2133:786;585:11320;;;;10553:320;;2133:786;5917:33;;;;;:::i;:::-;585:11320;;;;;5961:31;;585:11320;;;;6002:31;;-1:-1:-1;6081:13:35;;6096:5;6100:1;6096:5;;;;;6076:1344;4624:18:36;;;;;:::i;:::-;12368:5;;;;;;;12376;;;:::i;:::-;1084:3;;;;;;;;;;;;;;;585:11320:35;4672:50:36;;;;:::i;:::-;4736:27;4732:79;;585:11320:35;;;5176:63:36;;5187:416:35;;;;585:11320;;;;2119:1;5176:63:36;;585:11320:35;;;;;;;;;;;;;;;;;;1394:42:36;5176:63;;;;;;;585:11320:35;5176:63:36;585:11320:35;5176:63:36;-1:-1:-1;5176:63:36;;;12368:21;585:11320:35;2119:1;585:11320;;5268:21:36;;;;585:11320:35;5268:21:36;;585:11320:35;5268:21:36;;;;;;;-1:-1:-1;5268:21:36;;;12368;-1:-1:-1;585:11320:35;;;;5354:90:36;;5187:416:35;;;;585:11320;;;;2119:1;5354:90:36;;585:11320:35;;;;1300:42:36;;;585:11320:35;;;;1300:42:36;;;585:11320:35;;;1300:42:36;;;585:11320:35;1300:42:36;;;585:11320:35;;;;;;1300:42:36;585:11320:35;1300:42:36;5354:90;;;;;;;-1:-1:-1;;;5354:90:36;;;12368:21;585:11320:35;;;;;5557:23:36;;:50;;;;12368:21;5553:124;;585:11320:35;5719:22:36;;:::i;:::-;585:11320:35;;;;;;;:::i;:::-;5187:416;;;585:11320;;;5187:416;;;585:11320;;5763:46:36;;585:11320:35;;;;5763:46:36;;585:11320:35;;;5763:46:36;;585:11320:35;5751:58:36;;;:::i;:::-;;;;;:::i;:::-;;585:11320:35;;5853:63:36;585:11320:35;5853:63:36;;585:11320:35;;;;2119:1;5853:63:36;;585:11320:35;;;;;;-1:-1:-1;585:11320:35;;;;;;;;:::i;:::-;5853:63:36;;1300:42;5853:63;;;;;;;6185:22;5944:33;5961:16;-1:-1:-1;5853:63:36;585:11320:35;5853:63:36;;;;;12368:21;5961:16;;:::i;:::-;585:11320:35;;;;;5944:33:36;:::i;:::-;12495:17;585:11320:35;;;;;12495:5:36;;;;;12503;585:11320:35;;;;;12503:5:36;:::i;:::-;12495:17;;585:11320:35;;;;;;12495:5:36;;;;;585:11320:35;12503:5:36;585:11320:35;;;12503:5:36;:::i;:::-;12495:17;6185:22;:::i;:::-;585:11320:35;;6145:71:36;;;;;585:11320:35;6145:71:36;;2119:1:35;6145:71:36;;585:11320:35;;;;;;;;;;;:::i;:::-;6145:71:36;;1300:42;6145:71;;;;;;;6245:41;6145:71;-1:-1:-1;6145:71:36;;;12495:17;6245:22;6270:16;6245:22;;;;:::i;:::-;6270:16;;:::i;:::-;585:11320:35;6245:41:36;;:::i;:::-;6595:18;;;6591:183;;12495:17;7332:13;;;;7328:387;;12495:17;7728:13;;7724:387;;12495:17;585:11320:35;;;2323:39;;585:11320;;;;5187:416;;585:11320;5187:416;7737:76;585:11320;5187:416;;585:11320;7737:76;;;;;;;585:11320;;;;;;;;;;;;;;;;;;7737:76;;;;585:11320;;2323:39;;;585:11320;2323:39;;585:11320;;;;;;;;;;;;;;;;;;2323:39;;;;;;;;;:::i;:::-;2316:46;:::o;7724:387:36:-;449:42:37;5187:416:35;585:11320;5187:416;;585:11320;7761:14:36;7757:344;449:42:37;;;7842:31:36;;;;;585:11320:35;;;;;;7842:31:36;;;;585:11320:35;7842:31:36;;585:11320:35;;2119:1;7842:31:36;;585:11320:35;7842:31:36;;;;;;;;7757:344;7909:36;;7963:39;7909:36;;;2323:39:35;7909:36:36;2323:39:35;7909:36:36;;;;;;;;;:::i;:::-;;7963:39;:::i;:::-;7724:387;;;;7842:31;;;;;:::i;:::-;585:11320:35;;7842:31:36;;;585:11320:35;;;;7842:31:36;585:11320:35;;;;;;;;;7842:31:36;585:11320:35;;;7757:344:36;-1:-1:-1;585:11320:35;;;8041:45:36;;;;585:11320:35;;;;2119:1;8041:45:36;;585:11320:35;;;;;5187:416;;585:11320;;;;;;;;;;;;;;8041:45:36;;;;;;;;;2323:39:35;8041:45:36;2323:39:35;8041:45:36;;;;7757:344;;;;8041:45;;;585:11320:35;8041:45:36;585:11320:35;8041:45:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;585:11320:35;;;;;;;;;;7328:387:36;449:42:37;5187:416:35;585:11320;5187:416;;585:11320;7365:14:36;7361:344;449:42:37;;;7446:31:36;;;;;-1:-1:-1;585:11320:35;;;;;7446:31:36;;;;585:11320:35;7446:31:36;;585:11320:35;;2119:1;7446:31:36;;585:11320:35;7446:31:36;;;;;;;;7361:344;7513:36;7567:39;7513:36;;;;;;;;;;;:::i;7567:39::-;7328:387;;7446:31;;;;;;:::i;:::-;-1:-1:-1;7446:31:36;;;;7361:344;-1:-1:-1;585:11320:35;;;7645:45:36;;;;585:11320:35;;;2119:1;7645:45:36;;585:11320:35;;;;;;;;;;;7645:45:36;5187:416:35;-1:-1:-1;585:11320:35;5187:416;;585:11320;7645:45:36;;;;;;;;7361:344;;7328:387;;7645:45;;;585:11320:35;7645:45:36;585:11320:35;7645:45:36;;;;;;;:::i;:::-;;;;;6591:183;6649:18;;;;:::i;:::-;1084:3;;;;;;;;;;;;;;;6714;6648:37;;;;:::i;:::-;6703:14;6699:64;;6591:183;;;;6699:64;2119:1:35;585:11320;;6726:37:36;;;;1084:3;585:11320:35;-1:-1:-1;585:11320:35;;2119:1;585:11320;;-1:-1:-1;585:11320:35;6145:71:36;6245:22;6145:71;;;;;6270:16;6145:71;;;-1:-1:-1;6145:71:36;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;12495:17;;;;;6185:22;:::i;12495:17::-;;;;;5853:63;;;;;;;;;;;;;:::i;:::-;;;;5553:124;2119:1:35;585:11320;;5630:36:36;;;;5557:50;585:11320:35;;;;;5584:23:36;;5557:50;;5354:90;;;;;;;;585:11320:35;5354:90:36;585:11320:35;5354:90:36;;;;;;;:::i;:::-;;;;;;;;5268:21;;;;;585:11320:35;5268:21:36;585:11320:35;5268:21:36;;;;;;;:::i;:::-;;;;;5176:63;;;;;;;;;;;;;;:::i;:::-;;;;4732:79;2119:1:35;585:11320;;4772:39:36;;;;12368:21;12384:5;;;;:::i;:::-;12368:21;;6103:3:35;6122:349;;;;;;;6103:3;585:11320;;;6524:61;;;;6555:15;585:11320;;2119:1;6524:61;;585:11320;;;;;;;;;;;6524:61;5187:416;-1:-1:-1;585:11320:35;5187:416;;585:11320;6524:61;;;;;;;;6103:3;-1:-1:-1;585:11320:35;;;6599:61;;;;6555:15;585:11320;;2119:1;6599:61;;585:11320;;;;;;;;;;;6599:61;5187:416;-1:-1:-1;585:11320:35;5187:416;;585:11320;6599:61;;;;;;;;6103:3;585:11320;;;6749:304;;585:11320;6749:304;;;585:11320;5187:416;;585:11320;2119:1;6749:304;;;585:11320;;5187:416;;585:11320;;6749:304;;585:11320;;;;;;6749:304;;585:11320;;;;;6749:304;;585:11320;;;;;6749:304;;585:11320;;-1:-1:-1;585:11320:35;6749:304;;585:11320;;-1:-1:-1;585:11320:35;6749:304;;585:11320;;;;;;6749:304;;585:11320;;;;;;;6749:304;;585:11320;;;6749:304;;585:11320;6749:304;;-1:-1:-1;585:11320:35;6555:15;585:11320;6749:304;;;;;;;;;7250:31;6749:304;-1:-1:-1;6749:304:35;;-1:-1:-1;;;;6749:304:35;;;;;6103:3;7159:31;7204;7068;;;;;;;:::i;:::-;;;7113;;;;;;:::i;:::-;;;7159;;;;:::i;:::-;7204;;;;;:::i;:::-;7250;;:::i;:::-;585:11320;;;;7300:29;;6103:3;7296:40;;585:11320;6103:3;;585:11320;6103:3;;6081:13;;;7296:40;7331:5;;7300:29;7311:18;;;7300:29;;6749:304;;;585:11320;6749:304;585:11320;6749:304;;;;7159:31;6749:304;;;7204:31;6749:304;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;6749:304:35;;;6599:61;;;585:11320;6599:61;585:11320;6599:61;;;;;;;:::i;:::-;;;;;6524;;;585:11320;6524:61;585:11320;6524:61;;;;;;;:::i;:::-;;;;;6122:349;6379:77;6229:82;;;;;;585:11320;5187:416;;585:11320;;5187:416;;585:11320;6229:82;:::i;:::-;6379:77;;;;;:::i;:::-;6330:126;;;;6122:349;;10553:320;449:42:37;585:11320:35;5187:416;;585:11320;10588:14;:31;;;10553:320;10584:279;;;585:11320;;;;10643:9;:20;10639:53;;449:42:37;10711:39:35;;;;585:11320;;;10711:39;;10643:9;;2119:1;10643:9;;449:42:37;10711:39:35;;;;;;;;10584:279;;;;10553:320;;;10711:39;;;;;:::i;:::-;585:11320;;10711:39;;;585:11320;;;10711:39;585:11320;;;;;;;;;10639:53;2119:1;585:11320;;10672:20;;;;10584:279;585:11320;;;10789:59;;585:11320;;;2119:1;10789:59;;585:11320;10833:4;585:11320;;;;;;;;;;;;;;;;;;;10789:59;5187:416;;585:11320;5187:416;;585:11320;10789:59;;;;;;;;;;10584:279;;;;10789:59;;;585:11320;10789:59;585:11320;10789:59;;;;;;;:::i;:::-;;;;;10588:31;10606:9;;:13;;10588:31;;10224:320;449:42:37;585:11320:35;5187:416;;585:11320;10259:14;:31;;;10224:320;10255:279;;;585:11320;;;;10314:9;:20;10310:53;;449:42:37;10382:39:35;;;;585:11320;;;10382:39;;-1:-1:-1;10314:9:35;2119:1;10314:9;;449:42:37;10382:39:35;;;;;;;;10255:279;;10224:320;;10382:39;;;;;:::i;:::-;-1:-1:-1;10382:39:35;;;10255:279;585:11320;;;10460:59;;585:11320;;;;2119:1;10460:59;;585:11320;10504:4;585:11320;;;;;;;;;;;;;5187:416;;585:11320;;;;;;;-1:-1:-1;;585:11320:35;10460:59;;;;;;;;10255:279;10224:320;;10460:59;;;585:11320;10460:59;585:11320;10460:59;;;;;;;:::i;:::-;;;;;10259:31;10277:9;;:13;;10259:31;;5754:49;2119:1;585:11320;;5785:18;;;;5696:48;;;;;585:11320;5696:48;585:11320;5696:48;;;;;;;:::i;:::-;;;;;5614:56;2119:1;585:11320;;5653:17;;;;2133:786;2383:52;-1:-1:-1;585:11320:35;2383:52;;585:11320;;8583:91;585:11320;8583:91;585:11320;8583:91;;;585:11320;;;;;;2119:1;585:11320;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8689:15;;;:26;8685:56;;585:11320;;;8767:48;;585:11320;;;;2119:1;8767:48;;585:11320;;;;;;;;;;;;;;;;;;;;8767:48;:16;585:11320;8767:16;585:11320;8767:48;;;;;;585:11320;8767:48;-1:-1:-1;8767:48:35;;;2379:540;585:11320;;8829:18;;;8825:49;;585:11320;;;8885:59;;585:11320;;;;;2119:1;8885:59;;585:11320;8927:4;585:11320;;;;;;;;;;;;;;;;;;-1:-1:-1;8885:59:35;;;;;;;;8954:57;8885:59;;;2379:540;-1:-1:-1;585:11320:35;;;8954:57;;8983:15;585:11320;;2119:1;8954:57;;585:11320;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;585:11320:35;;;;;;;8954:57;;;;;;;;;585:11320;8954:57;585:11320;8954:57;585:11320;8954:57;-1:-1:-1;8954:57:35;;;2379:540;585:11320;;;9055:104;;;;;585:11320;9055:104;;;2119:1;9055:104;;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9055:104;;;;;;;-1:-1:-1;;;9055:104:35;;;2379:540;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;9175:61;;585:11320;;9175:61;585:11320;;2552:28;585:11320;2552:28;;585:11320;;;;;;2552:28;;;;;:::i;9055:104::-;585:11320;9055:104;;9175:61;9055:104;;;;;585:11320;9055:104;585:11320;9055:104;;;;;;;:::i;:::-;;;;;;;;;8954:57;;;585:11320;8954:57;585:11320;8954:57;;;;;;;:::i;:::-;;;;;8885:59;;;585:11320;8885:59;585:11320;8885:59;;;;;;;:::i;:::-;;;;;8767:48;;;;585:11320;8767:48;585:11320;8767:48;;;;;;;:::i;:::-;;;;2379:540;585:11320;;;;;;;2601:61;;;585:11320;;3506:75;;;585:11320;;;;;;;;;2119:1;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:1;585:11320;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;3596:15;;;:26;3592:56;;585:11320;3677:9;;;:::i;:::-;;585:11320;;10077:802;-1:-1:-1;10228:11:35;;10224:320;;585:11320;10553:320;;585:11320;-1:-1:-1;;585:11320:35;;;3779:59;;585:11320;3811:15;585:11320;2119:1;3779:59;;585:11320;;;;;;;;;;;3779:59;585:11320;;;-1:-1:-1;3779:59:35;;;;;;;;;585:11320;;;;;;;;;;;;;;;;3868:25;-1:-1:-1;3868:25:35;;;;;;;;585:11320;3868:25;;;;:::i;:::-;;:28;585:11320;;;;;;;3942:47;;;;;585:11320;3942:47;;;2119:1;3942:47;;585:11320;;;;;;;;;:::i;:::-;3942:47;;;;;;;;;;-1:-1:-1;3942:47:35;;;585:11320;;;;;;;;;;;;;4027:43;;;;;:::i;:::-;585:11320;4085:35;4081:91;;585:11320;;4192:89;;;;;;;2119:1;4192:89;;585:11320;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;4192:89;;;-1:-1:-1;4192:89:35;;;;;;;;;-1:-1:-1;4192:89:35;;;585:11320;;;;;;;;;;;;4296:27;;;;:::i;:::-;585:11320;4296:45;4292:101;;4435:10;;;:::i;:::-;585:11320;;;;;;;;;;;;4447:27;;4408:67;4447:27;;;;;;;;:::i;:::-;585:11320;;;;;;;;;;4408:67;585:11320;;;;;;;2773:19;;;;585:11320;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;2773:19;;;;;;;;;;;;;;:::i;585:11320::-;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;;;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;4292:101;2119:1;585:11320;;4364:18;;;;585:11320;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;4192:89;;;;;;;-1:-1:-1;4192:89:35;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;4081:91;2119:1;585:11320;;4143:18;;;;585:11320;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;3942:47;;;;;;-1:-1:-1;3942:47:35;;;;;;:::i;:::-;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;3779:59;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;10553:320;10588:31;;;;;10553:320;10584:279;;;10643:9;;;;10639:53;;449:42:37;10711:39:35;;;;;585:11320;2119:1;585:11320;;;10711:39;;;;585:11320;10711:39;;10643:9;10711:39;;;;;;;;;10584:279;;;;10553:320;;;;10711:39;;;;;:::i;:::-;585:11320;;10711:39;;;;585:11320;;;;;;;;;10639:53;2119:1;585:11320;;10672:20;;;;10584:279;585:11320;;;10789:59;;585:11320;;;;;2119:1;10789:59;;585:11320;10833:4;585:11320;;;;;;;;;;;;;;;10789:59;;;;;;;;;;10584:279;;;;10789:59;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;;;;;;;;10588:31;10606:9;;:13;;10588:31;;10224:320;449:42:37;;10259:14:35;;;:31;;;10224:320;10255:279;;;10314:9;;:20;10310:53;;10382:39;;;;;-1:-1:-1;2119:1:35;585:11320;;;10382:39;;;;585:11320;10382:39;;10314:9;10382:39;;;;;;;;;10255:279;;;10224:320;;10382:39;;;;;:::i;:::-;-1:-1:-1;10382:39:35;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;10310:53;2119:1;585:11320;;10343:20;;;;10255:279;-1:-1:-1;585:11320:35;;;10460:59;;585:11320;;;2119:1;10460:59;;585:11320;10504:4;585:11320;;;;;;;;;;10504:4;585:11320;;;-1:-1:-1;10460:59:35;;;;;;;;;;;;10255:279;;10224:320;;10460:59;;;;;;;;;;;;;:::i;:::-;;;;;10259:31;10277:9;;:13;;10259:31;;3592:56;2119:1;585:11320;;3631:17;;;;585:11320;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2597:322;2825:23;;;;;-1:-1:-1;2813:35:35;;2809:110;;2119:1;585:11320;;2935:17;;;;2809:110;585:11320;;;;9621:40;;;;;585:11320;;;;;;;;2119:1;585:11320;;;:::i;:::-;;;;;;;;9690:35;585:11320;9690:35;;585:11320;9690:35;;;2119:1;9690:35;;;;;;;;;;585:11320;9690:35;-1:-1:-1;9690:35:35;;;2809:110;-1:-1:-1;585:11320:35;;;9736:59;;585:11320;;;2119:1;9736:59;;585:11320;9781:4;585:11320;;;;;;;;;;;;;9781:4;585:11320;;;-1:-1:-1;585:11320:35;9736:59;;;;;;;;2809:110;-1:-1:-1;585:11320:35;;;9805:45;;585:11320;;;2119:1;9805:45;;585:11320;;;;;;;;;;;;;;;;-1:-1:-1;;9805:45:35;;;;;;;;2809:110;9861:44;;;;;;585:11320;;9861:44;;;2119:1;9861:44;;585:11320;;;;;;;;;;-1:-1:-1;585:11320:35;;;-1:-1:-1;9861:44:35;;;;;;;;9973:26;9861:44;;9973:26;9861:44;;;;;2809:110;585:11320;9921:35;585:11320;;;;;;9921:35;585:11320;9973:26;;;;;585:11320;;;;;;;;;;;;;;;;;9861:44;;;;:::i;:::-;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;9805:45;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;9736:59;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;9690:35;;;;;;;;;;;;;;:::i;:::-;;;;2034:43;:10;;:43;;;585:11320;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;-1:-1:-1;585:11320:35;;;;;-1:-1:-1;585:11320:35;;;;5739:1:36;585:11320:35;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;4296:198:36:-;4414:25;585:11320:35;4296:198:36;4414:25;585:11320:35;;4414:25:36;;;;585:11320:35;4414:25:36;;585:11320:35;4414:25:36;;;;;;4456:31;4414:25;;;;;;;4296:198;4456:31;;:::i;4414:25::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320:35;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;:::i;:::-;5739:1:36;585:11320:35;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;585:11320:35;;-1:-1:-1;585:11320:35;;;;-1:-1:-1;585:11320:35;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;:::o;2018:1867:36:-;;;;;;;585:11320:35;;;2252:33:36;;;;;585:11320:35;2252:33:36;585:11320:35;;;;2252:33:36;;;;;;;2240:46;2252:33;2247:38;2252:33;;;;;2018:1867;2247:38;;:::i;:::-;2240:46;:::i;:::-;585:11320:35;;;2333:33:36;;;2252;585:11320:35;2252:33:36;585:11320:35;;;;2333:33:36;;;;;;;2321:46;2333:33;2328:38;2333:33;2252;2333;;;2328:38;;:::i;2321:46::-;585:11320:35;;;2491:42:36;585:11320:35;2491:42:36;;2252:33;2491:42;2252:33;2491:42;1300;2491;;;;;;;2429:105;2491:42;585:11320:35;2491:42:36;2252:33;2491:42;;;2018:1867;-1:-1:-1;585:11320:35;;;2429:105:36;;585:11320:35;;;;2252:33:36;2429:105;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2429:105:36;;;1300:42;2429:105;;;;;;;2252:33;;;2429:105;;;2018:1867;-1:-1:-1;585:11320:35;;;2560:63:36;;585:11320:35;;;;2252:33:36;2560:63;;585:11320:35;;;;;;;;;;;;;;;2252:33:36;585:11320:35;;;1394:42:36;2560:63;;;;;;;2252:33;2560:63;2651:52;2560:63;2252:33;2560:63;;;2018:1867;-1:-1:-1;585:11320:35;;;2651:52:36;;585:11320:35;;;;2252:33:36;2651:52;;585:11320:35;;;;;;;;;;;;;;;;;;2651:52:36;;;1394:42;2651:52;;;;;;;;;2252:33;2651:52;;;2018:1867;-1:-1:-1;2847:6:36;;;2252:33;2846:74;;2833:87;2931:20;2966:11;;2962:259;2966:11;;;3008:78;;;;;;;;:::i;:::-;2962:259;;3235:17;;3231:85;;3386:22;;;:::i;:::-;3457:28;;;;;;;3499;;;;;;;585:11320:35;;3561:42:36;585:11320:35;3561:42:36;;2252:33;3561:42;2252:33;3561:42;1300;3561;;;;;;;585:11320:35;2252:33:36;3561:42;;;585:11320:35;3561:42:36;2252:33;3561:42;;;;;3499:28;585:11320:35;;;;;;;;;;:::i;:::-;;;;;3430:183:36;;;585:11320:35;;;;3430:183:36;;585:11320:35;;3430:183:36;;;585:11320:35;3418:195:36;;;:::i;:::-;;;;;:::i;:::-;;3631:28;;;;;;;585:11320:35;;3624:76:36;;;;;585:11320:35;3624:76:36;;1300:42;2252:33;3624:76;;585:11320:35;;;;;;;3624:76:36;;;;;;;585:11320:35;3624:76:36;2252:33;3624:76;;;3631:28;585:11320:35;;;3732:107:36;;;;;585:11320:35;3732:107:36;;2252:33;3732:107;;585:11320:35;;;;;;;;;;;;;;;;:::i;:::-;3816:4:36;585:11320:35;;;;3823:15:36;585:11320:35;;;;3732:107:36;;;1300:42;3732:107;;;;;;;2252:33;3732:107;;;3850:28;;2018:1867;:::o;3732:107::-;;;;;;2252:33;3732:107;;;;;;:::i;:::-;3850:28;2018:1867;:::o;3624:76::-;;;2252:33;3624:76;2252:33;3624:76;;;;;;;:::i;:::-;;;;;3631:28;;;;;3561:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3499:28;;;;3457;;;;;3231:85;585:11320:35;;;;;;;;;;;:::i;:::-;3290:1:36;585:11320:35;;;;2252:33:36;585:11320:35;;;3268:37:36;;:::o;2962:259::-;3132:78;;;;;:::i;:::-;2962:259;;;2846:74;2866:6;;;2876:4;2865:55;2846:74;;;2865:55;2883:17;;;;:::i;:::-;2903;;;;:::i;:::-;-1:-1:-1;2865:55:36;;2651:52;;;;;2252:33;2651:52;;2252:33;2651:52;;;;;;2252:33;2651:52;;;:::i;:::-;;;585:11320:35;;;;;;;2651:52:36;;;;;;;-1:-1:-1;2651:52:36;;2560:63;;;;;;;;;;;;;;:::i;:::-;;;;2429:105;;;;;;;;585:11320:35;2429:105:36;585:11320:35;2429:105:36;;;;;;;:::i;:::-;;;;;;;;2491:42;;;;2252:33;2491:42;2252:33;2491:42;;;;;;;:::i;:::-;;;;2333:33;;;;2252;2333;2252;2333;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3891:399;;;;;;4080:204;;;4126:10;4166;4122:14;4162;4126:10;;;;:::i;:::-;585:11320:35;4122:14:36;;:::i;:::-;4166:10;;:::i;4080:204::-;4263:10;4219:14;4259;4223:10;;;;;;:::i;4219:14::-;4263:10;;:::i;4259:14::-;4080:204;3891:399::o;1084:3::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;1207:42;;;;;;;;;;;;585:11320:35;;;;1207:42:36;585:11320:35;;;;;1207:42:36;585:11320:35;;:::i;:::-;1207:42:36;;;-1:-1:-1;1207:42:36;;;;:::o;:::-;585:11320:35;1207:42:36;:::o;:::-;;;;:::o;:::-;;585:11320:35;;1207:42:36;;;;;;;;;;;;585:11320:35;1207:42:36;585:11320:35;;;1207:42:36;;14165:1738;;;;;585:11320:35;;;14417:33:36;;;;;585:11320:35;14417:33:36;585:11320:35;;;;14417:33:36;;;;;;;14405:46;14417:33;14412:38;14417:33;;;;;14412:38;;:::i;14405:46::-;585:11320:35;;;14498:33:36;;;14417;585:11320:35;14417:33:36;585:11320:35;;;;14498:33:36;;;;;;;14486:46;14498:33;14493:38;14498:33;14417;14498;;;14493:38;;:::i;14486:46::-;585:11320:35;;;14656:42:36;585:11320:35;14656:42:36;;14417:33;14656:42;14417:33;14656:42;1300;14656;;;;;;;14594:105;14656:42;585:11320:35;14656:42:36;14417:33;14656:42;;;14165:1738;-1:-1:-1;585:11320:35;;;14594:105:36;;585:11320:35;;;;14417:33:36;14594:105;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14594:105:36;;;1300:42;14594:105;;;;;;;14417:33;;;14594:105;;;14165:1738;-1:-1:-1;585:11320:35;;;14725:63:36;;585:11320:35;;;;14417:33:36;14725:63;;585:11320:35;;;;;;;;;;;;;;;14417:33:36;585:11320:35;;;1394:42:36;14725:63;;;;;;;14417:33;14725:63;14816:52;14725:63;14417:33;14725:63;;;-1:-1:-1;585:11320:35;;;14816:52:36;;585:11320:35;;;;14417:33:36;14816:52;;585:11320:35;;;;;;;;;;;;;;;;;;14816:52:36;;;1394:42;14816:52;;;;;;;;;14417:33;14816:52;;;14165:1738;-1:-1:-1;15012:6:36;;;14417:33;15011:74;;14998:87;15096:20;15131:11;;15127:259;15131:11;;;15173:78;;;;;;;;:::i;:::-;15127:259;;15399:17;;15395:85;;15548:22;;;:::i;:::-;15619:28;;;;;;;15661;;;;;;;585:11320:35;;;15723:42:36;;14417:33;15723:42;14417:33;15723:42;1300;15723;;;;;;585:11320:35;15723:42:36;14417:33;15723:42;585:11320:35;15723:42:36;;;;;15661:28;585:11320:35;;;;;;;;;;:::i;:::-;;;;;14417:33:36;15592:183;;585:11320:35;;;;15592:183:36;;585:11320:35;;15592:183:36;;;585:11320:35;15580:195:36;;;:::i;:::-;;;;;:::i;:::-;;585:11320:35;;15796:61:36;;;;;585:11320:35;15796:61:36;;14417:33;15796:61;;585:11320:35;;;;;;;;;;;:::i;:::-;15796:61:36;;1300:42;15796:61;;;;;;;14417:33;15796:61;;;15868:28;;14165:1738;:::o;15723:42::-;;;;;;;14417:33;15723:42;14417:33;15723:42;;;;;;;:::i;:::-;;;;;15661:28;;;;;;15619;;;;;15127:259;15297:78;;;;;:::i;:::-;15127:259;;;15011:74;15031:6;;;15041:4;15030:55;15011:74;;;15030:55;15048:17;;;;:::i;:::-;15068;;;;:::i;:::-;-1:-1:-1;15030:55:36;;14816:52;;;;;14417:33;14816:52;;14417:33;14816:52;;;;;;14417:33;14816:52;;;:::i;:::-;;;585:11320:35;;;;;;;14816:52:36;;;;;;;-1:-1:-1;14816:52:36;;14594:105;;;;;;;;585:11320:35;14594:105:36;585:11320:35;14594:105:36;;;;;;;:::i;:::-;;;;;;;;14656:42;;;;14417:33;14656:42;14417:33;14656:42;;;;;;;:::i;:::-;;;;8427:1417;;1041:4;8581:150;;;;;;;;;;;;;;;;;;;;8745:10;;8741:179;;8938:19;;;585:11320:35;;;8996:71:36;;;9233:12;;9248:1;585:11320:35;;;;;;;9497:12:36;9218:32;;;9260:70;;;9407:72;9248:1;9407:72;;-1:-1:-1;9407:72:36;;;9076:117;;;;;;9497:12;:::i;:::-;9076:117;;9340:58;9488:21;1084:3;9535:1;1084:3;;9535:1;1084:3;;;;;;9554:1;9534:21;;;9576:17;;;;:::i;:::-;585:11320:35;;;;;;;9565:28:36;;;:::i;:::-;9614:17;;;;:::i;:::-;585:11320:35;;;;;;;9603:28:36;;;:::i;:::-;9652:17;;;;:::i;:::-;585:11320:35;;;;;;;9641:28:36;;;:::i;:::-;9690:17;;;;:::i;:::-;585:11320:35;;;;;;;9679:28:36;;;:::i;:::-;9728:17;;;;:::i;:::-;585:11320:35;;;;;;;;9766:17:36;9717:28;;;;:::i;:::-;9766:17;;;:::i;:::-;585:11320:35;;;;;;;9803:11:36;9755:28;;;;:::i;:::-;9803:11;;:::i;8741:179::-;8779:15;;;;;;585:11320:35;;8809:74:36;8896:13;:::o;10340:1748::-;;10666:8;10340:1748;10643:8;10340:1748;10621:8;10340:1748;10688:8;10340:1748;;;;;;;;10621:8;:::i;:::-;10643;;:::i;:::-;10666;;:::i;:::-;10688;;:::i;:::-;999:4;;10758:5;;;;;;:::i;:::-;1084:3;10794:5;;10830;10794;;;;;:::i;:::-;1084:3;10830:5;;;:::i;:::-;1084:3;;10853:1229;;;10887:7;;;;;;;:::i;:::-;1084:3;;;;;;;;;;;;;;10905:5;10886:25;10905:5;10886:32;10905:5;;:::i;:::-;10886:25;;:::i;:::-;:32;:::i;10853:1229::-;10950:2;10939:13;;;;;;;10935:1147;10950:2;;;11033:7;;;;:::i;:::-;11045:9;;1084:3;;;;;;;;;;;11062:1;1084:3;11062:1;1084:3;;;;;;11045:23;;;:::i;:::-;11071:9;;1084:3;;;;;;;;;;11236:7;11045:40;;11032:54;11045:40;11119:26;11045:40;;:::i;11032:54::-;11119:26;:::i;:::-;11236:7;;:::i;:::-;11228:4;;1084:3;;;;;;;;;;11328:5;11217:27;;;;:::i;:::-;11328:5;;:::i;:::-;11320:4;;1084:3;;;;;;;;;;;;;;;;;;;;;;;;11474:15;11421:31;;;;:::i;10935:1147::-;11627:7;;;;:::i;:::-;11639:6;;1084:3;;;;;;;;;;11639:16;;;;:::i;:::-;11658:6;;1084:3;;;;;;;;;;11819:7;11639:30;;11626:44;11639:30;11703:26;11639:30;;:::i;11819:7::-;1084:3;;11812;1084;;11812;1084;;;;;11910:5;11801:26;;;;:::i;11910:5::-;1084:3;;11903;1084;;11903;1084;;;;;;;;;;;;;;;;;;;12056:15;12003:31;;;;:::i;550:1391:39:-;645:6;;641:20;;835:14;875:1;900:35;894:41;;;890:116;;550:1391;1535:3;1023:25;1029:19;1881:5;1023:25;;;1019:99;;550:1391;1141:11;1135:17;;;1131:91;;550:1391;1245:7;1239:13;;;1235:86;;550:1391;1344:5;1338:11;;;1334:83;;550:1391;1440:4;1434:10;;;1430:82;;550:1391;1529:9;;1525:55;;550:1391;1602:5;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1636:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1670:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1704:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1738:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1772:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1806:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1881:5:39;;;:::i;:::-;1908:6;;;;;;:15;550:1391;:::o;1908:15::-;;;550:1391;:::o;1525:55::-;875:1;585:11320:35;1525:55:39;;1430:82;585:11320:35;;;1496:1:39;585:11320:35;1430:82:39;;;1334:83;1376:1;585:11320:35;;;;1334:83:39;;;1235:86;1279:2;585:11320:35;;1305:1:39;585:11320:35;1235:86:39;;;1131:91;1179:2;585:11320:35;;1205:2:39;585:11320:35;1131:91:39;;;1019:99;1075:2;585:11320:35;;1101:2:39;585:11320:35;1019:99:39;;;890:116;-1:-1:-1;;962:3:39;585:11320:35;;;;890:116:39;;641:20;653:8;650:1;653:8;:::o","linkReferences":{},"immutableReferences":{"37821":[{"start":1548,"length":32}],"37824":[{"start":1650,"length":32}],"37827":[{"start":1759,"length":32},{"start":2322,"length":32}],"38719":[{"start":1230,"length":32},{"start":5238,"length":32},{"start":5396,"length":32},{"start":5758,"length":32},{"start":7600,"length":32},{"start":8506,"length":32}],"38722":[{"start":1340,"length":32},{"start":2724,"length":32},{"start":7370,"length":32}]}},"methodIdentifiers":{"_plugin()":"0cfd9ad4","aerodromeFactory()":"c45acd23","aerodromeRouter()":"e18e3a68","execute(bytes)":"09c5eabe","execute(bytes,address)":"6accdc13","getName()":"17d7de7c","getVersion()":"0d8e6e2c","quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)":"e69224d4"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"plugin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AerodromeUtils_ExceededMaxPriceImpact\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AerodromeUtils_ExceededMaxSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AerodromeUtils_ExceededMaxValueLoss\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DeadlineExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSelector\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVersionNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guageAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"}],\"name\":\"AeroRewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"FeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guageAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LPTokenStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guageAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recepient\",\"type\":\"address\"}],\"name\":\"LPTokenUnStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_plugin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aerodromeFactory\",\"outputs\":[{\"internalType\":\"contract IPoolFactory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aerodromeRouter\",\"outputs\":[{\"internalType\":\"contract IRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"balanceTokenRatio\",\"type\":\"bool\"}],\"name\":\"quoteDepositLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"name\":\"Name of the connector\",\"version\":\"Version of the connector\"}},\"execute(bytes)\":{\"params\":{\"data\":\"The encoded parameters for the desired action\"},\"returns\":{\"_0\":\"bytes Encoded return data from the call\"}},\"getName()\":{\"returns\":{\"_0\":\"string The name of the connector\"}},\"getVersion()\":{\"returns\":{\"_0\":\"uint256 The version of the connector\"}},\"quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)\":{\"params\":{\"amountA\":\"The amount of token A being deposited\",\"amountB\":\"The amount of token B being deposited\",\"balanceTokenRatio\":\"Indicates whether to balance the token ratio with a swap\",\"stable\":\"Indicates whether the pair is a stable pair\",\"tokenA\":\"The address of token A\",\"tokenB\":\"The address of token B\"},\"returns\":{\"amountAOut\":\"The amount of token A expected to be deposited\",\"amountBOut\":\"The amount of token B expected to be deposited\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"_plugin()\":{\"notice\":\"Address of the connector plugin\"},\"constructor\":{\"notice\":\"Initializes the AerodromeConnector\"},\"execute(bytes)\":{\"notice\":\"Executes a liquidity action on Aerodrome\"},\"execute(bytes,address)\":{\"notice\":\"Allows specifying a caller (to be used by the plugin)\"},\"getName()\":{\"notice\":\"Gets the name of the connector\"},\"getVersion()\":{\"notice\":\"Gets the version of the connector\"},\"quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)\":{\"notice\":\"Quotes the expected amounts of token A and token B to deposit in a liquidity pool\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/connectors/base/aerodrome/main.sol\":\"AerodromeConnector\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@aerodrome/contracts/=lib/contracts/\",\":@coinbase/smart-wallet/=lib/smart-wallet/\",\":@opengsn/=lib/contracts/lib/gsn/packages/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib/contracts/lib/v3-core/\",\":FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/\",\":account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/\",\":contracts/=lib/contracts/contracts/\",\":ds-test/=lib/contracts/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gsn/=lib/contracts/lib/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":p256-verifier/=lib/smart-wallet/lib/p256-verifier/\",\":safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/\",\":smart-wallet/=lib/smart-wallet/\",\":solady/=lib/smart-wallet/lib/solady/src/\",\":utils/=lib/contracts/test/utils/\",\":v3-core/=lib/contracts/lib/v3-core/\",\":webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/\"],\"viaIR\":true},\"sources\":{\"lib/contracts/contracts/interfaces/IPool.sol\":{\"keccak256\":\"0xb9d9fc89fe1d37370a851b85fa856f32026c93cd56084a2db7ab4c50f89b6b4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1ac3e07ff83ce27e641b75e129a3f057852455f209e2a98cf1f9f16bc540758\",\"dweb:/ipfs/QmQehv4Pyi4sw9m1qHNhuoxeVcYvouyFJft3LVoV2MLD7c\"]},\"lib/contracts/contracts/interfaces/IRouter.sol\":{\"keccak256\":\"0x3f27948c9630a73b69ef67c7d48f281e2a55fb7448069b74f7efc62ce8936def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96fa11dc0cb8f0da4b63be911aebe38eaca545c5f370479ee45bb93cfc748a07\",\"dweb:/ipfs/QmWgkipaWSvLVdtn1L4xMNEbSaRnLwzpR6e2fFWWB8n5sj\"]},\"lib/contracts/contracts/interfaces/IWETH.sol\":{\"keccak256\":\"0x6f443b30d7c2ba47ca3e0ce6344ab885c325cd223f14cd96ddba014c1033a2ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82a174ff95c5f792522d1ef3a468ea367075b168c7a0189d8918079756670a53\",\"dweb:/ipfs/Qmejcmattr1iC4hm88Kho3jf1euSwcms9xLN7tY297hPrv\"]},\"lib/contracts/contracts/interfaces/factories/IPoolFactory.sol\":{\"keccak256\":\"0xc3a1d6e2e13a8a816abb6a591ff02c9a3972c53e67dd6cd75140291eadf8e98a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd9eb9108c6b9c610a220636b4e2c50b3b8192c5398e52d601cf61803ca4b9a6\",\"dweb:/ipfs/QmW6taSoLHwyChGnpsyoRXJP83NkhUpatH2HTA3QVDaHHV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"src/BaseConnector.sol\":{\"keccak256\":\"0xd5e83d6aaa9cd7539a274c716ccd698ebc7b7a72264177450ede92d87b6c33d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d39dad05f3b6c5fad76579753942a179ad240996d7a05be1b3bb91be6359dc4d\",\"dweb:/ipfs/QmcxW81AdyDC7cketTi1xew5kVKWLa1Ki58RZ4AuTjFGpS\"]},\"src/connectors/base/aerodrome/events.sol\":{\"keccak256\":\"0x0569863f895832cc4f92f6ace1c3d25d52a2661a3a429ab02c4d028f0ad2a37c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36dbfb52b77deff5d2bf5effff6bf51b188a9b44bbf8d3c07b9feed9530ec43a\",\"dweb:/ipfs/QmRD5oWBrTzYGn4Hbkr1vyh9HU6sXPqHjsLHJdwy77yWFK\"]},\"src/connectors/base/aerodrome/interface.sol\":{\"keccak256\":\"0x01554973801e9aadeda05298174b603b96e3e62ce5a59d966e29324084357971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6dde59a4bed84b5b022c09d39c23c8063e0150fc6dad045376354f13ccaa4919\",\"dweb:/ipfs/QmU9E8awV9m4fx6923yM5TWajmRiB41TcJteovUxtfrqen\"]},\"src/connectors/base/aerodrome/main.sol\":{\"keccak256\":\"0xd41a8d330944f4f6faf950aa9f35a5deeeecb3bd1242e296f52d0abce67ffc3c\",\"license\":\"GNU\",\"urls\":[\"bzz-raw://64b2ce5fc9ee7fbec5640c339eec9367632b638101da2328af8e725a148d843c\",\"dweb:/ipfs/QmdVKT96b4ZdEMJQ4GjakLqHCape4CAywJJH9mUjWmL4ht\"]},\"src/connectors/base/aerodrome/utils.sol\":{\"keccak256\":\"0x5f81c8cca489557f2b5e2ef20d0ebfe7d460cd7b71eefc3cf0bfc6e0e74fd9f3\",\"license\":\"GNU\",\"urls\":[\"bzz-raw://2f37d56b6d03ffad53d5ba1b4d661d169f1c978e1227e3c98513a2f19190f335\",\"dweb:/ipfs/Qma3ZKQJrbzUm3bv3pSosrerrPP8amwvWV8V1h8MbBwqer\"]},\"src/connectors/base/common/constant.sol\":{\"keccak256\":\"0x5bbbb27e53700f83078838742c945c4a649a7b51554dde8b756078348e79a132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://365e58f4d448d5f84e6ef6e2b6047849bea6c27b8d5bf44d7f55d15729519d6a\",\"dweb:/ipfs/QmRhrYNhRsjGQcWAFWMMLfdxP6YDDdpBxGSLV3QQmyaAuZ\"]},\"src/interface/IConnector.sol\":{\"keccak256\":\"0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973\",\"dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a\"]},\"src/lib/Babylonian.sol\":{\"keccak256\":\"0xadab3cc6503267d6cd5ee1d1c50d2fc6f4443916a35419d4c46ee4f270ea17a4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a8e495ca3a3f727836182357c28f0998cebc40f842aca480b49ca34ff1113419\",\"dweb:/ipfs/QmdX7NgnduduUoVAc5XFJH9osEVweJNGV92ozUdL2GX6HZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"version","type":"uint256"},{"internalType":"address","name":"plugin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AerodromeUtils_ExceededMaxPriceImpact"},{"inputs":[],"type":"error","name":"AerodromeUtils_ExceededMaxSlippage"},{"inputs":[],"type":"error","name":"AerodromeUtils_ExceededMaxValueLoss"},{"inputs":[],"type":"error","name":"DeadlineExpired"},{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"type":"error","name":"ExecutionFailed"},{"inputs":[],"type":"error","name":"IncorrectETHAmount"},{"inputs":[],"type":"error","name":"InsufficientLiquidity"},{"inputs":[],"type":"error","name":"InvalidSelector"},{"inputs":[],"type":"error","name":"InvalidVersionNumber"},{"inputs":[],"type":"error","name":"PoolDoesNotExist"},{"inputs":[],"type":"error","name":"SlippageExceeded"},{"inputs":[],"type":"error","name":"UnauthorizedCaller"},{"inputs":[{"internalType":"address","name":"guageAddress","type":"address","indexed":true},{"internalType":"address","name":"rewardToken","type":"address","indexed":true}],"type":"event","name":"AeroRewardsClaimed","anonymous":false},{"inputs":[{"internalType":"address","name":"poolAddress","type":"address","indexed":true},{"internalType":"address","name":"token0","type":"address","indexed":false},{"internalType":"uint256","name":"amount0","type":"uint256","indexed":false},{"internalType":"address","name":"token1","type":"address","indexed":false},{"internalType":"uint256","name":"amount1","type":"uint256","indexed":false}],"type":"event","name":"FeesWithdrawn","anonymous":false},{"inputs":[{"internalType":"address","name":"guageAddress","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"LPTokenStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"guageAddress","type":"address","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false},{"internalType":"address","name":"recepient","type":"address","indexed":true}],"type":"event","name":"LPTokenUnStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"tokenA","type":"address","indexed":true},{"internalType":"address","name":"tokenB","type":"address","indexed":true},{"internalType":"uint256","name":"amountA","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountB","type":"uint256","indexed":false},{"internalType":"uint256","name":"liquidity","type":"uint256","indexed":false}],"type":"event","name":"LiquidityAdded","anonymous":false},{"inputs":[{"internalType":"address","name":"tokenA","type":"address","indexed":true},{"internalType":"address","name":"tokenB","type":"address","indexed":true},{"internalType":"uint256","name":"amountA","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountB","type":"uint256","indexed":false},{"internalType":"uint256","name":"liquidity","type":"uint256","indexed":false}],"type":"event","name":"LiquidityRemoved","anonymous":false},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address","indexed":true},{"internalType":"address","name":"tokenOut","type":"address","indexed":true},{"internalType":"uint256","name":"amountIn","type":"uint256","indexed":false},{"internalType":"uint256","name":"amountOut","type":"uint256","indexed":false}],"type":"event","name":"Swapped","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"_plugin","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"aerodromeFactory","outputs":[{"internalType":"contract IPoolFactory","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"aerodromeRouter","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"caller","type":"address"}],"stateMutability":"payable","type":"function","name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"bool","name":"balanceTokenRatio","type":"bool"}],"stateMutability":"view","type":"function","name":"quoteDepositLiquidity","outputs":[{"internalType":"uint256","name":"amountAOut","type":"uint256"},{"internalType":"uint256","name":"amountBOut","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"params":{"name":"Name of the connector","version":"Version of the connector"}},"execute(bytes)":{"params":{"data":"The encoded parameters for the desired action"},"returns":{"_0":"bytes Encoded return data from the call"}},"getName()":{"returns":{"_0":"string The name of the connector"}},"getVersion()":{"returns":{"_0":"uint256 The version of the connector"}},"quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)":{"params":{"amountA":"The amount of token A being deposited","amountB":"The amount of token B being deposited","balanceTokenRatio":"Indicates whether to balance the token ratio with a swap","stable":"Indicates whether the pair is a stable pair","tokenA":"The address of token A","tokenB":"The address of token B"},"returns":{"amountAOut":"The amount of token A expected to be deposited","amountBOut":"The amount of token B expected to be deposited"}}},"version":1},"userdoc":{"kind":"user","methods":{"_plugin()":{"notice":"Address of the connector plugin"},"constructor":{"notice":"Initializes the AerodromeConnector"},"execute(bytes)":{"notice":"Executes a liquidity action on Aerodrome"},"execute(bytes,address)":{"notice":"Allows specifying a caller (to be used by the plugin)"},"getName()":{"notice":"Gets the name of the connector"},"getVersion()":{"notice":"Gets the version of the connector"},"quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)":{"notice":"Quotes the expected amounts of token A and token B to deposit in a liquidity pool"}},"version":1}},"settings":{"remappings":["@aerodrome/contracts/=lib/contracts/","@coinbase/smart-wallet/=lib/smart-wallet/","@opengsn/=lib/contracts/lib/gsn/packages/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@uniswap/v3-core/=lib/contracts/lib/v3-core/","FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/","account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/","contracts/=lib/contracts/contracts/","ds-test/=lib/contracts/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gsn/=lib/contracts/lib/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","p256-verifier/=lib/smart-wallet/lib/p256-verifier/","safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/","smart-wallet/=lib/smart-wallet/","solady/=lib/smart-wallet/lib/solady/src/","utils/=lib/contracts/test/utils/","v3-core/=lib/contracts/lib/v3-core/","webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/connectors/base/aerodrome/main.sol":"AerodromeConnector"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/contracts/contracts/interfaces/IPool.sol":{"keccak256":"0xb9d9fc89fe1d37370a851b85fa856f32026c93cd56084a2db7ab4c50f89b6b4f","urls":["bzz-raw://e1ac3e07ff83ce27e641b75e129a3f057852455f209e2a98cf1f9f16bc540758","dweb:/ipfs/QmQehv4Pyi4sw9m1qHNhuoxeVcYvouyFJft3LVoV2MLD7c"],"license":"MIT"},"lib/contracts/contracts/interfaces/IRouter.sol":{"keccak256":"0x3f27948c9630a73b69ef67c7d48f281e2a55fb7448069b74f7efc62ce8936def","urls":["bzz-raw://96fa11dc0cb8f0da4b63be911aebe38eaca545c5f370479ee45bb93cfc748a07","dweb:/ipfs/QmWgkipaWSvLVdtn1L4xMNEbSaRnLwzpR6e2fFWWB8n5sj"],"license":"MIT"},"lib/contracts/contracts/interfaces/IWETH.sol":{"keccak256":"0x6f443b30d7c2ba47ca3e0ce6344ab885c325cd223f14cd96ddba014c1033a2ec","urls":["bzz-raw://82a174ff95c5f792522d1ef3a468ea367075b168c7a0189d8918079756670a53","dweb:/ipfs/Qmejcmattr1iC4hm88Kho3jf1euSwcms9xLN7tY297hPrv"],"license":"MIT"},"lib/contracts/contracts/interfaces/factories/IPoolFactory.sol":{"keccak256":"0xc3a1d6e2e13a8a816abb6a591ff02c9a3972c53e67dd6cd75140291eadf8e98a","urls":["bzz-raw://cd9eb9108c6b9c610a220636b4e2c50b3b8192c5398e52d601cf61803ca4b9a6","dweb:/ipfs/QmW6taSoLHwyChGnpsyoRXJP83NkhUpatH2HTA3QVDaHHV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7","urls":["bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db","dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330","urls":["bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf","dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol":{"keccak256":"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261","urls":["bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11","dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"src/BaseConnector.sol":{"keccak256":"0xd5e83d6aaa9cd7539a274c716ccd698ebc7b7a72264177450ede92d87b6c33d6","urls":["bzz-raw://d39dad05f3b6c5fad76579753942a179ad240996d7a05be1b3bb91be6359dc4d","dweb:/ipfs/QmcxW81AdyDC7cketTi1xew5kVKWLa1Ki58RZ4AuTjFGpS"],"license":"MIT"},"src/connectors/base/aerodrome/events.sol":{"keccak256":"0x0569863f895832cc4f92f6ace1c3d25d52a2661a3a429ab02c4d028f0ad2a37c","urls":["bzz-raw://36dbfb52b77deff5d2bf5effff6bf51b188a9b44bbf8d3c07b9feed9530ec43a","dweb:/ipfs/QmRD5oWBrTzYGn4Hbkr1vyh9HU6sXPqHjsLHJdwy77yWFK"],"license":"MIT"},"src/connectors/base/aerodrome/interface.sol":{"keccak256":"0x01554973801e9aadeda05298174b603b96e3e62ce5a59d966e29324084357971","urls":["bzz-raw://6dde59a4bed84b5b022c09d39c23c8063e0150fc6dad045376354f13ccaa4919","dweb:/ipfs/QmU9E8awV9m4fx6923yM5TWajmRiB41TcJteovUxtfrqen"],"license":"MIT"},"src/connectors/base/aerodrome/main.sol":{"keccak256":"0xd41a8d330944f4f6faf950aa9f35a5deeeecb3bd1242e296f52d0abce67ffc3c","urls":["bzz-raw://64b2ce5fc9ee7fbec5640c339eec9367632b638101da2328af8e725a148d843c","dweb:/ipfs/QmdVKT96b4ZdEMJQ4GjakLqHCape4CAywJJH9mUjWmL4ht"],"license":"GNU"},"src/connectors/base/aerodrome/utils.sol":{"keccak256":"0x5f81c8cca489557f2b5e2ef20d0ebfe7d460cd7b71eefc3cf0bfc6e0e74fd9f3","urls":["bzz-raw://2f37d56b6d03ffad53d5ba1b4d661d169f1c978e1227e3c98513a2f19190f335","dweb:/ipfs/Qma3ZKQJrbzUm3bv3pSosrerrPP8amwvWV8V1h8MbBwqer"],"license":"GNU"},"src/connectors/base/common/constant.sol":{"keccak256":"0x5bbbb27e53700f83078838742c945c4a649a7b51554dde8b756078348e79a132","urls":["bzz-raw://365e58f4d448d5f84e6ef6e2b6047849bea6c27b8d5bf44d7f55d15729519d6a","dweb:/ipfs/QmRhrYNhRsjGQcWAFWMMLfdxP6YDDdpBxGSLV3QQmyaAuZ"],"license":"MIT"},"src/interface/IConnector.sol":{"keccak256":"0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04","urls":["bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973","dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a"],"license":"MIT"},"src/lib/Babylonian.sol":{"keccak256":"0xadab3cc6503267d6cd5ee1d1c50d2fc6f4443916a35419d4c46ee4f270ea17a4","urls":["bzz-raw://a8e495ca3a3f727836182357c28f0998cebc40f842aca480b49ca34ff1113419","dweb:/ipfs/QmdX7NgnduduUoVAc5XFJH9osEVweJNGV92ozUdL2GX6HZ"],"license":"GPL-3.0-or-later"}},"version":1},"id":35}
\ No newline at end of file
+{
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [
+ { "name": "name", "type": "string", "internalType": "string" },
+ { "name": "version", "type": "uint256", "internalType": "uint256" },
+ { "name": "plugin", "type": "address", "internalType": "address" }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "_plugin",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "address" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "aerodromeFactory",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "contract IPoolFactory" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "aerodromeRouter",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "contract IRouter" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [{ "name": "data", "type": "bytes", "internalType": "bytes" }],
+ "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ { "name": "data", "type": "bytes", "internalType": "bytes" },
+ { "name": "caller", "type": "address", "internalType": "address" }
+ ],
+ "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getName",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "string", "internalType": "string" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "getVersion",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "quoteDepositLiquidity",
+ "inputs": [
+ { "name": "tokenA", "type": "address", "internalType": "address" },
+ { "name": "tokenB", "type": "address", "internalType": "address" },
+ { "name": "stable", "type": "bool", "internalType": "bool" },
+ { "name": "amountA", "type": "uint256", "internalType": "uint256" },
+ { "name": "amountB", "type": "uint256", "internalType": "uint256" },
+ { "name": "balanceTokenRatio", "type": "bool", "internalType": "bool" }
+ ],
+ "outputs": [
+ { "name": "amountAOut", "type": "uint256", "internalType": "uint256" },
+ { "name": "amountBOut", "type": "uint256", "internalType": "uint256" }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "event",
+ "name": "AeroRewardsClaimed",
+ "inputs": [
+ { "name": "guageAddress", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "rewardToken", "type": "address", "indexed": true, "internalType": "address" }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "FeesWithdrawn",
+ "inputs": [
+ { "name": "poolAddress", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "token0", "type": "address", "indexed": false, "internalType": "address" },
+ { "name": "amount0", "type": "uint256", "indexed": false, "internalType": "uint256" },
+ { "name": "token1", "type": "address", "indexed": false, "internalType": "address" },
+ { "name": "amount1", "type": "uint256", "indexed": false, "internalType": "uint256" }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "LPTokenStaked",
+ "inputs": [
+ { "name": "guageAddress", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "LPTokenUnStaked",
+ "inputs": [
+ { "name": "guageAddress", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" },
+ { "name": "recepient", "type": "address", "indexed": true, "internalType": "address" }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "LiquidityAdded",
+ "inputs": [
+ { "name": "tokenA", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "tokenB", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "amountA", "type": "uint256", "indexed": false, "internalType": "uint256" },
+ { "name": "amountB", "type": "uint256", "indexed": false, "internalType": "uint256" },
+ { "name": "liquidity", "type": "uint256", "indexed": false, "internalType": "uint256" }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "LiquidityRemoved",
+ "inputs": [
+ { "name": "tokenA", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "tokenB", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "amountA", "type": "uint256", "indexed": false, "internalType": "uint256" },
+ { "name": "amountB", "type": "uint256", "indexed": false, "internalType": "uint256" },
+ { "name": "liquidity", "type": "uint256", "indexed": false, "internalType": "uint256" }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Swapped",
+ "inputs": [
+ { "name": "tokenIn", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "tokenOut", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "amountIn", "type": "uint256", "indexed": false, "internalType": "uint256" },
+ { "name": "amountOut", "type": "uint256", "indexed": false, "internalType": "uint256" }
+ ],
+ "anonymous": false
+ },
+ { "type": "error", "name": "AerodromeUtils_ExceededMaxPriceImpact", "inputs": [] },
+ { "type": "error", "name": "AerodromeUtils_ExceededMaxSlippage", "inputs": [] },
+ { "type": "error", "name": "AerodromeUtils_ExceededMaxValueLoss", "inputs": [] },
+ { "type": "error", "name": "DeadlineExpired", "inputs": [] },
+ { "type": "error", "name": "ExecutionFailed", "inputs": [{ "name": "reason", "type": "string", "internalType": "string" }] },
+ { "type": "error", "name": "IncorrectETHAmount", "inputs": [] },
+ { "type": "error", "name": "InsufficientLiquidity", "inputs": [] },
+ { "type": "error", "name": "InvalidSelector", "inputs": [] },
+ { "type": "error", "name": "InvalidVersionNumber", "inputs": [] },
+ { "type": "error", "name": "PoolDoesNotExist", "inputs": [] },
+ { "type": "error", "name": "SlippageExceeded", "inputs": [] },
+ { "type": "error", "name": "UnauthorizedCaller", "inputs": [] }
+ ],
+ "bytecode": {
+ "object": "0x610120604052346200018057620040c8803803806200001e81620001ac565b928339810190606081830312620001805780516001600160401b0392908381116200018057820181601f8201121562000180578051938411620001985760209362000072601f8201601f19168601620001ac565b92818452858284010111620001805784915f5b828110620001845750505f908301909101528183015160409290920151926001600160a01b0384168403620001805782156200016e57815191012060805260a05260c05273cf77a3ba9a5ca399b7c97c74d54e5b1beb874e4360e05261010073420dd381b31aef6683db6b902084cb0ffece40da8152604051613ef59182620001d383396080518261060c015260a05182610672015260c0518281816106df0152610912015260e0518281816104ce01528181611476015281816115140152818161167e01528181611db0015261213a01525181818161053c01528181610aa40152611cca0152f35b60405163ad92452760e01b8152600490fd5b5f80fd5b818101840151858201850152830162000085565b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b03811183821017620001985760405256fe6101a0604052600436101561001b575b3615610019575f80fd5b005b5f3560e01c806309c5eabe146107035780630cfd9ad4146106955780630d8e6e2c1461063d57806317d7de7c146105d65780636accdc1314610560578063c45acd23146104f2578063e18e3a68146104845763e69224d40361000f57346104805760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805773ffffffffffffffffffffffffffffffffffffffff6004351660043503610480576100cf6107e4565b6044351515604435036104805760a435151560a43503610480576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152821660248201526044803515159082015260843590606480359060209083908173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f91610463575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f92610432575b505f925f915b600283106102be575b5050604080517fc92de3ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152958616602482015260448035151590820152949092166064850152506084830191909152818060a48101038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3576040915f915f91610284575b5082519182526020820152f35b90506102a69150823d84116102ac575b61029e81836108ca565b810190612cdd565b5f610277565b503d610294565b6040513d5f823e3d90fd5b60a4949192943561040d575b604051907fce700c2900000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff60043516600483015273ffffffffffffffffffffffffffffffffffffffff871660248301526044351515604483015273ffffffffffffffffffffffffffffffffffffffff851660648301528060848301528360a483015260608260c48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b3576103a9925f80915f936103d2575b5061039d906103a39394612be6565b95612be6565b92612d0e565b93604435156044356103c8575b6103c357600101916101d0565b6101d9565b5060a435156103b6565b6103a3935061039d92506103fe915060603d606011610406575b6103f681836108ca565b810190612cf3565b93509161038e565b503d6103ec565b61042b919261042360443582848a60043561358d565b919092613438565b91906102ca565b61045591925060203d60201161045c575b61044d81836108ca565b810190612b2c565b905f6101ca565b503d610443565b61047a9150823d841161045c5761044d81836108ca565b5f61018c565b5f80fd5b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6105b06105d292369060040161075a565b6105b86107e4565b9161090b565b604051918291602083526020830190610788565b0390f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610480576105d26040517f00000000000000000000000000000000000000000000000000000000000000006020820152602081526105be81610892565b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6107536105d292369060040161075a565b339161090b565b9181601f840112156104805782359167ffffffffffffffff8311610480576020838186019501011161048057565b91908251928382525f5b8481106107d05750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b602081830181015184830182015201610792565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b3590811515820361048057565b67ffffffffffffffff811161084957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761084957604052565b6040810190811067ffffffffffffffff82111761084957604052565b6060810190811067ffffffffffffffff82111761084957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761084957604052565b915f9190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603612b2457915b816004116104805783357fffffffff00000000000000000000000000000000000000000000000000000000167f5a47ddc3000000000000000000000000000000000000000000000000000000008103611ba757505f925f946101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc825f968101030112610480576109e260048201610807565b610180526109f260248201610807565b61014052610a0260448201610828565b90610a0f60e48201610828565b610a1c6101048301610807565b906101248301354211611b7d576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff90811660048401521660248201528415156044820152906020828060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156102b3575f92611b5c575b5073ffffffffffffffffffffffffffffffffffffffff821615611b32575f60648501356119cf575b6084850135611816575b5091610b1182612d1b565b92606485013560a0526084850135610160525f610120525b60026101205110611441575b5050610b4090612d1b565b818082111561143257610b5291612be6565b61271081029080820461271014901517156112e757606491610b7391613494565b11611408576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015216602482015282151560448201529060208260648173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f916113eb575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f926113ca575b50604080517fc92de3ec000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015290811660248301528515156044830152841660648201526084810188905291908260a48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3575f925f956113a3575b5060a482013583108015611396575b61136c5773ffffffffffffffffffffffffffffffffffffffff610d1c612dd9565b9460405192610d2a84610876565b8261014051168452826101805116602085015215156040840152166060820152610d5384612b88565b52610d5d83612b88565b50604051927f5509a1ac00000000000000000000000000000000000000000000000000000000845260848201356004850152604060248501525f8480610da66044820185612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b357610e2c610ded610de25f94610e6d988691611352575b50612bc2565b516064860135612d0e565b9685606486013511841461134b57610e09866064870135612be6565b945b81806084830135118614611342576084610e26920135612be6565b90612d0e565b60405195869283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9182156102b357610eb3935f93611314575b50610eac91610ea691612d0e565b91612bc2565b5190612d0e565b818110611286575b505060a051611134575b61016051610fa2575b505090610f73610f9f9260405173ffffffffffffffffffffffffffffffffffffffff6101405116907f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f773ffffffffffffffffffffffffffffffffffffffff61018051169180610f50868b8a846040919493926060820195825260208201520152565b0390a3604051948593602085016040919493926060820195825260208201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b90565b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101405116145f1461107957803b15611075578280916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083526101605160048401525af1801561106a57611052575b509161104b828080610f7395610f9f989761016051905af16110456134cb565b50613528565b9192610ece565b61105c8391610835565b611066575f611025565b5080fd5b6040513d85823e3d90fd5b8280fd5b506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101605173ffffffffffffffffffffffffffffffffffffffff9283166004830152602482015261014051909291602091849160449183918691165af1908115611128575091610f7391610f9f94936110f9575b5061104b565b61111a9060203d602011611121575b61111281836108ca565b810190612b58565b505f6110f3565b503d611108565b604051903d90823e3d90fd5b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101805116145f146111e457803b15610480575f80916024604051809481937f2e1a7d4d00000000000000000000000000000000000000000000000000000000835260a05160048401525af180156102b3576111d1575b506111cc8280808060a051865af16110456134cb565b610ec5565b6111dc919250610835565b5f905f6111b6565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260a05173ffffffffffffffffffffffffffffffffffffffff831660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611267575b50610ec5565b61127f9060203d6020116111215761111281836108ca565b505f611261565b6112909082612be6565b61271081029080820461271014901517156112e75760c8916112b191613494565b116112bd575f80610ebb565b60046040517ffe3cf204000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610ea691935091611339610eac933d805f833e61133181836108ca565b810190612bf3565b93915091610e98565b50508390612d0e565b8394610e0b565b61136691503d8088833e61133181836108ca565b5f610ddc565b60046040517fc990cf68000000000000000000000000000000000000000000000000000000008152fd5b5060c48201358510610cfb565b9094506113c091925060403d6040116102ac5761029e81836108ca565b919091935f610cec565b6113e491925060203d60201161045c5761044d81836108ca565b905f610c54565b6114029150823d841161045c5761044d81836108ca565b5f610c16565b60046040517fd0bcb760000000000000000000000000000000000000000000000000000000008152fd5b9061143c91612be6565b610b52565b90979998816117b7575b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815260a0517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611798575b506040517f095ea7b3000000000000000000000000000000000000000000000000000000008152610160517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61014051165af180156102b357611779575b50604051610100527f5a47ddc300000000000000000000000000000000000000000000000000000000610100515273ffffffffffffffffffffffffffffffffffffffff6101805116600461010051015273ffffffffffffffffffffffffffffffffffffffff61014051166024610100510152851515604461010051015260a05160646101005101526101605160846101005101525f60a46101005101525f60c461010051015273ffffffffffffffffffffffffffffffffffffffff891660e4610100510152610124850135610104610100510152606061010051610124610100515f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af160e05260e051156102b357611705905f6080525f60c0525f9060e051611730575b6116f56116ff916116d660805160a051612be6565b60a0526116e860c05161016051612be6565b6101605260805190612d0e565b9b60c05190612d0e565b9b612d0e565b97851586611728575b61172357600161012051016101205290610b29565b610b35565b50811561170e565b905060603d606011611772575b6116f5611762826117546116ff94610100516108ca565b610100510161010051612cf3565b9160805260c052929150506116c1565b503d61173d565b6117919060203d6020116111215761111281836108ca565b505f611585565b6117b09060203d6020116111215761111281836108ca565b505f6114e7565b61180a6117fe876101605160a05173ffffffffffffffffffffffffffffffffffffffff610140511673ffffffffffffffffffffffffffffffffffffffff6101805116612e30565b6101605160a051613438565b6101605260a05261144b565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff610140511614806119c6575b1561191a57608485013534036118f0577342000000000000000000000000000000000000063b156118e2576040517fd0e30db00000000000000000000000000000000000000000000000000000000081528181600481347342000000000000000000000000000000000000065af180156118e5576118ce575b50505b5f610b06565b6118d88291610835565b6118e257806118c5565b80fd5b6040513d84823e3d90fd5b60046040517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201523060248201526084860135604482015290602082806064810103818473ffffffffffffffffffffffffffffffffffffffff61014051165af190811561112857506119a7575b506118c8565b6119bf9060203d6020116111215761111281836108ca565b505f6119a1565b5034151561184c565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff61018051161480611b29575b15611a9557606485013534036118f0577342000000000000000000000000000000000000063b15610480576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f81600481347342000000000000000000000000000000000000065af180156102b357611a84575b50610afc565b611a8e9150610835565b5f80611a7e565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015230602483015260648781013560448401526101805160209284929183915f91165af180156102b357611b0a5750610afc565b611b229060203d6020116111215761111281836108ca565b505f611a7e565b50341515611a05565b60046040517f9c8787c0000000000000000000000000000000000000000000000000000000008152fd5b611b7691925060203d60201161045c5761044d81836108ca565b905f610ad4565b60046040517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b90507f0dede6c4000000000000000000000000000000000000000000000000000000008103611fe157507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8361010092810103011261048057611c0c60048301610807565b91611c1960248201610807565b91611c2660448301610828565b93611c3360c48401610807565b73ffffffffffffffffffffffffffffffffffffffff60e4850135921692824211611b7d576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528716602482015287151560448201526020818060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156102b35773ffffffffffffffffffffffffffffffffffffffff915f91611fc2575b5016968715611b32576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015230602483015260648681013560448401526020908390815f8c5af19182156102b357611e0b92611fa3575b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166004820181905260648801356024830152989092602091849182905f9082906044820190565b03925af180156102b35773ffffffffffffffffffffffffffffffffffffffff98604095610104945f93611f84575b5086519a8b9687957f0dede6c40000000000000000000000000000000000000000000000000000000087528a6004880152828d1660248801521515604487015260648b0135606487015260848b0135608487015260a48b013560a48701521660c485015260e48401525af19283156102b3575f945f94611f26575b506040805186815260208101869052606494909401359084015273ffffffffffffffffffffffffffffffffffffffff16917fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b90606090a3604051916020830152604082015260408152610f9f816108ae565b73ffffffffffffffffffffffffffffffffffffffff95507fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b919450611f799060403d6040116102ac5761029e81836108ca565b959095949150611eb4565b611f9c9060203d6020116111215761111281836108ca565b505f611e39565b611fbb9060203d6020116111215761111281836108ca565b505f611d87565b611fdb915060203d60201161045c5761044d81836108ca565b5f611d0f565b9293927fcac88ea90000000000000000000000000000000000000000000000000000000092919083810361282c5750840160a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301126104805760048501359160248087013593604488013567ffffffffffffffff811161048057880194846023870112156104805760048601359661207c88612b70565b9660409861208c8a51998a6108ca565b80895260209786898b019260071b84010192818411610480578701915b8383106127cc575050505060846120c260648c01610807565b9a0135928342116127a35773ffffffffffffffffffffffffffffffffffffffff6120eb89612b88565b515116955f8083612658575b6124fe575b505088517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820181905260248201839052929088816044815f8c5af180156124f4576124d7575b5088519b8c957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8097019d8e116124ab578a5f8d9e9f8c839f9d9e73ffffffffffffffffffffffffffffffffffffffff926121d891612bd2565b510151169b8a61221e825194859384937f5509a1ac0000000000000000000000000000000000000000000000000000000085528b60048601528401526044830190612c6d565b0381895afa9081156124a1575f91612487575b5080519088820191821161245b57879161224a91612bd2565b5110612432578c519b8c9485948552600485015286898501526044840160a0905260a4840161227891612c6d565b9173ffffffffffffffffffffffffffffffffffffffff166064840152608483015203815a5f948591f1968715612428575f9761240c575b5086518281019081116123e0576122c69088612bd2565b51106123b7576122d586612b88565b5191865191820191821161238c5750957fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb916123148798839798612bd2565b51825191825287820152a3805192839182018380840152815180915283606084019201935f5b82811061237557505050610f9f9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b85518452948101948694509281019260010161233a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b600487517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b837f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124219197503d805f833e61133181836108ca565b955f6122af565b88513d5f823e3d90fd5b60048d517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b897f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b61249b91503d805f833e61133181836108ca565b5f612231565b8e513d5f823e3d90fd5b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124ed90893d8b116111215761111281836108ca565b505f61217e565b8b513d5f823e3d90fd5b88818061264f575b156125bc575090503461259357734200000000000000000000000000000000000006803b1561106657816004918c51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af1801561258957612575575b50505b5f806120fc565b61257f8291610835565b6118e2578061256b565b8b513d84823e3d90fd5b60048a517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b8b517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff939093166004840152306024840152604483018290528260648184805af19081156126445750612627575b5061256e565b61263d90883d8a116111215761111281836108ca565b505f612621565b8b51903d90823e3d90fd5b50341515612506565b507342000000000000000000000000000000000000068089148061279a575b15612711578334036126e857803b15610480575f6004918d51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af180156126de576126cd575b50806120f7565b6126d79150610835565b5f806126c6565b8c513d5f823e3d90fd5b60048c517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b508a517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523060248201526044810184905289816064815f8d5af180156126de5790829161277d575b506120f7565b612793908b3d8d116111215761111281836108ca565b505f612777565b50341515612677565b600489517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b60808383031261048057896080918d8051906127e782610876565b6127f087610807565b82526127fd848801610807565b8483015261280c818801610828565b90820152606061281d818801610807565b908201528152019201916120a9565b9394937f6e553f6500000000000000000000000000000000000000000000000000000000935083146128825760046040517f7352d91c000000000000000000000000000000000000000000000000000000008152fd5b83907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604092839281010301126104805773ffffffffffffffffffffffffffffffffffffffff60246128d660048701610807565b95013594168151937f72f702f30000000000000000000000000000000000000000000000000000000085526020948581600481865afa908115612ad6579073ffffffffffffffffffffffffffffffffffffffff915f91612b07575b5084517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201523060248201526044810189905291169086816064815f865af18015612afd57612ae0575b5083517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101889052908690829060449082905f905af18015612ad657612ab9575b50813b156104805782519081526004810186905273ffffffffffffffffffffffffffffffffffffffff841660248201525f8160448183865af18015612aaf5791610f739391610f9f969593612aa0575b507ffa2529c0b8e878c5cfbd265efb60d6c35f0ba5ad1132da46b8bde097baac8a49858351898152a251948593840190929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b612aa990610835565b5f612a49565b83513d5f823e3d90fd5b612acf90863d88116111215761111281836108ca565b505f6129f9565b84513d5f823e3d90fd5b612af690873d89116111215761111281836108ca565b505f612997565b85513d5f823e3d90fd5b612b1e9150873d891161045c5761044d81836108ca565b5f612931565b50339161094e565b90816020910312610480575173ffffffffffffffffffffffffffffffffffffffff811681036104805790565b90816020910312610480575180151581036104805790565b67ffffffffffffffff81116108495760051b60200190565b805115612b955760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805160011015612b955760400190565b8051821015612b955760209160051b010190565b919082039182116112e757565b60209081818403126104805780519067ffffffffffffffff821161048057019180601f84011215610480578251612c2981612b70565b93612c3760405195866108ca565b818552838086019260051b820101928311610480578301905b828210612c5e575050505090565b81518152908301908301612c50565b9081518082526020808093019301915f5b828110612c8c575050505090565b8351805173ffffffffffffffffffffffffffffffffffffffff908116875281840151811687850152604080830151151590880152606091820151169086015260809094019392810192600101612c7e565b9190826040910312610480576020825192015190565b90816060910312610480578051916040602083015192015190565b919082018092116112e757565b606073ffffffffffffffffffffffffffffffffffffffff916004604051809481937f0902f1ac000000000000000000000000000000000000000000000000000000008352165afa80156102b357610f9f915f905f92612d7b575b50613a63565b9050612d96915060603d606011610406576103f681836108ca565b50905f612d75565b90816020910312610480575160ff811681036104805790565b60ff166012039060ff82116112e757565b60ff16604d81116112e757600a0a90565b60409060405191612de983610892565b6001835282915f5b602080821015612e2857835160209291612e0a82610876565b5f82525f818301525f868301525f6060830152828801015201612df1565b505091925050565b9493909291946040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff87165afa9081156102b357612e9e91612e99915f91613409575b50612db7565b612dc8565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff8a165afa9081156102b357612edf91612e99915f916134095750612db7565b96604051947fd4b6846d00000000000000000000000000000000000000000000000000000000865260208660048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9586156102b357612fa0966040915f916133ea575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152808b1660248301528815156044830152909116606482015296879081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f965f9a6133c3575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528916602482015286151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357876020916130a7965f916133a6575b506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35787945f9461336f575b5081613347575f985b899c8a155f1461333657906130f19794939291613bba565b925b83156133145750613102612dd9565b91861561330d57815b87156133075785905b604051967fd4b6846d00000000000000000000000000000000000000000000000000000000885260208860048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9485156102b35773ffffffffffffffffffffffffffffffffffffffff60209681966044965f9c8d936132e6575b508390816040519661319688610876565b1686521689850152151560408401521660608201526131b487612b88565b526131be86612b88565b508988146132df57505b60405196879384927f095ea7b300000000000000000000000000000000000000000000000000000000845273cf77a3ba9a5ca399b7c97c74d54e5b1beb874e436004850152886024850152165af19182156102b357613270935f936132c0575b5060405193849283927fcac88ea9000000000000000000000000000000000000000000000000000000008452600484015284602484015260a0604484015260a4830190612c6d565b30606483015242608483015203818373cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435af19081156102b3575f916132a857509190565b6132bc91503d805f833e61133181836108ca565b9190565b6132d89060203d6020116111215761111281836108ca565b505f613228565b90506131c8565b84919350613300908b3d8d1161045c5761044d81836108ca565b9290613185565b80613114565b849161310b565b955050505050604051613326816108ae565b6002815260403660208301379190565b613341979391613bba565b926130f3565b806133555760015b986130d9565b61335f8183613a63565b6133698d8b613a63565b1061334f565b945092506020843d60201161339e575b8161338c602093836108ca565b8101031261048057869351925f6130d0565b3d915061337f565b6133bd9150833d851161045c5761044d81836108ca565b5f61304f565b9099506133e091965060403d6040116102ac5761029e81836108ca565b959095985f612fc9565b613403915060203d60201161045c5761044d81836108ca565b5f612f39565b61342b915060203d602011613431575b61342381836108ca565b810190612d9e565b5f612e93565b503d613419565b9293929091156134635790610eac61345d610f9f9361345687612b88565b5190612be6565b94612bc2565b610eac61347861347e93613456879697612b88565b93612bc2565b91565b818102929181159184041417156112e757565b811561349e570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b3d15613523573d9067ffffffffffffffff8211610849576040519161351860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846108ca565b82523d5f602084013e565b606090565b1561352f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152fd5b919493926040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff89165afa9081156102b3576135f391612e99915f916134095750612db7565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff88165afa9081156102b35761363491612e99915f916134095750612db7565b96604051927fd4b6846d00000000000000000000000000000000000000000000000000000000845260208460048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3576136f5946040915f91613a44575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a16600483015280891660248301528a15156044830152909116606482015294859081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f945f9a613a1d575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528716602482015288151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357896020916137fb965f916133a657506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35789945f946139e6575b50816139be575f965b879c88155f146139ad57906138459794939291613bba565b905b81156133145750613856612dd9565b9186156139a657835b871561399e5750925b6040517fd4b6846d00000000000000000000000000000000000000000000000000000000815260208160048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b357613950965f9673ffffffffffffffffffffffffffffffffffffffff93889361397b575b50839081604051966138e588610876565b1686521660208501521515604084015216606082015261390483612b88565b5261390e82612b88565b5060405193849283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3575f916132a857509190565b849193506139979060203d60201161045c5761044d81836108ca565b92906138d4565b905092613868565b809361385f565b6139b8979391613bba565b90613847565b806139cc5760015b9661382d565b6139d68183613a63565b6139e08d89613a63565b106139c6565b945092506020843d602011613a15575b81613a03602093836108ca565b8101031261048057889351925f613824565b3d91506139f6565b909950613a3a91945060403d6040116102ac5761029e81836108ca565b939093985f61371e565b613a5d915060203d60201161045c5761044d81836108ca565b5f61368e565b906b033b2e3c9fd0803ce8000000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8284099282810292838086109503948086039514613bac5784831115610480578291098119600181018091116112e757613ae090831680930494600184805f030401908584119003613481565b9203041781600302916003830481036112e7576002809318613b028183613481565b84038481116112e757613b1491613481565b613b1e8183613481565b84038481116112e757613b3091613481565b613b3a8183613481565b84038481116112e757613b4c91613481565b613b568183613481565b84038481116112e757613b6891613481565b613b728183613481565b8403908482116112e757613b9091613b8991613481565b8092613481565b83039283116112e757610f9f92613ba691613481565b90613481565b505080925015610480570490565b94613be381613bdd87613bd781613be997999d989b9c9a9c613481565b99613481565b95613481565b97613481565b92670de0b6b3a76400009384613bff878a613481565b049185613c1881613c108a86613481565b04968b613481565b049315613c575750505090613c2c91612be6565b8181029181830414901517156112e757613c4c613c5292610f9f95612d0e565b90613494565b613494565b601e919492959650145f14613d1857613c708185612d0e565b91623cda2985810290810486036112e757826009026009810484036112e757613c9891612d0e565b90623cda2090808202918204036112e757613cc893613ba6613cbd92613cc294612d0e565b613da8565b93612d0e565b916107cd92808402938404036112e757613ceb92613ce591612be6565b94612d0e565b926107ca93808502948504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b613d228185612d0e565b91619ab185810290810486036112e75782613d3c91612d0e565b90619ab090808202918204036112e757613d6093613ba6613cbd92613cc294612d0e565b918260c7029260c78404036112e757613d7c92613ce591612be6565b928360c6029360c68504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b8015613ef057806001700100000000000000000000000000000000831015613eda575b60048268010000000000000000613e82941015613ecd575b640100000000811015613ec0575b62010000811015613eb3575b610100811015613ea7575b6010811015613e9b575b1015613e93575b613e238184613494565b0160011c613e318184613494565b0160011c613e3f8184613494565b0160011c613e4d8184613494565b0160011c613e5b8184613494565b0160011c613e698184613494565b0160011c613e778184613494565b0160011c8092613494565b80821015613e8e575090565b905090565b60011b613e19565b811c9160021b91613e12565b60081c91811b91613e08565b60101c9160081b91613dfd565b60201c9160101b91613df1565b60401c9160201b91613de3565b5050608081901c68010000000000000000613dcb565b505f9056",
+ "sourceMap": "585:11320:35:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;585:11320:35;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;-1:-1:-1;;;585:11320:35;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;585:11320:35;;;;;;880:13:30;;876:48;;585:11320:35;;;;943:23:30;935:31;;976:19;;1005:17;;768:42:37;1278:43:35;;1331:50;862:42:37;1331:50:35;;585:11320;;;;;;;;935:31:30;585:11320:35;;;;;976:19:30;585:11320:35;;;;;1005:17:30;585:11320:35;;;;;;;;;;1278:43;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;876:48:30;585:11320:35;;-1:-1:-1;;;902:22:30;;;;;585:11320:35;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;-1:-1:-1;585:11320:35;;;;;;;;-1:-1:-1;;585:11320:35;;;-1:-1:-1;;;;;585:11320:35;;;;;;;;;;:::o",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x6101a0604052600436101561001b575b3615610019575f80fd5b005b5f3560e01c806309c5eabe146107035780630cfd9ad4146106955780630d8e6e2c1461063d57806317d7de7c146105d65780636accdc1314610560578063c45acd23146104f2578063e18e3a68146104845763e69224d40361000f57346104805760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805773ffffffffffffffffffffffffffffffffffffffff6004351660043503610480576100cf6107e4565b6044351515604435036104805760a435151560a43503610480576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152821660248201526044803515159082015260843590606480359060209083908173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f91610463575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f92610432575b505f925f915b600283106102be575b5050604080517fc92de3ec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff60048035821690830152958616602482015260448035151590820152949092166064850152506084830191909152818060a48101038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3576040915f915f91610284575b5082519182526020820152f35b90506102a69150823d84116102ac575b61029e81836108ca565b810190612cdd565b5f610277565b503d610294565b6040513d5f823e3d90fd5b60a4949192943561040d575b604051907fce700c2900000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff60043516600483015273ffffffffffffffffffffffffffffffffffffffff871660248301526044351515604483015273ffffffffffffffffffffffffffffffffffffffff851660648301528060848301528360a483015260608260c48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b3576103a9925f80915f936103d2575b5061039d906103a39394612be6565b95612be6565b92612d0e565b93604435156044356103c8575b6103c357600101916101d0565b6101d9565b5060a435156103b6565b6103a3935061039d92506103fe915060603d606011610406575b6103f681836108ca565b810190612cf3565b93509161038e565b503d6103ec565b61042b919261042360443582848a60043561358d565b919092613438565b91906102ca565b61045591925060203d60201161045c575b61044d81836108ca565b810190612b2c565b905f6101ca565b503d610443565b61047a9150823d841161045c5761044d81836108ca565b5f61018c565b5f80fd5b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6105b06105d292369060040161075a565b6105b86107e4565b9161090b565b604051918291602083526020830190610788565b0390f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610480576105d26040517f00000000000000000000000000000000000000000000000000000000000000006020820152602081526105be81610892565b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610480575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261048057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104805760043567ffffffffffffffff8111610480576105be6107536105d292369060040161075a565b339161090b565b9181601f840112156104805782359167ffffffffffffffff8311610480576020838186019501011161048057565b91908251928382525f5b8481106107d05750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b602081830181015184830182015201610792565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b359073ffffffffffffffffffffffffffffffffffffffff8216820361048057565b3590811515820361048057565b67ffffffffffffffff811161084957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761084957604052565b6040810190811067ffffffffffffffff82111761084957604052565b6060810190811067ffffffffffffffff82111761084957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761084957604052565b915f9190337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603612b2457915b816004116104805783357fffffffff00000000000000000000000000000000000000000000000000000000167f5a47ddc3000000000000000000000000000000000000000000000000000000008103611ba757505f925f946101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc825f968101030112610480576109e260048201610807565b610180526109f260248201610807565b61014052610a0260448201610828565b90610a0f60e48201610828565b610a1c6101048301610807565b906101248301354211611b7d576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff90811660048401521660248201528415156044820152906020828060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156102b3575f92611b5c575b5073ffffffffffffffffffffffffffffffffffffffff821615611b32575f60648501356119cf575b6084850135611816575b5091610b1182612d1b565b92606485013560a0526084850135610160525f610120525b60026101205110611441575b5050610b4090612d1b565b818082111561143257610b5291612be6565b61271081029080820461271014901517156112e757606491610b7391613494565b11611408576040517f79bc57d5000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015216602482015282151560448201529060208260648173420dd381b31aef6683db6b902084cb0ffece40da5afa9182156102b35773ffffffffffffffffffffffffffffffffffffffff926020915f916113eb575b506004604051809581937fc45a0155000000000000000000000000000000000000000000000000000000008352165afa9182156102b3575f926113ca575b50604080517fc92de3ec000000000000000000000000000000000000000000000000000000008152610140516101805173ffffffffffffffffffffffffffffffffffffffff908116600484015290811660248301528515156044830152841660648201526084810188905291908260a48173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3575f925f956113a3575b5060a482013583108015611396575b61136c5773ffffffffffffffffffffffffffffffffffffffff610d1c612dd9565b9460405192610d2a84610876565b8261014051168452826101805116602085015215156040840152166060820152610d5384612b88565b52610d5d83612b88565b50604051927f5509a1ac00000000000000000000000000000000000000000000000000000000845260848201356004850152604060248501525f8480610da66044820185612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b357610e2c610ded610de25f94610e6d988691611352575b50612bc2565b516064860135612d0e565b9685606486013511841461134b57610e09866064870135612be6565b945b81806084830135118614611342576084610e26920135612be6565b90612d0e565b60405195869283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9182156102b357610eb3935f93611314575b50610eac91610ea691612d0e565b91612bc2565b5190612d0e565b818110611286575b505060a051611134575b61016051610fa2575b505090610f73610f9f9260405173ffffffffffffffffffffffffffffffffffffffff6101405116907f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f773ffffffffffffffffffffffffffffffffffffffff61018051169180610f50868b8a846040919493926060820195825260208201520152565b0390a3604051948593602085016040919493926060820195825260208201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b90565b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101405116145f1461107957803b15611075578280916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083526101605160048401525af1801561106a57611052575b509161104b828080610f7395610f9f989761016051905af16110456134cb565b50613528565b9192610ece565b61105c8391610835565b611066575f611025565b5080fd5b6040513d85823e3d90fd5b8280fd5b506040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526101605173ffffffffffffffffffffffffffffffffffffffff9283166004830152602482015261014051909291602091849160449183918691165af1908115611128575091610f7391610f9f94936110f9575b5061104b565b61111a9060203d602011611121575b61111281836108ca565b810190612b58565b505f6110f3565b503d611108565b604051903d90823e3d90fd5b7342000000000000000000000000000000000000068073ffffffffffffffffffffffffffffffffffffffff6101805116145f146111e457803b15610480575f80916024604051809481937f2e1a7d4d00000000000000000000000000000000000000000000000000000000835260a05160048401525af180156102b3576111d1575b506111cc8280808060a051865af16110456134cb565b610ec5565b6111dc919250610835565b5f905f6111b6565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815260a05173ffffffffffffffffffffffffffffffffffffffff831660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611267575b50610ec5565b61127f9060203d6020116111215761111281836108ca565b505f611261565b6112909082612be6565b61271081029080820461271014901517156112e75760c8916112b191613494565b116112bd575f80610ebb565b60046040517ffe3cf204000000000000000000000000000000000000000000000000000000008152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b610ea691935091611339610eac933d805f833e61133181836108ca565b810190612bf3565b93915091610e98565b50508390612d0e565b8394610e0b565b61136691503d8088833e61133181836108ca565b5f610ddc565b60046040517fc990cf68000000000000000000000000000000000000000000000000000000008152fd5b5060c48201358510610cfb565b9094506113c091925060403d6040116102ac5761029e81836108ca565b919091935f610cec565b6113e491925060203d60201161045c5761044d81836108ca565b905f610c54565b6114029150823d841161045c5761044d81836108ca565b5f610c16565b60046040517fd0bcb760000000000000000000000000000000000000000000000000000000008152fd5b9061143c91612be6565b610b52565b90979998816117b7575b6040517f095ea7b300000000000000000000000000000000000000000000000000000000815260a0517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61018051165af180156102b357611798575b506040517f095ea7b3000000000000000000000000000000000000000000000000000000008152610160517f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1660048301526024820152602081806044810103815f73ffffffffffffffffffffffffffffffffffffffff61014051165af180156102b357611779575b50604051610100527f5a47ddc300000000000000000000000000000000000000000000000000000000610100515273ffffffffffffffffffffffffffffffffffffffff6101805116600461010051015273ffffffffffffffffffffffffffffffffffffffff61014051166024610100510152851515604461010051015260a05160646101005101526101605160846101005101525f60a46101005101525f60c461010051015273ffffffffffffffffffffffffffffffffffffffff891660e4610100510152610124850135610104610100510152606061010051610124610100515f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af160e05260e051156102b357611705905f6080525f60c0525f9060e051611730575b6116f56116ff916116d660805160a051612be6565b60a0526116e860c05161016051612be6565b6101605260805190612d0e565b9b60c05190612d0e565b9b612d0e565b97851586611728575b61172357600161012051016101205290610b29565b610b35565b50811561170e565b905060603d606011611772575b6116f5611762826117546116ff94610100516108ca565b610100510161010051612cf3565b9160805260c052929150506116c1565b503d61173d565b6117919060203d6020116111215761111281836108ca565b505f611585565b6117b09060203d6020116111215761111281836108ca565b505f6114e7565b61180a6117fe876101605160a05173ffffffffffffffffffffffffffffffffffffffff610140511673ffffffffffffffffffffffffffffffffffffffff6101805116612e30565b6101605160a051613438565b6101605260a05261144b565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff610140511614806119c6575b1561191a57608485013534036118f0577342000000000000000000000000000000000000063b156118e2576040517fd0e30db00000000000000000000000000000000000000000000000000000000081528181600481347342000000000000000000000000000000000000065af180156118e5576118ce575b50505b5f610b06565b6118d88291610835565b6118e257806118c5565b80fd5b6040513d84823e3d90fd5b60046040517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201523060248201526084860135604482015290602082806064810103818473ffffffffffffffffffffffffffffffffffffffff61014051165af190811561112857506119a7575b506118c8565b6119bf9060203d6020116111215761111281836108ca565b505f6119a1565b5034151561184c565b73420000000000000000000000000000000000000673ffffffffffffffffffffffffffffffffffffffff61018051161480611b29575b15611a9557606485013534036118f0577342000000000000000000000000000000000000063b15610480576040517fd0e30db00000000000000000000000000000000000000000000000000000000081525f81600481347342000000000000000000000000000000000000065af180156102b357611a84575b50610afc565b611a8e9150610835565b5f80611a7e565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015230602483015260648781013560448401526101805160209284929183915f91165af180156102b357611b0a5750610afc565b611b229060203d6020116111215761111281836108ca565b505f611a7e565b50341515611a05565b60046040517f9c8787c0000000000000000000000000000000000000000000000000000000008152fd5b611b7691925060203d60201161045c5761044d81836108ca565b905f610ad4565b60046040517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b90507f0dede6c4000000000000000000000000000000000000000000000000000000008103611fe157507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8361010092810103011261048057611c0c60048301610807565b91611c1960248201610807565b91611c2660448301610828565b93611c3360c48401610807565b73ffffffffffffffffffffffffffffffffffffffff60e4850135921692824211611b7d576040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528716602482015287151560448201526020818060648101038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156102b35773ffffffffffffffffffffffffffffffffffffffff915f91611fc2575b5016968715611b32576040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015230602483015260648681013560448401526020908390815f8c5af19182156102b357611e0b92611fa3575b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166004820181905260648801356024830152989092602091849182905f9082906044820190565b03925af180156102b35773ffffffffffffffffffffffffffffffffffffffff98604095610104945f93611f84575b5086519a8b9687957f0dede6c40000000000000000000000000000000000000000000000000000000087528a6004880152828d1660248801521515604487015260648b0135606487015260848b0135608487015260a48b013560a48701521660c485015260e48401525af19283156102b3575f945f94611f26575b506040805186815260208101869052606494909401359084015273ffffffffffffffffffffffffffffffffffffffff16917fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b90606090a3604051916020830152604082015260408152610f9f816108ae565b73ffffffffffffffffffffffffffffffffffffffff95507fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b919450611f799060403d6040116102ac5761029e81836108ca565b959095949150611eb4565b611f9c9060203d6020116111215761111281836108ca565b505f611e39565b611fbb9060203d6020116111215761111281836108ca565b505f611d87565b611fdb915060203d60201161045c5761044d81836108ca565b5f611d0f565b9293927fcac88ea90000000000000000000000000000000000000000000000000000000092919083810361282c5750840160a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301126104805760048501359160248087013593604488013567ffffffffffffffff811161048057880194846023870112156104805760048601359661207c88612b70565b9660409861208c8a51998a6108ca565b80895260209786898b019260071b84010192818411610480578701915b8383106127cc575050505060846120c260648c01610807565b9a0135928342116127a35773ffffffffffffffffffffffffffffffffffffffff6120eb89612b88565b515116955f8083612658575b6124fe575b505088517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166004820181905260248201839052929088816044815f8c5af180156124f4576124d7575b5088519b8c957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8097019d8e116124ab578a5f8d9e9f8c839f9d9e73ffffffffffffffffffffffffffffffffffffffff926121d891612bd2565b510151169b8a61221e825194859384937f5509a1ac0000000000000000000000000000000000000000000000000000000085528b60048601528401526044830190612c6d565b0381895afa9081156124a1575f91612487575b5080519088820191821161245b57879161224a91612bd2565b5110612432578c519b8c9485948552600485015286898501526044840160a0905260a4840161227891612c6d565b9173ffffffffffffffffffffffffffffffffffffffff166064840152608483015203815a5f948591f1968715612428575f9761240c575b5086518281019081116123e0576122c69088612bd2565b51106123b7576122d586612b88565b5191865191820191821161238c5750957fa078c4190abe07940190effc1846be0ccf03ad6007bc9e93f9697d0b460befbb916123148798839798612bd2565b51825191825287820152a3805192839182018380840152815180915283606084019201935f5b82811061237557505050610f9f9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108ca565b85518452948101948694509281019260010161233a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b600487517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b837f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124219197503d805f833e61133181836108ca565b955f6122af565b88513d5f823e3d90fd5b60048d517f8199f5f3000000000000000000000000000000000000000000000000000000008152fd5b897f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b61249b91503d805f833e61133181836108ca565b5f612231565b8e513d5f823e3d90fd5b877f4e487b71000000000000000000000000000000000000000000000000000000005f5260116004525ffd5b6124ed90893d8b116111215761111281836108ca565b505f61217e565b8b513d5f823e3d90fd5b88818061264f575b156125bc575090503461259357734200000000000000000000000000000000000006803b1561106657816004918c51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af1801561258957612575575b50505b5f806120fc565b61257f8291610835565b6118e2578061256b565b8b513d84823e3d90fd5b60048a517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b8b517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff939093166004840152306024840152604483018290528260648184805af19081156126445750612627575b5061256e565b61263d90883d8a116111215761111281836108ca565b505f612621565b8b51903d90823e3d90fd5b50341515612506565b507342000000000000000000000000000000000000068089148061279a575b15612711578334036126e857803b15610480575f6004918d51928380927fd0e30db000000000000000000000000000000000000000000000000000000000825234905af180156126de576126cd575b50806120f7565b6126d79150610835565b5f806126c6565b8c513d5f823e3d90fd5b60048c517f201c04ab000000000000000000000000000000000000000000000000000000008152fd5b508a517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201523060248201526044810184905289816064815f8d5af180156126de5790829161277d575b506120f7565b612793908b3d8d116111215761111281836108ca565b505f612777565b50341515612677565b600489517f1ab7da6b000000000000000000000000000000000000000000000000000000008152fd5b60808383031261048057896080918d8051906127e782610876565b6127f087610807565b82526127fd848801610807565b8483015261280c818801610828565b90820152606061281d818801610807565b908201528152019201916120a9565b9394937f6e553f6500000000000000000000000000000000000000000000000000000000935083146128825760046040517f7352d91c000000000000000000000000000000000000000000000000000000008152fd5b83907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604092839281010301126104805773ffffffffffffffffffffffffffffffffffffffff60246128d660048701610807565b95013594168151937f72f702f30000000000000000000000000000000000000000000000000000000085526020948581600481865afa908115612ad6579073ffffffffffffffffffffffffffffffffffffffff915f91612b07575b5084517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201523060248201526044810189905291169086816064815f865af18015612afd57612ae0575b5083517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101889052908690829060449082905f905af18015612ad657612ab9575b50813b156104805782519081526004810186905273ffffffffffffffffffffffffffffffffffffffff841660248201525f8160448183865af18015612aaf5791610f739391610f9f969593612aa0575b507ffa2529c0b8e878c5cfbd265efb60d6c35f0ba5ad1132da46b8bde097baac8a49858351898152a251948593840190929173ffffffffffffffffffffffffffffffffffffffff6020916040840195845216910152565b612aa990610835565b5f612a49565b83513d5f823e3d90fd5b612acf90863d88116111215761111281836108ca565b505f6129f9565b84513d5f823e3d90fd5b612af690873d89116111215761111281836108ca565b505f612997565b85513d5f823e3d90fd5b612b1e9150873d891161045c5761044d81836108ca565b5f612931565b50339161094e565b90816020910312610480575173ffffffffffffffffffffffffffffffffffffffff811681036104805790565b90816020910312610480575180151581036104805790565b67ffffffffffffffff81116108495760051b60200190565b805115612b955760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805160011015612b955760400190565b8051821015612b955760209160051b010190565b919082039182116112e757565b60209081818403126104805780519067ffffffffffffffff821161048057019180601f84011215610480578251612c2981612b70565b93612c3760405195866108ca565b818552838086019260051b820101928311610480578301905b828210612c5e575050505090565b81518152908301908301612c50565b9081518082526020808093019301915f5b828110612c8c575050505090565b8351805173ffffffffffffffffffffffffffffffffffffffff908116875281840151811687850152604080830151151590880152606091820151169086015260809094019392810192600101612c7e565b9190826040910312610480576020825192015190565b90816060910312610480578051916040602083015192015190565b919082018092116112e757565b606073ffffffffffffffffffffffffffffffffffffffff916004604051809481937f0902f1ac000000000000000000000000000000000000000000000000000000008352165afa80156102b357610f9f915f905f92612d7b575b50613a63565b9050612d96915060603d606011610406576103f681836108ca565b50905f612d75565b90816020910312610480575160ff811681036104805790565b60ff166012039060ff82116112e757565b60ff16604d81116112e757600a0a90565b60409060405191612de983610892565b6001835282915f5b602080821015612e2857835160209291612e0a82610876565b5f82525f818301525f868301525f6060830152828801015201612df1565b505091925050565b9493909291946040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff87165afa9081156102b357612e9e91612e99915f91613409575b50612db7565b612dc8565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff8a165afa9081156102b357612edf91612e99915f916134095750612db7565b96604051947fd4b6846d00000000000000000000000000000000000000000000000000000000865260208660048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9586156102b357612fa0966040915f916133ea575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152808b1660248301528815156044830152909116606482015296879081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f965f9a6133c3575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528916602482015286151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357876020916130a7965f916133a6575b506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35787945f9461336f575b5081613347575f985b899c8a155f1461333657906130f19794939291613bba565b925b83156133145750613102612dd9565b91861561330d57815b87156133075785905b604051967fd4b6846d00000000000000000000000000000000000000000000000000000000885260208860048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9485156102b35773ffffffffffffffffffffffffffffffffffffffff60209681966044965f9c8d936132e6575b508390816040519661319688610876565b1686521689850152151560408401521660608201526131b487612b88565b526131be86612b88565b508988146132df57505b60405196879384927f095ea7b300000000000000000000000000000000000000000000000000000000845273cf77a3ba9a5ca399b7c97c74d54e5b1beb874e436004850152886024850152165af19182156102b357613270935f936132c0575b5060405193849283927fcac88ea9000000000000000000000000000000000000000000000000000000008452600484015284602484015260a0604484015260a4830190612c6d565b30606483015242608483015203818373cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435af19081156102b3575f916132a857509190565b6132bc91503d805f833e61133181836108ca565b9190565b6132d89060203d6020116111215761111281836108ca565b505f613228565b90506131c8565b84919350613300908b3d8d1161045c5761044d81836108ca565b9290613185565b80613114565b849161310b565b955050505050604051613326816108ae565b6002815260403660208301379190565b613341979391613bba565b926130f3565b806133555760015b986130d9565b61335f8183613a63565b6133698d8b613a63565b1061334f565b945092506020843d60201161339e575b8161338c602093836108ca565b8101031261048057869351925f6130d0565b3d915061337f565b6133bd9150833d851161045c5761044d81836108ca565b5f61304f565b9099506133e091965060403d6040116102ac5761029e81836108ca565b959095985f612fc9565b613403915060203d60201161045c5761044d81836108ca565b5f612f39565b61342b915060203d602011613431575b61342381836108ca565b810190612d9e565b5f612e93565b503d613419565b9293929091156134635790610eac61345d610f9f9361345687612b88565b5190612be6565b94612bc2565b610eac61347861347e93613456879697612b88565b93612bc2565b91565b818102929181159184041417156112e757565b811561349e570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b3d15613523573d9067ffffffffffffffff8211610849576040519161351860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846108ca565b82523d5f602084013e565b606090565b1561352f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152fd5b919493926040517f313ce567000000000000000000000000000000000000000000000000000000009081815260208160048173ffffffffffffffffffffffffffffffffffffffff89165afa9081156102b3576135f391612e99915f916134095750612db7565b9060405190815260208160048173ffffffffffffffffffffffffffffffffffffffff88165afa9081156102b35761363491612e99915f916134095750612db7565b96604051927fd4b6846d00000000000000000000000000000000000000000000000000000000845260208460048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9384156102b3576136f5946040915f91613a44575b5081517f8c0037dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a16600483015280891660248301528a15156044830152909116606482015294859081906084820190565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9889156102b3575f945f9a613a1d575b506040517f79bc57d500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528716602482015288151560448201529260208460648173420dd381b31aef6683db6b902084cb0ffece40da5afa80156102b357896020916137fb965f916133a657506040517fcc56b2c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152901515602482015294859081906044820190565b038173420dd381b31aef6683db6b902084cb0ffece40da5afa9283156102b35789945f946139e6575b50816139be575f965b879c88155f146139ad57906138459794939291613bba565b905b81156133145750613856612dd9565b9186156139a657835b871561399e5750925b6040517fd4b6846d00000000000000000000000000000000000000000000000000000000815260208160048173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa80156102b357613950965f9673ffffffffffffffffffffffffffffffffffffffff93889361397b575b50839081604051966138e588610876565b1686521660208501521515604084015216606082015261390483612b88565b5261390e82612b88565b5060405193849283927f5509a1ac0000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612c6d565b038173cf77a3ba9a5ca399b7c97c74d54e5b1beb874e435afa9081156102b3575f916132a857509190565b849193506139979060203d60201161045c5761044d81836108ca565b92906138d4565b905092613868565b809361385f565b6139b8979391613bba565b90613847565b806139cc5760015b9661382d565b6139d68183613a63565b6139e08d89613a63565b106139c6565b945092506020843d602011613a15575b81613a03602093836108ca565b8101031261048057889351925f613824565b3d91506139f6565b909950613a3a91945060403d6040116102ac5761029e81836108ca565b939093985f61371e565b613a5d915060203d60201161045c5761044d81836108ca565b5f61368e565b906b033b2e3c9fd0803ce8000000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8284099282810292838086109503948086039514613bac5784831115610480578291098119600181018091116112e757613ae090831680930494600184805f030401908584119003613481565b9203041781600302916003830481036112e7576002809318613b028183613481565b84038481116112e757613b1491613481565b613b1e8183613481565b84038481116112e757613b3091613481565b613b3a8183613481565b84038481116112e757613b4c91613481565b613b568183613481565b84038481116112e757613b6891613481565b613b728183613481565b8403908482116112e757613b9091613b8991613481565b8092613481565b83039283116112e757610f9f92613ba691613481565b90613481565b505080925015610480570490565b94613be381613bdd87613bd781613be997999d989b9c9a9c613481565b99613481565b95613481565b97613481565b92670de0b6b3a76400009384613bff878a613481565b049185613c1881613c108a86613481565b04968b613481565b049315613c575750505090613c2c91612be6565b8181029181830414901517156112e757613c4c613c5292610f9f95612d0e565b90613494565b613494565b601e919492959650145f14613d1857613c708185612d0e565b91623cda2985810290810486036112e757826009026009810484036112e757613c9891612d0e565b90623cda2090808202918204036112e757613cc893613ba6613cbd92613cc294612d0e565b613da8565b93612d0e565b916107cd92808402938404036112e757613ceb92613ce591612be6565b94612d0e565b926107ca93808502948504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b613d228185612d0e565b91619ab185810290810486036112e75782613d3c91612d0e565b90619ab090808202918204036112e757613d6093613ba6613cbd92613cc294612d0e565b918260c7029260c78404036112e757613d7c92613ce591612be6565b928360c6029360c68504036112e7578181029181830414901517156112e757610f9f92613c5291613494565b8015613ef057806001700100000000000000000000000000000000831015613eda575b60048268010000000000000000613e82941015613ecd575b640100000000811015613ec0575b62010000811015613eb3575b610100811015613ea7575b6010811015613e9b575b1015613e93575b613e238184613494565b0160011c613e318184613494565b0160011c613e3f8184613494565b0160011c613e4d8184613494565b0160011c613e5b8184613494565b0160011c613e698184613494565b0160011c613e778184613494565b0160011c8092613494565b80821015613e8e575090565b905090565b60011b613e19565b811c9160021b91613e12565b60081c91811b91613e08565b60101c9160081b91613dfd565b60201c9160101b91613df1565b60401c9160201b91613de3565b5050608081901c68010000000000000000613dcb565b505f9056",
+ "sourceMap": "585:11320:35:-:0;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;12908:63:36;;585:11320:35;;;;;;12908:63:36;;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;1394:42:36;12908:63;;;;;;;585:11320:35;12908:63:36;585:11320:35;12908:63:36;585:11320:35;12908:63:36;;;585:11320:35;;;;;12999:21:36;;;;585:11320:35;12999:21:36;;585:11320:35;12999:21:36;;;;;;;585:11320:35;12999:21:36;;;585:11320:35;13092:26:36;585:11320:35;13133:13:36;585:11320:35;13128:822:36;13148:5;13152:1;13148:5;;;;13128:822;-1:-1:-1;;585:11320:35;;;;13999:89:36;;585:11320:35;;;;;;13999:89:36;;;585:11320:35;;;;1300:42:36;;;585:11320:35;;;;;;1300:42:36;;;585:11320:35;;;;;1300:42:36;;;585:11320:35;-1:-1:-1;1300:42:36;;;585:11320:35;;;;;;1300:42:36;;;13999:89;;1300:42;13999:89;;;;;;;585:11320:35;13999:89:36;585:11320:35;;;13999:89:36;;;13128:822;585:11320:35;;;;;;;;;;;13999:89:36;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;585:11320:35;;;;;;;;;13155:3:36;585:11320:35;;;;;;13174:304:36;;13155:3;585:11320:35;;13582:92:36;585:11320:35;13582:92:36;;585:11320:35;;;;;13582:92:36;;585:11320:35;;;;;1300:42:36;;585:11320:35;;;;;;1300:42:36;;585:11320:35;;;;;1300:42:36;;585:11320:35;1300:42:36;585:11320:35;1300:42:36;;585:11320:35;1300:42:36;585:11320:35;1300:42:36;;585:11320:35;;13582:92:36;1300:42;13582:92;1300:42;13582:92;;;;;;13780:31;13582:92;585:11320:35;;;;13582:92:36;;;13155:3;13689:31;;;13734;13689;;;:::i;:::-;13734;;:::i;:::-;13780;;:::i;:::-;585:11320:35;;;;;;13830:29:36;;13155:3;13826:40;;585:11320:35;;13133:13:36;;;13826:40;13861:5;;13830:29;585:11320:35;;;;13830:29:36;;13582:92;13734:31;13582:92;;13689:31;13582:92;;;;;585:11320:35;13582:92:36;585:11320:35;13582:92:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;-1:-1:-1;13582:92:36;;;;;;;;13174:304;13401:62;585:11320:35;;13281:72:36;585:11320:35;;;;;;;13281:72:36;:::i;:::-;13401:62;;;;:::i;:::-;13372:91;;13174:304;;12999:21;;;;;585:11320:35;12999:21:36;585:11320:35;12999:21:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;12908:63;;;;;;;;;;;;;;:::i;:::-;;;;585:11320:35;;;;;;;;;;;;;;;;;;;664:40;585:11320;;;;;;;;;;;;;;;;;;;710:46;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1252:5:30;1235:23;;;585:11320:35;1235:23:30;;;;;;:::i;585:11320:35:-;;;;;;;;;;;;;;1469:8:30;585:11320:35;;;;;;;;;;;;;;;;;;530:32:30;585:11320:35;;;;;;;;;;;;;;;;;;;1712:25;585:11320;;;;;;;;:::i;:::-;1726:10;1712:25;;:::i;585:11320::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1820:1139::-;;-1:-1:-1;;1820:1139:35;2034:10;2048:7;585:11320;;2034:21;585:11320;;2034:43;;585:11320;2119:1;585:11320;;;;;;;;2137:49;;585:11320;;2258:44;-1:-1:-1;5124:19:35;-1:-1:-1;5145:26:35;585:11320;;5145:26;-1:-1:-1;5497:106:35;;;585:11320;;;;;;2119:1;585:11320;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;5618:15;:26;5614:56;;585:11320;;;5696:48;;5187:416;;;;585:11320;;;;2119:1;5696:48;;585:11320;;;;;;;;;;;;;;;;;;;;5696:48;:16;585:11320;5696:16;585:11320;5696:48;;;;;;;-1:-1:-1;5696:48:35;;;2133:786;585:11320;;;;5758:18;5754:49;;-1:-1:-1;585:11320:35;;;;10224:320;;2133:786;585:11320;;;;10553:320;;2133:786;5917:33;;;;;:::i;:::-;585:11320;;;;;5961:31;;585:11320;;;;6002:31;;-1:-1:-1;6081:13:35;;6096:5;6100:1;6096:5;;;;;6076:1344;4624:18:36;;;;;:::i;:::-;12368:5;;;;;;;12376;;;:::i;:::-;1084:3;;;;;;;;;;;;;;;585:11320:35;4672:50:36;;;;:::i;:::-;4736:27;4732:79;;585:11320:35;;;5176:63:36;;5187:416:35;;;;585:11320;;;;2119:1;5176:63:36;;585:11320:35;;;;;;;;;;;;;;;;;;1394:42:36;5176:63;;;;;;;585:11320:35;5176:63:36;585:11320:35;5176:63:36;-1:-1:-1;5176:63:36;;;12368:21;585:11320:35;2119:1;585:11320;;5268:21:36;;;;585:11320:35;5268:21:36;;585:11320:35;5268:21:36;;;;;;;-1:-1:-1;5268:21:36;;;12368;-1:-1:-1;585:11320:35;;;;5354:90:36;;5187:416:35;;;;585:11320;;;;2119:1;5354:90:36;;585:11320:35;;;;1300:42:36;;;585:11320:35;;;;1300:42:36;;;585:11320:35;;;1300:42:36;;;585:11320:35;1300:42:36;;;585:11320:35;;;;;;1300:42:36;585:11320:35;1300:42:36;5354:90;;;;;;;-1:-1:-1;;;5354:90:36;;;12368:21;585:11320:35;;;;;5557:23:36;;:50;;;;12368:21;5553:124;;585:11320:35;5719:22:36;;:::i;:::-;585:11320:35;;;;;;;:::i;:::-;5187:416;;;585:11320;;;5187:416;;;585:11320;;5763:46:36;;585:11320:35;;;;5763:46:36;;585:11320:35;;;5763:46:36;;585:11320:35;5751:58:36;;;:::i;:::-;;;;;:::i;:::-;;585:11320:35;;5853:63:36;585:11320:35;5853:63:36;;585:11320:35;;;;2119:1;5853:63:36;;585:11320:35;;;;;;-1:-1:-1;585:11320:35;;;;;;;;:::i;:::-;5853:63:36;;1300:42;5853:63;;;;;;;6185:22;5944:33;5961:16;-1:-1:-1;5853:63:36;585:11320:35;5853:63:36;;;;;12368:21;5961:16;;:::i;:::-;585:11320:35;;;;;5944:33:36;:::i;:::-;12495:17;585:11320:35;;;;;12495:5:36;;;;;12503;585:11320:35;;;;;12503:5:36;:::i;:::-;12495:17;;585:11320:35;;;;;;12495:5:36;;;;;585:11320:35;12503:5:36;585:11320:35;;;12503:5:36;:::i;:::-;12495:17;6185:22;:::i;:::-;585:11320:35;;6145:71:36;;;;;585:11320:35;6145:71:36;;2119:1:35;6145:71:36;;585:11320:35;;;;;;;;;;;:::i;:::-;6145:71:36;;1300:42;6145:71;;;;;;;6245:41;6145:71;-1:-1:-1;6145:71:36;;;12495:17;6245:22;6270:16;6245:22;;;;:::i;:::-;6270:16;;:::i;:::-;585:11320:35;6245:41:36;;:::i;:::-;6595:18;;;6591:183;;12495:17;7332:13;;;;7328:387;;12495:17;7728:13;;7724:387;;12495:17;585:11320:35;;;2323:39;;585:11320;;;;5187:416;;585:11320;5187:416;7737:76;585:11320;5187:416;;585:11320;7737:76;;;;;;;585:11320;;;;;;;;;;;;;;;;;;7737:76;;;;585:11320;;2323:39;;;585:11320;2323:39;;585:11320;;;;;;;;;;;;;;;;;;2323:39;;;;;;;;;:::i;:::-;2316:46;:::o;7724:387:36:-;449:42:37;5187:416:35;585:11320;5187:416;;585:11320;7761:14:36;7757:344;449:42:37;;;7842:31:36;;;;;585:11320:35;;;;;;7842:31:36;;;;585:11320:35;7842:31:36;;585:11320:35;;2119:1;7842:31:36;;585:11320:35;7842:31:36;;;;;;;;7757:344;7909:36;;7963:39;7909:36;;;2323:39:35;7909:36:36;2323:39:35;7909:36:36;;;;;;;;;:::i;:::-;;7963:39;:::i;:::-;7724:387;;;;7842:31;;;;;:::i;:::-;585:11320:35;;7842:31:36;;;585:11320:35;;;;7842:31:36;585:11320:35;;;;;;;;;7842:31:36;585:11320:35;;;7757:344:36;-1:-1:-1;585:11320:35;;;8041:45:36;;;;585:11320:35;;;;2119:1;8041:45:36;;585:11320:35;;;;;5187:416;;585:11320;;;;;;;;;;;;;;8041:45:36;;;;;;;;;2323:39:35;8041:45:36;2323:39:35;8041:45:36;;;;7757:344;;;;8041:45;;;585:11320:35;8041:45:36;585:11320:35;8041:45:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;585:11320:35;;;;;;;;;;7328:387:36;449:42:37;5187:416:35;585:11320;5187:416;;585:11320;7365:14:36;7361:344;449:42:37;;;7446:31:36;;;;;-1:-1:-1;585:11320:35;;;;;7446:31:36;;;;585:11320:35;7446:31:36;;585:11320:35;;2119:1;7446:31:36;;585:11320:35;7446:31:36;;;;;;;;7361:344;7513:36;7567:39;7513:36;;;;;;;;;;;:::i;7567:39::-;7328:387;;7446:31;;;;;;:::i;:::-;-1:-1:-1;7446:31:36;;;;7361:344;-1:-1:-1;585:11320:35;;;7645:45:36;;;;585:11320:35;;;2119:1;7645:45:36;;585:11320:35;;;;;;;;;;;7645:45:36;5187:416:35;-1:-1:-1;585:11320:35;5187:416;;585:11320;7645:45:36;;;;;;;;7361:344;;7328:387;;7645:45;;;585:11320:35;7645:45:36;585:11320:35;7645:45:36;;;;;;;:::i;:::-;;;;;6591:183;6649:18;;;;:::i;:::-;1084:3;;;;;;;;;;;;;;;6714;6648:37;;;;:::i;:::-;6703:14;6699:64;;6591:183;;;;6699:64;2119:1:35;585:11320;;6726:37:36;;;;1084:3;585:11320:35;-1:-1:-1;585:11320:35;;2119:1;585:11320;;-1:-1:-1;585:11320:35;6145:71:36;6245:22;6145:71;;;;;6270:16;6145:71;;;-1:-1:-1;6145:71:36;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;12495:17;;;;;6185:22;:::i;12495:17::-;;;;;5853:63;;;;;;;;;;;;;:::i;:::-;;;;5553:124;2119:1:35;585:11320;;5630:36:36;;;;5557:50;585:11320:35;;;;;5584:23:36;;5557:50;;5354:90;;;;;;;;585:11320:35;5354:90:36;585:11320:35;5354:90:36;;;;;;;:::i;:::-;;;;;;;;5268:21;;;;;585:11320:35;5268:21:36;585:11320:35;5268:21:36;;;;;;;:::i;:::-;;;;;5176:63;;;;;;;;;;;;;;:::i;:::-;;;;4732:79;2119:1:35;585:11320;;4772:39:36;;;;12368:21;12384:5;;;;:::i;:::-;12368:21;;6103:3:35;6122:349;;;;;;;6103:3;585:11320;;;6524:61;;;;6555:15;585:11320;;2119:1;6524:61;;585:11320;;;;;;;;;;;6524:61;5187:416;-1:-1:-1;585:11320:35;5187:416;;585:11320;6524:61;;;;;;;;6103:3;-1:-1:-1;585:11320:35;;;6599:61;;;;6555:15;585:11320;;2119:1;6599:61;;585:11320;;;;;;;;;;;6599:61;5187:416;-1:-1:-1;585:11320:35;5187:416;;585:11320;6599:61;;;;;;;;6103:3;585:11320;;;6749:304;;585:11320;6749:304;;;585:11320;5187:416;;585:11320;2119:1;6749:304;;;585:11320;;5187:416;;585:11320;;6749:304;;585:11320;;;;;;6749:304;;585:11320;;;;;6749:304;;585:11320;;;;;6749:304;;585:11320;;-1:-1:-1;585:11320:35;6749:304;;585:11320;;-1:-1:-1;585:11320:35;6749:304;;585:11320;;;;;;6749:304;;585:11320;;;;;;;6749:304;;585:11320;;;6749:304;;585:11320;6749:304;;-1:-1:-1;585:11320:35;6555:15;585:11320;6749:304;;;;;;;;;7250:31;6749:304;-1:-1:-1;6749:304:35;;-1:-1:-1;;;;6749:304:35;;;;;6103:3;7159:31;7204;7068;;;;;;;:::i;:::-;;;7113;;;;;;:::i;:::-;;;7159;;;;:::i;:::-;7204;;;;;:::i;:::-;7250;;:::i;:::-;585:11320;;;;7300:29;;6103:3;7296:40;;585:11320;6103:3;;585:11320;6103:3;;6081:13;;;7296:40;7331:5;;7300:29;7311:18;;;7300:29;;6749:304;;;585:11320;6749:304;585:11320;6749:304;;;;7159:31;6749:304;;;7204:31;6749:304;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;6749:304:35;;;6599:61;;;585:11320;6599:61;585:11320;6599:61;;;;;;;:::i;:::-;;;;;6524;;;585:11320;6524:61;585:11320;6524:61;;;;;;;:::i;:::-;;;;;6122:349;6379:77;6229:82;;;;;;585:11320;5187:416;;585:11320;;5187:416;;585:11320;6229:82;:::i;:::-;6379:77;;;;;:::i;:::-;6330:126;;;;6122:349;;10553:320;449:42:37;585:11320:35;5187:416;;585:11320;10588:14;:31;;;10553:320;10584:279;;;585:11320;;;;10643:9;:20;10639:53;;449:42:37;10711:39:35;;;;585:11320;;;10711:39;;10643:9;;2119:1;10643:9;;449:42:37;10711:39:35;;;;;;;;10584:279;;;;10553:320;;;10711:39;;;;;:::i;:::-;585:11320;;10711:39;;;585:11320;;;10711:39;585:11320;;;;;;;;;10639:53;2119:1;585:11320;;10672:20;;;;10584:279;585:11320;;;10789:59;;585:11320;;;2119:1;10789:59;;585:11320;10833:4;585:11320;;;;;;;;;;;;;;;;;;;10789:59;5187:416;;585:11320;5187:416;;585:11320;10789:59;;;;;;;;;;10584:279;;;;10789:59;;;585:11320;10789:59;585:11320;10789:59;;;;;;;:::i;:::-;;;;;10588:31;10606:9;;:13;;10588:31;;10224:320;449:42:37;585:11320:35;5187:416;;585:11320;10259:14;:31;;;10224:320;10255:279;;;585:11320;;;;10314:9;:20;10310:53;;449:42:37;10382:39:35;;;;585:11320;;;10382:39;;-1:-1:-1;10314:9:35;2119:1;10314:9;;449:42:37;10382:39:35;;;;;;;;10255:279;;10224:320;;10382:39;;;;;:::i;:::-;-1:-1:-1;10382:39:35;;;10255:279;585:11320;;;10460:59;;585:11320;;;;2119:1;10460:59;;585:11320;10504:4;585:11320;;;;;;;;;;;;;5187:416;;585:11320;;;;;;;-1:-1:-1;;585:11320:35;10460:59;;;;;;;;10255:279;10224:320;;10460:59;;;585:11320;10460:59;585:11320;10460:59;;;;;;;:::i;:::-;;;;;10259:31;10277:9;;:13;;10259:31;;5754:49;2119:1;585:11320;;5785:18;;;;5696:48;;;;;585:11320;5696:48;585:11320;5696:48;;;;;;;:::i;:::-;;;;;5614:56;2119:1;585:11320;;5653:17;;;;2133:786;2383:52;-1:-1:-1;585:11320:35;2383:52;;585:11320;;8583:91;585:11320;8583:91;585:11320;8583:91;;;585:11320;;;;;;2119:1;585:11320;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8689:15;;;:26;8685:56;;585:11320;;;8767:48;;585:11320;;;;2119:1;8767:48;;585:11320;;;;;;;;;;;;;;;;;;;;8767:48;:16;585:11320;8767:16;585:11320;8767:48;;;;;;585:11320;8767:48;-1:-1:-1;8767:48:35;;;2379:540;585:11320;;8829:18;;;8825:49;;585:11320;;;8885:59;;585:11320;;;;;2119:1;8885:59;;585:11320;8927:4;585:11320;;;;;;;;;;;;;;;;;;-1:-1:-1;8885:59:35;;;;;;;;8954:57;8885:59;;;2379:540;-1:-1:-1;585:11320:35;;;8954:57;;8983:15;585:11320;;2119:1;8954:57;;585:11320;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;585:11320:35;;;;;;;8954:57;;;;;;;;;585:11320;8954:57;585:11320;8954:57;585:11320;8954:57;-1:-1:-1;8954:57:35;;;2379:540;585:11320;;;9055:104;;;;;585:11320;9055:104;;;2119:1;9055:104;;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9055:104;;;;;;;-1:-1:-1;;;9055:104:35;;;2379:540;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;9175:61;;585:11320;;9175:61;585:11320;;2552:28;585:11320;2552:28;;585:11320;;;;;;2552:28;;;;;:::i;9055:104::-;585:11320;9055:104;;9175:61;9055:104;;;;;585:11320;9055:104;585:11320;9055:104;;;;;;;:::i;:::-;;;;;;;;;8954:57;;;585:11320;8954:57;585:11320;8954:57;;;;;;;:::i;:::-;;;;;8885:59;;;585:11320;8885:59;585:11320;8885:59;;;;;;;:::i;:::-;;;;;8767:48;;;;585:11320;8767:48;585:11320;8767:48;;;;;;;:::i;:::-;;;;2379:540;585:11320;;;;;;;2601:61;;;585:11320;;3506:75;;;585:11320;;;;;;;;;2119:1;585:11320;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:1;585:11320;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;3596:15;;;:26;3592:56;;585:11320;3677:9;;;:::i;:::-;;585:11320;;10077:802;-1:-1:-1;10228:11:35;;10224:320;;585:11320;10553:320;;585:11320;-1:-1:-1;;585:11320:35;;;3779:59;;585:11320;3811:15;585:11320;2119:1;3779:59;;585:11320;;;;;;;;;;;3779:59;585:11320;;;-1:-1:-1;3779:59:35;;;;;;;;;585:11320;;;;;;;;;;;;;;;;3868:25;-1:-1:-1;3868:25:35;;;;;;;;585:11320;3868:25;;;;:::i;:::-;;:28;585:11320;;;;;;;3942:47;;;;;585:11320;3942:47;;;2119:1;3942:47;;585:11320;;;;;;;;;:::i;:::-;3942:47;;;;;;;;;;-1:-1:-1;3942:47:35;;;585:11320;;;;;;;;;;;;;4027:43;;;;;:::i;:::-;585:11320;4085:35;4081:91;;585:11320;;4192:89;;;;;;;2119:1;4192:89;;585:11320;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;4192:89;;;-1:-1:-1;4192:89:35;;;;;;;;;-1:-1:-1;4192:89:35;;;585:11320;;;;;;;;;;;;4296:27;;;;:::i;:::-;585:11320;4296:45;4292:101;;4435:10;;;:::i;:::-;585:11320;;;;;;;;;;;;4447:27;;4408:67;4447:27;;;;;;;;:::i;:::-;585:11320;;;;;;;;;;4408:67;585:11320;;;;;;;2773:19;;;;585:11320;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;2773:19;;;;;;;;;;;;;;:::i;585:11320::-;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;;;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;4292:101;2119:1;585:11320;;4364:18;;;;585:11320;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;4192:89;;;;;;;-1:-1:-1;4192:89:35;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;4081:91;2119:1;585:11320;;4143:18;;;;585:11320;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;3942:47;;;;;;-1:-1:-1;3942:47:35;;;;;;:::i;:::-;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;;;;-1:-1:-1;585:11320:35;;2119:1;585:11320;-1:-1:-1;585:11320:35;3779:59;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;10553:320;10588:31;;;;;10553:320;10584:279;;;10643:9;;;;10639:53;;449:42:37;10711:39:35;;;;;585:11320;2119:1;585:11320;;;10711:39;;;;585:11320;10711:39;;10643:9;10711:39;;;;;;;;;10584:279;;;;10553:320;;;;10711:39;;;;;:::i;:::-;585:11320;;10711:39;;;;585:11320;;;;;;;;;10639:53;2119:1;585:11320;;10672:20;;;;10584:279;585:11320;;;10789:59;;585:11320;;;;;2119:1;10789:59;;585:11320;10833:4;585:11320;;;;;;;;;;;;;;;10789:59;;;;;;;;;;10584:279;;;;10789:59;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;;;;;;;;10588:31;10606:9;;:13;;10588:31;;10224:320;449:42:37;;10259:14:35;;;:31;;;10224:320;10255:279;;;10314:9;;:20;10310:53;;10382:39;;;;;-1:-1:-1;2119:1:35;585:11320;;;10382:39;;;;585:11320;10382:39;;10314:9;10382:39;;;;;;;;;10255:279;;;10224:320;;10382:39;;;;;:::i;:::-;-1:-1:-1;10382:39:35;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;10310:53;2119:1;585:11320;;10343:20;;;;10255:279;-1:-1:-1;585:11320:35;;;10460:59;;585:11320;;;2119:1;10460:59;;585:11320;10504:4;585:11320;;;;;;;;;;10504:4;585:11320;;;-1:-1:-1;10460:59:35;;;;;;;;;;;;10255:279;;10224:320;;10460:59;;;;;;;;;;;;;:::i;:::-;;;;;10259:31;10277:9;;:13;;10259:31;;3592:56;2119:1;585:11320;;3631:17;;;;585:11320;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2597:322;2825:23;;;;;-1:-1:-1;2813:35:35;;2809:110;;2119:1;585:11320;;2935:17;;;;2809:110;585:11320;;;;9621:40;;;;;585:11320;;;;;;;;2119:1;585:11320;;;:::i;:::-;;;;;;;;9690:35;585:11320;9690:35;;585:11320;9690:35;;;2119:1;9690:35;;;;;;;;;;585:11320;9690:35;-1:-1:-1;9690:35:35;;;2809:110;-1:-1:-1;585:11320:35;;;9736:59;;585:11320;;;2119:1;9736:59;;585:11320;9781:4;585:11320;;;;;;;;;;;;;9781:4;585:11320;;;-1:-1:-1;585:11320:35;9736:59;;;;;;;;2809:110;-1:-1:-1;585:11320:35;;;9805:45;;585:11320;;;2119:1;9805:45;;585:11320;;;;;;;;;;;;;;;;-1:-1:-1;;9805:45:35;;;;;;;;2809:110;9861:44;;;;;;585:11320;;9861:44;;;2119:1;9861:44;;585:11320;;;;;;;;;;-1:-1:-1;585:11320:35;;;-1:-1:-1;9861:44:35;;;;;;;;9973:26;9861:44;;9973:26;9861:44;;;;;2809:110;585:11320;9921:35;585:11320;;;;;;9921:35;585:11320;9973:26;;;;;585:11320;;;;;;;;;;;;;;;;;9861:44;;;;:::i;:::-;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;9805:45;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;9736:59;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320;;;-1:-1:-1;585:11320:35;;;;;9690:35;;;;;;;;;;;;;;:::i;:::-;;;;2034:43;:10;;:43;;;585:11320;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;-1:-1:-1;585:11320:35;;;;;-1:-1:-1;585:11320:35;;;;5739:1:36;585:11320:35;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;4296:198:36:-;4414:25;585:11320:35;4296:198:36;4414:25;585:11320:35;;4414:25:36;;;;585:11320:35;4414:25:36;;585:11320:35;4414:25:36;;;;;;4456:31;4414:25;;;;;;;4296:198;4456:31;;:::i;4414:25::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;585:11320:35;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;:::i;:::-;5739:1:36;585:11320:35;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;585:11320:35;;-1:-1:-1;585:11320:35;;;;-1:-1:-1;585:11320:35;;;;-1:-1:-1;585:11320:35;;;;;;;;;;;;;;;;;;;:::o;2018:1867:36:-;;;;;;;585:11320:35;;;2252:33:36;;;;;585:11320:35;2252:33:36;585:11320:35;;;;2252:33:36;;;;;;;2240:46;2252:33;2247:38;2252:33;;;;;2018:1867;2247:38;;:::i;:::-;2240:46;:::i;:::-;585:11320:35;;;2333:33:36;;;2252;585:11320:35;2252:33:36;585:11320:35;;;;2333:33:36;;;;;;;2321:46;2333:33;2328:38;2333:33;2252;2333;;;2328:38;;:::i;2321:46::-;585:11320:35;;;2491:42:36;585:11320:35;2491:42:36;;2252:33;2491:42;2252:33;2491:42;1300;2491;;;;;;;2429:105;2491:42;585:11320:35;2491:42:36;2252:33;2491:42;;;2018:1867;-1:-1:-1;585:11320:35;;;2429:105:36;;585:11320:35;;;;2252:33:36;2429:105;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2429:105:36;;;1300:42;2429:105;;;;;;;2252:33;;;2429:105;;;2018:1867;-1:-1:-1;585:11320:35;;;2560:63:36;;585:11320:35;;;;2252:33:36;2560:63;;585:11320:35;;;;;;;;;;;;;;;2252:33:36;585:11320:35;;;1394:42:36;2560:63;;;;;;;2252:33;2560:63;2651:52;2560:63;2252:33;2560:63;;;2018:1867;-1:-1:-1;585:11320:35;;;2651:52:36;;585:11320:35;;;;2252:33:36;2651:52;;585:11320:35;;;;;;;;;;;;;;;;;;2651:52:36;;;1394:42;2651:52;;;;;;;;;2252:33;2651:52;;;2018:1867;-1:-1:-1;2847:6:36;;;2252:33;2846:74;;2833:87;2931:20;2966:11;;2962:259;2966:11;;;3008:78;;;;;;;;:::i;:::-;2962:259;;3235:17;;3231:85;;3386:22;;;:::i;:::-;3457:28;;;;;;;3499;;;;;;;585:11320:35;;3561:42:36;585:11320:35;3561:42:36;;2252:33;3561:42;2252:33;3561:42;1300;3561;;;;;;;585:11320:35;2252:33:36;3561:42;;;585:11320:35;3561:42:36;2252:33;3561:42;;;;;3499:28;585:11320:35;;;;;;;;;;:::i;:::-;;;;;3430:183:36;;;585:11320:35;;;;3430:183:36;;585:11320:35;;3430:183:36;;;585:11320:35;3418:195:36;;;:::i;:::-;;;;;:::i;:::-;;3631:28;;;;;;;585:11320:35;;3624:76:36;;;;;585:11320:35;3624:76:36;;1300:42;2252:33;3624:76;;585:11320:35;;;;;;;3624:76:36;;;;;;;585:11320:35;3624:76:36;2252:33;3624:76;;;3631:28;585:11320:35;;;3732:107:36;;;;;585:11320:35;3732:107:36;;2252:33;3732:107;;585:11320:35;;;;;;;;;;;;;;;;:::i;:::-;3816:4:36;585:11320:35;;;;3823:15:36;585:11320:35;;;;3732:107:36;;;1300:42;3732:107;;;;;;;2252:33;3732:107;;;3850:28;;2018:1867;:::o;3732:107::-;;;;;;2252:33;3732:107;;;;;;:::i;:::-;3850:28;2018:1867;:::o;3624:76::-;;;2252:33;3624:76;2252:33;3624:76;;;;;;;:::i;:::-;;;;;3631:28;;;;;3561:42;;;;;;;;;;;;;;;;;:::i;:::-;;;;;3499:28;;;;3457;;;;;3231:85;585:11320:35;;;;;;;;;;;:::i;:::-;3290:1:36;585:11320:35;;;;2252:33:36;585:11320:35;;;3268:37:36;;:::o;2962:259::-;3132:78;;;;;:::i;:::-;2962:259;;;2846:74;2866:6;;;2876:4;2865:55;2846:74;;;2865:55;2883:17;;;;:::i;:::-;2903;;;;:::i;:::-;-1:-1:-1;2865:55:36;;2651:52;;;;;2252:33;2651:52;;2252:33;2651:52;;;;;;2252:33;2651:52;;;:::i;:::-;;;585:11320:35;;;;;;;2651:52:36;;;;;;;-1:-1:-1;2651:52:36;;2560:63;;;;;;;;;;;;;;:::i;:::-;;;;2429:105;;;;;;;;585:11320:35;2429:105:36;585:11320:35;2429:105:36;;;;;;;:::i;:::-;;;;;;;;2491:42;;;;2252:33;2491:42;2252:33;2491:42;;;;;;;:::i;:::-;;;;2333:33;;;;2252;2333;2252;2333;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3891:399;;;;;;4080:204;;;4126:10;4166;4122:14;4162;4126:10;;;;:::i;:::-;585:11320:35;4122:14:36;;:::i;:::-;4166:10;;:::i;4080:204::-;4263:10;4219:14;4259;4223:10;;;;;;:::i;4219:14::-;4263:10;;:::i;4259:14::-;4080:204;3891:399::o;1084:3::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;1207:42;;;;;;;;;;;;585:11320:35;;;;1207:42:36;585:11320:35;;;;;1207:42:36;585:11320:35;;:::i;:::-;1207:42:36;;;-1:-1:-1;1207:42:36;;;;:::o;:::-;585:11320:35;1207:42:36;:::o;:::-;;;;:::o;:::-;;585:11320:35;;1207:42:36;;;;;;;;;;;;585:11320:35;1207:42:36;585:11320:35;;;1207:42:36;;14165:1738;;;;;585:11320:35;;;14417:33:36;;;;;585:11320:35;14417:33:36;585:11320:35;;;;14417:33:36;;;;;;;14405:46;14417:33;14412:38;14417:33;;;;;14412:38;;:::i;14405:46::-;585:11320:35;;;14498:33:36;;;14417;585:11320:35;14417:33:36;585:11320:35;;;;14498:33:36;;;;;;;14486:46;14498:33;14493:38;14498:33;14417;14498;;;14493:38;;:::i;14486:46::-;585:11320:35;;;14656:42:36;585:11320:35;14656:42:36;;14417:33;14656:42;14417:33;14656:42;1300;14656;;;;;;;14594:105;14656:42;585:11320:35;14656:42:36;14417:33;14656:42;;;14165:1738;-1:-1:-1;585:11320:35;;;14594:105:36;;585:11320:35;;;;14417:33:36;14594:105;;585:11320:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14594:105:36;;;1300:42;14594:105;;;;;;;14417:33;;;14594:105;;;14165:1738;-1:-1:-1;585:11320:35;;;14725:63:36;;585:11320:35;;;;14417:33:36;14725:63;;585:11320:35;;;;;;;;;;;;;;;14417:33:36;585:11320:35;;;1394:42:36;14725:63;;;;;;;14417:33;14725:63;14816:52;14725:63;14417:33;14725:63;;;-1:-1:-1;585:11320:35;;;14816:52:36;;585:11320:35;;;;14417:33:36;14816:52;;585:11320:35;;;;;;;;;;;;;;;;;;14816:52:36;;;1394:42;14816:52;;;;;;;;;14417:33;14816:52;;;14165:1738;-1:-1:-1;15012:6:36;;;14417:33;15011:74;;14998:87;15096:20;15131:11;;15127:259;15131:11;;;15173:78;;;;;;;;:::i;:::-;15127:259;;15399:17;;15395:85;;15548:22;;;:::i;:::-;15619:28;;;;;;;15661;;;;;;;585:11320:35;;;15723:42:36;;14417:33;15723:42;14417:33;15723:42;1300;15723;;;;;;585:11320:35;15723:42:36;14417:33;15723:42;585:11320:35;15723:42:36;;;;;15661:28;585:11320:35;;;;;;;;;;:::i;:::-;;;;;14417:33:36;15592:183;;585:11320:35;;;;15592:183:36;;585:11320:35;;15592:183:36;;;585:11320:35;15580:195:36;;;:::i;:::-;;;;;:::i;:::-;;585:11320:35;;15796:61:36;;;;;585:11320:35;15796:61:36;;14417:33;15796:61;;585:11320:35;;;;;;;;;;;:::i;:::-;15796:61:36;;1300:42;15796:61;;;;;;;14417:33;15796:61;;;15868:28;;14165:1738;:::o;15723:42::-;;;;;;;14417:33;15723:42;14417:33;15723:42;;;;;;;:::i;:::-;;;;;15661:28;;;;;;15619;;;;;15127:259;15297:78;;;;;:::i;:::-;15127:259;;;15011:74;15031:6;;;15041:4;15030:55;15011:74;;;15030:55;15048:17;;;;:::i;:::-;15068;;;;:::i;:::-;-1:-1:-1;15030:55:36;;14816:52;;;;;14417:33;14816:52;;14417:33;14816:52;;;;;;14417:33;14816:52;;;:::i;:::-;;;585:11320:35;;;;;;;14816:52:36;;;;;;;-1:-1:-1;14816:52:36;;14594:105;;;;;;;;585:11320:35;14594:105:36;585:11320:35;14594:105:36;;;;;;;:::i;:::-;;;;;;;;14656:42;;;;14417:33;14656:42;14417:33;14656:42;;;;;;;:::i;:::-;;;;8427:1417;;1041:4;8581:150;;;;;;;;;;;;;;;;;;;;8745:10;;8741:179;;8938:19;;;585:11320:35;;;8996:71:36;;;9233:12;;9248:1;585:11320:35;;;;;;;9497:12:36;9218:32;;;9260:70;;;9407:72;9248:1;9407:72;;-1:-1:-1;9407:72:36;;;9076:117;;;;;;9497:12;:::i;:::-;9076:117;;9340:58;9488:21;1084:3;9535:1;1084:3;;9535:1;1084:3;;;;;;9554:1;9534:21;;;9576:17;;;;:::i;:::-;585:11320:35;;;;;;;9565:28:36;;;:::i;:::-;9614:17;;;;:::i;:::-;585:11320:35;;;;;;;9603:28:36;;;:::i;:::-;9652:17;;;;:::i;:::-;585:11320:35;;;;;;;9641:28:36;;;:::i;:::-;9690:17;;;;:::i;:::-;585:11320:35;;;;;;;9679:28:36;;;:::i;:::-;9728:17;;;;:::i;:::-;585:11320:35;;;;;;;;9766:17:36;9717:28;;;;:::i;:::-;9766:17;;;:::i;:::-;585:11320:35;;;;;;;9803:11:36;9755:28;;;;:::i;:::-;9803:11;;:::i;8741:179::-;8779:15;;;;;;585:11320:35;;8809:74:36;8896:13;:::o;10340:1748::-;;10666:8;10340:1748;10643:8;10340:1748;10621:8;10340:1748;10688:8;10340:1748;;;;;;;;10621:8;:::i;:::-;10643;;:::i;:::-;10666;;:::i;:::-;10688;;:::i;:::-;999:4;;10758:5;;;;;;:::i;:::-;1084:3;10794:5;;10830;10794;;;;;:::i;:::-;1084:3;10830:5;;;:::i;:::-;1084:3;;10853:1229;;;10887:7;;;;;;;:::i;:::-;1084:3;;;;;;;;;;;;;;10905:5;10886:25;10905:5;10886:32;10905:5;;:::i;:::-;10886:25;;:::i;:::-;:32;:::i;10853:1229::-;10950:2;10939:13;;;;;;;10935:1147;10950:2;;;11033:7;;;;:::i;:::-;11045:9;;1084:3;;;;;;;;;;;11062:1;1084:3;11062:1;1084:3;;;;;;11045:23;;;:::i;:::-;11071:9;;1084:3;;;;;;;;;;11236:7;11045:40;;11032:54;11045:40;11119:26;11045:40;;:::i;11032:54::-;11119:26;:::i;:::-;11236:7;;:::i;:::-;11228:4;;1084:3;;;;;;;;;;11328:5;11217:27;;;;:::i;:::-;11328:5;;:::i;:::-;11320:4;;1084:3;;;;;;;;;;;;;;;;;;;;;;;;11474:15;11421:31;;;;:::i;10935:1147::-;11627:7;;;;:::i;:::-;11639:6;;1084:3;;;;;;;;;;11639:16;;;;:::i;:::-;11658:6;;1084:3;;;;;;;;;;11819:7;11639:30;;11626:44;11639:30;11703:26;11639:30;;:::i;11819:7::-;1084:3;;11812;1084;;11812;1084;;;;;11910:5;11801:26;;;;:::i;11910:5::-;1084:3;;11903;1084;;11903;1084;;;;;;;;;;;;;;;;;;;12056:15;12003:31;;;;:::i;550:1391:39:-;645:6;;641:20;;835:14;875:1;900:35;894:41;;;890:116;;550:1391;1535:3;1023:25;1029:19;1881:5;1023:25;;;1019:99;;550:1391;1141:11;1135:17;;;1131:91;;550:1391;1245:7;1239:13;;;1235:86;;550:1391;1344:5;1338:11;;;1334:83;;550:1391;1440:4;1434:10;;;1430:82;;550:1391;1529:9;;1525:55;;550:1391;1602:5;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1636:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1670:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1704:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1738:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1772:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1806:5:39;;;;:::i;:::-;585:11320:35;875:1:39;585:11320:35;1881:5:39;;;:::i;:::-;1908:6;;;;;;:15;550:1391;:::o;1908:15::-;;;550:1391;:::o;1525:55::-;875:1;585:11320:35;1525:55:39;;1430:82;585:11320:35;;;1496:1:39;585:11320:35;1430:82:39;;;1334:83;1376:1;585:11320:35;;;;1334:83:39;;;1235:86;1279:2;585:11320:35;;1305:1:39;585:11320:35;1235:86:39;;;1131:91;1179:2;585:11320:35;;1205:2:39;585:11320:35;1131:91:39;;;1019:99;1075:2;585:11320:35;;1101:2:39;585:11320:35;1019:99:39;;;890:116;-1:-1:-1;;962:3:39;585:11320:35;;;;890:116:39;;641:20;653:8;650:1;653:8;:::o",
+ "linkReferences": {},
+ "immutableReferences": {
+ "37821": [{ "start": 1548, "length": 32 }],
+ "37824": [{ "start": 1650, "length": 32 }],
+ "37827": [
+ { "start": 1759, "length": 32 },
+ { "start": 2322, "length": 32 }
+ ],
+ "38719": [
+ { "start": 1230, "length": 32 },
+ { "start": 5238, "length": 32 },
+ { "start": 5396, "length": 32 },
+ { "start": 5758, "length": 32 },
+ { "start": 7600, "length": 32 },
+ { "start": 8506, "length": 32 }
+ ],
+ "38722": [
+ { "start": 1340, "length": 32 },
+ { "start": 2724, "length": 32 },
+ { "start": 7370, "length": 32 }
+ ]
+ }
+ },
+ "methodIdentifiers": {
+ "_plugin()": "0cfd9ad4",
+ "aerodromeFactory()": "c45acd23",
+ "aerodromeRouter()": "e18e3a68",
+ "execute(bytes)": "09c5eabe",
+ "execute(bytes,address)": "6accdc13",
+ "getName()": "17d7de7c",
+ "getVersion()": "0d8e6e2c",
+ "quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)": "e69224d4"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"plugin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AerodromeUtils_ExceededMaxPriceImpact\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AerodromeUtils_ExceededMaxSlippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AerodromeUtils_ExceededMaxValueLoss\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DeadlineExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSelector\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVersionNumber\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SlippageExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guageAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"}],\"name\":\"AeroRewardsClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token0\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"FeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guageAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LPTokenStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guageAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recepient\",\"type\":\"address\"}],\"name\":\"LPTokenUnStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"Swapped\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"_plugin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aerodromeFactory\",\"outputs\":[{\"internalType\":\"contract IPoolFactory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"aerodromeRouter\",\"outputs\":[{\"internalType\":\"contract IRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenA\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenB\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"stable\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"amountA\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountB\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"balanceTokenRatio\",\"type\":\"bool\"}],\"name\":\"quoteDepositLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountAOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountBOut\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"name\":\"Name of the connector\",\"version\":\"Version of the connector\"}},\"execute(bytes)\":{\"params\":{\"data\":\"The encoded parameters for the desired action\"},\"returns\":{\"_0\":\"bytes Encoded return data from the call\"}},\"getName()\":{\"returns\":{\"_0\":\"string The name of the connector\"}},\"getVersion()\":{\"returns\":{\"_0\":\"uint256 The version of the connector\"}},\"quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)\":{\"params\":{\"amountA\":\"The amount of token A being deposited\",\"amountB\":\"The amount of token B being deposited\",\"balanceTokenRatio\":\"Indicates whether to balance the token ratio with a swap\",\"stable\":\"Indicates whether the pair is a stable pair\",\"tokenA\":\"The address of token A\",\"tokenB\":\"The address of token B\"},\"returns\":{\"amountAOut\":\"The amount of token A expected to be deposited\",\"amountBOut\":\"The amount of token B expected to be deposited\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"_plugin()\":{\"notice\":\"Address of the connector plugin\"},\"constructor\":{\"notice\":\"Initializes the AerodromeConnector\"},\"execute(bytes)\":{\"notice\":\"Executes a liquidity action on Aerodrome\"},\"execute(bytes,address)\":{\"notice\":\"Allows specifying a caller (to be used by the plugin)\"},\"getName()\":{\"notice\":\"Gets the name of the connector\"},\"getVersion()\":{\"notice\":\"Gets the version of the connector\"},\"quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)\":{\"notice\":\"Quotes the expected amounts of token A and token B to deposit in a liquidity pool\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/connectors/base/aerodrome/main.sol\":\"AerodromeConnector\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@aerodrome/contracts/=lib/contracts/\",\":@coinbase/smart-wallet/=lib/smart-wallet/\",\":@opengsn/=lib/contracts/lib/gsn/packages/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib/contracts/lib/v3-core/\",\":FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/\",\":account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/\",\":contracts/=lib/contracts/contracts/\",\":ds-test/=lib/contracts/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gsn/=lib/contracts/lib/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":p256-verifier/=lib/smart-wallet/lib/p256-verifier/\",\":safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/\",\":smart-wallet/=lib/smart-wallet/\",\":solady/=lib/smart-wallet/lib/solady/src/\",\":utils/=lib/contracts/test/utils/\",\":v3-core/=lib/contracts/lib/v3-core/\",\":webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/\"],\"viaIR\":true},\"sources\":{\"lib/contracts/contracts/interfaces/IPool.sol\":{\"keccak256\":\"0xb9d9fc89fe1d37370a851b85fa856f32026c93cd56084a2db7ab4c50f89b6b4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e1ac3e07ff83ce27e641b75e129a3f057852455f209e2a98cf1f9f16bc540758\",\"dweb:/ipfs/QmQehv4Pyi4sw9m1qHNhuoxeVcYvouyFJft3LVoV2MLD7c\"]},\"lib/contracts/contracts/interfaces/IRouter.sol\":{\"keccak256\":\"0x3f27948c9630a73b69ef67c7d48f281e2a55fb7448069b74f7efc62ce8936def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96fa11dc0cb8f0da4b63be911aebe38eaca545c5f370479ee45bb93cfc748a07\",\"dweb:/ipfs/QmWgkipaWSvLVdtn1L4xMNEbSaRnLwzpR6e2fFWWB8n5sj\"]},\"lib/contracts/contracts/interfaces/IWETH.sol\":{\"keccak256\":\"0x6f443b30d7c2ba47ca3e0ce6344ab885c325cd223f14cd96ddba014c1033a2ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82a174ff95c5f792522d1ef3a468ea367075b168c7a0189d8918079756670a53\",\"dweb:/ipfs/Qmejcmattr1iC4hm88Kho3jf1euSwcms9xLN7tY297hPrv\"]},\"lib/contracts/contracts/interfaces/factories/IPoolFactory.sol\":{\"keccak256\":\"0xc3a1d6e2e13a8a816abb6a591ff02c9a3972c53e67dd6cd75140291eadf8e98a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd9eb9108c6b9c610a220636b4e2c50b3b8192c5398e52d601cf61803ca4b9a6\",\"dweb:/ipfs/QmW6taSoLHwyChGnpsyoRXJP83NkhUpatH2HTA3QVDaHHV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db\",\"dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf\",\"dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11\",\"dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"src/BaseConnector.sol\":{\"keccak256\":\"0xd5e83d6aaa9cd7539a274c716ccd698ebc7b7a72264177450ede92d87b6c33d6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d39dad05f3b6c5fad76579753942a179ad240996d7a05be1b3bb91be6359dc4d\",\"dweb:/ipfs/QmcxW81AdyDC7cketTi1xew5kVKWLa1Ki58RZ4AuTjFGpS\"]},\"src/connectors/base/aerodrome/events.sol\":{\"keccak256\":\"0x0569863f895832cc4f92f6ace1c3d25d52a2661a3a429ab02c4d028f0ad2a37c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36dbfb52b77deff5d2bf5effff6bf51b188a9b44bbf8d3c07b9feed9530ec43a\",\"dweb:/ipfs/QmRD5oWBrTzYGn4Hbkr1vyh9HU6sXPqHjsLHJdwy77yWFK\"]},\"src/connectors/base/aerodrome/interface.sol\":{\"keccak256\":\"0x01554973801e9aadeda05298174b603b96e3e62ce5a59d966e29324084357971\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6dde59a4bed84b5b022c09d39c23c8063e0150fc6dad045376354f13ccaa4919\",\"dweb:/ipfs/QmU9E8awV9m4fx6923yM5TWajmRiB41TcJteovUxtfrqen\"]},\"src/connectors/base/aerodrome/main.sol\":{\"keccak256\":\"0xd41a8d330944f4f6faf950aa9f35a5deeeecb3bd1242e296f52d0abce67ffc3c\",\"license\":\"GNU\",\"urls\":[\"bzz-raw://64b2ce5fc9ee7fbec5640c339eec9367632b638101da2328af8e725a148d843c\",\"dweb:/ipfs/QmdVKT96b4ZdEMJQ4GjakLqHCape4CAywJJH9mUjWmL4ht\"]},\"src/connectors/base/aerodrome/utils.sol\":{\"keccak256\":\"0x5f81c8cca489557f2b5e2ef20d0ebfe7d460cd7b71eefc3cf0bfc6e0e74fd9f3\",\"license\":\"GNU\",\"urls\":[\"bzz-raw://2f37d56b6d03ffad53d5ba1b4d661d169f1c978e1227e3c98513a2f19190f335\",\"dweb:/ipfs/Qma3ZKQJrbzUm3bv3pSosrerrPP8amwvWV8V1h8MbBwqer\"]},\"src/connectors/base/common/constant.sol\":{\"keccak256\":\"0x5bbbb27e53700f83078838742c945c4a649a7b51554dde8b756078348e79a132\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://365e58f4d448d5f84e6ef6e2b6047849bea6c27b8d5bf44d7f55d15729519d6a\",\"dweb:/ipfs/QmRhrYNhRsjGQcWAFWMMLfdxP6YDDdpBxGSLV3QQmyaAuZ\"]},\"src/interface/IConnector.sol\":{\"keccak256\":\"0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973\",\"dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a\"]},\"src/lib/Babylonian.sol\":{\"keccak256\":\"0xadab3cc6503267d6cd5ee1d1c50d2fc6f4443916a35419d4c46ee4f270ea17a4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a8e495ca3a3f727836182357c28f0998cebc40f842aca480b49ca34ff1113419\",\"dweb:/ipfs/QmdX7NgnduduUoVAc5XFJH9osEVweJNGV92ozUdL2GX6HZ\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.24+commit.e11b9ed9" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [
+ { "internalType": "string", "name": "name", "type": "string" },
+ { "internalType": "uint256", "name": "version", "type": "uint256" },
+ { "internalType": "address", "name": "plugin", "type": "address" }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ { "inputs": [], "type": "error", "name": "AerodromeUtils_ExceededMaxPriceImpact" },
+ { "inputs": [], "type": "error", "name": "AerodromeUtils_ExceededMaxSlippage" },
+ { "inputs": [], "type": "error", "name": "AerodromeUtils_ExceededMaxValueLoss" },
+ { "inputs": [], "type": "error", "name": "DeadlineExpired" },
+ { "inputs": [{ "internalType": "string", "name": "reason", "type": "string" }], "type": "error", "name": "ExecutionFailed" },
+ { "inputs": [], "type": "error", "name": "IncorrectETHAmount" },
+ { "inputs": [], "type": "error", "name": "InsufficientLiquidity" },
+ { "inputs": [], "type": "error", "name": "InvalidSelector" },
+ { "inputs": [], "type": "error", "name": "InvalidVersionNumber" },
+ { "inputs": [], "type": "error", "name": "PoolDoesNotExist" },
+ { "inputs": [], "type": "error", "name": "SlippageExceeded" },
+ { "inputs": [], "type": "error", "name": "UnauthorizedCaller" },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "guageAddress", "type": "address", "indexed": true },
+ { "internalType": "address", "name": "rewardToken", "type": "address", "indexed": true }
+ ],
+ "type": "event",
+ "name": "AeroRewardsClaimed",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "poolAddress", "type": "address", "indexed": true },
+ { "internalType": "address", "name": "token0", "type": "address", "indexed": false },
+ { "internalType": "uint256", "name": "amount0", "type": "uint256", "indexed": false },
+ { "internalType": "address", "name": "token1", "type": "address", "indexed": false },
+ { "internalType": "uint256", "name": "amount1", "type": "uint256", "indexed": false }
+ ],
+ "type": "event",
+ "name": "FeesWithdrawn",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "guageAddress", "type": "address", "indexed": true },
+ { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false }
+ ],
+ "type": "event",
+ "name": "LPTokenStaked",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "guageAddress", "type": "address", "indexed": true },
+ { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false },
+ { "internalType": "address", "name": "recepient", "type": "address", "indexed": true }
+ ],
+ "type": "event",
+ "name": "LPTokenUnStaked",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "tokenA", "type": "address", "indexed": true },
+ { "internalType": "address", "name": "tokenB", "type": "address", "indexed": true },
+ { "internalType": "uint256", "name": "amountA", "type": "uint256", "indexed": false },
+ { "internalType": "uint256", "name": "amountB", "type": "uint256", "indexed": false },
+ { "internalType": "uint256", "name": "liquidity", "type": "uint256", "indexed": false }
+ ],
+ "type": "event",
+ "name": "LiquidityAdded",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "tokenA", "type": "address", "indexed": true },
+ { "internalType": "address", "name": "tokenB", "type": "address", "indexed": true },
+ { "internalType": "uint256", "name": "amountA", "type": "uint256", "indexed": false },
+ { "internalType": "uint256", "name": "amountB", "type": "uint256", "indexed": false },
+ { "internalType": "uint256", "name": "liquidity", "type": "uint256", "indexed": false }
+ ],
+ "type": "event",
+ "name": "LiquidityRemoved",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "tokenIn", "type": "address", "indexed": true },
+ { "internalType": "address", "name": "tokenOut", "type": "address", "indexed": true },
+ { "internalType": "uint256", "name": "amountIn", "type": "uint256", "indexed": false },
+ { "internalType": "uint256", "name": "amountOut", "type": "uint256", "indexed": false }
+ ],
+ "type": "event",
+ "name": "Swapped",
+ "anonymous": false
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "_plugin",
+ "outputs": [{ "internalType": "address", "name": "", "type": "address" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "aerodromeFactory",
+ "outputs": [{ "internalType": "contract IPoolFactory", "name": "", "type": "address" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "aerodromeRouter",
+ "outputs": [{ "internalType": "contract IRouter", "name": "", "type": "address" }]
+ },
+ {
+ "inputs": [{ "internalType": "bytes", "name": "data", "type": "bytes" }],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "execute",
+ "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
+ },
+ {
+ "inputs": [
+ { "internalType": "bytes", "name": "data", "type": "bytes" },
+ { "internalType": "address", "name": "caller", "type": "address" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "execute",
+ "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getName",
+ "outputs": [{ "internalType": "string", "name": "", "type": "string" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getVersion",
+ "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }]
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "tokenA", "type": "address" },
+ { "internalType": "address", "name": "tokenB", "type": "address" },
+ { "internalType": "bool", "name": "stable", "type": "bool" },
+ { "internalType": "uint256", "name": "amountA", "type": "uint256" },
+ { "internalType": "uint256", "name": "amountB", "type": "uint256" },
+ { "internalType": "bool", "name": "balanceTokenRatio", "type": "bool" }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "quoteDepositLiquidity",
+ "outputs": [
+ { "internalType": "uint256", "name": "amountAOut", "type": "uint256" },
+ { "internalType": "uint256", "name": "amountBOut", "type": "uint256" }
+ ]
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {
+ "constructor": { "params": { "name": "Name of the connector", "version": "Version of the connector" } },
+ "execute(bytes)": {
+ "params": { "data": "The encoded parameters for the desired action" },
+ "returns": { "_0": "bytes Encoded return data from the call" }
+ },
+ "getName()": { "returns": { "_0": "string The name of the connector" } },
+ "getVersion()": { "returns": { "_0": "uint256 The version of the connector" } },
+ "quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)": {
+ "params": {
+ "amountA": "The amount of token A being deposited",
+ "amountB": "The amount of token B being deposited",
+ "balanceTokenRatio": "Indicates whether to balance the token ratio with a swap",
+ "stable": "Indicates whether the pair is a stable pair",
+ "tokenA": "The address of token A",
+ "tokenB": "The address of token B"
+ },
+ "returns": {
+ "amountAOut": "The amount of token A expected to be deposited",
+ "amountBOut": "The amount of token B expected to be deposited"
+ }
+ }
+ },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "_plugin()": { "notice": "Address of the connector plugin" },
+ "constructor": { "notice": "Initializes the AerodromeConnector" },
+ "execute(bytes)": { "notice": "Executes a liquidity action on Aerodrome" },
+ "execute(bytes,address)": { "notice": "Allows specifying a caller (to be used by the plugin)" },
+ "getName()": { "notice": "Gets the name of the connector" },
+ "getVersion()": { "notice": "Gets the version of the connector" },
+ "quoteDepositLiquidity(address,address,bool,uint256,uint256,bool)": {
+ "notice": "Quotes the expected amounts of token A and token B to deposit in a liquidity pool"
+ }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@aerodrome/contracts/=lib/contracts/",
+ "@coinbase/smart-wallet/=lib/smart-wallet/",
+ "@opengsn/=lib/contracts/lib/gsn/packages/",
+ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
+ "@uniswap/v3-core/=lib/contracts/lib/v3-core/",
+ "FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/",
+ "account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/",
+ "contracts/=lib/contracts/contracts/",
+ "ds-test/=lib/contracts/lib/ds-test/src/",
+ "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
+ "forge-std/=lib/forge-std/src/",
+ "gsn/=lib/contracts/lib/",
+ "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
+ "openzeppelin-contracts/=lib/openzeppelin-contracts/",
+ "p256-verifier/=lib/smart-wallet/lib/p256-verifier/",
+ "safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/",
+ "smart-wallet/=lib/smart-wallet/",
+ "solady/=lib/smart-wallet/lib/solady/src/",
+ "utils/=lib/contracts/test/utils/",
+ "v3-core/=lib/contracts/lib/v3-core/",
+ "webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/"
+ ],
+ "optimizer": { "enabled": true, "runs": 1000000 },
+ "metadata": { "bytecodeHash": "none", "appendCBOR": false },
+ "compilationTarget": { "src/connectors/base/aerodrome/main.sol": "AerodromeConnector" },
+ "evmVersion": "cancun",
+ "libraries": {},
+ "viaIR": true
+ },
+ "sources": {
+ "lib/contracts/contracts/interfaces/IPool.sol": {
+ "keccak256": "0xb9d9fc89fe1d37370a851b85fa856f32026c93cd56084a2db7ab4c50f89b6b4f",
+ "urls": [
+ "bzz-raw://e1ac3e07ff83ce27e641b75e129a3f057852455f209e2a98cf1f9f16bc540758",
+ "dweb:/ipfs/QmQehv4Pyi4sw9m1qHNhuoxeVcYvouyFJft3LVoV2MLD7c"
+ ],
+ "license": "MIT"
+ },
+ "lib/contracts/contracts/interfaces/IRouter.sol": {
+ "keccak256": "0x3f27948c9630a73b69ef67c7d48f281e2a55fb7448069b74f7efc62ce8936def",
+ "urls": [
+ "bzz-raw://96fa11dc0cb8f0da4b63be911aebe38eaca545c5f370479ee45bb93cfc748a07",
+ "dweb:/ipfs/QmWgkipaWSvLVdtn1L4xMNEbSaRnLwzpR6e2fFWWB8n5sj"
+ ],
+ "license": "MIT"
+ },
+ "lib/contracts/contracts/interfaces/IWETH.sol": {
+ "keccak256": "0x6f443b30d7c2ba47ca3e0ce6344ab885c325cd223f14cd96ddba014c1033a2ec",
+ "urls": [
+ "bzz-raw://82a174ff95c5f792522d1ef3a468ea367075b168c7a0189d8918079756670a53",
+ "dweb:/ipfs/Qmejcmattr1iC4hm88Kho3jf1euSwcms9xLN7tY297hPrv"
+ ],
+ "license": "MIT"
+ },
+ "lib/contracts/contracts/interfaces/factories/IPoolFactory.sol": {
+ "keccak256": "0xc3a1d6e2e13a8a816abb6a591ff02c9a3972c53e67dd6cd75140291eadf8e98a",
+ "urls": [
+ "bzz-raw://cd9eb9108c6b9c610a220636b4e2c50b3b8192c5398e52d601cf61803ca4b9a6",
+ "dweb:/ipfs/QmW6taSoLHwyChGnpsyoRXJP83NkhUpatH2HTA3QVDaHHV"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
+ "keccak256": "0xe06a3f08a987af6ad2e1c1e774405d4fe08f1694b67517438b467cecf0da0ef7",
+ "urls": [
+ "bzz-raw://df6f0c459663c9858b6cba2cda1d14a7d05a985bed6d2de72bd8e78c25ee79db",
+ "dweb:/ipfs/QmeTTxZ7qVk9rjEv2R4CpCwdf8UMCcRqDNMvzNxHc3Fnn9"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
+ "keccak256": "0x70f2f713b13b7ce4610bcd0ac9fec0f3cc43693b043abcb8dc40a42a726eb330",
+ "urls": [
+ "bzz-raw://c13d13304ac79a83ab1c30168967d19e2203342ebbd6a9bbce4db7550522dcbf",
+ "dweb:/ipfs/QmeN5jKMN2vw5bhacr6tkg78afbTTZUeaacNHqjWt4Ew1r"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721.sol": {
+ "keccak256": "0x5dc63d1c6a12fe1b17793e1745877b2fcbe1964c3edfd0a482fac21ca8f18261",
+ "urls": [
+ "bzz-raw://6b7f97c5960a50fd1822cb298551ffc908e37b7893a68d6d08bce18a11cb0f11",
+ "dweb:/ipfs/QmQQvxBytoY1eBt3pRQDmvH2hZ2yjhs12YqVfzGm7KSURq"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
+ "keccak256": "0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8",
+ "urls": [
+ "bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621",
+ "dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"
+ ],
+ "license": "MIT"
+ },
+ "src/BaseConnector.sol": {
+ "keccak256": "0xd5e83d6aaa9cd7539a274c716ccd698ebc7b7a72264177450ede92d87b6c33d6",
+ "urls": [
+ "bzz-raw://d39dad05f3b6c5fad76579753942a179ad240996d7a05be1b3bb91be6359dc4d",
+ "dweb:/ipfs/QmcxW81AdyDC7cketTi1xew5kVKWLa1Ki58RZ4AuTjFGpS"
+ ],
+ "license": "MIT"
+ },
+ "src/connectors/base/aerodrome/events.sol": {
+ "keccak256": "0x0569863f895832cc4f92f6ace1c3d25d52a2661a3a429ab02c4d028f0ad2a37c",
+ "urls": [
+ "bzz-raw://36dbfb52b77deff5d2bf5effff6bf51b188a9b44bbf8d3c07b9feed9530ec43a",
+ "dweb:/ipfs/QmRD5oWBrTzYGn4Hbkr1vyh9HU6sXPqHjsLHJdwy77yWFK"
+ ],
+ "license": "MIT"
+ },
+ "src/connectors/base/aerodrome/interface.sol": {
+ "keccak256": "0x01554973801e9aadeda05298174b603b96e3e62ce5a59d966e29324084357971",
+ "urls": [
+ "bzz-raw://6dde59a4bed84b5b022c09d39c23c8063e0150fc6dad045376354f13ccaa4919",
+ "dweb:/ipfs/QmU9E8awV9m4fx6923yM5TWajmRiB41TcJteovUxtfrqen"
+ ],
+ "license": "MIT"
+ },
+ "src/connectors/base/aerodrome/main.sol": {
+ "keccak256": "0xd41a8d330944f4f6faf950aa9f35a5deeeecb3bd1242e296f52d0abce67ffc3c",
+ "urls": [
+ "bzz-raw://64b2ce5fc9ee7fbec5640c339eec9367632b638101da2328af8e725a148d843c",
+ "dweb:/ipfs/QmdVKT96b4ZdEMJQ4GjakLqHCape4CAywJJH9mUjWmL4ht"
+ ],
+ "license": "GNU"
+ },
+ "src/connectors/base/aerodrome/utils.sol": {
+ "keccak256": "0x5f81c8cca489557f2b5e2ef20d0ebfe7d460cd7b71eefc3cf0bfc6e0e74fd9f3",
+ "urls": [
+ "bzz-raw://2f37d56b6d03ffad53d5ba1b4d661d169f1c978e1227e3c98513a2f19190f335",
+ "dweb:/ipfs/Qma3ZKQJrbzUm3bv3pSosrerrPP8amwvWV8V1h8MbBwqer"
+ ],
+ "license": "GNU"
+ },
+ "src/connectors/base/common/constant.sol": {
+ "keccak256": "0x5bbbb27e53700f83078838742c945c4a649a7b51554dde8b756078348e79a132",
+ "urls": [
+ "bzz-raw://365e58f4d448d5f84e6ef6e2b6047849bea6c27b8d5bf44d7f55d15729519d6a",
+ "dweb:/ipfs/QmRhrYNhRsjGQcWAFWMMLfdxP6YDDdpBxGSLV3QQmyaAuZ"
+ ],
+ "license": "MIT"
+ },
+ "src/interface/IConnector.sol": {
+ "keccak256": "0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04",
+ "urls": [
+ "bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973",
+ "dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a"
+ ],
+ "license": "MIT"
+ },
+ "src/lib/Babylonian.sol": {
+ "keccak256": "0xadab3cc6503267d6cd5ee1d1c50d2fc6f4443916a35419d4c46ee4f270ea17a4",
+ "urls": [
+ "bzz-raw://a8e495ca3a3f727836182357c28f0998cebc40f842aca480b49ca34ff1113419",
+ "dweb:/ipfs/QmdX7NgnduduUoVAc5XFJH9osEVweJNGV92ozUdL2GX6HZ"
+ ],
+ "license": "GPL-3.0-or-later"
+ }
+ },
+ "version": 1
+ },
+ "id": 35
+}
diff --git a/constants/abis/ConnectorPlugin.json b/constants/abis/ConnectorPlugin.json
index 341d45d..ee72633 100644
--- a/constants/abis/ConnectorPlugin.json
+++ b/constants/abis/ConnectorPlugin.json
@@ -1 +1,208 @@
-{"abi":[{"type":"constructor","inputs":[{"name":"_registry","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"execute","inputs":[{"name":"_connector","type":"address","internalType":"address"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"payable"},{"type":"function","name":"registry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ConnectorRegistry"}],"stateMutability":"view"},{"type":"event","name":"ConnectorExecuted","inputs":[{"name":"connector","type":"address","indexed":true,"internalType":"address"},{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"data","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"result","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"ConnectorExecutionFailed","inputs":[{"name":"connector","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"ConnectorNotApproved","inputs":[{"name":"connector","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60a03461007257601f6105a238819003918201601f19168301916001600160401b038311848410176100765780849260209460405283398101031261007257516001600160a01b0381169081900361007257608052604051610517908161008b8239608051818181608e01526101710152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604090808252600480361015610021575b505050361561001f575f80fd5b005b5f3560e01c9182631cff79cd146100b6575050637b10399914610045578080610012565b346100b2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b257823573ffffffffffffffffffffffffffffffffffffffff8082168083036100b25760249586359067ffffffffffffffff948583116100b257366023840112156100b25782820135948686116100b257898401938a8736920101116100b25788907fecac7cf50000000000000000000000000000000000000000000000000000000082528584830152818b60209b8c937f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103c3575f9161038d575b501561035f575f809188518a8101907f6accdc130000000000000000000000000000000000000000000000000000000082528a8d82015261021c816101ea606482018c8b61049f565b336044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610431565b519134905af1973d15610357573d986102348a6104dd565b9961024189519b8c610431565b8a523d5f8a8c013e5b156103135750506102857f25fbd8e076227fb9f0896280f3a1dc453080008fc552c7c113ab631c06c4a26f918651948786528786019161049f565b92808403878201528061029933958a6103ee565b0390a3835184019383818187019603126100b257838101519182116100b257019083603f830112156100b25782820151916102d3836104dd565b946102e083519687610431565b8386528284830101116100b25761030f92610300918386880191016103cd565b519282849384528301906103ee565b0390f35b918487610353939481519687967f8dc02213000000000000000000000000000000000000000000000000000000008852870152850152604484019161049f565b0390fd5b60609861024a565b8882858951917f46c393d1000000000000000000000000000000000000000000000000000000008352820152fd5b90508881813d83116103bc575b6103a48183610431565b810103126100b2575180151581036100b2578a6101a1565b503d61039a565b88513d5f823e3d90fd5b5f5b8381106103de5750505f910152565b81810151838201526020016103cf565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361042a815180928187528780880191016103cd565b0116010190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761047257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b67ffffffffffffffff811161047257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020019056","sourceMap":"404:1730:31:-:0;;;;;;;;;;;;;-1:-1:-1;;404:1730:31;;;;-1:-1:-1;;;;;404:1730:31;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;404:1730:31;;;;;;;;1312:39;;404:1730;;;;;;;;1312:39;404:1730;;;;;;;;;;;;-1:-1:-1;404:1730:31;;;;;;-1:-1:-1;404:1730:31;;;;;-1:-1:-1;404:1730:31","linkReferences":{}},"deployedBytecode":{"object":"0x6080604090808252600480361015610021575b505050361561001f575f80fd5b005b5f3560e01c9182631cff79cd146100b6575050637b10399914610045578080610012565b346100b2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b257823573ffffffffffffffffffffffffffffffffffffffff8082168083036100b25760249586359067ffffffffffffffff948583116100b257366023840112156100b25782820135948686116100b257898401938a8736920101116100b25788907fecac7cf50000000000000000000000000000000000000000000000000000000082528584830152818b60209b8c937f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103c3575f9161038d575b501561035f575f809188518a8101907f6accdc130000000000000000000000000000000000000000000000000000000082528a8d82015261021c816101ea606482018c8b61049f565b336044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610431565b519134905af1973d15610357573d986102348a6104dd565b9961024189519b8c610431565b8a523d5f8a8c013e5b156103135750506102857f25fbd8e076227fb9f0896280f3a1dc453080008fc552c7c113ab631c06c4a26f918651948786528786019161049f565b92808403878201528061029933958a6103ee565b0390a3835184019383818187019603126100b257838101519182116100b257019083603f830112156100b25782820151916102d3836104dd565b946102e083519687610431565b8386528284830101116100b25761030f92610300918386880191016103cd565b519282849384528301906103ee565b0390f35b918487610353939481519687967f8dc02213000000000000000000000000000000000000000000000000000000008852870152850152604484019161049f565b0390fd5b60609861024a565b8882858951917f46c393d1000000000000000000000000000000000000000000000000000000008352820152fd5b90508881813d83116103bc575b6103a48183610431565b810103126100b2575180151581036100b2578a6101a1565b503d61039a565b88513d5f823e3d90fd5b5f5b8381106103de5750505f910152565b81810151838201526020016103cf565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361042a815180928187528780880191016103cd565b0116010190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761047257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b67ffffffffffffffff811161047257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020019056","sourceMap":"404:1730:31:-:0;;;;;;;;;;;;;-1:-1:-1;404:1730:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;497:43;404:1730;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1513:40;;404:1730;1513:40;;;;;;404:1730;;;;1513:8;;;;404:1730;1513:40;;;;;;;404:1730;1513:40;;;404:1730;1512:41;;1508:111;;404:1730;;;;;1745:68;;;;;;;;;;;404:1730;1745:68;404:1730;;;;;;;;:::i;:::-;1802:10;404:1730;;;;1745:68;;;;;;;;:::i;:::-;1862:48;1885:9;;1862:48;;;;404:1730;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;1924:8;1920:89;;404:1730;;;2024:56;404:1730;;;;;;;;;;;;:::i;:::-;;;;;;;;;1802:10;404:1730;1802:10;404:1730;;;:::i;:::-;2024:56;;;404:1730;;2098:27;;;;;;;;404:1730;;;;;2098:27;;;404:1730;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;1920:89;404:1730;;;;;;;;1955:43;;;;;;;;404:1730;;;;;;;;;:::i;:::-;1955:43;;;404:1730;;;;;1508:111;404:1730;;;;;1576:32;;;;;;404:1730;1576:32;1513:40;;;;;;;;;;;;;;;;:::i;:::-;;;404:1730;;;;;;;;;;;;1513:40;;;;;;;;;404:1730;;;;;;;;;;;;;;;;;-1:-1:-1;;404:1730:31;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;404:1730:31;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o","linkReferences":{},"immutableReferences":{"37925":[{"start":142,"length":32},{"start":369,"length":32}]}},"methodIdentifiers":{"execute(address,bytes)":"1cff79cd","registry()":"7b103999"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConnectorExecutionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"}],\"name\":\"ConnectorNotApproved\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"ConnectorExecuted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connector\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract ConnectorRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This plugin checks the ConnectorRegistry before forwarding calls to connectors.\",\"events\":{\"ConnectorExecuted(address,address,bytes,bytes)\":{\"params\":{\"caller\":\"The address of the original caller (smart wallet)\",\"connector\":\"The address of the executed connector\",\"data\":\"The calldata passed to the connector\",\"result\":\"The result returned by the connector\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_registry\":\"The address of the ConnectorRegistry contract\"}}},\"title\":\"ConnectorPlugin\",\"version\":1},\"userdoc\":{\"events\":{\"ConnectorExecuted(address,address,bytes,bytes)\":{\"notice\":\"Emitted when a connector is successfully executed\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructs the ConnectorPlugin with a reference to the ConnectorRegistry\"},\"registry()\":{\"notice\":\"The address of the ConnectorRegistry contract\"}},\"notice\":\"This contract serves as an intermediary between the smart wallet and connectors, ensuring that only approved connectors are executed.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ConnectorPlugin.sol\":\"ConnectorPlugin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@aerodrome/contracts/=lib/contracts/\",\":@coinbase/smart-wallet/=lib/smart-wallet/\",\":@opengsn/=lib/contracts/lib/gsn/packages/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib/contracts/lib/v3-core/\",\":FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/\",\":account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/\",\":contracts/=lib/contracts/contracts/\",\":ds-test/=lib/contracts/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gsn/=lib/contracts/lib/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":p256-verifier/=lib/smart-wallet/lib/p256-verifier/\",\":safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/\",\":smart-wallet/=lib/smart-wallet/\",\":solady/=lib/smart-wallet/lib/solady/src/\",\":utils/=lib/contracts/test/utils/\",\":v3-core/=lib/contracts/lib/v3-core/\",\":webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"src/ConnectorPlugin.sol\":{\"keccak256\":\"0xf8d96a1d4fdfbedb59793df1513e0a8d4782ad05c74ce0995b3890041dbbc17a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c34043f6651a78d43336af2493725f84f47aa9c8a2daa3a27b59445f2132503\",\"dweb:/ipfs/QmWkx5D5i4WvgJD5iK2Jr4ie14mgon7BCgJ645SnfYz4Qo\"]},\"src/ConnectorRegistry.sol\":{\"keccak256\":\"0x2753145dd83f65905b0e0ca3b86d92eb6177cfd1c7e4da4c2666e394754de527\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76f779bca8cd724de60175a9efad3206036472f873d22cf6c826240e0c92079b\",\"dweb:/ipfs/QmVQqsRQrtfNiLnk9Sw3tN6BBHDXYzr1EEZCbdzZjFXqGj\"]},\"src/interface/IConnector.sol\":{\"keccak256\":\"0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973\",\"dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"connector","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"type":"error","name":"ConnectorExecutionFailed"},{"inputs":[{"internalType":"address","name":"connector","type":"address"}],"type":"error","name":"ConnectorNotApproved"},{"inputs":[{"internalType":"address","name":"connector","type":"address","indexed":true},{"internalType":"address","name":"caller","type":"address","indexed":true},{"internalType":"bytes","name":"data","type":"bytes","indexed":false},{"internalType":"bytes","name":"result","type":"bytes","indexed":false}],"type":"event","name":"ConnectorExecuted","anonymous":false},{"inputs":[{"internalType":"address","name":"_connector","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"registry","outputs":[{"internalType":"contract ConnectorRegistry","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"constructor":{"params":{"_registry":"The address of the ConnectorRegistry contract"}}},"version":1},"userdoc":{"kind":"user","methods":{"constructor":{"notice":"Constructs the ConnectorPlugin with a reference to the ConnectorRegistry"},"registry()":{"notice":"The address of the ConnectorRegistry contract"}},"version":1}},"settings":{"remappings":["@aerodrome/contracts/=lib/contracts/","@coinbase/smart-wallet/=lib/smart-wallet/","@opengsn/=lib/contracts/lib/gsn/packages/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@uniswap/v3-core/=lib/contracts/lib/v3-core/","FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/","account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/","contracts/=lib/contracts/contracts/","ds-test/=lib/contracts/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","gsn/=lib/contracts/lib/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/","p256-verifier/=lib/smart-wallet/lib/p256-verifier/","safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/","smart-wallet/=lib/smart-wallet/","solady/=lib/smart-wallet/lib/solady/src/","utils/=lib/contracts/test/utils/","v3-core/=lib/contracts/lib/v3-core/","webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/"],"optimizer":{"enabled":true,"runs":1000000},"metadata":{"bytecodeHash":"none","appendCBOR":false},"compilationTarget":{"src/ConnectorPlugin.sol":"ConnectorPlugin"},"evmVersion":"cancun","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts/contracts/access/Ownable.sol":{"keccak256":"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb","urls":["bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6","dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Context.sol":{"keccak256":"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2","urls":["bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12","dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"],"license":"MIT"},"src/ConnectorPlugin.sol":{"keccak256":"0xf8d96a1d4fdfbedb59793df1513e0a8d4782ad05c74ce0995b3890041dbbc17a","urls":["bzz-raw://0c34043f6651a78d43336af2493725f84f47aa9c8a2daa3a27b59445f2132503","dweb:/ipfs/QmWkx5D5i4WvgJD5iK2Jr4ie14mgon7BCgJ645SnfYz4Qo"],"license":"MIT"},"src/ConnectorRegistry.sol":{"keccak256":"0x2753145dd83f65905b0e0ca3b86d92eb6177cfd1c7e4da4c2666e394754de527","urls":["bzz-raw://76f779bca8cd724de60175a9efad3206036472f873d22cf6c826240e0c92079b","dweb:/ipfs/QmVQqsRQrtfNiLnk9Sw3tN6BBHDXYzr1EEZCbdzZjFXqGj"],"license":"MIT"},"src/interface/IConnector.sol":{"keccak256":"0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04","urls":["bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973","dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a"],"license":"MIT"}},"version":1},"id":31}
\ No newline at end of file
+{
+ "abi": [
+ {
+ "type": "constructor",
+ "inputs": [{ "name": "_registry", "type": "address", "internalType": "address" }],
+ "stateMutability": "nonpayable"
+ },
+ { "type": "receive", "stateMutability": "payable" },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ { "name": "_connector", "type": "address", "internalType": "address" },
+ { "name": "_data", "type": "bytes", "internalType": "bytes" }
+ ],
+ "outputs": [{ "name": "", "type": "bytes", "internalType": "bytes" }],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "registry",
+ "inputs": [],
+ "outputs": [{ "name": "", "type": "address", "internalType": "contract ConnectorRegistry" }],
+ "stateMutability": "view"
+ },
+ {
+ "type": "event",
+ "name": "ConnectorExecuted",
+ "inputs": [
+ { "name": "connector", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "caller", "type": "address", "indexed": true, "internalType": "address" },
+ { "name": "data", "type": "bytes", "indexed": false, "internalType": "bytes" },
+ { "name": "result", "type": "bytes", "indexed": false, "internalType": "bytes" }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "ConnectorExecutionFailed",
+ "inputs": [
+ { "name": "connector", "type": "address", "internalType": "address" },
+ { "name": "data", "type": "bytes", "internalType": "bytes" }
+ ]
+ },
+ { "type": "error", "name": "ConnectorNotApproved", "inputs": [{ "name": "connector", "type": "address", "internalType": "address" }] }
+ ],
+ "bytecode": {
+ "object": "0x60a03461007257601f6105a238819003918201601f19168301916001600160401b038311848410176100765780849260209460405283398101031261007257516001600160a01b0381169081900361007257608052604051610517908161008b8239608051818181608e01526101710152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604090808252600480361015610021575b505050361561001f575f80fd5b005b5f3560e01c9182631cff79cd146100b6575050637b10399914610045578080610012565b346100b2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b257823573ffffffffffffffffffffffffffffffffffffffff8082168083036100b25760249586359067ffffffffffffffff948583116100b257366023840112156100b25782820135948686116100b257898401938a8736920101116100b25788907fecac7cf50000000000000000000000000000000000000000000000000000000082528584830152818b60209b8c937f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103c3575f9161038d575b501561035f575f809188518a8101907f6accdc130000000000000000000000000000000000000000000000000000000082528a8d82015261021c816101ea606482018c8b61049f565b336044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610431565b519134905af1973d15610357573d986102348a6104dd565b9961024189519b8c610431565b8a523d5f8a8c013e5b156103135750506102857f25fbd8e076227fb9f0896280f3a1dc453080008fc552c7c113ab631c06c4a26f918651948786528786019161049f565b92808403878201528061029933958a6103ee565b0390a3835184019383818187019603126100b257838101519182116100b257019083603f830112156100b25782820151916102d3836104dd565b946102e083519687610431565b8386528284830101116100b25761030f92610300918386880191016103cd565b519282849384528301906103ee565b0390f35b918487610353939481519687967f8dc02213000000000000000000000000000000000000000000000000000000008852870152850152604484019161049f565b0390fd5b60609861024a565b8882858951917f46c393d1000000000000000000000000000000000000000000000000000000008352820152fd5b90508881813d83116103bc575b6103a48183610431565b810103126100b2575180151581036100b2578a6101a1565b503d61039a565b88513d5f823e3d90fd5b5f5b8381106103de5750505f910152565b81810151838201526020016103cf565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361042a815180928187528780880191016103cd565b0116010190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761047257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b67ffffffffffffffff811161047257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020019056",
+ "sourceMap": "404:1730:31:-:0;;;;;;;;;;;;;-1:-1:-1;;404:1730:31;;;;-1:-1:-1;;;;;404:1730:31;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;404:1730:31;;;;;;;;1312:39;;404:1730;;;;;;;;1312:39;404:1730;;;;;;;;;;;;-1:-1:-1;404:1730:31;;;;;;-1:-1:-1;404:1730:31;;;;;-1:-1:-1;404:1730:31",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x6080604090808252600480361015610021575b505050361561001f575f80fd5b005b5f3560e01c9182631cff79cd146100b6575050637b10399914610045578080610012565b346100b2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b83807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b257823573ffffffffffffffffffffffffffffffffffffffff8082168083036100b25760249586359067ffffffffffffffff948583116100b257366023840112156100b25782820135948686116100b257898401938a8736920101116100b25788907fecac7cf50000000000000000000000000000000000000000000000000000000082528584830152818b60209b8c937f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103c3575f9161038d575b501561035f575f809188518a8101907f6accdc130000000000000000000000000000000000000000000000000000000082528a8d82015261021c816101ea606482018c8b61049f565b336044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610431565b519134905af1973d15610357573d986102348a6104dd565b9961024189519b8c610431565b8a523d5f8a8c013e5b156103135750506102857f25fbd8e076227fb9f0896280f3a1dc453080008fc552c7c113ab631c06c4a26f918651948786528786019161049f565b92808403878201528061029933958a6103ee565b0390a3835184019383818187019603126100b257838101519182116100b257019083603f830112156100b25782820151916102d3836104dd565b946102e083519687610431565b8386528284830101116100b25761030f92610300918386880191016103cd565b519282849384528301906103ee565b0390f35b918487610353939481519687967f8dc02213000000000000000000000000000000000000000000000000000000008852870152850152604484019161049f565b0390fd5b60609861024a565b8882858951917f46c393d1000000000000000000000000000000000000000000000000000000008352820152fd5b90508881813d83116103bc575b6103a48183610431565b810103126100b2575180151581036100b2578a6101a1565b503d61039a565b88513d5f823e3d90fd5b5f5b8381106103de5750505f910152565b81810151838201526020016103cf565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361042a815180928187528780880191016103cd565b0116010190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761047257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b67ffffffffffffffff811161047257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020019056",
+ "sourceMap": "404:1730:31:-:0;;;;;;;;;;;;;-1:-1:-1;404:1730:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;497:43;404:1730;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1513:40;;404:1730;1513:40;;;;;;404:1730;;;;1513:8;;;;404:1730;1513:40;;;;;;;404:1730;1513:40;;;404:1730;1512:41;;1508:111;;404:1730;;;;;1745:68;;;;;;;;;;;404:1730;1745:68;404:1730;;;;;;;;:::i;:::-;1802:10;404:1730;;;;1745:68;;;;;;;;:::i;:::-;1862:48;1885:9;;1862:48;;;;404:1730;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;1924:8;1920:89;;404:1730;;;2024:56;404:1730;;;;;;;;;;;;:::i;:::-;;;;;;;;;1802:10;404:1730;1802:10;404:1730;;;:::i;:::-;2024:56;;;404:1730;;2098:27;;;;;;;;404:1730;;;;;2098:27;;;404:1730;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;1920:89;404:1730;;;;;;;;1955:43;;;;;;;;404:1730;;;;;;;;;:::i;:::-;1955:43;;;404:1730;;;;;1508:111;404:1730;;;;;1576:32;;;;;;404:1730;1576:32;1513:40;;;;;;;;;;;;;;;;:::i;:::-;;;404:1730;;;;;;;;;;;;1513:40;;;;;;;;;404:1730;;;;;;;;;;;;;;;;;-1:-1:-1;;404:1730:31;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;404:1730:31;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o",
+ "linkReferences": {},
+ "immutableReferences": {
+ "37925": [
+ { "start": 142, "length": 32 },
+ { "start": 369, "length": 32 }
+ ]
+ }
+ },
+ "methodIdentifiers": { "execute(address,bytes)": "1cff79cd", "registry()": "7b103999" },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_registry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConnectorExecutionFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"}],\"name\":\"ConnectorNotApproved\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"connector\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"ConnectorExecuted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_connector\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract ConnectorRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This plugin checks the ConnectorRegistry before forwarding calls to connectors.\",\"events\":{\"ConnectorExecuted(address,address,bytes,bytes)\":{\"params\":{\"caller\":\"The address of the original caller (smart wallet)\",\"connector\":\"The address of the executed connector\",\"data\":\"The calldata passed to the connector\",\"result\":\"The result returned by the connector\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_registry\":\"The address of the ConnectorRegistry contract\"}}},\"title\":\"ConnectorPlugin\",\"version\":1},\"userdoc\":{\"events\":{\"ConnectorExecuted(address,address,bytes,bytes)\":{\"notice\":\"Emitted when a connector is successfully executed\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructs the ConnectorPlugin with a reference to the ConnectorRegistry\"},\"registry()\":{\"notice\":\"The address of the ConnectorRegistry contract\"}},\"notice\":\"This contract serves as an intermediary between the smart wallet and connectors, ensuring that only approved connectors are executed.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ConnectorPlugin.sol\":\"ConnectorPlugin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@aerodrome/contracts/=lib/contracts/\",\":@coinbase/smart-wallet/=lib/smart-wallet/\",\":@opengsn/=lib/contracts/lib/gsn/packages/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@uniswap/v3-core/=lib/contracts/lib/v3-core/\",\":FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/\",\":account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/\",\":contracts/=lib/contracts/contracts/\",\":ds-test/=lib/contracts/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":gsn/=lib/contracts/lib/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":p256-verifier/=lib/smart-wallet/lib/p256-verifier/\",\":safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/\",\":smart-wallet/=lib/smart-wallet/\",\":solady/=lib/smart-wallet/lib/solady/src/\",\":utils/=lib/contracts/test/utils/\",\":v3-core/=lib/contracts/lib/v3-core/\",\":webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"src/ConnectorPlugin.sol\":{\"keccak256\":\"0xf8d96a1d4fdfbedb59793df1513e0a8d4782ad05c74ce0995b3890041dbbc17a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c34043f6651a78d43336af2493725f84f47aa9c8a2daa3a27b59445f2132503\",\"dweb:/ipfs/QmWkx5D5i4WvgJD5iK2Jr4ie14mgon7BCgJ645SnfYz4Qo\"]},\"src/ConnectorRegistry.sol\":{\"keccak256\":\"0x2753145dd83f65905b0e0ca3b86d92eb6177cfd1c7e4da4c2666e394754de527\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://76f779bca8cd724de60175a9efad3206036472f873d22cf6c826240e0c92079b\",\"dweb:/ipfs/QmVQqsRQrtfNiLnk9Sw3tN6BBHDXYzr1EEZCbdzZjFXqGj\"]},\"src/interface/IConnector.sol\":{\"keccak256\":\"0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973\",\"dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": { "version": "0.8.24+commit.e11b9ed9" },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [{ "internalType": "address", "name": "_registry", "type": "address" }],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "connector", "type": "address" },
+ { "internalType": "bytes", "name": "data", "type": "bytes" }
+ ],
+ "type": "error",
+ "name": "ConnectorExecutionFailed"
+ },
+ {
+ "inputs": [{ "internalType": "address", "name": "connector", "type": "address" }],
+ "type": "error",
+ "name": "ConnectorNotApproved"
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "connector", "type": "address", "indexed": true },
+ { "internalType": "address", "name": "caller", "type": "address", "indexed": true },
+ { "internalType": "bytes", "name": "data", "type": "bytes", "indexed": false },
+ { "internalType": "bytes", "name": "result", "type": "bytes", "indexed": false }
+ ],
+ "type": "event",
+ "name": "ConnectorExecuted",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ { "internalType": "address", "name": "_connector", "type": "address" },
+ { "internalType": "bytes", "name": "_data", "type": "bytes" }
+ ],
+ "stateMutability": "payable",
+ "type": "function",
+ "name": "execute",
+ "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }]
+ },
+ {
+ "inputs": [],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "registry",
+ "outputs": [{ "internalType": "contract ConnectorRegistry", "name": "", "type": "address" }]
+ },
+ { "inputs": [], "stateMutability": "payable", "type": "receive" }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": { "constructor": { "params": { "_registry": "The address of the ConnectorRegistry contract" } } },
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {
+ "constructor": { "notice": "Constructs the ConnectorPlugin with a reference to the ConnectorRegistry" },
+ "registry()": { "notice": "The address of the ConnectorRegistry contract" }
+ },
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ "@aerodrome/contracts/=lib/contracts/",
+ "@coinbase/smart-wallet/=lib/smart-wallet/",
+ "@opengsn/=lib/contracts/lib/gsn/packages/",
+ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
+ "@uniswap/v3-core/=lib/contracts/lib/v3-core/",
+ "FreshCryptoLib/=lib/smart-wallet/lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/",
+ "account-abstraction/=lib/smart-wallet/lib/account-abstraction/contracts/",
+ "contracts/=lib/contracts/contracts/",
+ "ds-test/=lib/contracts/lib/ds-test/src/",
+ "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
+ "forge-std/=lib/forge-std/src/",
+ "gsn/=lib/contracts/lib/",
+ "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
+ "openzeppelin-contracts/=lib/openzeppelin-contracts/",
+ "p256-verifier/=lib/smart-wallet/lib/p256-verifier/",
+ "safe-singleton-deployer-sol/=lib/smart-wallet/lib/safe-singleton-deployer-sol/",
+ "smart-wallet/=lib/smart-wallet/",
+ "solady/=lib/smart-wallet/lib/solady/src/",
+ "utils/=lib/contracts/test/utils/",
+ "v3-core/=lib/contracts/lib/v3-core/",
+ "webauthn-sol/=lib/smart-wallet/lib/webauthn-sol/src/"
+ ],
+ "optimizer": { "enabled": true, "runs": 1000000 },
+ "metadata": { "bytecodeHash": "none", "appendCBOR": false },
+ "compilationTarget": { "src/ConnectorPlugin.sol": "ConnectorPlugin" },
+ "evmVersion": "cancun",
+ "libraries": {},
+ "viaIR": true
+ },
+ "sources": {
+ "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
+ "keccak256": "0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb",
+ "urls": [
+ "bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6",
+ "dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
+ "keccak256": "0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2",
+ "urls": [
+ "bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12",
+ "dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF"
+ ],
+ "license": "MIT"
+ },
+ "src/ConnectorPlugin.sol": {
+ "keccak256": "0xf8d96a1d4fdfbedb59793df1513e0a8d4782ad05c74ce0995b3890041dbbc17a",
+ "urls": [
+ "bzz-raw://0c34043f6651a78d43336af2493725f84f47aa9c8a2daa3a27b59445f2132503",
+ "dweb:/ipfs/QmWkx5D5i4WvgJD5iK2Jr4ie14mgon7BCgJ645SnfYz4Qo"
+ ],
+ "license": "MIT"
+ },
+ "src/ConnectorRegistry.sol": {
+ "keccak256": "0x2753145dd83f65905b0e0ca3b86d92eb6177cfd1c7e4da4c2666e394754de527",
+ "urls": [
+ "bzz-raw://76f779bca8cd724de60175a9efad3206036472f873d22cf6c826240e0c92079b",
+ "dweb:/ipfs/QmVQqsRQrtfNiLnk9Sw3tN6BBHDXYzr1EEZCbdzZjFXqGj"
+ ],
+ "license": "MIT"
+ },
+ "src/interface/IConnector.sol": {
+ "keccak256": "0xc66c3e22372dddaba5666bfb79f5c0901e9adaf17caa7dbaf27b13cf4e96db04",
+ "urls": [
+ "bzz-raw://0bce2177be791674864c3fa9be62ef9fdd1f7c4f6b0e165ad3219bea3c5d6973",
+ "dweb:/ipfs/QmQAKRY4eZKhrT39nHKT1W8UxyLBGwvzVXq9oW9ZoXXN1a"
+ ],
+ "license": "MIT"
+ }
+ },
+ "version": 1
+ },
+ "id": 31
+}
diff --git a/constants/abis/EntryPoint.json b/constants/abis/EntryPoint.json
index 545338c..7b03db7 100644
--- a/constants/abis/EntryPoint.json
+++ b/constants/abis/EntryPoint.json
@@ -1,805 +1,805 @@
[
- {
- "type": "constructor",
- "inputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "fallback",
- "stateMutability": "payable"
- },
- {
- "type": "receive",
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "REPLAYABLE_NONCE_KEY",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "addOwnerAddress",
- "inputs": [
- {
- "name": "owner",
- "type": "address",
- "internalType": "address"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "addOwnerPublicKey",
- "inputs": [
- {
- "name": "x",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "y",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "canSkipChainIdValidation",
- "inputs": [
- {
- "name": "functionSelector",
- "type": "bytes4",
- "internalType": "bytes4"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "pure"
- },
- {
- "type": "function",
- "name": "domainSeparator",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "eip712Domain",
- "inputs": [],
- "outputs": [
- {
- "name": "fields",
- "type": "bytes1",
- "internalType": "bytes1"
- },
- {
- "name": "name",
- "type": "string",
- "internalType": "string"
- },
- {
- "name": "version",
- "type": "string",
- "internalType": "string"
- },
- {
- "name": "chainId",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "verifyingContract",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "salt",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "extensions",
- "type": "uint256[]",
- "internalType": "uint256[]"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "entryPoint",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "execute",
- "inputs": [
- {
- "name": "target",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "value",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "data",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "executeBatch",
- "inputs": [
- {
- "name": "calls",
- "type": "tuple[]",
- "internalType": "struct CoinbaseSmartWallet.Call[]",
- "components": [
- {
- "name": "target",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "value",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "data",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "executeWithoutChainIdValidation",
- "inputs": [
- {
- "name": "calls",
- "type": "bytes[]",
- "internalType": "bytes[]"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "getUserOpHashWithoutChainId",
- "inputs": [
- {
- "name": "userOp",
- "type": "tuple",
- "internalType": "struct UserOperation",
- "components": [
- {
- "name": "sender",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "nonce",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "initCode",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "verificationGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "preVerificationGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxPriorityFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "paymasterAndData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "signature",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "implementation",
- "inputs": [],
- "outputs": [
- {
- "name": "$",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "initialize",
- "inputs": [
- {
- "name": "owners",
- "type": "bytes[]",
- "internalType": "bytes[]"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "isOwnerAddress",
- "inputs": [
- {
- "name": "account",
- "type": "address",
- "internalType": "address"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "isOwnerBytes",
- "inputs": [
- {
- "name": "account",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "isOwnerPublicKey",
- "inputs": [
- {
- "name": "x",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "y",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "isValidSignature",
- "inputs": [
- {
- "name": "hash",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "signature",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [
- {
- "name": "result",
- "type": "bytes4",
- "internalType": "bytes4"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "nextOwnerIndex",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "ownerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "ownerCount",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "proxiableUUID",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "removeLastOwner",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "removeOwnerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "removedOwnersCount",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "replaySafeHash",
- "inputs": [
- {
- "name": "hash",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "upgradeToAndCall",
- "inputs": [
- {
- "name": "newImplementation",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "data",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "validateUserOp",
- "inputs": [
- {
- "name": "userOp",
- "type": "tuple",
- "internalType": "struct UserOperation",
- "components": [
- {
- "name": "sender",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "nonce",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "initCode",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "verificationGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "preVerificationGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxPriorityFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "paymasterAndData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "signature",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "name": "userOpHash",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "missingAccountFunds",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "outputs": [
- {
- "name": "validationData",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "nonpayable"
- },
- {
- "type": "event",
- "name": "AddOwner",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "indexed": true,
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "indexed": false,
- "internalType": "bytes"
- }
- ],
- "anonymous": false
- },
- {
- "type": "event",
- "name": "RemoveOwner",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "indexed": true,
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "indexed": false,
- "internalType": "bytes"
- }
- ],
- "anonymous": false
- },
- {
- "type": "event",
- "name": "Upgraded",
- "inputs": [
- {
- "name": "implementation",
- "type": "address",
- "indexed": true,
- "internalType": "address"
- }
- ],
- "anonymous": false
- },
- {
- "type": "error",
- "name": "AlreadyOwner",
- "inputs": [
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "type": "error",
- "name": "Initialized",
- "inputs": []
- },
- {
- "type": "error",
- "name": "InvalidEthereumAddressOwner",
- "inputs": [
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "type": "error",
- "name": "InvalidNonceKey",
- "inputs": [
- {
- "name": "key",
- "type": "uint256",
- "internalType": "uint256"
- }
- ]
- },
- {
- "type": "error",
- "name": "InvalidOwnerBytesLength",
- "inputs": [
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
+ {
+ "type": "constructor",
+ "inputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "fallback",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "receive",
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "REPLAYABLE_NONCE_KEY",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "addOwnerAddress",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "addOwnerPublicKey",
+ "inputs": [
+ {
+ "name": "x",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "y",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "canSkipChainIdValidation",
+ "inputs": [
+ {
+ "name": "functionSelector",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "pure"
+ },
+ {
+ "type": "function",
+ "name": "domainSeparator",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "eip712Domain",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "fields",
+ "type": "bytes1",
+ "internalType": "bytes1"
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "version",
+ "type": "string",
+ "internalType": "string"
+ },
+ {
+ "name": "chainId",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verifyingContract",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "salt",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "extensions",
+ "type": "uint256[]",
+ "internalType": "uint256[]"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "entryPoint",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "execute",
+ "inputs": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "executeBatch",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "tuple[]",
+ "internalType": "struct CoinbaseSmartWallet.Call[]",
+ "components": [
+ {
+ "name": "target",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
]
- },
- {
- "type": "error",
- "name": "LastOwner",
- "inputs": []
- },
- {
- "type": "error",
- "name": "NoOwnerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- }
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "executeWithoutChainIdValidation",
+ "inputs": [
+ {
+ "name": "calls",
+ "type": "bytes[]",
+ "internalType": "bytes[]"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "getUserOpHashWithoutChainId",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct UserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callGasLimit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verificationGasLimit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "maxFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
]
- },
- {
- "type": "error",
- "name": "NotLastOwner",
- "inputs": [
- {
- "name": "ownersRemaining",
- "type": "uint256",
- "internalType": "uint256"
- }
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "implementation",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "$",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "initialize",
+ "inputs": [
+ {
+ "name": "owners",
+ "type": "bytes[]",
+ "internalType": "bytes[]"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "isOwnerAddress",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isOwnerBytes",
+ "inputs": [
+ {
+ "name": "account",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isOwnerPublicKey",
+ "inputs": [
+ {
+ "name": "x",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "y",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "isValidSignature",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "result",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "nextOwnerIndex",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ownerAtIndex",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "ownerCount",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "proxiableUUID",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "removeLastOwner",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "owner",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "removeOwnerAtIndex",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "owner",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "function",
+ "name": "removedOwnersCount",
+ "inputs": [],
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "replaySafeHash",
+ "inputs": [
+ {
+ "name": "hash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ }
+ ],
+ "stateMutability": "view"
+ },
+ {
+ "type": "function",
+ "name": "upgradeToAndCall",
+ "inputs": [
+ {
+ "name": "newImplementation",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "data",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ],
+ "outputs": [],
+ "stateMutability": "payable"
+ },
+ {
+ "type": "function",
+ "name": "validateUserOp",
+ "inputs": [
+ {
+ "name": "userOp",
+ "type": "tuple",
+ "internalType": "struct UserOperation",
+ "components": [
+ {
+ "name": "sender",
+ "type": "address",
+ "internalType": "address"
+ },
+ {
+ "name": "nonce",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "initCode",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "callGasLimit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "verificationGasLimit",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "preVerificationGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "maxFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "paymasterAndData",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "signature",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
]
- },
- {
- "type": "error",
- "name": "SelectorNotAllowed",
- "inputs": [
- {
- "name": "selector",
- "type": "bytes4",
- "internalType": "bytes4"
- }
- ]
- },
- {
- "type": "error",
- "name": "Unauthorized",
- "inputs": []
- },
- {
- "type": "error",
- "name": "UnauthorizedCallContext",
- "inputs": []
- },
- {
- "type": "error",
- "name": "UpgradeFailed",
- "inputs": []
- },
- {
- "type": "error",
- "name": "WrongOwnerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "expectedOwner",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "actualOwner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- }
-]
\ No newline at end of file
+ },
+ {
+ "name": "userOpHash",
+ "type": "bytes32",
+ "internalType": "bytes32"
+ },
+ {
+ "name": "missingAccountFunds",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "validationData",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable"
+ },
+ {
+ "type": "event",
+ "name": "AddOwner",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "indexed": true,
+ "internalType": "uint256"
+ },
+ {
+ "name": "owner",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "RemoveOwner",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "indexed": true,
+ "internalType": "uint256"
+ },
+ {
+ "name": "owner",
+ "type": "bytes",
+ "indexed": false,
+ "internalType": "bytes"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "event",
+ "name": "Upgraded",
+ "inputs": [
+ {
+ "name": "implementation",
+ "type": "address",
+ "indexed": true,
+ "internalType": "address"
+ }
+ ],
+ "anonymous": false
+ },
+ {
+ "type": "error",
+ "name": "AlreadyOwner",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "Initialized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "InvalidEthereumAddressOwner",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "InvalidNonceKey",
+ "inputs": [
+ {
+ "name": "key",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "InvalidOwnerBytesLength",
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "LastOwner",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "NoOwnerAtIndex",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "NotLastOwner",
+ "inputs": [
+ {
+ "name": "ownersRemaining",
+ "type": "uint256",
+ "internalType": "uint256"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "SelectorNotAllowed",
+ "inputs": [
+ {
+ "name": "selector",
+ "type": "bytes4",
+ "internalType": "bytes4"
+ }
+ ]
+ },
+ {
+ "type": "error",
+ "name": "Unauthorized",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UnauthorizedCallContext",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "UpgradeFailed",
+ "inputs": []
+ },
+ {
+ "type": "error",
+ "name": "WrongOwnerAtIndex",
+ "inputs": [
+ {
+ "name": "index",
+ "type": "uint256",
+ "internalType": "uint256"
+ },
+ {
+ "name": "expectedOwner",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "actualOwner",
+ "type": "bytes",
+ "internalType": "bytes"
+ }
+ ]
+ }
+]
diff --git a/constants/abis/LiquidStrategy.ts b/constants/abis/LiquidStrategy.ts
new file mode 100644
index 0000000..c5f2945
--- /dev/null
+++ b/constants/abis/LiquidStrategy.ts
@@ -0,0 +1,310 @@
+export const LiquidStrategy = {
+ abi: [
+ { inputs: [{ internalType: 'bytes32', name: 'strategyId', type: 'bytes32' }], name: 'StrategyAlreadyExists', type: 'error' },
+ { inputs: [{ internalType: 'bytes32', name: 'strategyId', type: 'bytes32' }], name: 'StrategyNotFound', type: 'error' },
+ { inputs: [{ internalType: 'address', name: 'caller', type: 'address' }], name: 'Unauthorized', type: 'error' },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: 'bytes32', name: 'strategyId', type: 'bytes32' },
+ { indexed: true, internalType: 'address', name: 'curator', type: 'address' },
+ { indexed: true, internalType: 'string', name: 'name', type: 'string' },
+ { indexed: false, internalType: 'string', name: 'strategyDescription', type: 'string' },
+ {
+ components: [
+ { internalType: 'address', name: 'connector', type: 'address' },
+ { internalType: 'enum IConnector.ActionType', name: 'actionType', type: 'uint8' },
+ { internalType: 'address[]', name: 'assetsIn', type: 'address[]' },
+ { internalType: 'address', name: 'assetOut', type: 'address' },
+ { internalType: 'uint256', name: 'amountRatio', type: 'uint256' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ indexed: false,
+ internalType: 'struct ILiquidStrategy.Step[]',
+ name: 'steps',
+ type: 'tuple[]',
+ },
+ { indexed: false, internalType: 'uint256', name: 'minDeposit', type: 'uint256' },
+ { indexed: false, internalType: 'uint256', name: 'maxTVL', type: 'uint256' },
+ { indexed: false, internalType: 'uint256', name: 'performanceFee', type: 'uint256' },
+ ],
+ name: 'CreateStrategy',
+ type: 'event',
+ },
+ {
+ inputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
+ name: 'allStrategyIds',
+ outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'string', name: '_name', type: 'string' },
+ { internalType: 'string', name: '_strategyDescription', type: 'string' },
+ {
+ components: [
+ { internalType: 'address', name: 'connector', type: 'address' },
+ { internalType: 'enum IConnector.ActionType', name: 'actionType', type: 'uint8' },
+ { internalType: 'address[]', name: 'assetsIn', type: 'address[]' },
+ { internalType: 'address', name: 'assetOut', type: 'address' },
+ { internalType: 'uint256', name: 'amountRatio', type: 'uint256' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ internalType: 'struct ILiquidStrategy.Step[]',
+ name: '_steps',
+ type: 'tuple[]',
+ },
+ { internalType: 'uint256', name: '_minDeposit', type: 'uint256' },
+ { internalType: 'uint256', name: '_maxTVL', type: 'uint256' },
+ { internalType: 'uint256', name: '_performanceFee', type: 'uint256' },
+ ],
+ name: 'createStrategy',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'getAllStrategies',
+ outputs: [
+ {
+ components: [
+ { internalType: 'bytes32', name: 'strategyId', type: 'bytes32' },
+ { internalType: 'address', name: 'curator', type: 'address' },
+ { internalType: 'string', name: 'name', type: 'string' },
+ { internalType: 'string', name: 'strategyDescription', type: 'string' },
+ {
+ components: [
+ { internalType: 'address', name: 'connector', type: 'address' },
+ { internalType: 'enum IConnector.ActionType', name: 'actionType', type: 'uint8' },
+ { internalType: 'address[]', name: 'assetsIn', type: 'address[]' },
+ { internalType: 'address', name: 'assetOut', type: 'address' },
+ { internalType: 'uint256', name: 'amountRatio', type: 'uint256' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ internalType: 'struct ILiquidStrategy.Step[]',
+ name: 'steps',
+ type: 'tuple[]',
+ },
+ { internalType: 'uint256', name: 'minDeposit', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxTVL', type: 'uint256' },
+ { internalType: 'uint256', name: 'performanceFee', type: 'uint256' },
+ ],
+ internalType: 'struct ILiquidStrategy.Strategy[]',
+ name: '',
+ type: 'tuple[]',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes32', name: '_strategyId', type: 'bytes32' }],
+ name: 'getStrategy',
+ outputs: [
+ {
+ components: [
+ { internalType: 'bytes32', name: 'strategyId', type: 'bytes32' },
+ { internalType: 'address', name: 'curator', type: 'address' },
+ { internalType: 'string', name: 'name', type: 'string' },
+ { internalType: 'string', name: 'strategyDescription', type: 'string' },
+ {
+ components: [
+ { internalType: 'address', name: 'connector', type: 'address' },
+ { internalType: 'enum IConnector.ActionType', name: 'actionType', type: 'uint8' },
+ { internalType: 'address[]', name: 'assetsIn', type: 'address[]' },
+ { internalType: 'address', name: 'assetOut', type: 'address' },
+ { internalType: 'uint256', name: 'amountRatio', type: 'uint256' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ internalType: 'struct ILiquidStrategy.Step[]',
+ name: 'steps',
+ type: 'tuple[]',
+ },
+ { internalType: 'uint256', name: 'minDeposit', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxTVL', type: 'uint256' },
+ { internalType: 'uint256', name: 'performanceFee', type: 'uint256' },
+ ],
+ internalType: 'struct ILiquidStrategy.Strategy',
+ name: '',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'address', name: '_curator', type: 'address' }],
+ name: 'getStrategy',
+ outputs: [
+ {
+ components: [
+ { internalType: 'bytes32', name: 'strategyId', type: 'bytes32' },
+ { internalType: 'address', name: 'curator', type: 'address' },
+ { internalType: 'string', name: 'name', type: 'string' },
+ { internalType: 'string', name: 'strategyDescription', type: 'string' },
+ {
+ components: [
+ { internalType: 'address', name: 'connector', type: 'address' },
+ { internalType: 'enum IConnector.ActionType', name: 'actionType', type: 'uint8' },
+ { internalType: 'address[]', name: 'assetsIn', type: 'address[]' },
+ { internalType: 'address', name: 'assetOut', type: 'address' },
+ { internalType: 'uint256', name: 'amountRatio', type: 'uint256' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ internalType: 'struct ILiquidStrategy.Step[]',
+ name: 'steps',
+ type: 'tuple[]',
+ },
+ { internalType: 'uint256', name: 'minDeposit', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxTVL', type: 'uint256' },
+ { internalType: 'uint256', name: 'performanceFee', type: 'uint256' },
+ ],
+ internalType: 'struct ILiquidStrategy.Strategy[]',
+ name: '',
+ type: 'tuple[]',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes32', name: '_strategyId', type: 'bytes32' }],
+ name: 'getStrategyStats',
+ outputs: [
+ {
+ components: [
+ { internalType: 'uint256', name: 'totalDeposits', type: 'uint256' },
+ { internalType: 'uint256', name: 'totalUsers', type: 'uint256' },
+ { internalType: 'uint256', name: 'totalFeeGenerated', type: 'uint256' },
+ { internalType: 'uint256', name: 'lastUpdated', type: 'uint256' },
+ ],
+ internalType: 'struct ILiquidStrategy.StrategyStats',
+ name: '',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'getTotalStrategies',
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'bytes32', name: '_strategyId', type: 'bytes32' },
+ { internalType: 'address', name: '_user', type: 'address' },
+ { internalType: 'address', name: '_asset', type: 'address' },
+ ],
+ name: 'getUserAssetBalance',
+ outputs: [
+ {
+ components: [
+ { internalType: 'address', name: 'asset', type: 'address' },
+ { internalType: 'uint256', name: 'amount', type: 'uint256' },
+ { internalType: 'uint256', name: 'usdValue', type: 'uint256' },
+ { internalType: 'uint256', name: 'lastUpdated', type: 'uint256' },
+ ],
+ internalType: 'struct ILiquidStrategy.AssetBalance',
+ name: '',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'bytes32', name: '_strategyId', type: 'bytes32' },
+ { internalType: 'address', name: '_user', type: 'address' },
+ { internalType: 'address', name: '_protocol', type: 'address' },
+ { internalType: 'address', name: '_lpToken', type: 'address' },
+ ],
+ name: 'getUserShareBalance',
+ outputs: [
+ {
+ components: [
+ { internalType: 'address', name: 'protocol', type: 'address' },
+ { internalType: 'address', name: 'lpToken', type: 'address' },
+ { internalType: 'uint256', name: 'lpAmount', type: 'uint256' },
+ { internalType: 'address[]', name: 'underlyingTokens', type: 'address[]' },
+ { internalType: 'uint256[]', name: 'underlyingAmounts', type: 'uint256[]' },
+ { internalType: 'uint256', name: 'lastUpdated', type: 'uint256' },
+ ],
+ internalType: 'struct ILiquidStrategy.ShareBalance',
+ name: '',
+ type: 'tuple',
+ },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'address', name: '_user', type: 'address' }],
+ name: 'getUserStrategies',
+ outputs: [{ internalType: 'bytes32[]', name: '', type: 'bytes32[]' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ name: 'strategies',
+ outputs: [
+ { internalType: 'bytes32', name: 'strategyId', type: 'bytes32' },
+ { internalType: 'address', name: 'curator', type: 'address' },
+ { internalType: 'string', name: 'name', type: 'string' },
+ { internalType: 'string', name: 'strategyDescription', type: 'string' },
+ { internalType: 'uint256', name: 'minDeposit', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxTVL', type: 'uint256' },
+ { internalType: 'uint256', name: 'performanceFee', type: 'uint256' },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ name: 'strategyStats',
+ outputs: [
+ { internalType: 'uint256', name: 'totalDeposits', type: 'uint256' },
+ { internalType: 'uint256', name: 'totalUsers', type: 'uint256' },
+ { internalType: 'uint256', name: 'totalFeeGenerated', type: 'uint256' },
+ { internalType: 'uint256', name: 'lastUpdated', type: 'uint256' },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'bytes32', name: '', type: 'bytes32' },
+ { internalType: 'address', name: '', type: 'address' },
+ ],
+ name: 'userStats',
+ outputs: [
+ { internalType: 'uint256', name: 'initialDeposit', type: 'uint256' },
+ { internalType: 'uint256', name: 'totalDepositedUSD', type: 'uint256' },
+ { internalType: 'uint256', name: 'totalWithdrawnUSD', type: 'uint256' },
+ { internalType: 'uint256', name: 'totalReward', type: 'uint256' },
+ { internalType: 'uint256', name: 'feesPaid', type: 'uint256' },
+ { internalType: 'uint256', name: 'joinTimestamp', type: 'uint256' },
+ { internalType: 'uint256', name: 'lastActionTimestamp', type: 'uint256' },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'address', name: '', type: 'address' },
+ { internalType: 'uint256', name: '', type: 'uint256' },
+ ],
+ name: 'userStrategies',
+ outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ ],
+} as const;
diff --git a/constants/abis/SmartWallet.json b/constants/abis/SmartWallet.json
deleted file mode 100644
index 545338c..0000000
--- a/constants/abis/SmartWallet.json
+++ /dev/null
@@ -1,805 +0,0 @@
-[
- {
- "type": "constructor",
- "inputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "fallback",
- "stateMutability": "payable"
- },
- {
- "type": "receive",
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "REPLAYABLE_NONCE_KEY",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "addOwnerAddress",
- "inputs": [
- {
- "name": "owner",
- "type": "address",
- "internalType": "address"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "addOwnerPublicKey",
- "inputs": [
- {
- "name": "x",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "y",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "canSkipChainIdValidation",
- "inputs": [
- {
- "name": "functionSelector",
- "type": "bytes4",
- "internalType": "bytes4"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "pure"
- },
- {
- "type": "function",
- "name": "domainSeparator",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "eip712Domain",
- "inputs": [],
- "outputs": [
- {
- "name": "fields",
- "type": "bytes1",
- "internalType": "bytes1"
- },
- {
- "name": "name",
- "type": "string",
- "internalType": "string"
- },
- {
- "name": "version",
- "type": "string",
- "internalType": "string"
- },
- {
- "name": "chainId",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "verifyingContract",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "salt",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "extensions",
- "type": "uint256[]",
- "internalType": "uint256[]"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "entryPoint",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "execute",
- "inputs": [
- {
- "name": "target",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "value",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "data",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "executeBatch",
- "inputs": [
- {
- "name": "calls",
- "type": "tuple[]",
- "internalType": "struct CoinbaseSmartWallet.Call[]",
- "components": [
- {
- "name": "target",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "value",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "data",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "executeWithoutChainIdValidation",
- "inputs": [
- {
- "name": "calls",
- "type": "bytes[]",
- "internalType": "bytes[]"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "getUserOpHashWithoutChainId",
- "inputs": [
- {
- "name": "userOp",
- "type": "tuple",
- "internalType": "struct UserOperation",
- "components": [
- {
- "name": "sender",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "nonce",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "initCode",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "verificationGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "preVerificationGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxPriorityFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "paymasterAndData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "signature",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "implementation",
- "inputs": [],
- "outputs": [
- {
- "name": "$",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "initialize",
- "inputs": [
- {
- "name": "owners",
- "type": "bytes[]",
- "internalType": "bytes[]"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "isOwnerAddress",
- "inputs": [
- {
- "name": "account",
- "type": "address",
- "internalType": "address"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "isOwnerBytes",
- "inputs": [
- {
- "name": "account",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "isOwnerPublicKey",
- "inputs": [
- {
- "name": "x",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "y",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bool",
- "internalType": "bool"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "isValidSignature",
- "inputs": [
- {
- "name": "hash",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "signature",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [
- {
- "name": "result",
- "type": "bytes4",
- "internalType": "bytes4"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "nextOwnerIndex",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "ownerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "ownerCount",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "proxiableUUID",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "removeLastOwner",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "removeOwnerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "nonpayable"
- },
- {
- "type": "function",
- "name": "removedOwnersCount",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "replaySafeHash",
- "inputs": [
- {
- "name": "hash",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "upgradeToAndCall",
- "inputs": [
- {
- "name": "newImplementation",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "data",
- "type": "bytes",
- "internalType": "bytes"
- }
- ],
- "outputs": [],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "validateUserOp",
- "inputs": [
- {
- "name": "userOp",
- "type": "tuple",
- "internalType": "struct UserOperation",
- "components": [
- {
- "name": "sender",
- "type": "address",
- "internalType": "address"
- },
- {
- "name": "nonce",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "initCode",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "callGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "verificationGasLimit",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "preVerificationGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "maxPriorityFeePerGas",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "paymasterAndData",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "signature",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "name": "userOpHash",
- "type": "bytes32",
- "internalType": "bytes32"
- },
- {
- "name": "missingAccountFunds",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "outputs": [
- {
- "name": "validationData",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "stateMutability": "nonpayable"
- },
- {
- "type": "event",
- "name": "AddOwner",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "indexed": true,
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "indexed": false,
- "internalType": "bytes"
- }
- ],
- "anonymous": false
- },
- {
- "type": "event",
- "name": "RemoveOwner",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "indexed": true,
- "internalType": "uint256"
- },
- {
- "name": "owner",
- "type": "bytes",
- "indexed": false,
- "internalType": "bytes"
- }
- ],
- "anonymous": false
- },
- {
- "type": "event",
- "name": "Upgraded",
- "inputs": [
- {
- "name": "implementation",
- "type": "address",
- "indexed": true,
- "internalType": "address"
- }
- ],
- "anonymous": false
- },
- {
- "type": "error",
- "name": "AlreadyOwner",
- "inputs": [
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "type": "error",
- "name": "Initialized",
- "inputs": []
- },
- {
- "type": "error",
- "name": "InvalidEthereumAddressOwner",
- "inputs": [
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "type": "error",
- "name": "InvalidNonceKey",
- "inputs": [
- {
- "name": "key",
- "type": "uint256",
- "internalType": "uint256"
- }
- ]
- },
- {
- "type": "error",
- "name": "InvalidOwnerBytesLength",
- "inputs": [
- {
- "name": "owner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- },
- {
- "type": "error",
- "name": "LastOwner",
- "inputs": []
- },
- {
- "type": "error",
- "name": "NoOwnerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- }
- ]
- },
- {
- "type": "error",
- "name": "NotLastOwner",
- "inputs": [
- {
- "name": "ownersRemaining",
- "type": "uint256",
- "internalType": "uint256"
- }
- ]
- },
- {
- "type": "error",
- "name": "SelectorNotAllowed",
- "inputs": [
- {
- "name": "selector",
- "type": "bytes4",
- "internalType": "bytes4"
- }
- ]
- },
- {
- "type": "error",
- "name": "Unauthorized",
- "inputs": []
- },
- {
- "type": "error",
- "name": "UnauthorizedCallContext",
- "inputs": []
- },
- {
- "type": "error",
- "name": "UpgradeFailed",
- "inputs": []
- },
- {
- "type": "error",
- "name": "WrongOwnerAtIndex",
- "inputs": [
- {
- "name": "index",
- "type": "uint256",
- "internalType": "uint256"
- },
- {
- "name": "expectedOwner",
- "type": "bytes",
- "internalType": "bytes"
- },
- {
- "name": "actualOwner",
- "type": "bytes",
- "internalType": "bytes"
- }
- ]
- }
-]
\ No newline at end of file
diff --git a/constants/abis/SmartWallet.ts b/constants/abis/SmartWallet.ts
new file mode 100644
index 0000000..dc2e943
--- /dev/null
+++ b/constants/abis/SmartWallet.ts
@@ -0,0 +1,320 @@
+export const smartWalletABI = [
+ { inputs: [], stateMutability: 'nonpayable', type: 'constructor' },
+ { inputs: [{ internalType: 'bytes', name: 'owner', type: 'bytes' }], name: 'AlreadyOwner', type: 'error' },
+ { inputs: [], name: 'Initialized', type: 'error' },
+ { inputs: [{ internalType: 'bytes', name: 'owner', type: 'bytes' }], name: 'InvalidEthereumAddressOwner', type: 'error' },
+ { inputs: [{ internalType: 'uint256', name: 'key', type: 'uint256' }], name: 'InvalidNonceKey', type: 'error' },
+ { inputs: [{ internalType: 'bytes', name: 'owner', type: 'bytes' }], name: 'InvalidOwnerBytesLength', type: 'error' },
+ { inputs: [], name: 'LastOwner', type: 'error' },
+ { inputs: [{ internalType: 'uint256', name: 'index', type: 'uint256' }], name: 'NoOwnerAtIndex', type: 'error' },
+ { inputs: [{ internalType: 'uint256', name: 'ownersRemaining', type: 'uint256' }], name: 'NotLastOwner', type: 'error' },
+ { inputs: [{ internalType: 'bytes4', name: 'selector', type: 'bytes4' }], name: 'SelectorNotAllowed', type: 'error' },
+ { inputs: [], name: 'Unauthorized', type: 'error' },
+ { inputs: [], name: 'UnauthorizedCallContext', type: 'error' },
+ { inputs: [], name: 'UpgradeFailed', type: 'error' },
+ {
+ inputs: [
+ { internalType: 'uint256', name: 'index', type: 'uint256' },
+ { internalType: 'bytes', name: 'expectedOwner', type: 'bytes' },
+ { internalType: 'bytes', name: 'actualOwner', type: 'bytes' },
+ ],
+ name: 'WrongOwnerAtIndex',
+ type: 'error',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: 'uint256', name: 'index', type: 'uint256' },
+ { indexed: false, internalType: 'bytes', name: 'owner', type: 'bytes' },
+ ],
+ name: 'AddOwner',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [
+ { indexed: true, internalType: 'uint256', name: 'index', type: 'uint256' },
+ { indexed: false, internalType: 'bytes', name: 'owner', type: 'bytes' },
+ ],
+ name: 'RemoveOwner',
+ type: 'event',
+ },
+ {
+ anonymous: false,
+ inputs: [{ indexed: true, internalType: 'address', name: 'implementation', type: 'address' }],
+ name: 'Upgraded',
+ type: 'event',
+ },
+ { stateMutability: 'payable', type: 'fallback' },
+ {
+ inputs: [],
+ name: 'REPLAYABLE_NONCE_KEY',
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'address', name: 'owner', type: 'address' }],
+ name: 'addOwnerAddress',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'bytes32', name: 'x', type: 'bytes32' },
+ { internalType: 'bytes32', name: 'y', type: 'bytes32' },
+ ],
+ name: 'addOwnerPublicKey',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes4', name: 'functionSelector', type: 'bytes4' }],
+ name: 'canSkipChainIdValidation',
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
+ stateMutability: 'pure',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'domainSeparator',
+ outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'eip712Domain',
+ outputs: [
+ { internalType: 'bytes1', name: 'fields', type: 'bytes1' },
+ { internalType: 'string', name: 'name', type: 'string' },
+ { internalType: 'string', name: 'version', type: 'string' },
+ { internalType: 'uint256', name: 'chainId', type: 'uint256' },
+ { internalType: 'address', name: 'verifyingContract', type: 'address' },
+ { internalType: 'bytes32', name: 'salt', type: 'bytes32' },
+ { internalType: 'uint256[]', name: 'extensions', type: 'uint256[]' },
+ ],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'entryPoint',
+ outputs: [{ internalType: 'address', name: '', type: 'address' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'address', name: 'target', type: 'address' },
+ { internalType: 'uint256', name: 'value', type: 'uint256' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ name: 'execute',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: 'address', name: 'target', type: 'address' },
+ { internalType: 'uint256', name: 'value', type: 'uint256' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ internalType: 'struct CoinbaseSmartWallet.Call[]',
+ name: 'calls',
+ type: 'tuple[]',
+ },
+ ],
+ name: 'executeBatch',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes[]', name: 'calls', type: 'bytes[]' }],
+ name: 'executeWithoutChainIdValidation',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: 'address', name: 'sender', type: 'address' },
+ { internalType: 'uint256', name: 'nonce', type: 'uint256' },
+ { internalType: 'bytes', name: 'initCode', type: 'bytes' },
+ { internalType: 'bytes', name: 'callData', type: 'bytes' },
+ { internalType: 'uint256', name: 'callGasLimit', type: 'uint256' },
+ { internalType: 'uint256', name: 'verificationGasLimit', type: 'uint256' },
+ { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' },
+ { internalType: 'bytes', name: 'paymasterAndData', type: 'bytes' },
+ { internalType: 'bytes', name: 'signature', type: 'bytes' },
+ ],
+ internalType: 'struct UserOperation',
+ name: 'userOp',
+ type: 'tuple',
+ },
+ ],
+ name: 'getUserOpHashWithoutChainId',
+ outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'implementation',
+ outputs: [{ internalType: 'address', name: '$', type: 'address' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes[]', name: 'owners', type: 'bytes[]' }],
+ name: 'initialize',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
+ name: 'isOwnerAddress',
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes', name: 'account', type: 'bytes' }],
+ name: 'isOwnerBytes',
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'bytes32', name: 'x', type: 'bytes32' },
+ { internalType: 'bytes32', name: 'y', type: 'bytes32' },
+ ],
+ name: 'isOwnerPublicKey',
+ outputs: [{ internalType: 'bool', name: '', type: 'bool' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'bytes32', name: 'hash', type: 'bytes32' },
+ { internalType: 'bytes', name: 'signature', type: 'bytes' },
+ ],
+ name: 'isValidSignature',
+ outputs: [{ internalType: 'bytes4', name: 'result', type: 'bytes4' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'nextOwnerIndex',
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'uint256', name: 'index', type: 'uint256' }],
+ name: 'ownerAtIndex',
+ outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'ownerCount',
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'proxiableUUID',
+ outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'uint256', name: 'index', type: 'uint256' },
+ { internalType: 'bytes', name: 'owner', type: 'bytes' },
+ ],
+ name: 'removeLastOwner',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'uint256', name: 'index', type: 'uint256' },
+ { internalType: 'bytes', name: 'owner', type: 'bytes' },
+ ],
+ name: 'removeOwnerAtIndex',
+ outputs: [],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ {
+ inputs: [],
+ name: 'removedOwnersCount',
+ outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [{ internalType: 'bytes32', name: 'hash', type: 'bytes32' }],
+ name: 'replaySafeHash',
+ outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],
+ stateMutability: 'view',
+ type: 'function',
+ },
+ {
+ inputs: [
+ { internalType: 'address', name: 'newImplementation', type: 'address' },
+ { internalType: 'bytes', name: 'data', type: 'bytes' },
+ ],
+ name: 'upgradeToAndCall',
+ outputs: [],
+ stateMutability: 'payable',
+ type: 'function',
+ },
+ {
+ inputs: [
+ {
+ components: [
+ { internalType: 'address', name: 'sender', type: 'address' },
+ { internalType: 'uint256', name: 'nonce', type: 'uint256' },
+ { internalType: 'bytes', name: 'initCode', type: 'bytes' },
+ { internalType: 'bytes', name: 'callData', type: 'bytes' },
+ { internalType: 'uint256', name: 'callGasLimit', type: 'uint256' },
+ { internalType: 'uint256', name: 'verificationGasLimit', type: 'uint256' },
+ { internalType: 'uint256', name: 'preVerificationGas', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' },
+ { internalType: 'uint256', name: 'maxPriorityFeePerGas', type: 'uint256' },
+ { internalType: 'bytes', name: 'paymasterAndData', type: 'bytes' },
+ { internalType: 'bytes', name: 'signature', type: 'bytes' },
+ ],
+ internalType: 'struct UserOperation',
+ name: 'userOp',
+ type: 'tuple',
+ },
+ { internalType: 'bytes32', name: 'userOpHash', type: 'bytes32' },
+ { internalType: 'uint256', name: 'missingAccountFunds', type: 'uint256' },
+ ],
+ name: 'validateUserOp',
+ outputs: [{ internalType: 'uint256', name: 'validationData', type: 'uint256' }],
+ stateMutability: 'nonpayable',
+ type: 'function',
+ },
+ { stateMutability: 'payable', type: 'receive' },
+] as const;
diff --git a/constants/abis/SmartWalletFactory.json b/constants/abis/SmartWalletFactory.json
deleted file mode 100644
index c01f976..0000000
--- a/constants/abis/SmartWalletFactory.json
+++ /dev/null
@@ -1,92 +0,0 @@
-[
- {
- "type": "constructor",
- "inputs": [
- {
- "name": "implementation_",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "createAccount",
- "inputs": [
- {
- "name": "owners",
- "type": "bytes[]",
- "internalType": "bytes[]"
- },
- {
- "name": "nonce",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "outputs": [
- {
- "name": "account",
- "type": "address",
- "internalType": "contract CoinbaseSmartWallet"
- }
- ],
- "stateMutability": "payable"
- },
- {
- "type": "function",
- "name": "getAddress",
- "inputs": [
- {
- "name": "owners",
- "type": "bytes[]",
- "internalType": "bytes[]"
- },
- {
- "name": "nonce",
- "type": "uint256",
- "internalType": "uint256"
- }
- ],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "implementation",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "address",
- "internalType": "address"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "function",
- "name": "initCodeHash",
- "inputs": [],
- "outputs": [
- {
- "name": "",
- "type": "bytes32",
- "internalType": "bytes32"
- }
- ],
- "stateMutability": "view"
- },
- {
- "type": "error",
- "name": "OwnerRequired",
- "inputs": []
- }
-]
\ No newline at end of file
diff --git a/constants/abis/SmartWalletFactory.ts b/constants/abis/SmartWalletFactory.ts
new file mode 100644
index 0000000..2be93e6
--- /dev/null
+++ b/constants/abis/SmartWalletFactory.ts
@@ -0,0 +1,92 @@
+export const smartWalletFactoryAbi = [
+ {
+ type: 'constructor',
+ inputs: [
+ {
+ name: 'implementation_',
+ type: 'address',
+ internalType: 'address',
+ },
+ ],
+ stateMutability: 'payable',
+ },
+ {
+ type: 'function',
+ name: 'createAccount',
+ inputs: [
+ {
+ name: 'owners',
+ type: 'bytes[]',
+ internalType: 'bytes[]',
+ },
+ {
+ name: 'nonce',
+ type: 'uint256',
+ internalType: 'uint256',
+ },
+ ],
+ outputs: [
+ {
+ name: 'account',
+ type: 'address',
+ internalType: 'address',
+ },
+ ],
+ stateMutability: 'payable',
+ },
+ {
+ type: 'function',
+ name: 'getAddress',
+ inputs: [
+ {
+ name: 'owners',
+ type: 'bytes[]',
+ internalType: 'bytes[]',
+ },
+ {
+ name: 'nonce',
+ type: 'uint256',
+ internalType: 'uint256',
+ },
+ ],
+ outputs: [
+ {
+ name: '',
+ type: 'address',
+ internalType: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ },
+ {
+ type: 'function',
+ name: 'implementation',
+ inputs: [],
+ outputs: [
+ {
+ name: '',
+ type: 'address',
+ internalType: 'address',
+ },
+ ],
+ stateMutability: 'view',
+ },
+ {
+ type: 'function',
+ name: 'initCodeHash',
+ inputs: [],
+ outputs: [
+ {
+ name: '',
+ type: 'bytes32',
+ internalType: 'bytes32',
+ },
+ ],
+ stateMutability: 'view',
+ },
+ {
+ type: 'error',
+ name: 'OwnerRequired',
+ inputs: [],
+ },
+] as const;
diff --git a/constants/abis/index.ts b/constants/abis/index.ts
index 097c92e..7597c7a 100644
--- a/constants/abis/index.ts
+++ b/constants/abis/index.ts
@@ -1,12 +1,12 @@
import * as AerodromeFactoryABI from './AerodromeFactoryABI.json';
import * as OffchainOracleABI from './OffchainOracle';
import * as EntryPointABI from './EntryPoint.json';
-import * as SmartWalletABI from './SmartWallet.json';
-import * as SmartWalletFactoryABI from './SmartWalletFactory.json';
+import * as SmartWalletABI from './SmartWallet';
import * as AerodromeConnectorABI from './AerodromeConnector.json';
import * as ConnectorPluginABI from './ConnectorPlugin.json';
import * as AerodromePoolABI from './AerodromePoolABI.json';
import * as LPSugarABI from './LPSugar';
+import * as LiquidStrategy from './LiquidStrategy';
export {
LPSugarABI,
@@ -14,8 +14,8 @@ export {
AerodromeFactoryABI,
OffchainOracleABI,
SmartWalletABI,
- SmartWalletFactoryABI,
EntryPointABI,
AerodromeConnectorABI,
ConnectorPluginABI,
+ LiquidStrategy,
};
diff --git a/constants/addresses.ts b/constants/addresses.ts
index edcc050..abb1e2a 100644
--- a/constants/addresses.ts
+++ b/constants/addresses.ts
@@ -9,9 +9,12 @@ export const WETH_ADDRESS: Address = '0x4200000000000000000000000000000000000006
export const ACCOUNT_FACTORY_ADDRESS: Address = '0x0BA5ED0c6AA8c49038F819E587E2633c4A9F428a' as Address;
export const ENTRYPOINT_V06_ADDRESS: Address = '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789' as Address;
+export const TEST_USER: Address = '0x78815067c3926cc33F7790d87460BEC779F42d4D' as Address;
+
// Liquid connectors
export const AERODROME_CONNECTOR: Address = '0x10e1aC384A4Fb3e0Bc4724D097B0d7F4e99143E6' as Address;
export const CONNECTOR_PLUGIN: Address = '0x96281563A06a8D3319C9822B58d8808FaC7EA14D' as Address;
+export const STRATEGY_CONTRACT_ADDRESS = '0x4368d53677c09995989a22DE5b31EfceAeD735ae' as Address;
export const CONNECTORS_BASE: Address[] = [
USDC_ADDRESS, // USDC
@@ -29,4 +32,32 @@ export const CONNECTORS_BASE: Address[] = [
'0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', // USDbC
];
+export const protocolList: ProtocolItem[] = [
+ {
+ id: '1',
+ icon: 'moonwell',
+ title: 'Moonwell',
+ address: '0x123456789abcdef123456789abcdef1234567890',
+ },
+ {
+ id: '2',
+ icon: 'aerodrome',
+ title: 'Aerodrome',
+ address: '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd',
+ },
+ {
+ id: '3',
+ icon: 'morpho',
+ title: 'Morpho',
+ address: '0x789abcdef123456789abcdef123456789abcdef12',
+ },
+ // this is dummy
+ {
+ id: '4',
+ icon: 'moonwell',
+ title: 'Moonwell',
+ address: '0x3234567890123456789012345678901234567890',
+ },
+];
+
export const OFFCHAIN_ORACLE_ADDRESS: Address = '0xf224a25453D76A41c4427DD1C05369BC9f498444' as Address;
diff --git a/constants/env.ts b/constants/env.ts
index 2fc75d3..394164f 100644
--- a/constants/env.ts
+++ b/constants/env.ts
@@ -3,14 +3,28 @@ export const isDev = !isProd;
export const rpcUrl = process.env.EXPO_PUBLIC_BASE_RPC_URL;
export const bundlerUrl = process.env.EXPO_PUBLIC_BUNDLER_RPC_URL;
+export const pimilcoApiKey = process.env.EXPO_PUBLIC_PIMILCO_API_KEY;
+
+export const pimilcoRPCURL = `https://api.pimlico.io/v2/8453/rpc?apikey=${pimilcoApiKey}`;
export const rpId = 'api.useliquid.xyz';
export const smartAccountInfoKey = 'SMART_ACCOUNT_INFO';
export const privyAppId = process.env.EXPO_PUBLIC_PRIVY_APP_ID as string;
-export const privyClientId = process.env.EXPO_PUBLIC_PRIVY_CLIENT_ID;
+export const privyClientId = process.env.EXPO_PUBLIC_PRIVY_CLIENT_ID as string;
if (!privyAppId || !privyClientId) {
- throw new Error('Privy App ID and Client ID are required');
+ throw new Error('EXPO_PUBLIC_PRIVY_APP_ID and EXPO_PUBLIC_PRIVY_CLIENT_ID are required');
+}
+
+export const apiUrl = process.env.EXPO_PUBLIC_API_URL as string;
+export const apiKey = process.env.EXPO_PUBLIC_API_KEY as string;
+
+if (!apiUrl || !apiKey) {
+ throw new Error('EXPO_PUBLIC_API_URL and EXPO_PUBLIC_API_KEY are required');
+}
+
+if (!pimilcoApiKey) {
+ throw new Error('EXPO_PUBLIC_PIMILCO_API_KEY is required');
}
diff --git a/constants/icons.tsx b/constants/icons.tsx
new file mode 100644
index 0000000..08e9792
--- /dev/null
+++ b/constants/icons.tsx
@@ -0,0 +1,30 @@
+import {
+ AerodromeIcon,
+ BorrowIcon,
+ CoinbaseWalletIcon,
+ CuratorIcon,
+ DebitCardIcon,
+ DepositIcon,
+ MoonWellIcon,
+ MorphoIcon,
+ StakeIcon,
+ SupplyIcon,
+ DisconnectWalletIcon,
+} from '@/assets/icons';
+
+const ICONS = {
+ aerodrome: ,
+ moonwell: ,
+ morpho: ,
+ stake: ,
+ deposit: ,
+ borrow: ,
+ supply: ,
+ sort: ,
+ debitCard: ,
+ crypto: ,
+ coinBase: ,
+ disconnect: ,
+};
+
+export default ICONS;
diff --git a/hooks/liquidity.md b/hooks/liquidity.md
new file mode 100644
index 0000000..94b6d6b
--- /dev/null
+++ b/hooks/liquidity.md
@@ -0,0 +1,257 @@
+# Aerodrome Liquidity Hooks Documentation
+
+## Overview
+
+The `useLiquidity` hook provides methods for interacting with Aerodrome liquidity pools, including adding/removing liquidity, swapping tokens, and staking LP tokens.
+
+## Installation & Setup
+
+```typescript
+import { useLiquidity } from '@/hooks/useLiquidity';
+import { usePublicClient } from 'wagmi';
+
+function YourComponent() {
+ const publicClient = usePublicClient();
+ const { addLiquidity, removeLiquidity, swap, stake } = useLiquidity(
+ publicClient,
+ account // your wallet address
+ );
+}
+```
+
+## Core Methods
+
+### 1. Adding Liquidity
+
+Add liquidity to an Aerodrome pool with optional pre-swap functionality.
+
+```typescript
+// Basic liquidity addition
+const addLiquidityExample = async () => {
+ await addLiquidity({
+ tokenA: {
+ address: '0x...', // token A address
+ decimals: 18,
+ },
+ tokenB: {
+ address: '0x...', // token B address
+ decimals: 18,
+ },
+ stable: true, // true for stable pools, false for volatile
+ amountAIn: '1.0', // amount of token A to add
+ amountBIn: '1.0', // amount of token B to add
+ to: account, // recipient address
+ });
+};
+
+// Adding liquidity with a pre-swap
+const addLiquidityWithSwapExample = async () => {
+ await addLiquidity({
+ // Regular liquidity parameters
+ tokenA: {
+ address: '0x...',
+ decimals: 18,
+ },
+ tokenB: {
+ address: '0x...',
+ decimals: 18,
+ },
+ stable: true,
+ amountAIn: '1.0',
+ amountBIn: '1.0',
+ to: account,
+
+ // Pre-swap configuration
+ preSwap: {
+ enabled: true,
+ params: {
+ tokenA: {
+ address: '0x...', // token to swap from
+ decimals: 6,
+ },
+ tokenB: {
+ address: '0x...', // token to swap to
+ decimals: 18,
+ },
+ amountIn: '1000', // amount to swap
+ minReturnAmount: '0.95', // minimum expected return
+ stable: true,
+ to: account,
+ },
+ },
+ });
+};
+```
+
+### 2. Removing Liquidity
+
+Remove liquidity from an Aerodrome pool.
+
+```typescript
+const removeLiquidityExample = async () => {
+ await removeLiquidity({
+ tokenA: {
+ address: '0x...',
+ decimals: 18,
+ },
+ tokenB: {
+ address: '0x...',
+ decimals: 18,
+ },
+ stable: true,
+ liquidity: '1.0', // amount of LP tokens to remove
+ amountAMin: '0.95', // minimum amount of token A to receive
+ amountBMin: '0.95', // minimum amount of token B to receive
+ to: account,
+ });
+};
+```
+
+### 3. Swapping Tokens
+
+Execute a token swap on Aerodrome.
+
+```typescript
+const swapExample = async () => {
+ await swap({
+ tokenA: {
+ address: '0x...',
+ decimals: 18,
+ },
+ tokenB: {
+ address: '0x...',
+ decimals: 18,
+ },
+ stable: true,
+ amountIn: '1.0',
+ minReturnAmount: '0.95',
+ to: account,
+ });
+};
+```
+
+### 4. Staking LP Tokens
+
+Stake LP tokens in an Aerodrome gauge.
+
+```typescript
+const stakeExample = async () => {
+ await stake({
+ gauge: {
+ address: '0x...', // gauge address
+ decimals: 18,
+ },
+ amount: '1.0', // amount of LP tokens to stake
+ });
+};
+```
+
+## Transaction Configuration
+
+All methods accept an optional transaction configuration object:
+
+```typescript
+const txConfig = {
+ waitForReceipt: true, // whether to wait for transaction confirmation
+};
+
+// Example usage
+await addLiquidity(params, txConfig);
+```
+
+## Type Definitions
+
+### Token Interface
+
+```typescript
+interface Token {
+ address: Address;
+ decimals: number;
+}
+```
+
+### Add Liquidity Parameters
+
+```typescript
+interface AddLiquidityParams {
+ tokenA: Token;
+ tokenB: Token;
+ stable: boolean;
+ amountAIn: string;
+ amountBIn: string;
+ to: Address;
+}
+
+interface AddLiquidityWithSwapParams extends AddLiquidityParams {
+ preSwap?: {
+ enabled: boolean;
+ params: {
+ tokenA: Token;
+ tokenB: Token;
+ amountIn: string;
+ minReturnAmount: string;
+ stable: boolean;
+ to: Address;
+ };
+ };
+}
+```
+
+### Remove Liquidity Parameters
+
+```typescript
+interface RemoveLiquidityParams {
+ tokenA: Token;
+ tokenB: Token;
+ stable: boolean;
+ liquidity: string;
+ amountAMin: string;
+ amountBMin: string;
+ to: Address;
+}
+```
+
+### Swap Parameters
+
+```typescript
+interface SwapExactTokensParams {
+ tokenA: Token;
+ tokenB: Token;
+ stable: boolean;
+ amountIn: string;
+ minReturnAmount: string;
+ to: Address;
+}
+```
+
+### Stake Parameters
+
+```typescript
+interface StakeParams {
+ gauge: {
+ address: Address;
+ decimals: number;
+ };
+ amount: string;
+}
+```
+
+## Error Handling
+
+```typescript
+try {
+ await addLiquidity(params);
+} catch (error) {
+ if (error instanceof Error) {
+ console.error('Transaction failed:', error.message);
+ }
+}
+```
+
+## Notes
+
+- All amount inputs are in human-readable format (e.g., "1.0" for 1 token)
+- Decimals are handled automatically based on token configuration
+- Transactions are automatically batched for efficiency
+- Approvals are handled automatically
+- Default deadline is set to 1 hour from execution
diff --git a/hooks/types.ts b/hooks/types.ts
index e348a87..af5c702 100644
--- a/hooks/types.ts
+++ b/hooks/types.ts
@@ -127,62 +127,60 @@ export type FormattedPosition = {
// logo_url: string;
// };
-export type EnhancedFormattedPool = Omit & {
- token0: Token;
- token1: Token;
- TVL: string;
- volume0: string;
- volume1: string;
- cumulativeVolumeUSD: string;
-};
-
-type EnhancedFormattedPoolType = 'token0' | 'token1' | 'TVL' | 'volume0' | 'volume1' | 'cumulativeVolumeUSD';
-
export type VolumeReturn = { volume0: string; volume1: string; cumulativeVolumeUSD: string };
export interface AddLiquidityParams {
- tokenA: Address;
- tokenB: Address;
+ tokenA: Token;
+ tokenB: Token;
stable: boolean;
- amountAIn: bigint;
- amountBIn: bigint;
- amountAMin: bigint;
- amountBMin: bigint;
- balanceTokenRatio: boolean;
+ amountAIn: string;
+ amountBIn: string;
to: Address;
deadline: bigint;
}
export interface RemoveLiquidityParams {
- tokenA: Address;
- tokenB: Address;
+ tokenA: Token;
+ tokenB: Token;
stable: boolean;
- liquidity: bigint;
- amountAMin: bigint;
- amountBMin: bigint;
+ liquidity: string;
+ amountAMin: string;
+ amountBMin: string;
to: Address;
deadline: bigint;
}
export interface SwapExactTokensParams {
- amountIn: bigint;
- minReturnAmount: bigint;
- routes: IRouter.RouteStruct[];
+ amountIn: string;
+ minReturnAmount: string;
+ tokenA: Token;
+ tokenB: Token;
to: Address;
deadline: bigint;
+ stable: boolean;
}
export interface StakeParams {
- gaugeAddress: Address;
- amount: bigint;
+ gauge: Token;
+ amount: string;
+}
+
+export interface PreSwapConfig {
+ enabled: boolean;
+ params: SwapExactTokensParams;
+}
+
+// Extend AddLiquidity params to include optional swap
+export interface AddLiquidityWithSwapParams extends AddLiquidityParams {
+ preSwap?: PreSwapConfig;
}
export interface AddLiquidityQuoteParams {
- tokenA: Address;
- tokenB: Address;
+ tokenA: Token;
+ tokenB: Token;
stable: boolean;
- amountA: bigint;
- amountB: bigint;
+ amountA: string;
+ amountB: string;
balanceTokenRatio?: boolean;
decimalsA: number;
decimalsB: number;
diff --git a/hooks/useCalls.ts b/hooks/useCalls.ts
new file mode 100644
index 0000000..0fbe775
--- /dev/null
+++ b/hooks/useCalls.ts
@@ -0,0 +1,137 @@
+import { Address, encodeFunctionData, Hex } from 'viem';
+import {
+ buildUserOp,
+ getOwnerIndex,
+ getPaymasterData,
+ getUserOpHash,
+ PASSKEY_OWNER_DUMMY_SIGNATURE,
+ sendUserOperation,
+ sponsorUserOperation,
+} from '@/utils/wallet';
+import { Call } from '@/utils/types';
+import { entryPoint06Abi, entryPoint06Address, getUserOperationHash, UserOperation } from 'viem/account-abstraction';
+import { useClients } from '@/init/useViem';
+import { useSmartAccountActions } from '@/store/smartAccount/actions';
+import { SmartWalletABI } from '@/constants/abis';
+import { ENTRYPOINT_V06_ADDRESS } from '@/constants/addresses';
+import { useCallback } from 'react';
+import { getPersistedSmartAccountInfo } from '@/store/smartAccount/persist';
+import { buildWebAuthnSignature } from '@/utils/signature';
+import { bufferToHex, parseAndNormalizeSig } from '@/utils/base64';
+import { splitSignature } from '@/utils/helpers';
+import { pimilcoRPCURL } from '@/constants/env';
+import { getRequiredPrefund } from 'permissionless';
+import { bundlerClient, publicClient } from '@/init/client';
+
+export function useMakeCalls() {
+ const { signTransaction } = useSmartAccountActions();
+ const { paymaster, smartAccountClient } = useClients();
+
+ const makeCalls = useCallback(
+ async ({ calls, account }: { calls: Call[]; account: Address }) => {
+ const { publicKey, credentialID } = await getPersistedSmartAccountInfo();
+
+ // Build the user operation
+ const op = await buildUserOp(account, smartAccountClient!, {
+ calls,
+ signers: [publicKey as Hex],
+ paymasterAndData: '0x', // Initialize with empty paymaster data
+ });
+
+ // const sponsoredData = await sponsorUserOperation({
+ // callData: op.callData,
+ // sender: op.sender,
+ // nonce: op.nonce,
+ // initCode: op.initCode,
+ // maxFeePerGas: BigInt(op.maxFeePerGas),
+ // maxPriorityFeePerGas: BigInt(op.maxPriorityFeePerGas),
+ // callGasLimit: op.callGasLimit,
+ // verificationGasLimit: op.verificationGasLimit,
+ // preVerificationGas: op.preVerificationGas,
+ // signature: PASSKEY_OWNER_DUMMY_SIGNATURE,
+ // });
+
+ // Update operation with paymaster data
+ //op.paymasterAndData = sponsoredData.paymasterAndData;
+ const hash = getUserOpHash({
+ chainId: BigInt(8453),
+ userOperation: {
+ sender: op.sender,
+ nonce: op.nonce,
+ initCode: op.initCode,
+ callData: op.callData,
+ callGasLimit: op.callGasLimit,
+ verificationGasLimit: op.verificationGasLimit,
+ preVerificationGas: op.preVerificationGas,
+ maxFeePerGas: BigInt(op.maxFeePerGas),
+ maxPriorityFeePerGas: BigInt(op.maxPriorityFeePerGas),
+ paymasterAndData: '0x',
+ signature: PASSKEY_OWNER_DUMMY_SIGNATURE,
+ },
+ });
+
+ const signature = await signTransaction(hash);
+
+ const { r, s } = parseAndNormalizeSig(signature.signature);
+
+ const webAuthnSignatureFormat = buildWebAuthnSignature({
+ ownerIndex: BigInt(0),
+ authenticatorData: signature.webauthn.authenticatorData,
+ clientDataJSON: signature.webauthn.clientDataJSON,
+ r,
+ s,
+ });
+ // Create new operation object with signature
+ const signedOp = {
+ sender: op.sender,
+ nonce: op.nonce,
+ initCode: op.initCode,
+ callData: op.callData,
+ callGasLimit: op.callGasLimit,
+ verificationGasLimit: op.verificationGasLimit,
+ preVerificationGas: op.preVerificationGas,
+ maxFeePerGas: BigInt(op.maxFeePerGas),
+ maxPriorityFeePerGas: BigInt(op.maxPriorityFeePerGas),
+ paymasterAndData: op.paymasterAndData,
+ signature: webAuthnSignatureFormat,
+ };
+
+ const requiredPrefund = getRequiredPrefund({ userOperation: signedOp, entryPointVersion: '0.6' });
+
+ const senderBalance = await publicClient.getBalance({
+ address: signedOp.sender,
+ });
+
+ if (senderBalance < requiredPrefund) {
+ throw new Error(`Sender address does not have enough native tokens`);
+ }
+
+ // Send the user operation
+ const opHash = await sendUserOperation(signedOp);
+
+ const receipt = await smartAccountClient?.waitForUserOperationReceipt({ hash: opHash, timeout: 1000000 });
+ console.log(receipt, 'receipt');
+ return {
+ opHash,
+ userOpHash: hash,
+ receipt,
+ };
+ },
+ [signTransaction]
+ );
+
+ const buildUserOperationCalldata = useCallback(({ calls }: { calls: Call[] }): Hex => {
+ // sort ascending order, 0 first
+ const _calls = calls.sort((a, b) => a.index - b.index);
+ return encodeFunctionData({
+ abi: SmartWalletABI.smartWalletABI,
+ functionName: 'executeBatch',
+ args: [_calls],
+ });
+ }, []);
+
+ return {
+ makeCalls,
+ buildUserOperationCalldata,
+ };
+}
diff --git a/hooks/useContract.ts b/hooks/useContract.ts
index a2b8643..917d05e 100644
--- a/hooks/useContract.ts
+++ b/hooks/useContract.ts
@@ -1,12 +1,13 @@
import { Address, formatUnits, PublicClient } from 'viem';
import { AerodromePoolABI, LPSugarABI, OffchainOracleABI } from '@/constants/abis';
-import { USDC_ADDRESS, WETH_ADDRESS } from '@/constants/addresses';
+import { LP_SUGAR_ADDRESS, USDC_ADDRESS, WETH_ADDRESS } from '@/constants/addresses';
+import { publicClient } from '@/init/client';
const { LpSugar } = LPSugarABI;
const { OffchainOracle } = OffchainOracleABI;
-export function useLpSugarContract(address: Address, publicClient: PublicClient) {
- if (!LpSugar || !address || !publicClient) {
+export function useLpSugarContract(address: Address) {
+ if (!LpSugar || !LP_SUGAR_ADDRESS || !publicClient) {
throw new Error('Required parameters not provided to useLpSugarContract');
}
@@ -25,12 +26,12 @@ export function useLpSugarContract(address: Address, publicClient: PublicClient)
});
},
- async getPositions(limit: number, offset: number, account: Address) {
+ async getPositions(account: Address) {
return publicClient.readContract({
address,
abi: LpSugar.abi,
functionName: 'positions',
- args: [BigInt(limit), BigInt(offset), account],
+ args: [BigInt(200), BigInt(0), account],
});
},
diff --git a/hooks/useCustomTabview.tsx b/hooks/useCustomTabview.tsx
new file mode 100644
index 0000000..0416b39
--- /dev/null
+++ b/hooks/useCustomTabview.tsx
@@ -0,0 +1,191 @@
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import React, { useState, useCallback, useRef, useMemo } from 'react';
+import { StyleSheet, useWindowDimensions, View, Animated, Pressable, Text } from 'react-native';
+import { TabView, TabBar, SceneRendererProps, NavigationState } from 'react-native-tab-view';
+
+type Route = {
+ key: string;
+ title: string;
+};
+
+type CustomTabViewProps = {
+ routes: Route[];
+ renderScene: (props: SceneRendererProps & { route: Route }) => React.ReactNode;
+ maxContentWidth?: number;
+};
+
+const useCustomTabView = () => {
+ const layout = useWindowDimensions();
+ const [index, setIndex] = useState(0);
+
+ const renderTabBar = ({
+ maxContentWidth = 1140,
+ ...props
+ }: SceneRendererProps & {
+ navigationState: NavigationState;
+ maxContentWidth?: number;
+ }) => {
+ const indicatorFadeAnim = useRef(new Animated.Value(0)).current;
+ const measuredTabWidths = useRef>({});
+ const [tabsWidth, setTabsWidth] = useState>({});
+
+ const handleTabLayout = useCallback(
+ (route: Route, navigationState: NavigationState, layoutWidth: number) => {
+ const routeIndex = navigationState.routes.indexOf(route);
+ measuredTabWidths.current[routeIndex] = layoutWidth;
+
+ if (navigationState.routes.every((_, i) => typeof measuredTabWidths.current[i] === 'number')) {
+ setTabsWidth({ ...measuredTabWidths.current });
+ }
+
+ if (routeIndex === navigationState.routes.length - 1) {
+ Animated.timing(indicatorFadeAnim, {
+ toValue: 1,
+ duration: 150,
+ useNativeDriver: true,
+ }).start();
+ }
+ },
+ [indicatorFadeAnim]
+ );
+
+ const calculateTranslateX = useCallback(
+ (position: Animated.AnimatedInterpolation, routes: Route[]) => {
+ const inputRange = routes.map((_, i) => i);
+ const outputRange = routes.map((_, i) => {
+ const prevWidths = Object.values(tabsWidth)
+ .slice(0, i)
+ .reduce((a, b) => a + b, 0);
+ return prevWidths + (tabsWidth[i] || 0) / 2 - maxContentWidth / 2;
+ });
+
+ return position.interpolate({
+ inputRange,
+ outputRange,
+ extrapolate: 'clamp',
+ });
+ },
+ [tabsWidth, maxContentWidth]
+ );
+
+ const calculateWidth = useCallback(
+ (position: Animated.AnimatedInterpolation, routes: Route[]) => {
+ const inputRange = routes.map((_, i) => i);
+ const outputRange = routes.map((_, i) => tabsWidth[i] || 0);
+
+ return position.interpolate({
+ inputRange,
+ outputRange,
+ extrapolate: 'clamp',
+ });
+ },
+ [tabsWidth]
+ );
+
+ return (
+ {
+ if (Object.keys(tabsWidth).length !== navigationState.routes.length) return null;
+
+ return (
+
+ );
+ }}
+ renderTabBarItem={({ route, onPress, onLongPress, onLayout, navigationState }) => {
+ const isActive = navigationState.index === navigationState.routes.indexOf(route);
+ return (
+ handleTabLayout(route, navigationState, e.nativeEvent.layout.width)}
+ >
+
+ {route.title}
+
+
+ );
+ }}
+ />
+ );
+ };
+
+ const CustomTabView: React.FC = ({ renderScene, routes, maxContentWidth }) => (
+
+ renderTabBar({ ...props, maxContentWidth })}
+ initialLayout={{ width: layout.width }}
+ />
+
+ );
+
+ return { CustomTabView };
+};
+
+const styles = StyleSheet.create({
+ tabBar: {
+ position: 'relative',
+ backgroundColor: 'white',
+ borderBottomWidth: 1,
+ borderColor: 'lightgray',
+ elevation: 0,
+ shadowOpacity: 0,
+ marginBottom: 16,
+ },
+ indicator: {
+ position: 'absolute',
+ height: 2,
+ backgroundColor: 'blue',
+ bottom: 0,
+ },
+ tabItem: {
+ paddingBottom: 12,
+ paddingTop: 16,
+ borderBottomWidth: 2,
+ borderBottomColor: 'transparent',
+ marginHorizontal: 23,
+ padding: 0,
+ },
+ activeTabItem: {
+ borderBottomColor: '#4691FE', // Active tab border color
+ },
+ indicatorContainer: {
+ zIndex: 1,
+ },
+ tabStyle: {
+ width: 'auto',
+ },
+});
+
+export default useCustomTabView;
diff --git a/hooks/useLiquid.ts b/hooks/useLiquid.ts
index 2c0209e..a7536a2 100644
--- a/hooks/useLiquid.ts
+++ b/hooks/useLiquid.ts
@@ -1,107 +1,311 @@
import { useCallback } from 'react';
-import { Address, Hex, PublicClient, WaitForTransactionReceiptParameters } from 'viem';
-import { makeCalls } from '@/utils/calls';
-import { encodePluginExecute, encodeAddLiquidity, encodeRemoveLiquidity, encodeSwap, encodeStake } from '@/utils/encoders';
-import { AERODROME_CONNECTOR, CONNECTOR_PLUGIN } from '@/constants/addresses';
-import { AddLiquidityParams, RemoveLiquidityParams, StakeParams, SwapExactTokensParams, TransactionConfig } from './types';
+import { Address, parseUnits, erc20Abi, Hex, PublicClient } from 'viem';
+import {
+ encodePluginExecute,
+ encodeAddLiquidity,
+ encodeRemoveLiquidity,
+ encodeSwap,
+ encodeStake,
+ encodeApprove,
+ encodeCreateStrategy,
+} from '@/utils/encoders';
+import { AERODROME_CONNECTOR, AERODROME_FACTORY_ADDRESS, CONNECTOR_PLUGIN, STRATEGY_CONTRACT_ADDRESS } from '@/constants/addresses';
+import {
+ AddLiquidityParams,
+ AddLiquidityWithSwapParams,
+ IRouter,
+ RemoveLiquidityParams,
+ StakeParams,
+ SwapExactTokensParams,
+ TransactionConfig,
+} from './types';
+import { Call } from '@/utils/types';
+import { AerodromeConnectorABI } from '@/constants/abis';
+import useSystemFunctions from './useSystemFunctions';
+import { useMakeCalls } from './useCalls';
-async function handleTransaction(client: PublicClient, { hash, waitForReceipt = true }: TransactionConfig) {
- if (!waitForReceipt) return { hash };
+export function useLiquidity(publicClient: PublicClient) {
+ const { smartAccountState } = useSystemFunctions();
+ const { makeCalls, buildUserOperationCalldata } = useMakeCalls();
+ const account = smartAccountState.address as Address;
- const receipt = await client.waitForTransactionReceipt({
- hash,
- });
-
- return {
- hash,
- receipt,
- };
-}
-
-export function useLiquidity(publicClient: PublicClient, account: Address) {
const createPluginCall = useCallback(
- (connectorData: Hex) => {
+ (connectorData: Hex, index: number) => {
const pluginCalldata = encodePluginExecute(AERODROME_CONNECTOR, connectorData);
return {
+ index,
target: CONNECTOR_PLUGIN,
- value: 0n,
data: pluginCalldata,
- index: 0,
+ value: 0n,
};
},
[AERODROME_CONNECTOR, CONNECTOR_PLUGIN]
);
const addLiquidity = useCallback(
- async (params: AddLiquidityParams, txConfig?: Partial) => {
- const connectorData = encodeAddLiquidity(params);
- const call = createPluginCall(connectorData);
+ async (params: AddLiquidityWithSwapParams, txConfig?: Partial) => {
+ const calls: Call[] = [];
+ let currentIndex = 0;
- const { opHash } = await makeCalls({
- calls: [call],
- account,
+ // Validate input amounts
+ if (!params.amountAIn || !params.amountBIn) {
+ throw new Error('Invalid input amounts');
+ }
+
+ // Handle pre-swap if configured
+ if (params.preSwap?.enabled) {
+ if (!params.preSwap.params.amountIn) {
+ throw new Error('Invalid swap amount');
+ }
+
+ // Approve token for swap
+ const swapApproveAmount = parseUnits(params.preSwap.params.amountIn.toString(), params.preSwap.params.tokenA.decimals);
+
+ const approveSwapTokenData = encodeApprove({
+ amount: swapApproveAmount,
+ spender: AERODROME_CONNECTOR,
+ });
+
+ calls.push({
+ index: currentIndex++,
+ target: params.preSwap.params.tokenA.address,
+ data: approveSwapTokenData,
+ value: 0n,
+ });
+
+ // Create swap routes
+ const routes: IRouter.RouteStruct[] = [
+ {
+ from: params.preSwap.params.tokenA.address,
+ to: params.preSwap.params.tokenB.address,
+ stable: params.preSwap.params.stable,
+ factory: AERODROME_FACTORY_ADDRESS,
+ },
+ ];
+
+ // Add swap call
+ const swapData = encodeSwap({
+ amountIn: swapApproveAmount,
+ minReturnAmount: parseUnits(params.preSwap.params.minReturnAmount?.toString() || '0', params.preSwap.params.tokenB.decimals),
+ routes,
+ to: params.preSwap.params.to,
+ deadline: BigInt(Math.floor(Date.now() / 1000) + 3600),
+ caller: account,
+ });
+
+ calls.push(createPluginCall(swapData, currentIndex++));
+ }
+
+ console.log('Add Liquidity Params:', {
+ tokenA: params.tokenA.address,
+ tokenB: params.tokenB.address,
+ decimalsA: params.tokenA.decimals,
+ decimalsB: params.tokenB.decimals,
+ amountAIn: params.amountAIn,
+ amountBIn: params.amountBIn,
+ stable: params.stable,
+ });
+
+ // Get quotes for liquidity deposit
+ const quotes = await quoteDepositLiquidity(
+ params.tokenA.address,
+ params.tokenB.address,
+ params.stable,
+ parseUnits(params.amountAIn.toString(), params.tokenA.decimals),
+ parseUnits(params.amountBIn.toString(), params.tokenB.decimals)
+ );
+
+ // Add approvals for liquidity tokens
+ const approveTokenAData = encodeApprove({
+ amount: parseUnits(params.amountAIn.toString(), params.tokenA.decimals),
+ spender: AERODROME_CONNECTOR,
});
- return handleTransaction(publicClient, {
- hash: opHash,
- ...txConfig,
+ const approveTokenBData = encodeApprove({
+ amount: parseUnits(params.amountBIn.toString(), params.tokenB.decimals),
+ spender: AERODROME_CONNECTOR,
});
+
+ calls.push(
+ {
+ index: currentIndex++,
+ target: params.tokenA.address,
+ data: approveTokenAData,
+ value: 0n,
+ },
+ {
+ index: currentIndex++,
+ target: params.tokenB.address,
+ data: approveTokenBData,
+ value: 0n,
+ }
+ );
+
+ // Add liquidity call
+ const addLiquidityData = encodeAddLiquidity({
+ tokenA: params.tokenA.address,
+ tokenB: params.tokenB.address,
+ stable: params.stable,
+ amountAIn: parseUnits(params.amountAIn.toString(), params.tokenA.decimals),
+ amountBIn: parseUnits(params.amountBIn.toString(), params.tokenB.decimals),
+ amountAMin: quotes?.amountAOut ?? 0n,
+ amountBMin: quotes?.amountBOut ?? 0n,
+ balanceTokenRatio: false,
+ to: account,
+ deadline: BigInt(Math.floor(Date.now() / 1000) + 3600),
+ caller: account,
+ });
+
+ //calls.push(createPluginCall(addLiquidityData, currentIndex));
+
+ const { opHash, receipt } = await makeCalls({
+ calls,
+ account,
+ });
+ return { opHash, receipt };
},
- [publicClient, createPluginCall]
+ [publicClient, createPluginCall, account]
);
const removeLiquidity = useCallback(
async (params: RemoveLiquidityParams, txConfig?: Partial) => {
- const connectorData = encodeRemoveLiquidity(params);
- const call = createPluginCall(connectorData);
+ const connectorData = encodeRemoveLiquidity({
+ tokenA: params.tokenA.address,
+ tokenB: params.tokenB.address,
+ stable: params.stable,
+ liquidity: BigInt(params.liquidity),
+ amountAMin: parseUnits(params.amountAMin.toString(), params.tokenA.decimals),
+ amountBMin: parseUnits(params.amountBMin.toString(), params.tokenB.decimals),
+ to: account,
+ deadline: BigInt(Math.floor(Date.now() / 1000) + 3600),
+ caller: account,
+ });
- const { opHash } = await makeCalls({
+ const call = createPluginCall(connectorData, 0);
+
+ const { opHash, receipt } = await makeCalls({
calls: [call],
account,
});
-
- return handleTransaction(publicClient, {
- hash: opHash,
- ...txConfig,
- });
+ return { opHash, receipt };
},
- [publicClient, createPluginCall]
+ [publicClient, createPluginCall, account]
);
const swap = useCallback(
async (params: SwapExactTokensParams, txConfig?: Partial) => {
- const connectorData = encodeSwap(params);
- const call = createPluginCall(connectorData);
+ const routes: IRouter.RouteStruct[] = [
+ {
+ from: params.tokenA.address,
+ to: params.tokenB.address,
+ stable: params.stable,
+ factory: AERODROME_FACTORY_ADDRESS,
+ },
+ ];
- const { opHash } = await makeCalls({
- calls: [call],
- account,
+ const connectorData = encodeSwap({
+ amountIn: parseUnits(params.amountIn.toString(), params.tokenA.decimals),
+ minReturnAmount: parseUnits(params.minReturnAmount.toString(), params.tokenB.decimals),
+ routes,
+ to: params.to,
+ deadline: BigInt(Math.floor(Date.now() / 1000) + 3600),
+ caller: account,
});
- return handleTransaction(publicClient, {
- hash: opHash,
- ...txConfig,
+ const call = createPluginCall(connectorData, 0);
+
+ const { opHash, receipt } = await makeCalls({
+ calls: [call],
+ account,
});
+ return { opHash, receipt };
},
- [publicClient, createPluginCall]
+ [publicClient, createPluginCall, account]
);
const stake = useCallback(
async (params: StakeParams, txConfig?: Partial) => {
- const connectorData = encodeStake(params);
- const call = createPluginCall(connectorData);
+ const connectorData = encodeStake({
+ gaugeAddress: params.gauge.address,
+ amount: parseUnits(params.amount.toString(), params.gauge.decimals),
+ caller: account,
+ });
+
+ const call = createPluginCall(connectorData, 0);
- const { opHash } = await makeCalls({
+ const { opHash, receipt } = await makeCalls({
calls: [call],
account,
});
+ return { opHash, receipt };
+ },
+ [publicClient, createPluginCall, account]
+ );
+
+ const quoteDepositLiquidity: any = async (tokenA: Address, tokenB: Address, stable: boolean, amountA: bigint, amountB: bigint) => {
+ try {
+ console.log('Quote Deposit Params:', {
+ tokenA,
+ tokenB,
+ stable,
+ amountA: amountA.toString(),
+ amountB: amountB.toString(),
+ balanceTokenRatio: stable,
+ });
- return handleTransaction(publicClient, {
- hash: opHash,
- ...txConfig,
+ // Ensure amounts are not zero
+ if (amountA <= 0n || amountB <= 0n) {
+ throw new Error('Invalid amounts for quote');
+ }
+
+ const result = await publicClient.readContract({
+ address: AERODROME_CONNECTOR,
+ abi: AerodromeConnectorABI.abi,
+ functionName: 'quoteDepositLiquidity',
+ args: [tokenA, tokenB, stable, amountA, amountB, stable],
});
+
+ console.log('Quote Result:', result);
+
+ if (!result) {
+ return {
+ amountAOut: 0n,
+ amountBOut: 0n,
+ };
+ }
+
+ return result;
+ } catch (error) {
+ console.error('Quote Deposit Error:', error);
+ // Return minimum amounts as fallback
+ return {
+ amountAOut: (amountA * BigInt(95)) / BigInt(100), // 95% of input as minimum
+ amountBOut: (amountB * BigInt(95)) / BigInt(100),
+ };
+ }
+ };
+
+ const createStrategy = useCallback(
+ async (params: StrategyBody, txConfig?: Partial) => {
+ try {
+ const createStrategyData = encodeCreateStrategy(params);
+ const createStrategyCall = {
+ index: 0,
+ target: STRATEGY_CONTRACT_ADDRESS,
+ data: createStrategyData,
+ value: 0n,
+ };
+
+ const { opHash, receipt } = await makeCalls({
+ calls: [createStrategyCall],
+ account,
+ });
+ return { opHash, receipt };
+ } catch (error) {
+ throw error;
+ }
},
- [publicClient, createPluginCall]
+ [publicClient, createPluginCall, account]
);
return {
@@ -109,5 +313,6 @@ export function useLiquidity(publicClient: PublicClient, account: Address) {
removeLiquidity,
swap,
stake,
+ createStrategy,
};
}
diff --git a/hooks/usePosition.ts b/hooks/usePosition.ts
new file mode 100644
index 0000000..e69de29
diff --git a/hooks/useSystemFunctions.tsx b/hooks/useSystemFunctions.tsx
index 8d408c3..2e496e3 100644
--- a/hooks/useSystemFunctions.tsx
+++ b/hooks/useSystemFunctions.tsx
@@ -19,6 +19,7 @@ const useSystemFunctions = () => {
const smartAccountState = useAppSelector((state) => state.smartAccount);
const poolsState = useAppSelector((state) => state.pools);
const accountState = useAppSelector((state) => state.account);
+ const toast = useAppSelector((state) => state.toast);
return {
dispatch,
@@ -32,6 +33,7 @@ const useSystemFunctions = () => {
smartAccountState,
poolsState,
accountState,
+ toast,
};
};
diff --git a/hooks/useToken.ts b/hooks/useToken.ts
index 408f9dc..5f5efa4 100644
--- a/hooks/useToken.ts
+++ b/hooks/useToken.ts
@@ -1,10 +1,9 @@
import { useCallback, useEffect, useState } from 'react';
import { Address, formatUnits, PublicClient } from 'viem';
-import { CONNECTORS_BASE, LP_SUGAR_ADDRESS, OFFCHAIN_ORACLE_ADDRESS } from '@/constants/addresses';
+import { CONNECTORS_BASE, LP_SUGAR_ADDRESS, OFFCHAIN_ORACLE_ADDRESS, WETH_ADDRESS } from '@/constants/addresses';
import { useLpSugarContract, useOffchainOracleContract } from './useContract';
import { LPSugarToken, LPSugarTokenResponse, Token } from './types';
import useSystemFunctions from './useSystemFunctions';
-import { OffchainOracleABI } from '@/constants/abis';
export function useToken(publicClient: PublicClient) {
const { smartAccountState } = useSystemFunctions();
@@ -13,7 +12,7 @@ export function useToken(publicClient: PublicClient) {
const [tokens, setTokens] = useState([]);
const [tokenMap, setTokenMap] = useState
+
+
+
+
+
);
};
diff --git a/screens/liquidity-actions/add/pool-selector.tsx b/screens/liquidity-actions/add/pool-selector.tsx
new file mode 100644
index 0000000..e779323
--- /dev/null
+++ b/screens/liquidity-actions/add/pool-selector.tsx
@@ -0,0 +1,49 @@
+import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
+import { Pool } from '@/store/pools/types';
+import { LQDPoolPairPaper } from '@/components';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { memo } from 'react';
+
+const SelectPool = ({ pools }: { pools: Pool[] }) => {
+ return (
+
+ Select Pools
+
+
+ {pools.map((pool, index) => (
+ {}} key={index} style={styles.wrapper}>
+
+
+ ))}
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ alignSelf: 'stretch',
+ paddingTop: 20,
+ },
+
+ innerContainer: {
+ gap: 20,
+ },
+
+ wrapper: {
+ borderRadius: 8,
+ borderColor: '#EAEEF4',
+ borderWidth: 1,
+ padding: 16,
+ },
+
+ title: {
+ color: '#0F172A',
+ fontSize: adjustFontSizeForIOS(20, 3),
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ paddingBottom: 14,
+ },
+});
+
+export default memo(SelectPool);
diff --git a/screens/liquidity-actions/add/styles.ts b/screens/liquidity-actions/add/styles.ts
index 34f78f1..b075964 100644
--- a/screens/liquidity-actions/add/styles.ts
+++ b/screens/liquidity-actions/add/styles.ts
@@ -6,13 +6,13 @@ const styles = StyleSheet.create({
root: {
paddingHorizontal: 16,
paddingTop: 70,
- paddingBottom: 34,
backgroundColor: '#FFF',
},
contentStyle: {
- flex: 1,
+ flexGrow: 1,
justifyContent: 'space-between',
+ paddingBottom: 130,
},
container: {
@@ -58,8 +58,7 @@ const styles = StyleSheet.create({
bottomContainer: {
paddingHorizontal: 8,
- paddingVertical: 12,
- alignItems: 'stretch',
+ paddingTop: 50,
},
errorText: {
@@ -91,7 +90,7 @@ const coinSelectorInputStyles = StyleSheet.create({
lineHeight: 26.88,
letterSpacing: -0.6,
fontWeight: '500',
- maxWidth: '35%',
+ maxWidth: '40%',
fontFamily: 'AeonikMedium',
},
diff --git a/screens/liquidity-actions/add/types.ts b/screens/liquidity-actions/add/types.ts
index 55fcca8..a3c23cc 100644
--- a/screens/liquidity-actions/add/types.ts
+++ b/screens/liquidity-actions/add/types.ts
@@ -12,19 +12,19 @@ type Methods = {
};
interface ICoinSelectorInput {
- tokenId?: string;
- setTokenId: (tokenId: string) => void;
+ address?: string;
+ selectedToken: (address: string) => void;
value: string;
onChange: (value: string) => void;
disabled?: boolean;
}
type TokenValue = {
- asset?: IAsset;
+ asset?: TokenItem;
value: string;
};
-type ErrorState = undefined | 'primary' | 'secondary';
+type ErrorState = undefined | 'insufficientBalance' | 'insufficientLiquidBalance' | 'noMatchingPools';
interface IErrorMessage {
title: string;
@@ -36,8 +36,9 @@ interface IErrorMessage {
}
type ErrorsArray = {
- primary: IErrorMessage;
- secondary: IErrorMessage;
+ insufficientBalance: IErrorMessage;
+ insufficientLiquidBalance: IErrorMessage;
+ noMatchingPools: IErrorMessage;
};
type Info = {
@@ -54,3 +55,15 @@ interface ILoading {
primaryTitle: string;
secondaryTitle: string;
}
+
+type TokenItem = {
+ address: `0x${string}`;
+ symbol: string;
+ decimals: number;
+ balance: string;
+ isListed: boolean;
+ usdPrice: string;
+ logoUrl: string;
+ lastUpdated: string;
+ createdAt: string;
+};
diff --git a/screens/liquidity-actions/remove/index.tsx b/screens/liquidity-actions/remove/index.tsx
index 1c4364b..e372d0e 100644
--- a/screens/liquidity-actions/remove/index.tsx
+++ b/screens/liquidity-actions/remove/index.tsx
@@ -1,10 +1,12 @@
import { useEffect, useState } from 'react';
import { View, Text, ScrollView, Image } from 'react-native';
-import { LQDButton } from '@/components';
-import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { LQDButton, LQDPoolImages, LQDTokenImage } from '@/components';
+import { adjustFontSizeForIOS, formatSymbol } from '@/utils/helpers';
import { styles } from './styles';
import PercentageSetter from './percentage-setter';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import { TokenItem } from '@/store/account/types';
const ICON_PLACEHOLDER = 'https://res.cloudinary.com/dxnd4k222/image/upload/v1717871583/Avatar_1.0_npmw4c.png';
@@ -17,39 +19,66 @@ const dummy = {
};
const RemoveLiquidity = () => {
+ const { poolsState, accountState } = useSystemFunctions();
+
const [percentage, setPercentage] = useState(25);
+ const [tokenA, setTokenA] = useState();
+ const [tokenB, setTokenB] = useState();
+
+ const { selectedPool } = poolsState;
+ const { tokens } = accountState;
+
+ const tokenAIconUrl = selectedPool?.token0?.logoUrl;
+ const tokenBIconUrl = selectedPool?.token1?.logoUrl;
+ const symbol = formatSymbol(selectedPool?.symbol || '', true);
+
const onSubmit = () => {
console.log('Submitting liquidity request');
};
const depositions = [
{
- iconURL: dummy.primaryIconURL,
- title: dummy.primaryTitle,
- value: 3_600,
+ iconURL: tokenA?.logoUrl,
+ title: tokenA?.symbol,
+ value: 0,
},
{
- iconURL: dummy.secondaryIconURL,
- title: dummy.secondaryTitle,
- value: 1,
+ iconURL: tokenB?.logoUrl,
+ title: tokenB?.symbol,
+ value: 0,
},
];
const receive = [
{
- iconURL: dummy.primaryIconURL,
- title: dummy.primaryTitle,
- primaryValue: 600,
- secondaryValue: 601,
+ iconURL: tokenA?.logoUrl,
+ title: tokenA?.symbol,
+ nativeValue: 0,
+ usdValue: 0,
},
{
- iconURL: dummy.secondaryIconURL,
- title: dummy.secondaryTitle,
- primaryValue: 0.4,
- secondaryValue: 601,
+ iconURL: tokenB?.logoUrl,
+ title: tokenB?.symbol,
+ nativeValue: 0,
+ usdValue: 0,
},
];
+ useEffect(
+ function initializeTokenData() {
+ if (!tokens.data || !selectedPool) return;
+
+ const tokenAData = tokens.data.find((token) => token.address === selectedPool.token0.address);
+ const tokenBData = tokens.data.find((token) => token.address === selectedPool.token1.address);
+
+ if (!tokenAData || !tokenBData) return;
+
+ setTokenA({ ...tokenAData });
+ setTokenB({ ...tokenBData });
+ },
+ [tokens, selectedPool]
+ );
+
return (
@@ -59,17 +88,9 @@ const RemoveLiquidity = () => {
-
- {[dummy?.primaryIconURL, dummy?.secondaryIconURL]?.map((iconURL, index) => (
-
-
-
- ))}
-
+
-
- {dummy?.condition.charAt(0)}AMM - {dummy?.primaryTitle} / {dummy?.secondaryTitle}
-
+ {symbol}
@@ -79,9 +100,7 @@ const RemoveLiquidity = () => {
{depositions.map(({ iconURL, title, value }, index) => (
-
-
-
+
{title}
@@ -100,18 +119,16 @@ const RemoveLiquidity = () => {
You’ll receive at least:
- {receive.map(({ iconURL, primaryValue, secondaryValue, title }, index) => (
+ {receive.map(({ iconURL, nativeValue, usdValue, title }, index) => (
-
-
-
+
{title}
- {primaryValue.toLocaleString()} {title} ${secondaryValue.toLocaleString()}
+ {nativeValue.toLocaleString()} {title} ${usdValue.toLocaleString()}
))}
diff --git a/screens/liquidity-actions/remove/percentage-setter.tsx b/screens/liquidity-actions/remove/percentage-setter.tsx
index b6d381d..a74c236 100644
--- a/screens/liquidity-actions/remove/percentage-setter.tsx
+++ b/screens/liquidity-actions/remove/percentage-setter.tsx
@@ -2,8 +2,6 @@ import React, { useState, useEffect } from 'react';
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
import Slider from '@react-native-community/slider';
-import { adjustFontSizeForIOS } from '@/utils/helpers';
-
const PercentageSetter = ({ setPercentage }: IPercentageSetter) => {
const [percentage, setInternalPercentage] = useState(25);
@@ -33,6 +31,7 @@ const PercentageSetter = ({ setPercentage }: IPercentageSetter) => {
{percentage}%
+
void;
+ amount?: number;
}
diff --git a/screens/liquidity-management/index.tsx b/screens/liquidity-management/index.tsx
index f6e0c60..0a12a70 100644
--- a/screens/liquidity-management/index.tsx
+++ b/screens/liquidity-management/index.tsx
@@ -1,5 +1,6 @@
import { useEffect, useState } from 'react';
-import { View, Text, TextInput, TouchableOpacity, ScrollView, Image } from 'react-native';
+import { View, Text, TextInput, TouchableOpacity, ScrollView } from 'react-native';
+import FastImage from 'react-native-fast-image';
import { LQDButton } from '@/components';
import { removeCommasFromNumber } from '@/utils/helpers';
@@ -76,10 +77,10 @@ const LiquidityManagement = ({ id, type }: ILiquidityManagement) => {
useEffect(() => {
setPairDetails({
- primaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119033/is3tphz7tf06jpj5g7x3.png',
- primaryTitle: 'USDC',
- secondaryIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119032/uwficdtvggd49apjfpt4.png',
- secondaryTitle: 'ETH',
+ tokenAIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119033/is3tphz7tf06jpj5g7x3.png',
+ tokenATitle: 'USDC',
+ tokenBIconURL: 'https://res.cloudinary.com/dxnd4k222/image/upload/v1727119032/uwficdtvggd49apjfpt4.png',
+ tokenBTitle: 'ETH',
condition: 'stable',
});
}, [id]);
@@ -119,15 +120,19 @@ const LiquidityManagement = ({ id, type }: ILiquidityManagement) => {
- {[pairDetails?.primaryIconURL, pairDetails?.secondaryIconURL]?.map((iconURL, index) => (
+ {[pairDetails?.tokenAIconURL, pairDetails?.tokenBIconURL]?.map((iconURL, index) => (
-
+
))}
- {pairDetails?.condition.charAt(0)}AMM - {pairDetails?.primaryTitle} / {pairDetails?.secondaryTitle}
+ {pairDetails?.condition.charAt(0)}AMM - {pairDetails?.tokenATitle} / {pairDetails?.tokenBTitle}
diff --git a/screens/liquidity-management/types.ts b/screens/liquidity-management/types.ts
index 7474b5f..6bc0185 100644
--- a/screens/liquidity-management/types.ts
+++ b/screens/liquidity-management/types.ts
@@ -5,8 +5,8 @@ interface ILiquidityManagement {
interface IPairDetails {
condition: 'stable' | 'volatile';
- primaryIconURL: string;
- secondaryIconURL: string;
- primaryTitle: string;
- secondaryTitle: string;
+ tokenAIconURL: string;
+ tokenBIconURL: string;
+ tokenATitle: string;
+ tokenBTitle: string;
}
diff --git a/screens/pool-detail/balance.tsx b/screens/pool-detail/balance.tsx
index 19c7894..96c0bad 100644
--- a/screens/pool-detail/balance.tsx
+++ b/screens/pool-detail/balance.tsx
@@ -1,16 +1,17 @@
-import { View, StyleSheet, Text, Image } from 'react-native';
+import { View, StyleSheet, Text } from 'react-native';
+import FastImage from 'react-native-fast-image';
import { adjustFontSizeForIOS } from '@/utils/helpers';
-const Balance = ({ primaryBalance, primaryIconURL, primaryTitle, secondaryBalance, secondaryIconURL, secondaryTitle, aero }: IPool) => {
+const Balance = ({ tokenABalance, tokenAIconURL, tokenATitle, tokenBBalance, tokenBIconURL, tokenBTitle }: any) => {
const values = [
{
- iconURL: primaryIconURL,
- title: `${primaryBalance.toLocaleString()} ${primaryTitle}`,
+ iconURL: tokenAIconURL,
+ title: `${tokenABalance.toLocaleString()} ${tokenATitle}`,
},
{
- iconURL: secondaryIconURL,
- title: `${secondaryBalance.toLocaleString()} ${secondaryTitle}`,
+ iconURL: tokenBIconURL,
+ title: `${tokenBBalance.toLocaleString()} ${tokenBTitle}`,
},
];
@@ -22,7 +23,11 @@ const Balance = ({ primaryBalance, primaryIconURL, primaryTitle, secondaryBalanc
{values.map(({ iconURL, title }, index) => (
-
+
{title}
@@ -31,11 +36,6 @@ const Balance = ({ primaryBalance, primaryIconURL, primaryTitle, secondaryBalanc
),
},
-
- {
- title: 'Quantity',
- children: {aero.toLocaleString()} AERO-LP,
- },
];
return (
diff --git a/screens/pool-detail/chart/dummy.ts b/screens/pool-detail/chart/dummy.ts
index f2e983e..e1d077a 100644
--- a/screens/pool-detail/chart/dummy.ts
+++ b/screens/pool-detail/chart/dummy.ts
@@ -1,64 +1,41 @@
-const metrics: Array = ['tvl', 'volume', 'fees'];
-const periods: Array = [
- { text: 'past day', value: '1d' },
- { text: 'past week', value: '1w' },
- { text: 'past month', value: '1m' },
- { text: 'past year', value: '1y' },
-];
+import { Pool } from '@/store/pools/types';
-const generateData = (period: PeriodValue): Array => {
- const data: BarData[] = [];
- const today = new Date();
- let value = 1_200_000;
- let startTime: Date;
- let interval: number;
- let totalIntervals: number;
+type HistoricalData = 'm5' | 'h1' | 'h6' | 'h24';
- const varianceMap: Record = {
- '1d': 100_000,
- '1w': 200_000,
- '1m': 500_000,
- '1y': 1_000_000,
- };
+const generateData = (selectedPool?: Pool): Array => {
+ if (!selectedPool?.historicalVolumeUSD) return [];
- const variance = varianceMap[period];
+ const data: BarData[] = [];
+ const historicalData = selectedPool?.historicalVolumeUSD;
- switch (period) {
- case '1d':
- startTime = new Date(today.getTime() - 24 * 60 * 60 * 1000);
- interval = 60 * 60 * 1000;
- totalIntervals = 10;
- break;
- case '1w':
- startTime = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);
- interval = 24 * 60 * 60 * 1000;
- totalIntervals = 7;
- break;
- case '1m':
- startTime = new Date(today.getTime() - 30 * 24 * 60 * 60 * 1000);
- interval = 7 * 24 * 60 * 60 * 1000;
- totalIntervals = 5;
- break;
- case '1y':
- startTime = new Date(today.getTime() - 365 * 24 * 60 * 60 * 1000);
- interval = 30 * 24 * 60 * 60 * 1000;
- totalIntervals = 12;
- break;
- default:
- throw new Error("Invalid period. Choose from '1d', '1w', '1m', or '1y'");
- }
+ const now = new Date();
+
+ const intervals = {
+ m5: 5 * 60 * 1000, // 5 minutes
+ h1: 1 * 60 * 60 * 1000, // 1 hour
+ h6: 6 * 60 * 60 * 1000, // 6 hours
+ h24: 24 * 60 * 60 * 1000, // 24 hours
+ };
- for (let i = 0; i <= totalIntervals; i++) {
- const date = new Date(startTime.getTime() + i * interval);
- value += Math.random() * variance - variance / 2;
+ Object.keys(historicalData).forEach((key) => {
+ const value = historicalData[key as HistoricalData];
+ const date = new Date(now.getTime() - intervals[key as HistoricalData]);
+ let dateFormat = '';
- // Ensure value is never negative
- value = Math.max(value, 0);
+ if (key === 'm5') {
+ dateFormat = '5mins';
+ } else if (key === 'h1') {
+ dateFormat = '1hr';
+ } else if (key === 'h6') {
+ dateFormat = '6hrs';
+ } else if (key === 'h24') {
+ dateFormat = '24hrs';
+ }
- data.push({ date: date.toISOString(), value: Math.round(value) });
- }
+ data.push({ date: date.toISOString(), value: Math.round(value), type: key as HistoricalData, dateFormat });
+ });
return data;
};
-export { metrics, periods, generateData };
+export { generateData, HistoricalData };
diff --git a/screens/pool-detail/chart/index.tsx b/screens/pool-detail/chart/index.tsx
index 50cacd2..a5e445c 100644
--- a/screens/pool-detail/chart/index.tsx
+++ b/screens/pool-detail/chart/index.tsx
@@ -3,24 +3,21 @@ import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
import { adjustFontSizeForIOS, formatNumberWithSuffix } from '@/utils/helpers';
import { LQDBarChart } from '@/components';
-import { generateData, metrics, periods } from './dummy';
+import { generateData } from './dummy';
import { ArrowDownIcon } from '@/assets/icons';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
const adjustmentColors = ['#FF8896', '#88FF9C'];
const Chart = () => {
- const [metric, setMetric] = useState('tvl');
- const [period, setPeriod] = useState({
- text: 'past month',
- value: '1m',
- });
- const [data, setData] = useState(generateData(period.value));
+ const { poolsState } = useSystemFunctions();
+ const { selectedPool } = poolsState;
- const value = 13_400_000;
- const increased = false;
- const change = 4.45;
+ const [data, setData] = useState(generateData(selectedPool));
- useEffect(() => setData(generateData(period.value)), [period.value]);
+ const value = selectedPool?.tvl || 0;
+
+ useEffect(() => setData(generateData(selectedPool)), [selectedPool]);
return (
@@ -29,46 +26,15 @@ const Chart = () => {
${formatNumberWithSuffix(value)}
-
-
-
-
-
-
- {change.toFixed(2)}%
-
-
- {period.text}
-
-
-
- {metrics.map((m, index) => {
- const active = metric === m;
-
- return (
- setMetric(m)}>
-
- {m}
-
-
- );
- })}
+ TVL
-
+
- {periods.map(({ text, value }, index) => {
- const active = period.value === value;
-
- return (
- setPeriod({ text, value })}>
- {value}
-
- );
- })}
+ VOLUME
);
@@ -80,7 +46,7 @@ const styles = StyleSheet.create({
root: {
alignSelf: 'stretch',
alignItems: 'center',
- gap: 20,
+ gap: 16,
},
container: {
@@ -122,7 +88,6 @@ const styles = StyleSheet.create({
periodText: {
color: '#64748B',
- textTransform: 'capitalize',
},
metrics: {
diff --git a/screens/pool-detail/header.tsx b/screens/pool-detail/header.tsx
index 0253fbf..dea0ba6 100644
--- a/screens/pool-detail/header.tsx
+++ b/screens/pool-detail/header.tsx
@@ -1,12 +1,13 @@
-import { View, Text, StyleSheet, Image, TouchableOpacity } from 'react-native';
+import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
+import FastImage from 'react-native-fast-image';
import { adjustFontSizeForIOS } from '@/utils/helpers';
import { BoxSearchIcon, SendIcon } from '@/assets/icons';
-const Header = ({ condition, fee, primaryIconURL, symbol, secondaryIconURL }: PoolDetails) => {
+const Header = ({ condition, poolFee, tokenAIconURL, symbol, tokenBIconURL }: PoolDetails) => {
const flagColors = {
- stable: '#B47818',
- volatile: '#AF1D38',
+ stable: '#156146',
+ volatile: '#B47818',
};
const actions = [
@@ -24,9 +25,13 @@ const Header = ({ condition, fee, primaryIconURL, symbol, secondaryIconURL }: Po
- {[primaryIconURL, secondaryIconURL].map((iconURL, index) => (
+ {[tokenAIconURL, tokenBIconURL].map((iconURL, index) => (
-
+
))}
@@ -41,7 +46,7 @@ const Header = ({ condition, fee, primaryIconURL, symbol, secondaryIconURL }: Po
- {fee}% Fee
+ {poolFee}% Fee
@@ -156,4 +161,10 @@ const styles = StyleSheet.create({
justifyContent: 'center',
alignItems: 'center',
},
+
+ image: {
+ width: 34.9,
+ height: 34.9,
+ borderRadius: 34,
+ },
});
diff --git a/screens/pool-detail/index.tsx b/screens/pool-detail/index.tsx
index 7deba63..4c90966 100644
--- a/screens/pool-detail/index.tsx
+++ b/screens/pool-detail/index.tsx
@@ -6,7 +6,8 @@ import Balance from './balance';
import PoolLiquidity from './pool-liquidity';
import PoolStats from './stats';
import useSystemFunctions from '@/hooks/useSystemFunctions';
-import { Address } from 'viem';
+import { Address, formatEther } from 'viem';
+import { roundUp } from '@/utils/helpers';
const PoolDetail = ({ poolId }: PoolID) => {
const { poolsState, accountState } = useSystemFunctions();
@@ -16,33 +17,37 @@ const PoolDetail = ({ poolId }: PoolID) => {
const title = symbol?.split('/');
const getTokenBalance = (address?: Address) => {
- const balance = accountState.tokens.find((token) => token.address === address)?.balance || 0;
+ const balance = accountState.tokens?.data?.find((token) => token.address === address)?.balance || 0;
return Number(balance);
};
const getTokenUSDValue = (address?: Address) => {
- const token = accountState.tokens.find((token) => token.address === address);
+ const token = accountState.tokens?.data?.find((token) => token.address === address);
const balance = Number(token?.balance || 0) * Number(token?.usdPrice || 0);
return balance;
};
const POOL: PoolDetails = {
- primaryIconURL: pool?.token0.logoUrl || '',
- primaryBalance: getTokenBalance(pool?.token0.address),
- primaryUSDValue: getTokenUSDValue(pool?.token0.address),
- secondaryIconURL: pool?.token1.logoUrl || '',
- secondaryBalance: getTokenBalance(pool?.token1.address),
- secondaryUSDValue: getTokenUSDValue(pool?.token1.address),
+ tokenAIconURL: pool?.token0.logoUrl || '',
+ tokenABalance: getTokenBalance(pool?.token0.address),
+ tokenAUSDValue: getTokenUSDValue(pool?.token0.address),
+ tokenBIconURL: pool?.token1.logoUrl || '',
+ tokenBBalance: getTokenBalance(pool?.token1.address),
+ tokenBUSDValue: getTokenUSDValue(pool?.token1.address),
condition: pool?.isStable ? 'stable' : 'volatile',
- fee: pool?.fees.poolFee || 0,
- aero: 10,
- stakedAero: 300,
- availableAero: 4_090,
- primaryTitle: title ? title[0] : '',
- secondaryTitle: title ? title[1] : '',
+ fee: pool?.totalFeesUSD?.toFixed(2) || '0',
+ poolFee: roundUp(pool?.poolFee || 0),
+ tokenATitle: title ? title[0] : '',
+ tokenBTitle: title ? title[1] : '',
symbol: pool?.symbol.split('-')[1].replace('/', ' / ') || '',
- volume: Number(pool?.volume.usd || 0),
- tvl: Number(pool?.tvl || 0),
+ volume: pool?.totalVolumeUSD || 0,
+ tvl: pool?.tvl || 0,
+ tx: pool?.txCount || 0,
+ reserveA: pool?.token0.reserve || 0,
+ reserveB: pool?.token1.reserve || 0,
+ reserveAUSD: pool?.token0.reserveUSD || 0,
+ reserveBUSD: pool?.token1.reserveUSD || 0,
+ poolAddress: pool?.address!,
};
if (!pool) return null;
@@ -62,7 +67,7 @@ const PoolDetail = ({ poolId }: PoolID) => {
-
+
);
diff --git a/screens/pool-detail/pool-liquidity.tsx b/screens/pool-detail/pool-liquidity.tsx
index 8c9099a..aee43f5 100644
--- a/screens/pool-detail/pool-liquidity.tsx
+++ b/screens/pool-detail/pool-liquidity.tsx
@@ -1,66 +1,67 @@
import React, { useEffect, useState } from 'react';
-import { View, Text, StyleSheet, Image } from 'react-native';
+import { View, Text, StyleSheet } from 'react-native';
+import FastImage from 'react-native-fast-image';
import Animated, { useAnimatedStyle, withTiming } from 'react-native-reanimated';
import ImageColors from 'react-native-image-colors';
-import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { adjustFontSizeForIOS, formatNumberWithSuffix } from '@/utils/helpers';
const PoolLiquidity = ({
- primaryIconURL,
- primaryBalance,
- primaryTitle,
- primaryUSDValue,
- secondaryBalance,
- secondaryIconURL,
- secondaryTitle,
- secondaryUSDValue,
+ tokenAIconURL,
+ reserveA,
+ tokenATitle,
+ reserveAUSD,
+ reserveB,
+ tokenBIconURL,
+ tokenBTitle,
+ reserveBUSD,
}: PoolDetails) => {
- const [primaryColor, setPrimaryColor] = useState('#375DFB');
- const [secondaryColor, setSecondaryColor] = useState('#F2AE40');
- const [primaryProgress, setPrimaryProgress] = useState(0.5);
+ const [tokenAColor, settokenAColor] = useState('#375DFB');
+ const [tokenBColor, settokenBColor] = useState('#F2AE40');
+ const [tokenAProgress, settokenAProgress] = useState(0.5);
const values = [
{
- iconURL: primaryIconURL,
- primaryText: `${primaryBalance.toLocaleString()}`,
- title: primaryTitle,
- secondaryText: `${primaryUSDValue.toLocaleString()}`,
+ iconURL: tokenAIconURL,
+ tokenBalance: `${formatNumberWithSuffix(reserveA)}`,
+ title: tokenATitle,
+ tokenUSDValue: `${formatNumberWithSuffix(reserveAUSD)}`,
},
{
- iconURL: secondaryIconURL,
- primaryText: `${secondaryBalance.toLocaleString()}`,
- title: secondaryTitle,
- secondaryText: `${secondaryUSDValue.toLocaleString()}`,
+ iconURL: tokenBIconURL,
+ tokenBalance: `${formatNumberWithSuffix(reserveB)}`,
+ title: tokenBTitle,
+ tokenUSDValue: `${formatNumberWithSuffix(reserveBUSD)}`,
},
];
const progressStyle = useAnimatedStyle(() => {
return {
- width: withTiming(`${primaryProgress * 100}%`, { duration: 500 }),
+ width: withTiming(`${tokenAProgress * 100}%`, { duration: 500 }),
};
});
useEffect(() => {
const extractColors = async () => {
- const primaryColors = await ImageColors.getColors(primaryIconURL, {
+ const tokenAColors = await ImageColors.getColors(tokenAIconURL, {
fallback: '#375DFB',
});
- const secondaryColors = await ImageColors.getColors(secondaryIconURL, {
+ const tokenBColors = await ImageColors.getColors(tokenBIconURL, {
fallback: '#F2AE40',
});
- if (primaryColors.platform === 'android') setPrimaryColor(primaryColors.vibrant || '#375DFB');
- if (primaryColors.platform === 'ios') setPrimaryColor(primaryColors.background || '#375DFB');
+ if (tokenAColors.platform === 'android') settokenAColor(tokenAColors.vibrant || '#375DFB');
+ if (tokenAColors.platform === 'ios') settokenAColor(tokenAColors.background || '#375DFB');
- if (secondaryColors.platform === 'android') setSecondaryColor(secondaryColors.vibrant || '#F2AE40');
- if (secondaryColors.platform === 'ios') setSecondaryColor(secondaryColors.background || '#F2AE40');
+ if (tokenBColors.platform === 'android') settokenBColor(tokenBColors.vibrant || '#F2AE40');
+ if (tokenBColors.platform === 'ios') settokenBColor(tokenBColors.background || '#F2AE40');
};
extractColors();
- const totalBalance = primaryBalance + secondaryBalance;
- setPrimaryProgress(primaryBalance / totalBalance);
- }, [primaryIconURL, secondaryIconURL, primaryBalance, secondaryBalance]);
+ const totalBalance = reserveAUSD! + reserveBUSD!;
+ settokenAProgress(reserveAUSD! / totalBalance);
+ }, [tokenAIconURL, tokenBIconURL, reserveA, reserveB]);
return (
@@ -68,25 +69,35 @@ const PoolLiquidity = ({
- {values.map(({ iconURL, primaryText, secondaryText, title }, index) => (
+ {values.map(({ iconURL, tokenBalance, tokenUSDValue, title }, index) => (
-
+
-
-
- {primaryText}
- {title}
-
- {`($${secondaryText})`}
+
+
+
+ {tokenBalance}
+ {title}
+
+
+
+ {`$${tokenUSDValue}`}
))}
-
-
+
+
@@ -123,7 +134,11 @@ const styles = StyleSheet.create({
value: {
flexDirection: 'row',
- alignItems: 'center',
+ gap: 6,
+ },
+
+ innerValue: {
+ alignItems: 'flex-start',
gap: 4,
},
@@ -135,6 +150,7 @@ const styles = StyleSheet.create({
borderRadius: 9999,
borderWidth: 0.75,
borderColor: '#EAEEF4',
+ paddingTop: 5,
},
textContainer: {
@@ -143,9 +159,9 @@ const styles = StyleSheet.create({
gap: 8,
},
- primaryText: {
+ tokenAText: {
color: '#0A0D14',
- fontSize: adjustFontSizeForIOS(16, 2),
+ fontSize: adjustFontSizeForIOS(14, 2),
lineHeight: 19.84,
fontWeight: '500',
fontFamily: 'AeonikMedium',
@@ -156,9 +172,9 @@ const styles = StyleSheet.create({
color: '#868C98',
},
- secondaryText: {
+ tokenBText: {
color: '#525866',
- fontSize: adjustFontSizeForIOS(14, 2),
+ fontSize: adjustFontSizeForIOS(10, 2),
lineHeight: 18.48,
textAlign: 'center',
},
diff --git a/screens/pool-detail/stats.tsx b/screens/pool-detail/stats.tsx
index 27bd984..23d8353 100644
--- a/screens/pool-detail/stats.tsx
+++ b/screens/pool-detail/stats.tsx
@@ -3,10 +3,10 @@ import { View, Text, StyleSheet } from 'react-native';
import { adjustFontSizeForIOS, formatNumberWithSuffix } from '@/utils/helpers';
import { Chart2AltIcon, CoinsLGIcon, MoneyTickIcon, SwapHorizontalIcon } from '@/assets/icons';
-const PoolStats = ({ volume, fee, tvl }: Stat) => {
+const PoolStats = ({ volume, fee, tvl, tx }: Stat) => {
const stats = [
{
- title: 'Volume',
+ title: 'Volume (24hrs)',
value: `$${formatNumberWithSuffix(volume)}`,
icon: ,
},
@@ -17,12 +17,12 @@ const PoolStats = ({ volume, fee, tvl }: Stat) => {
},
{
title: 'Fees',
- value: `$${formatNumberWithSuffix(fee)}`,
+ value: `$${formatNumberWithSuffix(Number(fee))}`,
icon: ,
},
{
title: 'Transactions',
- value: `${(194).toLocaleString()} TX`,
+ value: `${tx.toLocaleString()} TX`,
icon: ,
},
];
@@ -36,7 +36,7 @@ const PoolStats = ({ volume, fee, tvl }: Stat) => {
{icon}
- {title} (24hrs)
+ {title}
{value}
diff --git a/screens/pool-detail/types.ts b/screens/pool-detail/types.ts
index 7b9a6a9..dcbc293 100644
--- a/screens/pool-detail/types.ts
+++ b/screens/pool-detail/types.ts
@@ -3,28 +3,33 @@ interface PoolID {
}
interface PoolDetails {
- primaryIconURL: string;
- secondaryIconURL: string;
- primaryTitle: string;
- secondaryTitle: string;
- primaryBalance: number;
- secondaryBalance: number;
- primaryUSDValue: number;
- secondaryUSDValue: number;
+ tokenAIconURL: string;
+ tokenBIconURL: string;
+ tokenATitle: string;
+ tokenBTitle: string;
+ tokenABalance: number;
+ tokenBBalance: number;
+ tokenAUSDValue: number;
+ tokenBUSDValue: number;
condition: 'stable' | 'volatile';
- fee: number;
- aero: number;
- stakedAero: number;
- availableAero: number;
+ fee: number | string;
symbol: string;
volume: number;
tvl: number;
+ tx: number;
+ reserveA: number;
+ reserveB: number;
+ reserveAUSD: number;
+ reserveBUSD: number;
+ poolFee: number | string;
+ poolAddress: `0x${string}`;
}
interface Stat {
- fee: number;
+ fee: number | string;
volume: number;
tvl: number;
+ tx: number;
}
type Metric = 'tvl' | 'volume' | 'fees';
diff --git a/screens/portfolio/asset-item.tsx b/screens/portfolio/asset-item.tsx
new file mode 100644
index 0000000..24ff438
--- /dev/null
+++ b/screens/portfolio/asset-item.tsx
@@ -0,0 +1,63 @@
+import { StyleSheet, Text, View } from 'react-native';
+import React from 'react';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { LQDImage } from '@/components';
+
+const AssetItem = ({ title, subTitle, icon }: IAssetItem) => {
+ return (
+
+
+
+
+ {title}
+ {subTitle}
+
+
+
+ );
+};
+
+export default AssetItem;
+
+const styles = StyleSheet.create({
+ detailContainer: {
+ justifyContent: 'center',
+ gap: 4,
+ },
+
+ title: {
+ color: '#1E293B',
+ fontSize: adjustFontSizeForIOS(14, 2),
+
+ fontFamily: 'AeonikMedium',
+ },
+
+ details: {
+ flexDirection: 'row',
+ alignSelf: 'stretch',
+ alignItems: 'center',
+ gap: 4,
+ },
+
+ subTitle: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(11, 2),
+ lineHeight: 13.64,
+ fontFamily: 'AeonikRegular',
+ },
+
+ container: {
+ paddingVertical: 2,
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ },
+
+ leftContainer: {
+ flexDirection: 'row',
+ alignSelf: 'stretch',
+ alignItems: 'center',
+ gap: 10,
+ maxWidth: '70%',
+ },
+});
diff --git a/screens/portfolio/index.tsx b/screens/portfolio/index.tsx
new file mode 100644
index 0000000..1b4f080
--- /dev/null
+++ b/screens/portfolio/index.tsx
@@ -0,0 +1,194 @@
+import { StyleSheet, Text, View } from 'react-native';
+import React, { useState } from 'react';
+import { LQDActionCard, LQDBottomSheet, LQDButton, LQDFlatlist, LQDScrollView, LQDSlider, LQDStrategyCard } from '@/components';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { addMoney, strategyies } from '../discover/dummy';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import AssetItem from './asset-item';
+
+const Portfolio = () => {
+ const [showModal, setShowModal] = useState(false);
+ const [selectedAction, setSelectedAction] = useState('');
+ const { router, dispatch } = useSystemFunctions();
+
+ const openModal = () => {
+ setShowModal((prev) => !prev);
+ setSelectedAction('');
+ };
+
+ const navigateToWithdrawal = () => {
+ router.push('/withdraw/withdraw');
+ };
+
+ const handleSelectAction = () => {
+ openModal();
+
+ setTimeout(() => {
+ if (selectedAction === '1') {
+ router.push('/deposit/crypto');
+ }
+
+ if (selectedAction === '2') {
+ router.push('/deposit/debit');
+ }
+
+ if (selectedAction === '3') {
+ // handle coinbase
+ }
+ }, 200);
+ };
+
+ return (
+ <>
+
+
+ Portfolio
+ $144,600
+
+
+
+
+
+
+
+
+ {}} style={styles.container}>
+
+
+
+ All Asset
+
+ {[
+ {
+ title: 'USD Coin',
+ icon: '',
+ subTitle: '0 ETH',
+ },
+ {
+ title: 'Ethereum',
+ icon: '',
+ subTitle: '0 ETH',
+ },
+ ].map((asset, index) => (
+
+ ))}
+
+
+
+
+ Positions
+
+ {strategyies.slice(0, 3).map((strategy, index) => (
+
+ ))}
+ {!strategyies.length && You have no open positions}
+
+
+
+
+
+ {addMoney.map((action, index) => (
+ !action.comingSoon && setSelectedAction(action.id)}
+ />
+ ))}
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export default Portfolio;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: '#FFF',
+ paddingTop: 10,
+ },
+ title: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(13, 1),
+ lineHeight: 16.12,
+ fontWeight: '400',
+ fontFamily: 'AeonikMedium',
+ marginVertical: 15,
+ },
+ position: {
+ color: '#0F172A',
+ fontSize: adjustFontSizeForIOS(14, 1),
+ lineHeight: 18.48,
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+ subTitle: {
+ color: '#1E293B',
+ fontSize: adjustFontSizeForIOS(36, 1),
+ lineHeight: 40.32,
+ fontWeight: '700',
+ fontFamily: 'QuantaGroteskProBold',
+ },
+ noPosition: {
+ color: '#1E293B',
+ fontSize: adjustFontSizeForIOS(11, 1),
+ lineHeight: 13.64,
+ fontWeight: '400',
+ fontFamily: 'AeonikMedium',
+ textAlign: 'center',
+ marginVertical: 30,
+ },
+ strategyContainerStyle: { gap: 20, marginTop: 15 },
+ modalContainerStyle: { gap: 20, paddingBottom: 50 },
+ bottomWrapper: { marginTop: 10, marginBottom: 30, marginHorizontal: 10 },
+ dotsWrapper: {
+ flexDirection: 'row',
+ alignSelf: 'center',
+ backgroundColor: 'green',
+ },
+ indicatorDot: {
+ width: 8,
+ height: 8,
+ borderRadius: 8 / 2,
+ borderColor: 'green',
+ borderWidth: 1,
+ marginRight: 8,
+ },
+ btnWrapper: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ marginTop: 24,
+ },
+ topWrapper: { paddingHorizontal: 16, backgroundColor: '#fff', paddingBottom: 15 },
+ allAsset: { paddingHorizontal: 16, marginBottom: 20 },
+ allPositions: { paddingHorizontal: 16, paddingBottom: 60 },
+});
diff --git a/screens/portfolio/types.ts b/screens/portfolio/types.ts
new file mode 100644
index 0000000..a4c8065
--- /dev/null
+++ b/screens/portfolio/types.ts
@@ -0,0 +1,12 @@
+interface IAssetItem {
+ title: string;
+ subTitle: string;
+ icon: string;
+}
+
+interface AddMoneyActionItem {
+ title: string;
+ id: string;
+ comingSoon: boolean;
+ icon: 'debitCard' | 'crypto' | 'coinBase' | 'supply';
+}
diff --git a/screens/profile/dummy.ts b/screens/profile/dummy.ts
new file mode 100644
index 0000000..095442d
--- /dev/null
+++ b/screens/profile/dummy.ts
@@ -0,0 +1,92 @@
+const image = 'https://pics.craiyon.com/2023-08-02/7a951cac85bd4aa2b0e70dbaabb8404e.webp';
+export const feeds: Array = [
+ {
+ photo: image,
+ username: '@Nurayyy.eth',
+ address: '0xc61...87f7a',
+ date: '2h',
+ percentage: '65.45',
+ estimate: 'Est. APY',
+ title: 'Moonwell - USDC',
+ commentCount: 26,
+ shareCount: 26,
+ likeCount: 26,
+ description: 'This strategy starts as an ease in for first and second quaterss of 2025',
+ steps: [
+ {
+ variant: 'supply',
+ tokenA: 'cbBTC',
+ tokenB: 'moonWell',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+
+ {
+ variant: 'deposit',
+ tokenA: 'Borrowed USDC',
+ tokenB: 'Morpho',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+ {
+ variant: 'borrow',
+ tokenA: 'USDC',
+ tokenB: 'Base',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+ {
+ isLast: true,
+ variant: 'stake',
+ tokenA: 'DAI',
+ tokenB: 'USDC',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+ ],
+ },
+ {
+ photo: image,
+ username: '@Gabby.eth',
+ address: '0xc61...87f7a',
+ date: '2h',
+ percentage: '65.45',
+ estimate: 'Est. APY',
+ title: 'Moonwell - USDC',
+ commentCount: 26,
+ shareCount: 26,
+ likeCount: 26,
+ description: 'This strategy starts as an ease in for first and second quaterss of 2025',
+ steps: [
+ {
+ variant: 'deposit',
+ tokenA: 'Borrowed USDC',
+ tokenB: 'Morpho',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+ {
+ variant: 'supply',
+ tokenA: 'cbBTC',
+ tokenB: 'moonWell',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+ {
+ variant: 'borrow',
+ tokenA: 'USDC',
+ tokenB: 'Base',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+ {
+ isLast: true,
+ variant: 'stake',
+ tokenA: 'DAI',
+ tokenB: 'USDC',
+ tokenAIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenAIcon_jgy241.png',
+ tokenBIconURL: 'https://res.cloudinary.com/djzeufu4j/image/upload/v1732105634/tokenBIcon_wscb3p.png',
+ },
+ ],
+ },
+];
diff --git a/screens/profile/edit-profile.tsx/index.tsx b/screens/profile/edit-profile.tsx/index.tsx
new file mode 100644
index 0000000..04dac7a
--- /dev/null
+++ b/screens/profile/edit-profile.tsx/index.tsx
@@ -0,0 +1,192 @@
+import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native';
+import React, { useState } from 'react';
+import { LQDButton, LQDImage } from '@/components';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { FamcasterIcon, XIcon } from '@/assets/icons';
+
+const EditProfile = () => {
+ const [username, setUsername] = useState('');
+
+ const handleTagChange = (value: string) => {
+ setUsername(value);
+ };
+
+ return (
+
+
+
+ Upload photo
+ Remove photo
+
+
+
+
+ Username
+
+
+
+
+ X account
+ Verify your X account to display it on your profile and kep it real
+
+
+
+
+
+ @Jeffing.eth
+
+
+ Disconnect
+
+
+
+
+ Farcaster
+ Verify your Farcaster account to display it on your profile and kep it real
+
+
+
+
+
+ @Jeffing.eth
+
+
+ Connect
+
+
+
+
+
+
+
+ Cancel
+
+
+
+
+ );
+};
+
+export default EditProfile;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: '#fff',
+ },
+ topWrapper: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ marginTop: 40,
+ },
+ bottomWrapper: {
+ marginTop: 24,
+ },
+ title: {
+ fontSize: adjustFontSizeForIOS(12, 1),
+ fontFamily: 'ClashDisplayMedium',
+ fontWeight: '500',
+ color: '#4691FE',
+ lineHeight: 19.2,
+ marginTop: 6,
+ marginBottom: 3,
+ },
+ subTitle: {
+ fontSize: adjustFontSizeForIOS(12, 1),
+ fontFamily: 'ClashDisplayMedium',
+ fontWeight: '500',
+ color: '#AF1D38',
+ lineHeight: 16.2,
+ },
+ accountTitle: {
+ fontSize: adjustFontSizeForIOS(14, 1),
+ fontFamily: 'Aeonik',
+ fontWeight: '500',
+ color: '#1E293B',
+ lineHeight: 15.2,
+ marginTop: 6,
+ marginBottom: 3,
+ },
+ accountSubTitle: {
+ fontSize: adjustFontSizeForIOS(12, 1),
+ fontFamily: 'Aeonik',
+ fontWeight: '400',
+ color: '#64748B',
+ lineHeight: 19.2,
+ },
+ lable: {
+ fontSize: adjustFontSizeForIOS(13, 1),
+ fontFamily: 'Aeonik',
+ fontWeight: '500',
+ color: '#1E293B',
+ lineHeight: 19.2,
+ marginBottom: 5,
+ },
+ username: {
+ fontSize: adjustFontSizeForIOS(14, 1),
+ fontFamily: 'Aeonik',
+ fontWeight: '500',
+ color: '#1E293B',
+ lineHeight: 19.2,
+ },
+ disconnet: {
+ fontSize: adjustFontSizeForIOS(14, 1),
+ fontFamily: 'Aeonik',
+ fontWeight: '500',
+ color: '#475569',
+ lineHeight: 19.2,
+ },
+ inputWrapper: {
+ borderBottomWidth: 1,
+ paddingBottom: 24,
+ borderColor: '#F1F5F9',
+ marginTop: 20,
+ },
+ input: {
+ alignSelf: 'stretch',
+ padding: 12,
+ backgroundColor: '#FFF',
+ borderRadius: 16,
+ borderColor: '#EAEEF4',
+ color: '#020617',
+ fontSize: adjustFontSizeForIOS(14, 2),
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ borderWidth: 1,
+ },
+ actionBtn: {
+ flexDirection: 'row',
+ gap: 7,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ paddingHorizontal: 11,
+ paddingVertical: 7,
+ borderRadius: 10,
+ alignItems: 'center',
+ },
+ btnWrapper: { flexDirection: 'row', justifyContent: 'space-between', marginTop: 20, paddingHorizontal: 15 },
+ xIconFlex: { flexDirection: 'row', alignItems: 'center', gap: 10 },
+ cancel: {
+ fontSize: adjustFontSizeForIOS(16, 2),
+ lineHeight: 16,
+ color: '#64748B',
+ fontFamily: 'QuantaGroteskProSemiBold',
+ fontWeight: '600',
+ alignSelf: 'center',
+ marginTop: 20,
+ },
+ btnBottomWrapper: {
+ marginTop: 40,
+ },
+});
diff --git a/screens/profile/index.tsx b/screens/profile/index.tsx
new file mode 100644
index 0000000..aaaeb22
--- /dev/null
+++ b/screens/profile/index.tsx
@@ -0,0 +1,115 @@
+import React, { useState } from 'react';
+import { Pressable, StyleSheet, Text, View } from 'react-native';
+import { SceneMap } from 'react-native-tab-view';
+import { LQDImage } from '@/components';
+import { CopyIcon, FamcasterIcon, FillCheckIcon, LinkIcon, UserOctagonIcon, XIcon } from '@/assets/icons';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import useCustomTabView from '@/hooks/useCustomTabview';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import UserStrategies from './user-strategies';
+import UserLikedStrategies from './user-liked-strategies';
+import UserRepostStrategies from './user-repost-strategies';
+
+const Profile = () => {
+ const { CustomTabView } = useCustomTabView();
+ const { router } = useSystemFunctions();
+ const [copyProfileLink, setCopyProfileLink] = useState(false);
+
+ const handleCopyPL = () => {
+ setCopyProfileLink((prev) => !prev);
+
+ setTimeout(() => {
+ setCopyProfileLink(false);
+ }, 3000);
+ };
+
+ const renderScene = SceneMap({
+ strategy: UserStrategies,
+ deposit: UserRepostStrategies,
+ like: UserLikedStrategies,
+ });
+
+ const [routes] = React.useState([
+ { key: 'strategy', title: 'My Strategies' },
+ { key: 'deposit', title: 'Deposits' },
+ { key: 'like', title: 'Likes' },
+ ]);
+
+ return (
+
+
+ router.push(`/(tabs)/profile/edit-profile`)} edit height={56} width={56} />
+ @jeffing.eth
+
+ 0xc57...13d4f
+
+
+
+
+
+ Joined NOV 2024
+
+
+
+
+
+
+
+
+ {copyProfileLink ? : }
+
+
+
+
+
+
+ );
+};
+
+export default Profile;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: '#FFF',
+ },
+ topWrapper: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ marginTop: 40,
+ },
+ actionBtn: {
+ flexDirection: 'row',
+ gap: 7,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ paddingHorizontal: 11,
+ paddingVertical: 7,
+ borderRadius: 10,
+ alignItems: 'center',
+ },
+ actionBtnWrapper: { flexDirection: 'row', alignItems: 'center', gap: 9, marginTop: 15, marginBottom: 20 },
+ addressWrapper: { flexDirection: 'row', gap: 7 },
+ username: {
+ fontSize: adjustFontSizeForIOS(16, 1),
+ fontFamily: 'ClashDisplayBold',
+ fontWeight: '500',
+ color: '#1E293B',
+ lineHeight: 19.2,
+ marginTop: 6,
+ marginBottom: 5,
+ },
+ address: {
+ fontSize: adjustFontSizeForIOS(13, 2),
+ fontFamily: 'Aeonik',
+ fontWeight: '400',
+ color: '#64748B',
+ lineHeight: 16.12,
+ },
+ joinDate: {
+ fontSize: adjustFontSizeForIOS(14, 2),
+ fontFamily: 'Aeonik',
+ fontWeight: '500',
+ color: '#1E293B',
+ },
+});
diff --git a/screens/profile/user-liked-strategies.tsx b/screens/profile/user-liked-strategies.tsx
new file mode 100644
index 0000000..56ccb19
--- /dev/null
+++ b/screens/profile/user-liked-strategies.tsx
@@ -0,0 +1,40 @@
+import { FlatList } from 'react-native';
+import { useUserLikes } from '@/services/user/queries';
+import { LQDFeedCard } from '@/components';
+import DefaultFooterLoader from '@/components/flatlist/footer-loader';
+import Loader from '../home/loader';
+
+const UserLikedStrategies = () => {
+ const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, isFetching, isError, error, refetch } = useUserLikes(
+ '0x1234567890123456789012345678901234567890'
+ );
+
+ const feeds = data?.pages.flatMap((page) => page.data) || [];
+
+ const loadMoreStrategies = () => {
+ if (hasNextPage && !isFetchingNextPage) {
+ fetchNextPage();
+ }
+ };
+
+ if (isLoading) {
+ return ;
+ }
+
+ return (
+ }
+ keyExtractor={(_, index) => index.toString()}
+ showsHorizontalScrollIndicator={false}
+ style={{ backgroundColor: '#fff' }}
+ onRefresh={refetch}
+ onEndReached={loadMoreStrategies}
+ ListFooterComponent={isFetchingNextPage ? : null}
+ />
+ );
+};
+
+export default UserLikedStrategies;
diff --git a/screens/profile/user-repost-strategies.tsx b/screens/profile/user-repost-strategies.tsx
new file mode 100644
index 0000000..59fc545
--- /dev/null
+++ b/screens/profile/user-repost-strategies.tsx
@@ -0,0 +1,39 @@
+import { FlatList } from 'react-native';
+import { useUserLikes } from '@/services/user/queries';
+import { LQDFeedCard } from '@/components';
+import DefaultFooterLoader from '@/components/flatlist/footer-loader';
+import Loader from '../home/loader';
+
+const UserRepostStrategies = () => {
+ const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, isFetching, isError, error, refetch } = useUserLikes(
+ '0x1234567890123456789012345678901234567890'
+ );
+
+ const feeds = data?.pages.flatMap((page) => page.data) || [];
+
+ const loadMoreStrategies = () => {
+ if (hasNextPage && !isFetchingNextPage) {
+ fetchNextPage();
+ }
+ };
+
+ if (isLoading) {
+ return ;
+ }
+
+ return (
+ }
+ keyExtractor={(_, index) => index.toString()}
+ style={{ backgroundColor: '#fff' }}
+ onRefresh={refetch}
+ onEndReached={loadMoreStrategies}
+ ListFooterComponent={isFetchingNextPage ? : null}
+ />
+ );
+};
+
+export default UserRepostStrategies;
diff --git a/screens/profile/user-strategies.tsx b/screens/profile/user-strategies.tsx
new file mode 100644
index 0000000..c9062e7
--- /dev/null
+++ b/screens/profile/user-strategies.tsx
@@ -0,0 +1,40 @@
+import { FlatList } from 'react-native';
+import { useUserStrategies } from '@/services/user/queries';
+import { LQDFeedCard } from '@/components';
+import DefaultFooterLoader from '@/components/flatlist/footer-loader';
+import Loader from '../home/loader';
+
+const UserStrategies = () => {
+ const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, isFetching, isError, error, refetch } = useUserStrategies(
+ '0x1234567890123456789012345678901234567890'
+ );
+
+ const feeds = data?.pages.flatMap((page) => page.data) || [];
+
+ const loadMoreStrategies = () => {
+ if (hasNextPage && !isFetchingNextPage) {
+ fetchNextPage();
+ }
+ };
+
+ if (isLoading) {
+ return ;
+ }
+
+ return (
+ }
+ keyExtractor={(_, index) => index.toString()}
+ showsHorizontalScrollIndicator={false}
+ style={{ backgroundColor: '#fff' }}
+ onRefresh={refetch}
+ onEndReached={loadMoreStrategies}
+ ListFooterComponent={isFetchingNextPage ? : null}
+ />
+ );
+};
+
+export default UserStrategies;
diff --git a/screens/settings/index.tsx b/screens/settings/index.tsx
new file mode 100644
index 0000000..e75b9b4
--- /dev/null
+++ b/screens/settings/index.tsx
@@ -0,0 +1,156 @@
+import { useEffect, useState } from 'react';
+import { Alert, StyleSheet, Text, TouchableOpacity, View, Linking } from 'react-native';
+
+import { CaretRightIcon, DiscordIcon, LegalIcon, SignoutIcon, SupportIcon, XIcon } from '@/assets/icons';
+import { isDev } from '@/constants/env';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import { useAuth } from '@/providers';
+import { useSmartAccountActions } from '@/store/smartAccount/actions';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+
+const Settings = () => {
+ const { router } = useSystemFunctions();
+ const { logout } = useSmartAccountActions();
+ const { session } = useAuth();
+
+ const handleSignOut = () => {
+ Alert.alert('Sign out', 'Are you sure you want to sign out?', [
+ { text: 'Cancel', style: 'cancel' },
+ {
+ text: 'Sign out',
+ style: 'destructive',
+ onPress: logout,
+ },
+ ]);
+ };
+
+ const handleSmartAccountSign = async () => {
+ if (!session) {
+ throw new Error('No smart account found');
+ }
+
+ try {
+ const messageToSign = {
+ message: 'Hello, world!',
+ timestamp: Date.now(),
+ };
+
+ const signature = await session.signMessage({ message: JSON.stringify(messageToSign) });
+
+ Alert.alert('Signing Successful', 'Signature: ' + signature);
+ } catch (error: any) {
+ Alert.alert('Signing Failed', error.message + '\n' + error.cause);
+ }
+ };
+
+ const [actions, setActions] = useState([
+ {
+ title: 'Legal & Privacy',
+ icon: ,
+ onClick: () => router.push('/(settings)/legal-privacy'),
+ isNavigable: true,
+ },
+ {
+ title: 'Support',
+ icon: ,
+ onClick: () => router.push('/(settings)/support'),
+ isNavigable: true,
+ },
+ {
+ title: 'Sign Out',
+ icon: ,
+ onClick: handleSignOut,
+ isNavigable: false,
+ },
+ ]);
+
+ const handleURLPress = async (url: string) => {
+ const supported = await Linking.canOpenURL(url);
+
+ if (supported) {
+ await Linking.openURL(url);
+ } else {
+ Alert.alert('Error', 'Unable to open the Twitter page.');
+ }
+ };
+
+ useEffect(function addSignDebugOptionOnDev() {
+ if (isDev && actions.length < 4) {
+ setActions([
+ ...actions,
+ {
+ title: 'Sign Message',
+ icon: ,
+ onClick: handleSmartAccountSign,
+ isNavigable: false,
+ },
+ ]);
+ }
+ }, []);
+
+ return (
+
+
+ {actions.map((action, index) => (
+
+
+ {action.icon}
+ {action.title}
+
+
+ {action.isNavigable && }
+
+ ))}
+
+
+
+ handleURLPress('https://x.com/getliquidapp')}>
+
+
+
+ handleURLPress('https://discord.gg/getliquid')}>
+
+
+
+
+ );
+};
+
+export default Settings;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ justifyContent: 'space-between',
+ backgroundColor: '#fff',
+ padding: 20,
+ },
+ listWrapper: {
+ marginTop: 60,
+ gap: 42,
+ },
+ listInnerWrapper: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ },
+ titleWrapper: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 10,
+ },
+ title: {
+ fontSize: adjustFontSizeForIOS(14, 2),
+ color: '#1E293B',
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+
+ socialsWrapper: {
+ flexDirection: 'row',
+ gap: 16,
+ alignItems: 'center',
+ justifyContent: 'center',
+ paddingBottom: 50,
+ },
+});
diff --git a/screens/setup/index.tsx b/screens/setup/index.tsx
index 51cae84..7bcdb67 100644
--- a/screens/setup/index.tsx
+++ b/screens/setup/index.tsx
@@ -94,7 +94,7 @@ const Setup = () => {
return (
-
+
diff --git a/screens/strategy-detail/comment-card.tsx b/screens/strategy-detail/comment-card.tsx
new file mode 100644
index 0000000..bb412c5
--- /dev/null
+++ b/screens/strategy-detail/comment-card.tsx
@@ -0,0 +1,99 @@
+import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
+import React, { useState } from 'react';
+import { FlashIcon } from '@/assets/icons';
+import { adjustFontSizeForIOS, formatTimestamp } from '@/utils/helpers';
+import { LQDImage } from '@/components';
+import { useLikeCommentMutation } from '@/services/comments/queries';
+
+const CommentCard = ({ author, content, createdAt, isLiked, likeCount, id, strategyId }: CommentItem) => {
+ const likeCommentMutation = useLikeCommentMutation(strategyId, id);
+
+ const handleLikeComment = () => {
+ likeCommentMutation.mutate();
+ };
+
+ return (
+
+
+
+
+
+ Meister
+ {formatTimestamp(createdAt)}
+
+ {content}
+
+
+
+ {isLiked ? : }
+
+ {likeCount}
+
+
+ );
+};
+
+export default CommentCard;
+
+const styles = StyleSheet.create({
+ container: {
+ flexDirection: 'row',
+ gap: 8,
+ },
+ commentRightWrapper: {
+ alignItems: 'center',
+ gap: 6,
+ },
+ commentLeftWrapper: {
+ flex: 1,
+ marginRight: 10,
+ gap: 5,
+ },
+ commentCardContainer: {
+ flexDirection: 'row',
+ gap: 8,
+ },
+ usernameFlex: {
+ flexDirection: 'row',
+ gap: 7,
+ },
+ username: {
+ fontSize: adjustFontSizeForIOS(13, 3),
+ fontFamily: 'ClashDisplayBold',
+ fontWeight: '500',
+ color: '#1E293B',
+ },
+ likeCount: {
+ fontSize: adjustFontSizeForIOS(11, 3),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ },
+ title: {
+ fontSize: adjustFontSizeForIOS(15, 3),
+ fontFamily: 'AeonikBold',
+ fontWeight: '500',
+ color: '#1E293B',
+ },
+
+ address: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(11, 3),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ lineHeight: 16.8,
+ },
+ comment: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(11, 3),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ lineHeight: 16.8,
+ },
+ time: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(11, 3),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ lineHeight: 15.84,
+ },
+});
diff --git a/screens/strategy-detail/comment-input.tsx b/screens/strategy-detail/comment-input.tsx
new file mode 100644
index 0000000..22edf33
--- /dev/null
+++ b/screens/strategy-detail/comment-input.tsx
@@ -0,0 +1,95 @@
+import { useRef, useState } from 'react';
+import { FlatList, StyleSheet, TextInput, TouchableOpacity, View } from 'react-native';
+import { LQDImage } from '@/components';
+import { ArrowUpCircleIcon, SmileEmojiIcon } from '@/assets/icons';
+import { useAddCommentMutation } from '@/services/comments/queries';
+
+const CommentInput = ({ strategyId }: { strategyId: string }) => {
+ const flatListRef = useRef(null);
+ const [comment, setComment] = useState('');
+ const [isInputFocused, setIsInputFocused] = useState(false);
+ const [dynamicHeight, setDynamicHeight] = useState(0);
+
+ const inputheight = Math.min(Math.max(44, dynamicHeight), 80);
+
+ const addCommentMutation = useAddCommentMutation(strategyId);
+
+ const handleAddComment = () => {
+ if (comment.trim()) {
+ addCommentMutation.mutate(
+ { content: comment.trim() },
+ {
+ onSuccess: () => {
+ setComment('');
+ flatListRef.current?.scrollToOffset({ offset: 0, animated: true });
+ },
+ }
+ );
+ }
+ };
+
+ return (
+
+
+
+ setComment(val)}
+ multiline={true}
+ onContentSizeChange={(event) => setDynamicHeight(event.nativeEvent.contentSize.height)}
+ style={styles.textInput}
+ onFocus={() => setIsInputFocused(true)}
+ onBlur={() => setIsInputFocused(false)}
+ />
+
+ {comment.length > 0 ? (
+
+
+
+ ) : (
+
+ )}
+
+
+ );
+};
+
+export default CommentInput;
+
+const styles = StyleSheet.create({
+ commentContainer: {
+ bottom: 10,
+ left: 0,
+ right: 0,
+ flexDirection: 'row',
+ gap: 10,
+ alignItems: 'center',
+ backgroundColor: '#FFFFFF',
+ paddingVertical: 8,
+ borderTopColor: '#EAEEF4',
+ zIndex: 10,
+ },
+
+ commentInput: {
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ height: 44,
+ borderRadius: 16,
+ alignItems: 'center',
+ paddingLeft: 10,
+ paddingRight: 6,
+ flex: 1,
+ flexDirection: 'row',
+ gap: 3,
+ },
+
+ textInput: {
+ flex: 1,
+ },
+
+ focusedInput: {
+ borderColor: '#4691FE',
+ borderWidth: 1.2,
+ },
+});
diff --git a/screens/strategy-detail/comments.tsx b/screens/strategy-detail/comments.tsx
new file mode 100644
index 0000000..813003f
--- /dev/null
+++ b/screens/strategy-detail/comments.tsx
@@ -0,0 +1,128 @@
+import { FlatList, StyleSheet, Text, View } from 'react-native';
+import { LQDBottomSheet, LQShrimeLoader } from '@/components';
+import CommentCard from './comment-card';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+import { useComments } from '@/services/comments/queries';
+import DefaultFooterLoader from '@/components/flatlist/footer-loader';
+import CommentInput from './comment-input';
+import Loader from '../home/loader';
+
+const EmptyState = () => (
+
+ No comments
+
+
+
+
+);
+
+const Comments = ({
+ openCloseComment,
+ showCommentSection,
+ strategyId,
+}: {
+ openCloseComment: () => void;
+ showCommentSection: boolean;
+ strategyId: string;
+}) => {
+ const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, isFetching, isError, error, refetch } = useComments(strategyId);
+
+ const comments = data?.pages.flatMap((page) => page.data) || [];
+
+ const loadMoreComments = () => {
+ if (hasNextPage && !isFetchingNextPage) {
+ fetchNextPage();
+ }
+ };
+
+ if (isLoading) {
+ return ;
+ }
+
+ return (
+
+
+
+
+ {comments.length > 0 ? (
+ }
+ keyExtractor={(_, index) => index.toString()}
+ onRefresh={refetch}
+ onEndReached={loadMoreComments}
+ ListFooterComponent={isFetchingNextPage ? : null}
+ contentContainerStyle={styles.commentContainerStyle}
+ />
+ ) : (
+
+ )}
+
+
+
+
+
+
+ );
+};
+
+export default Comments;
+
+const styles = StyleSheet.create({
+ lineOne: {
+ height: 8,
+ borderRadius: 10,
+ marginTop: 10,
+ width: '80%',
+ },
+ lineTwo: {
+ height: 8,
+ borderRadius: 10,
+ marginTop: 10,
+ width: '60%',
+ },
+ lineThree: {
+ height: 8,
+ borderRadius: 10,
+ marginTop: 10,
+ width: '40%',
+ },
+ emptyStateWrapper: {
+ alignItems: 'center',
+ marginTop: 30,
+ },
+ commentContainer: {
+ bottom: 10,
+ left: 0,
+ right: 0,
+ flexDirection: 'row',
+ gap: 10,
+ alignItems: 'center',
+ backgroundColor: '#FFFFFF',
+ paddingVertical: 8,
+
+ borderTopColor: '#EAEEF4',
+ zIndex: 10,
+ },
+ commentContainerStyle: {
+ gap: 24,
+ paddingBottom: 50,
+ },
+
+ emptyText: {
+ fontSize: adjustFontSizeForIOS(16, 1),
+ fontFamily: 'AeonikBold',
+ fontWeight: '500',
+ color: '#1E293B',
+ lineHeight: 19.2,
+ marginBottom: 5,
+ },
+
+ flatlistWrapper: {
+ flex: 1,
+ height: 320,
+ maxHeight: 450,
+ },
+});
diff --git a/screens/strategy-detail/index.tsx b/screens/strategy-detail/index.tsx
new file mode 100644
index 0000000..b0c4d99
--- /dev/null
+++ b/screens/strategy-detail/index.tsx
@@ -0,0 +1,223 @@
+import React, { useState } from 'react';
+import { StyleSheet, Text, View } from 'react-native';
+import { LQDButton, LQDFeedCard, LQDScrollView } from '@/components';
+import { DiscoverUSDIcon } from '@/assets/icons';
+import { adjustFontSizeForIOS, formatNumberWithSuffix } from '@/utils/helpers';
+import { useFeed, useLikeMutation } from '@/services/feeds/queries';
+import StatsCard from './stats-card';
+import Comments from './comments';
+import Loader from '../home/loader';
+import Invest from './invest';
+import Withdraw from './withdraw';
+
+const StrategyDetail = ({ strategyId }: { strategyId: string }) => {
+ const { data, isLoading, isFetching, isError, refetch } = useFeed(strategyId);
+
+ const [showCommentSection, setShowCommentSection] = useState(false);
+ const [showInvestModal, setShowInvestModal] = useState(false);
+ const [showWithdrawModal, setShowWithdrawModal] = useState(false);
+
+ const openCloseComment = () => {
+ setShowCommentSection((prev) => !prev);
+ };
+
+ const openCloseInvest = () => {
+ setShowInvestModal((prev) => !prev);
+ };
+
+ const openCloseWithdraw = () => {
+ setShowWithdrawModal((prev) => !prev);
+ };
+
+ const strategyInfo = [
+ {
+ id: '1',
+ variant: 'locked',
+ title: 'Total value locked',
+ value: `$${formatNumberWithSuffix(data?.metrics.tvl || 0)}`,
+ active: false,
+ },
+ {
+ id: '2',
+ variant: 'risk',
+ title: 'Risk profile',
+ value: 'Stable',
+ active: true,
+ },
+ {
+ id: '3',
+ variant: 'deposit',
+ title: 'No. of deposits',
+ value: Number(data?.metrics.totalDepositAmount || 0).toLocaleString(),
+ active: false,
+ },
+ {
+ id: '4',
+ variant: 'curator',
+ title: 'Curator fee',
+ value: `5%`,
+ active: false,
+ },
+ ];
+
+ if (isLoading) {
+ return ;
+ }
+
+ if (isError) {
+ return error;
+ }
+
+ return (
+
+
+
+
+ Strategy Info
+
+
+ {strategyInfo.map((stats: any, index) => (
+
+ ))}
+
+
+
+
+
+ USDC
+
+
+ Invested:
+ 3,000
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default StrategyDetail;
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: '#FFFFFF',
+ },
+ statsWrapper: {
+ flexDirection: 'row',
+ width: '100%',
+ flexWrap: 'wrap',
+ gap: 20,
+ },
+
+ infoContainer: {
+ paddingVertical: 10,
+ paddingHorizontal: 16,
+ },
+
+ emptyText: {
+ fontSize: adjustFontSizeForIOS(16, 1),
+ fontFamily: 'AeonikBold',
+ fontWeight: '500',
+ color: '#1E293B',
+ lineHeight: 19.2,
+ marginBottom: 5,
+ },
+
+ title: {
+ fontSize: adjustFontSizeForIOS(15, 3),
+ fontFamily: 'AeonikBold',
+ fontWeight: '500',
+ color: '#1E293B',
+ },
+
+ address: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(11, 3),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ lineHeight: 16.8,
+ },
+
+ comment: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(11, 3),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ lineHeight: 16.8,
+ },
+
+ time: {
+ color: '#64748B',
+ fontSize: adjustFontSizeForIOS(11, 3),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ lineHeight: 15.84,
+ },
+
+ sectionTitle: {
+ fontSize: 16,
+ fontWeight: '600',
+ color: '#1E293B',
+ marginBottom: 12,
+ },
+
+ token: {
+ fontSize: adjustFontSizeForIOS(14, 2),
+ fontWeight: '500',
+ color: '#1A2001',
+ lineHeight: 18.48,
+ fontFamily: 'AeonikMedium',
+ },
+
+ invested: {
+ fontSize: adjustFontSizeForIOS(14, 2),
+ fontWeight: '500',
+ color: '#64748B',
+ lineHeight: 18.48,
+ fontFamily: 'AeonikMedium',
+ },
+
+ investedAmount: {
+ fontSize: adjustFontSizeForIOS(16, 2),
+ fontWeight: '500',
+ color: '#1A2001',
+ lineHeight: 19.84,
+ fontFamily: 'AeonikMedium',
+ },
+
+ tokenContainer: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ paddingVertical: 20,
+ paddingHorizontal: 5,
+ },
+
+ tokenWrapper: {
+ flexDirection: 'row',
+ gap: 5,
+ alignItems: 'center',
+ },
+
+ buttonWrapper: {
+ marginTop: 20,
+ },
+
+ textInput: {
+ flex: 1,
+ },
+
+ focusedInput: {
+ borderColor: '#4691FE',
+ borderWidth: 1.2,
+ },
+});
diff --git a/screens/strategy-detail/invest.tsx b/screens/strategy-detail/invest.tsx
new file mode 100644
index 0000000..8ac1e86
--- /dev/null
+++ b/screens/strategy-detail/invest.tsx
@@ -0,0 +1,174 @@
+import { StyleSheet, Text, View } from 'react-native';
+import React, { useEffect, useState } from 'react';
+import { LQDBottomSheet, LQDButton, LQDNumericKeyboard } from '@/components';
+import { adjustFontSizeForIOS, formatWithThousandSeparator, removeCommasFromNumber } from '@/utils/helpers';
+import { ArrowDownIcon, ArrowDropdownDownIcon, DiscoverUSDIcon, MoonWellIcon } from '@/assets/icons';
+
+const Invest = ({
+ openCloseComment,
+ showCommentSection,
+ strategyId,
+}: {
+ openCloseComment: () => void;
+ showCommentSection: boolean;
+ strategyId: string;
+}) => {
+ const [amount, setAmount] = useState('');
+ const walletBalance = 50;
+
+ const handleAmountChange = (key: string) => {
+ if (key === '⌫') {
+ return setAmount((prev) => formatWithThousandSeparator(prev.slice(0, -1)));
+ }
+
+ if (key === '.' && amount.includes('.')) {
+ return;
+ }
+ setAmount((prev) => formatWithThousandSeparator(prev + key));
+ };
+
+ const onSubmit = () => {
+ console.log('submit');
+ };
+
+ const disableButton =
+ !parseFloat(removeCommasFromNumber(amount)) || parseFloat(removeCommasFromNumber(amount)) > Number(walletBalance || 0)!;
+
+ return (
+
+
+
+
+
+ {amount || 0}
+ Max
+
+
+
+
+ USDC
+
+
+
+ Available:
+ 3,600 USDC
+
+
+
+
+
+
+ Fees:
+ $5
+
+
+
+
+
+
+
+ );
+};
+
+export default Invest;
+
+const styles = StyleSheet.create({
+ action: {
+ paddingHorizontal: 8,
+ paddingVertical: 12,
+ alignItems: 'stretch',
+ marginBottom: 10,
+ },
+
+ token: {
+ color: '#0F172A',
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ fontSize: adjustFontSizeForIOS(14, 2),
+ },
+
+ amount: {
+ color: '#0F172A',
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ fontSize: adjustFontSizeForIOS(24, 2),
+ },
+
+ max: {
+ color: '#375DFB',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(12, 2),
+ },
+
+ availableText: {
+ color: '#64748B',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(12, 2),
+ },
+
+ amountWrapper: { flex: 1, gap: 5 },
+
+ balance: {
+ color: '#334155',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(13, 2),
+ },
+
+ fee: {
+ color: '#64748B',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ },
+
+ feeAmount: {
+ color: '#475569',
+ },
+
+ feeWrapper: {
+ flexDirection: 'row',
+ gap: 10,
+ marginTop: 20,
+ marginBottom: 40,
+ },
+
+ selectorText: {
+ fontSize: adjustFontSizeForIOS(13, 2),
+ lineHeight: 16.12,
+ fontWeight: '500',
+ textAlign: 'center',
+ fontFamily: 'AeonikMedium',
+ },
+
+ availableBalanceWrapper: {
+ flexDirection: 'row',
+ gap: 6,
+ },
+ card: {
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ borderRadius: 12,
+ flex: 1,
+ paddingVertical: 20,
+ width: '100%',
+ flexDirection: 'row',
+ paddingHorizontal: 16,
+ marginBottom: 30,
+ alignItems: 'center',
+ },
+
+ dropDown: {
+ flexDirection: 'row',
+ paddingHorizontal: 10,
+ paddingVertical: 5,
+ backgroundColor: '#F8FAFC',
+ width: 114,
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ borderRadius: 400,
+ alignSelf: 'flex-end',
+ marginBottom: 8,
+ },
+});
diff --git a/screens/strategy-detail/percentage.tsx b/screens/strategy-detail/percentage.tsx
new file mode 100644
index 0000000..acb830d
--- /dev/null
+++ b/screens/strategy-detail/percentage.tsx
@@ -0,0 +1,216 @@
+import React, { useState, useEffect } from 'react';
+import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
+import Slider from '@react-native-community/slider';
+import { adjustFontSizeForIOS, formatWithThousandSeparator, formatAmount } from '@/utils/helpers';
+import { DiscoverUSDIcon } from '@/assets/icons';
+
+const PercentageSetter = ({ setPercentage, amount = 0, balance = 0 }: Percentage) => {
+ const [percentage, setInternalPercentage] = useState(0);
+ const [adjustedAmount, setAdjustedAmount] = useState(0);
+
+ const percentages = [
+ { value: 10, label: '10%' },
+ { value: 25, label: '25%' },
+ { value: 50, label: '50%' },
+ { value: 75, label: '75%' },
+ { value: 100, label: 'MAX' },
+ ];
+
+ const clampAmount = (inputAmount: number) => {
+ return Math.min(Math.max(inputAmount, 0), balance);
+ };
+
+ useEffect(() => {
+ if (amount && balance) {
+ const validAmount = clampAmount(amount);
+
+ const calculatedPercentage = (validAmount / balance) * 100;
+ const clampedPercentage = Math.min(Math.max(calculatedPercentage, 0), 100);
+
+ setInternalPercentage(Math.round(clampedPercentage));
+ }
+ }, [amount, balance]);
+
+ useEffect(() => {
+ if (balance) {
+ setAdjustedAmount((balance * percentage) / 100);
+ }
+ }, [percentage, balance]);
+
+ const handleSliderChange = (value: number) => {
+ const clampedValue = Math.min(Math.max(value, 0), 100);
+
+ setInternalPercentage(clampedValue);
+ };
+
+ const setPredefinedPercentage = (value: number) => {
+ const clampedValue = Math.min(Math.max(value, 0), 100);
+
+ setInternalPercentage(clampedValue);
+ };
+
+ useEffect(() => {
+ const validAmount = clampAmount((balance * percentage) / 100);
+ setAdjustedAmount(validAmount);
+
+ if (setPercentage) {
+ setPercentage(percentage);
+ }
+ }, [percentage, setPercentage, balance]);
+
+ return (
+
+
+
+ {percentage}%
+
+
+ {formatAmount(adjustedAmount).toLocaleString()}
+ USDC
+
+
+
+
+
+
+
+
+
+
+ USDC
+
+
+
+ Invested:
+ {formatWithThousandSeparator(String(balance))}
+
+
+
+
+
+ {percentages.map(({ label, value }) => (
+ setPredefinedPercentage(value)}
+ >
+ {label}
+
+ ))}
+
+
+ );
+};
+
+export default PercentageSetter;
+
+const styles = StyleSheet.create({
+ container: {
+ width: '100%',
+ alignSelf: 'stretch',
+ paddingVertical: 16,
+ paddingHorizontal: 11,
+ gap: 16,
+ borderWidth: 1,
+ borderColor: '#EAEEF4',
+ borderRadius: 12,
+ },
+
+ top: {
+ gap: 4,
+ },
+
+ label: {
+ color: '#475569',
+ fontSize: 18,
+ lineHeight: 23.76,
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+
+ sliderContainer: {
+ width: '100%',
+ },
+
+ partitions: {
+ alignSelf: 'stretch',
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ gap: 18,
+ },
+
+ token: {
+ color: '#0F172A',
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ fontSize: adjustFontSizeForIOS(14, 2),
+ },
+
+ amount: {
+ color: '#475569',
+ fontWeight: '400',
+ fontFamily: 'AeonikMedium',
+ fontSize: adjustFontSizeForIOS(15, 2),
+ },
+
+ investedText: {
+ color: '#64748B',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(12, 2),
+ },
+
+ investedAmount: {
+ color: '#334155',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(13, 2),
+ },
+
+ partition: {
+ paddingVertical: 6,
+ paddingHorizontal: 10,
+ maxHeight: 40,
+ alignItems: 'center',
+ justifyContent: 'center',
+ backgroundColor: '#F8FAFC',
+ borderRadius: 10,
+ borderWidth: 1,
+ borderColor: '#E2E8F0',
+ },
+
+ activePartition: {
+ backgroundColor: '#F1F5F9',
+ },
+
+ partitionText: {
+ color: '#334155',
+ fontSize: 13,
+ lineHeight: 16.12,
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ },
+
+ percentageWrapper: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ },
+
+ itemsFlex: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 5,
+ },
+});
diff --git a/screens/strategy-detail/stats-card.tsx b/screens/strategy-detail/stats-card.tsx
new file mode 100644
index 0000000..1b92a5e
--- /dev/null
+++ b/screens/strategy-detail/stats-card.tsx
@@ -0,0 +1,54 @@
+import { StyleSheet, Text, View } from 'react-native';
+import React from 'react';
+import { CuratorIcon, DepositIcon, LockedIcon, RiskIcon, StatsDepositIcon } from '@/assets/icons';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+
+const StatsCard = ({ title, value, variant, isActive = false }: IStatCard) => {
+ const icon = {
+ locked: ,
+ risk: ,
+ deposit: ,
+ curator: ,
+ };
+
+ const backgroundColor = isActive ? '#EFFAF6' : '#F8FAFC';
+ const borderColor = isActive ? '#CBF5E5' : '#F1F5F9';
+ const textColor = isActive ? '#013220' : '#121212';
+
+ return (
+
+ {icon[variant]}
+
+ {title}
+ {value}
+
+
+ );
+};
+
+export default StatsCard;
+
+const styles = StyleSheet.create({
+ container: {
+ width: '47%',
+ borderWidth: 1,
+ borderRadius: 20,
+ padding: 15,
+ rowGap: 15,
+ },
+ title: {
+ fontSize: adjustFontSizeForIOS(28, 2),
+ fontWeight: '700',
+ color: '#1A2001',
+ lineHeight: 31.36,
+ fontFamily: 'QuantaGroteskProSemiBold',
+ marginTop: 10,
+ },
+ subTitle: {
+ fontSize: adjustFontSizeForIOS(13, 2),
+ fontWeight: '400',
+ color: '#1A2001',
+ lineHeight: 18.48,
+ fontFamily: 'AeonikRegular',
+ },
+});
diff --git a/screens/strategy-detail/types.ts b/screens/strategy-detail/types.ts
new file mode 100644
index 0000000..ecd661f
--- /dev/null
+++ b/screens/strategy-detail/types.ts
@@ -0,0 +1,12 @@
+interface IStatCard {
+ title?: string;
+ variant: 'locked' | 'risk' | 'deposit' | 'curator';
+ value: string;
+ isActive: boolean;
+}
+
+interface Percentage {
+ setPercentage?: (percentage: number) => void;
+ amount: number;
+ balance: number;
+}
diff --git a/screens/strategy-detail/withdraw.tsx b/screens/strategy-detail/withdraw.tsx
new file mode 100644
index 0000000..7df5904
--- /dev/null
+++ b/screens/strategy-detail/withdraw.tsx
@@ -0,0 +1,176 @@
+import { StyleSheet, Text, View } from 'react-native';
+import React, { useState } from 'react';
+import { LQDBottomSheet, LQDButton, LQDNumericKeyboard } from '@/components';
+import { adjustFontSizeForIOS, formatWithThousandSeparator, removeCommasFromNumber } from '@/utils/helpers';
+import { DiscoverUSDIcon } from '@/assets/icons';
+import PercentageSetter from './percentage';
+
+const Withdraw = ({
+ openCloseComment,
+ showCommentSection,
+ strategyId,
+}: {
+ openCloseComment: () => void;
+ showCommentSection: boolean;
+ strategyId: string;
+}) => {
+ const [amount, setAmount] = useState('');
+ const [percentage, setPercentage] = useState(0);
+ const walletBalance = 1000;
+
+ const handleAmountChange = (key: string) => {
+ if (key === '⌫') {
+ return setAmount((prev) => formatWithThousandSeparator(prev.slice(0, -1)));
+ }
+
+ if (key === '.' && amount.includes('.')) {
+ return;
+ }
+ setAmount((prev) => formatWithThousandSeparator(prev + key));
+ };
+
+ const onSubmit = () => {
+ console.log('submit');
+ };
+
+ const disableButton =
+ !parseFloat(removeCommasFromNumber(amount)) || parseFloat(removeCommasFromNumber(amount)) > Number(walletBalance || 0)!;
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ You’ll receive:
+
+
+ 3,600 USDC
+
+
+
+
+ Fees:
+ $5
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Withdraw;
+
+const styles = StyleSheet.create({
+ action: {
+ paddingHorizontal: 8,
+ paddingVertical: 12,
+ alignItems: 'stretch',
+ marginBottom: 10,
+ marginTop: 30,
+ },
+
+ token: {
+ color: '#0F172A',
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ fontSize: adjustFontSizeForIOS(14, 2),
+ },
+
+ amount: {
+ color: '#0F172A',
+ fontWeight: '500',
+ fontFamily: 'AeonikMedium',
+ fontSize: adjustFontSizeForIOS(24, 2),
+ },
+
+ max: {
+ color: '#375DFB',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(12, 2),
+ },
+
+ availableText: {
+ color: '#64748B',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(12, 2),
+ },
+
+ amountWrapper: { flex: 1, gap: 5 },
+
+ fee: {
+ color: '#334155',
+ fontWeight: '400',
+ fontFamily: 'AeonikMedium',
+ fontSize: adjustFontSizeForIOS(13, 2),
+ },
+
+ feeAmount: {
+ color: '#475569',
+ },
+
+ balance: {
+ color: '#334155',
+ fontWeight: '400',
+ fontFamily: 'AeonikRegular',
+ fontSize: adjustFontSizeForIOS(13, 2),
+ },
+
+ itemsWrapper: {
+ flexDirection: 'row',
+ gap: 10,
+ marginTop: 10,
+ justifyContent: 'space-between',
+ width: '100%',
+ alignItems: 'center',
+ paddingHorizontal: 20,
+ },
+
+ selectorText: {
+ fontSize: adjustFontSizeForIOS(13, 2),
+ lineHeight: 16.12,
+ fontWeight: '500',
+ textAlign: 'center',
+ fontFamily: 'AeonikMedium',
+ },
+
+ investedAmountWrapper: {
+ flexDirection: 'row',
+ gap: 6,
+ },
+
+ percentage: {
+ marginBottom: 30,
+ width: '100%',
+ },
+
+ dropDown: {
+ flexDirection: 'row',
+ paddingHorizontal: 10,
+ paddingVertical: 5,
+ backgroundColor: '#F8FAFC',
+ width: 114,
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ borderRadius: 400,
+ alignSelf: 'flex-end',
+ marginBottom: 8,
+ },
+
+ itemsFlex: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 5,
+ },
+});
diff --git a/screens/withdraw/index.tsx b/screens/withdraw/index.tsx
index b9091a9..1747717 100644
--- a/screens/withdraw/index.tsx
+++ b/screens/withdraw/index.tsx
@@ -1,12 +1,13 @@
import { useEffect, useState } from 'react';
-import { View, Text, TouchableOpacity, TextInput, Platform, Image } from 'react-native';
+import { View, Text, TouchableOpacity, TextInput, Platform } from 'react-native';
+import FastImage from 'react-native-fast-image';
import { LQDAssetSelection, LQDButton, LQDNumericKeyboard } from '@/components';
-import { formatWithThousandSeparator, removeCommasFromNumber } from '@/utils/helpers';
+import { formatAmount, formatWithThousandSeparator, removeCommasFromNumber } from '@/utils/helpers';
import { CaretDownIcon } from '@/assets/icons';
+import { TokenItem } from '@/store/account/types';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
import styles from './styles';
-import { assets, defaultAsset } from './dummy';
-import { IAsset } from './types';
const getMaxWidth = (amount: string) => {
const baseWidth = 27;
@@ -27,8 +28,10 @@ const getMaxWidth = (amount: string) => {
};
const Withdraw = () => {
+ const { accountState } = useSystemFunctions();
+ const { router, dispatch } = useSystemFunctions();
const [amount, setAmount] = useState('');
- const [asset, setAsset] = useState();
+ const [asset, setAsset] = useState();
const [showCursor, setShowCursor] = useState(true);
const [showBottomSheet, setShowBottomSheet] = useState(false);
@@ -39,7 +42,8 @@ const Withdraw = () => {
{ text: '$500', action: () => setAmount('500') },
];
- const disableButton = !parseFloat(removeCommasFromNumber(amount)) || parseFloat(removeCommasFromNumber(amount)) > asset?.balance!;
+ const disableButton =
+ !parseFloat(removeCommasFromNumber(amount)) || parseFloat(removeCommasFromNumber(amount)) > Number(asset?.balance || 0)!;
const handleAmountChange = (key: string) => {
if (key === '⌫') {
@@ -54,17 +58,23 @@ const Withdraw = () => {
const onSubmit = () => {
const amountNumber = parseFloat(removeCommasFromNumber(amount));
console.log('submit', { amount: amountNumber });
+ router.push('/withdraw/recepient-address');
};
+ useEffect(() => {
+ if (!accountState.tokens?.data) return;
+
+ setAsset(accountState.tokens?.data[0]);
+ }, [accountState.tokens]);
+
useEffect(() => {
const cursorInterval = setInterval(() => {
setShowCursor((prev) => !prev);
}, 500);
+
return () => clearInterval(cursorInterval);
}, []);
- useEffect(() => setAsset(defaultAsset), []);
-
return (
<>
@@ -73,17 +83,18 @@ const Withdraw = () => {
- Bal: ${asset?.balance.toLocaleString()} {asset?.symbol}
+ Bal: ${formatAmount(asset?.balance).toLocaleString()} {asset?.symbol}
- {amount && $}
+ {amount && $}
{
setShowBottomSheet(true)}>
-
+
{asset?.symbol}
@@ -122,14 +140,7 @@ const Withdraw = () => {
- setShowBottomSheet(false)}
- assets={assets}
- setAsset={setAsset}
- show={showBottomSheet}
- asset={asset!}
- />
+ setShowBottomSheet(false)} setAsset={setAsset} show={showBottomSheet} />
>
);
};
diff --git a/screens/withdraw/recepient-address.tsx b/screens/withdraw/recepient-address.tsx
new file mode 100644
index 0000000..c9b9ae4
--- /dev/null
+++ b/screens/withdraw/recepient-address.tsx
@@ -0,0 +1,99 @@
+import { Pressable, StyleSheet, Text, View } from 'react-native';
+import React from 'react';
+import { LQDButton, LQDInput } from '@/components';
+import { useForm } from 'react-hook-form';
+import { CautionIcon, FaceIDIcon } from '@/assets/icons';
+import { adjustFontSizeForIOS } from '@/utils/helpers';
+
+const RecepientAddress = () => {
+ const { control, watch, reset } = useForm();
+ const searchValue = watch('search');
+
+ const onSubmit = () => {};
+ return (
+
+
+
+
+
+
+ Make sure the address supports USDC
+
+
+
+
+ {searchValue && (
+
+
+ Authenticate Using Face ID
+
+ )}
+
+
+
+ );
+};
+
+export default RecepientAddress;
+
+const styles = StyleSheet.create({
+ container: {
+ backgroundColor: '#fff',
+ paddingVertical: 20,
+ paddingHorizontal: 16,
+ flex: 1,
+ },
+
+ action: {
+ paddingHorizontal: 8,
+ paddingVertical: 12,
+ alignItems: 'stretch',
+ gap: 50,
+ },
+
+ toastWrapper: {
+ height: 36,
+ borderRadius: 8,
+ backgroundColor: '#EBF1FF',
+ flexDirection: 'row',
+ paddingHorizontal: 10,
+ alignItems: 'center',
+ gap: 8,
+ marginTop: 20,
+ },
+
+ toastTitle: {
+ fontSize: adjustFontSizeForIOS(14, 1),
+ fontFamily: 'AeonikRegular',
+ fontWeight: '400',
+ },
+
+ faceIDBtn: {
+ backgroundColor: '#007AFF',
+ height: 60,
+ justifyContent: 'center',
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 10,
+ borderRadius: 12,
+ },
+
+ faceIDText: {
+ fontSize: adjustFontSizeForIOS(17, 1),
+ lineHeight: 22,
+ fontFamily: 'AeonikMedium',
+ fontWeight: '400',
+ color: '#fff',
+ },
+});
diff --git a/services/comments/apis.ts b/services/comments/apis.ts
new file mode 100644
index 0000000..9637db3
--- /dev/null
+++ b/services/comments/apis.ts
@@ -0,0 +1,22 @@
+import { strategyAxiosInstance } from '@/init/axios';
+
+const fetchComments = async (strategyId: string, pageParam?: string) => {
+ return (
+ await strategyAxiosInstance.get(`${strategyId}/comments`, {
+ params: {
+ cursor: pageParam,
+ limit: 10,
+ },
+ })
+ ).data;
+};
+
+const commentOnAStrategy = async (strategyId: string, data: PostCommentBody) => {
+ return (await strategyAxiosInstance.post(`${strategyId}/comments`, data)).data;
+};
+
+const likeCommentOnAStrategy = async (comment: string) => {
+ return (await strategyAxiosInstance.post(`comments/${comment}/like`)).data;
+};
+
+export { fetchComments, commentOnAStrategy, likeCommentOnAStrategy };
diff --git a/services/comments/queries.ts b/services/comments/queries.ts
new file mode 100644
index 0000000..f5154c7
--- /dev/null
+++ b/services/comments/queries.ts
@@ -0,0 +1,125 @@
+import { useInfiniteQuery, useMutation, useQueryClient } from '@tanstack/react-query';
+
+import { commentOnAStrategy, fetchComments, likeCommentOnAStrategy } from './apis';
+
+const useComments = (strategyId: string) => {
+ return useInfiniteQuery({
+ queryKey: ['comments'],
+ queryFn: ({ pageParam }) => fetchComments(strategyId, pageParam),
+ getNextPageParam: (lastPage) => (lastPage.pagination.hasMore ? lastPage.pagination.nextCursor : undefined),
+ initialPageParam: '',
+ });
+};
+
+const useLikeCommentMutation = (strategyId: string, commentId: string) => {
+ const queryClient = useQueryClient();
+
+ return useMutation({
+ mutationFn: () => likeCommentOnAStrategy(commentId),
+ onMutate: async () => {
+ const queryKey: any = ['feedDetail', strategyId];
+
+ await queryClient.cancelQueries(queryKey);
+
+ const previousFeed = queryClient.getQueryData(queryKey);
+
+ queryClient.setQueryData(queryKey, (oldData: any) => {
+ if (!oldData) return oldData;
+
+ return {
+ ...oldData,
+ comments: oldData.comments?.map((comment: any) =>
+ comment.id === commentId
+ ? {
+ ...comment,
+ isLiked: true,
+ likesCount: comment.likesCount + 1,
+ }
+ : comment
+ ),
+ };
+ });
+
+ return { previousFeed };
+ },
+ onError: (err, _, context) => {
+ const queryKey = ['feedDetail', strategyId];
+
+ if (context?.previousFeed) {
+ queryClient.setQueryData(queryKey, context.previousFeed);
+ }
+
+ console.log('Error liking comment:', err);
+ },
+ onSettled: () => {
+ const queryKey: any = ['feedDetail', strategyId];
+
+ queryClient.invalidateQueries(queryKey);
+ },
+ });
+};
+
+const useAddCommentMutation = (strategyId: string) => {
+ const queryClient = useQueryClient();
+
+ return useMutation({
+ mutationFn: (data: PostCommentBody) => commentOnAStrategy(strategyId, data),
+
+ onMutate: async (newComment) => {
+ const queryKey: any = ['feedDetail', strategyId];
+
+ await queryClient.cancelQueries(queryKey);
+
+ const previousFeed = queryClient.getQueryData(queryKey);
+
+ queryClient.setQueryData(queryKey, (oldData: any) => {
+ if (!oldData || !oldData.comments) return oldData;
+
+ return {
+ ...oldData,
+ comments: [
+ ...oldData.comments,
+ {
+ ...newComment,
+ id: `temp-${Date.now()}`,
+ isTemporary: true,
+ },
+ ],
+ };
+ });
+
+ return { previousFeed };
+ },
+
+ onError: (err, _, context) => {
+ const queryKey = ['feedDetail', strategyId];
+
+ if (context?.previousFeed) {
+ queryClient.setQueryData(queryKey, context.previousFeed);
+ }
+
+ console.log('Error adding comment:', err);
+ },
+
+ onSuccess: (newComment) => {
+ const queryKey = ['feedDetail', strategyId];
+
+ queryClient.setQueryData(queryKey, (oldData: any) => {
+ if (!oldData || !oldData.comments) return oldData;
+
+ return {
+ ...oldData,
+ comments: oldData.comments.map((comment: any) => (comment.isTemporary ? newComment : comment)),
+ };
+ });
+ },
+
+ onSettled: () => {
+ const queryKey: any = ['feedDetail', strategyId];
+
+ queryClient.invalidateQueries(queryKey);
+ },
+ });
+};
+
+export { useComments, useLikeCommentMutation, useAddCommentMutation };
diff --git a/services/comments/types.ts b/services/comments/types.ts
new file mode 100644
index 0000000..efbeece
--- /dev/null
+++ b/services/comments/types.ts
@@ -0,0 +1,26 @@
+type Comments = {
+ data: CommentItem[];
+ pagination: {
+ nextCursor?: string;
+ hasMore: boolean;
+ };
+};
+
+type CommentItem = {
+ id: string;
+ content: string;
+ createdAt: string;
+ author: {
+ address: string;
+ };
+ likeCount: number;
+ isLiked: boolean;
+ strategyId: string;
+ replyToId: string;
+ replies: string[];
+};
+
+type PostCommentBody = {
+ content: string;
+ replyToId?: string;
+};
diff --git a/services/discover/apis.ts b/services/discover/apis.ts
new file mode 100644
index 0000000..06f2150
--- /dev/null
+++ b/services/discover/apis.ts
@@ -0,0 +1,26 @@
+import { strategyAxiosInstance } from '@/init/axios';
+
+const searchFeed = async (
+ query?: string,
+ pageParam?: string,
+ minTvl?: string,
+ maxTvl?: string,
+ assets?: string[],
+ protocols?: string[]
+) => {
+ const params = new URLSearchParams();
+ if (query) params.append('q', query);
+ if (pageParam) params.append('cursor', pageParam);
+ if (minTvl) params.append('minTvl', minTvl);
+ if (maxTvl) params.append('maxTvl', maxTvl);
+ if (assets) assets.forEach((asset) => params.append('assets[]', asset));
+ if (protocols) protocols.forEach((protocol) => params.append('protocols[]', protocol));
+
+ return (
+ await strategyAxiosInstance.get(`search`, {
+ params: params,
+ })
+ ).data;
+};
+
+export { searchFeed };
diff --git a/services/discover/queries.ts b/services/discover/queries.ts
new file mode 100644
index 0000000..af14b61
--- /dev/null
+++ b/services/discover/queries.ts
@@ -0,0 +1,13 @@
+import { QueryKey, useInfiniteQuery, useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
+import { searchFeed } from './apis';
+
+const useSearchFeeds = (query?: string, pageParam?: string, minTvl?: string, maxTvl?: string, assets?: string[], protocols?: string[]) => {
+ return useInfiniteQuery({
+ queryKey: ['searchFeeds', query, pageParam, minTvl, maxTvl, assets, protocols],
+ queryFn: () => searchFeed(query, pageParam, minTvl, maxTvl, assets, protocols),
+ getNextPageParam: (lastPage) => (lastPage.pagination.hasMore ? lastPage.pagination.nextCursor : undefined),
+ initialPageParam: '',
+ });
+};
+
+export { useSearchFeeds };
diff --git a/services/feeds/apis.ts b/services/feeds/apis.ts
new file mode 100644
index 0000000..49fe340
--- /dev/null
+++ b/services/feeds/apis.ts
@@ -0,0 +1,26 @@
+import { strategyAxiosInstance, setStrategyTokenHeader } from '@/init/axios';
+
+const fetchFeeds = async (pageParam?: string, sort?: 'latest' | 'trending') => {
+ await setStrategyTokenHeader(
+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsImFkZHJlc3MiOiIweDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLCJpYXQiOjE3MzQxMTc5OTF9.qeL-tK0Yh6bMq8L7WrYakYpwUFqvBkv7XSoyTWBqMmY'
+ );
+ return (
+ await strategyAxiosInstance.get(`feed`, {
+ params: {
+ cursor: pageParam,
+ limit: 10,
+ sort,
+ },
+ })
+ ).data;
+};
+
+const fetchFeed = async (strategyId: string) => {
+ return (await strategyAxiosInstance.get(`${strategyId}`)).data?.data;
+};
+
+const likeAStrategy = async (strategyId: string) => {
+ return (await strategyAxiosInstance.post(`${strategyId}/like`)).data;
+};
+
+export { fetchFeeds, fetchFeed, likeAStrategy };
diff --git a/services/feeds/queries.ts b/services/feeds/queries.ts
new file mode 100644
index 0000000..04689f4
--- /dev/null
+++ b/services/feeds/queries.ts
@@ -0,0 +1,115 @@
+import { QueryKey, useInfiniteQuery, useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
+import { fetchFeed, fetchFeeds, likeAStrategy } from './apis';
+import { useLiquidity } from '@/hooks/useLiquid';
+import { publicClient } from '@/init/client';
+import { PublicClient } from 'viem';
+import { isDev } from '@/constants/env';
+import { useToastActions } from '@/store/toast/actions';
+import { useState } from 'react';
+import useSystemFunctions from '@/hooks/useSystemFunctions';
+import useAppActions from '@/store/app/actions';
+
+const useFeeds = () => {
+ return useInfiniteQuery({
+ queryKey: ['feeds'],
+ queryFn: ({ pageParam }) => fetchFeeds(pageParam),
+ getNextPageParam: (lastPage) => (lastPage.pagination.hasMore ? lastPage.pagination.nextCursor : undefined),
+ initialPageParam: '',
+ });
+};
+
+const useFeed = (strategyId: string) => {
+ return useQuery({
+ queryKey: ['feedDetail', strategyId],
+ queryFn: () => fetchFeed(strategyId),
+ enabled: !!strategyId,
+ });
+};
+
+const useWriteFeed = () => {
+ const { router } = useSystemFunctions();
+ const { createStrategy } = useLiquidity(publicClient as PublicClient);
+ const { showToast } = useToastActions();
+ const { handleStrategyActions } = useAppActions();
+ const [loading, setLoading] = useState(false);
+
+ const postStrategy = async (data: StrategyBody) => {
+ try {
+ setLoading(true);
+ await createStrategy(data);
+
+ showToast({
+ title: 'Strategy created!',
+ description: "You've successfully created a strategy",
+ variant: 'success',
+ });
+
+ handleStrategyActions([]);
+
+ return router.replace('/(tabs)/home');
+ } catch (error: any) {
+ if (error.cause?.message && error.cause?.message.includes('Biometrics must be enabled')) {
+ const alertTitle = 'Device not enrolled to FaceID';
+ const alertMessage = isDev
+ ? 'On the top menu bar, click on \nFeatures > Face ID > Enrolled'
+ : 'Please enroll your device to FaceID on settings';
+
+ return showToast({
+ title: alertTitle,
+ description: alertMessage,
+ variant: 'error',
+ });
+ } else {
+ return showToast({
+ title: 'Failed to create strategy',
+ description: "We couldn't create the strategy. Please try again later!",
+ variant: 'error',
+ });
+ }
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ return { postStrategy, loading };
+};
+
+const useLikeMutation = (strategyId: string) => {
+ const queryClient = useQueryClient();
+
+ return useMutation({
+ mutationFn: () => likeAStrategy(strategyId),
+ onMutate: async () => {
+ const queryKey: any = ['feedDetail', strategyId];
+
+ await queryClient.cancelQueries(queryKey);
+
+ const previousFeed = queryClient.getQueryData(queryKey);
+
+ queryClient.setQueryData(queryKey, (oldData: any) => {
+ if (!oldData) return oldData;
+ return {
+ ...oldData,
+ isLiked: true,
+ likesCount: oldData.likesCount + 1,
+ };
+ });
+
+ return { previousFeed };
+ },
+ onError: (err, _, context) => {
+ const queryKey = ['feedDetail', strategyId];
+ if (context?.previousFeed) {
+ queryClient.setQueryData(queryKey, context.previousFeed);
+ }
+
+ console.log('Error liking strategy:', err);
+ },
+ onSettled: () => {
+ const queryKey: any = ['feedDetail', strategyId];
+ queryClient.invalidateQueries(queryKey);
+ },
+ });
+};
+
+export { useFeeds, useFeed, useWriteFeed, useLikeMutation };
diff --git a/services/feeds/types.ts b/services/feeds/types.ts
new file mode 100644
index 0000000..4b90503
--- /dev/null
+++ b/services/feeds/types.ts
@@ -0,0 +1,95 @@
+type Feeds = {
+ data: Strategy[];
+ pagination: {
+ hasMore: boolean;
+ nextCursor?: string;
+ };
+};
+
+type Strategy = {
+ id: string;
+ name: string;
+ onchainId: number;
+ description: string;
+ curator: {
+ address: `0x${string}`;
+ username: string;
+ avatarUrl: string;
+ };
+ steps: StrategyStep[];
+ metrics: {
+ tvl: string;
+ repostCount: number;
+ likeCount: number;
+ commentCount: number;
+ apy: number;
+ totalDepositAmount: string;
+ };
+ assets: {
+ addresses: `0x${string}`[];
+ count: number;
+ };
+ userInteraction: {
+ hasLiked: boolean;
+ deposit: {
+ amount: number;
+ };
+ };
+ createdAt: string;
+ transactionHash: `0x${string}`;
+};
+
+type StrategyStep = {
+ id: string;
+ stepIndex: number;
+ protocolAddress: `0x${string}`;
+ actionType: 'supply' | 'borrow' | 'stake' | 'deposit' | 'swap';
+ assetInToken: {
+ address: `0x${string}`;
+ symbol: string;
+ logoUrl: string;
+ };
+ assetOutTokens: {
+ address: `0x${string}`;
+ symbol: string;
+ logoUrl: string;
+ }[];
+ amountRatio: number;
+ blockNumber: string;
+ transactionHash: `0x${string}`;
+};
+
+type LikeStrategyResponse = {
+ success: boolean;
+ strategy: {
+ id: string;
+ likeCount: number;
+ };
+};
+
+type StrategyBody = {
+ name: string;
+ description: string;
+ minDeposit: bigint;
+ maxTvl: bigint;
+ performanceFee: bigint;
+ steps: {
+ connector: `0x${string}`;
+ actionType: ActionType;
+ assetsIn: `0x${string}`[];
+ assetOut: `0x${string}`;
+ amountRatio: bigint;
+ data: `0x${string}`;
+ }[];
+};
+
+enum ActionType {
+ SUPPLY, // Supply assets
+ WITHDRAW, // Withdraw assets
+ BORROW, // Borrow assets
+ REPAY, // Repay debt
+ STAKE, // Stake assets
+ UNSTAKE, // Unstake assets
+ SWAP, // Swap assets
+ CLAIM, // Claim rewards
+}
diff --git a/services/user/apis.ts b/services/user/apis.ts
new file mode 100644
index 0000000..937a972
--- /dev/null
+++ b/services/user/apis.ts
@@ -0,0 +1,40 @@
+import { axiosInstance, strategyAxiosInstance } from '@/init/axios';
+
+const fetchUserInfo = async (walletAddress: string) => {
+ return (await axiosInstance.get(`/users/${walletAddress}`)).data;
+};
+
+const fetchUserStrategies = async (walletAddress: string, pageParam?: string) => {
+ return (
+ await strategyAxiosInstance.get(`user/${walletAddress}`, {
+ params: {
+ cursor: pageParam,
+ limit: 10,
+ },
+ })
+ ).data;
+};
+
+const fetchUserDeposits = async (walletAddress: string, pageParam?: string) => {
+ return (
+ await strategyAxiosInstance.get(`user/${walletAddress}/deposits`, {
+ params: {
+ cursor: pageParam,
+ limit: 10,
+ },
+ })
+ ).data;
+};
+
+const fetchUserLikes = async (walletAddress: string, pageParam?: string) => {
+ return (
+ await strategyAxiosInstance.get(`user/${walletAddress}/liked`, {
+ params: {
+ cursor: pageParam,
+ limit: 10,
+ },
+ })
+ ).data;
+};
+
+export { fetchUserInfo, fetchUserStrategies, fetchUserDeposits, fetchUserLikes };
diff --git a/services/user/queries.ts b/services/user/queries.ts
new file mode 100644
index 0000000..3a07852
--- /dev/null
+++ b/services/user/queries.ts
@@ -0,0 +1,39 @@
+import { useInfiniteQuery, useQuery } from '@tanstack/react-query';
+import { fetchUserDeposits, fetchUserInfo, fetchUserLikes, fetchUserStrategies } from './apis';
+
+const useUser = (walletAddress: string) => {
+ return useQuery({
+ queryKey: ['user', walletAddress],
+ queryFn: () => fetchUserInfo(walletAddress),
+ enabled: !!walletAddress,
+ });
+};
+
+const useUserStrategies = (walletAddress: string) => {
+ return useInfiniteQuery({
+ queryKey: ['userStrategies', walletAddress],
+ queryFn: ({ pageParam }) => fetchUserStrategies(walletAddress, pageParam),
+ getNextPageParam: (lastPage) => (lastPage.hasMore ? lastPage.nextCursor : undefined),
+ initialPageParam: '',
+ });
+};
+
+const useUserDeposits = (walletAddress: string) => {
+ return useInfiniteQuery({
+ queryKey: ['userDeposits', walletAddress],
+ queryFn: ({ pageParam }) => fetchUserDeposits(walletAddress, pageParam),
+ getNextPageParam: (lastPage) => (lastPage.hasMore ? lastPage.nextCursor : undefined),
+ initialPageParam: '',
+ });
+};
+
+const useUserLikes = (walletAddress: string) => {
+ return useInfiniteQuery({
+ queryKey: ['userLikes', walletAddress],
+ queryFn: ({ pageParam }) => fetchUserLikes(walletAddress, pageParam),
+ getNextPageParam: (lastPage) => (lastPage.hasMore ? lastPage.nextCursor : undefined),
+ initialPageParam: '',
+ });
+};
+
+export { useUser, useUserStrategies, useUserDeposits, useUserLikes };
diff --git a/services/user/types.ts b/services/user/types.ts
new file mode 100644
index 0000000..ba258d9
--- /dev/null
+++ b/services/user/types.ts
@@ -0,0 +1,22 @@
+type User = {
+ username: string;
+ walletAddress: string;
+ avatar?: string;
+ joinDate: string;
+ metrics: {
+ totalStrategies: number;
+ totalDeposits: string;
+ followersCount?: number;
+ followingCount?: number;
+ };
+ socials: {
+ twitter?: string;
+ farcaster?: string;
+ };
+};
+
+type UserStrategies = {
+ data: Strategy[];
+ nextCursor?: string;
+ hasMore: boolean;
+};
diff --git a/store/account/actions.ts b/store/account/actions.ts
index 6cbd506..6492bde 100644
--- a/store/account/actions.ts
+++ b/store/account/actions.ts
@@ -1,28 +1,32 @@
import { PublicClient } from 'viem';
import useSystemFunctions from '@/hooks/useSystemFunctions';
-import { useToken } from '@/hooks/useToken';
-import { publicClient } from '@/init/viem';
+import { publicClient } from '@/init/client';
import { setLoading, setLpBalance, setPositions, setRefreshing, setTokenBalance, setTokens } from '.';
-import { Position, Token } from '@/hooks/types';
-import { usePool } from '@/hooks/usePool';
+import { Position } from '@/hooks/types';
+import api from '@/init/api';
+import { TokenItem } from './types';
export function useAccountActions() {
- const { dispatch } = useSystemFunctions();
- const { fetchTokens } = useToken(publicClient as PublicClient);
- const { fetchPositions } = usePool(publicClient as PublicClient);
+ const { dispatch, accountState, smartAccountState } = useSystemFunctions();
const getTokens = async (refresh?: boolean) => {
try {
if (refresh) {
dispatch(setRefreshing(true));
- const tokens = await fetchTokens(15, 0);
- return _setValidTokens(tokens);
+ } else {
+ dispatch(setLoading(true));
}
- dispatch(setLoading(true));
- const tokens = await fetchTokens(15, 0);
+ const query = smartAccountState.address ? `?address=${smartAccountState.address}` : '';
+ const tokens = await api.getTokens(query);
+
+ const totalBalance = tokens.data.reduce((acc, token) => acc + parseFloat(token.usdBalance || '0'), 0);
+ const sortedTokens = await _sortTokensByBalance(tokens.data);
+
+ tokens.data = [...sortedTokens];
- return _setValidTokens(tokens);
+ dispatch(setTokens(tokens));
+ dispatch(setTokenBalance(totalBalance));
} catch (error: any) {
//
} finally {
@@ -31,18 +35,39 @@ export function useAccountActions() {
}
};
- const getPositions = async (refresh?: boolean) => {
+ const getPaginatedTokens = async (refresh?: boolean) => {
try {
if (refresh) {
dispatch(setRefreshing(true));
- const positions = await fetchPositions(15, 0);
- return _setValidPositions(positions || []);
+
+ const query = smartAccountState.address ? `?address=${smartAccountState.address}` : '';
+ const tokens = await api.getTokens(query);
+
+ return dispatch(setTokens(tokens));
}
+ const { tokens: currentTokens } = accountState;
+
+ if (!currentTokens?.pagination?.hasMore) return;
+
dispatch(setLoading(true));
- const positions = await fetchPositions(15, 0);
- return _setValidPositions(positions || []);
+ const nextPage = currentTokens?.pagination.page + 1;
+
+ const addressQuery = smartAccountState.address ? `address=${smartAccountState.address}` : '';
+ const query = `?page=${nextPage}&address=${addressQuery}`;
+
+ const tokens = await api.getTokens(query);
+ const sortedTokens = await _sortTokensByBalance(tokens.data);
+ tokens.data = [...sortedTokens];
+
+ const newData = { ...currentTokens.data, ...tokens.data };
+ tokens.data = newData;
+
+ const totalBalance = tokens.data.reduce((acc, token) => acc + parseFloat(token.balance) * parseFloat(token.usdPrice), 0);
+
+ dispatch(setTokens(tokens));
+ dispatch(setTokenBalance(totalBalance));
} catch (error: any) {
//
} finally {
@@ -51,13 +76,28 @@ export function useAccountActions() {
}
};
- const _setValidTokens = async (tokens: Token[]) => {
- const validTokens = await tokens.filter((token) => token.isListed && token.balance !== '0');
- const totalBalance = validTokens.reduce((acc, token) => acc + parseFloat(token.balance) * parseFloat(token.usdPrice), 0);
+ // const getPositions = async (refresh?: boolean) => {
+ // try {
+ // if (refresh) {
+ // dispatch(setRefreshing(true));
+ // console.log('got here');
+ // const returnedPosition = await lpSugar.getPositions(TEST_USER);
- dispatch(setTokens(validTokens));
- dispatch(setTokenBalance(totalBalance));
- };
+ // console.log(returnedPosition, 'returned position');
+ // return _setValidPositions(positions || []);
+ // }
+
+ // dispatch(setLoading(true));
+ // const returnedPosition = await lpSugar.getPositions(TEST_USER);
+
+ // return _setValidPositions(positions || []);
+ // } catch (error: any) {
+ // //
+ // } finally {
+ // dispatch(setLoading(false));
+ // dispatch(setRefreshing(false));
+ // }
+ // };
const _setValidPositions = async (positions: Position[]) => {
const validPositions = await positions.filter((po) => po.balance !== '0');
@@ -67,8 +107,20 @@ export function useAccountActions() {
dispatch(setLpBalance(lpBalance));
};
+ const _sortTokensByBalance = async (tokens: TokenItem[]) => {
+ const sortedTokens = tokens.sort((a, b) => {
+ const balanceA = parseFloat(a.balance);
+ const balanceB = parseFloat(b.balance);
+
+ return balanceB - balanceA;
+ });
+
+ return sortedTokens;
+ };
+
return {
getTokens,
- getPositions,
+ //getPositions,
+ getPaginatedTokens,
};
}
diff --git a/store/account/index.ts b/store/account/index.ts
index 7579119..f0f9724 100644
--- a/store/account/index.ts
+++ b/store/account/index.ts
@@ -1,9 +1,10 @@
-import { Position, Token } from '@/hooks/types';
+import { Position } from '@/hooks/types';
import { createSlice } from '@reduxjs/toolkit';
import type { PayloadAction } from '@reduxjs/toolkit';
+import { TokenResponse } from './types';
export interface AccountState {
- tokens: Token[];
+ tokens: TokenResponse;
positions: Position[];
lpBalance: number;
tokenBalance: number;
@@ -12,7 +13,14 @@ export interface AccountState {
}
const initialState: AccountState = {
- tokens: [],
+ tokens: {
+ data: [],
+ pagination: {
+ hasMore: true,
+ page: 0,
+ limit: 0,
+ },
+ },
positions: [],
lpBalance: 0,
tokenBalance: 0,
@@ -40,11 +48,18 @@ export const accountReducer = createSlice({
}
},
- setTokens: (state, action: PayloadAction) => {
+ setTokens: (state, action: PayloadAction) => {
if (action.payload) {
- state.tokens = [...action.payload];
+ state.tokens = { ...action.payload };
} else {
- state.tokens = [];
+ state.tokens = {
+ data: [],
+ pagination: {
+ hasMore: true,
+ page: 0,
+ limit: 0,
+ },
+ };
}
},
diff --git a/store/account/types.ts b/store/account/types.ts
new file mode 100644
index 0000000..42a788c
--- /dev/null
+++ b/store/account/types.ts
@@ -0,0 +1,47 @@
+import { Address } from 'viem';
+
+export type TokenResponse = {
+ data: TokenItem[];
+ pagination: {
+ limit: number;
+ page: number;
+ hasMore: boolean;
+ };
+};
+
+export type TokenItem = {
+ formattedBalance?: string;
+ usdBalance?: string;
+ address: Address;
+ symbol: string;
+ decimals: number;
+ balance: string;
+ isListed: boolean;
+ usdPrice: string;
+ logoUrl: string;
+ lastUpdated: string;
+ createdAt: string;
+};
+
+export const defaultToken: TokenResponse = {
+ data: [
+ {
+ address: '0x',
+ symbol: '',
+ decimals: 0,
+ balance: '0',
+ isListed: false,
+ usdPrice: '0',
+ logoUrl: '',
+ lastUpdated: '',
+ createdAt: '',
+ formattedBalance: '0',
+ usdBalance: '0',
+ },
+ ],
+ pagination: {
+ limit: 10,
+ page: 0,
+ hasMore: true,
+ },
+};
diff --git a/store/app/actions.ts b/store/app/actions.ts
index 9fc69f2..973d178 100644
--- a/store/app/actions.ts
+++ b/store/app/actions.ts
@@ -1,21 +1,25 @@
import useSystemFunctions from '@/hooks/useSystemFunctions';
-import { CallbackProps } from '..';
-import { setHideSearch, setSearchIsFocused } from '.';
+import { setShowSearch, setSearchIsFocused, setStrategyActions } from '.';
const useAppActions = () => {
const { dispatch } = useSystemFunctions();
- const hideSearch = (hide: boolean) => {
- dispatch(setHideSearch(hide));
+ const showSearch = (hide: boolean) => {
+ dispatch(setShowSearch(hide));
};
const searchIsFocused = (focused: boolean) => {
dispatch(setSearchIsFocused(focused));
};
+ const handleStrategyActions = (actions: StrategyAction[]) => {
+ dispatch(setStrategyActions(actions));
+ };
+
return {
- hideSearch,
+ showSearch,
searchIsFocused,
+ handleStrategyActions,
};
};
diff --git a/store/app/index.ts b/store/app/index.ts
index e5932c2..fe3ed2f 100644
--- a/store/app/index.ts
+++ b/store/app/index.ts
@@ -2,29 +2,35 @@ import { createSlice } from '@reduxjs/toolkit';
import type { PayloadAction } from '@reduxjs/toolkit';
export interface AppState {
- hideSearch: boolean;
+ showSearch: boolean;
searchIsFocused: boolean;
+ strategyActions: StrategyAction[];
}
const initialState: AppState = {
- hideSearch: false,
+ showSearch: false,
searchIsFocused: false,
+ strategyActions: [],
};
export const appReducer = createSlice({
name: 'app',
initialState,
reducers: {
- setHideSearch: (state, action: PayloadAction) => {
- state.hideSearch = action.payload;
+ setShowSearch: (state, action: PayloadAction) => {
+ state.showSearch = action.payload;
},
setSearchIsFocused: (state, action: PayloadAction) => {
state.searchIsFocused = action.payload;
},
+
+ setStrategyActions: (state, action: PayloadAction) => {
+ state.strategyActions = [...action.payload];
+ },
},
});
-export const { setHideSearch, setSearchIsFocused } = appReducer.actions;
+export const { setShowSearch, setSearchIsFocused, setStrategyActions } = appReducer.actions;
export default appReducer.reducer;
diff --git a/store/app/types.ts b/store/app/types.ts
new file mode 100644
index 0000000..5f101fb
--- /dev/null
+++ b/store/app/types.ts
@@ -0,0 +1,5 @@
+type StrategyAction = {
+ protocol: ProtocolItem;
+ action: 'deposit' | 'stake' | 'borrow' | 'supply';
+ assetsIn: `0x${string}`[];
+};
diff --git a/store/index.ts b/store/index.ts
index acae75d..2d995cc 100644
--- a/store/index.ts
+++ b/store/index.ts
@@ -8,6 +8,7 @@ import appReducer from './app';
import smartAccountReducer from './smartAccount';
import poolReducer from './pools';
import accountReducer from './account';
+import toastReducer from './toast';
export interface CallbackProps {
onSuccess?: Function;
@@ -20,12 +21,13 @@ const rootReducer = combineReducers({
smartAccount: smartAccountReducer,
pools: poolReducer,
account: accountReducer,
+ toast: toastReducer,
});
const persistConfig = {
key: 'root',
storage: AsyncStorage,
- whitelist: ['user', 'pools', 'smartAccount', 'account'],
+ whitelist: ['user', 'smartAccount', 'pools'],
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
@@ -34,10 +36,12 @@ export const store = configureStore({
reducer: persistedReducer,
middleware: (getDefaultMiddleware) =>
getDefaultMiddleware({
- serializableCheck: {
- // Ignore redux-persist actions
- ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
- },
+ serializableCheck: false,
+ immutableCheck: false,
+ // serializableCheck: {
+ // // Ignore redux-persist actions
+ // ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
+ // },
}),
});
diff --git a/store/pools/actions.ts b/store/pools/actions.ts
index f28ae1f..d1e4bc0 100644
--- a/store/pools/actions.ts
+++ b/store/pools/actions.ts
@@ -1,12 +1,22 @@
import useSystemFunctions from '@/hooks/useSystemFunctions';
-import { setHotPools, setLoadingPools, setRefreshing, setTopGainers, setTrendingPools } from '.';
+import {
+ setHotPools,
+ setLoadingPools,
+ setpools,
+ setRefreshing,
+ setSearchedPools,
+ setSearchingPools,
+ setTopGainers,
+ setTrendingPools,
+} from '.';
import api from '@/init/api';
import { PoolType } from '@/init/types';
+import { Pool } from './types';
export function usePoolActions() {
const { dispatch, poolsState } = useSystemFunctions();
- const { hotPools, topGainers, trendingPools } = poolsState;
+ const { hotPools, topGainers, trendingPools, searchedPools } = poolsState;
const getPools = async () => {
try {
@@ -16,11 +26,23 @@ export function usePoolActions() {
dispatch(setHotPools(hotPools));
+ const topGainers = await api.getPools(PoolType.gainers);
+
+ dispatch(setTopGainers(topGainers));
+
const trendingPools = await api.getPools(PoolType.trending);
dispatch(setTrendingPools(trendingPools));
+ } catch (error: any) {
+ //
+ } finally {
+ dispatch(setLoadingPools(false));
+ }
+ };
- const topGainers = await api.getPools(PoolType.gainers);
- dispatch(setTopGainers(topGainers));
+ const getAllPools = async () => {
+ try {
+ const allPools = await api.getPools(PoolType.v2);
+ dispatch(setpools(allPools));
} catch (error: any) {
//
} finally {
@@ -37,7 +59,7 @@ export function usePoolActions() {
return dispatch(setHotPools(pools));
}
- if (hotPools.pagination.page == hotPools.pagination.totalPages) return;
+ if (!hotPools.pagination.hasMore) return;
dispatch(setLoadingPools(true));
@@ -67,7 +89,7 @@ export function usePoolActions() {
return dispatch(setTrendingPools(pools));
}
- if (trendingPools.pagination.page == trendingPools.pagination.totalPages) return;
+ if (!trendingPools.pagination.hasMore) return;
dispatch(setLoadingPools(true));
@@ -97,7 +119,7 @@ export function usePoolActions() {
return dispatch(setTopGainers(pools));
}
- if (topGainers.pagination.page == topGainers.pagination.totalPages) return;
+ if (!topGainers.pagination.hasMore) return;
dispatch(setLoadingPools(true));
@@ -119,10 +141,53 @@ export function usePoolActions() {
}
};
+ const searchPools = async (searchQuery: string) => {
+ try {
+ if (!searchQuery) return dispatch(setSearchedPools(undefined));
+
+ dispatch(setSearchingPools(true));
+
+ const pools = await api.searchPools(encodeURIComponent(searchQuery));
+
+ dispatch(setSearchedPools(pools));
+ } catch (error: any) {
+ //
+ } finally {
+ dispatch(setSearchingPools(false));
+ dispatch(setRefreshing(false));
+ }
+ };
+
+ const getPaginatedSearchPools = async (searchQuery: string) => {
+ try {
+ if (!searchedPools.pagination.hasMore || !searchQuery) return;
+
+ dispatch(setSearchingPools(true));
+
+ const nextPage = searchedPools.pagination.page + 1;
+
+ const query = `&page=${nextPage}`;
+
+ const pools = await api.searchPools(encodeURIComponent(searchQuery), query);
+
+ const newData = { ...topGainers.data, ...pools.data };
+ pools.data = newData;
+
+ dispatch(setSearchedPools(pools));
+ } catch (error: any) {
+ //
+ } finally {
+ dispatch(setSearchingPools(false));
+ }
+ };
+
return {
getPools,
getPaginatedHotPools,
getPaginatedTrendingPools,
getPaginatedTopGainers,
+ searchPools,
+ getPaginatedSearchPools,
+ getAllPools,
};
}
diff --git a/store/pools/index.ts b/store/pools/index.ts
index 1d301bd..9154401 100644
--- a/store/pools/index.ts
+++ b/store/pools/index.ts
@@ -8,9 +8,12 @@ export interface PoolsState {
trendingPools: PoolResponse;
hotPools: PoolResponse;
topGainers: PoolResponse;
+ searchedPools: PoolResponse;
selectedPool: Pool | undefined;
loadingPools: boolean;
refreshingPools: boolean;
+ searchingPools: boolean;
+ recentSearchedPools: Pool[];
}
const initialState: PoolsState = {
@@ -18,9 +21,12 @@ const initialState: PoolsState = {
trendingPools: defaultPoolResponse,
hotPools: defaultPoolResponse,
topGainers: defaultPoolResponse,
+ searchedPools: defaultPoolResponse,
selectedPool: undefined,
loadingPools: false,
refreshingPools: false,
+ searchingPools: false,
+ recentSearchedPools: [],
};
export const poolReducer = createSlice({
@@ -35,6 +41,10 @@ export const poolReducer = createSlice({
state.loadingPools = action.payload;
},
+ setSearchingPools: (state, action: PayloadAction) => {
+ state.searchingPools = action.payload;
+ },
+
setpools: (state, action: PayloadAction) => {
if (action.payload) {
state.pools = { ...action.payload };
@@ -47,7 +57,7 @@ export const poolReducer = createSlice({
if (action.payload) {
state.hotPools = { ...action.payload };
} else {
- state.hotPools = defaultPoolResponse;
+ state.hotPools = { ...defaultPoolResponse };
}
},
@@ -59,7 +69,7 @@ export const poolReducer = createSlice({
if (action.payload) {
state.topGainers = { ...action.payload };
} else {
- state.topGainers = defaultPoolResponse;
+ state.topGainers = { ...defaultPoolResponse };
}
},
@@ -67,13 +77,48 @@ export const poolReducer = createSlice({
if (action.payload) {
state.trendingPools = { ...action.payload };
} else {
- state.trendingPools = defaultPoolResponse;
+ state.trendingPools = { ...defaultPoolResponse };
+ }
+ },
+
+ setSearchedPools: (state, action: PayloadAction) => {
+ if (action.payload) {
+ state.searchedPools = { ...action.payload };
+ } else {
+ state.searchedPools = { ...defaultPoolResponse };
}
},
+
+ setRecentSearchedPool: (state, action: PayloadAction) => {
+ const newPool = action.payload;
+
+ if (!state.recentSearchedPools.some((pool) => pool.address === newPool.address)) {
+ state.recentSearchedPools = [newPool, ...state.recentSearchedPools];
+
+ if (state.recentSearchedPools.length > 10) {
+ state.recentSearchedPools.pop();
+ }
+ }
+ },
+
+ clearRecentSearchedPools: (state) => {
+ state.recentSearchedPools = [];
+ },
},
});
-export const { setLoadingPools, setpools, setTrendingPools, setHotPools, setTopGainers, setRefreshing, setSelectedPool } =
- poolReducer.actions;
+export const {
+ setLoadingPools,
+ setpools,
+ setTrendingPools,
+ setHotPools,
+ setTopGainers,
+ setRefreshing,
+ setSelectedPool,
+ setSearchingPools,
+ setSearchedPools,
+ setRecentSearchedPool,
+ clearRecentSearchedPools,
+} = poolReducer.actions;
export default poolReducer.reducer;
diff --git a/store/pools/types.ts b/store/pools/types.ts
index d4418cf..13eec23 100644
--- a/store/pools/types.ts
+++ b/store/pools/types.ts
@@ -5,8 +5,7 @@ export type PoolResponse = {
pagination: {
limit: number;
page: number;
- total: number;
- totalPages: number;
+ hasMore: boolean;
};
};
@@ -15,53 +14,44 @@ export const defaultPoolResponse = {
pagination: {
limit: 10,
page: 0,
- total: 0,
- totalPages: 1,
+ hasMore: true,
},
};
export type Pool = {
address: Address;
decimals: number;
- emissions: {
- rate: string;
- tokenAddress: Address;
- };
- factory: Address;
- fees: {
- address: Address;
- poolFee: number;
- token0: string;
- token1: string;
- unstakedFee: number;
- };
- gauge: {
- address: Address;
- isAlive: boolean;
- liquidity: string;
- };
- isStable: boolean;
symbol: string;
+ apr: number;
+ tvl: number;
+ totalVolumeUSD: number;
+ totalFeesUSD: number;
+ poolFee: number;
+ txCount: number;
+ isStable: boolean;
+ factory: Address;
+ quoteTokenPriceBaseToken: number;
+ baseTokenPriceQuoteToken: number;
token0: {
address: Address;
logoUrl: string;
- price: string;
- reserve: string;
- staked: string;
+ price: number;
+ reserve: number;
+ reserveUSD: number;
+ volume: string;
};
token1: {
address: Address;
logoUrl: string;
- price: string;
- reserve: string;
- staked: string;
+ price: number;
+ reserve: number;
+ reserveUSD: number;
+ volume: string;
};
- totalLiquidity: string;
- tvl: string;
- type: string;
- volume: {
- token0: string;
- token1: string;
- usd: string;
+ historicalVolumeUSD: {
+ m5: number;
+ h1: number;
+ h6: number;
+ h24: number;
};
};
diff --git a/store/smartAccount/actions.ts b/store/smartAccount/actions.ts
index ffb72b4..3ff47fb 100644
--- a/store/smartAccount/actions.ts
+++ b/store/smartAccount/actions.ts
@@ -2,10 +2,9 @@ import { toCoinbaseSmartAccount, toWebAuthnAccount } from 'viem/account-abstract
import * as Passkeys from 'react-native-passkeys';
import { setAddress, setRegistrationOptions } from '@/store/smartAccount';
-import { CreatePassKeyCredentialOptions } from '@/init/types';
-import { publicClient } from '@/init/viem';
+import { CreatePassKeyCredentialOptions, VerifyAuthResponse } from '@/init/types';
+import { publicClient } from '@/init/client';
import { rpId } from '@/constants/env';
-import { getPublicKeyHex } from '@/utils/base64';
import useSystemFunctions from '@/hooks/useSystemFunctions';
import { createSmartAccount } from './create';
@@ -15,10 +14,13 @@ import { RegistrationOptionsNotAvailableError } from './errors';
import { setLpBalance, setPositions, setTokenBalance, setTokens } from '../account';
import api from '@/init/api';
import { useAuth } from '@/providers';
+import { Hex } from 'viem';
+import { AuthenticationResponseJSON } from 'react-native-passkeys/build/ReactNativePasskeys.types';
+import { base64URLStringToHex } from '@/utils/base64';
export function useSmartAccountActions() {
const { dispatch, router, smartAccountState } = useSystemFunctions();
- const { setSession } = useAuth();
+ const { setSession, session } = useAuth();
const updateRegistrationOptions = (options: CreatePassKeyCredentialOptions) => {
dispatch(setRegistrationOptions(options.data));
@@ -39,12 +41,12 @@ export function useSmartAccountActions() {
};
const getSmartAccount = async () => {
- const { publicKey, registrationResponse } = await getPersistedSmartAccountInfo();
+ const { publicKey, credentialID } = await getPersistedSmartAccountInfo();
const webAuthnAccount = toWebAuthnAccount({
credential: {
- id: registrationResponse.credentialId,
- publicKey: getPublicKeyHex(publicKey),
+ id: credentialID,
+ publicKey,
},
getFn,
rpId,
@@ -55,22 +57,39 @@ export function useSmartAccountActions() {
owners: [webAuthnAccount],
});
- return smartAccount;
+ return { webAuthnAccount, smartAccount };
};
const login = async (userName: string) => {
try {
const authOptions = await api.getAuthenticationOptions(userName);
- const passkey = await Passkeys.get({ challenge: authOptions.data.challenge, rpId: authOptions.data.rpId });
- if (!passkey) {
+ const passkeyResult = await Passkeys.get({ challenge: authOptions.data.challenge, rpId: authOptions.data.rpId });
+ if (!passkeyResult) {
throw new Error('No passkey found');
}
+
+ const authenticationResponse: VerifyAuthResponse = {
+ id: passkeyResult.id,
+ rawId: passkeyResult.rawId,
+ response: {
+ authenticatorData: passkeyResult.response.authenticatorData,
+ clientDataJSON: passkeyResult.response.clientDataJSON,
+ signature: passkeyResult.response.signature,
+ userHandle: passkeyResult.response.userHandle!,
+ },
+ type: 'public-key',
+ authenticatorAttachment: 'platform',
+ };
+
+ const verification = await api.verifyAuthentication(userName, authenticationResponse);
+
+ console.log(verification.data.publicKey, 'update');
+
const webAuthnAccount = toWebAuthnAccount({
credential: {
- id: passkey.id,
- // should be the publickey tied to the credential ID
- publicKey: getPublicKeyHex(passkey.response.signature),
+ id: passkeyResult.id,
+ publicKey: verification.data.publicKey as `0x${string}`,
},
getFn,
rpId,
@@ -79,6 +98,12 @@ export function useSmartAccountActions() {
client: publicClient,
owners: [webAuthnAccount],
});
+
+ await persistSmartAccountInfo({
+ publicKey: verification.data.publicKey as `0x${string}`,
+ credentialID: passkeyResult.id,
+ });
+
setSession(smartAccount);
dispatch(setAddress(smartAccount.address));
return router.replace('/(tabs)/home');
@@ -87,12 +112,18 @@ export function useSmartAccountActions() {
}
};
+ const signTransaction = async (hash: Hex) => {
+ const { webAuthnAccount } = await getSmartAccount();
+ const signatureData = await webAuthnAccount.sign({ hash });
+
+ return signatureData;
+ };
const logout = async () => {
try {
dispatch(setAddress(null));
- dispatch(setTokens([]));
+ dispatch(setTokens(undefined));
dispatch(setTokenBalance(0));
- dispatch(setPositions([]));
+ dispatch(setPositions(undefined));
dispatch(setLpBalance(0));
await clearPersistedSmartAccountInfo();
@@ -108,5 +139,6 @@ export function useSmartAccountActions() {
getSmartAccount,
logout,
login,
+ signTransaction,
};
}
diff --git a/store/smartAccount/create.ts b/store/smartAccount/create.ts
index 3cc10c2..bfbd129 100644
--- a/store/smartAccount/create.ts
+++ b/store/smartAccount/create.ts
@@ -3,10 +3,10 @@ import * as Passkeys from 'react-native-passkeys';
import { toCoinbaseSmartAccount, toWebAuthnAccount } from 'viem/account-abstraction';
import api from '@/init/api';
-import { publicClient } from '@/init/viem';
+import { publicClient } from '@/init/client';
import { isDev, rpId } from '@/constants/env';
import { SmartAccount, Address, SmartAccountPersistedInfo, VerifyRegistration } from '@/init/types';
-import { getPublicKeyHex } from '@/utils/base64';
+import { base64URLStringToHex } from '@/utils/base64';
import { getFn } from './getFn';
import { FailedToCreatePasskeyCredentialError, FailedToUpdateUserAddressError, PasskeyNotSupportedError } from './errors';
@@ -29,18 +29,33 @@ export async function createSmartAccount(registrationOptions: PublicKeyCredentia
}
const credentialId = credential.id;
- const { attestationObject, clientDataJSON, publicKey } = credential.response;
+ const { attestationObject, clientDataJSON } = credential.response;
const registrationResponse = {
credentialId,
attestationObject,
clientDataJSON,
};
+ const publicKeyHex = base64URLStringToHex(credential.response.getPublicKey());
+ const smartAccountInfo: VerifyRegistration = {
+ username: registrationOptions.user.name,
+ pubKey: publicKeyHex.toString(),
+ id: registrationResponse.credentialId,
+ rawId: registrationResponse.credentialId,
+ response: {
+ attestationObject: registrationResponse.attestationObject,
+ clientDataJSON: registrationResponse.clientDataJSON,
+ },
+ type: 'public-key',
+ authenticatorAttachment: 'platform',
+ };
+
+ await api.verifyRegistration(smartAccountInfo);
const webAuthnAccount = toWebAuthnAccount({
credential: {
id: registrationResponse.credentialId,
- publicKey: getPublicKeyHex(publicKey),
+ publicKey: publicKeyHex,
},
getFn,
rpId,
@@ -54,20 +69,6 @@ export async function createSmartAccount(registrationOptions: PublicKeyCredentia
const address = await smartAccount.getAddress();
const username = registrationOptions.user.name;
- const smartAccountInfo: VerifyRegistration = {
- username: registrationOptions.user.name,
- id: registrationResponse.credentialId,
- rawId: registrationResponse.credentialId,
- response: {
- attestationObject: registrationResponse.attestationObject,
- clientDataJSON: registrationResponse.clientDataJSON,
- },
- type: 'public-key',
- authenticatorAttachment: 'platform',
- };
-
- await api.verifyRegistration(smartAccountInfo);
-
const updateUserAddressResponse = await api.updateUserAddress(username, address);
if (!updateUserAddressResponse.success) {
throw new FailedToUpdateUserAddressError();
@@ -77,8 +78,8 @@ export async function createSmartAccount(registrationOptions: PublicKeyCredentia
smartAccount,
address,
smartAccountInfo: {
- publicKey,
- registrationResponse,
+ publicKey: publicKeyHex,
+ credentialID: smartAccountInfo.id,
},
};
} catch (error: any) {
diff --git a/store/smartAccount/getFn.ts b/store/smartAccount/getFn.ts
index fb6bf27..a9cdc74 100644
--- a/store/smartAccount/getFn.ts
+++ b/store/smartAccount/getFn.ts
@@ -1,7 +1,7 @@
import * as Passkeys from 'react-native-passkeys';
import type { SignParameters } from 'webauthn-p256';
-import { base64ToBytes, bufferToBase64URLString } from '@/utils/base64';
+import { base64URLStringToBuffer, bufferToBase64URLString } from '@/utils/base64';
import { CredentialRequestOptionsNotAvailableError, FailedToGetPasskeyCredentialError } from './errors';
@@ -35,9 +35,9 @@ export const getFn: GetFnType = async (options) => {
id: result.id,
type: 'public-key',
response: {
- authenticatorData: base64ToBytes(result.response.authenticatorData),
- clientDataJSON: base64ToBytes(result.response.clientDataJSON),
- signature: base64ToBytes(result.response.signature),
+ authenticatorData: base64URLStringToBuffer(result.response.authenticatorData),
+ clientDataJSON: base64URLStringToBuffer(result.response.clientDataJSON),
+ signature: base64URLStringToBuffer(result.response.signature),
},
};
diff --git a/store/toast/actions.ts b/store/toast/actions.ts
new file mode 100644
index 0000000..5904d03
--- /dev/null
+++ b/store/toast/actions.ts
@@ -0,0 +1,24 @@
+import { useDispatch } from 'react-redux';
+import { hideToast, showToast } from './index';
+import { Toast } from './types';
+
+export function useToastActions() {
+ const dispatch = useDispatch();
+
+ const showToastAction = ({ title, description, variant }: Toast) => {
+ dispatch(showToast({ title, description, variant }));
+
+ setTimeout(() => {
+ dispatch(hideToast());
+ }, 4000);
+ };
+
+ const hideToastAction = () => {
+ dispatch(hideToast());
+ };
+
+ return {
+ showToast: showToastAction,
+ hideToast: hideToastAction,
+ };
+}
diff --git a/store/toast/index.ts b/store/toast/index.ts
new file mode 100644
index 0000000..f72fcc7
--- /dev/null
+++ b/store/toast/index.ts
@@ -0,0 +1,33 @@
+import { createSlice, PayloadAction } from '@reduxjs/toolkit';
+import { Toast } from './types';
+
+const initialState: Toast = {
+ title: '',
+ description: '',
+ variant: 'success',
+ isVisible: false,
+};
+
+export const toastReducer = createSlice({
+ name: 'toast',
+ initialState,
+ reducers: {
+ showToast: (state, action: PayloadAction) => {
+ const { title, description, variant } = action.payload;
+ state.title = title;
+ state.description = description;
+ state.variant = variant;
+ state.isVisible = true;
+ },
+
+ hideToast: (state) => {
+ state.isVisible = false;
+ state.title = '';
+ state.description = '';
+ },
+ },
+});
+
+export const { showToast, hideToast } = toastReducer.actions;
+
+export default toastReducer.reducer;
diff --git a/store/toast/types.ts b/store/toast/types.ts
new file mode 100644
index 0000000..2939804
--- /dev/null
+++ b/store/toast/types.ts
@@ -0,0 +1,6 @@
+export type Toast = {
+ title: string;
+ description: string;
+ variant: 'success' | 'error';
+ isVisible?: boolean;
+};
diff --git a/utils/base64.ts b/utils/base64.ts
index 767b86c..dd2101d 100644
--- a/utils/base64.ts
+++ b/utils/base64.ts
@@ -1,5 +1,39 @@
-import base64 from '@hexagon/base64';
-import { Hex } from 'viem';
+import { bytesToBigInt, hexToBytes, type Hex } from 'viem';
+
+// ! taken from https://github.com/MasterKale/SimpleWebAuthn/blob/e02dce6f2f83d8923f3a549f84e0b7b3d44fa3da/packages/browser/src/helpers/base64URLStringToBuffer.ts
+/**
+ * Convert from a Base64URL-encoded string to an Array Buffer. Best used when converting a
+ * credential ID from a JSON string to an ArrayBuffer, like in allowCredentials or
+ * excludeCredentials
+ *
+ * Helper method to compliment `bufferToBase64URLString`
+ */
+export function base64URLStringToBuffer(base64URLString: string): ArrayBuffer {
+ // Convert from Base64URL to Base64
+ const base64 = base64URLString.replace(/-/g, '+').replace(/_/g, '/');
+ /**
+ * Pad with '=' until it's a multiple of four
+ * (4 - (85 % 4 = 1) = 3) % 4 = 3 padding
+ * (4 - (86 % 4 = 2) = 2) % 4 = 2 padding
+ * (4 - (87 % 4 = 3) = 1) % 4 = 1 padding
+ * (4 - (88 % 4 = 0) = 4) % 4 = 0 padding
+ */
+ const padLength = (4 - (base64.length % 4)) % 4;
+ const padded = base64.padEnd(base64.length + padLength, '=');
+
+ // Convert to a binary string
+ const binary = atob(padded);
+
+ // Convert binary string to buffer
+ const buffer = new ArrayBuffer(binary.length);
+ const bytes = new Uint8Array(buffer);
+
+ for (let i = 0; i < binary.length; i++) {
+ bytes[i] = binary.charCodeAt(i);
+ }
+
+ return buffer;
+}
// ! taken from https://github.com/MasterKale/SimpleWebAuthn/blob/e02dce6f2f83d8923f3a549f84e0b7b3d44fa3da/packages/browser/src/helpers/bufferToBase64URLString.ts
/**
@@ -21,47 +55,25 @@ export function bufferToBase64URLString(buffer: ArrayBuffer): string {
return base64String.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
}
-// ! taken from https://github.com/MasterKale/SimpleWebAuthn/blob/e02dce6f2f83d8923f3a549f84e0b7b3d44fa3da/packages/browser/src/helpers/utf8StringToBuffer.ts
-/**
- * A helper method to convert an arbitrary string sent from the server to an ArrayBuffer the
- * authenticator will expect.
- */
-export function utf8StringToBuffer(value: string): ArrayBuffer {
- return new TextEncoder().encode(value);
+export function hexToBuffer(hexString: Hex): ArrayBuffer {
+ const bytes =
+ hexString
+ .slice(2)
+ .match(/.{1,2}/g)
+ ?.map((byte) => parseInt(byte, 16)) ?? [];
+ return Uint8Array.from(bytes);
}
-/**
- * Decode a base64url string into its original string
- */
-export function base64UrlToString(base64UrlString: string): string {
- return base64.toString(base64UrlString, true);
+export function bufferToHex(buffer: ArrayBuffer): Hex {
+ return `0x${[...new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, '0')).join('')}`;
}
-// Base64 strings typically have a length that is a multiple of 4 and may end with one or two = characters for padding
-function isBase64(str: string): boolean {
- const base64Regex = /^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/;
- return base64Regex.test(str);
+export function base64URLStringToHex(base64URLString: string): Hex {
+ return bufferToHex(base64URLStringToBuffer(base64URLString));
}
-export function base64URLStringToBuffer(base64URLString: string): ArrayBuffer {
- if (!isBase64(base64URLString)) {
- throw new Error('Invalid base64URLString');
- }
-
- // Convert base64url to standard base64
- const base64String = base64URLString.replace(/-/g, '+').replace(/_/g, '/');
-
- // Decode base64 to a string
- const decodedString = base64.toString(base64String);
-
- // Convert the string to an ArrayBuffer
- const buffer = new ArrayBuffer(decodedString.length);
- const view = new Uint8Array(buffer);
- for (let i = 0; i < decodedString.length; i++) {
- view[i] = decodedString.charCodeAt(i);
- }
-
- return buffer;
+export function hexToBase64URLString(hexString: Hex): string {
+ return bufferToBase64URLString(hexToBuffer(hexString));
}
/**
@@ -87,9 +99,18 @@ export function base64ToBytes(base64String: string): Uint8Array {
return bytes;
}
-export function getPublicKeyHex(publicKey: string): Hex {
- const publicKeyBuffer = utf8StringToBuffer(publicKey);
- return `0x${Array.from(new Uint8Array(publicKeyBuffer))
- .map((byte) => byte.toString(16).padStart(2, '0'))
- .join('')}` as Hex;
+export function parseAndNormalizeSig(sig: Hex): { r: bigint; s: bigint } {
+ const bSig = hexToBytes(sig);
+ // assert(bSig.length === 64, "signature is not 64 bytes");
+ const bR = bSig.slice(0, 32);
+ const bS = bSig.slice(32);
+
+ // Avoid malleability. Ensure low S (<= N/2 where N is the curve order)
+ const r = bytesToBigInt(bR);
+ let s = bytesToBigInt(bS);
+ const n = BigInt('0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551');
+ if (s > n / 2n) {
+ s = n - s;
+ }
+ return { r, s };
}
diff --git a/utils/calls.ts b/utils/calls.ts
deleted file mode 100644
index a8354dc..0000000
--- a/utils/calls.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import { Address, Hex } from 'viem';
-import { buildUserOp, getPaymasterData, getUserOpHash } from './wallet';
-import { Call } from './types';
-import { entryPoint06Address } from 'viem/_types/account-abstraction';
-import { paymasterClient, bundlerClient } from '@/init/viem';
-import { useAuth } from '@/providers';
-
-// Main function to execute calls
-export async function makeCalls({ calls, account }: { calls: Call[]; account: Address }) {
- // Build the user operation
- const op = await buildUserOp(account, bundlerClient, {
- calls,
- paymasterAndData: '0x', // Initialize with empty paymaster data
- });
-
- // Set verification gas limit
- op.verificationGasLimit = 800000n;
-
- // Get paymaster data
- const paymasterResult = await getPaymasterData({
- paymasterClient: paymasterClient,
- callData: op.callData,
- sender: op.sender,
- nonce: op.nonce,
- initCode: op.initCode,
- maxFeePerGas: op.maxFeePerGas,
- maxPriorityFeePerGas: op.maxPriorityFeePerGas,
- callGasLimit: op.callGasLimit,
- verificationGasLimit: op.verificationGasLimit,
- preVerificationGas: op.preVerificationGas,
- });
-
- // Update operation with paymaster data
- op.paymasterAndData = paymasterResult.paymasterAndData;
-
- // Get the operation hash
- const hash = getUserOpHash({
- userOperation: op,
- chainId: 8543n,
- });
-
- // TODO: get smart wallet from reducer and sign the hash
-
- const signature =
- '0xc66a718123aa330c0d00439ed337bc6721c20298be9fb50bb0e8723b6340a7dc65bc37d891cb278953722d0a93f6daf784dde4e1396e8f57acc64c8d1ea9a602';
-
- op.signature = signature;
-
- // Send the user operation
- const opHash = await bundlerClient.sendUserOperation({
- userOperation: op,
- entryPoint: entryPoint06Address,
- });
-
- return {
- opHash,
- userOpHash: hash,
- };
-}
diff --git a/utils/encoders.ts b/utils/encoders.ts
index 7d31fea..5fd975c 100644
--- a/utils/encoders.ts
+++ b/utils/encoders.ts
@@ -1,6 +1,12 @@
-import { Address, Hex, encodeFunctionData } from 'viem';
-import { AerodromeConnectorABI, ConnectorPluginABI } from '@/constants/abis';
-import { IRouter } from '@/hooks/types';
+import { Address, Hex, encodeFunctionData, encodeAbiParameters, parseAbiParameters, erc20Abi } from 'viem';
+import { AerodromeConnectorABI, ConnectorPluginABI, LiquidStrategy } from '@/constants/abis';
+
+interface RouteStruct {
+ from: Address;
+ to: Address;
+ stable: boolean;
+ factory: Address;
+}
export function encodePluginExecute(connector: Address, data: Hex) {
return encodeFunctionData({
@@ -21,6 +27,7 @@ export function encodeAddLiquidity({
balanceTokenRatio,
to,
deadline,
+ caller,
}: {
tokenA: Address;
tokenB: Address;
@@ -32,11 +39,28 @@ export function encodeAddLiquidity({
balanceTokenRatio: boolean;
to: Address;
deadline: bigint;
+ caller: Address;
}) {
+ const params = encodeAbiParameters(parseAbiParameters('bytes, address'), [
+ encodeAbiParameters(parseAbiParameters('address, address, bool, uint256, uint256, uint256, uint256, bool, address, uint256'), [
+ tokenA,
+ tokenB,
+ stable,
+ amountAIn,
+ amountBIn,
+ amountAMin,
+ amountBMin,
+ balanceTokenRatio,
+ to,
+ deadline,
+ ]),
+ caller,
+ ]);
+
return encodeFunctionData({
abi: AerodromeConnectorABI.abi,
- functionName: 'addLiquidity',
- args: [tokenA, tokenB, stable, amountAIn, amountBIn, amountAMin, amountBMin, balanceTokenRatio, to, deadline],
+ functionName: 'execute',
+ args: [params],
});
}
@@ -49,6 +73,7 @@ export function encodeRemoveLiquidity({
amountBMin,
to,
deadline,
+ caller,
}: {
tokenA: Address;
tokenB: Address;
@@ -58,11 +83,26 @@ export function encodeRemoveLiquidity({
amountBMin: bigint;
to: Address;
deadline: bigint;
+ caller: Address;
}) {
+ const params = encodeAbiParameters(parseAbiParameters('bytes, address'), [
+ encodeAbiParameters(parseAbiParameters('address, address, bool, uint256, uint256, uint256, address, uint256'), [
+ tokenA,
+ tokenB,
+ stable,
+ liquidity,
+ amountAMin,
+ amountBMin,
+ to,
+ deadline,
+ ]),
+ caller,
+ ]);
+
return encodeFunctionData({
abi: AerodromeConnectorABI.abi,
- functionName: 'removeLiquidity',
- args: [tokenA, tokenB, stable, liquidity, amountAMin, amountBMin, to, deadline],
+ functionName: 'execute',
+ args: [params],
});
}
@@ -72,24 +112,69 @@ export function encodeSwap({
routes,
to,
deadline,
+ caller,
}: {
amountIn: bigint;
minReturnAmount: bigint;
- routes: IRouter.RouteStruct[];
+ routes: RouteStruct[];
to: Address;
deadline: bigint;
+ caller: Address;
}) {
+ const params = encodeAbiParameters(parseAbiParameters('bytes, address'), [
+ encodeAbiParameters(
+ [
+ { type: 'uint256' },
+ { type: 'uint256' },
+ {
+ type: 'tuple[]',
+ components: [
+ { name: 'from', type: 'address' },
+ { name: 'to', type: 'address' },
+ { name: 'stable', type: 'bool' },
+ { name: 'factory', type: 'address' },
+ ],
+ },
+ { type: 'address' },
+ { type: 'uint256' },
+ ],
+ [amountIn, minReturnAmount, routes, to, deadline]
+ ),
+ caller,
+ ]);
+
return encodeFunctionData({
abi: AerodromeConnectorABI.abi,
- functionName: 'swapExactTokensForTokens',
- args: [amountIn, minReturnAmount, routes, to, deadline],
+ functionName: 'execute',
+ args: [params],
});
}
-export function encodeStake({ gaugeAddress, amount }: { gaugeAddress: Address; amount: bigint }) {
+export function encodeStake({ gaugeAddress, amount, caller }: { gaugeAddress: Address; amount: bigint; caller: Address }) {
+ const params = encodeAbiParameters(parseAbiParameters('bytes, address'), [
+ encodeAbiParameters(parseAbiParameters('address, uint256'), [gaugeAddress, amount]),
+ caller,
+ ]);
+
return encodeFunctionData({
abi: AerodromeConnectorABI.abi,
- functionName: 'deposit',
- args: [gaugeAddress, amount],
+ functionName: 'execute',
+ args: [params],
+ });
+}
+
+export function encodeApprove({ amount, spender }: { amount: bigint; spender: Address }) {
+ return encodeFunctionData({
+ abi: erc20Abi,
+ functionName: 'approve',
+ args: [spender, amount],
+ });
+}
+
+export function encodeCreateStrategy({ description, maxTvl, minDeposit, name, performanceFee, steps }: StrategyBody) {
+ return encodeFunctionData({
+ abi: LiquidStrategy.LiquidStrategy.abi,
+ functionName: 'createStrategy',
+ args: [name, description, steps, minDeposit, maxTvl, performanceFee],
});
}
diff --git a/utils/helpers.ts b/utils/helpers.ts
index 38c6439..f35b642 100644
--- a/utils/helpers.ts
+++ b/utils/helpers.ts
@@ -1,5 +1,6 @@
-import { formatUnits } from 'viem';
+import { decodeAbiParameters, formatUnits, Hex, hexToBigInt } from 'viem';
import { Platform } from 'react-native';
+import moment from 'moment';
const formatAmount = (amount?: number | string, decimals = 4): number => {
if (!amount) return 0;
@@ -9,24 +10,30 @@ const formatAmount = (amount?: number | string, decimals = 4): number => {
return truncatedValue;
};
-const formatNumberWithSuffix = (num: number): string => {
+const formatNumberWithSuffix = (num: number | string | undefined): string => {
+ if (!num) return '0';
+
+ const numValue = typeof num === 'string' ? Number(num) : num;
+
+ if (isNaN(numValue)) return '0';
+
const formatWithPrecision = (value: number) => {
return value % 1 === 0 ? value.toFixed(0) : value.toFixed(2).replace(/\.?0+$/, '');
};
- if (num >= 1e12) {
- return formatWithPrecision(num / 1e12) + 't';
+ if (numValue >= 1e12) {
+ return formatWithPrecision(numValue / 1e12) + 't';
}
- if (num >= 1e9) {
- return formatWithPrecision(num / 1e9) + 'b';
+ if (numValue >= 1e9) {
+ return formatWithPrecision(numValue / 1e9) + 'b';
}
- if (num >= 1e6) {
- return formatWithPrecision(num / 1e6) + 'm';
+ if (numValue >= 1e6) {
+ return formatWithPrecision(numValue / 1e6) + 'm';
}
- if (num >= 1e3) {
- return formatWithPrecision(num / 1e3) + 'k';
+ if (numValue >= 1e3) {
+ return formatWithPrecision(numValue / 1e3) + 'k';
}
- return num?.toString();
+ return numValue.toFixed(2).toString();
};
const truncateDecimal = (amount?: number | string, decimals = 4): number => {
@@ -47,6 +54,9 @@ const formatAmountWithWholeAndDecimal = (amount?: number | string, decimals = 4)
};
function removeCommasFromNumber(text: string): string {
+ if (typeof text !== 'string') {
+ text = String(text);
+ }
return text.replace(/,/g, '');
}
@@ -82,6 +92,102 @@ const emailIsValid = (email: string): boolean => {
return emailRegex.test(email);
};
+const truncate = (text: string, startChars = 5, endChars = 5) => {
+ if (text.length <= startChars + endChars) {
+ return text;
+ }
+ return `${text.substring(0, startChars)}...${text.substring(text.length - endChars)}`;
+};
+
+const roundUp = (num: number, decimals: number = 1): number => {
+ if (num >= 1) {
+ return Math.ceil(num);
+ }
+
+ if (num <= 0) return 0;
+
+ // For decimals, find next significant value
+ if (num < 0.5) return 0.3;
+ return 1;
+};
+
+const formatInputAmount = (value: string): string => {
+ let newValue = '';
+ const valueWithoutComma = value.replace(/,/g, '');
+
+ if (valueWithoutComma.length === 0) {
+ newValue = '';
+ } else {
+ // Check if the input is a valid number (including decimals)
+ const isMatch = valueWithoutComma.match(/^(\d+\.?\d*|\.\d+)$/);
+
+ if (!isMatch) return;
+
+ if (isNaN(Number(valueWithoutComma))) return;
+
+ // Format the number with local thousand separators
+ // Temporarily remove the decimal part to format the integer part
+ const parts = valueWithoutComma.split('.');
+ const integerFormatted = parseInt(parts[0]).toLocaleString();
+
+ // Reconstruct the number including the decimal part if it exists
+ newValue = parts.length > 1 ? `${integerFormatted}.${parts[1]}` : integerFormatted;
+ }
+
+ return newValue;
+};
+
+const formatSymbol = (symbol: string, showFullSymbol?: boolean) => {
+ if (!showFullSymbol) {
+ return symbol.split('-')[1].replace('/', ' / ');
+ }
+
+ if (symbol.toLowerCase().includes('volatile')) {
+ return `vAMM - ${symbol.split('-')[1].replace('/', ' / ')}`;
+ }
+
+ if (symbol.toLowerCase().includes('stable')) {
+ return `sAMM - ${symbol.split('-')[1].replace('/', ' / ')}`;
+ }
+
+ return symbol;
+};
+
+const createArrayWithIndexes = (length: number): number[] => {
+ return Array.from({ length }, (_, index) => index);
+};
+
+function splitSignature(signature: string): { r: bigint; s: bigint } {
+ let [r, s] = decodeAbiParameters([{ type: 'uint256' }, { type: 'uint256' }], signature as Hex);
+ const n = hexToBigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551');
+ if (s > n / 2n) {
+ s = n - s;
+ }
+ return { r, s };
+}
+
+export const findQuoteIndices = (input: string): { beforeType: bigint; beforeChallenge: bigint } => {
+ const beforeTypeIndex = BigInt(input.lastIndexOf('"type":"webauthn.get"'));
+ const beforeChallengeIndex = BigInt(input.indexOf('"challenge'));
+ return {
+ beforeType: beforeTypeIndex,
+ beforeChallenge: beforeChallengeIndex,
+ };
+};
+
+const formatTimestamp = (timestamp: string | number | Date): string => {
+ const now = moment();
+ const time = moment(timestamp);
+
+ const diffInHours = now.diff(time, 'hours');
+
+ if (diffInHours < 24) {
+ return time.fromNow(); // e.g., "1hr ago", "few secs ago"
+ } else {
+ return time.format('MMM D, YYYY'); // e.g., "Dec 13, 2024"
+ }
+};
+
export {
formatNumberWithSuffix,
truncateDecimal,
@@ -95,4 +201,11 @@ export {
adjustFontSizeForIOS,
formatAmount,
emailIsValid,
+ truncate,
+ roundUp,
+ formatInputAmount,
+ formatSymbol,
+ createArrayWithIndexes,
+ splitSignature,
+ formatTimestamp,
};
diff --git a/utils/signature.ts b/utils/signature.ts
index 7046025..3861d76 100644
--- a/utils/signature.ts
+++ b/utils/signature.ts
@@ -12,9 +12,9 @@ import {
import { BuildUserOperationParams, SignatureWrapperStruct, WebAuthnAuthStruct } from './types';
export function buildWebAuthnSignature({ ownerIndex, authenticatorData, clientDataJSON, r, s }: BuildUserOperationParams): Hex {
- const challengeIndex = clientDataJSON.indexOf('"challenge":');
- const typeIndex = clientDataJSON.indexOf('"type":');
-
+ const challengeIndex = clientDataJSON.indexOf('"challenge"');
+ const typeIndex = clientDataJSON.indexOf('"type"');
+ console.log(authenticatorData, clientDataJSON);
const webAuthnAuthBytes = encodeAbiParameters(
[WebAuthnAuthStruct],
[
diff --git a/utils/types.ts b/utils/types.ts
index 2c5f294..e8ae2ea 100644
--- a/utils/types.ts
+++ b/utils/types.ts
@@ -58,3 +58,35 @@ export interface PaymasterResult {
paymasterVerificationGasLimit: bigint;
paymasterPostOpGasLimit: bigint;
}
+
+export interface UserOperationV6 {
+ sender: Address;
+ nonce: bigint;
+ initCode: Hex;
+ callData: Hex;
+ callGasLimit: bigint;
+ verificationGasLimit: bigint;
+ preVerificationGas: bigint;
+ maxFeePerGas: bigint;
+ maxPriorityFeePerGas: bigint;
+ paymasterAndData: Hex;
+ signature: Hex;
+}
+
+export interface GasPrice {
+ maxFeePerGas: string;
+ maxPriorityFeePerGas: string;
+}
+
+export interface GasPriceResponse {
+ slow: GasPrice;
+ standard: GasPrice;
+ fast: GasPrice;
+}
+
+export interface GasEstimateResponse {
+ preVerificationGas: string;
+ verificationGas: string;
+ verificationGasLimit: string;
+ callGasLimit: string;
+}
diff --git a/utils/wallet.ts b/utils/wallet.ts
index bb43950..ab78e29 100644
--- a/utils/wallet.ts
+++ b/utils/wallet.ts
@@ -1,48 +1,72 @@
-import { EntryPointABI, SmartWalletABI, SmartWalletFactoryABI } from '@/constants/abis';
-import { ACCOUNT_FACTORY_ADDRESS } from '@/constants/addresses';
-import { estimateUserOperationGas, UserOperation, BundlerClient } from 'permissionless';
+import { EntryPointABI, SmartWalletABI } from '@/constants/abis';
+import { ACCOUNT_FACTORY_ADDRESS, ENTRYPOINT_V06_ADDRESS } from '@/constants/addresses';
import { Address, Chain, encodeAbiParameters, encodeFunctionData, Hex, keccak256, PublicClient, Transport } from 'viem';
-import { entryPoint06Abi, entryPoint06Address, PaymasterClient } from 'viem/_types/account-abstraction';
-import { estimateFeesPerGas, getBytecode, readContract } from 'viem/actions';
-import { Call, PaymasterResult } from './types';
+import {
+ entryPoint06Abi,
+ entryPoint06Address,
+ estimateUserOperationGas,
+ getUserOperationHash,
+ PaymasterClient,
+ UserOperation,
+} from 'viem/account-abstraction';
+import { estimateFeesPerGas, getCode, readContract } from 'viem/actions';
+import { Call, GasEstimateResponse, GasPriceResponse, PaymasterResult, UserOperationV6 } from './types';
+import { SmartAccountClient } from 'permissionless';
+import { bundlerClient, publicClient } from '@/init/client';
+import { smartWalletFactoryAbi } from '@/constants/abis/SmartWalletFactory';
+import { pimilcoRPCURL } from '@/constants/env';
+import { smartWalletABI } from '@/constants/abis/SmartWallet';
export const PASSKEY_OWNER_DUMMY_SIGNATURE: Hex =
- '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000001949fc7c88032b9fcb5f6efc7a7b8c63668eae9871b765e23123bb473ff57aa831a7c0d9276168ebcc29f2875a0239cffdf2a9cd1c2007c5c77c071db9264df1d000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a7b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a2273496a396e6164474850596759334b7156384f7a4a666c726275504b474f716d59576f4d57516869467773222c226f726967696e223a2268747470733a2f2f7369676e2e636f696e626173652e636f6d222c2263726f73734f726967696e223a66616c73657d00000000000000000000000000000000000000000000';
+ '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000001eef89a56cd6ebb7fa3650a467b2fb6609ff0741ee98c7db10e5199c5f32038ff56593ce0a1fd38f043ac2519b7e363720438b3c2433606098f36f5e99ef01c29000000000000000000000000000000000000000000000000000000000000004c30783937303165383131383932663033636137316438636464353239396432653538346534663734353462653439393537643463653363363630313263383264333731643030303030303030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000767b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a2257377a34326863705865626e326c656d4130375a4e723065706137627567466b534c74675f615a63743130222c226f726967696e223a2268747470733a2f2f6170692e7573656c69717569642e78797a227d00000000000000000000';
// https://github.com/wilsoncusack/scw-tx/blob/5ff88a10e928b5df9ec12bce2ef64caa0b35afcd/utils/smartWallet.ts#L10
export async function buildUserOp(
smartWalletAddress: Address,
- client: BundlerClient,
+ client: SmartAccountClient,
{
calls,
+ signers,
// If you want to sponsor user operations with a paymaster, pass in the response of the `pm_sponsorUserOperation` RPC
// to your paymaster to the `paymasterAndData` param here: https://docs.pimlico.io/infra/paymaster/verifying-paymaster/endpoints#entrypoint-v06
paymasterAndData = '0x',
}: {
calls: Call[];
+ signers: Hex[];
paymasterAndData: Hex;
}
) {
let initCode: Hex = '0x';
+ console.log(initCode, 'got here');
// `getBytecode` is imported from 'viem/actions'
// Check if the smart wallet has been deployed by seeing if there's code at that address
- const code = await getBytecode(client, { address: smartWalletAddress });
+ const code = await getCode(publicClient, { address: smartWalletAddress });
+
// If not, set `initCode` to deploy the smart wallet using the helpers above
- if (!code) {
- initCode = getInitCode({ owners: [smartWalletAddress], index: 0n });
+ if (!code || code === '0x') {
+ console.log('Wallet not deployed, generating initCode');
+
+ initCode = getInitCode({ owners: signers, index: 0n });
+ console.log('Generated initCode:', initCode);
+ console.log('Factory address used:', ACCOUNT_FACTORY_ADDRESS);
}
// Pass the transactions you want into the `buildUserOperationCalldata` helper from above to build the `callData` param for the user op
const callData = buildUserOperationCalldata({ calls });
// Get the smart wallet's `nonce` by calling the `getNonce` method on the entrypoint contract
- const nonce = await readContract(client, {
- address: entryPoint06Address,
+ const nonce = await readContract(publicClient, {
+ address: ENTRYPOINT_V06_ADDRESS,
abi: entryPoint06Abi,
functionName: 'getNonce',
args: [smartWalletAddress, 0n],
});
// Get the current gas fees from the network
- let maxFeesPerGas = await estimateFeesPerGas(client);
+ // const maxFeePerGas = await estimateFeesPerGas(publicClient);
+ const maxFeePerGas = (await getUserOperationGasPrice()).fast;
+
+ // Increase gas limits for deployment
+ const baseGasLimit = 1_000_000n;
+ const deploymentBuffer = !code ? 3n : 2n; // Double gas limits for deployment
// Put all the fields together in a user op
const op = {
@@ -51,17 +75,26 @@ export async function buildUserOp(
initCode,
callData,
paymasterAndData,
- signature: PASSKEY_OWNER_DUMMY_SIGNATURE,
- preVerificationGas: 1_000_000n,
- verificationGasLimit: 1_000_000n,
- callGasLimit: 1_000_000n,
- ...maxFeesPerGas,
+ preVerificationGas: baseGasLimit,
+ verificationGasLimit: baseGasLimit,
+ callGasLimit: baseGasLimit,
+ ...maxFeePerGas,
};
// Update user op specific gas limits like `preVerificationGas` etc.
const gasLimits = await estimateUserOperationGas(client, {
- userOperation: { ...op },
- entryPoint: entryPoint06Address,
+ sender: op.sender,
+ nonce: op.nonce,
+ initCode: op.initCode,
+ callData: op.callData,
+ paymasterAndData: op.paymasterAndData,
+ preVerificationGas: op.preVerificationGas,
+ verificationGasLimit: op.verificationGasLimit,
+ callGasLimit: op.callGasLimit,
+ maxFeePerGas: BigInt(op.maxFeePerGas),
+ maxPriorityFeePerGas: BigInt(op.maxPriorityFeePerGas),
+ signature: PASSKEY_OWNER_DUMMY_SIGNATURE,
+ entryPointAddress: entryPoint06Address,
});
return {
@@ -79,7 +112,7 @@ export function getInitCode({ owners, index }: { owners: Hex[]; index: bigint })
export function createAccountCalldata({ owners, nonce }: { owners: Hex[]; nonce: bigint }) {
return encodeFunctionData({
- abi: SmartWalletFactoryABI,
+ abi: smartWalletFactoryAbi,
functionName: 'createAccount',
args: [owners, nonce],
});
@@ -89,7 +122,7 @@ export function buildUserOperationCalldata({ calls }: { calls: Call[] }): Hex {
// sort ascending order, 0 first
const _calls = calls.sort((a, b) => a.index - b.index);
return encodeFunctionData({
- abi: SmartWalletABI,
+ abi: SmartWalletABI.smartWalletABI,
functionName: 'executeBatch',
args: [_calls],
});
@@ -121,14 +154,14 @@ export function getUserOpHash({ userOperation, chainId }: { userOperation: UserO
[
userOperation.sender,
userOperation.nonce,
- keccak256(userOperation.initCode),
+ keccak256(userOperation.initCode ?? '0x'),
keccak256(userOperation.callData),
userOperation.callGasLimit,
userOperation.verificationGasLimit,
userOperation.preVerificationGas,
userOperation.maxFeePerGas,
userOperation.maxPriorityFeePerGas,
- keccak256(userOperation.paymasterAndData),
+ keccak256(userOperation.paymasterAndData ?? '0x'),
]
);
const hashedUserOp = keccak256(encodedUserOp);
@@ -142,6 +175,63 @@ export function getUserOpHash({ userOperation, chainId }: { userOperation: UserO
);
return keccak256(encodedWithChainAndEntryPoint);
}
+export const sponsorUserOperation = async (userOperation: {
+ callData: any;
+ sender: Address;
+ nonce: bigint;
+ initCode?: Hex;
+ maxFeePerGas: bigint;
+ maxPriorityFeePerGas: bigint;
+ callGasLimit: bigint;
+ verificationGasLimit: bigint;
+ preVerificationGas: any;
+ signature: Hex;
+}) => {
+ const userOperationData = {
+ sender: userOperation.sender,
+ nonce: `0x${BigInt(userOperation.nonce).toString(16)}`, // ensure hex
+ initCode: userOperation.initCode,
+ callData: userOperation.callData,
+ callGasLimit: `0x${BigInt(userOperation.callGasLimit).toString(16)}`, // ensure hex
+ verificationGasLimit: `0x${BigInt(userOperation.verificationGasLimit).toString(16)}`, // ensure hex
+ preVerificationGas: `0x${BigInt(userOperation.preVerificationGas).toString(16)}`, // ensure hex
+ maxPriorityFeePerGas: `0x${BigInt(userOperation.maxPriorityFeePerGas).toString(16)}`, // ensure hex
+ maxFeePerGas: `0x${BigInt(userOperation.maxFeePerGas).toString(16)}`, // ensure hex
+ signature: userOperation.signature,
+ };
+ const response = await fetch(pimilcoRPCURL, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ jsonrpc: '2.0',
+ id: 1,
+ method: 'pm_sponsorUserOperation',
+ params: [
+ {
+ sender: userOperationData.sender,
+ nonce: userOperationData.nonce,
+ initCode: userOperationData.initCode,
+ callData: userOperationData.callData,
+ callGasLimit: userOperationData.callGasLimit, // Let Pimlico estimate
+ verificationGasLimit: userOperationData.verificationGasLimit, // Let Pimlico estimate
+ preVerificationGas: userOperationData.preVerificationGas, // Let Pimlico estimate
+ maxPriorityFeePerGas: userOperationData.maxPriorityFeePerGas,
+ maxFeePerGas: userOperationData.maxFeePerGas,
+ paymasterAndData: '0x',
+ signature: PASSKEY_OWNER_DUMMY_SIGNATURE,
+ },
+ ENTRYPOINT_V06_ADDRESS,
+ ],
+ }),
+ });
+
+ const sponsorResult = await response.json();
+ if (sponsorResult.error) {
+ throw new Error(`Sponsorship failed: ${sponsorResult.error.message}`);
+ }
+
+ return sponsorResult.result;
+};
export async function getPaymasterData({
paymasterClient,
@@ -170,7 +260,7 @@ export async function getPaymasterData({
}): Promise {
try {
const paymasterAndData = await paymasterClient.getPaymasterData({
- chainId: 8543,
+ chainId: 8453,
entryPointAddress: entryPoint06Address,
callData,
sender,
@@ -195,3 +285,121 @@ export async function getPaymasterData({
throw error;
}
}
+
+export const getOwnerIndex = async (publicKey: string, smartwalletAddress: Hex): Promise => {
+ const ownerCount = await readContract(publicClient, {
+ address: smartwalletAddress,
+ abi: smartWalletABI,
+ functionName: 'ownerCount',
+ args: [],
+ });
+
+ for (let i = 0n; i < ownerCount; i++) {
+ const ownerBytes = await readContract(publicClient, {
+ address: smartwalletAddress,
+ abi: smartWalletABI,
+ functionName: 'ownerAtIndex',
+ args: [i],
+ });
+ // For WebAuthn owners, check the public key matches
+ if (ownerBytes.length === 64) {
+ // Compare with your public key coordinates
+ if (ownerBytes === publicKey) {
+ return i;
+ }
+ }
+ }
+
+ throw new Error('Owner not found');
+};
+
+export const sendUserOperation = async (userOperation: UserOperationV6) => {
+ const userOperationData = {
+ sender: userOperation.sender,
+ nonce: `0x${userOperation.nonce.toString(16)}`,
+ initCode: userOperation.initCode,
+ callData: userOperation.callData,
+ callGasLimit: `0x${userOperation.callGasLimit.toString(16)}`,
+ verificationGasLimit: `0x${userOperation.verificationGasLimit.toString(16)}`,
+ preVerificationGas: `0x${userOperation.preVerificationGas.toString(16)}`,
+ maxFeePerGas: `0x${userOperation.maxFeePerGas.toString(16)}`,
+ maxPriorityFeePerGas: `0x${userOperation.maxPriorityFeePerGas.toString(16)}`,
+ paymasterAndData: userOperation.paymasterAndData,
+ signature: userOperation.signature,
+ };
+
+ const response = await fetch(pimilcoRPCURL, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ jsonrpc: '2.0',
+ id: 1,
+ method: 'eth_sendUserOperation',
+ params: [userOperationData, entryPoint06Address],
+ }),
+ });
+
+ const result = await response.json();
+ if (result.error) {
+ throw new Error(`Failed to send user operation: ${result.error.message}`);
+ }
+
+ return result.result as Hex;
+};
+
+export const getUserOperationGasPrice = async (): Promise => {
+ const response = await fetch(pimilcoRPCURL, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ jsonrpc: '2.0',
+ method: 'pimlico_getUserOperationGasPrice',
+ params: [],
+ id: 1,
+ }),
+ });
+
+ const result = await response.json();
+ if (result.error) {
+ throw new Error(`Failed to get gas price: ${result.error.message}`);
+ }
+
+ return result.result as GasPriceResponse;
+};
+
+export const estimateUserOperationGasInternal = async (userOperation: UserOperation): Promise => {
+ const formattedUserOp = {
+ sender: userOperation.sender,
+ nonce: `0x${userOperation.nonce.toString(16)}`,
+ initCode: userOperation.initCode,
+ callData: userOperation.callData,
+ callGasLimit: '0x0',
+ verificationGasLimit: '0x0',
+ preVerificationGas: '0x0',
+ maxFeePerGas: `0x${userOperation.maxFeePerGas.toString(16)}`,
+ maxPriorityFeePerGas: `0x${userOperation.maxPriorityFeePerGas.toString(16)}`,
+ paymasterAndData: userOperation.paymasterAndData,
+ signature:
+ '0x00000000fffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c',
+ };
+
+ const params = [formattedUserOp, entryPoint06Address];
+
+ const response = await fetch(pimilcoRPCURL, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ jsonrpc: '2.0',
+ method: 'eth_estimateUserOperationGas',
+ params,
+ id: 1,
+ }),
+ });
+
+ const result = await response.json();
+ if (result.error) {
+ throw new Error(`Failed to estimate gas: ${result.error.message}`);
+ }
+
+ return result.result;
+};
diff --git a/yarn.lock b/yarn.lock
index 82d87e6..1d94d04 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3,11 +3,11 @@
"@0no-co/graphql.web@^1.0.5":
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.8.tgz#20682c7839b0b5b7728ad944a8602ca46d983e75"
- integrity sha512-8BG6woLtDMvXB9Ajb/uE+Zr/U7y4qJ3upXi0JQHZmsKUJa7HjF/gFvmL2f3/mSmfZoQGRr9VoY97LCX2uaFMzA==
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.12.tgz#5fab8caaf5e6dae88e31111305f93dfd152de2fb"
+ integrity sha512-BTDjjsV/zSPy5fqItwm+KWUfh9CSe9tTtR6rCB72ddtkAxdcHbi4Ir4r/L1Et4lyxmL+i7Rb3m9sjLLi9tYrzA==
-"@adraffy/ens-normalize@1.11.0":
+"@adraffy/ens-normalize@^1.10.1":
version "1.11.0"
resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz#42cc67c5baa407ac25059fcd7d405cc5ecdb0c33"
integrity sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==
@@ -27,34 +27,35 @@
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.25.7.tgz#438f2c524071531d643c6f0188e1e28f130cebc7"
- integrity sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2":
+ version "7.26.2"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
+ integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
dependencies:
- "@babel/highlight" "^7.25.7"
+ "@babel/helper-validator-identifier" "^7.25.9"
+ js-tokens "^4.0.0"
picocolors "^1.0.0"
-"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.7":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.8.tgz#0376e83df5ab0eb0da18885c0140041f0747a402"
- integrity sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==
+"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02"
+ integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==
"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0", "@babel/core@^7.23.9":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.8.tgz#a57137d2a51bbcffcfaeba43cb4dd33ae3e0e1c6"
- integrity sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40"
+ integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.25.7"
- "@babel/generator" "^7.25.7"
- "@babel/helper-compilation-targets" "^7.25.7"
- "@babel/helper-module-transforms" "^7.25.7"
- "@babel/helpers" "^7.25.7"
- "@babel/parser" "^7.25.8"
- "@babel/template" "^7.25.7"
- "@babel/traverse" "^7.25.7"
- "@babel/types" "^7.25.8"
+ "@babel/code-frame" "^7.26.0"
+ "@babel/generator" "^7.26.0"
+ "@babel/helper-compilation-targets" "^7.25.9"
+ "@babel/helper-module-transforms" "^7.26.0"
+ "@babel/helpers" "^7.26.0"
+ "@babel/parser" "^7.26.0"
+ "@babel/template" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.26.0"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
@@ -72,60 +73,61 @@
source-map "^0.5.0"
trim-right "^1.0.1"
-"@babel/generator@^7.20.0", "@babel/generator@^7.20.5", "@babel/generator@^7.25.7", "@babel/generator@^7.7.2":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.7.tgz#de86acbeb975a3e11ee92dd52223e6b03b479c56"
- integrity sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==
+"@babel/generator@^7.20.0", "@babel/generator@^7.20.5", "@babel/generator@^7.26.0", "@babel/generator@^7.26.3", "@babel/generator@^7.7.2":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019"
+ integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==
dependencies:
- "@babel/types" "^7.25.7"
+ "@babel/parser" "^7.26.3"
+ "@babel/types" "^7.26.3"
"@jridgewell/gen-mapping" "^0.3.5"
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^3.0.2"
-"@babel/helper-annotate-as-pure@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz#63f02dbfa1f7cb75a9bdb832f300582f30bb8972"
- integrity sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==
+"@babel/helper-annotate-as-pure@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
+ integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==
dependencies:
- "@babel/types" "^7.25.7"
+ "@babel/types" "^7.25.9"
-"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz#11260ac3322dda0ef53edfae6e97b961449f5fa4"
- integrity sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==
+"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875"
+ integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==
dependencies:
- "@babel/compat-data" "^7.25.7"
- "@babel/helper-validator-option" "^7.25.7"
+ "@babel/compat-data" "^7.25.9"
+ "@babel/helper-validator-option" "^7.25.9"
browserslist "^4.24.0"
lru-cache "^5.1.1"
semver "^6.3.1"
-"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz#5d65074c76cae75607421c00d6bd517fe1892d6b"
- integrity sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- "@babel/helper-member-expression-to-functions" "^7.25.7"
- "@babel/helper-optimise-call-expression" "^7.25.7"
- "@babel/helper-replace-supers" "^7.25.7"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7"
- "@babel/traverse" "^7.25.7"
+"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83"
+ integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-member-expression-to-functions" "^7.25.9"
+ "@babel/helper-optimise-call-expression" "^7.25.9"
+ "@babel/helper-replace-supers" "^7.25.9"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
semver "^6.3.1"
-"@babel/helper-create-regexp-features-plugin@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz#dcb464f0e2cdfe0c25cc2a0a59c37ab940ce894e"
- integrity sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==
+"@babel/helper-create-regexp-features-plugin@^7.25.9":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0"
+ integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- regexpu-core "^6.1.1"
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ regexpu-core "^6.2.0"
semver "^6.3.1"
-"@babel/helper-define-polyfill-provider@^0.6.2":
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d"
- integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==
+"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3":
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21"
+ integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==
dependencies:
"@babel/helper-compilation-targets" "^7.22.6"
"@babel/helper-plugin-utils" "^7.22.5"
@@ -140,126 +142,117 @@
dependencies:
"@babel/types" "^7.24.7"
-"@babel/helper-member-expression-to-functions@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz#541a33b071f0355a63a0fa4bdf9ac360116b8574"
- integrity sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==
- dependencies:
- "@babel/traverse" "^7.25.7"
- "@babel/types" "^7.25.7"
-
-"@babel/helper-module-imports@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz#dba00d9523539152906ba49263e36d7261040472"
- integrity sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==
- dependencies:
- "@babel/traverse" "^7.25.7"
- "@babel/types" "^7.25.7"
-
-"@babel/helper-module-transforms@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz#2ac9372c5e001b19bc62f1fe7d96a18cb0901d1a"
- integrity sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==
- dependencies:
- "@babel/helper-module-imports" "^7.25.7"
- "@babel/helper-simple-access" "^7.25.7"
- "@babel/helper-validator-identifier" "^7.25.7"
- "@babel/traverse" "^7.25.7"
-
-"@babel/helper-optimise-call-expression@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz#1de1b99688e987af723eed44fa7fc0ee7b97d77a"
- integrity sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==
- dependencies:
- "@babel/types" "^7.25.7"
-
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.7", "@babel/helper-plugin-utils@^7.8.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz#8ec5b21812d992e1ef88a9b068260537b6f0e36c"
- integrity sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==
-
-"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz#9efdc39df5f489bcd15533c912b6c723a0a65021"
- integrity sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- "@babel/helper-wrap-function" "^7.25.7"
- "@babel/traverse" "^7.25.7"
-
-"@babel/helper-replace-supers@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz#38cfda3b6e990879c71d08d0fef9236b62bd75f5"
- integrity sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==
- dependencies:
- "@babel/helper-member-expression-to-functions" "^7.25.7"
- "@babel/helper-optimise-call-expression" "^7.25.7"
- "@babel/traverse" "^7.25.7"
-
-"@babel/helper-simple-access@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz#5eb9f6a60c5d6b2e0f76057004f8dacbddfae1c0"
- integrity sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==
- dependencies:
- "@babel/traverse" "^7.25.7"
- "@babel/types" "^7.25.7"
-
-"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz#382831c91038b1a6d32643f5f49505b8442cb87c"
- integrity sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==
- dependencies:
- "@babel/traverse" "^7.25.7"
- "@babel/types" "^7.25.7"
-
-"@babel/helper-string-parser@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz#d50e8d37b1176207b4fe9acedec386c565a44a54"
- integrity sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==
-
-"@babel/helper-validator-identifier@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz#77b7f60c40b15c97df735b38a66ba1d7c3e93da5"
- integrity sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==
-
-"@babel/helper-validator-option@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz#97d1d684448228b30b506d90cace495d6f492729"
- integrity sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==
-
-"@babel/helper-wrap-function@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz#9f6021dd1c4fdf4ad515c809967fc4bac9a70fe7"
- integrity sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==
- dependencies:
- "@babel/template" "^7.25.7"
- "@babel/traverse" "^7.25.7"
- "@babel/types" "^7.25.7"
-
-"@babel/helpers@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.7.tgz#091b52cb697a171fe0136ab62e54e407211f09c2"
- integrity sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==
- dependencies:
- "@babel/template" "^7.25.7"
- "@babel/types" "^7.25.7"
-
-"@babel/highlight@^7.10.4", "@babel/highlight@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.7.tgz#20383b5f442aa606e7b5e3043b0b1aafe9f37de5"
- integrity sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==
- dependencies:
- "@babel/helper-validator-identifier" "^7.25.7"
+"@babel/helper-member-expression-to-functions@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
+ integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
+"@babel/helper-module-imports@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715"
+ integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
+"@babel/helper-module-transforms@^7.26.0":
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
+ integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+
+"@babel/helper-optimise-call-expression@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
+ integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==
+ dependencies:
+ "@babel/types" "^7.25.9"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46"
+ integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==
+
+"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92"
+ integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-wrap-function" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+
+"@babel/helper-replace-supers@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5"
+ integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.25.9"
+ "@babel/helper-optimise-call-expression" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+
+"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9"
+ integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==
+ dependencies:
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
+"@babel/helper-string-parser@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
+ integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
+
+"@babel/helper-validator-identifier@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
+ integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
+
+"@babel/helper-validator-option@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
+ integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
+
+"@babel/helper-wrap-function@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0"
+ integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==
+ dependencies:
+ "@babel/template" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
+"@babel/helpers@^7.26.0":
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4"
+ integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==
+ dependencies:
+ "@babel/template" "^7.25.9"
+ "@babel/types" "^7.26.0"
+
+"@babel/highlight@^7.10.4":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6"
+ integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.25.9"
chalk "^2.4.2"
js-tokens "^4.0.0"
picocolors "^1.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.7", "@babel/parser@^7.25.8":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.8.tgz#f6aaf38e80c36129460c1657c0762db584c9d5e2"
- integrity sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==
+"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234"
+ integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==
dependencies:
- "@babel/types" "^7.25.8"
+ "@babel/types" "^7.26.3"
"@babel/plugin-proposal-async-generator-functions@^7.0.0":
version "7.20.7"
@@ -280,20 +273,20 @@
"@babel/helper-plugin-utils" "^7.18.6"
"@babel/plugin-proposal-decorators@^7.12.9":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz#dabfd82df5dff3a8fc61a434233bf8227c88402c"
- integrity sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz#8680707f943d1a3da2cd66b948179920f097e254"
+ integrity sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/plugin-syntax-decorators" "^7.25.7"
+ "@babel/helper-create-class-features-plugin" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/plugin-syntax-decorators" "^7.25.9"
"@babel/plugin-proposal-export-default-from@^7.0.0":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.8.tgz#fa22151caa240683c3659796037237813767f348"
- integrity sha512-5SLPHA/Gk7lNdaymtSVS9jH77Cs7yuHTR3dYj+9q+M7R7tNLXhNuvnmOfafRIzpWL+dtMibuu1I4ofrc768Gkw==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz#52702be6ef8367fc8f18b8438278332beeb8f87c"
+ integrity sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-proposal-logical-assignment-operators@^7.18.0":
version "7.20.7"
@@ -375,12 +368,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-decorators@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz#cf26fdde4e750688e133c0e33ead2506377e88f7"
- integrity sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==
+"@babel/plugin-syntax-decorators@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz#986b4ca8b7b5df3f67cee889cedeffc2e2bf14b3"
+ integrity sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-syntax-dynamic-import@^7.8.0":
version "7.8.3"
@@ -390,25 +383,25 @@
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-export-default-from@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.7.tgz#3e05205c62303fe088f6b7073e5c143a669c26f4"
- integrity sha512-LRUCsC0YucSjabsmxx6yly8+Q/5mxKdp9gemlpR9ro3bfpcOQOXx/CHivs7QCbjgygd6uQ2GcRfHu1FVax/hgg==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz#86614767a9ff140366f0c3766ef218beb32a730a"
+ integrity sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
-"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.25.7.tgz#7d1255201b55d7644c57e0eb354aaf9f8b8d2d02"
- integrity sha512-fyoj6/YdVtlv2ROig/J0fP7hh/wNO1MJGm1NR70Pg7jbkF+jOUL9joorqaCOQh06Y+LfgTagHzC8KqZ3MF782w==
+"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.25.9":
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz#96507595c21b45fccfc2bc758d5c45452e6164fa"
+ integrity sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-syntax-import-attributes@^7.24.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz#d78dd0499d30df19a598e63ab895e21b909bc43f"
- integrity sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7"
+ integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-syntax-import-meta@^7.10.4":
version "7.10.4"
@@ -424,12 +417,12 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.0"
-"@babel/plugin-syntax-jsx@^7.25.7", "@babel/plugin-syntax-jsx@^7.7.2":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.7.tgz#5352d398d11ea5e7ef330c854dea1dae0bf18165"
- integrity sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==
+"@babel/plugin-syntax-jsx@^7.25.9", "@babel/plugin-syntax-jsx@^7.7.2":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290"
+ integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
version "7.10.4"
@@ -487,302 +480,301 @@
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
-"@babel/plugin-syntax-typescript@^7.25.7", "@babel/plugin-syntax-typescript@^7.7.2":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.7.tgz#bfc05b0cc31ebd8af09964650cee723bb228108b"
- integrity sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==
+"@babel/plugin-syntax-typescript@^7.25.9", "@babel/plugin-syntax-typescript@^7.7.2":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399"
+ integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz#1b9ed22e6890a0e9ff470371c73b8c749bcec386"
- integrity sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845"
+ integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-async-to-generator@^7.20.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz#a44c7323f8d4285a6c568dd43c5c361d6367ec52"
- integrity sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71"
+ integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==
dependencies:
- "@babel/helper-module-imports" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-remap-async-to-generator" "^7.25.7"
+ "@babel/helper-module-imports" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-remap-async-to-generator" "^7.25.9"
"@babel/plugin-transform-block-scoping@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz#6dab95e98adf780ceef1b1c3ab0e55cd20dd410a"
- integrity sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1"
+ integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-classes@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz#5103206cf80d02283bbbd044509ea3b65d0906bb"
- integrity sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==
- dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- "@babel/helper-compilation-targets" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-replace-supers" "^7.25.7"
- "@babel/traverse" "^7.25.7"
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52"
+ integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==
+ dependencies:
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-compilation-targets" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-replace-supers" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
globals "^11.1.0"
"@babel/plugin-transform-computed-properties@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz#7f621f0aa1354b5348a935ab12e3903842466f65"
- integrity sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b"
+ integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/template" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/template" "^7.25.9"
"@babel/plugin-transform-destructuring@^7.20.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz#f6f26a9feefb5aa41fd45b6f5838901b5333d560"
- integrity sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1"
+ integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-export-namespace-from@^7.22.11":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz#d1988c3019a380b417e0516418b02804d3858145"
- integrity sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2"
+ integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
-"@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz#32be871a80e10bbe6d8b1c8a7eeedbbc896d5e80"
- integrity sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==
+"@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz#85879b42a8f5948fd6317069978e98f23ef8aec1"
+ integrity sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/plugin-syntax-flow" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/plugin-syntax-flow" "^7.25.9"
"@babel/plugin-transform-function-name@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz#7e394ccea3693902a8b50ded8b6ae1fa7b8519fd"
- integrity sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97"
+ integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==
dependencies:
- "@babel/helper-compilation-targets" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/traverse" "^7.25.7"
+ "@babel/helper-compilation-targets" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/traverse" "^7.25.9"
"@babel/plugin-transform-literals@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz#70cbdc742f2cfdb1a63ea2cbd018d12a60b213c3"
- integrity sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de"
+ integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
-"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz#173f0c791bb7407c092ce6d77ee90eb3f2d1d2fd"
- integrity sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==
+"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.25.9":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb"
+ integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==
dependencies:
- "@babel/helper-module-transforms" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-simple-access" "^7.25.7"
+ "@babel/helper-module-transforms" "^7.26.0"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-named-capturing-groups-regex@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz#a2f3f6d7f38693b462542951748f0a72a34d196d"
- integrity sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a"
+ integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-create-regexp-features-plugin" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz#befb4900c130bd52fccf2b926314557987f1b552"
- integrity sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949"
+ integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-object-rest-spread@^7.12.13":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz#0904ac16bcce41df4db12d915d6780f85c7fb04b"
- integrity sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18"
+ integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==
dependencies:
- "@babel/helper-compilation-targets" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/plugin-transform-parameters" "^7.25.7"
+ "@babel/helper-compilation-targets" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/plugin-transform-parameters" "^7.25.9"
"@babel/plugin-transform-optional-chaining@^7.0.0-0":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz#f46283b78adcc5b6ab988a952f989e7dce70653f"
- integrity sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd"
+ integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
-"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz#80c38b03ef580f6d6bffe1c5254bb35986859ac7"
- integrity sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==
+"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257"
+ integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-private-methods@^7.22.5":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz#c790a04f837b4bd61d6b0317b43aa11ff67dce80"
- integrity sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57"
+ integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-create-class-features-plugin" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-private-property-in-object@^7.22.11":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz#1234f856ce85e061f9688764194e51ea7577c434"
- integrity sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33"
+ integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- "@babel/helper-create-class-features-plugin" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-create-class-features-plugin" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
-"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz#2753e875a1b702fb1d806c4f5d4c194d64cadd88"
- integrity sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==
+"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d"
+ integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
-"@babel/plugin-transform-react-jsx-development@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz#2fbd77887b8fa2942d7cb61edf1029ea1b048554"
- integrity sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==
+"@babel/plugin-transform-react-jsx-development@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7"
+ integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==
dependencies:
- "@babel/plugin-transform-react-jsx" "^7.25.7"
+ "@babel/plugin-transform-react-jsx" "^7.25.9"
"@babel/plugin-transform-react-jsx-self@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz#3d11df143131fd8f5486a1f7d3839890f88f8c85"
- integrity sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz#c0b6cae9c1b73967f7f9eb2fca9536ba2fad2858"
+ integrity sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-react-jsx-source@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz#a0d8372310d5ea5b0447dfa03a8485f960eff7be"
- integrity sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz#4c6b8daa520b5f155b5fb55547d7c9fa91417503"
+ integrity sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
-"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz#f5e2af6020a562fe048dd343e571c4428e6c5632"
- integrity sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==
+"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166"
+ integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- "@babel/helper-module-imports" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/plugin-syntax-jsx" "^7.25.7"
- "@babel/types" "^7.25.7"
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-module-imports" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/plugin-syntax-jsx" "^7.25.9"
+ "@babel/types" "^7.25.9"
-"@babel/plugin-transform-react-pure-annotations@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz#6d0b8dadb2d3c5cbb8ade68c5efd49470b0d65f7"
- integrity sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==
+"@babel/plugin-transform-react-pure-annotations@^7.25.9":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62"
+ integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-runtime@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz#435a4fab67273f00047dc806e05069c9c6344e12"
- integrity sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz#62723ea3f5b31ffbe676da9d6dae17138ae580ea"
+ integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==
dependencies:
- "@babel/helper-module-imports" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-module-imports" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
babel-plugin-polyfill-corejs2 "^0.4.10"
babel-plugin-polyfill-corejs3 "^0.10.6"
babel-plugin-polyfill-regenerator "^0.6.1"
semver "^6.3.1"
"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz#92690a9c671915602d91533c278cc8f6bf12275f"
- integrity sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2"
+ integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-spread@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz#df83e899a9fc66284ee601a7b738568435b92998"
- integrity sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9"
+ integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
"@babel/plugin-transform-sticky-regex@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz#341c7002bef7f29037be7fb9684e374442dd0d17"
- integrity sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32"
+ integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/plugin-transform-template-literals@^7.0.0-0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz#e566c581bb16d8541dd8701093bb3457adfce16b"
- integrity sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1"
+ integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
-"@babel/plugin-transform-typescript@^7.25.7", "@babel/plugin-transform-typescript@^7.5.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz#8fc7c3d28ddd36bce45b9b48594129d0e560cfbe"
- integrity sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==
+"@babel/plugin-transform-typescript@^7.25.9", "@babel/plugin-transform-typescript@^7.5.0":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd"
+ integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==
dependencies:
- "@babel/helper-annotate-as-pure" "^7.25.7"
- "@babel/helper-create-class-features-plugin" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-skip-transparent-expression-wrappers" "^7.25.7"
- "@babel/plugin-syntax-typescript" "^7.25.7"
+ "@babel/helper-annotate-as-pure" "^7.25.9"
+ "@babel/helper-create-class-features-plugin" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9"
+ "@babel/plugin-syntax-typescript" "^7.25.9"
"@babel/plugin-transform-unicode-regex@^7.0.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz#f93a93441baf61f713b6d5552aaa856bfab34809"
- integrity sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1"
+ integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==
dependencies:
- "@babel/helper-create-regexp-features-plugin" "^7.25.7"
- "@babel/helper-plugin-utils" "^7.25.7"
+ "@babel/helper-create-regexp-features-plugin" "^7.25.9"
+ "@babel/helper-plugin-utils" "^7.25.9"
"@babel/preset-flow@^7.13.13":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.25.7.tgz#a9460677c182c2e105c32567a036d360c86668a9"
- integrity sha512-q2x3g0YHzo/Ohsr51KOYS/BtZMsvkzVd8qEyhZAyTatYdobfgXCuyppTqTuIhdq5kR/P3nyyVvZ6H5dMc4PnCQ==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.25.9.tgz#ef8b5e7e3f24a42b3711e77fb14919b87dffed0a"
+ integrity sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==
dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-validator-option" "^7.25.7"
- "@babel/plugin-transform-flow-strip-types" "^7.25.7"
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-validator-option" "^7.25.9"
+ "@babel/plugin-transform-flow-strip-types" "^7.25.9"
"@babel/preset-react@^7.22.15":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.25.7.tgz#081cbe1dea363b732764d06a0fdda67ffa17735d"
- integrity sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==
- dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-validator-option" "^7.25.7"
- "@babel/plugin-transform-react-display-name" "^7.25.7"
- "@babel/plugin-transform-react-jsx" "^7.25.7"
- "@babel/plugin-transform-react-jsx-development" "^7.25.7"
- "@babel/plugin-transform-react-pure-annotations" "^7.25.7"
-
-"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7", "@babel/preset-typescript@^7.23.0":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz#43c5b68eccb856ae5b52274b77b1c3c413cde1b7"
- integrity sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==
- dependencies:
- "@babel/helper-plugin-utils" "^7.25.7"
- "@babel/helper-validator-option" "^7.25.7"
- "@babel/plugin-syntax-jsx" "^7.25.7"
- "@babel/plugin-transform-modules-commonjs" "^7.25.7"
- "@babel/plugin-transform-typescript" "^7.25.7"
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa"
+ integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-validator-option" "^7.25.9"
+ "@babel/plugin-transform-react-display-name" "^7.25.9"
+ "@babel/plugin-transform-react-jsx" "^7.25.9"
+ "@babel/plugin-transform-react-jsx-development" "^7.25.9"
+ "@babel/plugin-transform-react-pure-annotations" "^7.25.9"
+
+"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7", "@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.23.0":
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d"
+ integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.25.9"
+ "@babel/helper-validator-option" "^7.25.9"
+ "@babel/plugin-syntax-jsx" "^7.25.9"
+ "@babel/plugin-transform-modules-commonjs" "^7.25.9"
+ "@babel/plugin-transform-typescript" "^7.25.9"
"@babel/register@^7.13.16":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.25.7.tgz#75ec0d3a8f843d344c51bf2f18fcc03f3a4c9117"
- integrity sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.25.9.tgz#1c465acf7dc983d70ccc318eb5b887ecb04f021b"
+ integrity sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==
dependencies:
clone-deep "^4.0.1"
find-cache-dir "^2.0.0"
@@ -791,42 +783,41 @@
source-map-support "^0.5.16"
"@babel/runtime@^7.13.10", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.25.0", "@babel/runtime@^7.7.2":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.7.tgz#7ffb53c37a8f247c8c4d335e89cdf16a2e0d0fb6"
- integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==
+ version "7.26.0"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1"
+ integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==
dependencies:
regenerator-runtime "^0.14.0"
-"@babel/template@^7.0.0", "@babel/template@^7.25.7", "@babel/template@^7.3.3":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.7.tgz#27f69ce382855d915b14ab0fe5fb4cbf88fa0769"
- integrity sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==
- dependencies:
- "@babel/code-frame" "^7.25.7"
- "@babel/parser" "^7.25.7"
- "@babel/types" "^7.25.7"
-
-"@babel/traverse@^7.20.0", "@babel/traverse@^7.25.7":
- version "7.25.7"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.7.tgz#83e367619be1cab8e4f2892ef30ba04c26a40fa8"
- integrity sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==
- dependencies:
- "@babel/code-frame" "^7.25.7"
- "@babel/generator" "^7.25.7"
- "@babel/parser" "^7.25.7"
- "@babel/template" "^7.25.7"
- "@babel/types" "^7.25.7"
+"@babel/template@^7.0.0", "@babel/template@^7.25.9", "@babel/template@^7.3.3":
+ version "7.25.9"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016"
+ integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==
+ dependencies:
+ "@babel/code-frame" "^7.25.9"
+ "@babel/parser" "^7.25.9"
+ "@babel/types" "^7.25.9"
+
+"@babel/traverse@^7.20.0", "@babel/traverse@^7.25.9":
+ version "7.26.4"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd"
+ integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==
+ dependencies:
+ "@babel/code-frame" "^7.26.2"
+ "@babel/generator" "^7.26.3"
+ "@babel/parser" "^7.26.3"
+ "@babel/template" "^7.25.9"
+ "@babel/types" "^7.26.3"
debug "^4.3.1"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.7", "@babel/types@^7.25.8", "@babel/types@^7.3.3":
- version "7.25.8"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.8.tgz#5cf6037258e8a9bcad533f4979025140cb9993e1"
- integrity sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==
+"@babel/types@^7.0.0", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.3.3":
+ version "7.26.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0"
+ integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==
dependencies:
- "@babel/helper-string-parser" "^7.25.7"
- "@babel/helper-validator-identifier" "^7.25.7"
- to-fast-properties "^2.0.0"
+ "@babel/helper-string-parser" "^7.25.9"
+ "@babel/helper-validator-identifier" "^7.25.9"
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
@@ -840,6 +831,13 @@
dependencies:
"@types/hammerjs" "^2.0.36"
+"@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56"
+ integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==
+ dependencies:
+ eslint-visitor-keys "^3.4.3"
+
"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0":
version "5.7.0"
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
@@ -1194,10 +1192,10 @@
dependencies:
uuid "^8.0.0"
-"@expo/cli@0.18.30":
- version "0.18.30"
- resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.18.30.tgz#0cb4829aa11e98ae350a5c15958b9816e9a1d2f0"
- integrity sha512-V90TUJh9Ly8stYo8nwqIqNWCsYjE28GlVFWEhAFCUOp99foiQr8HSTpiiX5GIrprcPoWmlGoY+J5fQA29R4lFg==
+"@expo/cli@0.18.31":
+ version "0.18.31"
+ resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.18.31.tgz#d07b7f1b2d10d146ec8b732ce1353b90912c56bd"
+ integrity sha512-v9llw9fT3Uv+TCM6Xllo54t672CuYtinEQZ2LPJ2EJsCwuTc4Cd2gXQaouuIVD21VoeGQnr5JtJuWbF97sBKzQ==
dependencies:
"@babel/runtime" "^7.20.0"
"@expo/code-signing-certificates" "0.0.5"
@@ -1285,10 +1283,10 @@
node-forge "^1.2.1"
nullthrows "^1.1.1"
-"@expo/config-plugins@8.0.10", "@expo/config-plugins@~8.0.0-beta.0", "@expo/config-plugins@~8.0.8":
- version "8.0.10"
- resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-8.0.10.tgz#5cda076f38bc04675cb42d8acdd23d6e460a62de"
- integrity sha512-KG1fnSKRmsudPU9BWkl59PyE0byrE2HTnqbOrgwr2FAhqh7tfr9nRs6A9oLS/ntpGzmFxccTEcsV0L4apsuxxg==
+"@expo/config-plugins@8.0.11", "@expo/config-plugins@~8.0.8":
+ version "8.0.11"
+ resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-8.0.11.tgz#b814395a910f4c8b7cc95d9719dccb6ca53ea4c5"
+ integrity sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==
dependencies:
"@expo/config-types" "^51.0.3"
"@expo/json-file" "~8.3.0"
@@ -1306,7 +1304,7 @@
xcode "^3.0.1"
xml2js "0.6.0"
-"@expo/config-types@^51.0.0-unreleased", "@expo/config-types@^51.0.3":
+"@expo/config-types@^51.0.3":
version "51.0.3"
resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-51.0.3.tgz#520bdce5fd75f9d234fd81bd0347443086419450"
integrity sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==
@@ -1382,6 +1380,15 @@
json5 "^2.2.2"
write-file-atomic "^2.3.0"
+"@expo/json-file@^9.0.0":
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-9.0.0.tgz#e3688c9b108cfd7e819f1354a9458ba6e93fc943"
+ integrity sha512-M+55xFVrFzDcgMDf+52lPDLjKB5xwRfStWlv/b/Vu2OLgxGZLWpxoPYjlRoHqxjPbCQIi2ZCbobK+0KuNhsELg==
+ dependencies:
+ "@babel/code-frame" "~7.10.4"
+ json5 "^2.2.3"
+ write-file-atomic "^2.3.0"
+
"@expo/metro-config@0.18.11":
version "0.18.11"
resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.18.11.tgz#22e82d92fb9d94ac760cc8b3bff48e6f32b4f032"
@@ -1412,28 +1419,28 @@
integrity sha512-v5ji+fAGi7B9YavrxvekuF8gXEV/5fz0+PhaED5AaFDnbGB4IJIbpaiqK9nqZV1axjGZNQSw6Q8TsnFetCR3bQ==
"@expo/osascript@^2.0.31":
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.1.3.tgz#912b74825cb83f3b958cad81034df9e19f1f2808"
- integrity sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA==
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.1.4.tgz#4918d16ba09d8b01cb393bc5997055e61d31246f"
+ integrity sha512-LcPjxJ5FOFpqPORm+5MRLV0CuYWMthJYV6eerF+lQVXKlvgSn3EOqaHC3Vf3H+vmB0f6G4kdvvFtg40vG4bIhA==
dependencies:
"@expo/spawn-async" "^1.7.2"
exec-async "^2.2.0"
"@expo/package-manager@^1.5.0":
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/@expo/package-manager/-/package-manager-1.5.2.tgz#6015963669977a188bbbac930aa0dc103162ee73"
- integrity sha512-IuA9XtGBilce0q8cyxtWINqbzMB1Fia0Yrug/O53HNuRSwQguV/iqjV68bsa4z8mYerePhcFgtvISWLAlNEbUA==
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@expo/package-manager/-/package-manager-1.6.1.tgz#ab845238dec10bb48bca2b90e060dfe8c1525602"
+ integrity sha512-4rT46wP/94Ll+CWXtFKok1Lbo9XncSUtErFOo/9/3FVughGbIfdG4SKZOAWIpr9wxwEfkyhHfAP9q71ONlWODw==
dependencies:
- "@expo/json-file" "^8.3.0"
+ "@expo/json-file" "^9.0.0"
"@expo/spawn-async" "^1.7.2"
ansi-regex "^5.0.0"
chalk "^4.0.0"
find-up "^5.0.0"
- find-yarn-workspace-root "~2.0.0"
js-yaml "^3.13.1"
- micromatch "^4.0.2"
- npm-package-arg "^7.0.0"
+ micromatch "^4.0.8"
+ npm-package-arg "^11.0.0"
ora "^3.4.0"
+ resolve-workspace-root "^2.0.0"
split "^1.0.1"
sudo-prompt "9.1.1"
@@ -1446,40 +1453,6 @@
base64-js "^1.2.3"
xmlbuilder "^14.0.0"
-"@expo/prebuild-config@7.0.6":
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-7.0.6.tgz#b9c2c36ee564244da8073ce7bea22ebe57743615"
- integrity sha512-Hts+iGBaG6OQ+N8IEMMgwQElzJeSTb7iUJ26xADEHkaexsucAK+V52dM8M4ceicvbZR9q8M+ebJEGj0MCNA3dQ==
- dependencies:
- "@expo/config" "~9.0.0-beta.0"
- "@expo/config-plugins" "~8.0.0-beta.0"
- "@expo/config-types" "^51.0.0-unreleased"
- "@expo/image-utils" "^0.5.0"
- "@expo/json-file" "^8.3.0"
- "@react-native/normalize-colors" "0.74.84"
- debug "^4.3.1"
- fs-extra "^9.0.0"
- resolve-from "^5.0.0"
- semver "^7.6.0"
- xml2js "0.6.0"
-
-"@expo/prebuild-config@7.0.8":
- version "7.0.8"
- resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-7.0.8.tgz#8af72b19c92f05f1ab6c6c70d31f33159dacac39"
- integrity sha512-wH9NVg6HiwF5y9x0TxiMEeBF+ITPGDXy5/i6OUheSrKpPgb0lF1Mwzl/f2fLPXBEpl+ZXOQ8LlLW32b7K9lrNg==
- dependencies:
- "@expo/config" "~9.0.0-beta.0"
- "@expo/config-plugins" "~8.0.8"
- "@expo/config-types" "^51.0.0-unreleased"
- "@expo/image-utils" "^0.5.0"
- "@expo/json-file" "^8.3.0"
- "@react-native/normalize-colors" "0.74.85"
- debug "^4.3.1"
- fs-extra "^9.0.0"
- resolve-from "^5.0.0"
- semver "^7.6.0"
- xml2js "0.6.0"
-
"@expo/prebuild-config@7.0.9":
version "7.0.9"
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-7.0.9.tgz#7abd489e18ed6514a0c9cd214eb34c0d5efda799"
@@ -1540,9 +1513,9 @@
prop-types "^15.8.1"
"@expo/xcpretty@^4.3.0":
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/@expo/xcpretty/-/xcpretty-4.3.1.tgz#e0a6a92d1e46ab5ac5e90d9a8e66ac1a2a2f5920"
- integrity sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/@expo/xcpretty/-/xcpretty-4.3.2.tgz#12dba1295167a9c8dde4be783d74f7e81648ca5d"
+ integrity sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==
dependencies:
"@babel/code-frame" "7.10.4"
chalk "^4.1.0"
@@ -1567,14 +1540,14 @@
"@hapi/hoek" "^9.0.0"
"@hexagon/base64@^2.0.3":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@hexagon/base64/-/base64-2.0.3.tgz#59f01a3e584097941063d631765117c5d5c5685a"
- integrity sha512-ZtQDPh0m9MXHK241Cutx4low/WwqtPr0fPeUsXTAEX5Nocrdk6oB9TvyUF9SePrZYkeTL4gFrd+ceMHVb/zC8A==
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/@hexagon/base64/-/base64-2.0.4.tgz#888e7ef238a07ffc0922cd5900b18ecb26dd17e7"
+ integrity sha512-H/ZY6rGyaEuk0mwQgZ3BVi9hMjFTYpBNFbmtOuec/pPibuGhCMXd8fGtwBaO0h44FkWMurysMsDrpkJsBRmoWQ==
"@hookform/resolvers@^3.9.0":
- version "3.9.0"
- resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.0.tgz#cf540ac21c6c0cd24a40cf53d8e6d64391fb753d"
- integrity sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-3.9.1.tgz#a23883c40bfd449cb6c6ab5a0fa0729184c950ff"
+ integrity sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==
"@isaacs/cliui@^8.0.2":
version "8.0.2"
@@ -1967,17 +1940,22 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
-"@noble/curves@1.6.0", "@noble/curves@^1.4.0", "@noble/curves@~1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.6.0.tgz#be5296ebcd5a1730fccea4786d420f87abfeb40b"
- integrity sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==
+"@noble/curves@1.7.0", "@noble/curves@^1.4.0", "@noble/curves@^1.6.0", "@noble/curves@~1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.7.0.tgz#0512360622439256df892f21d25b388f52505e45"
+ integrity sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==
dependencies:
- "@noble/hashes" "1.5.0"
+ "@noble/hashes" "1.6.0"
-"@noble/hashes@1.5.0", "@noble/hashes@^1.4.0", "@noble/hashes@~1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0"
- integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==
+"@noble/hashes@1.6.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.0.tgz#d4bfb516ad6e7b5111c216a5cc7075f4cf19e6c5"
+ integrity sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==
+
+"@noble/hashes@1.6.1", "@noble/hashes@^1.4.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.6.0":
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.6.1.tgz#df6e5943edcea504bac61395926d6fd67869a0d5"
+ integrity sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
@@ -2012,13 +1990,20 @@
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-"@privy-io/api-base@1.4.0", "@privy-io/api-base@^1.4.0":
+"@privy-io/api-base@1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@privy-io/api-base/-/api-base-1.4.0.tgz#2e3485ef1398c26302a76d0b941c3900002412a0"
integrity sha512-8Pm/8bx6WvNt8uLtYOOj9acYL+JjUJxeChlBEvSywmre1l5o8naK6J4SeAb5v8b8p4178VNI4AYhd+rFh4HCsA==
dependencies:
zod "^3.21.4"
+"@privy-io/api-base@^1.4.0":
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/@privy-io/api-base/-/api-base-1.4.1.tgz#78884201434dbbef60ae43abf19c27f9f03ef84d"
+ integrity sha512-q98uQGVBIY5SBHjJWL/udpbxM9ISpZl8Lwwjd0p0XHSMJMOgEhS4GLjcO7l3clfNrqL0fAuinQaa+seCaYOzng==
+ dependencies:
+ zod "^3.21.4"
+
"@privy-io/expo-native-extensions@^0.0.3":
version "0.0.3"
resolved "https://registry.yarnpkg.com/@privy-io/expo-native-extensions/-/expo-native-extensions-0.0.3.tgz#6398ad2b1b825e1dc168e85c2232da953059ada3"
@@ -2088,9 +2073,9 @@
merge-options "^3.0.4"
"@react-native-clipboard/clipboard@^1.14.2":
- version "1.14.2"
- resolved "https://registry.yarnpkg.com/@react-native-clipboard/clipboard/-/clipboard-1.14.2.tgz#d290e9f79799e260ba4ebd9e9948079258826b25"
- integrity sha512-Mb58f3neB6sM9oOtKYVGLvN8KVByea67OA9ekJ0c9FwdH24INu8RJoA7/fq+PRk+7oxbeamAcEoQPRv0uwbbMw==
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/@react-native-clipboard/clipboard/-/clipboard-1.15.0.tgz#dcd47279b159289f11b31edf976723ad3984e0ce"
+ integrity sha512-YDMC3E956jn9zE11uKGcQDKS1SO9q72iNHxZyrKY5y9XYwZcA9vo3Xk74+zRnf7cM48drDO0s9lyAPUlOvyhrw==
"@react-native-community/cli-clean@13.6.9":
version "13.6.9"
@@ -2253,9 +2238,9 @@
integrity sha512-DbFyCyI7rwl0FkBkp0lzEVp+5mNfS5qU/nM2sK2aSguWhj0Odkt1aKHP2iW/ljruOhgS/O4dEixXlne4OdZJDQ==
"@react-native-masked-view/masked-view@^0.3.1":
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/@react-native-masked-view/masked-view/-/masked-view-0.3.1.tgz#5bd76f17004a6ccbcec03856893777ee91f23d29"
- integrity sha512-uVm8U6nwFIlUd1iDIB5cS+lDadApKR+l8k4k84d9hn+GN4lzAIJhUZ9syYX7c022MxNgAlbxoFLt0pqKoyaAGg==
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@react-native-masked-view/masked-view/-/masked-view-0.3.2.tgz#7064533a573e3539ec912f59c1f457371bf49dd9"
+ integrity sha512-XwuQoW7/GEgWRMovOQtX3A4PrXhyaZm0lVUiY8qJDvdngjLms9Cpdck6SmGAUNqQwcj2EadHC1HwL0bEyoa/SQ==
"@react-native/assets-registry@0.74.87":
version "0.74.87"
@@ -2417,11 +2402,6 @@
hermes-parser "0.19.1"
nullthrows "^1.1.1"
-"@react-native/normalize-colors@0.74.84":
- version "0.74.84"
- resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz#4764d59775c17a6ed193509cb01ae2f42dd5c045"
- integrity sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A==
-
"@react-native/normalize-colors@0.74.85":
version "0.74.85"
resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz#62bcb9ab1b10b822ca0278fdfdf23d3b18e125da"
@@ -2505,9 +2485,9 @@
nanoid "^3.1.23"
"@reduxjs/toolkit@^2.2.7":
- version "2.2.8"
- resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.8.tgz#69e6473dd5a395860d387abdd53fe5a2add378c8"
- integrity sha512-eK/ieXftPRQfaBSmzsamXEyDwkntMTY0e9SG5ETsEOv5JIPKhu3mj992t6B8FJjlnSrZBAAqdT8oMkPe4j+P9g==
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.5.0.tgz#4679b09b4da211cb9a821803aabf86a13c96fbfa"
+ integrity sha512-awNe2oTodsZ6LmRqmkFhtb/KH03hUhxOamEQy411m3Njj3BbFvoBovxo4Q1cBWnV1ErprVj9MlF0UPXkng0eyg==
dependencies:
immer "^10.0.3"
redux "^5.0.1"
@@ -2515,11 +2495,11 @@
reselect "^5.1.0"
"@remix-run/node@^2.7.2":
- version "2.13.1"
- resolved "https://registry.yarnpkg.com/@remix-run/node/-/node-2.13.1.tgz#572f838201a11f8d9d8ef56929eb2a2c46e0f5ea"
- integrity sha512-2ly7bENj2n2FNBdEN60ZEbNCs5dAOex/QJoo6EZ8RNFfUQxVKAZkMwfQ4ETV2SLWDgkRLj3Jo5n/dx7O2ZGhGw==
+ version "2.15.1"
+ resolved "https://registry.yarnpkg.com/@remix-run/node/-/node-2.15.1.tgz#f57b06016f3a71cbdc47e89bdc08ac579e2a2f66"
+ integrity sha512-23xWN3/yOohNUr27KS7hEcDMbtufMkniXfXkcLx8Dz2wUVNfJYGpICjeV48Ue/INtpiUCCzOYwkL9VRjIMEJbA==
dependencies:
- "@remix-run/server-runtime" "2.13.1"
+ "@remix-run/server-runtime" "2.15.1"
"@remix-run/web-fetch" "^4.4.2"
"@web3-storage/multipart-parser" "^1.0.0"
cookie-signature "^1.1.0"
@@ -2527,17 +2507,17 @@
stream-slice "^0.1.2"
undici "^6.11.1"
-"@remix-run/router@1.20.0":
- version "1.20.0"
- resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.20.0.tgz#03554155b45d8b529adf635b2f6ad1165d70d8b4"
- integrity sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==
+"@remix-run/router@1.21.0":
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.21.0.tgz#c65ae4262bdcfe415dbd4f64ec87676e4a56e2b5"
+ integrity sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==
-"@remix-run/server-runtime@2.13.1":
- version "2.13.1"
- resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-2.13.1.tgz#91cc669fee41288b7f7c287558f144cc4b5ed65a"
- integrity sha512-2DfBPRcHKVzE4bCNsNkKB50BhCCKF73x+jiS836OyxSIAL+x0tguV2AEjmGXefEXc5AGGzoxkus0AUUEYa29Vg==
+"@remix-run/server-runtime@2.15.1":
+ version "2.15.1"
+ resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-2.15.1.tgz#1ebf96c351f3398d73856fae38dbd41fd45b2da2"
+ integrity sha512-TDM3rzax//N2F5uNMV5pNTWAop8cYul6hteDu+Xmfwys/eRGlbzEf7YJzyRj6Kcsg2TFVHI7+xEPItGAVm1hHA==
dependencies:
- "@remix-run/router" "1.20.0"
+ "@remix-run/router" "1.21.0"
"@types/cookie" "^0.6.0"
"@web3-storage/multipart-parser" "^1.0.0"
cookie "^0.6.0"
@@ -2600,27 +2580,27 @@
mkdirp "^1.0.4"
rimraf "^3.0.2"
-"@scure/base@~1.1.7", "@scure/base@~1.1.8":
- version "1.1.9"
- resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1"
- integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==
+"@scure/base@~1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.1.tgz#dd0b2a533063ca612c17aa9ad26424a2ff5aa865"
+ integrity sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==
-"@scure/bip32@1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.5.0.tgz#dd4a2e1b8a9da60e012e776d954c4186db6328e6"
- integrity sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==
+"@scure/bip32@1.6.0", "@scure/bip32@^1.5.0":
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.0.tgz#6dbc6b4af7c9101b351f41231a879d8da47e0891"
+ integrity sha512-82q1QfklrUUdXJzjuRU7iG7D7XiFx5PHYVS0+oeNKhyDLT7WPqs6pBcM2W5ZdwOwKCwoE1Vy1se+DHjcXwCYnA==
dependencies:
- "@noble/curves" "~1.6.0"
- "@noble/hashes" "~1.5.0"
- "@scure/base" "~1.1.7"
+ "@noble/curves" "~1.7.0"
+ "@noble/hashes" "~1.6.0"
+ "@scure/base" "~1.2.1"
-"@scure/bip39@1.4.0":
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.4.0.tgz#664d4f851564e2e1d4bffa0339f9546ea55960a6"
- integrity sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==
+"@scure/bip39@1.5.0", "@scure/bip39@^1.4.0":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.0.tgz#c8f9533dbd787641b047984356531d84485f19be"
+ integrity sha512-Dop+ASYhnrwm9+HA/HwXg7j2ZqM6yk2fyLWb5znexjctFY3+E+eU8cIWI0Pql0Qx4hPZCijlGq4OL71g+Uz30A==
dependencies:
- "@noble/hashes" "~1.5.0"
- "@scure/base" "~1.1.8"
+ "@noble/hashes" "~1.6.0"
+ "@scure/base" "~1.2.1"
"@segment/loosely-validate-event@^2.0.0":
version "2.0.0"
@@ -2666,6 +2646,25 @@
dependencies:
"@sinonjs/commons" "^3.0.0"
+"@tanstack/eslint-plugin-query@^5.62.1":
+ version "5.62.1"
+ resolved "https://registry.yarnpkg.com/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.62.1.tgz#5a5a504f3ba0d999468d404fc4d6e9fb58c4cdff"
+ integrity sha512-1886D5U+re1TW0wSH4/kUGG36yIoW5Wkz4twVEzlk3ZWmjF3XkRSWgB+Sc7n+Lyzt8usNV8ZqkZE6DA7IC47fQ==
+ dependencies:
+ "@typescript-eslint/utils" "^8.15.0"
+
+"@tanstack/query-core@5.62.7":
+ version "5.62.7"
+ resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.62.7.tgz#c7f6d0131c08cd2f60e73ec6e7b70e2e9e335def"
+ integrity sha512-fgpfmwatsrUal6V+8EC2cxZIQVl9xvL7qYa03gsdsCy985UTUlS4N+/3hCzwR0PclYDqisca2AqR1BVgJGpUDA==
+
+"@tanstack/react-query@^5.62.2":
+ version "5.62.7"
+ resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.62.7.tgz#8f253439a38ad6ce820bc6d42d89ca2556574d1a"
+ integrity sha512-+xCtP4UAFDTlRTYyEjLx0sRtWyr5GIk7TZjZwBu4YaNahi3Rt2oMyRqfpfVrtwsqY2sayP4iXVCwmC+ZqqFmuw==
+ dependencies:
+ "@tanstack/query-core" "5.62.7"
+
"@tokenizer/token@^0.3.0":
version "0.3.0"
resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276"
@@ -2756,9 +2755,9 @@
"@types/d3-path" "*"
"@types/d3-time@*", "@types/d3-time@^3.0.0":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.3.tgz#3c186bbd9d12b9d84253b6be6487ca56b54f88be"
- integrity sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.4.tgz#8472feecd639691450dd8000eb33edd444e1323f"
+ integrity sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==
"@types/d3-timer@^3.0.0":
version "3.0.2"
@@ -2805,9 +2804,9 @@
"@types/istanbul-lib-report" "*"
"@types/jest@^29.5.12":
- version "29.5.13"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.13.tgz#8bc571659f401e6a719a7bf0dbcb8b78c71a8adc"
- integrity sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==
+ version "29.5.14"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5"
+ integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==
dependencies:
expect "^29.0.0"
pretty-format "^29.0.0"
@@ -2827,9 +2826,9 @@
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
"@types/lodash@^4.14.53", "@types/lodash@^4.17.7":
- version "4.17.10"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.10.tgz#64f3edf656af2fe59e7278b73d3e62404144a6e6"
- integrity sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==
+ version "4.17.13"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb"
+ integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==
"@types/node-forge@^1.3.0":
version "1.3.11"
@@ -2839,11 +2838,11 @@
"@types/node" "*"
"@types/node@*":
- version "22.7.5"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b"
- integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==
+ version "22.10.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766"
+ integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==
dependencies:
- undici-types "~6.19.2"
+ undici-types "~6.20.0"
"@types/node@16.9.1":
version "16.9.1"
@@ -2856,28 +2855,28 @@
integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==
"@types/node@^18.0.0":
- version "18.19.55"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.55.tgz#29c3f8e1485a92ec96636957ddec55aabc6e856e"
- integrity sha512-zzw5Vw52205Zr/nmErSEkN5FLqXPuKX/k5d1D7RKHATGqU7y6YfX9QxZraUzUrFGqH6XzOzG196BC35ltJC4Cw==
+ version "18.19.67"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.67.tgz#77c4b01641a1e3e1509aff7e10d39e4afd5ae06d"
+ integrity sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==
dependencies:
undici-types "~5.26.4"
"@types/prop-types@*":
- version "15.7.13"
- resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451"
- integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==
+ version "15.7.14"
+ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2"
+ integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==
"@types/react-test-renderer@^18.0.7":
- version "18.3.0"
- resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.3.0.tgz#839502eae70058a4ae161f63385a8e7929cef4c0"
- integrity sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==
+ version "18.3.1"
+ resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.3.1.tgz#225bfe8d4ad7ee3b04c2fa27642bb74274a5961d"
+ integrity sha512-vAhnk0tG2eGa37lkU9+s5SoroCsRI08xnsWFiAXOuPH2jqzMbcXvKExXViPi1P5fIklDeCvXqyrdmipFaSkZrA==
dependencies:
- "@types/react" "*"
+ "@types/react" "^18"
-"@types/react@*":
- version "18.3.11"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.11.tgz#9d530601ff843ee0d7030d4227ea4360236bd537"
- integrity sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==
+"@types/react@^18":
+ version "18.3.16"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.16.tgz#5326789125fac98b718d586ad157442ceb44ff28"
+ integrity sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==
dependencies:
"@types/prop-types" "*"
csstype "^3.0.2"
@@ -2900,10 +2899,10 @@
resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304"
integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==
-"@types/use-sync-external-store@^0.0.3":
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43"
- integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==
+"@types/use-sync-external-store@^0.0.6":
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc"
+ integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==
"@types/yargs-parser@*":
version "21.0.3"
@@ -2931,6 +2930,51 @@
dependencies:
"@types/yargs-parser" "*"
+"@typescript-eslint/scope-manager@8.18.0":
+ version "8.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz#30b040cb4557804a7e2bcc65cf8fdb630c96546f"
+ integrity sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==
+ dependencies:
+ "@typescript-eslint/types" "8.18.0"
+ "@typescript-eslint/visitor-keys" "8.18.0"
+
+"@typescript-eslint/types@8.18.0":
+ version "8.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.0.tgz#3afcd30def8756bc78541268ea819a043221d5f3"
+ integrity sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==
+
+"@typescript-eslint/typescript-estree@8.18.0":
+ version "8.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz#d8ca785799fbb9c700cdff1a79c046c3e633c7f9"
+ integrity sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==
+ dependencies:
+ "@typescript-eslint/types" "8.18.0"
+ "@typescript-eslint/visitor-keys" "8.18.0"
+ debug "^4.3.4"
+ fast-glob "^3.3.2"
+ is-glob "^4.0.3"
+ minimatch "^9.0.4"
+ semver "^7.6.0"
+ ts-api-utils "^1.3.0"
+
+"@typescript-eslint/utils@^8.15.0":
+ version "8.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.0.tgz#48f67205d42b65d895797bb7349d1be5c39a62f7"
+ integrity sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@typescript-eslint/scope-manager" "8.18.0"
+ "@typescript-eslint/types" "8.18.0"
+ "@typescript-eslint/typescript-estree" "8.18.0"
+
+"@typescript-eslint/visitor-keys@8.18.0":
+ version "8.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz#7b6d33534fa808e33a19951907231ad2ea5c36dd"
+ integrity sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==
+ dependencies:
+ "@typescript-eslint/types" "8.18.0"
+ eslint-visitor-keys "^4.2.0"
+
"@urql/core@2.3.6":
version "2.3.6"
resolved "https://registry.yarnpkg.com/@urql/core/-/core-2.3.6.tgz#ee0a6f8fde02251e9560c5f17dce5cd90f948552"
@@ -2940,9 +2984,9 @@
wonka "^4.0.14"
"@urql/core@>=2.3.1":
- version "5.0.6"
- resolved "https://registry.yarnpkg.com/@urql/core/-/core-5.0.6.tgz#0d6624e30084f9137f78dc6c5bb8a599cba7f9dc"
- integrity sha512-38rgSDqVNihFDauw1Pm9V7XLWIKuK8V9CKgrUF7/xEKinze8ENKP1ZeBhkG+dxWzJan7CHK+SLl46kAdvZwIlA==
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@urql/core/-/core-5.1.0.tgz#7f4b81f1aba1ca34ae6354763abeb87ff9af84ff"
+ integrity sha512-yC3sw8yqjbX45GbXxfiBY8GLYCiyW/hLBbQF9l3TJrv4ro00Y0ChkKaD9I2KntRxAVm9IYBqh0awX8fwWAe/Yw==
dependencies:
"@0no-co/graphql.web" "^1.0.5"
wonka "^6.3.2"
@@ -2980,10 +3024,10 @@ abab@^2.0.6:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
-abitype@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.6.tgz#76410903e1d88e34f1362746e2d407513c38565b"
- integrity sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==
+abitype@1.0.7, abitype@^1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.7.tgz#876a0005d211e1c9132825d45bcee7b46416b284"
+ integrity sha512-ZfYYSktDQUwc2eduYu8C4wOs+RDPmnRYMh7zNfzeMtGGgb0U+6tLGjixUic6mXf5xKKCcgT5Qp6cv39tOARVFw==
abort-controller@^3.0.0:
version "3.0.0"
@@ -2992,7 +3036,7 @@ abort-controller@^3.0.0:
dependencies:
event-target-shim "^5.0.0"
-accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.5, accepts@~1.3.7:
+accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.7:
version "1.3.8"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
@@ -3016,9 +3060,9 @@ acorn-walk@^8.0.2:
acorn "^8.11.0"
acorn@^8.1.0, acorn@^8.11.0, acorn@^8.8.1, acorn@^8.8.2:
- version "8.12.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248"
- integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==
+ version "8.14.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
+ integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
aes-js@3.0.0:
version "3.0.0"
@@ -3250,6 +3294,15 @@ available-typed-arrays@^1.0.7:
dependencies:
possible-typed-array-names "^1.0.0"
+axios@^1.7.9:
+ version "1.7.9"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a"
+ integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==
+ dependencies:
+ follow-redirects "^1.15.6"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
babel-core@^7.0.0-bridge.0:
version "7.0.0-bridge.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece"
@@ -3290,12 +3343,12 @@ babel-plugin-jest-hoist@^29.6.3:
"@types/babel__traverse" "^7.0.6"
babel-plugin-polyfill-corejs2@^0.4.10:
- version "0.4.11"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33"
- integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==
+ version "0.4.12"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9"
+ integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==
dependencies:
"@babel/compat-data" "^7.22.6"
- "@babel/helper-define-polyfill-provider" "^0.6.2"
+ "@babel/helper-define-polyfill-provider" "^0.6.3"
semver "^6.3.1"
babel-plugin-polyfill-corejs3@^0.10.6:
@@ -3307,11 +3360,11 @@ babel-plugin-polyfill-corejs3@^0.10.6:
core-js-compat "^3.38.0"
babel-plugin-polyfill-regenerator@^0.6.1:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e"
- integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==
+ version "0.6.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8"
+ integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==
dependencies:
- "@babel/helper-define-polyfill-provider" "^0.6.2"
+ "@babel/helper-define-polyfill-provider" "^0.6.3"
babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517:
version "0.0.0-experimental-592953e-20240517"
@@ -3327,9 +3380,9 @@ babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517:
zod-validation-error "^2.1.0"
babel-plugin-react-native-web@~0.19.10:
- version "0.19.12"
- resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.12.tgz#90481ee72b515020b06cb644abe1e8a16590bd86"
- integrity sha512-eYZ4+P6jNcB37lObWIg0pUbi7+3PKoU1Oie2j0C8UF3cXyXoR74tO2NBjI/FORb2LJyItJZEAmjU5pSaJYEL1w==
+ version "0.19.13"
+ resolved "https://registry.yarnpkg.com/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz#bf919bd6f18c4689dd1a528a82bda507363b953d"
+ integrity sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==
babel-plugin-transform-flow-enums@^0.0.2:
version "0.0.2"
@@ -3430,9 +3483,9 @@ bmp-js@^0.1.0:
integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==
bn.js@^4.11.9:
- version "4.12.0"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
- integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+ version "4.12.1"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7"
+ integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==
bn.js@^5.2.1:
version "5.2.1"
@@ -3499,15 +3552,15 @@ brorand@^1.1.0:
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
-browserslist@^4.23.3, browserslist@^4.24.0:
- version "4.24.0"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4"
- integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==
+browserslist@^4.24.0, browserslist@^4.24.2:
+ version "4.24.2"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.2.tgz#f5845bc91069dbd55ee89faf9822e1d885d16580"
+ integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==
dependencies:
- caniuse-lite "^1.0.30001663"
- electron-to-chromium "^1.5.28"
+ caniuse-lite "^1.0.30001669"
+ electron-to-chromium "^1.5.41"
node-releases "^2.0.18"
- update-browserslist-db "^1.1.0"
+ update-browserslist-db "^1.1.1"
bs58@^5.0.0:
version "5.0.0"
@@ -3564,10 +3617,10 @@ builtins@^1.0.3:
resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88"
integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==
-bytes@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
- integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
cacache@^18.0.2:
version "18.0.4"
@@ -3587,16 +3640,23 @@ cacache@^18.0.2:
tar "^6.1.11"
unique-filename "^3.0.0"
-call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
- integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
+call-bind-apply-helpers@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840"
+ integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==
dependencies:
- es-define-property "^1.0.0"
es-errors "^1.3.0"
function-bind "^1.1.2"
+
+call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7, call-bind@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c"
+ integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==
+ dependencies:
+ call-bind-apply-helpers "^1.0.0"
+ es-define-property "^1.0.0"
get-intrinsic "^1.2.4"
- set-function-length "^1.2.1"
+ set-function-length "^1.2.2"
caller-callsite@^2.0.0:
version "2.0.0"
@@ -3632,10 +3692,10 @@ camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001663:
- version "1.0.30001668"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz#98e214455329f54bf7a4d70b49c9794f0fbedbed"
- integrity sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==
+caniuse-lite@^1.0.30001669:
+ version "1.0.30001687"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz#d0ac634d043648498eedf7a3932836beba90ebae"
+ integrity sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==
centra@^2.7.0:
version "2.7.0"
@@ -3675,9 +3735,9 @@ char-regex@^1.0.2:
integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
char-regex@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e"
- integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.2.tgz#81385bb071af4df774bff8721d0ca15ef29ea0bb"
+ integrity sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==
charenc@0.0.2, charenc@~0.0.1:
version "0.0.2"
@@ -3872,7 +3932,7 @@ component-type@^1.2.1:
resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.2.tgz#4458ecc0c1871efc6288bfaff0cbdab08141d079"
integrity sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==
-compressible@~2.0.16:
+compressible@~2.0.18:
version "2.0.18"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
@@ -3880,16 +3940,16 @@ compressible@~2.0.16:
mime-db ">= 1.43.0 < 2"
compression@^1.7.1:
- version "1.7.4"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f"
- integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==
+ version "1.7.5"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.5.tgz#fdd256c0a642e39e314c478f6c2cd654edd74c93"
+ integrity sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==
dependencies:
- accepts "~1.3.5"
- bytes "3.0.0"
- compressible "~2.0.16"
+ bytes "3.1.2"
+ compressible "~2.0.18"
debug "2.6.9"
+ negotiator "~0.6.4"
on-headers "~1.0.2"
- safe-buffer "5.1.2"
+ safe-buffer "5.2.1"
vary "~1.1.2"
concat-map@0.0.1:
@@ -3913,9 +3973,9 @@ convert-source-map@^2.0.0:
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
cookie-signature@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.1.tgz#790dea2cce64638c7ae04d9fabed193bd7ccf3b4"
- integrity sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793"
+ integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==
cookie@^0.6.0:
version "0.6.0"
@@ -3923,11 +3983,11 @@ cookie@^0.6.0:
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
core-js-compat@^3.38.0:
- version "3.38.1"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09"
- integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==
+ version "3.39.0"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61"
+ integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==
dependencies:
- browserslist "^4.23.3"
+ browserslist "^4.24.2"
core-util-is@~1.0.0:
version "1.0.3"
@@ -3965,9 +4025,9 @@ cross-fetch@^3.1.5:
node-fetch "^2.6.12"
cross-spawn@^6.0.0:
- version "6.0.5"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
- integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
+ version "6.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57"
+ integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==
dependencies:
nice-try "^1.0.4"
path-key "^2.0.1"
@@ -3976,9 +4036,9 @@ cross-spawn@^6.0.0:
which "^1.2.9"
cross-spawn@^7.0.0, cross-spawn@^7.0.3:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ version "7.0.6"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
@@ -4187,9 +4247,9 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.9:
ms "2.0.0"
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
- version "4.3.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
- integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
+ integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
dependencies:
ms "^2.1.3"
@@ -4215,6 +4275,11 @@ decode-uri-component@^0.2.2:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9"
integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==
+dedent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.6.0.tgz#0e6da8f0ce52838ef5cec5c8f9396b0c1b64a3cb"
+ integrity sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==
+
dedent@^1.0.0:
version "1.5.3"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a"
@@ -4384,16 +4449,25 @@ domutils@^3.0.1:
domhandler "^5.0.3"
dotenv-expand@~11.0.6:
- version "11.0.6"
- resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.6.tgz#f2c840fd924d7c77a94eff98f153331d876882d3"
- integrity sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==
+ version "11.0.7"
+ resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08"
+ integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==
dependencies:
- dotenv "^16.4.4"
+ dotenv "^16.4.5"
-dotenv@^16.4.4, dotenv@~16.4.5:
- version "16.4.5"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
- integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
+dotenv@^16.4.5, dotenv@~16.4.5:
+ version "16.4.7"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26"
+ integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==
+
+dunder-proto@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.0.tgz#c2fce098b3c8f8899554905f4377b6d85dabaa80"
+ integrity sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==
+ dependencies:
+ call-bind-apply-helpers "^1.0.0"
+ es-errors "^1.3.0"
+ gopd "^1.2.0"
eastasianwidth@^0.2.0:
version "0.2.0"
@@ -4405,10 +4479,10 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
-electron-to-chromium@^1.5.28:
- version "1.5.37"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.37.tgz#1660fb87d2bc82a3f8a652ef78eed17cc0d3ef4f"
- integrity sha512-u7000ZB/X0K78TaQqXZ5ktoR7J79B9US7IkE4zyvcILYwOGY2Tx9GRPYstn7HmuPcMxZ+BDGqIsyLpZQi9ufPw==
+electron-to-chromium@^1.5.41:
+ version "1.5.72"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz#a732805986d3a5b5fedd438ddf4616c7d78ac2df"
+ integrity sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==
elliptic@6.5.4:
version "6.5.4"
@@ -4497,10 +4571,10 @@ errorhandler@^1.5.1:
accepts "~1.3.7"
escape-html "~1.0.3"
-es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0:
- version "1.23.3"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
- integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==
+es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.5:
+ version "1.23.5"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.5.tgz#f4599a4946d57ed467515ed10e4f157289cd52fb"
+ integrity sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==
dependencies:
array-buffer-byte-length "^1.0.1"
arraybuffer.prototype.slice "^1.0.3"
@@ -4517,7 +4591,7 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0:
function.prototype.name "^1.1.6"
get-intrinsic "^1.2.4"
get-symbol-description "^1.0.2"
- globalthis "^1.0.3"
+ globalthis "^1.0.4"
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
has-proto "^1.0.3"
@@ -4533,10 +4607,10 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0:
is-string "^1.0.7"
is-typed-array "^1.1.13"
is-weakref "^1.0.2"
- object-inspect "^1.13.1"
+ object-inspect "^1.13.3"
object-keys "^1.1.1"
object.assign "^4.1.5"
- regexp.prototype.flags "^1.5.2"
+ regexp.prototype.flags "^1.5.3"
safe-array-concat "^1.1.2"
safe-regex-test "^1.0.3"
string.prototype.trim "^1.2.9"
@@ -4549,12 +4623,10 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0:
unbox-primitive "^1.0.2"
which-typed-array "^1.1.15"
-es-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
- integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
- dependencies:
- get-intrinsic "^1.2.4"
+es-define-property@^1.0.0, es-define-property@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
+ integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
es-errors@^1.2.1, es-errors@^1.3.0:
version "1.3.0"
@@ -4578,13 +4650,13 @@ es-set-tostringtag@^2.0.3:
hasown "^2.0.1"
es-to-primitive@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
- integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18"
+ integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==
dependencies:
- is-callable "^1.1.4"
- is-date-object "^1.0.1"
- is-symbol "^1.0.2"
+ is-callable "^1.2.7"
+ is-date-object "^1.0.5"
+ is-symbol "^1.0.4"
escalade@^3.1.1, escalade@^3.2.0:
version "3.2.0"
@@ -4622,6 +4694,16 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
+eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+eslint-visitor-keys@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
+ integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
+
esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -4683,7 +4765,7 @@ event-target-shim@^5.0.0, event-target-shim@^5.0.1:
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
-eventemitter3@^5.0.1:
+eventemitter3@5.0.1, eventemitter3@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
@@ -4785,38 +4867,38 @@ expo-crypto@^13.0.2:
base64-js "^1.3.0"
expo-dev-client@~4.0.26:
- version "4.0.28"
- resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-4.0.28.tgz#3a345662ca2b2dfd7d0fa18e537cb75abd9a563c"
- integrity sha512-wz5G4vY3Gbk5GuQTyijdqY4Hwr/NDt5OUTErbOu1vd4XRIAsI+8IkK5hsBUhGmqrdkYnP5NxxOxC/soFzX/9+w==
+ version "4.0.29"
+ resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-4.0.29.tgz#86683c584db6b787828b10e2a049f810a246441d"
+ integrity sha512-aANlw9dC4PJEPaRNpe+X5xwyYI+aCIcbZklAAsFlkv2/05gLrsvAFgmQpRtowAzF+VggHWde1eKUOeUccAYIEg==
dependencies:
- expo-dev-launcher "4.0.28"
- expo-dev-menu "5.0.22"
- expo-dev-menu-interface "1.8.3"
+ expo-dev-launcher "4.0.29"
+ expo-dev-menu "5.0.23"
+ expo-dev-menu-interface "1.8.4"
expo-manifests "~0.14.0"
expo-updates-interface "~0.16.2"
-expo-dev-launcher@4.0.28:
- version "4.0.28"
- resolved "https://registry.yarnpkg.com/expo-dev-launcher/-/expo-dev-launcher-4.0.28.tgz#6097f4beb4d000bcc201f1b69dcd516e2b10247c"
- integrity sha512-goE7jcaGVA2zu4gV3/hQ9RXqGhUZZAu339VYNLbwPdaNCzFaG6A8MZHg18gytCUnZ5QkRJsYi4q/8YcwUCASlQ==
+expo-dev-launcher@4.0.29:
+ version "4.0.29"
+ resolved "https://registry.yarnpkg.com/expo-dev-launcher/-/expo-dev-launcher-4.0.29.tgz#c655d842802f696ad6a5e446c60d20c1e453d175"
+ integrity sha512-0a0SL8mc4FrqPeGxJHe9kf0kG+Di+38Gd+HP5DEL9dcOa8m2qffKnk22UcyujCT6+Qk0OUK1s53nnfqFB26uVw==
dependencies:
ajv "8.11.0"
- expo-dev-menu "5.0.22"
+ expo-dev-menu "5.0.23"
expo-manifests "~0.14.0"
resolve-from "^5.0.0"
semver "^7.6.0"
-expo-dev-menu-interface@1.8.3:
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/expo-dev-menu-interface/-/expo-dev-menu-interface-1.8.3.tgz#8c1262e29e0124fc5932a129c95b36de56656b20"
- integrity sha512-QM0LRozeFT5Ek0N7XpV93M+HMdEKRLEOXn0aW5M3uoUlnqC1+PLtF3HMy3k3hMKTTE/kJ1y1Z7akH07T0lunCQ==
+expo-dev-menu-interface@1.8.4:
+ version "1.8.4"
+ resolved "https://registry.yarnpkg.com/expo-dev-menu-interface/-/expo-dev-menu-interface-1.8.4.tgz#fa23bf3228ea51cf412599fcb715c27259ffdd84"
+ integrity sha512-FpYI57EUu9qTSOOi+FZJ58xkCGJK7QD0mTiXK/y1I8lRdZGjCmdBqVvC4dAx2GcbIT78EPxaVf4/90tK/KRK6A==
-expo-dev-menu@5.0.22:
- version "5.0.22"
- resolved "https://registry.yarnpkg.com/expo-dev-menu/-/expo-dev-menu-5.0.22.tgz#30e16b6709759edb027e492fc96d262ee063b0c8"
- integrity sha512-VzpdQReAtjbI1qIuwOf0sUzf91HsfGThojgJD9Ez0eca12qY5tTGYzHa1EM9V+zIcNuNZ7+A8bHJJdmZ4zvU6g==
+expo-dev-menu@5.0.23:
+ version "5.0.23"
+ resolved "https://registry.yarnpkg.com/expo-dev-menu/-/expo-dev-menu-5.0.23.tgz#7e6d6fd93c54ca955e8a69601a0b1991b64389b3"
+ integrity sha512-ztDvrSdFGkRbMoQlGLyKMS6CslMGylonVW4kQHUrBQApCL0c2NtRwLlr2bA1SXF0S7qYdPPg/ayLnj7DDR5X2w==
dependencies:
- expo-dev-menu-interface "1.8.3"
+ expo-dev-menu-interface "1.8.4"
semver "^7.5.4"
expo-file-system@~17.0.1:
@@ -4883,9 +4965,9 @@ expo-modules-core@1.12.26:
invariant "^2.2.4"
expo-router@~3.5.23:
- version "3.5.23"
- resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-3.5.23.tgz#da038e28c64cb69f19d046d7c651c389c5207a3e"
- integrity sha512-Re2kYcxov67hWrcjuu0+3ovsLxYn79PuX6hgtYN20MgigY5ttX79KOIBEVGTO3F3y9dxSrGHyy5Z14BcO+usGQ==
+ version "3.5.24"
+ resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-3.5.24.tgz#ac834b66c023151a3f919c456805cdd7377a677f"
+ integrity sha512-wFi+PIUrOntF5cgg0PgBMlkxEZlWedIv5dWnPFEzN6Tr3A3bpsqdDLgOEIwvwd+pxn5DLzykTmg9EkQ1pPGspw==
dependencies:
"@expo/metro-runtime" "3.2.3"
"@expo/server" "^0.4.0"
@@ -4893,7 +4975,7 @@ expo-router@~3.5.23:
"@react-navigation/bottom-tabs" "~6.5.7"
"@react-navigation/native" "~6.1.6"
"@react-navigation/native-stack" "~6.9.12"
- expo-splash-screen "0.27.5"
+ expo-splash-screen "0.27.7"
react-native-helmet-async "2.0.4"
schema-utils "^4.0.1"
@@ -4902,19 +4984,12 @@ expo-secure-store@^13.0.2:
resolved "https://registry.yarnpkg.com/expo-secure-store/-/expo-secure-store-13.0.2.tgz#ba8f6076fc38062a28bb2ce5edab9cd28ef88598"
integrity sha512-3QYgoneo8p8yeeBPBiAfokNNc2xq6+n8+Ob4fAlErEcf4H7Y72LH+K/dx0nQyWau2ZKZUXBxyyfuHFyVKrEVLg==
-expo-splash-screen@0.27.5:
- version "0.27.5"
- resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.27.5.tgz#bcc1ebb4e761e19a1f2112469f3d424a36fb1e2c"
- integrity sha512-9rdZuLkFCfgJBxrheUsOEOIW6Rp+9NVlpSE0hgXQwbTCLTncf00IHSE8/L2NbFyeDLNjof1yZBppaV7tXHRUzA==
- dependencies:
- "@expo/prebuild-config" "7.0.6"
-
-expo-splash-screen@~0.27.5:
- version "0.27.6"
- resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.27.6.tgz#d57f3f80d22f4ada90fd2edf573bbc148f956f67"
- integrity sha512-joUwZQS48k3VMnucQ0Y8Dle1t1FyIvluQA4kjuPx2x7l2dRrfctbo34ahTnC0p1o2go5oN2iEnSTOElY4wRQHw==
+expo-splash-screen@0.27.7, expo-splash-screen@~0.27.5:
+ version "0.27.7"
+ resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.27.7.tgz#52171be54d8c008880d928e802819d767fbd3c12"
+ integrity sha512-s+eGcG185878nixlrjhhLD6UDYrvoqBUaBkIEozBVWFg3pkdsKpONPiUAco4XR3h7I/9ODq4quN28RJLFO+s0Q==
dependencies:
- "@expo/prebuild-config" "7.0.8"
+ "@expo/prebuild-config" "7.0.9"
expo-status-bar@~1.12.1:
version "1.12.1"
@@ -4940,14 +5015,14 @@ expo-web-browser@^13.0.3:
integrity sha512-HXb7y82ApVJtqk8tManyudtTrCtx8xcUnVzmJECeHCB0SsWSQ+penVLZxJkcyATWoJOsFMnfVSVdrTcpKKGszQ==
expo@~51.0.38:
- version "51.0.38"
- resolved "https://registry.yarnpkg.com/expo/-/expo-51.0.38.tgz#e4127b230454a34a507cfb9f1a2e4b3855cb0579"
- integrity sha512-/B9npFkOPmv6WMIhdjQXEY0Z9k/67UZIVkodW8JxGIXwKUZAGHL+z1R5hTtWimpIrvVhyHUFU3f8uhfEKYhHNQ==
+ version "51.0.39"
+ resolved "https://registry.yarnpkg.com/expo/-/expo-51.0.39.tgz#d9efab081a91a0d3e925b0e4648722b13a8fceae"
+ integrity sha512-Cs/9xopyzJrpXWbyVUZnr37rprdFJorRgfSp6cdBfvbjxZeKnw2MEu7wJwV/s626i5lZTPGjZPHUF9uQvt51cg==
dependencies:
"@babel/runtime" "^7.20.0"
- "@expo/cli" "0.18.30"
+ "@expo/cli" "0.18.31"
"@expo/config" "9.0.4"
- "@expo/config-plugins" "8.0.10"
+ "@expo/config-plugins" "8.0.11"
"@expo/metro-config" "0.18.11"
"@expo/vector-icons" "^14.0.3"
babel-preset-expo "~11.0.15"
@@ -5002,9 +5077,9 @@ fast-text-encoding@^1.0.6:
integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==
fast-uri@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.2.tgz#d78b298cf70fd3b752fd951175a3da6a7b48f024"
- integrity sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241"
+ integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==
fast-xml-parser@^4.0.12, fast-xml-parser@^4.2.4:
version "4.5.0"
@@ -5141,9 +5216,9 @@ flow-enums-runtime@^0.0.6:
integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==
flow-parser@0.*:
- version "0.248.1"
- resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.248.1.tgz#0de3af63d27970d145a02d2c9e0e7e698fb6e92d"
- integrity sha512-fkCfVPelbTzSVp+jVwSvEyc+I4WG8MNhRG/EWSZZTlgHAMEdhXJaFEbfErXxMktboMhVGchvEFhWxkzNGM1m2A==
+ version "0.256.0"
+ resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.256.0.tgz#2a453925caa0f40beb83ef72ea6479ef7b25d739"
+ integrity sha512-HFb/GgB7hq+TYosLJuMLdLp8aGlyAVfrJaTvcM0w2rz2T33PjkVbRU419ncK/69cjowUksewuspkBheq9ZX9Hw==
follow-redirects@^1.15.6:
version "1.15.9"
@@ -5281,16 +5356,19 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
- integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
+get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.5.tgz#dfe7dd1b30761b464fe51bf4bb00ac7c37b681e7"
+ integrity sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==
dependencies:
+ call-bind-apply-helpers "^1.0.0"
+ dunder-proto "^1.0.0"
+ es-define-property "^1.0.1"
es-errors "^1.3.0"
function-bind "^1.1.2"
- has-proto "^1.0.1"
- has-symbols "^1.0.3"
- hasown "^2.0.0"
+ gopd "^1.2.0"
+ has-symbols "^1.1.0"
+ hasown "^2.0.2"
get-package-type@^0.1.0:
version "0.1.0"
@@ -5392,7 +5470,7 @@ globals@^11.1.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-globalthis@^1.0.3:
+globalthis@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
@@ -5412,12 +5490,10 @@ globby@^11.0.1:
merge2 "^1.4.1"
slash "^3.0.0"
-gopd@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
- integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
- dependencies:
- get-intrinsic "^1.1.3"
+gopd@^1.0.1, gopd@^1.1.0, gopd@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
+ integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
graceful-fs@^4.1.11, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.11"
@@ -5436,7 +5512,7 @@ graphql@15.8.0:
resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38"
integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==
-has-bigints@^1.0.1, has-bigints@^1.0.2:
+has-bigints@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
@@ -5458,15 +5534,17 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
dependencies:
es-define-property "^1.0.0"
-has-proto@^1.0.1, has-proto@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
- integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
+has-proto@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5"
+ integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==
+ dependencies:
+ dunder-proto "^1.0.0"
-has-symbols@^1.0.2, has-symbols@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+has-symbols@^1.0.3, has-symbols@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
+ integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
version "1.0.2"
@@ -5544,6 +5622,13 @@ hosted-git-info@^3.0.2:
dependencies:
lru-cache "^6.0.0"
+hosted-git-info@^7.0.0:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17"
+ integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==
+ dependencies:
+ lru-cache "^10.0.1"
+
html-encoding-sniffer@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9"
@@ -5704,7 +5789,7 @@ internal-slot@^1.0.7:
resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
-invariant@2.2.4, invariant@^2.2.4:
+invariant@2.2.4, invariant@^2.2.2, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
@@ -5747,27 +5832,34 @@ is-arrayish@^0.3.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
-is-bigint@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
- integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+is-async-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646"
+ integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==
dependencies:
- has-bigints "^1.0.1"
+ has-tostringtag "^1.0.0"
-is-boolean-object@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
- integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+is-bigint@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672"
+ integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==
dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
+ has-bigints "^1.0.2"
+
+is-boolean-object@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.0.tgz#9743641e80a62c094b5941c5bb791d66a88e497a"
+ integrity sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==
+ dependencies:
+ call-bind "^1.0.7"
+ has-tostringtag "^1.0.2"
is-buffer@~1.1.1, is-buffer@~1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
-is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
+is-callable@^1.1.3, is-callable@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
@@ -5786,7 +5878,7 @@ is-data-view@^1.0.1:
dependencies:
is-typed-array "^1.1.13"
-is-date-object@^1.0.1:
+is-date-object@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
@@ -5813,6 +5905,13 @@ is-extglob@^2.1.1:
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+is-finalizationregistry@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz#d74a7d0c5f3578e34a20729e69202e578d495dc2"
+ integrity sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==
+ dependencies:
+ call-bind "^1.0.7"
+
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
@@ -5833,7 +5932,7 @@ is-generator-fn@^2.0.0:
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-is-generator-function@^1.0.7:
+is-generator-function@^1.0.10, is-generator-function@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==
@@ -5847,7 +5946,7 @@ is-glob@^2.0.0:
dependencies:
is-extglob "^1.0.0"
-is-glob@^4.0.1:
+is-glob@^4.0.1, is-glob@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -5866,17 +5965,23 @@ is-invalid-path@^0.1.0:
dependencies:
is-glob "^2.0.0"
+is-map@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e"
+ integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==
+
is-negative-zero@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
-is-number-object@^1.0.4:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
- integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+is-number-object@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.0.tgz#5a867e9ecc3d294dda740d9f127835857af7eb05"
+ integrity sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==
dependencies:
- has-tostringtag "^1.0.0"
+ call-bind "^1.0.7"
+ has-tostringtag "^1.0.2"
is-number@^7.0.0:
version "7.0.0"
@@ -5911,12 +6016,19 @@ is-potential-custom-element-name@^1.0.1:
integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
is-regex@^1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
- integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.0.tgz#41b9d266e7eb7451312c64efc37e8a7d453077cf"
+ integrity sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==
dependencies:
- call-bind "^1.0.2"
- has-tostringtag "^1.0.0"
+ call-bind "^1.0.7"
+ gopd "^1.1.0"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.2"
+
+is-set@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d"
+ integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==
is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3:
version "1.0.3"
@@ -5935,19 +6047,22 @@ is-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-is-string@^1.0.5, is-string@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
- integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+is-string@^1.0.7, is-string@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.0.tgz#8cb83c5d57311bf8058bc6c8db294711641da45d"
+ integrity sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==
dependencies:
- has-tostringtag "^1.0.0"
+ call-bind "^1.0.7"
+ has-tostringtag "^1.0.2"
-is-symbol@^1.0.2, is-symbol@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
- integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+is-symbol@^1.0.4, is-symbol@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.0.tgz#ae993830a56d4781886d39f9f0a46b3e89b7b60b"
+ integrity sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==
dependencies:
- has-symbols "^1.0.2"
+ call-bind "^1.0.7"
+ has-symbols "^1.0.3"
+ safe-regex-test "^1.0.3"
is-typed-array@^1.1.13, is-typed-array@^1.1.3:
version "1.1.13"
@@ -5968,6 +6083,11 @@ is-valid-path@^0.1.1:
dependencies:
is-invalid-path "^0.1.0"
+is-weakmap@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd"
+ integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==
+
is-weakref@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
@@ -5975,6 +6095,14 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
+is-weakset@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007"
+ integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==
+ dependencies:
+ call-bind "^1.0.7"
+ get-intrinsic "^1.2.4"
+
is-wsl@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
@@ -6619,7 +6747,12 @@ jsesc@^2.5.1:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
-jsesc@^3.0.2, jsesc@~3.0.2:
+jsesc@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
+ integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
+
+jsesc@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e"
integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==
@@ -6695,9 +6828,9 @@ leven@^3.1.0:
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
libphonenumber-js@^1.10.31, libphonenumber-js@^1.10.44:
- version "1.11.12"
- resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.11.12.tgz#e108a4632048255f30b872bb1abbb3356f290fbb"
- integrity sha512-QkJn9/D7zZ1ucvT++TQSvZuSA2xAWeUytU+DiEQwbPKLyrDpvbul2AFs1CGbRAPpSCCk47aRAb5DX5mmcayp4g==
+ version "1.11.16"
+ resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.11.16.tgz#3aa64a8a95ffc59253a5df3009940a9604a02102"
+ integrity sha512-Noyazmt0yOvnG0OeRY45Cd1ur8G7Z0HWVkuCuKe+yysGNxPQwBAODBQQ40j0AIagi9ZWurfmmZWNlpg4h4W+XQ==
lighthouse-logger@^1.0.0:
version "1.4.2"
@@ -6850,6 +6983,19 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
+lottie-ios@3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/lottie-ios/-/lottie-ios-3.4.0.tgz#a23be299760aefb44298b9cb5f60df489030adbf"
+ integrity sha512-qnV8UrawwnBRf5V0no2yxlPUE69vzfFqpxEEXGTZhb1/WX1xewqVNYvtbguqwQkdu9IT9D5WC1U9CHZ1KbkGDw==
+
+lottie-react-native@^5.1.5:
+ version "5.1.6"
+ resolved "https://registry.yarnpkg.com/lottie-react-native/-/lottie-react-native-5.1.6.tgz#6ae72829c3c0b95952dddd3d78c043f4dfbcb487"
+ integrity sha512-vhdeZstXMfuVKwnddYWjJgQ/1whGL58IJEJu/iSf0XQ5gAb4pp/+vy91mdYQLezlb8Aw4Vu3fKnqErJL2hwchg==
+ dependencies:
+ invariant "^2.2.2"
+ react-native-safe-modules "^1.0.3"
+
lru-cache@^10.0.1, lru-cache@^10.2.0:
version "10.4.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
@@ -7161,7 +7307,7 @@ metro@0.80.12, metro@^0.80.3:
ws "^7.5.10"
yargs "^17.6.2"
-micromatch@^4.0.2, micromatch@^4.0.4:
+micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
@@ -7335,9 +7481,9 @@ mz@^2.7.0:
thenify-all "^1.0.0"
nanoid@^3.1.23, nanoid@^3.3.7:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
- integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+ version "3.3.8"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
+ integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
natural-compare@^1.4.0:
version "1.4.0"
@@ -7349,6 +7495,11 @@ negotiator@0.6.3:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+negotiator@~0.6.4:
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
+ integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
+
neo-async@^2.5.0:
version "2.6.2"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
@@ -7399,9 +7550,9 @@ node-int64@^0.4.0:
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
node-releases@^2.0.18:
- version "2.0.18"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f"
- integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==
+ version "2.0.19"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
+ integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
node-stream-zip@^1.9.1:
version "1.15.0"
@@ -7426,6 +7577,16 @@ normalize-path@^3.0.0:
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+npm-package-arg@^11.0.0:
+ version "11.0.3"
+ resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d"
+ integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==
+ dependencies:
+ hosted-git-info "^7.0.0"
+ proc-log "^4.0.0"
+ semver "^7.3.5"
+ validate-npm-package-name "^5.0.0"
+
npm-package-arg@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-7.0.0.tgz#52cdf08b491c0c59df687c4c925a89102ef794a5"
@@ -7463,9 +7624,9 @@ nullthrows@^1.1.1:
integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==
nwsapi@^2.2.2:
- version "2.2.13"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.13.tgz#e56b4e98960e7a040e5474536587e599c4ff4655"
- integrity sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==
+ version "2.2.16"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43"
+ integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==
ob1@0.80.12:
version "0.80.12"
@@ -7479,10 +7640,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-inspect@^1.13.1:
- version "1.13.2"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
- integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
+object-inspect@^1.13.1, object-inspect@^1.13.3:
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a"
+ integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==
object-keys@^1.1.1:
version "1.1.1"
@@ -7613,6 +7774,19 @@ osenv@^0.1.5:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
+ox@0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ox/-/ox-0.1.2.tgz#0f791be2ccabeaf4928e6d423498fe1c8094e560"
+ integrity sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==
+ dependencies:
+ "@adraffy/ens-normalize" "^1.10.1"
+ "@noble/curves" "^1.6.0"
+ "@noble/hashes" "^1.5.0"
+ "@scure/bip32" "^1.5.0"
+ "@scure/bip39" "^1.4.0"
+ abitype "^1.0.6"
+ eventemitter3 "5.0.1"
+
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -7724,9 +7898,9 @@ parse-png@^2.1.0:
pngjs "^3.3.0"
parse5@^7.0.0, parse5@^7.1.1:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.0.tgz#8a0591ce9b7c5e2027173ab737d4d3fc3d826fab"
- integrity sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==
+ version "7.2.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a"
+ integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==
dependencies:
entities "^4.5.0"
@@ -7791,10 +7965,10 @@ peek-readable@^4.1.0:
resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72"
integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==
-permissionless@^0.0.34:
- version "0.0.34"
- resolved "https://registry.yarnpkg.com/permissionless/-/permissionless-0.0.34.tgz#479ee4c02068c6982a308df7a64351eea626a00d"
- integrity sha512-lP59+7VmjLO7dPctH69kgcJ8evxGkrjQ9hruOA+7ymWvUMiuXAfVxvXSWCV+lg67N2TGs1JneEuhwK+iI3kPvA==
+permissionless@^0.2.17:
+ version "0.2.22"
+ resolved "https://registry.yarnpkg.com/permissionless/-/permissionless-0.2.22.tgz#77253208cdbdce7f2b519895146e519743952db4"
+ integrity sha512-6pyXxSXomHXmCgwST4/MM0CM3ISBhj8R0Il+g46RlDOZgVOWwwQxaVmbbg7vZBNulIg5PYFjVaFCNISc2Ia2uA==
phin@^2.9.1:
version "2.9.3"
@@ -7808,10 +7982,10 @@ phin@^3.7.1:
dependencies:
centra "^2.7.0"
-picocolors@^1.0.0, picocolors@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59"
- integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==
+picocolors@^1.0.0, picocolors@^1.1.0, picocolors@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
+ integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
version "2.3.1"
@@ -7884,18 +8058,18 @@ postcss-value-parser@^4.2.0:
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@~8.4.32:
- version "8.4.47"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365"
- integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==
+ version "8.4.49"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19"
+ integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==
dependencies:
nanoid "^3.3.7"
- picocolors "^1.1.0"
+ picocolors "^1.1.1"
source-map-js "^1.2.1"
prettier@^3.3.3:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
- integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
+ version "3.4.2"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f"
+ integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==
pretty-bytes@5.6.0:
version "5.6.0"
@@ -7931,6 +8105,11 @@ pretty-format@^29.0.0, pretty-format@^29.7.0:
ansi-styles "^5.0.0"
react-is "^18.0.0"
+proc-log@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034"
+ integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==
+
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -7968,7 +8147,7 @@ prompts@^2.0.1, prompts@^2.2.1, prompts@^2.3.2, prompts@^2.4.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.7.2, prop-types@^15.8.0, prop-types@^15.8.1:
+prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.0, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -7982,10 +8161,17 @@ property-expr@^2.0.5:
resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8"
integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
psl@^1.1.33:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
- integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6"
+ integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==
+ dependencies:
+ punycode "^2.3.1"
pump@^3.0.0:
version "3.0.2"
@@ -8000,7 +8186,7 @@ punycode@^1.4.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
-punycode@^2.1.0, punycode@^2.1.1:
+punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
@@ -8025,9 +8211,9 @@ qrcode@^1.5.1:
yargs "^15.3.1"
qs@^6.12.3:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906"
- integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==
+ version "6.13.1"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e"
+ integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==
dependencies:
side-channel "^1.0.6"
@@ -8105,9 +8291,9 @@ react-freeze@^1.0.0:
integrity sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==
react-hook-form@^7.53.0:
- version "7.53.0"
- resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.53.0.tgz#3cf70951bf41fa95207b34486203ebefbd3a05ab"
- integrity sha512-M1n3HhqCww6S2hxLxciEXy2oISPnAzxY7gvwVPrtlczTM/1dDadXgUxDpHMrMTblDOcm/AXtXxHwZ3jpg1mqKQ==
+ version "7.54.0"
+ resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.0.tgz#46bd9142d65fd16ac064a2bbf4dc0333e2d6840d"
+ integrity sha512-PS05+UQy/IdSbJNojBypxAo9wllhHgGmyr8/dyGQcPoiMf3e7Dfb9PWYVRco55bLbxH9S+1yDDJeTdlYCSxO3A==
"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0:
version "18.3.1"
@@ -8124,10 +8310,24 @@ react-is@^17.0.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
-react-native-flipper@^0.164.0:
- version "0.164.0"
- resolved "https://registry.yarnpkg.com/react-native-flipper/-/react-native-flipper-0.164.0.tgz#64f6269a86a13a72e30f53ba9f5281d2073a7697"
- integrity sha512-iJhIe3rqx6okuzBp4AJsTa2b8VRAOGzoLRFx/4HGbaGvu8AurZjz8TTQkhJsRma8dsHN2b6KKZPvGGW3wdWzvA==
+react-native-animatable@1.3.3:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.3.tgz#a13a4af8258e3bb14d0a9d839917e9bb9274ec8a"
+ integrity sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==
+ dependencies:
+ prop-types "^15.7.2"
+
+react-native-draggable-flatlist@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/react-native-draggable-flatlist/-/react-native-draggable-flatlist-4.0.1.tgz#2f027d387ba4b8f3eb0907340e32cb85e6460df2"
+ integrity sha512-ZO1QUTNx64KZfXGXeXcBfql67l38X7kBcJ3rxUVZzPHt5r035GnGzIC0F8rqSXp6zgnwgUYMfB6zQc5PKmPL9Q==
+ dependencies:
+ "@babel/preset-typescript" "^7.17.12"
+
+react-native-fast-image@^8.6.3:
+ version "8.6.3"
+ resolved "https://registry.yarnpkg.com/react-native-fast-image/-/react-native-fast-image-8.6.3.tgz#6edc3f9190092a909d636d93eecbcc54a8822255"
+ integrity sha512-Sdw4ESidXCXOmQ9EcYguNY2swyoWmx53kym2zRsvi+VeFCHEdkO+WG1DK+6W81juot40bbfLNhkc63QnWtesNg==
react-native-gesture-handler@~2.16.1:
version "2.16.2"
@@ -8168,10 +8368,18 @@ react-native-linear-gradient@^2.8.3:
resolved "https://registry.yarnpkg.com/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz#9a116649f86d74747304ee13db325e20b21e564f"
integrity sha512-KflAXZcEg54PXkLyflaSZQ3PJp4uC4whM7nT/Uot9m0e/qxFV3p6uor1983D1YOBJbJN7rrWdqIjq0T42jOJyA==
+react-native-modal@^13.0.1:
+ version "13.0.1"
+ resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-13.0.1.tgz#691f1e646abb96fa82c1788bf18a16d585da37cd"
+ integrity sha512-UB+mjmUtf+miaG/sDhOikRfBOv0gJdBU2ZE1HtFWp6UixW9jCk/bhGdHUgmZljbPpp0RaO/6YiMmQSSK3kkMaw==
+ dependencies:
+ prop-types "^15.6.2"
+ react-native-animatable "1.3.3"
+
react-native-otp-entry@^1.7.3:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/react-native-otp-entry/-/react-native-otp-entry-1.7.3.tgz#16bc161eb9f30ab60840973fdaad629cb260e610"
- integrity sha512-BN/oEpNMfA0cnw9tB9Oq6PZZQztOiq1Ow/M+rAFd0Nll9aO1gwfCwymgIGI89/+63FkmMbv39LcgsfkZNAYzWw==
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/react-native-otp-entry/-/react-native-otp-entry-1.8.1.tgz#e9ee5df57cbd32580b23f55a6db5a37b991c11cd"
+ integrity sha512-uN5BZNzh5YkU9rNzUI1hFQxaz4R6PAVnDN+udB3fblt+XJgqTfVz+KEx8Z67/+Qga87m747oFysKOX1gI8UzLA==
react-native-pager-view@6.3.0:
version "6.3.0"
@@ -8179,14 +8387,14 @@ react-native-pager-view@6.3.0:
integrity sha512-ufJOoVa9pFL1J/yb4hpsCqp8n1qTlcF5VvwqvCacHX//D7hSeRscsiIXg1u1pXNWwllvACb+mqxec/3Uj2mxrA==
react-native-passkeys@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/react-native-passkeys/-/react-native-passkeys-0.3.0.tgz#83bf8aacacfb7d2dc8577f5091cd176957b42333"
- integrity sha512-xjdoZVRInwFXXD92jpUvSM1OGiEmJgPWm6xc4WFSHb7LnypJ4LjSbfofi59WwA/n7Z/25mcnqZNh5Xq4Viuk+Q==
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/react-native-passkeys/-/react-native-passkeys-0.3.1.tgz#424f2a63b155605250bb3f178b1482850262c03f"
+ integrity sha512-3M9/V/IJeCXBLcQsIul7BX0x4YJC1X0yID9k9b7gfy1uf9N1JRZIKmndpWs2MVsnE0XnVk2TGVXt0aL0u3xfkw==
react-native-qrcode-svg@^6.3.2:
- version "6.3.2"
- resolved "https://registry.yarnpkg.com/react-native-qrcode-svg/-/react-native-qrcode-svg-6.3.2.tgz#84b2bb37201589cff1ab58e7f7c884c5133fe47f"
- integrity sha512-IJ0UoKd33ATm08K569SOAQx0tP/MTmSjwhIPfEfgbCUGQuU6JTfgDT7sm1TVgAwPbTuA10wwJJYgWXnnFBQ4FQ==
+ version "6.3.12"
+ resolved "https://registry.yarnpkg.com/react-native-qrcode-svg/-/react-native-qrcode-svg-6.3.12.tgz#ee2c34c836c0c58f0a7f2d79304bcf12b9e151a9"
+ integrity sha512-7Bx23ZdFNJJdVXyW9BJmFWdI5kccjnpotzmL3exkV0irUKTmj51jesxpn5sqtgVdYFE4IUVoGzdS+8qg6Ua9BA==
dependencies:
prop-types "^15.8.0"
qrcode "^1.5.1"
@@ -8211,6 +8419,13 @@ react-native-safe-area-context@4.10.5:
resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.5.tgz#a9c677a48bd273afa6876772062ce08e8af1f18d"
integrity sha512-Wyb0Nqw2XJ6oZxW/cK8k5q7/UAhg/wbEG6UVf89rQqecDZTDA5ic//P9J6VvJRVZerzGmxWQpVuM7f+PRYUM4g==
+react-native-safe-modules@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz#f5f29bb9d09d17581193843d4173ad3054f74890"
+ integrity sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==
+ dependencies:
+ dedent "^0.6.0"
+
react-native-screens@3.31.1:
version "3.31.1"
resolved "https://registry.yarnpkg.com/react-native-screens/-/react-native-screens-3.31.1.tgz#909a890f669e32b0fb1b1410278b71ad2f8238f6"
@@ -8235,9 +8450,9 @@ react-native-tab-view@^3.5.2:
use-latest-callback "^0.1.5"
react-native-web@~0.19.10:
- version "0.19.12"
- resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.19.12.tgz#30d1fd70bdff7886f43c0c2698629d830fade6bc"
- integrity sha512-o2T0oztoVDQjztt4YksO9S1XRjoH/AqcSvifgWLrPJgGVbMWsfhILgl6lfUdEamVZzZSVV/2gqDVMAk/qq7mZw==
+ version "0.19.13"
+ resolved "https://registry.yarnpkg.com/react-native-web/-/react-native-web-0.19.13.tgz#2d84849bf0251ec0e3a8072fda7f9a7c29375331"
+ integrity sha512-etv3bN8rJglrRCp/uL4p7l8QvUNUC++QwDbdZ8CB7BvZiMvsxfFIRM1j04vxNldG3uo2puRd6OSWR3ibtmc29A==
dependencies:
"@babel/runtime" "^7.18.6"
"@react-native/normalize-colors" "^0.74.1"
@@ -8249,9 +8464,9 @@ react-native-web@~0.19.10:
styleq "^0.1.3"
react-native-webview@^13.12.3:
- version "13.12.3"
- resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-13.12.3.tgz#3aa9d2fc982ba2681e56d3e96e22b63a0d929270"
- integrity sha512-Y1I5YyDYyE7NC96RHLhd2nxh7ymLYOYLTefgx5ixxw2OToQK0ow3OJ+o77QcI1Tuevj5PCxwqC/14ceS/7yPJQ==
+ version "13.12.5"
+ resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-13.12.5.tgz#ed9eec1eda234d7cf18d329859b9bdebf7e258b6"
+ integrity sha512-INOKPom4dFyzkbxbkuQNfeRG9/iYnyRDzrDkJeyvSWgJAW2IDdJkWFJBS2v0RxIL4gqLgHkiIZDOfiLaNnw83Q==
dependencies:
escape-string-regexp "^4.0.0"
invariant "2.2.4"
@@ -8300,12 +8515,12 @@ react-native@0.74.5:
yargs "^17.6.2"
react-redux@^9.1.2:
- version "9.1.2"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.2.tgz#deba38c64c3403e9abd0c3fbeab69ffd9d8a7e4b"
- integrity sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5"
+ integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==
dependencies:
- "@types/use-sync-external-store" "^0.0.3"
- use-sync-external-store "^1.0.0"
+ "@types/use-sync-external-store" "^0.0.6"
+ use-sync-external-store "^1.4.0"
react-refresh@^0.14.0, react-refresh@^0.14.2:
version "0.14.2"
@@ -8336,10 +8551,10 @@ react@18.2.0:
dependencies:
loose-envify "^1.1.0"
-reactotron-core-client@2.9.4:
- version "2.9.4"
- resolved "https://registry.yarnpkg.com/reactotron-core-client/-/reactotron-core-client-2.9.4.tgz#eabc520ca8b270ee264e20172279f921778b0a4b"
- integrity sha512-0MVo8R2YVC0t6uEkFJbdelC0lOzJun/+qIOlEpIYh08VKiNVR7GYXevhZvJfSmMAUSVFoGVpeQyTbeW3brgSDQ==
+reactotron-core-client@2.9.6:
+ version "2.9.6"
+ resolved "https://registry.yarnpkg.com/reactotron-core-client/-/reactotron-core-client-2.9.6.tgz#3130f06d85dec2a8d50404ffa4520f8c6cc04002"
+ integrity sha512-7krCkKn/uy8VF1UhSmgrhYsPJ2VNJ+btYSG0S8NBlhW/EtsRHUtLQy+tbBVg2cHaTHbejY4qrvr0yP5L7L2Osw==
dependencies:
reactotron-core-contract "0.2.4"
@@ -8349,14 +8564,12 @@ reactotron-core-contract@0.2.4:
integrity sha512-CmNYahBdk9uES4vimlRsoM1gAQA6T5gXTuJzDvduOjKd0IZufZjkxzBAvhpkX5OIkPl4Xlsv+1AHXLWSJSwFLA==
reactotron-react-native@^5.1.9:
- version "5.1.9"
- resolved "https://registry.yarnpkg.com/reactotron-react-native/-/reactotron-react-native-5.1.9.tgz#1d9d557817e9f10f9c33c1339c54b46690f6ed97"
- integrity sha512-tHkC5ZADXBJ9vRcs8TFEWOcK1QzHEzI3UnorwDDSU3hnWpwVt5MtxBcgQkicLIRWcPROe4lIJMf6SG9uc+opuA==
+ version "5.1.10"
+ resolved "https://registry.yarnpkg.com/reactotron-react-native/-/reactotron-react-native-5.1.10.tgz#572a1332839e0be7036e2d47328654d4252fe3ce"
+ integrity sha512-CD20odAESgH0K2YJCyfJLQg5K5Ho1qnk0QBB3SjD1yjt5BJhPuHjdXFyuED8PYLgOz+YwOX7jyK2/wu3TCp1OQ==
dependencies:
mitt "^3.0.1"
- reactotron-core-client "2.9.4"
- optionalDependencies:
- react-native-flipper "^0.164.0"
+ reactotron-core-client "2.9.6"
readable-stream@^3.4.0, readable-stream@^3.6.0:
version "3.6.2"
@@ -8417,6 +8630,20 @@ redux@^5.0.1:
resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b"
integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==
+reflect.getprototypeof@^1.0.6:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz#c58afb17a4007b4d1118c07b92c23fca422c5d82"
+ integrity sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==
+ dependencies:
+ call-bind "^1.0.8"
+ define-properties "^1.2.1"
+ dunder-proto "^1.0.0"
+ es-abstract "^1.23.5"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+ gopd "^1.2.0"
+ which-builtin-type "^1.2.0"
+
regenerate-unicode-properties@^10.2.0:
version "10.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0"
@@ -8439,7 +8666,7 @@ regenerator-runtime@^0.14.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
-regexp.prototype.flags@^1.5.2:
+regexp.prototype.flags@^1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42"
integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==
@@ -8449,15 +8676,15 @@ regexp.prototype.flags@^1.5.2:
es-errors "^1.3.0"
set-function-name "^2.0.2"
-regexpu-core@^6.1.1:
- version "6.1.1"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.1.1.tgz#b469b245594cb2d088ceebc6369dceb8c00becac"
- integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==
+regexpu-core@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826"
+ integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==
dependencies:
regenerate "^1.4.2"
regenerate-unicode-properties "^10.2.0"
regjsgen "^0.8.0"
- regjsparser "^0.11.0"
+ regjsparser "^0.12.0"
unicode-match-property-ecmascript "^2.0.0"
unicode-match-property-value-ecmascript "^2.1.0"
@@ -8466,10 +8693,10 @@ regjsgen@^0.8.0:
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab"
integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==
-regjsparser@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.11.1.tgz#ae55c74f646db0c8fcb922d4da635e33da405149"
- integrity sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==
+regjsparser@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc"
+ integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==
dependencies:
jsesc "~3.0.2"
@@ -8529,10 +8756,15 @@ resolve-from@^5.0.0:
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-workspace-root@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz#a0098daa0067cd0efa6eb525c57c8fb4a61e78f8"
+ integrity sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==
+
resolve.exports@^2.0.0, resolve.exports@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
- integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f"
+ integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==
resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.2:
version "1.22.8"
@@ -8602,16 +8834,16 @@ safe-array-concat@^1.1.2:
has-symbols "^1.0.3"
isarray "^2.0.5"
-safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-safe-buffer@~5.2.0:
+safe-buffer@5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
safe-regex-test@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
@@ -8748,17 +8980,12 @@ set-blocking@^2.0.0:
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
-set-cookie-parser@^2.4.8:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz#ef5552b56dc01baae102acb5fc9fb8cd060c30f9"
- integrity sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==
-
-set-cookie-parser@^2.6.0:
+set-cookie-parser@^2.4.8, set-cookie-parser@^2.6.0:
version "2.7.1"
resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz#3016f150072202dfbe90fadee053573cc89d2943"
integrity sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==
-set-function-length@^1.2.1:
+set-function-length@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
@@ -8827,9 +9054,9 @@ shebang-regex@^3.0.0:
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
shell-quote@^1.6.1, shell-quote@^1.7.3:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
- integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
+ version "1.8.2"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a"
+ integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==
side-channel@^1.0.4, side-channel@^1.0.6:
version "1.0.6"
@@ -9315,9 +9542,9 @@ terminal-link@^2.1.1:
supports-hyperlinks "^2.0.0"
terser@^5.15.0:
- version "5.34.1"
- resolved "https://registry.yarnpkg.com/terser/-/terser-5.34.1.tgz#af40386bdbe54af0d063e0670afd55c3105abeb6"
- integrity sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==
+ version "5.37.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.37.0.tgz#38aa66d1cfc43d0638fab54e43ff8a4f72a21ba3"
+ integrity sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==
dependencies:
"@jridgewell/source-map" "^0.3.3"
acorn "^8.8.2"
@@ -9402,11 +9629,6 @@ tmpl@1.0.5:
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
-to-fast-properties@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
- integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
-
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -9468,15 +9690,20 @@ trim-right@^1.0.1:
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==
+ts-api-utils@^1.3.0:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
+ integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
+
ts-interface-checker@^0.1.9:
version "0.1.13"
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
- integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+ integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
turbo-stream@2.4.0:
version "2.4.0"
@@ -9534,9 +9761,9 @@ typed-array-byte-length@^1.0.1:
is-typed-array "^1.1.13"
typed-array-byte-offset@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
- integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz#3fa9f22567700cc86aaf86a1e7176f74b59600f2"
+ integrity sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==
dependencies:
available-typed-arrays "^1.0.7"
call-bind "^1.0.7"
@@ -9544,18 +9771,19 @@ typed-array-byte-offset@^1.0.2:
gopd "^1.0.1"
has-proto "^1.0.3"
is-typed-array "^1.1.13"
+ reflect.getprototypeof "^1.0.6"
typed-array-length@^1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3"
- integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d"
+ integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==
dependencies:
call-bind "^1.0.7"
for-each "^0.3.3"
gopd "^1.0.1"
- has-proto "^1.0.3"
is-typed-array "^1.1.13"
possible-typed-array-names "^1.0.0"
+ reflect.getprototypeof "^1.0.6"
typedarray.prototype.slice@^1.0.3:
version "1.0.3"
@@ -9594,15 +9822,15 @@ undici-types@~5.26.4:
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-undici-types@~6.19.2:
- version "6.19.8"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
- integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
+undici-types@~6.20.0:
+ version "6.20.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
+ integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
undici@^6.11.1:
- version "6.20.1"
- resolved "https://registry.yarnpkg.com/undici/-/undici-6.20.1.tgz#fbb87b1e2b69d963ff2d5410a40ffb4c9e81b621"
- integrity sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.0.tgz#4b3d3afaef984e07b48e7620c34ed8a285ed4cd4"
+ integrity sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==
unicode-canonical-property-names-ecmascript@^2.0.0:
version "2.0.1"
@@ -9680,7 +9908,7 @@ unpipe@~1.0.0:
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
-update-browserslist-db@^1.1.0:
+update-browserslist-db@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5"
integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==
@@ -9722,15 +9950,20 @@ use-latest-callback@^0.1.5:
integrity sha512-8nhb73STSD/z3GTHklvNjL8F9wMOo0bj0AFnulpIYuFTm6aQlT3ZcNbXF2YurKImIY8+kpSFSDHZZyQmurGrhw==
use-latest-callback@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.2.1.tgz#4d4e6a9e4817b13142834850dcfa8d24ca4569cf"
- integrity sha512-QWlq8Is8BGWBf883QOEQP5HWYX/kMI+JTbJ5rdtvJLmXTIh9XoHIO3PQcmQl8BU44VKxow1kbQUHa6mQSMALDQ==
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.2.3.tgz#2d644d3063040b9bc2d4c55bb525a13ae3de9e16"
+ integrity sha512-7vI3fBuyRcP91pazVboc4qu+6ZqM8izPWX9k7cRnT8hbD5svslcknsh3S9BUhaK11OmgTV4oWZZVSeQAiV53SQ==
-use-sync-external-store@1.2.2, use-sync-external-store@^1.0.0:
+use-sync-external-store@1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9"
integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==
+use-sync-external-store@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc"
+ integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==
+
utif@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759"
@@ -9795,270 +10028,275 @@ validate-npm-package-name@^3.0.0:
dependencies:
builtins "^1.0.3"
+validate-npm-package-name@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
+ integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==
+
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
-victory-area@37.1.2, victory-area@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-37.1.2.tgz#f6ff2849842f69a08fdbb1b1c1c35834395b7a66"
- integrity sha512-72i02xTD47i7P+X02AHhZ32yO16VcM1h/7gulgAioLEx+8m3zShBKu46Md/vqmbyS2Bypr3xpUvd+8mCDIvCbw==
+victory-area@37.3.4, victory-area@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-37.3.4.tgz#312e2dcaccb9fa682c4e44c897d1d9e204b58897"
+ integrity sha512-1TUuXHBBttlW2E/totLcG982b364qqiRHvi+zPjIblPqLilQT0tbuk+CYMxxbs4+M5s5GgKP28KIEX5qlrqmLA==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
- victory-vendor "37.1.2"
+ victory-core "37.3.4"
+ victory-vendor "37.3.4"
-victory-axis@37.1.2, victory-axis@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-axis/-/victory-axis-37.1.2.tgz#51ba607a83323f94b3abc6fa2dcf21c3c203d5be"
- integrity sha512-TuivC84cHrFoDetWDhU2VXQ34froIXBrtjYYPdmwBrMEFSu+FfrakYWUr3r25XNEPyOyk4z3a8lL/sqrxWYSRQ==
+victory-axis@37.3.4, victory-axis@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-axis/-/victory-axis-37.3.4.tgz#7a67fa1094fa0bcf9da1c14e00a8c8e1336424fd"
+ integrity sha512-Z7SfBtR54vD3pKGzJDTzsqQJc16FNNUbGPBjn87uaTz+Va+foG7i37WnH6Z96TmtrMIWg+h/MzkySJpyDmC5Gg==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-bar@37.1.2, victory-bar@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-bar/-/victory-bar-37.1.2.tgz#df20cb35186c334656a83de76043848b6f9d3503"
- integrity sha512-VJDE+TGSgyIchvln189cPMuG3LYqa8zCjHa8kYValP3bFTa5c+D1Y8R/FjVger40uEL3aQz1teHJODJCOxuXGA==
+victory-bar@37.3.4, victory-bar@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-bar/-/victory-bar-37.3.4.tgz#0eaf297a17cb411dc7d11f8697c33546d31a962b"
+ integrity sha512-I3hNbzlqG3QoqrUZMdlR0zAiNQOXpevDvIUVCFRegnGsRZPl05KiYjNoKzaIpc/82AuZyfKGenAIDCcbevkFjA==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
- victory-vendor "37.1.2"
+ victory-core "37.3.4"
+ victory-vendor "37.3.4"
-victory-box-plot@37.1.2, victory-box-plot@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-box-plot/-/victory-box-plot-37.1.2.tgz#3459626a93f07d4e0505069bf7237a5b8cdebe42"
- integrity sha512-i7JIjpaPTr3uaoW6ibfX4PrH1QcUeLXNxeCbmPRb+Hs+ug0d16J4RELPCaeNo/ZNg4rEzfueNTvExsYFIpHaWw==
+victory-box-plot@37.3.4, victory-box-plot@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-box-plot/-/victory-box-plot-37.3.4.tgz#5a38a2be8b367a356c638f5ad5491d909b226f62"
+ integrity sha512-6ghOwA9C4qPJTf2GKWX4PtPL4REmT4g8RD1frAZkeR04nzN5BGjF1HD1WAHwqAigXPr8tswEpvSQJT21RRstDA==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
- victory-vendor "37.1.2"
+ victory-core "37.3.4"
+ victory-vendor "37.3.4"
-victory-brush-container@37.1.2, victory-brush-container@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-brush-container/-/victory-brush-container-37.1.2.tgz#2d45f5683c34e41f5359e830f8c6c34c9f9f3921"
- integrity sha512-pJrMSo815UJxOT5OTXnq1tI5qQxQLnrlgDRNF8pxVF9dSxm7BhETjZSQfZgcLmCe3N931U19j8oCxw8sMSpJJw==
+victory-brush-container@37.3.4, victory-brush-container@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-brush-container/-/victory-brush-container-37.3.4.tgz#3a1c33b5f8759f1cecd48979d4cd4a13e2a6ddf2"
+ integrity sha512-Blc0FsT6bqU86x7vBixpPjL3bDwJIc8UX8w/MkNQGU4REsRkN83a5yVL/vbfc/H3aUG4YJaMep7Gh0RwuNBYag==
dependencies:
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-brush-line@37.1.2, victory-brush-line@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-brush-line/-/victory-brush-line-37.1.2.tgz#ada38e7cd1e44afaff89e32189ffc308361cdb24"
- integrity sha512-Bq9JGu/o4p/NQ/ZOASUm6MmomS+2b0EvAHjULa06z7nsElNePpedTYPk2aAb7mr4sJZe6u/AsDMthG+C8Zc32Q==
+victory-brush-line@37.3.4, victory-brush-line@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-brush-line/-/victory-brush-line-37.3.4.tgz#18dff53b47e917fae3c30921c42ca586a931c48b"
+ integrity sha512-osKm2ouWGg0J19KF08GDjSkN4zHRtjvBG+pcxdeiAaOBa3jfD03Mrlx0gXkWK1X6F3NTFEsaf8iUpubeDrlHyg==
dependencies:
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-candlestick@37.1.2, victory-candlestick@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-candlestick/-/victory-candlestick-37.1.2.tgz#f79083691cfd54dd4e184a99b7a25820466b7f3d"
- integrity sha512-X+pLwvdIj/+nrvk1bZxhdJ9UBj7QLN4jdkIPDl6ekjfZ9Ylhi8/I/ttAkBu+7w7ilpGudIK6fr7PVHyZyYU6TA==
+victory-candlestick@37.3.4, victory-candlestick@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-candlestick/-/victory-candlestick-37.3.4.tgz#06cc21d1cb56dc1e27b673a3f24a7ec4fb0bcca1"
+ integrity sha512-6pphv0oGzbjbTSMDsy9b5jVs+q2KH9sRaqcIGFMRUZicnuTLettie945gohWrr/FGYd/2Q1/ss8Jq5/lizFYpA==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-canvas@37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-canvas/-/victory-canvas-37.1.2.tgz#2db3235a2fcdb8033efd92026bf2f6bf1810343f"
- integrity sha512-4Qmz7YpFBj2KaBSe+j5zLVrKAJLG3HtXVVaKI3oUzw4GzHlYXf77dJLYe2EqJVEFCMgVsmASqE3xVTklioMV7g==
+victory-canvas@37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-canvas/-/victory-canvas-37.3.4.tgz#18adac06c9218dc78de99a352a162f3fb33e331a"
+ integrity sha512-32Ql5kXrKlqLLZbP3IDmB6w9ONpzVG+EuUWB6rAxIONeSPy6eZfIx+IYy0CUAkJj+zwa50iVL5GeRtLNb05WZw==
dependencies:
lodash "^4.17.19"
- victory-bar "37.1.2"
- victory-core "37.1.2"
+ victory-bar "37.3.4"
+ victory-core "37.3.4"
-victory-chart@37.1.2, victory-chart@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-chart/-/victory-chart-37.1.2.tgz#d379f346efa437590ad22526497e7cb955fa92ae"
- integrity sha512-efV7lnqwu4+zLzB6aY3jjYbbfYJ9+1VC6uwx+8AGjbb8vGkbByUOKC6Fhdcuca2mLqNQHM0Ynvevs3+4XrBz1g==
+victory-chart@37.3.4, victory-chart@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-chart/-/victory-chart-37.3.4.tgz#9afa2360125108448544a2c6c40df5424062cc2e"
+ integrity sha512-iQ7jSnDSpvHFe+L97jaOPaSPXQzpPhYX5TE4j8olDR/hqWEwALDkFzTCiZt/cLD9lhL+OJQSRbxtwlXMndPlgg==
dependencies:
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-axis "37.1.2"
- victory-core "37.1.2"
- victory-polar-axis "37.1.2"
- victory-shared-events "37.1.2"
+ victory-axis "37.3.4"
+ victory-core "37.3.4"
+ victory-polar-axis "37.3.4"
+ victory-shared-events "37.3.4"
-victory-core@37.1.2, victory-core@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-core/-/victory-core-37.1.2.tgz#713d95698f9b2b53be79947b60e10c1cbc6a7c3c"
- integrity sha512-9fskAQw9MvYEBL+0cDk2lihKyECdrh+8HGicDfSKGOWtsSLk+x7R6PKCpOzhmSgc9fG+HjWYfs2uTWSPNTjF9A==
+victory-core@37.3.4, victory-core@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-core/-/victory-core-37.3.4.tgz#255c23068a9399377a5465d0c9c12fee825f6704"
+ integrity sha512-EGPjBMsVjOEXOtcNOalG96AgytcUb6Ko3EdlSMIrPO8MV6REjmokwbit1zV6ImlptXhSjZbrCvsFQ96+5ucMvQ==
dependencies:
lodash "^4.17.21"
react-fast-compare "^3.2.0"
- victory-vendor "37.1.2"
+ victory-vendor "37.3.4"
-victory-create-container@37.1.2, victory-create-container@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-create-container/-/victory-create-container-37.1.2.tgz#aff27ca8fd554a58959861db4925c02188a581de"
- integrity sha512-GvWA+N3SXf6he+hW1IQqaRjKG7XSV9WBr06mZixRVyOeHJGGZ5g7Vsse1WrwUz5/DM8HcqF34PTfhTs39v6zaw==
+victory-create-container@37.3.4, victory-create-container@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-create-container/-/victory-create-container-37.3.4.tgz#c44f5c51fd23c657b02a50da635ebd72bcba3610"
+ integrity sha512-jYSuw5LrqczhBj0oeiDZSLG8VmLIgEc5LYH375iVBHoeSBlLC5f1WRhr7BsSHV4hVqE5IlpYE+4LR0pUM9Ea+w==
dependencies:
lodash "^4.17.19"
- victory-brush-container "37.1.2"
- victory-core "37.1.2"
- victory-cursor-container "37.1.2"
- victory-selection-container "37.1.2"
- victory-voronoi-container "37.1.2"
- victory-zoom-container "37.1.2"
-
-victory-cursor-container@37.1.2, victory-cursor-container@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-cursor-container/-/victory-cursor-container-37.1.2.tgz#ba92a67e517d183a7f7f74983e157e69f87c8292"
- integrity sha512-GqOVB/Emas/ODw7Sb7FX1FmUyH3jb5eNF+2sR+DdYfDMTFmjVUyqGkSpi1bIgHoSWTrdG9C2tkxA69gI9JDtLA==
+ victory-brush-container "37.3.4"
+ victory-core "37.3.4"
+ victory-cursor-container "37.3.4"
+ victory-selection-container "37.3.4"
+ victory-voronoi-container "37.3.4"
+ victory-zoom-container "37.3.4"
+
+victory-cursor-container@37.3.4, victory-cursor-container@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-cursor-container/-/victory-cursor-container-37.3.4.tgz#131a5a7d28eecd7f564fba177716713fae774c6e"
+ integrity sha512-UJrYWnhIhMSTECsL5BOCeM3ck6zsKj5Dy9UI2Ok45kqDy0E9NH86J6mvpBgEuhgR4nf/lBBHc2fYjLx8fLJi2A==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-errorbar@37.1.2, victory-errorbar@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-errorbar/-/victory-errorbar-37.1.2.tgz#24c650dd563dd9bdc61033a7116cb286ef079c34"
- integrity sha512-sgs1nla57Ctt9slG5WXWdxqTXtTdKcZM+u83C5j1ceKKmMjCiqiNYmMQpF7yz7Nj2ewJTrOzZON9h2zgurr2Cg==
+victory-errorbar@37.3.4, victory-errorbar@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-errorbar/-/victory-errorbar-37.3.4.tgz#0e0d41b46b1414a70ad1af53e52cb2dd69aab7a5"
+ integrity sha512-Ys7fIzTaVtlYg4hA0O9R4oe4oAyT36Mv/fMaqOV3PWCm07IrAeqCX5mP+UPAUvZF3cRp5qHRh1BiaBAEzf+/qg==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-group@37.1.2, victory-group@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-group/-/victory-group-37.1.2.tgz#7641330090918f6eed0620f329c6db74855f05ad"
- integrity sha512-Zwdvs6pSfF02xax8rQbahSqRP7eua4mS0so0gFYr/M2sNiKN4hxnM72j3dLo9nQ63kQpYhcUZe8U/hEjlhHxYQ==
+victory-group@37.3.4, victory-group@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-group/-/victory-group-37.3.4.tgz#aae4d33421e59d1258f7595b3c380932901d0608"
+ integrity sha512-V93yQp/2+JsHdkp2F97Vy/fEJ9WFjzFIhoQ+9KaCI6eOcE72/aIYSJ9Z4JO1yLAR74akl0fPvC624xm8E2VBzg==
dependencies:
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-core "37.1.2"
- victory-shared-events "37.1.2"
+ victory-core "37.3.4"
+ victory-shared-events "37.3.4"
-victory-histogram@37.1.2, victory-histogram@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-histogram/-/victory-histogram-37.1.2.tgz#fb87e08809e386ddae7388b8776d9585002de5be"
- integrity sha512-IGeQZ2HGuvmMyYxoKOczIILNH6ARDJaWcDG3h5BX4jP4JH2+eWeEukCVHGT3b1VM1OFxuvPijJrePXYzKgQ+AQ==
+victory-histogram@37.3.4, victory-histogram@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-histogram/-/victory-histogram-37.3.4.tgz#d0056d2e35235b0d2cfd7806081fb5ea0ec3261c"
+ integrity sha512-uqewLuEHDv/CkxDp04KrOaGCenbbjNqklbd52SHlH+C/tSJ0lW9z22WmyHjiygQHzLCpnRjy8jIi1ztQZFDkKg==
dependencies:
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-bar "37.1.2"
- victory-core "37.1.2"
- victory-vendor "37.1.2"
+ victory-bar "37.3.4"
+ victory-core "37.3.4"
+ victory-vendor "37.3.4"
-victory-legend@37.1.2, victory-legend@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-legend/-/victory-legend-37.1.2.tgz#1a4b8e60be01330e3f0e9d8d30d5e6c06d49de11"
- integrity sha512-dmwwHtFpEXPIelY9iH1a2Q/V2Ji8DaF0a2g+hLH4SM/xbA9YwjP2/9DIQcwS7/OVl4l1AnSbLFcu5RyDPJ0kww==
+victory-legend@37.3.4, victory-legend@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-legend/-/victory-legend-37.3.4.tgz#1e562f964e8257759bd2017f25c68fa0be9e39f9"
+ integrity sha512-EwkE6kAzZUxJkWgSVZ1g93tFFtbyElxy7PPRW7ipmWQbtL99kb8hmL40GsEEKHGyOX4bPo2M1TpckL35qEFihA==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-line@37.1.2, victory-line@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-line/-/victory-line-37.1.2.tgz#2d2191b7c9da90e914f133a5abb82ef938246c66"
- integrity sha512-DjttWkQG0iZtQ9SM/KphN168dQUgw1xwyr0qR1aN12VtVb1jspI1LkBH8XqUeYXgfuI1vKQJWcV/zMOK2Q1n8g==
+victory-line@37.3.4, victory-line@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-line/-/victory-line-37.3.4.tgz#2fed142d45d529a01420eeeb4aa4452048439e25"
+ integrity sha512-WO4EiBxJG7MS/dfxirRdtrC7qkwCyCKpqtCFSEDJyCyctN8iNp6+SfXiYfIGw6fA4cdT/23weOIaC0DQgI2vBw==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
- victory-vendor "37.1.2"
+ victory-core "37.3.4"
+ victory-vendor "37.3.4"
victory-native@^37.0.3-next.0:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-native/-/victory-native-37.1.2.tgz#d7f3db4579bc36521fbe108d85368a26b8daa005"
- integrity sha512-df9RRGv9S4Im6jEo2u/RHT2IhDvkzbsoXXZW8ib7IzDOK4ZWd9l7p4shB+Za8NRdfbqYJMoLA0h5bhpxM4VmWg==
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-native/-/victory-native-37.3.4.tgz#84ec1a57c9b3b18770870f94942549db701f59a9"
+ integrity sha512-KI3P/ZwjviQj6mSddIaMs/RZ6z55xVRFsrEx8YHRs8kCTYegTrN1kl4Aol2ZZZHZ5l69LoWHONsMdiRyIeolCQ==
dependencies:
hoist-non-react-statics "^3.3.2"
lodash "^4.17.21"
react-fast-compare "^3.2.0"
- victory "^37.1.2"
- victory-area "^37.1.2"
- victory-axis "^37.1.2"
- victory-bar "^37.1.2"
- victory-box-plot "^37.1.2"
- victory-brush-container "^37.1.2"
- victory-brush-line "^37.1.2"
- victory-candlestick "^37.1.2"
- victory-chart "^37.1.2"
- victory-core "^37.1.2"
- victory-create-container "^37.1.2"
- victory-cursor-container "^37.1.2"
- victory-errorbar "^37.1.2"
- victory-group "^37.1.2"
- victory-histogram "^37.1.2"
- victory-legend "^37.1.2"
- victory-line "^37.1.2"
- victory-pie "^37.1.2"
- victory-polar-axis "^37.1.2"
- victory-scatter "^37.1.2"
- victory-selection-container "^37.1.2"
- victory-shared-events "^37.1.2"
- victory-stack "^37.1.2"
- victory-tooltip "^37.1.2"
- victory-voronoi "^37.1.2"
- victory-voronoi-container "^37.1.2"
- victory-zoom-container "^37.1.2"
-
-victory-pie@37.1.2, victory-pie@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-pie/-/victory-pie-37.1.2.tgz#d9041ee2758cf142a9b9818047eedba04c685ba1"
- integrity sha512-lwPMAtkcGDJ4gdpKFmR7hRnowJZIGQ6XIvyPj7Ir+QfL6ew64kl7YiIsQpDnC4zqwAjDPIbIW/kRROiSKRjXjQ==
+ victory "^37.3.4"
+ victory-area "^37.3.4"
+ victory-axis "^37.3.4"
+ victory-bar "^37.3.4"
+ victory-box-plot "^37.3.4"
+ victory-brush-container "^37.3.4"
+ victory-brush-line "^37.3.4"
+ victory-candlestick "^37.3.4"
+ victory-chart "^37.3.4"
+ victory-core "^37.3.4"
+ victory-create-container "^37.3.4"
+ victory-cursor-container "^37.3.4"
+ victory-errorbar "^37.3.4"
+ victory-group "^37.3.4"
+ victory-histogram "^37.3.4"
+ victory-legend "^37.3.4"
+ victory-line "^37.3.4"
+ victory-pie "^37.3.4"
+ victory-polar-axis "^37.3.4"
+ victory-scatter "^37.3.4"
+ victory-selection-container "^37.3.4"
+ victory-shared-events "^37.3.4"
+ victory-stack "^37.3.4"
+ victory-tooltip "^37.3.4"
+ victory-voronoi "^37.3.4"
+ victory-voronoi-container "^37.3.4"
+ victory-zoom-container "^37.3.4"
+
+victory-pie@37.3.4, victory-pie@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-pie/-/victory-pie-37.3.4.tgz#83a8d0be3cc83670e6dfc8107f1ba13e873f31b1"
+ integrity sha512-J0qdbySZh2D4SoCpNiIvh9n8DxeafHVPU717cZ/77FAF/ICVf6UWzmqnTUaKQ3leeHt3iJRluBEbXbwrur0WKQ==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
- victory-vendor "37.1.2"
+ victory-core "37.3.4"
+ victory-vendor "37.3.4"
-victory-polar-axis@37.1.2, victory-polar-axis@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-polar-axis/-/victory-polar-axis-37.1.2.tgz#614c54696a12ea08f2426eab3927819f8c77131a"
- integrity sha512-cvELVQ5MwDjDfC/n/g8QVfUhexLNKcp7kXxbjp6IGbzQMCfNtROHaVaHaISNH7/EV5zinwBhNj0+ISWatROtrQ==
+victory-polar-axis@37.3.4, victory-polar-axis@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-polar-axis/-/victory-polar-axis-37.3.4.tgz#0bdb6d607c829407aa2d04354433240ebea39cae"
+ integrity sha512-qS5cWgh21HiFlzeMGA30f3gf4hsxlESgWhtXVXHZbbXjV3uG+N4OioPYGh2Y1uJjFfDQNMmKekl3YrnsQtBCeg==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-scatter@37.1.2, victory-scatter@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-scatter/-/victory-scatter-37.1.2.tgz#34d91c0a0af0ebf9e9b2b380e912a7136dcfd2f3"
- integrity sha512-6orfcqdfZCuTHqf/wE+B+sQbpzf2/TyEvLZhvYIXFr5GzdVu39psNl74K3GQ2Ky0db+e6oLEHV8nZYO2IvWoWg==
+victory-scatter@37.3.4, victory-scatter@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-scatter/-/victory-scatter-37.3.4.tgz#cc4fd4bfb2dfd5d4ba1c0639872183ca819e5b91"
+ integrity sha512-7VGkK6S57mQ2hUtXdT0+D5UI7T0h93TR7XtJPG/PWZuoY+jwp+Poq57Eh5Ebf0HdigGTVkKVp9Devh9822K/vQ==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-selection-container@37.1.2, victory-selection-container@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-selection-container/-/victory-selection-container-37.1.2.tgz#7311e4ee4b92a4bd4639fe1ae0ed5e6b1eeaf604"
- integrity sha512-1sp1CV9LrBADnsBcFgVQuYUNCLeANuybtOS9/5TvPPELBGWQQ55nBN3mH/laVPDy9gGyPARh1lmdPgREHmSkmQ==
+victory-selection-container@37.3.4, victory-selection-container@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-selection-container/-/victory-selection-container-37.3.4.tgz#c8f5be96ade4143fffdc8a10b9adc718b882004a"
+ integrity sha512-8XVY3unWH7nJmD+8PPgNZpweIR6eJkAIoXAJC9eef3CAG4GSTtNflXCJVajRCgrd41RX4b4p7zXOisW9fEQ8Jw==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-shared-events@37.1.2, victory-shared-events@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-shared-events/-/victory-shared-events-37.1.2.tgz#d998f0403d3a802310a81b62a6229ff04ed7ea09"
- integrity sha512-fpgpe6eI0A9dD39ZsFaid3sXdrCf1WIzFnpkNFT6hBYrDDD5Fd2/2SgqOxuul64PlYJAk6NOY+F1agmEtmB+/Q==
+victory-shared-events@37.3.4, victory-shared-events@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-shared-events/-/victory-shared-events-37.3.4.tgz#bc0f5aa6ae940c699c91326ce12407801701af25"
+ integrity sha512-eX0Vko3k62R1OnQHe8VikkRP3H8O8nrGXG6GfcUjQWN2uBe31zhwXUOpzZcQstHyfo3L8u3JbQWMQGXEg9LlXw==
dependencies:
json-stringify-safe "^5.0.1"
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-stack@37.1.2, victory-stack@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-stack/-/victory-stack-37.1.2.tgz#f52cbaa8c574a1a2f32c0d47226cbd76186a9d16"
- integrity sha512-H3FWiv3c6s/++PB3pBZ/9r8mcry1FHg8JK+03DZhRKHtJIti/38iIYUUiFOoQKmjVUQ7wrLdftYiemy3st77Dg==
+victory-stack@37.3.4, victory-stack@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-stack/-/victory-stack-37.3.4.tgz#13a30749b12192743e674e39498bf908481a5c57"
+ integrity sha512-2aWAKnf3D+xk02l2ib+5ft5dlMHl2JegyTmNVCrNZsgHuqsblfffQN+VfRsng8U56KJ5MzVTsWdA3dT4ioveag==
dependencies:
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-core "37.1.2"
- victory-shared-events "37.1.2"
+ victory-core "37.3.4"
+ victory-shared-events "37.3.4"
-victory-tooltip@37.1.2, victory-tooltip@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-tooltip/-/victory-tooltip-37.1.2.tgz#5129b11b963f53baa7e5c30060ccd8d0b956fbdb"
- integrity sha512-j1r1t83X0epSwivhf4eYSD2DoWRVy5fkINbLk4sVnnV2EUT4Lt4yH3uelIhYQuT4Y+Ez9KFLoQvR6bfwmHyfZw==
+victory-tooltip@37.3.4, victory-tooltip@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-tooltip/-/victory-tooltip-37.3.4.tgz#1bba0080d6474085cb412af2f7054925966cd658"
+ integrity sha512-kWIO5DEWdqhp+gvdjWb1TtjzSpGiQTr23OWR51FW2nXpkBzvy6GbRYRUB76F7/5XaJk0dsQDX4MYVs9JOxxN+w==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-vendor@37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-37.1.2.tgz#70a10e91d58c83525db58bedfa32530495b6d4d8"
- integrity sha512-kZ2UVcoINrisEW7JDaxws2v17D4n4ShRzsPUcYnF37/avByNbjzybhvs8JrqO6+vUmoP2W1DrTEI2L/86PEQjw==
+victory-vendor@37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-37.3.4.tgz#149c5bfa16aa37868b3f9a6f02576594e87e78e8"
+ integrity sha512-VD0ddlxWErbl4a2KEG2ruPynLdjDskPny0FuhQkrPVz1o5SBaxkYR8/6mFHUAQBurL8w6eujqP3jJIGVNevbiQ==
dependencies:
"@types/d3-array" "^3.0.3"
"@types/d3-ease" "^3.0.0"
@@ -10075,79 +10313,79 @@ victory-vendor@37.1.2:
d3-time "^3.0.0"
d3-timer "^3.0.1"
-victory-voronoi-container@37.1.2, victory-voronoi-container@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-voronoi-container/-/victory-voronoi-container-37.1.2.tgz#536df5df863307555ea1b2e83c803e036e3beb6b"
- integrity sha512-uFnZmRWp+QP7mH9jqetmoSR/KYhnFr4sFGR9+HrQkUbOzBQpT7Q2SNrDcr5l29Hm7Lb+3iUuF/l0E//EzuS+Ig==
+victory-voronoi-container@37.3.4, victory-voronoi-container@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-voronoi-container/-/victory-voronoi-container-37.3.4.tgz#f6880739a8c18cddf963d30b8090e2057dcfaeab"
+ integrity sha512-Vt4l85rg/qHwUZR0j8zcHwsMY5VnowJIEgD9u8FJ69PvBDvW0906+Lh7FJ+aw8zUkUq0S5sE6CRUKyilbOCk+A==
dependencies:
delaunay-find "0.0.6"
lodash "^4.17.19"
react-fast-compare "^3.2.0"
- victory-core "37.1.2"
- victory-tooltip "37.1.2"
+ victory-core "37.3.4"
+ victory-tooltip "37.3.4"
-victory-voronoi@37.1.2, victory-voronoi@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-voronoi/-/victory-voronoi-37.1.2.tgz#9697d5ed75677c3fda9f747ce8af77fa68c658b9"
- integrity sha512-rbihVJMDLmrMKfm6mbzTft9BbaJWZkymFkYxZZT0ZdHjsyaFm7t3jjrtvG1cq6HsTI10AfCh7iWmD9aky69eMQ==
+victory-voronoi@37.3.4, victory-voronoi@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-voronoi/-/victory-voronoi-37.3.4.tgz#9eb0a0fe233432e2f6cbeec5c2bf65f66f43673e"
+ integrity sha512-wNeE3M7g1ggk2JuyDTLVp9ACOHu4Al4Eq8qHDcfkrN1RWRmmDylBoBT7VMOnor4T2QPof513/+EBsZ6a46CUcw==
dependencies:
d3-voronoi "^1.1.4"
lodash "^4.17.19"
- victory-core "37.1.2"
+ victory-core "37.3.4"
-victory-zoom-container@37.1.2, victory-zoom-container@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory-zoom-container/-/victory-zoom-container-37.1.2.tgz#dd60f2f15ed6fa6ddfa875e62b9a5a3e09167fed"
- integrity sha512-OI0AgskIpruWaFWF1BkJWi4UZGyEJ+ol3uzlIMk3tPmYkuw5Gh4pTW6kEw/0E1BP+PwJjv+IRGBbT46/YxV3UQ==
+victory-zoom-container@37.3.4, victory-zoom-container@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory-zoom-container/-/victory-zoom-container-37.3.4.tgz#ee65548ca6f215abfd89228b304391f04bd0d184"
+ integrity sha512-hXMlG2HX2Lr/VdrsZCxhwAfhDaL2W+f2kn7lk/shy02yEVcRh6B1rJDSUWHxJGWOBRngxzzAToNNOuNzJMRovw==
dependencies:
lodash "^4.17.19"
- victory-core "37.1.2"
-
-victory@^37.1.2:
- version "37.1.2"
- resolved "https://registry.yarnpkg.com/victory/-/victory-37.1.2.tgz#46a1e4836de7524c730480884c01fa19ad46428f"
- integrity sha512-V1YkJiWQ/vu5MSZ/Yf9/AJQeE+N1p1eUW6r5xJgOjbhioIbnL7FBTyJW1AXqqDZN9WdyECI3TkFQ1l/QbgztoA==
- dependencies:
- victory-area "37.1.2"
- victory-axis "37.1.2"
- victory-bar "37.1.2"
- victory-box-plot "37.1.2"
- victory-brush-container "37.1.2"
- victory-brush-line "37.1.2"
- victory-candlestick "37.1.2"
- victory-canvas "37.1.2"
- victory-chart "37.1.2"
- victory-core "37.1.2"
- victory-create-container "37.1.2"
- victory-cursor-container "37.1.2"
- victory-errorbar "37.1.2"
- victory-group "37.1.2"
- victory-histogram "37.1.2"
- victory-legend "37.1.2"
- victory-line "37.1.2"
- victory-pie "37.1.2"
- victory-polar-axis "37.1.2"
- victory-scatter "37.1.2"
- victory-selection-container "37.1.2"
- victory-shared-events "37.1.2"
- victory-stack "37.1.2"
- victory-tooltip "37.1.2"
- victory-voronoi "37.1.2"
- victory-voronoi-container "37.1.2"
- victory-zoom-container "37.1.2"
+ victory-core "37.3.4"
+
+victory@^37.3.4:
+ version "37.3.4"
+ resolved "https://registry.yarnpkg.com/victory/-/victory-37.3.4.tgz#fa16cf99e727a8b90280549e41aef785d406ca28"
+ integrity sha512-4fozCnfG8z6EqgQ1G3e0JNTjfr87cUx+MDVwmqfeq0NZATUcXaJ16dcjkZHpXHLoFu/CCZCXGqZSpL/y4l1yUQ==
+ dependencies:
+ victory-area "37.3.4"
+ victory-axis "37.3.4"
+ victory-bar "37.3.4"
+ victory-box-plot "37.3.4"
+ victory-brush-container "37.3.4"
+ victory-brush-line "37.3.4"
+ victory-candlestick "37.3.4"
+ victory-canvas "37.3.4"
+ victory-chart "37.3.4"
+ victory-core "37.3.4"
+ victory-create-container "37.3.4"
+ victory-cursor-container "37.3.4"
+ victory-errorbar "37.3.4"
+ victory-group "37.3.4"
+ victory-histogram "37.3.4"
+ victory-legend "37.3.4"
+ victory-line "37.3.4"
+ victory-pie "37.3.4"
+ victory-polar-axis "37.3.4"
+ victory-scatter "37.3.4"
+ victory-selection-container "37.3.4"
+ victory-shared-events "37.3.4"
+ victory-stack "37.3.4"
+ victory-tooltip "37.3.4"
+ victory-voronoi "37.3.4"
+ victory-voronoi-container "37.3.4"
+ victory-zoom-container "37.3.4"
viem@^2.21.29:
- version "2.21.29"
- resolved "https://registry.yarnpkg.com/viem/-/viem-2.21.29.tgz#a86225b41968b89f23c9b792eb0745be6bb03cef"
- integrity sha512-n9LoCJjmI1XsE33nl+M4p3Wy5hczv7YC682RpX4Qk9cw8s9HJU+hUi5eDcNDPBcAwIHGCPKsf8yFBEYnE2XYVg==
- dependencies:
- "@adraffy/ens-normalize" "1.11.0"
- "@noble/curves" "1.6.0"
- "@noble/hashes" "1.5.0"
- "@scure/bip32" "1.5.0"
- "@scure/bip39" "1.4.0"
- abitype "1.0.6"
+ version "2.21.54"
+ resolved "https://registry.yarnpkg.com/viem/-/viem-2.21.54.tgz#76d6f86ab8809078f1ac140ac1a2beadbc86b9f6"
+ integrity sha512-G9mmtbua3UtnVY9BqAtWdNp+3AO+oWhD0B9KaEsZb6gcrOWgmA4rz02yqEMg+qW9m6KgKGie7q3zcHqJIw6AqA==
+ dependencies:
+ "@noble/curves" "1.7.0"
+ "@noble/hashes" "1.6.1"
+ "@scure/bip32" "1.6.0"
+ "@scure/bip39" "1.5.0"
+ abitype "1.0.7"
isows "1.0.6"
+ ox "0.1.2"
webauthn-p256 "0.0.10"
ws "8.18.0"
@@ -10262,15 +10500,44 @@ whatwg-url@^5.0.0:
webidl-conversions "^3.0.0"
which-boxed-primitive@^1.0.2:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.0.tgz#2d850d6c4ac37b95441a67890e19f3fda8b6c6d9"
+ integrity sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==
+ dependencies:
+ is-bigint "^1.1.0"
+ is-boolean-object "^1.2.0"
+ is-number-object "^1.1.0"
+ is-string "^1.1.0"
+ is-symbol "^1.1.0"
+
+which-builtin-type@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.0.tgz#58042ac9602d78a6d117c7e811349df1268ba63c"
+ integrity sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==
+ dependencies:
+ call-bind "^1.0.7"
+ function.prototype.name "^1.1.6"
+ has-tostringtag "^1.0.2"
+ is-async-function "^2.0.0"
+ is-date-object "^1.0.5"
+ is-finalizationregistry "^1.1.0"
+ is-generator-function "^1.0.10"
+ is-regex "^1.1.4"
+ is-weakref "^1.0.2"
+ isarray "^2.0.5"
+ which-boxed-primitive "^1.0.2"
+ which-collection "^1.0.2"
+ which-typed-array "^1.1.15"
+
+which-collection@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
- integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+ resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0"
+ integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==
dependencies:
- is-bigint "^1.0.1"
- is-boolean-object "^1.1.0"
- is-number-object "^1.0.4"
- is-string "^1.0.5"
- is-symbol "^1.0.3"
+ is-map "^2.0.3"
+ is-set "^2.0.3"
+ is-weakmap "^2.0.2"
+ is-weakset "^2.0.3"
which-module@^2.0.0:
version "2.0.1"
@@ -10278,9 +10545,9 @@ which-module@^2.0.0:
integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2:
- version "1.1.15"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d"
- integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==
+ version "1.1.16"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.16.tgz#db4db429c4706feca2f01677a144278e4a8c216b"
+ integrity sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==
dependencies:
available-typed-arrays "^1.0.7"
call-bind "^1.0.7"
@@ -10482,9 +10749,9 @@ yallist@^4.0.0:
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^2.2.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.0.tgz#14059ad9d0b1680d0f04d3a60fe00f3a857303c3"
- integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773"
+ integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==
yargs-parser@^18.1.2:
version "18.1.3"
@@ -10535,9 +10802,9 @@ yocto-queue@^0.1.0:
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
yup@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/yup/-/yup-1.4.0.tgz#898dcd660f9fb97c41f181839d3d65c3ee15a43e"
- integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/yup/-/yup-1.5.0.tgz#1aaa5e453f04424094b9c8a0e5292e0ac2d97246"
+ integrity sha512-NJfBIHnp1QbqZwxcgl6irnDMIsb/7d1prNhFx02f1kp8h+orpi4xs3w90szNpOh68a/iHPdMsYvhZWoDmUvXBQ==
dependencies:
property-expr "^2.0.5"
tiny-case "^1.0.3"
@@ -10550,9 +10817,9 @@ zod-validation-error@^2.1.0:
integrity sha512-VJh93e2wb4c3tWtGgTa0OF/dTt/zoPCPzXq4V11ZjxmEAFaPi/Zss1xIZdEB5RD8GD00U0/iVXgqkF77RV7pdQ==
zod@^3.21.4, zod@^3.22.4:
- version "3.23.8"
- resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
- integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==
+ version "3.24.1"
+ resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.1.tgz#27445c912738c8ad1e9de1bea0359fa44d9d35ee"
+ integrity sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==
zustand@^4.4.1:
version "4.5.5"