{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "TargetSet",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b506040516101ce3803806101ce83398181016040528101906100329190610106565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250507f3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a196816040516100959190610142565b60405180910390a15061015d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100d3826100a8565b9050919050565b6100e3816100c8565b81146100ee57600080fd5b50565b600081519050610100816100da565b92915050565b60006020828403121561011c5761011b6100a3565b5b600061012a848285016100f1565b91505092915050565b61013c816100c8565b82525050565b60006020820190506101576000830184610133565b92915050565b608051605961017560003960006008015260596000f3fe608060405260007f00000000000000000000000000000000000000000000000000000000000000009050366000803760008036600034855af13d6000803e80156047573d6000f35b3d6000fdfea164736f6c6343000813000a",
    "sourceMap": "180:783:0:-:0;;;276:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;325:6;314:17;;;;;;;;;;346;356:6;346:17;;;;;;:::i;:::-;;;;;;;;276:94;180:783;;88:117:2;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:351::-;915:6;964:2;952:9;943:7;939:23;935:32;932:119;;;970:79;;:::i;:::-;932:119;1090:1;1115:64;1171:7;1162:6;1151:9;1147:22;1115:64;:::i;:::-;1105:74;;1061:128;845:351;;;;:::o;1202:118::-;1289:24;1307:5;1289:24;:::i;:::-;1284:3;1277:37;1202:118;;:::o;1326:222::-;1419:4;1457:2;1446:9;1442:18;1434:26;;1470:71;1538:1;1527:9;1523:17;1514:6;1470:71;:::i;:::-;1326:222;;;;:::o;180:783:0:-;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405260007f00000000000000000000000000000000000000000000000000000000000000009050366000803760008036600034855af13d6000803e80156047573d6000f35b3d6000fdfea164736f6c6343000813000a",
    "sourceMap": "180:783:0:-:0;;;414:14;431:8;414:25;;699:14;696:1;693;680:34;797:1;794;778:14;775:1;762:11;754:6;747:5;742:57;833:16;830:1;827;812:38;866:7;863:42;;;886:16;883:1;876:27;863:42;928:16;925:1;918:27",
    "linkReferences": {},
    "immutableReferences": {
      "8": [
        {
          "start": 8,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {},
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"TargetSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"a contract which acts as a forwarder that forwards the input from any caller to a a target contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v0.8/mcm/CallProxy/CallProxy.sol\":\"CallProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=foundry-lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=foundry-lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"src/v0.8/mcm/CallProxy/CallProxy.sol\":{\"keccak256\":\"0x32de27b8817e5b97460e6a08a24f034062cb6d6934475e8b1f577dcfb0326be9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://f7f646843ec89211cf8dfe8ba93f67f96ec55fa34c712b8641954d3e0f52d464\",\"dweb:/ipfs/Qme9XU21LpXsbqnwQUhzUMcrmyFCe6gE8AgLovDLVtKfsh\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.19+commit.7dd6d404"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "TargetSet",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "fallback"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@eth-optimism/=node_modules/@eth-optimism/",
        ":@openzeppelin/=node_modules/@openzeppelin/",
        ":ds-test/=foundry-lib/forge-std/lib/ds-test/src/",
        ":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/",
        ":forge-std/=foundry-lib/forge-std/src/",
        ":hardhat/=node_modules/hardhat/",
        ":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/"
      ],
      "optimizer": {
        "enabled": false,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "none"
      },
      "compilationTarget": {
        "src/v0.8/mcm/CallProxy/CallProxy.sol": "CallProxy"
      },
      "libraries": {}
    },
    "sources": {
      "src/v0.8/mcm/CallProxy/CallProxy.sol": {
        "keccak256": "0x32de27b8817e5b97460e6a08a24f034062cb6d6934475e8b1f577dcfb0326be9",
        "urls": [
          "bzz-raw://f7f646843ec89211cf8dfe8ba93f67f96ec55fa34c712b8641954d3e0f52d464",
          "dweb:/ipfs/Qme9XU21LpXsbqnwQUhzUMcrmyFCe6gE8AgLovDLVtKfsh"
        ],
        "license": "BUSL-1.1"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/v0.8/mcm/CallProxy/CallProxy.sol",
    "id": 33,
    "exportedSymbols": {
      "CallProxy": [
        32
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:927:0",
    "nodes": [
      {
        "id": 1,
        "nodeType": "PragmaDirective",
        "src": "37:24:0",
        "nodes": [],
        "literals": [
          "solidity",
          "=",
          "0.8",
          ".19"
        ]
      },
      {
        "id": 32,
        "nodeType": "ContractDefinition",
        "src": "180:783:0",
        "nodes": [
          {
            "id": 6,
            "nodeType": "EventDefinition",
            "src": "205:32:0",
            "nodes": [],
            "anonymous": false,
            "eventSelector": "3bfb4bbf112628248058745a3c57e35b13369386e474b8e56c552f3063a4a196",
            "name": "TargetSet",
            "nameLocation": "211:9:0",
            "parameters": {
              "id": 5,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 4,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "target",
                  "nameLocation": "229:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 6,
                  "src": "221:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "221:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "220:16:0"
            }
          },
          {
            "id": 8,
            "nodeType": "VariableDeclaration",
            "src": "243:26:0",
            "nodes": [],
            "constant": false,
            "mutability": "immutable",
            "name": "i_target",
            "nameLocation": "261:8:0",
            "scope": 32,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 7,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "243:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 22,
            "nodeType": "FunctionDefinition",
            "src": "276:94:0",
            "nodes": [],
            "body": {
              "id": 21,
              "nodeType": "Block",
              "src": "304:66:0",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 15,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 13,
                      "name": "i_target",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8,
                      "src": "314:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 14,
                      "name": "target",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10,
                      "src": "325:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "314:17:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 16,
                  "nodeType": "ExpressionStatement",
                  "src": "314:17:0"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 18,
                        "name": "target",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "356:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 17,
                      "name": "TargetSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6,
                      "src": "346:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 19,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "346:17:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20,
                  "nodeType": "EmitStatement",
                  "src": "341:22:0"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 11,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 10,
                  "mutability": "mutable",
                  "name": "target",
                  "nameLocation": "296:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 22,
                  "src": "288:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "288:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "287:16:0"
            },
            "returnParameters": {
              "id": 12,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "304:0:0"
            },
            "scope": 32,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31,
            "nodeType": "FunctionDefinition",
            "src": "376:585:0",
            "nodes": [],
            "body": {
              "id": 30,
              "nodeType": "Block",
              "src": "404:557:0",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    26
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 26,
                      "mutability": "mutable",
                      "name": "target",
                      "nameLocation": "422:6:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 30,
                      "src": "414:14:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 25,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "414:7:0",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 28,
                  "initialValue": {
                    "id": 27,
                    "name": "i_target",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 8,
                    "src": "431:8:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "414:25:0"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "458:497:0",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "693:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "696:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nodeType": "YulIdentifier",
                                "src": "699:12:0"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "699:14:0"
                            }
                          ],
                          "functionName": {
                            "name": "calldatacopy",
                            "nodeType": "YulIdentifier",
                            "src": "680:12:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "680:34:0"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "680:34:0"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "727:72:0",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "gas",
                                "nodeType": "YulIdentifier",
                                "src": "747:3:0"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "747:5:0"
                            },
                            {
                              "name": "target",
                              "nodeType": "YulIdentifier",
                              "src": "754:6:0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "callvalue",
                                "nodeType": "YulIdentifier",
                                "src": "762:9:0"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "762:11:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "775:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "calldatasize",
                                "nodeType": "YulIdentifier",
                                "src": "778:12:0"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "778:14:0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "794:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "797:1:0",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "call",
                            "nodeType": "YulIdentifier",
                            "src": "742:4:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "742:57:0"
                        },
                        "variables": [
                          {
                            "name": "success",
                            "nodeType": "YulTypedName",
                            "src": "731:7:0",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "827:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "830:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "returndatasize",
                                "nodeType": "YulIdentifier",
                                "src": "833:14:0"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "833:16:0"
                            }
                          ],
                          "functionName": {
                            "name": "returndatacopy",
                            "nodeType": "YulIdentifier",
                            "src": "812:14:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "812:38:0"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "812:38:0"
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "874:31:0",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "883:1:0",
                                    "type": "",
                                    "value": "0"
                                  },
                                  {
                                    "arguments": [],
                                    "functionName": {
                                      "name": "returndatasize",
                                      "nodeType": "YulIdentifier",
                                      "src": "886:14:0"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "886:16:0"
                                  }
                                ],
                                "functionName": {
                                  "name": "return",
                                  "nodeType": "YulIdentifier",
                                  "src": "876:6:0"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "876:27:0"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "876:27:0"
                            }
                          ]
                        },
                        "condition": {
                          "name": "success",
                          "nodeType": "YulIdentifier",
                          "src": "866:7:0"
                        },
                        "nodeType": "YulIf",
                        "src": "863:42:0"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "925:1:0",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [],
                              "functionName": {
                                "name": "returndatasize",
                                "nodeType": "YulIdentifier",
                                "src": "928:14:0"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "928:16:0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "918:6:0"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "918:27:0"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "918:27:0"
                      }
                    ]
                  },
                  "evmVersion": "london",
                  "externalReferences": [
                    {
                      "declaration": 26,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "754:6:0",
                      "valueSize": 1
                    }
                  ],
                  "id": 29,
                  "nodeType": "InlineAssembly",
                  "src": "449:506:0"
                }
              ]
            },
            "implemented": true,
            "kind": "fallback",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 23,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "384:2:0"
            },
            "returnParameters": {
              "id": 24,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "404:0:0"
            },
            "scope": 32,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "CallProxy",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2,
          "nodeType": "StructuredDocumentation",
          "src": "63:117:0",
          "text": "@notice a contract which acts as a forwarder that forwards the input from\n any caller to a a target contract."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          32
        ],
        "name": "CallProxy",
        "nameLocation": "189:9:0",
        "scope": 33,
        "usedErrors": []
      }
    ],
    "license": "BUSL-1.1"
  },
  "id": 0
}