{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "interfaceHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementer",
          "type": "address"
        }
      ],
      "name": "InterfaceImplementerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newManager",
          "type": "address"
        }
      ],
      "name": "ManagerChanged",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_interfaceHash",
          "type": "bytes32"
        }
      ],
      "name": "getInterfaceImplementer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "implementsERC165Interface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "implementsERC165InterfaceNoCache",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "interfaceName",
          "type": "string"
        }
      ],
      "name": "interfaceHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_interfaceHash",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "implementer",
          "type": "address"
        }
      ],
      "name": "setInterfaceImplementer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "newManager",
          "type": "address"
        }
      ],
      "name": "setManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "updateERC165Cache",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x",
    "sourceMap": "",
    "linkReferences": {}
  },
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "implementsERC165Interface(address,bytes4)": {
        "notice": "Checks whether a contract implements an ERC165 interface or not. If the result is not cached a direct lookup on the contract address is performed. If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling {updateERC165Cache} with the contract address."
      },
      "implementsERC165InterfaceNoCache(address,bytes4)": {
        "notice": "Checks whether a contract implements an ERC165 interface or not without using nor updating the cache."
      },
      "updateERC165Cache(address,bytes4)": {
        "notice": "Updates the cache with whether the contract implements an ERC165 interface or not."
      }
    }
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "details": "Interface of the global ERC1820 Registry, as defined in the https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register implementers for interfaces in this registry, as well as query support. Implementers may be shared by multiple accounts, and can also implement more than a single interface for each account. Contracts can implement interfaces for themselves, but externally-owned accounts (EOA) must delegate this to a contract. {IERC165} interfaces can also be queried via the registry. For an in-depth explanation and source code analysis, see the EIP text.",
    "methods": {
      "getInterfaceImplementer(address,bytes32)": {
        "details": "Returns the implementer of `interfaceHash` for `account`. If no such implementer is registered, returns the zero address. If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28 zeroes), `account` will be queried for support of it. `account` being the zero address is an alias for the caller's address."
      },
      "getManager(address)": {
        "details": "Returns the manager for `account`. See {setManager}."
      },
      "implementsERC165Interface(address,bytes4)": {
        "params": {
          "account": "Address of the contract to check.",
          "interfaceId": "ERC165 interface to check."
        }
      },
      "implementsERC165InterfaceNoCache(address,bytes4)": {
        "params": {
          "account": "Address of the contract to check.",
          "interfaceId": "ERC165 interface to check."
        }
      },
      "interfaceHash(string)": {
        "details": "Returns the interface hash for an `interfaceName`, as defined in the corresponding https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]."
      },
      "setInterfaceImplementer(address,bytes32,address)": {
        "details": "Sets the `implementer` contract as ``account``'s implementer for `interfaceHash`. `account` being the zero address is an alias for the caller's address. The zero address can also be used in `implementer` to remove an old one. See {interfaceHash} to learn how these are created. Emits an {InterfaceImplementerSet} event. Requirements: - the caller must be the current manager for `account`. - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not end in 28 zeroes). - `implementer` must implement {IERC1820Implementer} and return true when queried for support, unless `implementer` is the caller. See {IERC1820Implementer-canImplementInterfaceForAddress}."
      },
      "setManager(address,address)": {
        "details": "Sets `newManager` as the manager for `account`. A manager of an account is able to set interface implementers for it. By default, each account is its own manager. Passing a value of `0x0` in `newManager` will reset the manager to this initial state. Emits a {ManagerChanged} event. Requirements: - the caller must be the current manager for `account`."
      },
      "updateERC165Cache(address,bytes4)": {
        "params": {
          "account": "Address of the contract for which to update the cache.",
          "interfaceId": "ERC165 interface for which to update the cache."
        }
      }
    }
  },
  "ast": {
    "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/utils/introspection/IERC1820Registry.sol",
    "exportedSymbols": {
      "IERC1820Registry": [
        2494
      ]
    },
    "id": 2495,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2406,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "109:23:10"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IERC1820Registry",
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 2407,
          "nodeType": "StructuredDocumentation",
          "src": "134:619:10",
          "text": " @dev Interface of the global ERC1820 Registry, as defined in the\n https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register\n implementers for interfaces in this registry, as well as query support.\n Implementers may be shared by multiple accounts, and can also implement more\n than a single interface for each account. Contracts can implement interfaces\n for themselves, but externally-owned accounts (EOA) must delegate this to a\n contract.\n {IERC165} interfaces can also be queried via the registry.\n For an in-depth explanation and source code analysis, see the EIP text."
        },
        "fullyImplemented": false,
        "id": 2494,
        "linearizedBaseContracts": [
          2494
        ],
        "name": "IERC1820Registry",
        "nameLocation": "764:16:10",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "eventSelector": "93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db153",
            "id": 2415,
            "name": "InterfaceImplementerSet",
            "nameLocation": "793:23:10",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2414,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2409,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "833:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2415,
                  "src": "817:23:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2408,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "817:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2411,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "interfaceHash",
                  "nameLocation": "858:13:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2415,
                  "src": "842:29:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2410,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "842:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2413,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "implementer",
                  "nameLocation": "889:11:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2415,
                  "src": "873:27:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2412,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "873:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "816:85:10"
            },
            "src": "787:115:10"
          },
          {
            "anonymous": false,
            "eventSelector": "605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a4350",
            "id": 2421,
            "name": "ManagerChanged",
            "nameLocation": "914:14:10",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2420,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2417,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "945:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2421,
                  "src": "929:23:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2416,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "929:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2419,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newManager",
                  "nameLocation": "970:10:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2421,
                  "src": "954:26:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2418,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "954:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "928:53:10"
            },
            "src": "908:74:10"
          },
          {
            "documentation": {
              "id": 2422,
              "nodeType": "StructuredDocumentation",
              "src": "988:445:10",
              "text": " @dev Sets `newManager` as the manager for `account`. A manager of an\n account is able to set interface implementers for it.\n By default, each account is its own manager. Passing a value of `0x0` in\n `newManager` will reset the manager to this initial state.\n Emits a {ManagerChanged} event.\n Requirements:\n - the caller must be the current manager for `account`."
            },
            "functionSelector": "5df8122f",
            "id": 2429,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setManager",
            "nameLocation": "1447:10:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2427,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2424,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "1466:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "1458:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2423,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1458:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2426,
                  "mutability": "mutable",
                  "name": "newManager",
                  "nameLocation": "1483:10:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2429,
                  "src": "1475:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2425,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1475:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1457:37:10"
            },
            "returnParameters": {
              "id": 2428,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1503:0:10"
            },
            "scope": 2494,
            "src": "1438:66:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2430,
              "nodeType": "StructuredDocumentation",
              "src": "1510:90:10",
              "text": " @dev Returns the manager for `account`.\n See {setManager}."
            },
            "functionSelector": "3d584063",
            "id": 2437,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getManager",
            "nameLocation": "1614:10:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2433,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2432,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "1633:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2437,
                  "src": "1625:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2431,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1625:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1624:17:10"
            },
            "returnParameters": {
              "id": 2436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2435,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2437,
                  "src": "1665:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2434,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1665:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1664:9:10"
            },
            "scope": 2494,
            "src": "1605:69:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2438,
              "nodeType": "StructuredDocumentation",
              "src": "1680:815:10",
              "text": " @dev Sets the `implementer` contract as ``account``'s implementer for\n `interfaceHash`.\n `account` being the zero address is an alias for the caller's address.\n The zero address can also be used in `implementer` to remove an old one.\n See {interfaceHash} to learn how these are created.\n Emits an {InterfaceImplementerSet} event.\n Requirements:\n - the caller must be the current manager for `account`.\n - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not\n end in 28 zeroes).\n - `implementer` must implement {IERC1820Implementer} and return true when\n queried for support, unless `implementer` is the caller. See\n {IERC1820Implementer-canImplementInterfaceForAddress}."
            },
            "functionSelector": "29965a1d",
            "id": 2447,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setInterfaceImplementer",
            "nameLocation": "2509:23:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2445,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2440,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "2550:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "2542:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2439,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2542:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2442,
                  "mutability": "mutable",
                  "name": "_interfaceHash",
                  "nameLocation": "2575:14:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "2567:22:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2441,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2567:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2444,
                  "mutability": "mutable",
                  "name": "implementer",
                  "nameLocation": "2607:11:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2447,
                  "src": "2599:19:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2443,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2599:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2532:92:10"
            },
            "returnParameters": {
              "id": 2446,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2633:0:10"
            },
            "scope": 2494,
            "src": "2500:134:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2448,
              "nodeType": "StructuredDocumentation",
              "src": "2640:382:10",
              "text": " @dev Returns the implementer of `interfaceHash` for `account`. If no such\n implementer is registered, returns the zero address.\n If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28\n zeroes), `account` will be queried for support of it.\n `account` being the zero address is an alias for the caller's address."
            },
            "functionSelector": "aabbb8ca",
            "id": 2457,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getInterfaceImplementer",
            "nameLocation": "3036:23:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2453,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2450,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "3068:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2457,
                  "src": "3060:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2449,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3060:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2452,
                  "mutability": "mutable",
                  "name": "_interfaceHash",
                  "nameLocation": "3085:14:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2457,
                  "src": "3077:22:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2451,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3077:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3059:41:10"
            },
            "returnParameters": {
              "id": 2456,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2455,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2457,
                  "src": "3124:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3124:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3123:9:10"
            },
            "scope": 2494,
            "src": "3027:106:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2458,
              "nodeType": "StructuredDocumentation",
              "src": "3139:196:10",
              "text": " @dev Returns the interface hash for an `interfaceName`, as defined in the\n corresponding\n https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]."
            },
            "functionSelector": "65ba36c1",
            "id": 2465,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "interfaceHash",
            "nameLocation": "3349:13:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2461,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2460,
                  "mutability": "mutable",
                  "name": "interfaceName",
                  "nameLocation": "3379:13:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2465,
                  "src": "3363:29:10",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2459,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3363:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3362:31:10"
            },
            "returnParameters": {
              "id": 2464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2463,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2465,
                  "src": "3417:7:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2462,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3417:7:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3416:9:10"
            },
            "scope": 2494,
            "src": "3340:86:10",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2466,
              "nodeType": "StructuredDocumentation",
              "src": "3432:260:10",
              "text": " @notice Updates the cache with whether the contract implements an ERC165 interface or not.\n @param account Address of the contract for which to update the cache.\n @param interfaceId ERC165 interface for which to update the cache."
            },
            "functionSelector": "a41e7d51",
            "id": 2473,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "updateERC165Cache",
            "nameLocation": "3706:17:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2471,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2468,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "3732:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2473,
                  "src": "3724:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2467,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3724:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2470,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nameLocation": "3748:11:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2473,
                  "src": "3741:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 2469,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "3741:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3723:37:10"
            },
            "returnParameters": {
              "id": 2472,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3769:0:10"
            },
            "scope": 2494,
            "src": "3697:73:10",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2474,
              "nodeType": "StructuredDocumentation",
              "src": "3776:536:10",
              "text": " @notice Checks whether a contract implements an ERC165 interface or not.\n If the result is not cached a direct lookup on the contract address is performed.\n If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling\n {updateERC165Cache} with the contract address.\n @param account Address of the contract to check.\n @param interfaceId ERC165 interface to check.\n @return True if `account` implements `interfaceId`, false otherwise."
            },
            "functionSelector": "f712f3e8",
            "id": 2483,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "implementsERC165Interface",
            "nameLocation": "4326:25:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2479,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2476,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "4360:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2483,
                  "src": "4352:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2475,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4352:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2478,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nameLocation": "4376:11:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2483,
                  "src": "4369:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 2477,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "4369:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4351:37:10"
            },
            "returnParameters": {
              "id": 2482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2481,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2483,
                  "src": "4412:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2480,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4412:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4411:6:10"
            },
            "scope": 2494,
            "src": "4317:101:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "documentation": {
              "id": 2484,
              "nodeType": "StructuredDocumentation",
              "src": "4424:313:10",
              "text": " @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache.\n @param account Address of the contract to check.\n @param interfaceId ERC165 interface to check.\n @return True if `account` implements `interfaceId`, false otherwise."
            },
            "functionSelector": "b7056765",
            "id": 2493,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "implementsERC165InterfaceNoCache",
            "nameLocation": "4751:32:10",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2489,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2486,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "4792:7:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2493,
                  "src": "4784:15:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2485,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4784:7:10",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2488,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nameLocation": "4808:11:10",
                  "nodeType": "VariableDeclaration",
                  "scope": 2493,
                  "src": "4801:18:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 2487,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "4801:6:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4783:37:10"
            },
            "returnParameters": {
              "id": 2492,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2491,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 2493,
                  "src": "4844:4:10",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2490,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4844:4:10",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4843:6:10"
            },
            "scope": 2494,
            "src": "4742:108:10",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 2495,
        "src": "754:4098:10",
        "usedErrors": []
      }
    ],
    "src": "109:4744:10"
  }
}