Repository: towns-protocol/towns
Pull request #2674: fix(contract): revert wallet linking delegate cash
Author: login: giuseppecrj
Created: 2025-03-21T20:29:07Z | Merged: 2025-04-16T20:36:48Z



Diff:
diff --git a/core/contracts/base/deploy/wallet_link.go b/core/contracts/base/deploy/wallet_link.go
index 427785d1e52..91b5fefb327 100644
--- a/core/contracts/base/deploy/wallet_link.go
+++ b/core/contracts/base/deploy/wallet_link.go
@@ -50,11 +50,6 @@ type IWalletLinkBaseVMSpecificData struct {
 	Value []byte
 }
 
-// IWalletLinkBaseWalletQueryOptions is an auto generated low-level Go binding around an user-defined struct.
-type IWalletLinkBaseWalletQueryOptions struct {
-	IncludeDelegations bool
-}
-
 // WalletLibWallet is an auto generated low-level Go binding around an user-defined struct.
 type WalletLibWallet struct {
 	Addr   string
@@ -63,8 +58,8 @@ type WalletLibWallet struct {
 
 // WalletLinkMetaData contains all meta data concerning the WalletLink contract.
 var WalletLinkMetaData = &bind.MetaData{
-	ABI: "[{\"type\":\"function\",\"name\":\"__WalletLink_init\",\"inputs\":[{\"name\":\"delegateRegistry\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"sclEip6565\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkIfLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkIfNonEVMWalletLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"walletHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"explicitWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"options\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.WalletQueryOptions\",\"components\":[{\"name\":\"includeDelegations\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"tuple[]\",\"internalType\":\"structWalletLib.Wallet[]\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultWallet\",\"inputs\":[{\"name\":\"rootWallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestNonceForRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootKeyForWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWalletsByRootKeyWithDelegations\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"linkCallerToRootKey\",\"inputs\":[{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkNonEVMWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.NonEVMLinkedWallet\",\"components\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"extraData\",\"type\":\"tuple[]\",\"internalType\":\"structIWalletLinkBase.VMSpecificData[]\",\"components\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeCallerLink\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeNonEVMWalletLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultWallet\",\"inputs\":[{\"name\":\"defaultWallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"dependencyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InterfaceAdded\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"indexed\":true,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InterfaceRemoved\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"indexed\":true,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LinkNonEVMWalletToRootWallet\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LinkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"secondWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveNonEVMWalletLink\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetDefaultWallet\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"defaultWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"Initializable_InInitializingState\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Initializable_NotInInitializingState\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Introspection_AlreadySupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Introspection_NotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAccountNonce\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"currentNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"Ownable__NotOwner\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Ownable__ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__AddressMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToRootWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveDefaultWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveRootWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__DefaultWalletAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidNonEVMAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidVMSpecificData\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkAlreadyExists\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkedToAnotherRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__MaxLinkedWalletsReached\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletAlreadyLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletNotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__RootKeyMismatch\",\"inputs\":[{\"name\":\"callerRootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__UnsupportedVMType\",\"inputs\":[]}]",
-	Bin: "0x6080604052348015600e575f5ffd5b5060156019565b60bd565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156064576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101560ba57805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b61415e806100ca5f395ff3fe608060405234801561000f575f5ffd5b506004361061012f575f3560e01c80636aa40299116100ad57806397d9a8491161007d578063baafda6b11610063578063baafda6b146102a0578063f8210398146102b3578063f8aca11e146102c6575f5ffd5b806397d9a8491461027a578063a5bbf4801461028d575f5ffd5b80636aa402991461021e57806371926900146102315780637238695e14610244578063912b975814610257575f5ffd5b8063243a71341161010257806335d2fb64116100e857806335d2fb64146101f05780633d005eab1461020357806364899d9814610216575f5ffd5b8063243a7134146101c85780632f461453146101dd575f5ffd5b806302345b9814610133578063039dd1931461015c578063101659b11461019457806320a00ac8146101a7575b5f5ffd5b610146610141366004613469565b6102e6565b6040516101539190613484565b60405180910390f35b61016f61016a3660046134dc565b6102f7565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610153565b61016f6101a2366004613469565b61033f565b6101ba6101b5366004613469565b61038f565b604051908152602001610153565b6101db6101d6366004613503565b6103d8565b005b6101db6101eb366004613571565b6103e8565b6101db6101fe3660046135b3565b6103f6565b610146610211366004613469565b610401565b6101db61040c565b6101db61022c3660046135eb565b610416565b6101db61023f366004613622565b61057a565b6101db610252366004613668565b610584565b61026a6102653660046135eb565b610669565b6040519015158152602001610153565b61026a61028836600461368b565b6106be565b6101db61029b3660046136a7565b61070b565b6101db6102ae366004613469565b610715565b61016f6102c1366004613469565b610722565b6102d96102d43660046136df565b61076f565b60405161015391906137a1565b60606102f18261077b565b92915050565b5f8181527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc02602052604081205473ffffffffffffffffffffffffffffffffffffffff166102f1565b73ffffffffffffffffffffffffffffffffffffffff8082165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0360205260408120600201549091166102f1565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fda5d6d87446d81938877f0ee239dac391146dd7466ea30567f72becf06773c0060205260408120546102f1565b6103e38383836107ca565b505050565b6103f28282610c4b565b5050565b6103e3838383610e52565b60606102f182611255565b610414611620565b565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef5200054640100000000900460ff16610479576040517f77a399b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104a27f4cf9376000000000000000000000000000000000000000000000000000000000611808565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc026020527fe148878d3ec6f61c12b8793d2b906fa601bb48234edb57fec1c1d5ae779e45a4805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091557f53434c5f454950363536350000000000000000000000000000000000000000005f527fec8c052a03b4861df1d3561683815d4c9de39968b0fde24c6d42a80a8e74254d8054929093169116179055565b6103f2828261195d565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff1633146105fb576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b5f8281527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc01602052604081205490918481169116145b9392505050565b5f8181527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc04602052604081205473ffffffffffffffffffffffffffffffffffffffff8085169116146106b7565b6103f28282611b20565b61071f3382611d8a565b50565b73ffffffffffffffffffffffffffffffffffffffff8082165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0160205260408120549091166102f1565b60606106b78383612070565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00602052604090206060906102f19061235d565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0061080e816107fc6020870187613469565b6108096020870187613469565b612369565b5f6108d861081f604087018761387a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610860925050506020880188613469565b858251602093840120604080517f6bb89d031fcd292ecd4c0e6855878b7165cebc3a2f35bc6bbac48c088dd8325c818701528082019290925273ffffffffffffffffffffffffffffffffffffffff9390931660608201526080808201929092528251808203909201825260a001909152805191012090565b90505f6108e4826126b3565b90506108f36020860186613469565b73ffffffffffffffffffffffffffffffffffffffff166109538261091a602089018961387a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506126de92505050565b73ffffffffffffffffffffffffffffffffffffffff16146109a0576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a696109b0604087018761387a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506109f1925050506020880188613469565b868251602093840120604080517f6bb89d031fcd292ecd4c0e6855878b7165cebc3a2f35bc6bbac48c088dd8325c818701528082019290925273ffffffffffffffffffffffffffffffffffffffff9390931660608201526080808201929092528251808203909201825260a001909152805191012090565b91505f610a75836126b3565b9050610a846020880188613469565b73ffffffffffffffffffffffffffffffffffffffff16610aab8261091a60208b018b61387a565b73ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b0e610b086020880188613469565b86612783565b610b58610b1e6020890189613469565b855f610b2d60208b018b613469565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2090612827565b50610b666020870187613469565b600185015f610b7860208b018b613469565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409091015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169390911692909217909155610bdd90870187613469565b73ffffffffffffffffffffffffffffffffffffffff16610c006020890189613469565b73ffffffffffffffffffffffffffffffffffffffff167f64126824352170c4025060d1f6e215159635e4b08e649830695f26ef6d2b572160405160405180910390a350505050505050565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0033610c7f82826108096020880188613469565b5f610ccd610c90604087018761387a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086925088915061263c9050565b90505f610cd9826126b3565b9050610ce86020870187613469565b73ffffffffffffffffffffffffffffffffffffffff16610d0f8261091a60208a018a61387a565b73ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d6c610b086020880188613469565b610d7f83855f610b2d60208b018b613469565b50610d8d6020870187613469565b73ffffffffffffffffffffffffffffffffffffffff8481165f908152600187016020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001693909216929092179055610df190870187613469565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f64126824352170c4025060d1f6e215159635e4b08e649830695f26ef6d2b572160405160405180910390a3505050505050565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0073ffffffffffffffffffffffffffffffffffffffff84161580610eb757505f610e9f6020850185613469565b73ffffffffffffffffffffffffffffffffffffffff16145b15610eee576040517f6df3f5c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610efb6020840184613469565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610f5f576040517f672edc7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f6c6020840184613469565b73ffffffffffffffffffffffffffffffffffffffff8581165f9081526001840160205260409020548116911614610ffd5783610fab6020850185613469565b6040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff8416600382015f6110266020870187613469565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040015f20600201541603611089576040517fd51f04c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6110d761109a604086018661387a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525089925087915061263c9050565b90505f6110e3826126b3565b90506110f26020860186613469565b73ffffffffffffffffffffffffffffffffffffffff166111198261091a602089018961387a565b73ffffffffffffffffffffffffffffffffffffffff1614611166576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61117c6111766020870187613469565b85612783565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526001840160209081526040822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561120a9188918691906111df908a018a613469565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2090612848565b50604051339073ffffffffffffffffffffffffffffffffffffffff8816907f9a9d98629b39adf596077fc95a0712ba55c38f40a354e99d366a10f9c3e27da2905f90a3505050505050565b7fe148878d3ec6f61c12b8793d2b906fa601bb48234edb57fec1c1d5ae779e45a45473ffffffffffffffffffffffffffffffffffffffff8281165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc006020819052604082206060949193909116916112cf82612869565b9050805f036112f0575050604080515f815260208101909152949350505050565b5f6112fa8361235d565b9050815f8167ffffffffffffffff811115611317576113176138e2565b60405190808252806020026020018201604052801561134a57816020015b60608152602001906001900390816113355790505b5090505f5b848110156114c4578673ffffffffffffffffffffffffffffffffffffffff166342f87c258583815181106113855761138561390f565b60200260200101516040518263ffffffff1660e01b81526004016113c5919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b5f60405180830381865afa1580156113df573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261142491908101906139e7565b8282815181106114365761143661390f565b60200260200101819052505f8282815181106114545761145461390f565b602002602001015190505f815190505f5b818110156114b65760018382815181106114815761148161390f565b60200260200101515f0151600581111561149d5761149d61373b565b036114ae576114ab86613b38565b95505b600101611465565b50505080600101905061134f565b508167ffffffffffffffff8111156114de576114de6138e2565b604051908082528060200260200182016040528015611507578160200160208202803683370190505b50975060208801602084018560051b8083828460045afa508692505f9150505b85811015611612575f8382815181106115425761154261390f565b602002602001015190505f815190505f5b81811015611604575f83828151811061156e5761156e61390f565b602002602001015190506001600581111561158b5761158b61373b565b8151600581111561159e5761159e61373b565b036115fb5780604001518e87806001019850815181106115c0576115c061390f565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b50600101611553565b505050806001019050611527565b505050505050505050919050565b335f8181527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0160205260409020547f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00919073ffffffffffffffffffffffffffffffffffffffff16806116de576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152821660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff8181165f908152600385016020526040902060020154818416911603611745576040517fd51f04c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8083165f908152600185016020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559284168252859052206117a89083612848565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f9a9d98629b39adf596077fc95a0712ba55c38f40a354e99d366a10f9c3e27da260405160405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165f9081527f81088bbc801e045ea3e7620779ab349988f58afbdfba10dff983df3f33522b00602052604090205460ff166118dc577fffffffff0000000000000000000000000000000000000000000000000000000081165f9081527f81088bbc801e045ea3e7620779ab349988f58afbdfba10dff983df3f33522b006020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561190e565b6040517ff2cfeefa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffff000000000000000000000000000000000000000000000000000000008216907f78f84e5b1c5c05be2b5ad3800781dd404d6d6c6302bc755c0fe20f58a33a7f22905f90a250565b6040517f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc009033905f90611994908690602001613bc2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8086165f9081526001880190945291909220549192501680611a4d576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152821660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526003850160205260409020611a7d8184612872565b611ac157611a8b878061387a565b836040517f9cc2f6360000000000000000000000000000000000000000000000000000000081526004016105f293929190613c5d565b611acb8287612783565b611ad5818461287d565b60405173ffffffffffffffffffffffffffffffffffffffff83169084907fbd9633f1d49d3b0a615e7eba9e46218c1bfc459278b5764c2aeee591b1b1230a905f90a350505050505050565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00335f611b4d8580613c96565b604051602001611b5d9190613bc2565b604051602081830303815290604052805190602001209050611b808386836128d0565b73ffffffffffffffffffffffffffffffffffffffff8083165f90815260018501602090815260408083205490931680835260038701909152919020611bc58184612872565b15611c1457611bd48780613c96565b611bde908061387a565b836040517fc7d36f2f0000000000000000000000000000000000000000000000000000000081526004016105f293929190613c5d565b600a611c1f82612869565b10611c56576040517f4c8780db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001611c628880613c96565b611c73906040810190602001613cd2565b6006811115611c8457611c8461373b565b03611ca957611c9b611c968880613c96565b612aab565b611ca487612b26565b611cd2565b611cd27f196e7f7e00000000000000000000000000000000000000000000000000000000612d84565b5f838152600486016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055611d3583611d2d8980613c96565b839190612d8c565b611d3f8287612783565b60405173ffffffffffffffffffffffffffffffffffffffff83169084907feb317a93636ebc39c613bf403c3fb4147a957dbf439fb47b4c9cc5c2b372f6bc905f90a350505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116611dd7576040517f6df3f5c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0160205260409020541680611e74576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152821660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff8084165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc016020526040902054811690821614158015611ef857508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f4f576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8085166004830152821660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc036020526040902060028101547f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0092858116911603611ff6576040517f2febf33700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925560405190918516907f63a3f19f9166855a56a40467088468f9ae049d32865102cf64b70444db555036905f90a35050505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc03602090815260409091206060917f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00919083906120ea90860186613cfa565b156120ff576120f886611255565b905061212f565b73ffffffffffffffffffffffffffffffffffffffff86165f90815260208490526040902061212c9061235d565b90505b5f6121398361235d565b82518151919250905f61214c8284613d15565b90508067ffffffffffffffff811115612167576121676138e2565b6040519080825280602002602001820160405280156121ac57816020015b60408051808201909152606081525f60208201528152602001906001900390816121855790505b5097505f5b838110156122145760405180604001604052806121e68884815181106121d9576121d961390f565b6020026020010151612db9565b81526020015f8152508982815181106122015761220161390f565b60209081029190910101526001016121b1565b505f5b8281101561234f575f876003015f8784815181106122375761223761390f565b602002602001015181526020019081526020015f206040518060400160405290815f8201805461226690613d28565b80601f016020809104026020016040519081016040528092919081815260200182805461229290613d28565b80156122dd5780601f106122b4576101008083540402835291602001916122dd565b820191905f5260205f20905b8154815290600101906020018083116122c057829003601f168201915b5050509183525050600182015460209091019060ff1660068111156123045761230461373b565b60068111156123155761231561373b565b90525090505f6123258387613d15565b9050818b828151811061233a5761233a61390f565b60209081029190910101525050600101612217565b505050505050505092915050565b60605f6106b783612dfb565b73ffffffffffffffffffffffffffffffffffffffff821615806123a0575073ffffffffffffffffffffffffffffffffffffffff8116155b156123d7576040517f6df3f5c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361243c576040517f848ba26d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f90815260018501602052604090205416156124bc576040517f14790b7f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152821660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff8181165f90815260018501602052604090205416156125505773ffffffffffffffffffffffffffffffffffffffff8181165f908152600185016020526040908190205490517f47227b5d0000000000000000000000000000000000000000000000000000000081528483166004820152911660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260208490526040812061257d90612869565b11156125d5576040517ff702bdda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152821660248201526044016105f2565b73ffffffffffffffffffffffffffffffffffffffff81165f908152602084905260409020600a9061260590612869565b106103e3576040517f4c8780db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251602093840120604080517f6bb89d031fcd292ecd4c0e6855878b7165cebc3a2f35bc6bbac48c088dd8325c818701528082019290925273ffffffffffffffffffffffffffffffffffffffff9390931660608201526080808201929092528251808203909201825260a001909152805191012090565b5f6102f17f219639d1c7dec7d049ffb8dc11e39f070f052764b142bd61682a7811a502a60083612e54565b5f6040518251604081146126fa5760418114612734575061276f565b604084015160ff81901c601b016020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16606052612747565b60608401515f1a60205260408401516060525b50835f5260208301516040526020600160805f60015afa5191505f606052806040523d61277c575b638baa579f5f526004601cfd5b5092915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081527fda5d6d87446d81938877f0ee239dac391146dd7466ea30567f72becf06773c00602052604090208054600181019091558181146103e3576040517f752d88c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602481018290526044016105f2565b5f6106b78373ffffffffffffffffffffffffffffffffffffffff8416612e9b565b5f6106b78373ffffffffffffffffffffffffffffffffffffffff8416612ee7565b5f6102f1825490565b5f6106b78383612fca565b6128878282612fe1565b505f8181526003830160205260408120906128a282826133fe565b5060010180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b336128db8380613c96565b6128e5908061387a565b90505f0361291f576040517f3761dda000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606461292b8480613c96565b612935908061387a565b9050111561296f576040517f3761dda000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f90815260018501602052604090205473ffffffffffffffffffffffffffffffffffffffff16806129eb576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201525f60248201526044016105f2565b5f83815260048601602052604090205473ffffffffffffffffffffffffffffffffffffffff168015801590612a4c57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612aa3576040517f5760279b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152821660248201526044016105f2565b505050505050565b6001612abd6040830160208401613cd2565b6006811115612ace57612ace61373b565b0361071f576020612adf828061387a565b90501080612af85750602c612af4828061387a565b9050115b1561071f5761071f7f3761dda000000000000000000000000000000000000000000000000000000000612d84565b5f612b346060830183613d73565b5f818110612b4457612b4461390f565b9050602002810190612b569190613c96565b612b6490602081019061387a565b810190612b719190613dd7565b9050612bc6612b808380613c96565b612b8a908061387a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505084519150612fec9050565b612bfc576040517fd5ecf56b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f53434c5f454950363536350000000000000000000000000000000000000000005f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc026020527fec8c052a03b4861df1d3561683815d4c9de39968b0fde24c6d42a80a8e74254d5473ffffffffffffffffffffffffffffffffffffffff1690505f80612c8e602086018661387a565b810190612c9b9190613e5c565b90925090505f73ffffffffffffffffffffffffffffffffffffffff841663369b6921612cca604089018961387a565b88516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152612d0b9392918991899190600401613e7c565b6020604051808303815f875af1158015612d27573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d4b9190613ed2565b905080612aa3576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5260045ffd5b612d968383613010565b505f82815260038401602052604090208190612db28282613fa3565b5050505050565b6060612dc48261301b565b805161307882526002017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90910190815292915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015612e4857602002820191905f5260205f20905b815481526020019060010190808311612e34575b50505050509050919050565b5f6106b7612e61846130a6565b7f19010000000000000000000000000000000000000000000000000000000000005f90815260029190915260228481526042822091905290565b5f818152600183016020526040812054612ee057508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556102f1565b505f6102f1565b5f8181526001830160205260408120548015612fc1575f612f0960018361411e565b85549091505f90612f1c9060019061411e565b9050808214612f7b575f865f018281548110612f3a57612f3a61390f565b905f5260205f200154905080875f018481548110612f5a57612f5a61390f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612f8c57612f8c614131565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506102f1565b5f9150506102f1565b5f81815260018301602052604081205415156106b7565b5f6106b78383612ee7565b5f6106b783612ffa846130b0565b8051602091820120825192909101919091201490565b5f6106b78383612e9b565b60606040519050608081016040526f30313233343536373839616263646566600f5260028101905060288152602081015f60288201528260601b92505f5b808101820184821a600f81165160018301538060041c518253505060018101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed01613059575050919050565b5f6102f1826130c2565b60606102f18260046020020151613139565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6130ed836132cd565b6130f68461332e565b60408051602081019490945283019190915260608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060815f600382157ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be6fffffffffffffffffffffffffffffffff861160071b86811c67ffffffffffffffff1060061b1786811c63ffffffff1060051b1786811c61ffff1060041b1786811c60ff10851b1786811c9190911c601f169190911a180160408051602c808252606082019092529190921c9250604c01805b841561327057603a808604957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191067f5a6162636465666768696a6b6d6e6f707172737475767778797a000000000000602082107f6b5351575153515f51282828292b293739383838383827292b295455565758590218601f821681901a835350506131e6565b7f31313131313131313131313131313131313131313131313131313131313131317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080830191909152939003908190039201918252509392505050565b5f5f6132d883613363565b8051909150156132f057805160209091012092915050565b825480156132ff579392505050565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709392505050565b50919050565b5f5f613339836133ed565b80519091501561335157805160209091012092915050565b600183015480156132ff579392505050565b606081600201805461337490613d28565b80601f01602080910402602001604051908101604052809291908181526020018280546133a090613d28565b8015612e485780601f106133c257610100808354040283529160200191612e48565b820191905f5260205f20905b8154815290600101906020018083116133ce5750939695505050505050565b606081600301805461337490613d28565b50805461340a90613d28565b5f825580601f10613419575050565b601f0160209004905f5260205f209081019061071f91905b80821115613444575f8155600101613431565b5090565b73ffffffffffffffffffffffffffffffffffffffff8116811461071f575f5ffd5b5f60208284031215613479575f5ffd5b81356106b781613448565b602080825282518282018190525f918401906040840190835b818110156134d157835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161349d565b509095945050505050565b5f602082840312156134ec575f5ffd5b5035919050565b5f60608284031215613328575f5ffd5b5f5f5f60608486031215613515575f5ffd5b833567ffffffffffffffff81111561352b575f5ffd5b613537868287016134f3565b935050602084013567ffffffffffffffff811115613553575f5ffd5b61355f868287016134f3565b93969395505050506040919091013590565b5f5f60408385031215613582575f5ffd5b823567ffffffffffffffff811115613598575f5ffd5b6135a4858286016134f3565b95602094909401359450505050565b5f5f5f606084860312156135c5575f5ffd5b83356135d081613448565b9250602084013567ffffffffffffffff811115613553575f5ffd5b5f5f604083850312156135fc575f5ffd5b823561360781613448565b9150602083013561361781613448565b809150509250929050565b5f5f60408385031215613633575f5ffd5b823567ffffffffffffffff811115613649575f5ffd5b83016040818603121561365a575f5ffd5b946020939093013593505050565b5f5f60408385031215613679575f5ffd5b82359150602083013561361781613448565b5f5f6040838503121561369c575f5ffd5b823561365a81613448565b5f5f604083850312156136b8575f5ffd5b823567ffffffffffffffff8111156136ce575f5ffd5b83016080818603121561365a575f5ffd5b5f5f82840360408112156136f1575f5ffd5b83356136fc81613448565b925060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561372d575f5ffd5b506020830190509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6007811061379d577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561386e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087528051806040890152806020830160608a015e5f6060828a0101526020830151925061382c6020890184613768565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169690960160600195505060209384019391909101906001016137c7565b50929695505050505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126138ad575f5ffd5b83018035915067ffffffffffffffff8211156138c7575f5ffd5b6020019150368190038213156138db575f5ffd5b9250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561395f5761395f6138e2565b60405290565b60405160a0810167ffffffffffffffff8111828210171561395f5761395f6138e2565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139cf576139cf6138e2565b604052919050565b80516139e281613448565b919050565b5f602082840312156139f7575f5ffd5b815167ffffffffffffffff811115613a0d575f5ffd5b8201601f81018413613a1d575f5ffd5b805167ffffffffffffffff811115613a3757613a376138e2565b613a4660208260051b01613988565b80828252602082019150602060e08402850101925086831115613a67575f5ffd5b6020840193505b82841015613b015760e08488031215613a85575f5ffd5b613a8d61393c565b845160068110613a9b575f5ffd5b8152613aa9602086016139d7565b6020820152613aba604086016139d7565b604082015260608581015190820152613ad5608086016139d7565b608082015260a0858101519082015260c08086015190820152825260e090930192602090910190613a6e565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b6857613b68613b0b565b5060010190565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6007811061071f575f5ffd5b602081525f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613bf8575f5ffd5b830160208101903567ffffffffffffffff811115613c14575f5ffd5b803603821315613c22575f5ffd5b60406020850152613c37606085018284613b6f565b9150506020840135613c4881613bb6565b613c556040850182613768565b509392505050565b604081525f613c70604083018587613b6f565b905073ffffffffffffffffffffffffffffffffffffffff83166020830152949350505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613cc8575f5ffd5b9190910192915050565b5f60208284031215613ce2575f5ffd5b81356106b781613bb6565b801515811461071f575f5ffd5b5f60208284031215613d0a575f5ffd5b81356106b781613ced565b808201808211156102f1576102f1613b0b565b600181811c90821680613d3c57607f821691505b602082108103613328577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613da6575f5ffd5b83018035915067ffffffffffffffff821115613dc0575f5ffd5b6020019150600581901b36038213156138db575f5ffd5b5f60a0828403128015613de8575f5ffd5b506040516020810167ffffffffffffffff81118282101715613e0c57613e0c6138e2565b604052601f83018413613e1d575f5ffd5b613e25613965565b8060a0850186811115613e36575f5ffd5b855b81811015613e50578035845260209384019301613e38565b50508252509392505050565b5f5f60408385031215613e6d575f5ffd5b50508035926020909101359150565b61010081525f613e9161010083018789613b6f565b905084602083015283604083015260608201835f5b6005811015613ec5578151835260209283019290910190600101613ea6565b5050509695505050505050565b5f60208284031215613ee2575f5ffd5b81516106b781613ced565b601f8211156103e357805f5260205f20601f840160051c81016020851015613f125750805b601f840160051c820191505b81811015612db2575f8155600101613f1e565b5f81356102f181613bb6565b60078210613f72577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff831681178255505050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112613fd4575f5ffd5b8201803567ffffffffffffffff81118015613fed575f5ffd5b813603602084011315613ffe575f5ffd5b5f905050614016816140108554613d28565b85613eed565b5f601f821160018114614069575f83156140335750838201602001355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178555614102565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156140b857602085880181013583559485019460019092019101614096565b50848210156140f6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19602085880101351681555b505060018360011b0185555b505050506103f261411560208401613f31565b60018301613f3d565b818103818111156102f1576102f1613b0b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd",
+	ABI: "[{\"type\":\"function\",\"name\":\"__WalletLink_init\",\"inputs\":[{\"name\":\"sclEip6565\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkIfLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkIfNonEVMWalletLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"walletHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"tuple[]\",\"internalType\":\"structWalletLib.Wallet[]\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultWallet\",\"inputs\":[{\"name\":\"rootWallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestNonceForRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootKeyForWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"linkCallerToRootKey\",\"inputs\":[{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkNonEVMWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.NonEVMLinkedWallet\",\"components\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"extraData\",\"type\":\"tuple[]\",\"internalType\":\"structIWalletLinkBase.VMSpecificData[]\",\"components\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeCallerLink\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeNonEVMWalletLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultWallet\",\"inputs\":[{\"name\":\"defaultWallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"dependencyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InterfaceAdded\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"indexed\":true,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InterfaceRemoved\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"indexed\":true,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LinkNonEVMWalletToRootWallet\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LinkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"secondWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveNonEVMWalletLink\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetDefaultWallet\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"defaultWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"Initializable_InInitializingState\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Initializable_NotInInitializingState\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Introspection_AlreadySupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Introspection_NotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAccountNonce\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"currentNonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"Ownable__NotOwner\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Ownable__ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__AddressMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToRootWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveDefaultWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveRootWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__DefaultWalletAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidNonEVMAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidVMSpecificData\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkAlreadyExists\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkedToAnotherRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__MaxLinkedWalletsReached\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletAlreadyLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletNotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__RootKeyMismatch\",\"inputs\":[{\"name\":\"callerRootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__UnsupportedVMType\",\"inputs\":[]}]",
+	Bin: "0x6080604052348015600e575f5ffd5b5060156019565b60bd565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef520008054640100000000900460ff16156064576040516366008a2d60e01b815260040160405180910390fd5b805463ffffffff908116101560ba57805463ffffffff191663ffffffff90811782556040519081527fe9c9b456cb2994b80aeef036cf59d26e9617df80f816a6ee5a5b4166e07e2f5c9060200160405180910390a15b50565b613a84806100ca5f395ff3fe608060405234801561000f575f5ffd5b5060043610610115575f3560e01c806371926900116100ad578063a3f100e51161007d578063af61f22b11610063578063af61f22b14610273578063baafda6b14610293578063f8210398146102a6575f5ffd5b8063a3f100e51461024d578063a5bbf48014610260575f5ffd5b806371926900146101f15780637238695e14610204578063912b97581461021757806397d9a8491461023a575f5ffd5b8063243a7134116100e8578063243a7134146101ae5780632f461453146101c357806335d2fb64146101d657806364899d98146101e9575f5ffd5b806302345b9814610119578063039dd19314610142578063101659b11461017a57806320a00ac81461018d575b5f5ffd5b61012c610127366004612ffa565b6102b9565b6040516101399190613013565b60405180910390f35b61015561015036600461306b565b6102ca565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610139565b610155610188366004612ffa565b610312565b6101a061019b366004612ffa565b610362565b604051908152602001610139565b6101c16101bc366004613092565b6103ab565b005b6101c16101d1366004613100565b6103bb565b6101c16101e4366004613142565b6103c9565b6101c16103d4565b6101c16101ff366004613178565b6103de565b6101c16102123660046131be565b6103e8565b61022a6102253660046131e8565b6104cd565b6040519015158152602001610139565b61022a610248366004613210565b610522565b6101c161025b366004612ffa565b61056f565b6101c161026e36600461322a565b6106a7565b610286610281366004612ffa565b6106b1565b60405161013991906132c8565b6101c16102a1366004612ffa565b6106bc565b6101556102b4366004612ffa565b6106c6565b60606102c482610713565b92915050565b5f8181527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc02602052604081205473ffffffffffffffffffffffffffffffffffffffff166102c4565b73ffffffffffffffffffffffffffffffffffffffff8082165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0360205260408120600201549091166102c4565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527fda5d6d87446d81938877f0ee239dac391146dd7466ea30567f72becf06773c0060205260408120546102c4565b6103b6838383610762565b505050565b6103c58282610be3565b5050565b6103b6838383610dea565b6103dc6111ed565b565b6103c582826113d5565b7f4675fa8241f86f37157864d3d49b85ad4b164352c516da28e1678a90470ae3005473ffffffffffffffffffffffffffffffffffffffff16331461045f576040517f65f490650000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b5f8281527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc026020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83161790555050565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc01602052604081205490918481169116145b9392505050565b5f8181527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc04602052604081205473ffffffffffffffffffffffffffffffffffffffff80851691161461051b565b7f59b501c3653afc186af7d48dda36cf6732bd21629a6295693664240a6ef5200054640100000000900460ff166105d2576040517f77a399b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105fb7f26343afe00000000000000000000000000000000000000000000000000000000611598565b7f53434c5f454950363536350000000000000000000000000000000000000000005f527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc026020527fec8c052a03b4861df1d3561683815d4c9de39968b0fde24c6d42a80a8e74254d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905550565b50565b6103c582826116ed565b60606102c482611957565b6106a43382611c01565b73ffffffffffffffffffffffffffffffffffffffff8082165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0160205260408120549091166102c4565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00602052604090206060906102c490611ee7565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc006107a6816107946020870187612ffa565b6107a16020870187612ffa565b611ef3565b5f6108706107b760408701876133a1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506107f8925050506020880188612ffa565b858251602093840120604080517f6bb89d031fcd292ecd4c0e6855878b7165cebc3a2f35bc6bbac48c088dd8325c818701528082019290925273ffffffffffffffffffffffffffffffffffffffff9390931660608201526080808201929092528251808203909201825260a001909152805191012090565b90505f61087c8261223d565b905061088b6020860186612ffa565b73ffffffffffffffffffffffffffffffffffffffff166108eb826108b260208901896133a1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061226892505050565b73ffffffffffffffffffffffffffffffffffffffff1614610938576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0161094860408701876133a1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610989925050506020880188612ffa565b868251602093840120604080517f6bb89d031fcd292ecd4c0e6855878b7165cebc3a2f35bc6bbac48c088dd8325c818701528082019290925273ffffffffffffffffffffffffffffffffffffffff9390931660608201526080808201929092528251808203909201825260a001909152805191012090565b91505f610a0d8361223d565b9050610a1c6020880188612ffa565b73ffffffffffffffffffffffffffffffffffffffff16610a43826108b260208b018b6133a1565b73ffffffffffffffffffffffffffffffffffffffff1614610a90576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aa6610aa06020880188612ffa565b8661230d565b610af0610ab66020890189612ffa565b855f610ac560208b018b612ffa565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f20906123b1565b50610afe6020870187612ffa565b600185015f610b1060208b018b612ffa565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409091015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169390911692909217909155610b7590870187612ffa565b73ffffffffffffffffffffffffffffffffffffffff16610b986020890189612ffa565b73ffffffffffffffffffffffffffffffffffffffff167f64126824352170c4025060d1f6e215159635e4b08e649830695f26ef6d2b572160405160405180910390a350505050505050565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0033610c1782826107a16020880188612ffa565b5f610c65610c2860408701876133a1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508692508891506121c69050565b90505f610c718261223d565b9050610c806020870187612ffa565b73ffffffffffffffffffffffffffffffffffffffff16610ca7826108b260208a018a6133a1565b73ffffffffffffffffffffffffffffffffffffffff1614610cf4576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d04610aa06020880188612ffa565b610d1783855f610ac560208b018b612ffa565b50610d256020870187612ffa565b73ffffffffffffffffffffffffffffffffffffffff8481165f908152600187016020908152604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001693909216929092179055610d8990870187612ffa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f64126824352170c4025060d1f6e215159635e4b08e649830695f26ef6d2b572160405160405180910390a3505050505050565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0073ffffffffffffffffffffffffffffffffffffffff84161580610e4f57505f610e376020850185612ffa565b73ffffffffffffffffffffffffffffffffffffffff16145b15610e86576040517f6df3f5c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e936020840184612ffa565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610ef7576040517f672edc7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f046020840184612ffa565b73ffffffffffffffffffffffffffffffffffffffff8581165f9081526001840160205260409020548116911614610f955783610f436020850185612ffa565b6040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015291166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff8416600382015f610fbe6020870187612ffa565b73ffffffffffffffffffffffffffffffffffffffff908116825260208201929092526040015f20600201541603611021576040517fd51f04c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61106f61103260408601866133a1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508791506121c69050565b90505f61107b8261223d565b905061108a6020860186612ffa565b73ffffffffffffffffffffffffffffffffffffffff166110b1826108b260208901896133a1565b73ffffffffffffffffffffffffffffffffffffffff16146110fe576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61111461110e6020870187612ffa565b8561230d565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526001840160209081526040822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556111a2918891869190611177908a018a612ffa565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f20906123d2565b50604051339073ffffffffffffffffffffffffffffffffffffffff8816907f9a9d98629b39adf596077fc95a0712ba55c38f40a354e99d366a10f9c3e27da2905f90a3505050505050565b335f8181527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0160205260409020547f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00919073ffffffffffffffffffffffffffffffffffffffff16806112ab576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff8181165f908152600385016020526040902060020154818416911603611312576040517fd51f04c100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8083165f908152600185016020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905592841682528590522061137590836123d2565b508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f9a9d98629b39adf596077fc95a0712ba55c38f40a354e99d366a10f9c3e27da260405160405180910390a3505050565b6040517f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc009033905f9061140c90869060200161345c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152815160209283012073ffffffffffffffffffffffffffffffffffffffff8086165f90815260018801909452919092205491925016806114c5576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015282166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260038501602052604090206114f581846123f3565b6115395761150387806133a1565b836040517f9cc2f636000000000000000000000000000000000000000000000000000000008152600401610456939291906134f7565b611543828761230d565b61154d81846123fe565b60405173ffffffffffffffffffffffffffffffffffffffff83169084907fbd9633f1d49d3b0a615e7eba9e46218c1bfc459278b5764c2aeee591b1b1230a905f90a350505050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165f9081527f81088bbc801e045ea3e7620779ab349988f58afbdfba10dff983df3f33522b00602052604090205460ff1661166c577fffffffff0000000000000000000000000000000000000000000000000000000081165f9081527f81088bbc801e045ea3e7620779ab349988f58afbdfba10dff983df3f33522b006020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561169e565b6040517ff2cfeefa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffff000000000000000000000000000000000000000000000000000000008216907f78f84e5b1c5c05be2b5ad3800781dd404d6d6c6302bc755c0fe20f58a33a7f22905f90a250565b7f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00335f61171a8580613530565b60405160200161172a919061345c565b60405160208183030381529060405280519060200120905061174d838683612451565b73ffffffffffffffffffffffffffffffffffffffff8083165f9081526001850160209081526040808320549093168083526003870190915291902061179281846123f3565b156117e1576117a18780613530565b6117ab90806133a1565b836040517fc7d36f2f000000000000000000000000000000000000000000000000000000008152600401610456939291906134f7565b600a6117ec8261262c565b10611823576040517f4c8780db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600161182f8880613530565b61184090604081019060200161356c565b600681111561185157611851613262565b03611876576118686118638880613530565b612635565b611871876126b0565b61189f565b61189f7f196e7f7e0000000000000000000000000000000000000000000000000000000061290e565b5f838152600486016020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055611902836118fa8980613530565b839190612916565b61190c828761230d565b60405173ffffffffffffffffffffffffffffffffffffffff83169084907feb317a93636ebc39c613bf403c3fb4147a957dbf439fb47b4c9cc5c2b372f6bc905f90a350505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc03602090815260408083207f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0092839052908320606093906119d290611ee7565b90505f6119de83611ee7565b82518151919250905f6119f182846135b4565b90508067ffffffffffffffff811115611a0c57611a0c6135c7565b604051908082528060200260200182016040528015611a5157816020015b60408051808201909152606081525f6020820152815260200190600190039081611a2a5790505b5097505f5b83811015611ab9576040518060400160405280611a8b888481518110611a7e57611a7e6135f4565b6020026020010151612943565b81526020015f815250898281518110611aa657611aa66135f4565b6020908102919091010152600101611a56565b505f5b82811015611bf4575f876003015f878481518110611adc57611adc6135f4565b602002602001015181526020019081526020015f206040518060400160405290815f82018054611b0b90613621565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3790613621565b8015611b825780601f10611b5957610100808354040283529160200191611b82565b820191905f5260205f20905b815481529060010190602001808311611b6557829003601f168201915b5050509183525050600182015460209091019060ff166006811115611ba957611ba9613262565b6006811115611bba57611bba613262565b90525090505f611bca83876135b4565b9050818b8281518110611bdf57611bdf6135f4565b60209081029190910101525050600101611abc565b5050505050505050919050565b73ffffffffffffffffffffffffffffffffffffffff8116611c4e576040517f6df3f5c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0160205260409020541680611ceb576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff8084165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc016020526040902054811690821614158015611d6f57508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611dc6576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808516600483015282166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff8181165f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc036020526040902060028101547f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc0092858116911603611e6d576040517f2febf33700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925560405190918516907f63a3f19f9166855a56a40467088468f9ae049d32865102cf64b70444db555036905f90a35050505050565b60605f61051b83612985565b73ffffffffffffffffffffffffffffffffffffffff82161580611f2a575073ffffffffffffffffffffffffffffffffffffffff8116155b15611f61576040517f6df3f5c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc6576040517f848ba26d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f9081526001850160205260409020541615612046576040517f14790b7f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff8181165f90815260018501602052604090205416156120da5773ffffffffffffffffffffffffffffffffffffffff8181165f908152600185016020526040908190205490517f47227b5d000000000000000000000000000000000000000000000000000000008152848316600482015291166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526020849052604081206121079061262c565b111561215f576040517ff702bdda00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610456565b73ffffffffffffffffffffffffffffffffffffffff81165f908152602084905260409020600a9061218f9061262c565b106103b6576040517f4c8780db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8251602093840120604080517f6bb89d031fcd292ecd4c0e6855878b7165cebc3a2f35bc6bbac48c088dd8325c818701528082019290925273ffffffffffffffffffffffffffffffffffffffff9390931660608201526080808201929092528251808203909201825260a001909152805191012090565b5f6102c47f219639d1c7dec7d049ffb8dc11e39f070f052764b142bd61682a7811a502a600836129de565b5f60405182516040811461228457604181146122be57506122f9565b604084015160ff81901c601b016020527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166060526122d1565b60608401515f1a60205260408401516060525b50835f5260208301516040526020600160805f60015afa5191505f606052806040523d612306575b638baa579f5f526004601cfd5b5092915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081527fda5d6d87446d81938877f0ee239dac391146dd7466ea30567f72becf06773c00602052604090208054600181019091558181146103b6576040517f752d88c000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604401610456565b5f61051b8373ffffffffffffffffffffffffffffffffffffffff8416612a25565b5f61051b8373ffffffffffffffffffffffffffffffffffffffff8416612a71565b5f61051b8383612b54565b6124088282612b6b565b505f8181526003830160205260408120906124238282612f88565b5060010180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b3361245c8380613530565b61246690806133a1565b90505f036124a0576040517f3761dda000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60646124ac8480613530565b6124b690806133a1565b905011156124f0576040517f3761dda000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f90815260018501602052604090205473ffffffffffffffffffffffffffffffffffffffff168061256c576040517f5e300c8300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201525f6024820152604401610456565b5f83815260048601602052604090205473ffffffffffffffffffffffffffffffffffffffff1680158015906125cd57508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15612624576040517f5760279b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610456565b505050505050565b5f6102c4825490565b6001612647604083016020840161356c565b600681111561265857612658613262565b036106a457602061266982806133a1565b905010806126825750602c61267e82806133a1565b9050115b156106a4576106a47f3761dda00000000000000000000000000000000000000000000000000000000061290e565b5f6126be606083018361366c565b5f8181106126ce576126ce6135f4565b90506020028101906126e09190613530565b6126ee9060208101906133a1565b8101906126fb91906136f9565b905061275061270a8380613530565b61271490806133a1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505084519150612b769050565b612786576040517fd5ecf56b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f53434c5f454950363536350000000000000000000000000000000000000000005f9081527f19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc026020527fec8c052a03b4861df1d3561683815d4c9de39968b0fde24c6d42a80a8e74254d5473ffffffffffffffffffffffffffffffffffffffff1690505f8061281860208601866133a1565b810190612825919061377e565b90925090505f73ffffffffffffffffffffffffffffffffffffffff841663369b692161285460408901896133a1565b88516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152612895939291899189919060040161379e565b6020604051808303815f875af11580156128b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d591906137f4565b905080612624576040517f55e0083a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f5260045ffd5b6129208383612b9a565b505f8281526003840160205260409020819061293c82826138c9565b5050505050565b606061294e82612ba5565b805161307882526002017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe90910190815292915050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156129d257602002820191905f5260205f20905b8154815260200190600101908083116129be575b50505050509050919050565b5f61051b6129eb84612c30565b7f19010000000000000000000000000000000000000000000000000000000000005f90815260029190915260228481526042822091905290565b5f818152600183016020526040812054612a6a57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556102c4565b505f6102c4565b5f8181526001830160205260408120548015612b4b575f612a93600183613a44565b85549091505f90612aa690600190613a44565b9050808214612b05575f865f018281548110612ac457612ac46135f4565b905f5260205f200154905080875f018481548110612ae457612ae46135f4565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612b1657612b16613a57565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506102c4565b5f9150506102c4565b5f818152600183016020526040812054151561051b565b5f61051b8383612a71565b5f61051b83612b8484612c3a565b8051602091820120825192909101919091201490565b5f61051b8383612a25565b60606040519050608081016040526f30313233343536373839616263646566600f5260028101905060288152602081015f60288201528260601b92505f5b808101820184821a600f81165160018301538060041c518253505060018101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed01612be3575050919050565b5f6102c482612c4c565b60606102c48260046020020151612cc3565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612c7783612e57565b612c8084612eb8565b60408051602081019490945283019190915260608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b6060815f600382157ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be6fffffffffffffffffffffffffffffffff861160071b86811c67ffffffffffffffff1060061b1786811c63ffffffff1060051b1786811c61ffff1060041b1786811c60ff10851b1786811c9190911c601f169190911a180160408051602c808252606082019092529190921c9250604c01805b8415612dfa57603a808604957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191067f5a6162636465666768696a6b6d6e6f707172737475767778797a000000000000602082107f6b5351575153515f51282828292b293739383838383827292b295455565758590218601f821681901a83535050612d70565b7f31313131313131313131313131313131313131313131313131313131313131317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080830191909152939003908190039201918252509392505050565b5f5f612e6283612eed565b805190915015612e7a57805160209091012092915050565b82548015612e89579392505050565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709392505050565b50919050565b5f5f612ec383612f77565b805190915015612edb57805160209091012092915050565b60018301548015612e89579392505050565b6060816002018054612efe90613621565b80601f0160208091040260200160405190810160405280929190818152602001828054612f2a90613621565b80156129d25780601f10612f4c576101008083540402835291602001916129d2565b820191905f5260205f20905b815481529060010190602001808311612f585750939695505050505050565b6060816003018054612efe90613621565b508054612f9490613621565b5f825580601f10612fa3575050565b601f0160209004905f5260205f20908101906106a491905b80821115612fce575f8155600101612fbb565b5090565b803573ffffffffffffffffffffffffffffffffffffffff81168114612ff5575f5ffd5b919050565b5f6020828403121561300a575f5ffd5b61051b82612fd2565b602080825282518282018190525f918401906040840190835b8181101561306057835173ffffffffffffffffffffffffffffffffffffffff1683526020938401939092019160010161302c565b509095945050505050565b5f6020828403121561307b575f5ffd5b5035919050565b5f60608284031215612eb2575f5ffd5b5f5f5f606084860312156130a4575f5ffd5b833567ffffffffffffffff8111156130ba575f5ffd5b6130c686828701613082565b935050602084013567ffffffffffffffff8111156130e2575f5ffd5b6130ee86828701613082565b93969395505050506040919091013590565b5f5f60408385031215613111575f5ffd5b823567ffffffffffffffff811115613127575f5ffd5b61313385828601613082565b95602094909401359450505050565b5f5f5f60608486031215613154575f5ffd5b61315d84612fd2565b9250602084013567ffffffffffffffff8111156130e2575f5ffd5b5f5f60408385031215613189575f5ffd5b823567ffffffffffffffff81111561319f575f5ffd5b8301604081860312156131b0575f5ffd5b946020939093013593505050565b5f5f604083850312156131cf575f5ffd5b823591506131df60208401612fd2565b90509250929050565b5f5f604083850312156131f9575f5ffd5b61320283612fd2565b91506131df60208401612fd2565b5f5f60408385031215613221575f5ffd5b6131b083612fd2565b5f5f6040838503121561323b575f5ffd5b823567ffffffffffffffff811115613251575f5ffd5b8301608081860312156131b0575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600781106132c4577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9052565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613395577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087528051806040890152806020830160608a015e5f6060828a01015260208301519250613353602089018461328f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169690960160600195505060209384019391909101906001016132ee565b50929695505050505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126133d4575f5ffd5b83018035915067ffffffffffffffff8211156133ee575f5ffd5b602001915036819003821315613402575f5ffd5b9250929050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600781106106a4575f5ffd5b602081525f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613492575f5ffd5b830160208101903567ffffffffffffffff8111156134ae575f5ffd5b8036038213156134bc575f5ffd5b604060208501526134d1606085018284613409565b91505060208401356134e281613450565b6134ef604085018261328f565b509392505050565b604081525f61350a604083018587613409565b905073ffffffffffffffffffffffffffffffffffffffff83166020830152949350505050565b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112613562575f5ffd5b9190910192915050565b5f6020828403121561357c575f5ffd5b813561051b81613450565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156102c4576102c4613587565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600181811c9082168061363557607f821691505b602082108103612eb2577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261369f575f5ffd5b83018035915067ffffffffffffffff8211156136b9575f5ffd5b6020019150600581901b3603821315613402575f5ffd5b60405160a0810167ffffffffffffffff811182821017156136f3576136f36135c7565b60405290565b5f60a082840312801561370a575f5ffd5b506040516020810167ffffffffffffffff8111828210171561372e5761372e6135c7565b604052601f8301841361373f575f5ffd5b6137476136d0565b8060a0850186811115613758575f5ffd5b855b8181101561377257803584526020938401930161375a565b50508252509392505050565b5f5f6040838503121561378f575f5ffd5b50508035926020909101359150565b61010081525f6137b361010083018789613409565b905084602083015283604083015260608201835f5b60058110156137e75781518352602092830192909101906001016137c8565b5050509695505050505050565b5f60208284031215613804575f5ffd5b8151801515811461051b575f5ffd5b601f8211156103b657805f5260205f20601f840160051c810160208510156138385750805b601f840160051c820191505b8181101561293c575f8155600101613844565b5f81356102c481613450565b60078210613898577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff831681178255505050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181126138fa575f5ffd5b8201803567ffffffffffffffff81118015613913575f5ffd5b813603602084011315613924575f5ffd5b5f90505061393c816139368554613621565b85613813565b5f601f82116001811461398f575f83156139595750838201602001355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178555613a28565b5f858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b828110156139de576020858801810135835594850194600190920191016139bc565b5084821015613a1c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19602085880101351681555b505060018360011b0185555b505050506103c5613a3b60208401613857565b60018301613863565b818103818111156102c4576102c4613587565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd",
 }
 
 // WalletLinkABI is the input ABI used to generate the binding from.
@@ -296,12 +291,12 @@ func (_WalletLink *WalletLinkCallerSession) CheckIfNonEVMWalletLinked(rootKey co
 	return _WalletLink.Contract.CheckIfNonEVMWalletLinked(&_WalletLink.CallOpts, rootKey, walletHash)
 }
 
-// ExplicitWalletsByRootKey is a free data retrieval call binding the contract method 0xf8aca11e.
+// GetAllWalletsByRootKey is a free data retrieval call binding the contract method 0xaf61f22b.
 //
-// Solidity: function explicitWalletsByRootKey(address rootKey, (bool) options) view returns((string,uint8)[] wallets)
-func (_WalletLink *WalletLinkCaller) ExplicitWalletsByRootKey(opts *bind.CallOpts, rootKey common.Address, options IWalletLinkBaseWalletQueryOptions) ([]WalletLibWallet, error) {
+// Solidity: function getAllWalletsByRootKey(address rootKey) view returns((string,uint8)[] wallets)
+func (_WalletLink *WalletLinkCaller) GetAllWalletsByRootKey(opts *bind.CallOpts, rootKey common.Address) ([]WalletLibWallet, error) {
 	var out []interface{}
-	err := _WalletLink.contract.Call(opts, &out, "explicitWalletsByRootKey", rootKey, options)
+	err := _WalletLink.contract.Call(opts, &out, "getAllWalletsByRootKey", rootKey)
 
 	if err != nil {
 		return *new([]WalletLibWallet), err
@@ -313,18 +308,18 @@ func (_WalletLink *WalletLinkCaller) ExplicitWalletsByRootKey(opts *bind.CallOpt
 
 }
 
-// ExplicitWalletsByRootKey is a free data retrieval call binding the contract method 0xf8aca11e.
+// GetAllWalletsByRootKey is a free data retrieval call binding the contract method 0xaf61f22b.
 //
-// Solidity: function explicitWalletsByRootKey(address rootKey, (bool) options) view returns((string,uint8)[] wallets)
-func (_WalletLink *WalletLinkSession) ExplicitWalletsByRootKey(rootKey common.Address, options IWalletLinkBaseWalletQueryOptions) ([]WalletLibWallet, error) {
-	return _WalletLink.Contract.ExplicitWalletsByRootKey(&_WalletLink.CallOpts, rootKey, options)
+// Solidity: function getAllWalletsByRootKey(address rootKey) view returns((string,uint8)[] wallets)
+func (_WalletLink *WalletLinkSession) GetAllWalletsByRootKey(rootKey common.Address) ([]WalletLibWallet, error) {
+	return _WalletLink.Contract.GetAllWalletsByRootKey(&_WalletLink.CallOpts, rootKey)
 }
 
-// ExplicitWalletsByRootKey is a free data retrieval call binding the contract method 0xf8aca11e.
+// GetAllWalletsByRootKey is a free data retrieval call binding the contract method 0xaf61f22b.
 //
-// Solidity: function explicitWalletsByRootKey(address rootKey, (bool) options) view returns((string,uint8)[] wallets)
-func (_WalletLink *WalletLinkCallerSession) ExplicitWalletsByRootKey(rootKey common.Address, options IWalletLinkBaseWalletQueryOptions) ([]WalletLibWallet, error) {
-	return _WalletLink.Contract.ExplicitWalletsByRootKey(&_WalletLink.CallOpts, rootKey, options)
+// Solidity: function getAllWalletsByRootKey(address rootKey) view returns((string,uint8)[] wallets)
+func (_WalletLink *WalletLinkCallerSession) GetAllWalletsByRootKey(rootKey common.Address) ([]WalletLibWallet, error) {
+	return _WalletLink.Contract.GetAllWalletsByRootKey(&_WalletLink.CallOpts, rootKey)
 }
 
 // GetDefaultWallet is a free data retrieval call binding the contract method 0x101659b1.
@@ -482,56 +477,25 @@ func (_WalletLink *WalletLinkCallerSession) GetWalletsByRootKey(rootKey common.A
 	return _WalletLink.Contract.GetWalletsByRootKey(&_WalletLink.CallOpts, rootKey)
 }
 
-// GetWalletsByRootKeyWithDelegations is a free data retrieval call binding the contract method 0x3d005eab.
-//
-// Solidity: function getWalletsByRootKeyWithDelegations(address rootKey) view returns(address[] wallets)
-func (_WalletLink *WalletLinkCaller) GetWalletsByRootKeyWithDelegations(opts *bind.CallOpts, rootKey common.Address) ([]common.Address, error) {
-	var out []interface{}
-	err := _WalletLink.contract.Call(opts, &out, "getWalletsByRootKeyWithDelegations", rootKey)
-
-	if err != nil {
-		return *new([]common.Address), err
-	}
-
-	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)
-
-	return out0, err
-
-}
-
-// GetWalletsByRootKeyWithDelegations is a free data retrieval call binding the contract method 0x3d005eab.
-//
-// Solidity: function getWalletsByRootKeyWithDelegations(address rootKey) view returns(address[] wallets)
-func (_WalletLink *WalletLinkSession) GetWalletsByRootKeyWithDelegations(rootKey common.Address) ([]common.Address, error) {
-	return _WalletLink.Contract.GetWalletsByRootKeyWithDelegations(&_WalletLink.CallOpts, rootKey)
-}
-
-// GetWalletsByRootKeyWithDelegations is a free data retrieval call binding the contract method 0x3d005eab.
-//
-// Solidity: function getWalletsByRootKeyWithDelegations(address rootKey) view returns(address[] wallets)
-func (_WalletLink *WalletLinkCallerSession) GetWalletsByRootKeyWithDelegations(rootKey common.Address) ([]common.Address, error) {
-	return _WalletLink.Contract.GetWalletsByRootKeyWithDelegations(&_WalletLink.CallOpts, rootKey)
-}
-
-// WalletLinkInit is a paid mutator transaction binding the contract method 0x6aa40299.
+// WalletLinkInit is a paid mutator transaction binding the contract method 0xa3f100e5.
 //
-// Solidity: function __WalletLink_init(address delegateRegistry, address sclEip6565) returns()
-func (_WalletLink *WalletLinkTransactor) WalletLinkInit(opts *bind.TransactOpts, delegateRegistry common.Address, sclEip6565 common.Address) (*types.Transaction, error) {
-	return _WalletLink.contract.Transact(opts, "__WalletLink_init", delegateRegistry, sclEip6565)
+// Solidity: function __WalletLink_init(address sclEip6565) returns()
+func (_WalletLink *WalletLinkTransactor) WalletLinkInit(opts *bind.TransactOpts, sclEip6565 common.Address) (*types.Transaction, error) {
+	return _WalletLink.contract.Transact(opts, "__WalletLink_init", sclEip6565)
 }
 
-// WalletLinkInit is a paid mutator transaction binding the contract method 0x6aa40299.
+// WalletLinkInit is a paid mutator transaction binding the contract method 0xa3f100e5.
 //
-// Solidity: function __WalletLink_init(address delegateRegistry, address sclEip6565) returns()
-func (_WalletLink *WalletLinkSession) WalletLinkInit(delegateRegistry common.Address, sclEip6565 common.Address) (*types.Transaction, error) {
-	return _WalletLink.Contract.WalletLinkInit(&_WalletLink.TransactOpts, delegateRegistry, sclEip6565)
+// Solidity: function __WalletLink_init(address sclEip6565) returns()
+func (_WalletLink *WalletLinkSession) WalletLinkInit(sclEip6565 common.Address) (*types.Transaction, error) {
+	return _WalletLink.Contract.WalletLinkInit(&_WalletLink.TransactOpts, sclEip6565)
 }
 
-// WalletLinkInit is a paid mutator transaction binding the contract method 0x6aa40299.
+// WalletLinkInit is a paid mutator transaction binding the contract method 0xa3f100e5.
 //
-// Solidity: function __WalletLink_init(address delegateRegistry, address sclEip6565) returns()
-func (_WalletLink *WalletLinkTransactorSession) WalletLinkInit(delegateRegistry common.Address, sclEip6565 common.Address) (*types.Transaction, error) {
-	return _WalletLink.Contract.WalletLinkInit(&_WalletLink.TransactOpts, delegateRegistry, sclEip6565)
+// Solidity: function __WalletLink_init(address sclEip6565) returns()
+func (_WalletLink *WalletLinkTransactorSession) WalletLinkInit(sclEip6565 common.Address) (*types.Transaction, error) {
+	return _WalletLink.Contract.WalletLinkInit(&_WalletLink.TransactOpts, sclEip6565)
 }
 
 // LinkCallerToRootKey is a paid mutator transaction binding the contract method 0x2f461453.
diff --git a/core/contracts/base/wallet_link.go b/core/contracts/base/wallet_link.go
index a487c54e1b4..0630e4142b8 100644
--- a/core/contracts/base/wallet_link.go
+++ b/core/contracts/base/wallet_link.go
@@ -50,11 +50,6 @@ type IWalletLinkBaseVMSpecificData struct {
 	Value []byte
 }
 
-// IWalletLinkBaseWalletQueryOptions is an auto generated low-level Go binding around an user-defined struct.
-type IWalletLinkBaseWalletQueryOptions struct {
-	IncludeDelegations bool
-}
-
 // WalletLibWallet is an auto generated low-level Go binding around an user-defined struct.
 type WalletLibWallet struct {
 	Addr   string
@@ -63,7 +58,7 @@ type WalletLibWallet struct {
 
 // WalletLinkMetaData contains all meta data concerning the WalletLink contract.
 var WalletLinkMetaData = &bind.MetaData{
-	ABI: "[{\"type\":\"function\",\"name\":\"checkIfLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkIfNonEVMWalletLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"walletHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"explicitWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"options\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.WalletQueryOptions\",\"components\":[{\"name\":\"includeDelegations\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"tuple[]\",\"internalType\":\"structWalletLib.Wallet[]\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultWallet\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestNonceForRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootKeyForWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWalletsByRootKeyWithDelegations\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"linkCallerToRootKey\",\"inputs\":[{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkNonEVMWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.NonEVMLinkedWallet\",\"components\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"extraData\",\"type\":\"tuple[]\",\"internalType\":\"structIWalletLinkBase.VMSpecificData[]\",\"components\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeCallerLink\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeNonEVMWalletLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultWallet\",\"inputs\":[{\"name\":\"defaultWallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"dependencyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"LinkNonEVMWalletToRootWallet\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LinkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"secondWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveNonEVMWalletLink\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetDefaultWallet\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"defaultWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"WalletLink__AddressMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToRootWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveDefaultWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveRootWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__DefaultWalletAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidNonEVMAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidVMSpecificData\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkAlreadyExists\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkedToAnotherRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__MaxLinkedWalletsReached\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletAlreadyLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletNotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__RootKeyMismatch\",\"inputs\":[{\"name\":\"callerRootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__UnsupportedVMType\",\"inputs\":[]}]",
+	ABI: "[{\"type\":\"function\",\"name\":\"checkIfLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkIfNonEVMWalletLinked\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"walletHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"tuple[]\",\"internalType\":\"structWalletLib.Wallet[]\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDefaultWallet\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestNonceForRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootKeyForWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWalletsByRootKey\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"wallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"linkCallerToRootKey\",\"inputs\":[{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkNonEVMWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.NonEVMLinkedWallet\",\"components\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"extraData\",\"type\":\"tuple[]\",\"internalType\":\"structIWalletLinkBase.VMSpecificData[]\",\"components\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"linkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeCallerLink\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootWallet\",\"type\":\"tuple\",\"internalType\":\"structIWalletLinkBase.LinkedWallet\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeNonEVMWalletLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"tuple\",\"internalType\":\"structWalletLib.Wallet\",\"components\":[{\"name\":\"addr\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"vmType\",\"type\":\"uint8\",\"internalType\":\"enumWalletLib.VirtualMachineType\"}]},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultWallet\",\"inputs\":[{\"name\":\"defaultWallet\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDependency\",\"inputs\":[{\"name\":\"dependency\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"dependencyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"LinkNonEVMWalletToRootWallet\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"LinkWalletToRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveLink\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"secondWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemoveNonEVMWalletLink\",\"inputs\":[{\"name\":\"walletHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetDefaultWallet\",\"inputs\":[{\"name\":\"rootKey\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"defaultWallet\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"WalletLink__AddressMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToRootWallet\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__CannotLinkToSelf\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveDefaultWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__CannotRemoveRootWallet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__DefaultWalletAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidNonEVMAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__InvalidVMSpecificData\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkAlreadyExists\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__LinkedToAnotherRootKey\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__MaxLinkedWalletsReached\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletAlreadyLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NonEVMWalletNotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__NotLinked\",\"inputs\":[{\"name\":\"wallet\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__RootKeyMismatch\",\"inputs\":[{\"name\":\"callerRootKey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"rootKey\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"WalletLink__UnsupportedVMType\",\"inputs\":[]}]",
 }
 
 // WalletLinkABI is the input ABI used to generate the binding from.
@@ -274,12 +269,12 @@ func (_WalletLink *WalletLinkCallerSession) CheckIfNonEVMWalletLinked(rootKey co
 	return _WalletLink.Contract.CheckIfNonEVMWalletLinked(&_WalletLink.CallOpts, rootKey, walletHash)
 }
 
-// ExplicitWalletsByRootKey is a free data retrieval call binding the contract method 0xf8aca11e.
+// GetAllWalletsByRootKey is a free data retrieval call binding the contract method 0xaf61f22b.
 //
-// Solidity: function explicitWalletsByRootKey(address rootKey, (bool) options) view returns((string,uint8)[] wallets)
-func (_WalletLink *WalletLinkCaller) ExplicitWalletsByRootKey(opts *bind.CallOpts, rootKey common.Address, options IWalletLinkBaseWalletQueryOptions) ([]WalletLibWallet, error) {
+// Solidity: function getAllWalletsByRootKey(address rootKey) view returns((string,uint8)[] wallets)
+func (_WalletLink *WalletLinkCaller) GetAllWalletsByRootKey(opts *bind.CallOpts, rootKey common.Address) ([]WalletLibWallet, error) {
 	var out []interface{}
-	err := _WalletLink.contract.Call(opts, &out, "explicitWalletsByRootKey", rootKey, options)
+	err := _WalletLink.contract.Call(opts, &out, "getAllWalletsByRootKey", rootKey)
 
 	if err != nil {
 		return *new([]WalletLibWallet), err
@@ -291,18 +286,18 @@ func (_WalletLink *WalletLinkCaller) ExplicitWalletsByRootKey(opts *bind.CallOpt
 
 }
 
-// ExplicitWalletsByRootKey is a free data retrieval call binding the contract method 0xf8aca11e.
+// GetAllWalletsByRootKey is a free data retrieval call binding the contract method 0xaf61f22b.
 //
-// Solidity: function explicitWalletsByRootKey(address rootKey, (bool) options) view returns((string,uint8)[] wallets)
-func (_WalletLink *WalletLinkSession) ExplicitWalletsByRootKey(rootKey common.Address, options IWalletLinkBaseWalletQueryOptions) ([]WalletLibWallet, error) {
-	return _WalletLink.Contract.ExplicitWalletsByRootKey(&_WalletLink.CallOpts, rootKey, options)
+// Solidity: function getAllWalletsByRootKey(address rootKey) view returns((string,uint8)[] wallets)
+func (_WalletLink *WalletLinkSession) GetAllWalletsByRootKey(rootKey common.Address) ([]WalletLibWallet, error) {
+	return _WalletLink.Contract.GetAllWalletsByRootKey(&_WalletLink.CallOpts, rootKey)
 }
 
-// ExplicitWalletsByRootKey is a free data retrieval call binding the contract method 0xf8aca11e.
+// GetAllWalletsByRootKey is a free data retrieval call binding the contract method 0xaf61f22b.
 //
-// Solidity: function explicitWalletsByRootKey(address rootKey, (bool) options) view returns((string,uint8)[] wallets)
-func (_WalletLink *WalletLinkCallerSession) ExplicitWalletsByRootKey(rootKey common.Address, options IWalletLinkBaseWalletQueryOptions) ([]WalletLibWallet, error) {
-	return _WalletLink.Contract.ExplicitWalletsByRootKey(&_WalletLink.CallOpts, rootKey, options)
+// Solidity: function getAllWalletsByRootKey(address rootKey) view returns((string,uint8)[] wallets)
+func (_WalletLink *WalletLinkCallerSession) GetAllWalletsByRootKey(rootKey common.Address) ([]WalletLibWallet, error) {
+	return _WalletLink.Contract.GetAllWalletsByRootKey(&_WalletLink.CallOpts, rootKey)
 }
 
 // GetDefaultWallet is a free data retrieval call binding the contract method 0x101659b1.
@@ -460,37 +455,6 @@ func (_WalletLink *WalletLinkCallerSession) GetWalletsByRootKey(rootKey common.A
 	return _WalletLink.Contract.GetWalletsByRootKey(&_WalletLink.CallOpts, rootKey)
 }
 
-// GetWalletsByRootKeyWithDelegations is a free data retrieval call binding the contract method 0x3d005eab.
-//
-// Solidity: function getWalletsByRootKeyWithDelegations(address rootKey) view returns(address[] wallets)
-func (_WalletLink *WalletLinkCaller) GetWalletsByRootKeyWithDelegations(opts *bind.CallOpts, rootKey common.Address) ([]common.Address, error) {
-	var out []interface{}
-	err := _WalletLink.contract.Call(opts, &out, "getWalletsByRootKeyWithDelegations", rootKey)
-
-	if err != nil {
-		return *new([]common.Address), err
-	}
-
-	out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)
-
-	return out0, err
-
-}
-
-// GetWalletsByRootKeyWithDelegations is a free data retrieval call binding the contract method 0x3d005eab.
-//
-// Solidity: function getWalletsByRootKeyWithDelegations(address rootKey) view returns(address[] wallets)
-func (_WalletLink *WalletLinkSession) GetWalletsByRootKeyWithDelegations(rootKey common.Address) ([]common.Address, error) {
-	return _WalletLink.Contract.GetWalletsByRootKeyWithDelegations(&_WalletLink.CallOpts, rootKey)
-}
-
-// GetWalletsByRootKeyWithDelegations is a free data retrieval call binding the contract method 0x3d005eab.
-//
-// Solidity: function getWalletsByRootKeyWithDelegations(address rootKey) view returns(address[] wallets)
-func (_WalletLink *WalletLinkCallerSession) GetWalletsByRootKeyWithDelegations(rootKey common.Address) ([]common.Address, error) {
-	return _WalletLink.Contract.GetWalletsByRootKeyWithDelegations(&_WalletLink.CallOpts, rootKey)
-}
-
 // LinkCallerToRootKey is a paid mutator transaction binding the contract method 0x2f461453.
 //
 // Solidity: function linkCallerToRootKey((address,bytes,string) rootWallet, uint256 nonce) returns()
diff --git a/packages/contracts/scripts/deployments/diamonds/DeploySpaceFactory.s.sol b/packages/contracts/scripts/deployments/diamonds/DeploySpaceFactory.s.sol
index 0913a4c8e25..555e2fa1ca0 100644
--- a/packages/contracts/scripts/deployments/diamonds/DeploySpaceFactory.s.sol
+++ b/packages/contracts/scripts/deployments/diamonds/DeploySpaceFactory.s.sol
@@ -238,7 +238,7 @@ contract DeploySpaceFactory is IDiamondInitHelper, DiamondHelper, Deployer {
         addFacet(
             walletLinkHelper.makeCut(walletLink, IDiamond.FacetCutAction.Add),
             walletLink,
-            walletLinkHelper.makeInitData(mockDelegationRegistry, sclEip6565)
+            walletLinkHelper.makeInitData(sclEip6565)
         );
         addFacet(
             DeployEIP712Facet.makeCut(eip712, IDiamond.FacetCutAction.Add),
@@ -341,11 +341,10 @@ contract DeploySpaceFactory is IDiamondInitHelper, DiamondHelper, Deployer {
             } else if (facetNameHash == keccak256(abi.encodePacked("WalletLink"))) {
                 walletLink = walletLinkHelper.deploy(deployer);
                 sclEip6565 = deployVerifierLib.deploy(deployer);
-                mockDelegationRegistry = 0x00000000000000447e69651d841bD8D104Bed493;
                 addFacet(
                     walletLinkHelper.makeCut(walletLink, IDiamond.FacetCutAction.Add),
                     walletLink,
-                    walletLinkHelper.makeInitData(mockDelegationRegistry, sclEip6565)
+                    walletLinkHelper.makeInitData(sclEip6565)
                 );
             } else if (facetNameHash == keccak256(abi.encodePacked("EIP712Facet"))) {
                 eip712 = facetHelper.deploy("EIP712Facet", deployer);
diff --git a/packages/contracts/scripts/deployments/facets/DeployWalletLink.s.sol b/packages/contracts/scripts/deployments/facets/DeployWalletLink.s.sol
index 930a49899df..f134d8e5cce 100644
--- a/packages/contracts/scripts/deployments/facets/DeployWalletLink.s.sol
+++ b/packages/contracts/scripts/deployments/facets/DeployWalletLink.s.sol
@@ -2,8 +2,8 @@
 pragma solidity ^0.8.23;
 
 //contracts
-import {FacetHelper} from "@towns-protocol/diamond/scripts/common/helpers/FacetHelper.s.sol";
 import {Deployer} from "scripts/common/Deployer.s.sol";
+import {FacetHelper} from "@towns-protocol/diamond/scripts/common/helpers/FacetHelper.s.sol";
 import {WalletLink} from "src/factory/facets/wallet-link/WalletLink.sol";
 
 contract DeployWalletLink is FacetHelper, Deployer {
@@ -18,10 +18,9 @@ contract DeployWalletLink is FacetHelper, Deployer {
         addSelector(WalletLink.removeCallerLink.selector);
         addSelector(WalletLink.setDefaultWallet.selector);
         addSelector(WalletLink.getDefaultWallet.selector);
-        addSelector(WalletLink.getWalletsByRootKeyWithDelegations.selector);
         addSelector(WalletLink.getDependency.selector);
         addSelector(WalletLink.setDependency.selector);
-        addSelector(WalletLink.explicitWalletsByRootKey.selector);
+        addSelector(WalletLink.getAllWalletsByRootKey.selector);
         addSelector(WalletLink.linkNonEVMWalletToRootKey.selector);
         addSelector(WalletLink.removeNonEVMWalletLink.selector);
         addSelector(WalletLink.checkIfNonEVMWalletLinked.selector);
@@ -32,11 +31,8 @@ contract DeployWalletLink is FacetHelper, Deployer {
     }
 
     // 0x6aa4029900000000000000000000000000000000000000447e69651d841bd8d104bed4930000000000000000000000001d19402769366dc08d3256a0ac148f227df105ce00000000000000000000000000000000000000000000000000000000
-    function makeInitData(
-        address delegateRegistry,
-        address sclEip6565
-    ) public pure returns (bytes memory) {
-        return abi.encodeWithSelector(initializer(), delegateRegistry, sclEip6565);
+    function makeInitData(address sclEip6565) public pure returns (bytes memory) {
+        return abi.encodeWithSelector(initializer(), sclEip6565);
     }
 
     function versionName() public pure override returns (string memory) {
diff --git a/packages/contracts/src/factory/facets/wallet-link/IWalletLink.sol b/packages/contracts/src/factory/facets/wallet-link/IWalletLink.sol
index 9b297c8049f..4c60fefa7e6 100644
--- a/packages/contracts/src/factory/facets/wallet-link/IWalletLink.sol
+++ b/packages/contracts/src/factory/facets/wallet-link/IWalletLink.sol
@@ -93,9 +93,7 @@ interface IWalletLink is IWalletLinkBase {
     /**
      * @notice Link caller wallet to a root wallet
      * @param rootWallet the root wallet that the caller is linking to
-     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than
-     * previous
-     * nonce
+     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than previous nonce
      */
     function linkCallerToRootKey(LinkedWallet memory rootWallet, uint256 nonce) external;
 
@@ -103,9 +101,7 @@ interface IWalletLink is IWalletLinkBase {
      * @notice Link a wallet to a root wallet
      * @param wallet the wallet being linked to the root wallet
      * @param rootWallet the root wallet that the caller is linking to
-     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than
-     * previous
-     * nonce
+     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than previous nonce
      */
     function linkWalletToRootKey(
         LinkedWallet memory wallet,
@@ -116,9 +112,7 @@ interface IWalletLink is IWalletLinkBase {
     /**
      * @notice Link a non-EVM wallet to a root wallet
      * @param wallet the wallet being linked to the root wallet
-     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than
-     * previous
-     * nonce
+     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than previous nonce
      * @dev The function can only be called by an already linked wallet
      */
     function linkNonEVMWalletToRootKey(NonEVMLinkedWallet calldata wallet, uint256 nonce) external;
@@ -126,9 +120,7 @@ interface IWalletLink is IWalletLinkBase {
     /**
      * @notice Remove a non-EVM wallet link from a root wallet
      * @param wallet the wallet being removed from the root wallet
-     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than
-     * previous
-     * nonce
+     * @param nonce a nonce used to prevent replay attacks, nonce must always be higher than previous nonce
      * @dev The function can only be called by an already linked wallet
      */
     function removeNonEVMWalletLink(WalletLib.Wallet memory wallet, uint256 nonce) external;
@@ -147,8 +139,7 @@ interface IWalletLink is IWalletLinkBase {
     /**
      * @notice Set the default wallet by the root wallet
      * @param defaultWallet the wallet being set as the default wallet
-     * @dev A wallet can only be set as the default wallet if it is already linked to the root
-     * wallet
+     * @dev A wallet can only be set as the default wallet if it is already linked to the root wallet
      * @dev The default wallet can only be an EVM wallet for now
      */
     function setDefaultWallet(address defaultWallet) external;
@@ -171,23 +162,13 @@ interface IWalletLink is IWalletLinkBase {
      */
     function getWalletsByRootKey(address rootKey) external view returns (address[] memory wallets);
 
-    /**
-     * @notice Returns all wallets linked to a root key with their delegations
-     * @param rootKey the public key of the users rootkey to find associated wallets for
-     * @return wallets an array of ethereum wallets linked to this root key
-     */
-    function getWalletsByRootKeyWithDelegations(
-        address rootKey
-    ) external view returns (address[] memory wallets);
-
     /**
      * @notice Returns all wallets linked to a root key with their metadata
      * @param rootKey the public key of the users rootkey to find associated wallets for
      * @return wallets an array of wallets with their metadata
      */
-    function explicitWalletsByRootKey(
-        address rootKey,
-        WalletQueryOptions calldata options
+    function getAllWalletsByRootKey(
+        address rootKey
     ) external view returns (WalletLib.Wallet[] memory wallets);
 
     /**
diff --git a/packages/contracts/src/factory/facets/wallet-link/WalletLink.sol b/packages/contracts/src/factory/facets/wallet-link/WalletLink.sol
index 2ad91ca8ca4..e74bafd9220 100644
--- a/packages/contracts/src/factory/facets/wallet-link/WalletLink.sol
+++ b/packages/contracts/src/factory/facets/wallet-link/WalletLink.sol
@@ -7,18 +7,13 @@ import {IWalletLink} from "./IWalletLink.sol";
 // libraries
 import {WalletLib} from "./libraries/WalletLib.sol";
 // contracts
-
-import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {Facet} from "@towns-protocol/diamond/src/facets/Facet.sol";
+import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
 
 contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
-    function __WalletLink_init(
-        address delegateRegistry,
-        address sclEip6565
-    ) external onlyInitializing {
+    function __WalletLink_init(address sclEip6565) external onlyInitializing {
         _addInterface(type(IWalletLink).interfaceId);
-        _setDependency(DELEGATE_REGISTRY_V2, delegateRegistry);
         _setDependency(SCL_EIP6565, sclEip6565);
     }
 
@@ -72,18 +67,10 @@ contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
     }
 
     /// @inheritdoc IWalletLink
-    function getWalletsByRootKeyWithDelegations(
+    function getAllWalletsByRootKey(
         address rootKey
-    ) external view returns (address[] memory wallets) {
-        return _getWalletsByRootKeyWithDelegations(rootKey);
-    }
-
-    /// @inheritdoc IWalletLink
-    function explicitWalletsByRootKey(
-        address rootKey,
-        WalletQueryOptions calldata options
     ) external view returns (WalletLib.Wallet[] memory wallets) {
-        return _explicitWalletsByRootKey(rootKey, options);
+        return _getAllWalletsByRootKey(rootKey);
     }
 
     /// @inheritdoc IWalletLink
diff --git a/packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol b/packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
index 84b8258fd52..06f031f332b 100644
--- a/packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
+++ b/packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
@@ -3,19 +3,15 @@ pragma solidity ^0.8.23;
 
 // interfaces
 import {IWalletLinkBase} from "./IWalletLink.sol";
-import {IDelegateRegistry} from "./interfaces/IDelegateRegistry.sol";
 
 // libraries
-
-import {WalletLinkStorage} from "./WalletLinkStorage.sol";
-import {ISCL_EIP6565} from "./interfaces/ISCL_EIP6565.sol";
-
-import {SolanaUtils} from "./libraries/SolanaUtils.sol";
-import {WalletLib} from "./libraries/WalletLib.sol";
 import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
-import {CustomRevert} from "src/utils/libraries/CustomRevert.sol";
 import {ECDSA} from "solady/utils/ECDSA.sol";
+import {ISCL_EIP6565} from "./interfaces/ISCL_EIP6565.sol";
 import {LibString} from "solady/utils/LibString.sol";
+import {WalletLib} from "./libraries/WalletLib.sol";
+import {CustomRevert} from "src/utils/libraries/CustomRevert.sol";
+import {SolanaUtils} from "./libraries/SolanaUtils.sol";
 
 // contracts
 import {Nonces} from "@towns-protocol/diamond/src/utils/Nonces.sol";
@@ -24,11 +20,10 @@ import {EIP712Base} from "@towns-protocol/diamond/src/utils/cryptography/EIP712B
 abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     using EnumerableSet for EnumerableSet.AddressSet;
     using EnumerableSet for EnumerableSet.Bytes32Set;
-    using WalletLib for WalletLib.RootWallet;
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                           Constants
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+  /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /// @dev `keccak256("LinkedWallet(string message,address userID,uint256 nonce)")`.
     // https://eips.ethereum.org/EIPS/eip-712
     bytes32 private constant _LINKED_WALLET_TYPEHASH =
@@ -37,23 +32,18 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     /// @dev Maximum number of linked wallets per root key
     uint256 internal constant MAX_LINKED_WALLETS = 10;
 
-    /// @dev Dependency name of delegate.xyz v2 registry
-    bytes32 internal constant DELEGATE_REGISTRY_V2 = bytes32("DELEGATE_REGISTRY_V2");
-
     /// @dev Dependency name of SCL_EIP6565 verifier library
     bytes32 internal constant SCL_EIP6565 = bytes32("SCL_EIP6565");
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                      External - Write
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+  /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
 
     /// @dev Links a caller address to a root wallet
     /// @param rootWallet the root wallet that the caller is linking to
-    /// @param nonce a nonce used to prevent replay attacks, nonce must always be higher than
-    /// previous
-    /// nonce
+    /// @param nonce a nonce used to prevent replay attacks, nonce must always be higher than previous nonce
     function _linkCallerToRootWallet(LinkedWallet calldata rootWallet, uint256 nonce) internal {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
 
         // The caller is the wallet that is being linked to the root wallet
         address newWallet = msg.sender;
@@ -62,8 +52,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
 
         bytes32 structHash = _getLinkedWalletTypedDataHash(rootWallet.message, newWallet, nonce);
 
-        //Verify that the root wallet signature contains the correct nonce and the correct caller
-        // wallet
+        //Verify that the root wallet signature contains the correct nonce and the correct caller wallet
         bytes32 rootKeyMessageHash = _hashTypedDataV4(structHash);
 
         // Verify the signature of the root wallet is correct for the nonce and wallet address
@@ -84,20 +73,16 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     /// @dev Links a wallet to a root wallet
     /// @param wallet the wallet that is being linked to the root wallet
     /// @param rootWallet the root wallet that the wallet is linking to
-    /// @param nonce The root wallet's nonce used to prevent replay attacks, nonce must always be
-    /// higher than previous nonce
-    /// @dev Links a wallet to a root wallet by verifying both the wallet's signature and root
-    /// wallet's signature.
-    /// The wallet signs a message containing the root wallet's address and nonce, while the root
-    /// wallet signs a message
-    /// containing the wallet's address and nonce. Both signatures must be valid for the link to be
-    /// created.
+    /// @param nonce The root wallet's nonce used to prevent replay attacks, nonce must always be higher than previous nonce
+    /// @dev Links a wallet to a root wallet by verifying both the wallet's signature and root wallet's signature.
+    /// The wallet signs a message containing the root wallet's address and nonce, while the root wallet signs a message
+    /// containing the wallet's address and nonce. Both signatures must be valid for the link to be created.
     function _linkWalletToRootWallet(
         LinkedWallet calldata wallet,
         LinkedWallet calldata rootWallet,
         uint256 nonce
     ) internal {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
 
         _verifyWallets(ds, wallet.addr, rootWallet.addr);
 
@@ -133,7 +118,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         NonEVMLinkedWallet calldata nonEVMWallet,
         uint256 nonce
     ) internal {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
         address linkedWallet = msg.sender;
         bytes32 walletHash = keccak256(abi.encode(nonEVMWallet.wallet));
 
@@ -141,14 +126,16 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
 
         address rootKey = ds.rootKeyByWallet[linkedWallet];
 
-        WalletLib.RootWallet storage rootWallet = ds.rootWalletByRootKey[rootKey];
+        EnumerableSet.Bytes32Set storage walletHashes = ds
+            .rootWalletByRootKey[rootKey]
+            .walletHashes;
 
-        if (rootWallet.exists(walletHash)) {
+        if (walletHashes.contains(walletHash)) {
             revert WalletLink__NonEVMWalletAlreadyLinked(nonEVMWallet.wallet.addr, rootKey);
         }
 
         // Check that we haven't reached the maximum number of linked wallets
-        if (rootWallet.walletHashes.length() >= MAX_LINKED_WALLETS) {
+        if (walletHashes.length() >= MAX_LINKED_WALLETS) {
             revert WalletLink__MaxLinkedWalletsReached();
         }
 
@@ -160,7 +147,8 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         }
 
         ds.rootKeyByHash[walletHash] = rootKey;
-        rootWallet.addWallet(walletHash, nonEVMWallet.wallet);
+        walletHashes.add(walletHash);
+        ds.rootWalletByRootKey[rootKey].walletByHash[walletHash] = nonEVMWallet.wallet;
 
         _useCheckedNonce(rootKey, nonce);
 
@@ -169,10 +157,10 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                           Remove
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+  /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
 
     function _removeNonEVMWalletLink(WalletLib.Wallet calldata wallet, uint256 nonce) internal {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
         address linkedWallet = msg.sender;
         bytes32 walletHash = keccak256(abi.encode(wallet));
         address rootKey = ds.rootKeyByWallet[linkedWallet];
@@ -181,9 +169,11 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
             revert WalletLink__NotLinked(linkedWallet, rootKey);
         }
 
-        WalletLib.RootWallet storage rootWallet = ds.rootWalletByRootKey[rootKey];
+        EnumerableSet.Bytes32Set storage walletHashes = ds
+            .rootWalletByRootKey[rootKey]
+            .walletHashes;
 
-        if (!rootWallet.exists(walletHash)) {
+        if (!walletHashes.contains(walletHash)) {
             revert WalletLink__NonEVMWalletNotLinked(wallet.addr, rootKey);
         }
 
@@ -191,7 +181,8 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         _useCheckedNonce(rootKey, nonce);
 
         // Remove the wallet from the root wallet
-        rootWallet.removeWallet(walletHash);
+        walletHashes.remove(walletHash);
+        delete ds.rootWalletByRootKey[rootKey].walletByHash[walletHash];
 
         emit RemoveNonEVMWalletLink(walletHash, rootKey);
     }
@@ -201,7 +192,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         LinkedWallet calldata rootWallet,
         uint256 nonce
     ) internal {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
 
         // Check walletToRemove or rootWallet.addr are not address(0)
         if (walletToRemove == address(0) || rootWallet.addr == address(0)) {
@@ -247,7 +238,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     }
 
     function _removeCallerLink() internal {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
         address walletToRemove = msg.sender;
         address rootWallet = ds.rootKeyByWallet[walletToRemove];
 
@@ -269,94 +260,21 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                        Read
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+  /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     function _getWalletsByRootKey(
         address rootKey
     ) internal view returns (address[] memory wallets) {
-        return WalletLinkStorage.layout().walletsByRootKey[rootKey].values();
+        return WalletLib.layout().walletsByRootKey[rootKey].values();
     }
 
-    function _getWalletsByRootKeyWithDelegations(
+    function _getAllWalletsByRootKey(
         address rootKey
-    ) internal view returns (address[] memory wallets) {
-        // Single storage read for layout
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
-        address delegateRegistry = ds.dependencies[DELEGATE_REGISTRY_V2];
-        EnumerableSet.AddressSet storage linkedWalletsSet = ds.walletsByRootKey[rootKey];
-
-        uint256 linkedWalletsLength = linkedWalletsSet.length();
-        if (linkedWalletsLength == 0) {
-            return new address[](0);
-        }
-
-        // Get linked wallets and count total delegations
-        address[] memory linkedWallets = linkedWalletsSet.values();
-        uint256 totalCount = linkedWalletsLength;
-
-        IDelegateRegistry.Delegation[][]
-            memory allDelegations = new IDelegateRegistry.Delegation[][](linkedWalletsLength);
-
-        // First pass: count total delegations add to totalCount
-        for (uint256 i; i < linkedWalletsLength; ++i) {
-            allDelegations[i] = IDelegateRegistry(delegateRegistry).getIncomingDelegations(
-                linkedWallets[i]
-            );
-            IDelegateRegistry.Delegation[] memory delegations = allDelegations[i];
-
-            uint256 delegationsLength = delegations.length;
-            for (uint256 j; j < delegationsLength; ++j) {
-                if (delegations[j].type_ == IDelegateRegistry.DelegationType.ALL) {
-                    ++totalCount;
-                }
-            }
-        }
-
-        // Initialize result array
-        wallets = new address[](totalCount);
-
-        assembly ("memory-safe") {
-            // Copy linked wallets to result array
-            let walletsPtr := add(wallets, 0x20)
-            let linkedWalletsPtr := add(linkedWallets, 0x20)
-            let size := shl(5, linkedWalletsLength)
-
-            // Copy linked wallets data
-            pop(staticcall(gas(), 4, linkedWalletsPtr, size, walletsPtr, size))
-        }
-
-        // Second pass: add delegators
-        uint256 currentIndex = linkedWalletsLength;
-
-        for (uint256 i; i < linkedWalletsLength; ++i) {
-            IDelegateRegistry.Delegation[] memory delegations = allDelegations[i];
-            uint256 delegationsLength = delegations.length;
-            for (uint256 j; j < delegationsLength; ++j) {
-                IDelegateRegistry.Delegation memory delegation = delegations[j];
-                if (delegation.type_ == IDelegateRegistry.DelegationType.ALL) {
-                    unchecked {
-                        wallets[currentIndex++] = delegation.from;
-                    }
-                }
-            }
-        }
-
-        return wallets;
-    }
-
-    function _explicitWalletsByRootKey(
-        address rootKey,
-        WalletQueryOptions calldata options
     ) internal view returns (WalletLib.Wallet[] memory wallets) {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
         WalletLib.RootWallet storage rootWallet = ds.rootWalletByRootKey[rootKey];
 
         // Get all EVM linked wallets
-        address[] memory linkedWallets;
-        if (options.includeDelegations) {
-            linkedWallets = _getWalletsByRootKeyWithDelegations(rootKey);
-        } else {
-            linkedWallets = ds.walletsByRootKey[rootKey].values();
-        }
+        address[] memory linkedWallets = ds.walletsByRootKey[rootKey].values();
 
         // Get all non-EVM linked wallets
         bytes32[] memory nonEVMLinkedWallets = rootWallet.walletHashes.values();
@@ -383,11 +301,11 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     }
 
     function _getRootKeyByWallet(address wallet) internal view returns (address rootKey) {
-        return WalletLinkStorage.layout().rootKeyByWallet[wallet];
+        return WalletLib.layout().rootKeyByWallet[wallet];
     }
 
     function _checkIfLinked(address rootKey, address wallet) internal view returns (bool) {
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
         return ds.rootKeyByWallet[wallet] == rootKey;
     }
 
@@ -395,7 +313,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         address rootKey,
         bytes32 walletHash
     ) internal view returns (bool) {
-        return WalletLinkStorage.layout().rootKeyByHash[walletHash] == rootKey;
+        return WalletLib.layout().rootKeyByHash[walletHash] == rootKey;
     }
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
@@ -420,7 +338,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
             revert WalletLink__NotLinked(caller, rootKey);
         }
 
-        WalletLinkStorage.Layout storage ds = WalletLinkStorage.layout();
+        WalletLib.Layout storage ds = WalletLib.layout();
         WalletLib.RootWallet storage rootWallet = ds.rootWalletByRootKey[rootKey];
 
         // check that the default isn't already the default wallet
@@ -434,25 +352,25 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     }
 
     function _getDefaultWallet(address rootKey) internal view returns (address defaultWallet) {
-        return WalletLinkStorage.layout().rootWalletByRootKey[rootKey].defaultWallet;
+        return WalletLib.layout().rootWalletByRootKey[rootKey].defaultWallet;
     }
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                      Dependencies Functions                */
     /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
     function _getDependency(bytes32 dependency) internal view returns (address) {
-        return WalletLinkStorage.layout().dependencies[dependency];
+        return WalletLib.layout().dependencies[dependency];
     }
 
     function _setDependency(bytes32 dependency, address dependencyAddress) internal {
-        WalletLinkStorage.layout().dependencies[dependency] = dependencyAddress;
+        WalletLib.layout().dependencies[dependency] = dependencyAddress;
     }
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                           Helpers
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+  /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     function _validateNonEVMWalletInputs(
-        WalletLinkStorage.Layout storage ds,
+        WalletLib.Layout storage ds,
         NonEVMLinkedWallet calldata nonEVMWallet,
         bytes32 walletHash
     ) internal view {
@@ -484,7 +402,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     }
 
     function _verifyWallets(
-        WalletLinkStorage.Layout storage ds,
+        WalletLib.Layout storage db,
         address wallet,
         address rootWallet
     ) internal view {
@@ -499,22 +417,22 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         }
 
         // Check that the wallet is not already linked to the root wallet
-        if (ds.rootKeyByWallet[wallet] != address(0)) {
+        if (db.rootKeyByWallet[wallet] != address(0)) {
             revert WalletLink__LinkAlreadyExists(wallet, rootWallet);
         }
 
         // Check that the root wallet is not already linked to another root wallet
-        if (ds.rootKeyByWallet[rootWallet] != address(0)) {
-            revert WalletLink__LinkedToAnotherRootKey(wallet, ds.rootKeyByWallet[rootWallet]);
+        if (db.rootKeyByWallet[rootWallet] != address(0)) {
+            revert WalletLink__LinkedToAnotherRootKey(wallet, db.rootKeyByWallet[rootWallet]);
         }
 
         // Check that the wallet is not itself a root wallet
-        if (ds.walletsByRootKey[wallet].length() > 0) {
+        if (db.walletsByRootKey[wallet].length() > 0) {
             revert WalletLink__CannotLinkToRootWallet(wallet, rootWallet);
         }
 
         // Check that we haven't reached the maximum number of linked wallets
-        if (ds.walletsByRootKey[rootWallet].length() >= MAX_LINKED_WALLETS) {
+        if (db.walletsByRootKey[rootWallet].length() >= MAX_LINKED_WALLETS) {
             revert WalletLink__MaxLinkedWalletsReached();
         }
     }
@@ -566,8 +484,7 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         uint256 nonce
     ) internal pure returns (bytes32) {
         // https://eips.ethereum.org/EIPS/eip-712
-        // ATTENTION: "The dynamic values bytes and string are encoded as a keccak256 hash of their
-        // contents."
+        // ATTENTION: "The dynamic values bytes and string are encoded as a keccak256 hash of their contents."
         // in this case, the message is a string, so it is keccak256 hashed
         return
             keccak256(abi.encode(_LINKED_WALLET_TYPEHASH, keccak256(bytes(message)), addr, nonce));
diff --git a/packages/contracts/src/factory/facets/wallet-link/WalletLinkStorage.sol b/packages/contracts/src/factory/facets/wallet-link/WalletLinkStorage.sol
deleted file mode 100644
index 8cb62602025..00000000000
--- a/packages/contracts/src/factory/facets/wallet-link/WalletLinkStorage.sol
+++ /dev/null
@@ -1,41 +0,0 @@
-// SPDX-License-Identifier: MIT
-pragma solidity ^0.8.23;
-
-// interfaces
-
-// libraries
-import {WalletLib} from "./libraries/WalletLib.sol";
-
-// contracts
-import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
-
-library WalletLinkStorage {
-    // keccak256(abi.encode(uint256(keccak256("river.wallet.link.storage")) - 1)) &
-    // ~bytes32(uint256(0xff))
-    bytes32 constant STORAGE_SLOT =
-        0x19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00;
-
-    struct Layout {
-        // mapping RootKeys to Ethereum Wallets is a 1 to many relationship, a root key can have
-        // many
-        // wallets
-        mapping(address => EnumerableSet.AddressSet) walletsByRootKey;
-        // mapping Ethereum Wallets to RootKey is a 1 to 1 relationship, a wallet can only be linked
-        // to
-        // 1 root key
-        mapping(address => address) rootKeyByWallet;
-        // mapping of wallet link external dependencies
-        mapping(bytes32 => address) dependencies;
-        // mapping of root key to root wallet
-        mapping(address => WalletLib.RootWallet) rootWalletByRootKey;
-        // mapping of root key hash to root key
-        mapping(bytes32 => address) rootKeyByHash;
-    }
-
-    function layout() internal pure returns (Layout storage s) {
-        bytes32 slot = STORAGE_SLOT;
-        assembly {
-            s.slot := slot
-        }
-    }
-}
diff --git a/packages/contracts/src/factory/facets/wallet-link/libraries/WalletLib.sol b/packages/contracts/src/factory/facets/wallet-link/libraries/WalletLib.sol
index ebbff380cbd..1673c638e5c 100644
--- a/packages/contracts/src/factory/facets/wallet-link/libraries/WalletLib.sol
+++ b/packages/contracts/src/factory/facets/wallet-link/libraries/WalletLib.sol
@@ -11,6 +11,10 @@ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet
 library WalletLib {
     using EnumerableSet for EnumerableSet.Bytes32Set;
 
+    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+    /*                          STORAGE                           */
+    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
+
     enum VirtualMachineType {
         EVM, // Ethereum Virtual Machine (Ethereum, BSC, Polygon, etc.)
         SVM, // Solana Virtual Machine
@@ -32,21 +36,27 @@ library WalletLib {
         mapping(bytes32 => Wallet) walletByHash;
     }
 
-    function addWallet(
-        RootWallet storage self,
-        bytes32 walletHash,
-        Wallet calldata wallet
-    ) internal {
-        self.walletHashes.add(walletHash);
-        self.walletByHash[walletHash] = wallet;
+    struct Layout {
+        // mapping RootKeys to Ethereum Wallets is a 1 to many relationship, a root key can have many wallets
+        mapping(address => EnumerableSet.AddressSet) walletsByRootKey;
+        // mapping Ethereum Wallets to RootKey is a 1 to 1 relationship, a wallet can only be linked to 1 root key
+        mapping(address => address) rootKeyByWallet;
+        // mapping of wallet link external dependencies
+        mapping(bytes32 => address) dependencies;
+        // mapping of root key to root wallet
+        mapping(address => RootWallet) rootWalletByRootKey;
+        // mapping of root key hash to root key
+        mapping(bytes32 => address) rootKeyByHash;
     }
 
-    function removeWallet(RootWallet storage self, bytes32 walletHash) internal {
-        self.walletHashes.remove(walletHash);
-        delete self.walletByHash[walletHash];
-    }
+    // keccak256(abi.encode(uint256(keccak256("river.wallet.link.storage")) - 1)) & ~bytes32(uint256(0xff))
+    bytes32 constant STORAGE_SLOT =
+        0x19511ce7944c192b1007be99b82019218d1decfc513f05239612743360a0dc00;
 
-    function exists(RootWallet storage self, bytes32 walletHash) internal view returns (bool) {
-        return self.walletHashes.contains(walletHash);
+    function layout() internal pure returns (Layout storage s) {
+        bytes32 slot = STORAGE_SLOT;
+        assembly {
+            s.slot := slot
+        }
     }
 }
diff --git a/packages/contracts/test/factory/wallet-link/WalletLink.t.sol b/packages/contracts/test/factory/wallet-link/WalletLink.t.sol
index 1a34717f125..ffa118f771d 100644
--- a/packages/contracts/test/factory/wallet-link/WalletLink.t.sol
+++ b/packages/contracts/test/factory/wallet-link/WalletLink.t.sol
@@ -6,21 +6,17 @@ import {IWalletLinkBase} from "src/factory/facets/wallet-link/IWalletLink.sol";
 import {WalletLink} from "src/factory/facets/wallet-link/WalletLink.sol";
 
 // libraries
-
-import {SolanaUtils} from "src/factory/facets/wallet-link/libraries/SolanaUtils.sol";
-import {WalletLib} from "src/factory/facets/wallet-link/libraries/WalletLib.sol";
-import {SCL_EIP6565_UTILS} from "crypto-lib/lib/libSCL_eddsaUtils.sol";
 import {Vm} from "forge-std/Test.sol";
 import {LibString} from "solady/utils/LibString.sol";
+import {SCL_EIP6565_UTILS} from "crypto-lib/lib/libSCL_eddsaUtils.sol";
+import {WalletLib} from "src/factory/facets/wallet-link/libraries/WalletLib.sol";
+import {SolanaUtils} from "src/factory/facets/wallet-link/libraries/SolanaUtils.sol";
 
 // contracts
-
-import {Nonces} from "@towns-protocol/diamond/src/utils/Nonces.sol";
-
-import {SimpleAccount} from "account-abstraction/samples/SimpleAccount.sol";
 import {DeployBase} from "scripts/common/DeployBase.s.sol";
-import {MockDelegationRegistry} from "test/mocks/MockDelegationRegistry.sol";
 import {BaseSetup} from "test/spaces/BaseSetup.sol";
+import {Nonces} from "@towns-protocol/diamond/src/utils/Nonces.sol";
+import {SimpleAccount} from "account-abstraction/samples/SimpleAccount.sol";
 
 contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
     Vm.Wallet internal rootWallet;
@@ -30,10 +26,7 @@ contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
     Vm.Wallet internal secondRootWallet;
     Vm.Wallet internal secondLinkedWallet;
 
-    MockDelegationRegistry public mockDelegationRegistry;
-
     uint256 private constant MAX_LINKED_WALLETS = 10;
-    bytes32 private constant DELEGATE_REGISTRY_V2 = bytes32("DELEGATE_REGISTRY_V2");
     string private constant SOLANA_WALLET_ADDRESS = "3p5wau6jqBV8sQswjN1HEeSZLjv5TB173zBgupGQD4we";
 
     uint256[5] extPubKey;
@@ -48,10 +41,6 @@ contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
 
         secondRootWallet = vm.createWallet("secondRootKey");
         secondLinkedWallet = vm.createWallet("secondLinkedWallet");
-
-        mockDelegationRegistry = MockDelegationRegistry(
-            walletLink.getDependency(DELEGATE_REGISTRY_V2)
-        );
     }
 
     // =============================================================
@@ -60,8 +49,7 @@ contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
 
     /// @notice Modifier that links the caller (EOA wallet) to the root wallet
     // solhint-disable-next-line max-line-length
-    /// @dev The root wallet signs its latest nonce and the caller's wallet address, but the EOA is
-    /// the one calling the function to link
+    /// @dev The root wallet signs its latest nonce and the caller's wallet address, but the EOA is the one calling the function to link
     modifier givenWalletIsLinkedViaCaller() {
         uint256 nonce = walletLink.getLatestNonceForRootKey(rootWallet.addr);
 
@@ -79,13 +67,9 @@ contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
         _;
     }
 
-    /// @notice Modifier that links a wallet to the root wallet through a proxy wallet (smart
-    /// wallet)
+    /// @notice Modifier that links a wallet to the root wallet through a proxy wallet (smart wallet)
     // solhint-disable-next-line max-line-length
-    /// @dev The root wallet signs its latest nonce and the wallet's address, then the EOA wallet
-    /// signs its latest nonce and the root wallet's address, but the smart wallet is the one
-    /// calling
-    /// the function to link both of these wallets
+    /// @dev The root wallet signs its latest nonce and the wallet's address, then the EOA wallet signs its latest nonce and the root wallet's address, but the smart wallet is the one calling the function to link both of these wallets
     modifier givenWalletIsLinkedViaProxy() {
         uint256 rootNonce = walletLink.getLatestNonceForRootKey(rootWallet.addr);
 
@@ -408,7 +392,6 @@ contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
     // =============================================================
     //                   linkCallerToRootKey
     // =============================================================
-
     function test_linkCallerToRootKey() external givenWalletIsLinkedViaCaller {
         assertTrue(walletLink.checkIfLinked(rootWallet.addr, wallet.addr));
     }
@@ -916,37 +899,6 @@ contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
         walletLink.removeCallerLink();
     }
 
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
-    /*                           Delegations                      */
-    /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
-
-    /*
-     * @dev This test checks that a cold wallet can delegate to a linked wallet
-     *      and that the linked wallet and the cold wallet are both included in
-     *      the returned array
-     */
-    function test_getWalletsByRootKeyWithDelegations() external givenWalletIsLinkedViaCaller {
-        address coldWallet = vm.createWallet("coldWallet").addr;
-
-        // As a cold wallet, delegate to a linked wallet
-        // This is what delegate.xyz v2 does
-        vm.prank(coldWallet);
-        mockDelegationRegistry.delegateAll(wallet.addr);
-
-        WalletLib.Wallet[] memory walletMetadata = walletLink.explicitWalletsByRootKey(
-            rootWallet.addr,
-            WalletQueryOptions({includeDelegations: true})
-        );
-
-        address[] memory wallets = new address[](walletMetadata.length);
-        for (uint256 i; i < walletMetadata.length; ++i) {
-            wallets[i] = vm.parseAddress(walletMetadata[i].addr);
-        }
-
-        assertContains(wallets, coldWallet);
-        assertContains(wallets, wallet.addr);
-    }
-
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                          Metadata                          */
     /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
@@ -968,10 +920,7 @@ contract WalletLinkTest is IWalletLinkBase, BaseSetup, DeployBase {
         walletLink.setDefaultWallet(address(simpleAccount));
         vm.stopPrank();
 
-        WalletLib.Wallet[] memory wallets = walletLink.explicitWalletsByRootKey(
-            rootWallet.addr,
-            WalletQueryOptions({includeDelegations: false})
-        );
+        WalletLib.Wallet[] memory wallets = walletLink.getAllWalletsByRootKey(rootWallet.addr);
         uint256 walletLen = wallets.length;
 
         address[] memory walletAddresses = new address[](walletLen);
diff --git a/packages/generated/dev/abis/WalletLink.abi.json b/packages/generated/dev/abis/WalletLink.abi.json
index 72b5550aacd..1f16508a473 100644
--- a/packages/generated/dev/abis/WalletLink.abi.json
+++ b/packages/generated/dev/abis/WalletLink.abi.json
@@ -3,11 +3,6 @@
     "type": "function",
     "name": "__WalletLink_init",
     "inputs": [
-      {
-        "name": "delegateRegistry",
-        "type": "address",
-        "internalType": "address"
-      },
       {
         "name": "sclEip6565",
         "type": "address",
@@ -67,24 +62,12 @@
   },
   {
     "type": "function",
-    "name": "explicitWalletsByRootKey",
+    "name": "getAllWalletsByRootKey",
     "inputs": [
       {
         "name": "rootKey",
         "type": "address",
         "internalType": "address"
-      },
-      {
-        "name": "options",
-        "type": "tuple",
-        "internalType": "struct IWalletLinkBase.WalletQueryOptions",
-        "components": [
-          {
-            "name": "includeDelegations",
-            "type": "bool",
-            "internalType": "bool"
-          }
-        ]
       }
     ],
     "outputs": [
@@ -203,25 +186,6 @@
     ],
     "stateMutability": "view"
   },
-  {
-    "type": "function",
-    "name": "getWalletsByRootKeyWithDelegations",
-    "inputs": [
-      {
-        "name": "rootKey",
-        "type": "address",
-        "internalType": "address"
-      }
-    ],
-    "outputs": [
-      {
-        "name": "wallets",
-        "type": "address[]",
-        "internalType": "address[]"
-      }
-    ],
-    "stateMutability": "view"
-  },
   {
     "type": "function",
     "name": "linkCallerToRootKey",
diff --git a/packages/generated/dev/abis/WalletLink.abi.ts b/packages/generated/dev/abis/WalletLink.abi.ts
index 5a0d0ae6bf1..a1faaac19e9 100644
--- a/packages/generated/dev/abis/WalletLink.abi.ts
+++ b/packages/generated/dev/abis/WalletLink.abi.ts
@@ -3,11 +3,6 @@ export default [
     "type": "function",
     "name": "__WalletLink_init",
     "inputs": [
-      {
-        "name": "delegateRegistry",
-        "type": "address",
-        "internalType": "address"
-      },
       {
         "name": "sclEip6565",
         "type": "address",
@@ -67,24 +62,12 @@ export default [
   },
   {
     "type": "function",
-    "name": "explicitWalletsByRootKey",
+    "name": "getAllWalletsByRootKey",
     "inputs": [
       {
         "name": "rootKey",
         "type": "address",
         "internalType": "address"
-      },
-      {
-        "name": "options",
-        "type": "tuple",
-        "internalType": "struct IWalletLinkBase.WalletQueryOptions",
-        "components": [
-          {
-            "name": "includeDelegations",
-            "type": "bool",
-            "internalType": "bool"
-          }
-        ]
       }
     ],
     "outputs": [
@@ -203,25 +186,6 @@ export default [
     ],
     "stateMutability": "view"
   },
-  {
-    "type": "function",
-    "name": "getWalletsByRootKeyWithDelegations",
-    "inputs": [
-      {
-        "name": "rootKey",
-        "type": "address",
-        "internalType": "address"
-      }
-    ],
-    "outputs": [
-      {
-        "name": "wallets",
-        "type": "address[]",
-        "internalType": "address[]"
-      }
-    ],
-    "stateMutability": "view"
-  },
   {
     "type": "function",
     "name": "linkCallerToRootKey",
diff --git a/packages/generated/dev/typings/IWalletLink.ts b/packages/generated/dev/typings/IWalletLink.ts
index 7f917f80d4e..cde82868bf0 100644
--- a/packages/generated/dev/typings/IWalletLink.ts
+++ b/packages/generated/dev/typings/IWalletLink.ts
@@ -27,15 +27,19 @@ import type {
   PromiseOrValue,
 } from "./common";
 
-export declare namespace IWalletLinkBase {
-  export type WalletQueryOptionsStruct = {
-    includeDelegations: PromiseOrValue<boolean>;
+export declare namespace WalletLib {
+  export type WalletStruct = {
+    addr: PromiseOrValue<string>;
+    vmType: PromiseOrValue<BigNumberish>;
   };
 
-  export type WalletQueryOptionsStructOutput = [boolean] & {
-    includeDelegations: boolean;
+  export type WalletStructOutput = [string, number] & {
+    addr: string;
+    vmType: number;
   };
+}
 
+export declare namespace IWalletLinkBase {
   export type LinkedWalletStruct = {
     addr: PromiseOrValue<string>;
     signature: PromiseOrValue<BytesLike>;
@@ -78,29 +82,16 @@ export declare namespace IWalletLinkBase {
   };
 }
 
-export declare namespace WalletLib {
-  export type WalletStruct = {
-    addr: PromiseOrValue<string>;
-    vmType: PromiseOrValue<BigNumberish>;
-  };
-
-  export type WalletStructOutput = [string, number] & {
-    addr: string;
-    vmType: number;
-  };
-}
-
 export interface IWalletLinkInterface extends utils.Interface {
   functions: {
     "checkIfLinked(address,address)": FunctionFragment;
     "checkIfNonEVMWalletLinked(address,bytes32)": FunctionFragment;
-    "explicitWalletsByRootKey(address,(bool))": FunctionFragment;
+    "getAllWalletsByRootKey(address)": FunctionFragment;
     "getDefaultWallet(address)": FunctionFragment;
     "getDependency(bytes32)": FunctionFragment;
     "getLatestNonceForRootKey(address)": FunctionFragment;
     "getRootKeyForWallet(address)": FunctionFragment;
     "getWalletsByRootKey(address)": FunctionFragment;
-    "getWalletsByRootKeyWithDelegations(address)": FunctionFragment;
     "linkCallerToRootKey((address,bytes,string),uint256)": FunctionFragment;
     "linkNonEVMWalletToRootKey(((string,uint8),bytes,string,(string,bytes)[]),uint256)": FunctionFragment;
     "linkWalletToRootKey((address,bytes,string),(address,bytes,string),uint256)": FunctionFragment;
@@ -115,13 +106,12 @@ export interface IWalletLinkInterface extends utils.Interface {
     nameOrSignatureOrTopic:
       | "checkIfLinked"
       | "checkIfNonEVMWalletLinked"
-      | "explicitWalletsByRootKey"
+      | "getAllWalletsByRootKey"
       | "getDefaultWallet"
       | "getDependency"
       | "getLatestNonceForRootKey"
       | "getRootKeyForWallet"
       | "getWalletsByRootKey"
-      | "getWalletsByRootKeyWithDelegations"
       | "linkCallerToRootKey"
       | "linkNonEVMWalletToRootKey"
       | "linkWalletToRootKey"
@@ -141,8 +131,8 @@ export interface IWalletLinkInterface extends utils.Interface {
     values: [PromiseOrValue<string>, PromiseOrValue<BytesLike>]
   ): string;
   encodeFunctionData(
-    functionFragment: "explicitWalletsByRootKey",
-    values: [PromiseOrValue<string>, IWalletLinkBase.WalletQueryOptionsStruct]
+    functionFragment: "getAllWalletsByRootKey",
+    values: [PromiseOrValue<string>]
   ): string;
   encodeFunctionData(
     functionFragment: "getDefaultWallet",
@@ -164,10 +154,6 @@ export interface IWalletLinkInterface extends utils.Interface {
     functionFragment: "getWalletsByRootKey",
     values: [PromiseOrValue<string>]
   ): string;
-  encodeFunctionData(
-    functionFragment: "getWalletsByRootKeyWithDelegations",
-    values: [PromiseOrValue<string>]
-  ): string;
   encodeFunctionData(
     functionFragment: "linkCallerToRootKey",
     values: [IWalletLinkBase.LinkedWalletStruct, PromiseOrValue<BigNumberish>]
@@ -221,7 +207,7 @@ export interface IWalletLinkInterface extends utils.Interface {
     data: BytesLike
   ): Result;
   decodeFunctionResult(
-    functionFragment: "explicitWalletsByRootKey",
+    functionFragment: "getAllWalletsByRootKey",
     data: BytesLike
   ): Result;
   decodeFunctionResult(
@@ -244,10 +230,6 @@ export interface IWalletLinkInterface extends utils.Interface {
     functionFragment: "getWalletsByRootKey",
     data: BytesLike
   ): Result;
-  decodeFunctionResult(
-    functionFragment: "getWalletsByRootKeyWithDelegations",
-    data: BytesLike
-  ): Result;
   decodeFunctionResult(
     functionFragment: "linkCallerToRootKey",
     data: BytesLike
@@ -393,9 +375,8 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<[boolean]>;
 
-    explicitWalletsByRootKey(
+    getAllWalletsByRootKey(
       rootKey: PromiseOrValue<string>,
-      options: IWalletLinkBase.WalletQueryOptionsStruct,
       overrides?: CallOverrides
     ): Promise<
       [WalletLib.WalletStructOutput[]] & {
@@ -428,11 +409,6 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<[string[]] & { wallets: string[] }>;
 
-    getWalletsByRootKeyWithDelegations(
-      rootKey: PromiseOrValue<string>,
-      overrides?: CallOverrides
-    ): Promise<[string[]] & { wallets: string[] }>;
-
     linkCallerToRootKey(
       rootWallet: IWalletLinkBase.LinkedWalletStruct,
       nonce: PromiseOrValue<BigNumberish>,
@@ -493,9 +469,8 @@ export interface IWalletLink extends BaseContract {
     overrides?: CallOverrides
   ): Promise<boolean>;
 
-  explicitWalletsByRootKey(
+  getAllWalletsByRootKey(
     rootKey: PromiseOrValue<string>,
-    options: IWalletLinkBase.WalletQueryOptionsStruct,
     overrides?: CallOverrides
   ): Promise<WalletLib.WalletStructOutput[]>;
 
@@ -524,11 +499,6 @@ export interface IWalletLink extends BaseContract {
     overrides?: CallOverrides
   ): Promise<string[]>;
 
-  getWalletsByRootKeyWithDelegations(
-    rootKey: PromiseOrValue<string>,
-    overrides?: CallOverrides
-  ): Promise<string[]>;
-
   linkCallerToRootKey(
     rootWallet: IWalletLinkBase.LinkedWalletStruct,
     nonce: PromiseOrValue<BigNumberish>,
@@ -589,9 +559,8 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<boolean>;
 
-    explicitWalletsByRootKey(
+    getAllWalletsByRootKey(
       rootKey: PromiseOrValue<string>,
-      options: IWalletLinkBase.WalletQueryOptionsStruct,
       overrides?: CallOverrides
     ): Promise<WalletLib.WalletStructOutput[]>;
 
@@ -620,11 +589,6 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<string[]>;
 
-    getWalletsByRootKeyWithDelegations(
-      rootKey: PromiseOrValue<string>,
-      overrides?: CallOverrides
-    ): Promise<string[]>;
-
     linkCallerToRootKey(
       rootWallet: IWalletLinkBase.LinkedWalletStruct,
       nonce: PromiseOrValue<BigNumberish>,
@@ -731,9 +695,8 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<BigNumber>;
 
-    explicitWalletsByRootKey(
+    getAllWalletsByRootKey(
       rootKey: PromiseOrValue<string>,
-      options: IWalletLinkBase.WalletQueryOptionsStruct,
       overrides?: CallOverrides
     ): Promise<BigNumber>;
 
@@ -762,11 +725,6 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<BigNumber>;
 
-    getWalletsByRootKeyWithDelegations(
-      rootKey: PromiseOrValue<string>,
-      overrides?: CallOverrides
-    ): Promise<BigNumber>;
-
     linkCallerToRootKey(
       rootWallet: IWalletLinkBase.LinkedWalletStruct,
       nonce: PromiseOrValue<BigNumberish>,
@@ -828,9 +786,8 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<PopulatedTransaction>;
 
-    explicitWalletsByRootKey(
+    getAllWalletsByRootKey(
       rootKey: PromiseOrValue<string>,
-      options: IWalletLinkBase.WalletQueryOptionsStruct,
       overrides?: CallOverrides
     ): Promise<PopulatedTransaction>;
 
@@ -859,11 +816,6 @@ export interface IWalletLink extends BaseContract {
       overrides?: CallOverrides
     ): Promise<PopulatedTransaction>;
 
-    getWalletsByRootKeyWithDelegations(
-      rootKey: PromiseOrValue<string>,
-      overrides?: CallOverrides
-    ): Promise<PopulatedTransaction>;
-
     linkCallerToRootKey(
       rootWallet: IWalletLinkBase.LinkedWalletStruct,
       nonce: PromiseOrValue<BigNumberish>,
diff --git a/packages/generated/dev/typings/factories/IWalletLink__factory.ts b/packages/generated/dev/typings/factories/IWalletLink__factory.ts
index 04f30cdb584..74327a836c7 100644
--- a/packages/generated/dev/typings/factories/IWalletLink__factory.ts
+++ b/packages/generated/dev/typings/factories/IWalletLink__factory.ts
@@ -57,25 +57,13 @@ const _abi = [
   },
   {
     type: "function",
-    name: "explicitWalletsByRootKey",
+    name: "getAllWalletsByRootKey",
     inputs: [
       {
         name: "rootKey",
         type: "address",
         internalType: "address",
       },
-      {
-        name: "options",
-        type: "tuple",
-        internalType: "struct IWalletLinkBase.WalletQueryOptions",
-        components: [
-          {
-            name: "includeDelegations",
-            type: "bool",
-            internalType: "bool",
-          },
-        ],
-      },
     ],
     outputs: [
       {
@@ -193,25 +181,6 @@ const _abi = [
     ],
     stateMutability: "view",
   },
-  {
-    type: "function",
-    name: "getWalletsByRootKeyWithDelegations",
-    inputs: [
-      {
-        name: "rootKey",
-        type: "address",
-        internalType: "address",
-      },
-    ],
-    outputs: [
-      {
-        name: "wallets",
-        type: "address[]",
-        internalType: "address[]",
-      },
-    ],
-    stateMutability: "view",
-  },
   {
     type: "function",
     name: "linkCallerToRootKey",
diff --git a/packages/web3/src/v3/WalletLink.ts b/packages/web3/src/v3/WalletLink.ts
index 3cb47d805d5..9fe4074cc4b 100644
--- a/packages/web3/src/v3/WalletLink.ts
+++ b/packages/web3/src/v3/WalletLink.ts
@@ -248,7 +248,7 @@ export class WalletLink {
     }
 
     public async getLinkedWalletsWithDelegations(rootKey: string): Promise<string[]> {
-        return this.walletLinkShim.read.getWalletsByRootKeyWithDelegations(rootKey)
+        return this.walletLinkShim.read.getWalletsByRootKey(rootKey)
     }
 
     public getRootKeyForWallet(wallet: string): Promise<string> {


Reviews:
user: login: shuhuiluo
body: Why?
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-21T20:36:28Z
user: login: shuhuiluo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T16:16:40Z
user: login: shuhuiluo
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T17:38:44Z
user: login: clemire
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T18:19:33Z
user: login: giuseppecrj
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T19:35:34Z
user: login: shuhuiluo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T19:43:16Z
user: login: giuseppecrj
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T20:05:48Z
user: login: shuhuiluo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T20:08:31Z
user: login: giuseppecrj
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-24T20:13:14Z
user: login: texuf
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-04-16T16:45:28Z
user: login: shuhuiluo
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-16T20:23:20Z
user: login: giuseppecrj
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-16T20:36:28Z

Review comments:
diff_hunk: @@ -48,7 +48,6 @@ import {DeployMockLegacyArchitect} from "contracts/scripts/deployments/facets/De
 import {DeploySpaceProxyInitializer} from "contracts/scripts/deployments/utils/DeploySpaceProxyInitializer.s.sol";
 import {DeploySpaceFactoryInit} from "contracts/scripts/deployments/facets/DeploySpaceFactoryInit.s.sol";
 import {DeploySLCEIP6565} from "contracts/scripts/deployments/utils/DeploySLCEIP6565.s.sol";
-import {DeployMockDelegationRegistry} from "contracts/scripts/deployments/utils/DeployMockDelegationRegistry.s.sol";
path: contracts/scripts/deployments/diamonds/DeploySpaceFactory.s.sol
user: login: shuhuiluo
body: Remove `MockDelegationRegistry` and `DeployMockDelegationRegistry`?
created_at: 2025-03-24T16:16:40Z
author_association: CONTRIBUTOR
diff_hunk: @@ -12,12 +12,8 @@ import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
 
 contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
-  function __WalletLink_init(
-    address delegateRegistry,
-    address sclEip6565
-  ) external onlyInitializing {
+  function __WalletLink_init(address sclEip6565) external onlyInitializing {
     _addInterface(type(IWalletLink).interfaceId);
-    _setDependency(DELEGATE_REGISTRY_V2, delegateRegistry);
     _setDependency(SCL_EIP6565, sclEip6565);
path: contracts/src/factory/facets/wallet-link/WalletLink.sol
user: login: shuhuiluo
body: Does it have to be an external library?
created_at: 2025-03-24T17:38:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -12,12 +12,8 @@ import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
 
 contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
-  function __WalletLink_init(
-    address delegateRegistry,
-    address sclEip6565
-  ) external onlyInitializing {
+  function __WalletLink_init(address sclEip6565) external onlyInitializing {
     _addInterface(type(IWalletLink).interfaceId);
-    _setDependency(DELEGATE_REGISTRY_V2, delegateRegistry);
     _setDependency(SCL_EIP6565, sclEip6565);
path: contracts/src/factory/facets/wallet-link/WalletLink.sol
user: login: giuseppecrj
body: yes.
created_at: 2025-03-24T19:35:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -12,12 +12,8 @@ import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
 
 contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
-  function __WalletLink_init(
-    address delegateRegistry,
-    address sclEip6565
-  ) external onlyInitializing {
+  function __WalletLink_init(address sclEip6565) external onlyInitializing {
     _addInterface(type(IWalletLink).interfaceId);
-    _setDependency(DELEGATE_REGISTRY_V2, delegateRegistry);
     _setDependency(SCL_EIP6565, sclEip6565);
path: contracts/src/factory/facets/wallet-link/WalletLink.sol
user: login: shuhuiluo
body: Why?
created_at: 2025-03-24T19:43:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -12,12 +12,8 @@ import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
 
 contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
-  function __WalletLink_init(
-    address delegateRegistry,
-    address sclEip6565
-  ) external onlyInitializing {
+  function __WalletLink_init(address sclEip6565) external onlyInitializing {
     _addInterface(type(IWalletLink).interfaceId);
-    _setDependency(DELEGATE_REGISTRY_V2, delegateRegistry);
     _setDependency(SCL_EIP6565, sclEip6565);
path: contracts/src/factory/facets/wallet-link/WalletLink.sol
user: login: giuseppecrj
body: you mean as opposed to importing directly?
created_at: 2025-03-24T20:05:48Z
author_association: CONTRIBUTOR
diff_hunk: @@ -12,12 +12,8 @@ import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
 
 contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
-  function __WalletLink_init(
-    address delegateRegistry,
-    address sclEip6565
-  ) external onlyInitializing {
+  function __WalletLink_init(address sclEip6565) external onlyInitializing {
     _addInterface(type(IWalletLink).interfaceId);
-    _setDependency(DELEGATE_REGISTRY_V2, delegateRegistry);
     _setDependency(SCL_EIP6565, sclEip6565);
path: contracts/src/factory/facets/wallet-link/WalletLink.sol
user: login: shuhuiluo
body: Can't we make the library functions internal?
created_at: 2025-03-24T20:08:31Z
author_association: CONTRIBUTOR
diff_hunk: @@ -12,12 +12,8 @@ import {WalletLinkBase} from "./WalletLinkBase.sol";
 import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
 
 contract WalletLink is IWalletLink, WalletLinkBase, OwnableBase, Facet {
-  function __WalletLink_init(
-    address delegateRegistry,
-    address sclEip6565
-  ) external onlyInitializing {
+  function __WalletLink_init(address sclEip6565) external onlyInitializing {
     _addInterface(type(IWalletLink).interfaceId);
-    _setDependency(DELEGATE_REGISTRY_V2, delegateRegistry);
     _setDependency(SCL_EIP6565, sclEip6565);
path: contracts/src/factory/facets/wallet-link/WalletLink.sol
user: login: giuseppecrj
body: yeah, we can do in a next iteration. We'd have to make changes to the crypto-lib library to get this to work but for sure doable in a future iteration.
created_at: 2025-03-24T20:13:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -160,7 +147,8 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
         }
 
         ds.rootKeyByHash[walletHash] = rootKey;
-        rootWallet.addWallet(walletHash, nonEVMWallet.wallet);
+        walletHashes.add(walletHash);
+        ds.rootWalletByRootKey[rootKey].walletByHash[walletHash] = nonEVMWallet.wallet;
path: packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
user: login: shuhuiluo
body: `ds.rootWalletByRootKey[rootKey]` has been read on ln 129.
created_at: 2025-04-16T20:14:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -24,11 +20,10 @@ import {EIP712Base} from "@towns-protocol/diamond/src/utils/cryptography/EIP712B
 abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
     using EnumerableSet for EnumerableSet.AddressSet;
     using EnumerableSet for EnumerableSet.Bytes32Set;
-    using WalletLib for WalletLib.RootWallet;
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                           Constants
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+  /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
path: packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
user: login: shuhuiluo
body: ```suggestion
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
```
created_at: 2025-04-16T20:14:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -269,94 +260,21 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
 
     /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
     /*                        Read
-    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
+  /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
path: packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
user: login: shuhuiluo
body: ```suggestion
    /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
```
created_at: 2025-04-16T20:15:46Z
author_association: CONTRIBUTOR
diff_hunk: @@ -181,17 +169,20 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
             revert WalletLink__NotLinked(linkedWallet, rootKey);
         }
 
-        WalletLib.RootWallet storage rootWallet = ds.rootWalletByRootKey[rootKey];
+        EnumerableSet.Bytes32Set storage walletHashes = ds
+            .rootWalletByRootKey[rootKey]
+            .walletHashes;
 
-        if (!rootWallet.exists(walletHash)) {
+        if (!walletHashes.contains(walletHash)) {
             revert WalletLink__NonEVMWalletNotLinked(wallet.addr, rootKey);
         }
 
         // Check that the nonce is higher than the last nonce used
         _useCheckedNonce(rootKey, nonce);
 
         // Remove the wallet from the root wallet
-        rootWallet.removeWallet(walletHash);
+        walletHashes.remove(walletHash);
+        delete ds.rootWalletByRootKey[rootKey].walletByHash[walletHash];
path: packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
user: login: shuhuiluo
body: Cache `ds.rootWalletByRootKey[rootKey]` on ln 172.
created_at: 2025-04-16T20:17:02Z
author_association: CONTRIBUTOR
diff_hunk: @@ -181,17 +169,20 @@ abstract contract WalletLinkBase is IWalletLinkBase, EIP712Base, Nonces {
             revert WalletLink__NotLinked(linkedWallet, rootKey);
         }
 
-        WalletLib.RootWallet storage rootWallet = ds.rootWalletByRootKey[rootKey];
+        EnumerableSet.Bytes32Set storage walletHashes = ds
+            .rootWalletByRootKey[rootKey]
+            .walletHashes;
 
-        if (!rootWallet.exists(walletHash)) {
+        if (!walletHashes.contains(walletHash)) {
             revert WalletLink__NonEVMWalletNotLinked(wallet.addr, rootKey);
         }
 
         // Check that the nonce is higher than the last nonce used
         _useCheckedNonce(rootKey, nonce);
 
         // Remove the wallet from the root wallet
-        rootWallet.removeWallet(walletHash);
+        walletHashes.remove(walletHash);
+        delete ds.rootWalletByRootKey[rootKey].walletByHash[walletHash];
path: packages/contracts/src/factory/facets/wallet-link/WalletLinkBase.sol
user: login: giuseppecrj
body: This can be done in a separate PR 
created_at: 2025-04-16T20:36:28Z
author_association: CONTRIBUTOR

PR comments:
user: login: vercel[bot]
created_at: 2025-03-21T20:29:10Z
body: [vc]: #QWnhZhsj5jpi7Ealzg1plAKK7QALW01fTO1ShpJUdBs=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJyaXZlci1zYW1wbGUtYXBwIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vcml2ZXItYnVpbGQtdGVhbS9yaXZlci1zYW1wbGUtYXBwL2pzRFdGM3k4MmpoMmlySlhLRlZEdjlORE1MSlQiLCJwcmV2aWV3VXJsIjoiIiwibmV4dENvbW1pdFN0YXR1cyI6IlNLSVBQRUQiLCJyb290RGlyZWN0b3J5IjoicGFja2FnZXMvcGxheWdyb3VuZCJ9XX0=
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)


<details><summary>1 Skipped Deployment</summary>

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **river-sample-app** | ⬜️ Skipped ([Inspect](https://vercel.com/river-build-team/river-sample-app/jsDWF3y82jh2irJXKFVDv9NDMLJT)) |  |  | Apr 16, 2025 4:47pm |
</details>


author_association: NONE
user: login: giuseppecrj
created_at: 2025-03-21T20:57:01Z
body: > Why?

Different path
author_association: CONTRIBUTOR
user: login: giuseppecrj
created_at: 2025-03-24T16:09:09Z
body: @jterzis are nodes reverted or not yet?
author_association: CONTRIBUTOR
user: login: texuf
created_at: 2025-04-01T05:51:10Z
body: Is this still valid?
author_association: CONTRIBUTOR
user: login: giuseppecrj
created_at: 2025-04-01T15:46:12Z
body: > Is this still valid?

yes, waiting on node updates
author_association: CONTRIBUTOR