{
    "address": "0xb8310dd32221BcFFBB04a87388f2F0D6daEf1754",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "previousOwner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "OwnershipTransferred",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "string",
                            "name": "name",
                            "type": "string"
                        },
                        {
                            "internalType": "address",
                            "name": "definition",
                            "type": "address"
                        },
                        {
                            "internalType": "string",
                            "name": "stateEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "resolverEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "bytes",
                            "name": "encodedCancel",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct RegisteredTransfer",
                    "name": "transfer",
                    "type": "tuple"
                }
            ],
            "name": "TransferAdded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "string",
                            "name": "name",
                            "type": "string"
                        },
                        {
                            "internalType": "address",
                            "name": "definition",
                            "type": "address"
                        },
                        {
                            "internalType": "string",
                            "name": "stateEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "resolverEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "bytes",
                            "name": "encodedCancel",
                            "type": "bytes"
                        }
                    ],
                    "indexed": false,
                    "internalType": "struct RegisteredTransfer",
                    "name": "transfer",
                    "type": "tuple"
                }
            ],
            "name": "TransferRemoved",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "components": [
                        {
                            "internalType": "string",
                            "name": "name",
                            "type": "string"
                        },
                        {
                            "internalType": "address",
                            "name": "definition",
                            "type": "address"
                        },
                        {
                            "internalType": "string",
                            "name": "stateEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "resolverEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "bytes",
                            "name": "encodedCancel",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct RegisteredTransfer",
                    "name": "definition",
                    "type": "tuple"
                }
            ],
            "name": "addTransferDefinition",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getTransferDefinitions",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "string",
                            "name": "name",
                            "type": "string"
                        },
                        {
                            "internalType": "address",
                            "name": "definition",
                            "type": "address"
                        },
                        {
                            "internalType": "string",
                            "name": "stateEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "string",
                            "name": "resolverEncoding",
                            "type": "string"
                        },
                        {
                            "internalType": "bytes",
                            "name": "encodedCancel",
                            "type": "bytes"
                        }
                    ],
                    "internalType": "struct RegisteredTransfer[]",
                    "name": "",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "name",
                    "type": "string"
                }
            ],
            "name": "removeTransferDefinition",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "transactionHash": "0xe1f3217ae3ad87e800404c2848d188f1804925e36343732865aaa0909165793f",
    "receipt": {
        "to": null,
        "from": "0x627306090abaB3A6e1400e9345bC60c78a8BEf57",
        "contractAddress": "0xb8310dd32221BcFFBB04a87388f2F0D6daEf1754",
        "transactionIndex": 2,
        "gasUsed": "1239411",
        "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000410000000000000000000000000800000000000000000000000000010000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000020000000000000000000000000000000000000000000000000000000000000000000",
        "blockHash": "0x4b603effb4b1c81badaad509cb8facf2862aca36b2971d24c391bed784456687",
        "transactionHash": "0xe1f3217ae3ad87e800404c2848d188f1804925e36343732865aaa0909165793f",
        "logs": [
            {
                "transactionIndex": 2,
                "blockNumber": 22731971,
                "transactionHash": "0xe1f3217ae3ad87e800404c2848d188f1804925e36343732865aaa0909165793f",
                "address": "0xb8310dd32221BcFFBB04a87388f2F0D6daEf1754",
                "topics": [
                    "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
                    "0x0000000000000000000000000000000000000000000000000000000000000000",
                    "0x000000000000000000000000627306090abab3a6e1400e9345bc60c78a8bef57"
                ],
                "data": "0x",
                "logIndex": 0,
                "blockHash": "0x4b603effb4b1c81badaad509cb8facf2862aca36b2971d24c391bed784456687"
            }
        ],
        "blockNumber": 22731971,
        "cumulativeGasUsed": "1318779",
        "status": 1,
        "byzantium": true
    },
    "args": [],
    "solcInputHash": "89c55d5a88f10637860a9ea31a1daad3",
    "metadata": "{\"compiler\":{\"version\":\"0.7.1+commit.f4a555be\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"TransferAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct RegisteredTransfer\",\"name\":\"transfer\",\"type\":\"tuple\"}],\"name\":\"TransferRemoved\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer\",\"name\":\"definition\",\"type\":\"tuple\"}],\"name\":\"addTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransferDefinitions\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"definition\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"stateEncoding\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"resolverEncoding\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"encodedCancel\",\"type\":\"bytes\"}],\"internalType\":\"struct RegisteredTransfer[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"removeTransferDefinition\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Connext <support@connext.network>\",\"kind\":\"dev\",\"methods\":{\"addTransferDefinition((string,address,string,string,bytes))\":{\"details\":\"Should add a transfer definition to the registry\"},\"getTransferDefinitions()\":{\"details\":\"Should return all transfer defintions in registry\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeTransferDefinition(string)\":{\"details\":\"Should remove a transfer definition from the registry\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"title\":\"TransferRegistry\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"The TransferRegistry maintains an onchain record of all         supported transfers (specifically holds the registry information         defined within the contracts). The offchain protocol uses         this information to get the correct encodings when generating         signatures. The information stored here can only be updated         by the owner of the contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src.sol/TransferRegistry.sol\":\"TransferRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/GSN/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n    function _msgSender() internal view virtual returns (address payable) {\\n        return msg.sender;\\n    }\\n\\n    function _msgData() internal view virtual returns (bytes memory) {\\n        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n        return msg.data;\\n    }\\n}\\n\",\"keccak256\":\"0x910a2e625b71168563edf9eeef55a50d6d699acfe27ceba3921f291829a8f938\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"../GSN/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\ncontract Ownable is Context {\\n    address private _owner;\\n\\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n    /**\\n     * @dev Initializes the contract setting the deployer as the initial owner.\\n     */\\n    constructor () {\\n        address msgSender = _msgSender();\\n        _owner = msgSender;\\n        emit OwnershipTransferred(address(0), msgSender);\\n    }\\n\\n    /**\\n     * @dev Returns the address of the current owner.\\n     */\\n    function owner() public view returns (address) {\\n        return _owner;\\n    }\\n\\n    /**\\n     * @dev Throws if called by any account other than the owner.\\n     */\\n    modifier onlyOwner() {\\n        require(_owner == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n        _;\\n    }\\n\\n    /**\\n     * @dev Leaves the contract without owner. It will not be possible to call\\n     * `onlyOwner` functions anymore. Can only be called by the current owner.\\n     *\\n     * NOTE: Renouncing ownership will leave the contract without an owner,\\n     * thereby removing any functionality that is only available to the owner.\\n     */\\n    function renounceOwnership() public virtual onlyOwner {\\n        emit OwnershipTransferred(_owner, address(0));\\n        _owner = address(0);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n     * Can only be called by the current owner.\\n     */\\n    function transferOwnership(address newOwner) public virtual onlyOwner {\\n        require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n        emit OwnershipTransferred(_owner, newOwner);\\n        _owner = newOwner;\\n    }\\n}\\n\",\"keccak256\":\"0x74b0525c81e47810f1bd795755962bdb84de3a4f71cfcb063f4c4d4999a3e96b\",\"license\":\"MIT\"},\"src.sol/TransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"./interfaces/ITransferRegistry.sol\\\";\\nimport \\\"./lib/LibIterableMapping.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/// @title TransferRegistry\\n/// @author Connext <support@connext.network>\\n/// @notice The TransferRegistry maintains an onchain record of all\\n///         supported transfers (specifically holds the registry information\\n///         defined within the contracts). The offchain protocol uses\\n///         this information to get the correct encodings when generating\\n///         signatures. The information stored here can only be updated\\n///         by the owner of the contract\\n\\ncontract TransferRegistry is Ownable, ITransferRegistry {\\n    using LibIterableMapping for LibIterableMapping.IterableMapping;\\n\\n    LibIterableMapping.IterableMapping transfers;\\n\\n    /// @dev Should add a transfer definition to the registry\\n    function addTransferDefinition(RegisteredTransfer memory definition)\\n        external\\n        override\\n        onlyOwner\\n    {\\n        // Get index transfer will be added at\\n        uint256 idx = transfers.length();\\n        \\n        // Add registered transfer\\n        transfers.addTransferDefinition(definition);\\n\\n        // Emit event\\n        emit TransferAdded(transfers.getTransferDefinitionByIndex(idx));\\n    }\\n\\n    /// @dev Should remove a transfer definition from the registry\\n    function removeTransferDefinition(string memory name)\\n        external\\n        override\\n        onlyOwner\\n    {\\n        // Get transfer from library to remove for event\\n        RegisteredTransfer memory transfer = transfers.getTransferDefinitionByName(name);\\n\\n        // Remove transfer\\n        transfers.removeTransferDefinition(name);\\n\\n        // Emit event\\n        emit TransferRemoved(transfer);\\n    }\\n\\n    /// @dev Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        override\\n        returns (RegisteredTransfer[] memory)\\n    {\\n        return transfers.getTransferDefinitions();\\n    }\\n}\\n\",\"keccak256\":\"0xe0bbdc74c5635a2b21ab1a0f2b4ebb377af048f05cc2bab70f645ac826984382\",\"license\":\"UNLICENSED\"},\"src.sol/interfaces/ITransferRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental \\\"ABIEncoderV2\\\";\\n\\nstruct RegisteredTransfer {\\n    string name;\\n    address definition;\\n    string stateEncoding;\\n    string resolverEncoding;\\n    bytes encodedCancel;\\n}\\n\\ninterface ITransferRegistry {\\n    event TransferAdded(RegisteredTransfer transfer);\\n\\n    event TransferRemoved(RegisteredTransfer transfer);\\n\\n    // Should add a transfer definition to the registry\\n    // onlyOwner\\n    function addTransferDefinition(RegisteredTransfer memory transfer) external;\\n\\n    // Should remove a transfer definition to the registry\\n    // onlyOwner\\n    function removeTransferDefinition(string memory name) external;\\n\\n    // Should return all transfer defintions in registry\\n    function getTransferDefinitions()\\n        external\\n        view\\n        returns (RegisteredTransfer[] memory);\\n}\\n\",\"keccak256\":\"0xd13be6d976c64e381a0d9df10c621cd964454b6916f25df4ea6c1b4cd873a58a\",\"license\":\"UNLICENSED\"},\"src.sol/lib/LibIterableMapping.sol\":{\"content\":\"// SPDX-License-Identifier: UNLICENSED\\npragma solidity ^0.7.1;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"../interfaces/ITransferRegistry.sol\\\";\\n\\n/// @title LibIterableMapping\\n/// @author Connext <support@connext.network>\\n/// @notice This library provides an efficient way to store and retrieve\\n///         RegisteredTransfers. This contract is used to manage the transfers\\n///         stored by `TransferRegistry.sol`\\nlibrary LibIterableMapping {\\n    struct TransferDefinitionWithIndex {\\n        RegisteredTransfer transfer;\\n        uint256 index;\\n    }\\n\\n    struct IterableMapping {\\n        mapping(string => TransferDefinitionWithIndex) transfers;\\n        string[] names;\\n    }\\n\\n    function stringEqual(string memory s, string memory t)\\n        internal\\n        pure\\n        returns (bool)\\n    {\\n        return keccak256(abi.encodePacked(s)) == keccak256(abi.encodePacked(t));\\n    }\\n\\n    function isEmptyString(string memory s) internal pure returns (bool) {\\n        return stringEqual(s, \\\"\\\");\\n    }\\n\\n    function nameExists(IterableMapping storage self, string memory name)\\n        internal\\n        view\\n        returns (bool)\\n    {\\n        return\\n            !isEmptyString(name) &&\\n            self.names.length != 0 &&\\n            stringEqual(self.names[self.transfers[name].index], name);\\n    }\\n\\n    function length(IterableMapping storage self)\\n        internal\\n        view\\n        returns (uint256)\\n    {\\n        return self.names.length;\\n    }\\n\\n    function getTransferDefinitionByName(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        return self.transfers[name].transfer;\\n    }\\n\\n    function getTransferDefinitionByIndex(\\n        IterableMapping storage self,\\n        uint256 index\\n    ) internal view returns (RegisteredTransfer memory) {\\n        require(index < self.names.length, \\\"LibIterableMapping: INVALID_INDEX\\\");\\n        return self.transfers[self.names[index]].transfer;\\n    }\\n\\n    function getTransferDefinitions(IterableMapping storage self)\\n        internal\\n        view\\n        returns (RegisteredTransfer[] memory)\\n    {\\n        uint256 l = self.names.length;\\n        RegisteredTransfer[] memory transfers = new RegisteredTransfer[](l);\\n        for (uint256 i = 0; i < l; i++) {\\n            transfers[i] = self.transfers[self.names[i]].transfer;\\n        }\\n        return transfers;\\n    }\\n\\n    function addTransferDefinition(\\n        IterableMapping storage self,\\n        RegisteredTransfer memory transfer\\n    ) internal {\\n        string memory name = transfer.name;\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(!nameExists(self, name), \\\"LibIterableMapping: NAME_ALREADY_ADDED\\\");\\n        self.transfers[name] = TransferDefinitionWithIndex({\\n            transfer: transfer,\\n            index: self.names.length\\n        });\\n        self.names.push(name);\\n    }\\n\\n    function removeTransferDefinition(\\n        IterableMapping storage self,\\n        string memory name\\n    ) internal {\\n        require(!isEmptyString(name), \\\"LibIterableMapping: EMPTY_NAME\\\");\\n        require(nameExists(self, name), \\\"LibIterableMapping: NAME_NOT_FOUND\\\");\\n        uint256 index = self.transfers[name].index;\\n        string memory lastName = self.names[self.names.length - 1];\\n        self.transfers[lastName].index = index;\\n        self.names[index] = lastName;\\n        delete self.transfers[name];\\n        self.names.pop();\\n    }\\n}\\n\",\"keccak256\":\"0x52d4a240bb76e9892af1ecbf6cf72995890db0b115a36a54e1b0115f0f47ce8a\",\"license\":\"UNLICENSED\"}},\"version\":1}",
    "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b6115078061007d6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806355304c3f14610067578063715018a61461007c5780638da5cb5b14610084578063961bf9b1146100a2578063c9ff4d25146100b5578063f2fde38b146100ca575b600080fd5b61007a610075366004611061565b6100dd565b005b61007a610179565b61008c6101f8565b604051610099919061127c565b60405180910390f35b61007a6100b0366004611026565b610207565b6100bd61028b565b6040516100999190611290565b61007a6100d836600461100b565b61029c565b6100e5610352565b6000546001600160a01b0390811691161461011b5760405162461bcd60e51b81526004016101129061137c565b60405180910390fd5b60006101276001610356565b905061013460018361035d565b7fcdbba5dd6bffbe47d5f74dbed3cf4a2174815c7186eaa49b32f97af4c47543bf6101606001836104af565b60405161016d919061146b565b60405180910390a15050565b610181610352565b6000546001600160a01b039081169116146101ae5760405162461bcd60e51b81526004016101129061137c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b61020f610352565b6000546001600160a01b0390811691161461023c5760405162461bcd60e51b81526004016101129061137c565b610244610e79565b61024f600183610783565b905061025c6001836107c1565b7fdc44d9d985df00268149ae57add485c612e57109279f8485035dbe2b2251222b8160405161016d919061146b565b606061029760016109df565b905090565b6102a4610352565b6000546001600160a01b039081169116146102d15760405162461bcd60e51b81526004016101129061137c565b6001600160a01b0381166102f75760405162461bcd60e51b8152600401610112906112f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001015490565b805161036881610d0e565b156103855760405162461bcd60e51b8152600401610112906113b1565b61038f8382610d29565b156103ac5760405162461bcd60e51b815260040161011290611336565b60408051808201825283815260018501546020820152905184906103d19084906111f0565b908152604051602091819003820190208251805180519293919284926103fb928492910190610eb1565b506020828101516001830180546001600160a01b0319166001600160a01b039092169190911790556040830151805161043a9260028501920190610eb1565b5060608201518051610456916003840191602090910190610eb1565b5060808201518051610472916004840191602090910190610eb1565b505050602091820151600590910155600180850180549182018155600090815282902083516104a993919092019190840190610eb1565b50505050565b6104b7610e79565b600183015482106104da5760405162461bcd60e51b8152600401610112906113e8565b826000018360010183815481106104ed57fe5b90600052602060002001604051610504919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a0820184815291939092849291849184018282801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156106495780601f1061061e57610100808354040283529160200191610649565b820191906000526020600020905b81548152906001019060200180831161062c57829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b50505050508152505090505b92915050565b61078b610e79565b6107958383610d29565b6107b15760405162461bcd60e51b815260040161011290611429565b60405183906105049084906111f0565b6107ca81610d0e565b156107e75760405162461bcd60e51b8152600401610112906113b1565b6107f18282610d29565b61080d5760405162461bcd60e51b815260040161011290611429565b6000826000018260405161082191906111f0565b90815260405190819003602001902060050154600184018054919250606091600019810190811061084e57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b505050505090508184600001826040516108f691906111f0565b9081526020016040518091039020600501819055508084600101838154811061091b57fe5b906000526020600020019080519060200190610938929190610eb1565b5060405184906109499085906111f0565b908152604051908190036020019020600081816109668282610f2f565b6001820180546001600160a01b0319169055610986600283016000610f2f565b610994600383016000610f2f565b6109a2600483016000610f2f565b505060058201600090555050836001018054806109bb57fe5b6001900381819060005260206000200160006109d79190610f2f565b905550505050565b6001810154606090818167ffffffffffffffff811180156109ff57600080fd5b50604051908082528060200260200182016040528015610a3957816020015b610a26610e79565b815260200190600190039081610a1e5790505b50905060005b82811015610d065784600001856001018281548110610a5a57fe5b90600052602060002001604051610a71919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a08201848152919390928492918491840182828015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015610bb65780601f10610b8b57610100808354040283529160200191610bb6565b820191906000526020600020905b815481529060010190602001808311610b9957829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610c4a5780601f10610c1f57610100808354040283529160200191610c4a565b820191906000526020600020905b815481529060010190602001808311610c2d57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081525050828281518110610cf357fe5b6020908102919091010152600101610a3f565b509392505050565b600061077d8260405180602001604052806000815250610e20565b6000610d3482610d0e565b158015610d445750600183015415155b8015610e195750610e19836001018460000184604051610d6491906111f0565b90815260200160405180910390206005015481548110610d8057fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610e0e5780601f10610de357610100808354040283529160200191610e0e565b820191906000526020600020905b815481529060010190602001808311610df157829003601f168201915b505050505083610e20565b9392505050565b600081604051602001610e3391906111f0565b6040516020818303038152906040528051906020012083604051602001610e5a91906111f0565b6040516020818303038152906040528051906020012014905092915050565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610ef257805160ff1916838001178555610f1f565b82800160010185558215610f1f579182015b82811115610f1f578251825591602001919060010190610f04565b50610f2b929150610f76565b5090565b50805460018160011615610100020316600290046000825580601f10610f555750610f73565b601f016020900490600052602060002090810190610f739190610f76565b50565b5b80821115610f2b5760008155600101610f77565b80356001600160a01b038116811461077d57600080fd5b600082601f830112610fb2578081fd5b813567ffffffffffffffff811115610fc8578182fd5b610fdb601f8201601f191660200161147e565b9150808252836020828501011115610ff257600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561101c578081fd5b610e198383610f8b565b600060208284031215611037578081fd5b813567ffffffffffffffff81111561104d578182fd5b61105984828501610fa2565b949350505050565b600060208284031215611072578081fd5b813567ffffffffffffffff80821115611089578283fd5b9083019060a0828603121561109c578283fd5b6110a660a061147e565b8235828111156110b4578485fd5b6110c087828601610fa2565b8252506110d08660208501610f8b565b60208201526040830135828111156110e6578485fd5b6110f287828601610fa2565b604083015250606083013582811115611109578485fd5b61111587828601610fa2565b60608301525060808301358281111561112c578485fd5b61113887828601610fa2565b60808301525095945050505050565b6000815180845261115f8160208601602086016114a5565b601f01601f19169290920160200192915050565b6000815160a0845261118860a0850182611147565b905060018060a01b036020840151166020850152604083015184820360408601526111b38282611147565b915050606083015184820360608601526111cd8282611147565b915050608083015184820360808601526111e78282611147565b95945050505050565b600082516112028184602087016114a5565b9190910192915050565b600080835460018082166000811461122b576001811461124257611271565b60ff198316865260028304607f1686019350611271565b600283048786526020808720875b838110156112695781548a820152908501908201611250565b505050860193505b509195945050505050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156112e357603f198886030184526112d1858351611173565b945092850192908501906001016112b5565b5092979650505050505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f4c69624974657261626c654d617070696e673a204e414d455f414c524541445960408201526517d05111115160d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f4c69624974657261626c654d617070696e673a20454d5054595f4e414d450000604082015260600190565b60208082526021908201527f4c69624974657261626c654d617070696e673a20494e56414c49445f494e44456040820152600b60fb1b606082015260800190565b60208082526022908201527f4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f55604082015261139160f21b606082015260800190565b600060208252610e196020830184611173565b60405181810167ffffffffffffffff8111828210171561149d57600080fd5b604052919050565b60005b838110156114c05781810151838201526020016114a8565b838111156104a9575050600091015256fea26469706673582212207ffce686b133899c962d2392c37d7cc417bfb49017cb433d19d525b065f0f46d64736f6c63430007010033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806355304c3f14610067578063715018a61461007c5780638da5cb5b14610084578063961bf9b1146100a2578063c9ff4d25146100b5578063f2fde38b146100ca575b600080fd5b61007a610075366004611061565b6100dd565b005b61007a610179565b61008c6101f8565b604051610099919061127c565b60405180910390f35b61007a6100b0366004611026565b610207565b6100bd61028b565b6040516100999190611290565b61007a6100d836600461100b565b61029c565b6100e5610352565b6000546001600160a01b0390811691161461011b5760405162461bcd60e51b81526004016101129061137c565b60405180910390fd5b60006101276001610356565b905061013460018361035d565b7fcdbba5dd6bffbe47d5f74dbed3cf4a2174815c7186eaa49b32f97af4c47543bf6101606001836104af565b60405161016d919061146b565b60405180910390a15050565b610181610352565b6000546001600160a01b039081169116146101ae5760405162461bcd60e51b81526004016101129061137c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b61020f610352565b6000546001600160a01b0390811691161461023c5760405162461bcd60e51b81526004016101129061137c565b610244610e79565b61024f600183610783565b905061025c6001836107c1565b7fdc44d9d985df00268149ae57add485c612e57109279f8485035dbe2b2251222b8160405161016d919061146b565b606061029760016109df565b905090565b6102a4610352565b6000546001600160a01b039081169116146102d15760405162461bcd60e51b81526004016101129061137c565b6001600160a01b0381166102f75760405162461bcd60e51b8152600401610112906112f0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001015490565b805161036881610d0e565b156103855760405162461bcd60e51b8152600401610112906113b1565b61038f8382610d29565b156103ac5760405162461bcd60e51b815260040161011290611336565b60408051808201825283815260018501546020820152905184906103d19084906111f0565b908152604051602091819003820190208251805180519293919284926103fb928492910190610eb1565b506020828101516001830180546001600160a01b0319166001600160a01b039092169190911790556040830151805161043a9260028501920190610eb1565b5060608201518051610456916003840191602090910190610eb1565b5060808201518051610472916004840191602090910190610eb1565b505050602091820151600590910155600180850180549182018155600090815282902083516104a993919092019190840190610eb1565b50505050565b6104b7610e79565b600183015482106104da5760405162461bcd60e51b8152600401610112906113e8565b826000018360010183815481106104ed57fe5b90600052602060002001604051610504919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a0820184815291939092849291849184018282801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f810184900484028501840183528085529190940193918301828280156106495780601f1061061e57610100808354040283529160200191610649565b820191906000526020600020905b81548152906001019060200180831161062c57829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529382019392918301828280156107715780601f1061074657610100808354040283529160200191610771565b820191906000526020600020905b81548152906001019060200180831161075457829003601f168201915b50505050508152505090505b92915050565b61078b610e79565b6107958383610d29565b6107b15760405162461bcd60e51b815260040161011290611429565b60405183906105049084906111f0565b6107ca81610d0e565b156107e75760405162461bcd60e51b8152600401610112906113b1565b6107f18282610d29565b61080d5760405162461bcd60e51b815260040161011290611429565b6000826000018260405161082191906111f0565b90815260405190819003602001902060050154600184018054919250606091600019810190811061084e57fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156108dc5780601f106108b1576101008083540402835291602001916108dc565b820191906000526020600020905b8154815290600101906020018083116108bf57829003601f168201915b505050505090508184600001826040516108f691906111f0565b9081526020016040518091039020600501819055508084600101838154811061091b57fe5b906000526020600020019080519060200190610938929190610eb1565b5060405184906109499085906111f0565b908152604051908190036020019020600081816109668282610f2f565b6001820180546001600160a01b0319169055610986600283016000610f2f565b610994600383016000610f2f565b6109a2600483016000610f2f565b505060058201600090555050836001018054806109bb57fe5b6001900381819060005260206000200160006109d79190610f2f565b905550505050565b6001810154606090818167ffffffffffffffff811180156109ff57600080fd5b50604051908082528060200260200182016040528015610a3957816020015b610a26610e79565b815260200190600190039081610a1e5790505b50905060005b82811015610d065784600001856001018281548110610a5a57fe5b90600052602060002001604051610a71919061120c565b9081526040805160209281900383018120805460026001821615610100026000190190911604601f8101859004909402820160c090810190935260a08201848152919390928492918491840182828015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b50505091835250506001828101546001600160a01b0316602080840191909152600280850180546040805161010096831615969096026000190190911692909204601f81018490048402850184018352808552919094019391830182828015610bb65780601f10610b8b57610100808354040283529160200191610bb6565b820191906000526020600020905b815481529060010190602001808311610b9957829003601f168201915b505050918352505060038201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610c4a5780601f10610c1f57610100808354040283529160200191610c4a565b820191906000526020600020905b815481529060010190602001808311610c2d57829003601f168201915b505050918352505060048201805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152938201939291830182828015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081525050828281518110610cf357fe5b6020908102919091010152600101610a3f565b509392505050565b600061077d8260405180602001604052806000815250610e20565b6000610d3482610d0e565b158015610d445750600183015415155b8015610e195750610e19836001018460000184604051610d6491906111f0565b90815260200160405180910390206005015481548110610d8057fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610e0e5780601f10610de357610100808354040283529160200191610e0e565b820191906000526020600020905b815481529060010190602001808311610df157829003601f168201915b505050505083610e20565b9392505050565b600081604051602001610e3391906111f0565b6040516020818303038152906040528051906020012083604051602001610e5a91906111f0565b6040516020818303038152906040528051906020012014905092915050565b6040518060a001604052806060815260200160006001600160a01b031681526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610ef257805160ff1916838001178555610f1f565b82800160010185558215610f1f579182015b82811115610f1f578251825591602001919060010190610f04565b50610f2b929150610f76565b5090565b50805460018160011615610100020316600290046000825580601f10610f555750610f73565b601f016020900490600052602060002090810190610f739190610f76565b50565b5b80821115610f2b5760008155600101610f77565b80356001600160a01b038116811461077d57600080fd5b600082601f830112610fb2578081fd5b813567ffffffffffffffff811115610fc8578182fd5b610fdb601f8201601f191660200161147e565b9150808252836020828501011115610ff257600080fd5b8060208401602084013760009082016020015292915050565b60006020828403121561101c578081fd5b610e198383610f8b565b600060208284031215611037578081fd5b813567ffffffffffffffff81111561104d578182fd5b61105984828501610fa2565b949350505050565b600060208284031215611072578081fd5b813567ffffffffffffffff80821115611089578283fd5b9083019060a0828603121561109c578283fd5b6110a660a061147e565b8235828111156110b4578485fd5b6110c087828601610fa2565b8252506110d08660208501610f8b565b60208201526040830135828111156110e6578485fd5b6110f287828601610fa2565b604083015250606083013582811115611109578485fd5b61111587828601610fa2565b60608301525060808301358281111561112c578485fd5b61113887828601610fa2565b60808301525095945050505050565b6000815180845261115f8160208601602086016114a5565b601f01601f19169290920160200192915050565b6000815160a0845261118860a0850182611147565b905060018060a01b036020840151166020850152604083015184820360408601526111b38282611147565b915050606083015184820360608601526111cd8282611147565b915050608083015184820360808601526111e78282611147565b95945050505050565b600082516112028184602087016114a5565b9190910192915050565b600080835460018082166000811461122b576001811461124257611271565b60ff198316865260028304607f1686019350611271565b600283048786526020808720875b838110156112695781548a820152908501908201611250565b505050860193505b509195945050505050565b6001600160a01b0391909116815260200190565b6000602080830181845280855180835260408601915060408482028701019250838701855b828110156112e357603f198886030184526112d1858351611173565b945092850192908501906001016112b5565b5092979650505050505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f4c69624974657261626c654d617070696e673a204e414d455f414c524541445960408201526517d05111115160d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601e908201527f4c69624974657261626c654d617070696e673a20454d5054595f4e414d450000604082015260600190565b60208082526021908201527f4c69624974657261626c654d617070696e673a20494e56414c49445f494e44456040820152600b60fb1b606082015260800190565b60208082526022908201527f4c69624974657261626c654d617070696e673a204e414d455f4e4f545f464f55604082015261139160f21b606082015260800190565b600060208252610e196020830184611173565b60405181810167ffffffffffffffff8111828210171561149d57600080fd5b604052919050565b60005b838110156114c05781810151838201526020016114a8565b838111156104a9575050600091015256fea26469706673582212207ffce686b133899c962d2392c37d7cc417bfb49017cb433d19d525b065f0f46d64736f6c63430007010033",
    "devdoc": {
        "author": "Connext <support@connext.network>",
        "kind": "dev",
        "methods": {
            "addTransferDefinition((string,address,string,string,bytes))": {
                "details": "Should add a transfer definition to the registry"
            },
            "getTransferDefinitions()": {
                "details": "Should return all transfer defintions in registry"
            },
            "owner()": {
                "details": "Returns the address of the current owner."
            },
            "removeTransferDefinition(string)": {
                "details": "Should remove a transfer definition from the registry"
            },
            "renounceOwnership()": {
                "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
            },
            "transferOwnership(address)": {
                "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
            }
        },
        "title": "TransferRegistry",
        "version": 1
    },
    "userdoc": {
        "kind": "user",
        "methods": {},
        "notice": "The TransferRegistry maintains an onchain record of all         supported transfers (specifically holds the registry information         defined within the contracts). The offchain protocol uses         this information to get the correct encodings when generating         signatures. The information stored here can only be updated         by the owner of the contract",
        "version": 1
    },
    "storageLayout": {
        "storage": [
            {
                "astId": 30,
                "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                "label": "_owner",
                "offset": 0,
                "slot": "0",
                "type": "t_address"
            },
            {
                "astId": 3458,
                "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                "label": "transfers",
                "offset": 0,
                "slot": "1",
                "type": "t_struct(IterableMapping)4424_storage"
            }
        ],
        "types": {
            "t_address": {
                "encoding": "inplace",
                "label": "address",
                "numberOfBytes": "20"
            },
            "t_array(t_string_storage)dyn_storage": {
                "base": "t_string_storage",
                "encoding": "dynamic_array",
                "label": "string[]",
                "numberOfBytes": "32"
            },
            "t_bytes_storage": {
                "encoding": "bytes",
                "label": "bytes",
                "numberOfBytes": "32"
            },
            "t_mapping(t_string_memory_ptr,t_struct(TransferDefinitionWithIndex)4416_storage)": {
                "encoding": "mapping",
                "key": "t_string_memory_ptr",
                "label": "mapping(string => struct LibIterableMapping.TransferDefinitionWithIndex)",
                "numberOfBytes": "32",
                "value": "t_struct(TransferDefinitionWithIndex)4416_storage"
            },
            "t_string_memory_ptr": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
            },
            "t_string_storage": {
                "encoding": "bytes",
                "label": "string",
                "numberOfBytes": "32"
            },
            "t_struct(IterableMapping)4424_storage": {
                "encoding": "inplace",
                "label": "struct LibIterableMapping.IterableMapping",
                "members": [
                    {
                        "astId": 4420,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "transfers",
                        "offset": 0,
                        "slot": "0",
                        "type": "t_mapping(t_string_memory_ptr,t_struct(TransferDefinitionWithIndex)4416_storage)"
                    },
                    {
                        "astId": 4423,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "names",
                        "offset": 0,
                        "slot": "1",
                        "type": "t_array(t_string_storage)dyn_storage"
                    }
                ],
                "numberOfBytes": "64"
            },
            "t_struct(RegisteredTransfer)3967_storage": {
                "encoding": "inplace",
                "label": "struct RegisteredTransfer",
                "members": [
                    {
                        "astId": 3958,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "name",
                        "offset": 0,
                        "slot": "0",
                        "type": "t_string_storage"
                    },
                    {
                        "astId": 3960,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "definition",
                        "offset": 0,
                        "slot": "1",
                        "type": "t_address"
                    },
                    {
                        "astId": 3962,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "stateEncoding",
                        "offset": 0,
                        "slot": "2",
                        "type": "t_string_storage"
                    },
                    {
                        "astId": 3964,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "resolverEncoding",
                        "offset": 0,
                        "slot": "3",
                        "type": "t_string_storage"
                    },
                    {
                        "astId": 3966,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "encodedCancel",
                        "offset": 0,
                        "slot": "4",
                        "type": "t_bytes_storage"
                    }
                ],
                "numberOfBytes": "160"
            },
            "t_struct(TransferDefinitionWithIndex)4416_storage": {
                "encoding": "inplace",
                "label": "struct LibIterableMapping.TransferDefinitionWithIndex",
                "members": [
                    {
                        "astId": 4413,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "transfer",
                        "offset": 0,
                        "slot": "0",
                        "type": "t_struct(RegisteredTransfer)3967_storage"
                    },
                    {
                        "astId": 4415,
                        "contract": "src.sol/TransferRegistry.sol:TransferRegistry",
                        "label": "index",
                        "offset": 0,
                        "slot": "5",
                        "type": "t_uint256"
                    }
                ],
                "numberOfBytes": "192"
            },
            "t_uint256": {
                "encoding": "inplace",
                "label": "uint256",
                "numberOfBytes": "32"
            }
        }
    }
}
