{
  "fileName": "IERC1820Registry.sol",
  "contractName": "IERC1820Registry",
  "source": "pragma solidity ^0.6.0;\n\n/**\n * @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 *\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 *\n * {IERC165} interfaces can also be queried via the registry.\n *\n * For an in-depth explanation and source code analysis, see the EIP text.\n */\ninterface IERC1820Registry {\n    /**\n     * @dev Sets `newManager` as the manager for `account`. A manager of an\n     * account is able to set interface implementers for it.\n     *\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     *\n     * Emits a {ManagerChanged} event.\n     *\n     * Requirements:\n     *\n     * - the caller must be the current manager for `account`.\n     */\n    function setManager(address account, address newManager) external;\n\n    /**\n     * @dev Returns the manager for `account`.\n     *\n     * See {setManager}.\n     */\n    function getManager(address account) external view returns (address);\n\n    /**\n     * @dev Sets the `implementer` contract as ``account``'s implementer for\n     * `interfaceHash`.\n     *\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     *\n     * See {interfaceHash} to learn how these are created.\n     *\n     * Emits an {InterfaceImplementerSet} event.\n     *\n     * Requirements:\n     *\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}.\n     */\n    function setInterfaceImplementer(address account, bytes32 interfaceHash, address implementer) external;\n\n    /**\n     * @dev Returns the implementer of `interfaceHash` for `account`. If no such\n     * implementer is registered, returns the zero address.\n     *\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     *\n     * `account` being the zero address is an alias for the caller's address.\n     */\n    function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address);\n\n    /**\n     * @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].\n     */\n    function interfaceHash(string calldata interfaceName) external pure returns (bytes32);\n\n    /**\n     *  @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.\n     */\n    function updateERC165Cache(address account, bytes4 interfaceId) external;\n\n    /**\n     *  @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.\n     */\n    function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);\n\n    /**\n     *  @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.\n     */\n    function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);\n\n    event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);\n\n    event ManagerChanged(address indexed account, address indexed newManager);\n}\n",
  "sourcePath": "contracts/introspection/IERC1820Registry.sol",
  "sourceMap": "",
  "deployedSourceMap": "",
  "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"
    }
  ],
  "ast": {
    "absolutePath": "contracts/introspection/IERC1820Registry.sol",
    "exportedSymbols": {
      "IERC1820Registry": [
        2883
      ]
    },
    "id": 2884,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2795,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:17"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "documentation": {
          "id": 2796,
          "nodeType": "StructuredDocumentation",
          "src": "25:619:17",
          "text": "@dev Interface of the global ERC1820 Registry, as defined in the\nhttps://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register\nimplementers for interfaces in this registry, as well as query support.\n * Implementers may be shared by multiple accounts, and can also implement more\nthan a single interface for each account. Contracts can implement interfaces\nfor themselves, but externally-owned accounts (EOA) must delegate this to a\ncontract.\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": 2883,
        "linearizedBaseContracts": [
          2883
        ],
        "name": "IERC1820Registry",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": null,
            "documentation": {
              "id": 2797,
              "nodeType": "StructuredDocumentation",
              "src": "678:445:17",
              "text": "@dev Sets `newManager` as the manager for `account`. A manager of an\naccount 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": 2804,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setManager",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2799,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2804,
                  "src": "1148:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2798,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1148:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2801,
                  "mutability": "mutable",
                  "name": "newManager",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2804,
                  "src": "1165:18:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2800,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1165:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1147:37:17"
            },
            "returnParameters": {
              "id": 2803,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1193:0:17"
            },
            "scope": 2883,
            "src": "1128:66:17",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2805,
              "nodeType": "StructuredDocumentation",
              "src": "1200:90:17",
              "text": "@dev Returns the manager for `account`.\n     * See {setManager}."
            },
            "functionSelector": "3d584063",
            "id": 2812,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getManager",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2808,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2807,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2812,
                  "src": "1315:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2806,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1315:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1314:17:17"
            },
            "returnParameters": {
              "id": 2811,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2810,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2812,
                  "src": "1355:7:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2809,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1355:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1354:9:17"
            },
            "scope": 2883,
            "src": "1295:69:17",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2813,
              "nodeType": "StructuredDocumentation",
              "src": "1370:815:17",
              "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.\nThe 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\nend in 28 zeroes).\n- `implementer` must implement {IERC1820Implementer} and return true when\nqueried for support, unless `implementer` is the caller. See\n{IERC1820Implementer-canImplementInterfaceForAddress}."
            },
            "functionSelector": "29965a1d",
            "id": 2822,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setInterfaceImplementer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2820,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2815,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2822,
                  "src": "2223:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2814,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2223:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2817,
                  "mutability": "mutable",
                  "name": "interfaceHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2822,
                  "src": "2240:21:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2816,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2240:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2819,
                  "mutability": "mutable",
                  "name": "implementer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2822,
                  "src": "2263:19:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2818,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2263:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2222:61:17"
            },
            "returnParameters": {
              "id": 2821,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2292:0:17"
            },
            "scope": 2883,
            "src": "2190:103:17",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2823,
              "nodeType": "StructuredDocumentation",
              "src": "2299:382:17",
              "text": "@dev Returns the implementer of `interfaceHash` for `account`. If no such\nimplementer is registered, returns the zero address.\n     * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28\nzeroes), `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": 2832,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getInterfaceImplementer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2825,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2832,
                  "src": "2719:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2824,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2719:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2827,
                  "mutability": "mutable",
                  "name": "interfaceHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2832,
                  "src": "2736:21:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2826,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2736:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2718:40:17"
            },
            "returnParameters": {
              "id": 2831,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2830,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2832,
                  "src": "2782:7:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2829,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2782:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2781:9:17"
            },
            "scope": 2883,
            "src": "2686:105:17",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2833,
              "nodeType": "StructuredDocumentation",
              "src": "2797:196:17",
              "text": "@dev Returns the interface hash for an `interfaceName`, as defined in the\ncorresponding\nhttps://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]."
            },
            "functionSelector": "65ba36c1",
            "id": 2840,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "interfaceHash",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2836,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2835,
                  "mutability": "mutable",
                  "name": "interfaceName",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2840,
                  "src": "3021:29:17",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2834,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3021:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3020:31:17"
            },
            "returnParameters": {
              "id": 2839,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2838,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2840,
                  "src": "3075:7:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2837,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3075:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3074:9:17"
            },
            "scope": 2883,
            "src": "2998:86:17",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2841,
              "nodeType": "StructuredDocumentation",
              "src": "3090:263:17",
              "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": 2848,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "updateERC165Cache",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2843,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2848,
                  "src": "3385:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3385:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2845,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2848,
                  "src": "3402:18:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 2844,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "3402:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3384:37:17"
            },
            "returnParameters": {
              "id": 2847,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3430:0:17"
            },
            "scope": 2883,
            "src": "3358:73:17",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2849,
              "nodeType": "StructuredDocumentation",
              "src": "3437:543:17",
              "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": 2858,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "implementsERC165Interface",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2854,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2851,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2858,
                  "src": "4020:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2850,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4020:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2853,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2858,
                  "src": "4037:18:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 2852,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "4037:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4019:37:17"
            },
            "returnParameters": {
              "id": 2857,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2856,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2858,
                  "src": "4080:4:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2855,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4080:4:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4079:6:17"
            },
            "scope": 2883,
            "src": "3985:101:17",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": null,
            "documentation": {
              "id": 2859,
              "nodeType": "StructuredDocumentation",
              "src": "4092:317:17",
              "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": 2868,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "implementsERC165InterfaceNoCache",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 2864,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2861,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2868,
                  "src": "4456:15:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2860,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4456:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2863,
                  "mutability": "mutable",
                  "name": "interfaceId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2868,
                  "src": "4473:18:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 2862,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "4473:6:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4455:37:17"
            },
            "returnParameters": {
              "id": 2867,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2866,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2868,
                  "src": "4516:4:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2865,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4516:4:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4515:6:17"
            },
            "scope": 2883,
            "src": "4414:108:17",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2876,
            "name": "InterfaceImplementerSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2870,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2876,
                  "src": "4558:23:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2869,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4558:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2872,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "interfaceHash",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2876,
                  "src": "4583:29:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2871,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4583:7:17",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2874,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "implementer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2876,
                  "src": "4614:27:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4614:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4557:85:17"
            },
            "src": "4528:115:17"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 2882,
            "name": "ManagerChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 2881,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2878,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "account",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2882,
                  "src": "4670:23:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2877,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4670:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2880,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newManager",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 2882,
                  "src": "4695:26:17",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2879,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4695:7:17",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4669:53:17"
            },
            "src": "4649:74:17"
          }
        ],
        "scope": 2884,
        "src": "645:4080:17"
      }
    ],
    "src": "0:4726:17"
  },
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "compiler": {
    "name": "solc",
    "version": "0.6.7+commit.b8d736ae.Emscripten.clang",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
