{"abi":[{"type":"error","name":"Create2EmptyBytecode","inputs":[]},{"type":"error","name":"Create2FailedDeployment","inputs":[]},{"type":"error","name":"Create2InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea264697066735822122081b8fb766652468a5321a9d5cb02900c0200ae7575a92242b51fe67b0f82267764736f6c63430008180033","sourceMap":"495:3877:39:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea264697066735822122081b8fb766652468a5321a9d5cb02900c0200ae7575a92242b51fe67b0f82267764736f6c63430008180033","sourceMap":"495:3877:39:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Create2EmptyBytecode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Create2FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"Create2InsufficientBalance\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Helper to make usage of the `CREATE2` EVM opcode easier and safer. `CREATE2` can be used to compute in advance the address where a smart contract will be deployed, which allows for interesting new mechanisms known as 'counterfactual interactions'. See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more information.\",\"errors\":{\"Create2EmptyBytecode()\":[{\"details\":\"There's no code to deploy.\"}],\"Create2FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"Create2InsufficientBalance(uint256,uint256)\":[{\"details\":\"Not enough balance for performing a CREATE2 deploy.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Create2.sol\":\"Create2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"],\"viaIR\":true},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"Create2EmptyBytecode"},{"inputs":[],"type":"error","name":"Create2FailedDeployment"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"type":"error","name":"Create2InsufficientBalance"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/","ds-test/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Create2.sol":"Create2"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Create2.sol":{"keccak256":"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e","urls":["bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420","dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Create2.sol","id":37500,"exportedSymbols":{"Create2":[37499]},"nodeType":"SourceUnit","src":"101:4272:39","nodes":[{"id":37398,"nodeType":"PragmaDirective","src":"101:24:39","nodes":[],"literals":["solidity","^","0.8",".20"]},{"id":37499,"nodeType":"ContractDefinition","src":"495:3877:39","nodes":[{"id":37406,"nodeType":"ErrorDefinition","src":"597:66:39","nodes":[],"documentation":{"id":37400,"nodeType":"StructuredDocumentation","src":"517:75:39","text":" @dev Not enough balance for performing a CREATE2 deploy."},"errorSelector":"e4bbecac","name":"Create2InsufficientBalance","nameLocation":"603:26:39","parameters":{"id":37405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37402,"mutability":"mutable","name":"balance","nameLocation":"638:7:39","nodeType":"VariableDeclaration","scope":37406,"src":"630:15:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37401,"name":"uint256","nodeType":"ElementaryTypeName","src":"630:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37404,"mutability":"mutable","name":"needed","nameLocation":"655:6:39","nodeType":"VariableDeclaration","scope":37406,"src":"647:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37403,"name":"uint256","nodeType":"ElementaryTypeName","src":"647:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"629:33:39"}},{"id":37409,"nodeType":"ErrorDefinition","src":"724:29:39","nodes":[],"documentation":{"id":37407,"nodeType":"StructuredDocumentation","src":"669:50:39","text":" @dev There's no code to deploy."},"errorSelector":"4ca249dc","name":"Create2EmptyBytecode","nameLocation":"730:20:39","parameters":{"id":37408,"nodeType":"ParameterList","parameters":[],"src":"750:2:39"}},{"id":37412,"nodeType":"ErrorDefinition","src":"810:32:39","nodes":[],"documentation":{"id":37410,"nodeType":"StructuredDocumentation","src":"759:46:39","text":" @dev The deployment failed."},"errorSelector":"741752c2","name":"Create2FailedDeployment","nameLocation":"816:23:39","parameters":{"id":37411,"nodeType":"ParameterList","parameters":[],"src":"839:2:39"}},{"id":37464,"nodeType":"FunctionDefinition","src":"1413:573:39","nodes":[],"body":{"id":37463,"nodeType":"Block","src":"1514:472:39","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":37426,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1536:4:39","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$37499","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$37499","typeString":"library Create2"}],"id":37425,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1528:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37424,"name":"address","nodeType":"ElementaryTypeName","src":"1528:7:39","typeDescriptions":{}}},"id":37427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1528:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1542:7:39","memberName":"balance","nodeType":"MemberAccess","src":"1528:21:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37429,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37415,"src":"1552:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1528:30:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37441,"nodeType":"IfStatement","src":"1524:125:39","trueBody":{"id":37440,"nodeType":"Block","src":"1560:89:39","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":37434,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1616:4:39","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$37499","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$37499","typeString":"library Create2"}],"id":37433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1608:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37432,"name":"address","nodeType":"ElementaryTypeName","src":"1608:7:39","typeDescriptions":{}}},"id":37435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1608:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":37436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1622:7:39","memberName":"balance","nodeType":"MemberAccess","src":"1608:21:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37437,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37415,"src":"1631:6:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37431,"name":"Create2InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37406,"src":"1581:26:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":37438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:57:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37439,"nodeType":"RevertStatement","src":"1574:64:39"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":37442,"name":"bytecode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37419,"src":"1662:8:39","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":37443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1671:6:39","memberName":"length","nodeType":"MemberAccess","src":"1662:15:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":37444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1681:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1662:20:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37450,"nodeType":"IfStatement","src":"1658:80:39","trueBody":{"id":37449,"nodeType":"Block","src":"1684:54:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":37446,"name":"Create2EmptyBytecode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37409,"src":"1705:20:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":37447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:22:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37448,"nodeType":"RevertStatement","src":"1698:29:39"}]}},{"AST":{"nativeSrc":"1799:91:39","nodeType":"YulBlock","src":"1799:91:39","statements":[{"nativeSrc":"1813:67:39","nodeType":"YulAssignment","src":"1813:67:39","value":{"arguments":[{"name":"amount","nativeSrc":"1829:6:39","nodeType":"YulIdentifier","src":"1829:6:39"},{"arguments":[{"name":"bytecode","nativeSrc":"1841:8:39","nodeType":"YulIdentifier","src":"1841:8:39"},{"kind":"number","nativeSrc":"1851:4:39","nodeType":"YulLiteral","src":"1851:4:39","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1837:3:39","nodeType":"YulIdentifier","src":"1837:3:39"},"nativeSrc":"1837:19:39","nodeType":"YulFunctionCall","src":"1837:19:39"},{"arguments":[{"name":"bytecode","nativeSrc":"1864:8:39","nodeType":"YulIdentifier","src":"1864:8:39"}],"functionName":{"name":"mload","nativeSrc":"1858:5:39","nodeType":"YulIdentifier","src":"1858:5:39"},"nativeSrc":"1858:15:39","nodeType":"YulFunctionCall","src":"1858:15:39"},{"name":"salt","nativeSrc":"1875:4:39","nodeType":"YulIdentifier","src":"1875:4:39"}],"functionName":{"name":"create2","nativeSrc":"1821:7:39","nodeType":"YulIdentifier","src":"1821:7:39"},"nativeSrc":"1821:59:39","nodeType":"YulFunctionCall","src":"1821:59:39"},"variableNames":[{"name":"addr","nativeSrc":"1813:4:39","nodeType":"YulIdentifier","src":"1813:4:39"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":37422,"isOffset":false,"isSlot":false,"src":"1813:4:39","valueSize":1},{"declaration":37415,"isOffset":false,"isSlot":false,"src":"1829:6:39","valueSize":1},{"declaration":37419,"isOffset":false,"isSlot":false,"src":"1841:8:39","valueSize":1},{"declaration":37419,"isOffset":false,"isSlot":false,"src":"1864:8:39","valueSize":1},{"declaration":37417,"isOffset":false,"isSlot":false,"src":"1875:4:39","valueSize":1}],"id":37451,"nodeType":"InlineAssembly","src":"1790:100:39"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":37457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37452,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37422,"src":"1903:4:39","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":37455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1919:1:39","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":37454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1911:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37453,"name":"address","nodeType":"ElementaryTypeName","src":"1911:7:39","typeDescriptions":{}}},"id":37456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1911:10:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1903:18:39","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37462,"nodeType":"IfStatement","src":"1899:81:39","trueBody":{"id":37461,"nodeType":"Block","src":"1923:57:39","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":37458,"name":"Create2FailedDeployment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37412,"src":"1944:23:39","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$__$","typeString":"function () pure"}},"id":37459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1944:25:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37460,"nodeType":"RevertStatement","src":"1937:32:39"}]}}]},"documentation":{"id":37413,"nodeType":"StructuredDocumentation","src":"848:560:39","text":" @dev Deploys a contract using `CREATE2`. The address where the contract\n will be deployed can be known in advance via {computeAddress}.\n The bytecode for a contract can be obtained from Solidity with\n `type(contractName).creationCode`.\n Requirements:\n - `bytecode` must not be empty.\n - `salt` must have not been used for `bytecode` already.\n - the factory must have a balance of at least `amount`.\n - if `amount` is non-zero, `bytecode` must have a `payable` constructor."},"implemented":true,"kind":"function","modifiers":[],"name":"deploy","nameLocation":"1422:6:39","parameters":{"id":37420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37415,"mutability":"mutable","name":"amount","nameLocation":"1437:6:39","nodeType":"VariableDeclaration","scope":37464,"src":"1429:14:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37414,"name":"uint256","nodeType":"ElementaryTypeName","src":"1429:7:39","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37417,"mutability":"mutable","name":"salt","nameLocation":"1453:4:39","nodeType":"VariableDeclaration","scope":37464,"src":"1445:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":37416,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1445:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":37419,"mutability":"mutable","name":"bytecode","nameLocation":"1472:8:39","nodeType":"VariableDeclaration","scope":37464,"src":"1459:21:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":37418,"name":"bytes","nodeType":"ElementaryTypeName","src":"1459:5:39","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1428:53:39"},"returnParameters":{"id":37423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37422,"mutability":"mutable","name":"addr","nameLocation":"1508:4:39","nodeType":"VariableDeclaration","scope":37464,"src":"1500:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37421,"name":"address","nodeType":"ElementaryTypeName","src":"1500:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1499:14:39"},"scope":37499,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":37484,"nodeType":"FunctionDefinition","src":"2190:165:39","nodes":[],"body":{"id":37483,"nodeType":"Block","src":"2282:73:39","nodes":[],"statements":[{"expression":{"arguments":[{"id":37475,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37467,"src":"2314:4:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":37476,"name":"bytecodeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37469,"src":"2320:12:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":37479,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2342:4:39","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$37499","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$37499","typeString":"library Create2"}],"id":37478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2334:7:39","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37477,"name":"address","nodeType":"ElementaryTypeName","src":"2334:7:39","typeDescriptions":{}}},"id":37480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2334:13:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":37474,"name":"computeAddress","nodeType":"Identifier","overloadedDeclarations":[37484,37498],"referencedDeclaration":37498,"src":"2299:14:39","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":37481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2299:49:39","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":37473,"id":37482,"nodeType":"Return","src":"2292:56:39"}]},"documentation":{"id":37465,"nodeType":"StructuredDocumentation","src":"1992:193:39","text":" @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n `bytecodeHash` or `salt` will result in a new destination address."},"implemented":true,"kind":"function","modifiers":[],"name":"computeAddress","nameLocation":"2199:14:39","parameters":{"id":37470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37467,"mutability":"mutable","name":"salt","nameLocation":"2222:4:39","nodeType":"VariableDeclaration","scope":37484,"src":"2214:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":37466,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2214:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":37469,"mutability":"mutable","name":"bytecodeHash","nameLocation":"2236:12:39","nodeType":"VariableDeclaration","scope":37484,"src":"2228:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":37468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2228:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2213:36:39"},"returnParameters":{"id":37473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37472,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37484,"src":"2273:7:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37471,"name":"address","nodeType":"ElementaryTypeName","src":"2273:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2272:9:39"},"scope":37499,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":37498,"nodeType":"FunctionDefinition","src":"2598:1772:39","nodes":[],"body":{"id":37497,"nodeType":"Block","src":"2713:1657:39","nodes":[],"statements":[{"AST":{"nativeSrc":"2775:1589:39","nodeType":"YulBlock","src":"2775:1589:39","statements":[{"nativeSrc":"2789:22:39","nodeType":"YulVariableDeclaration","src":"2789:22:39","value":{"arguments":[{"kind":"number","nativeSrc":"2806:4:39","nodeType":"YulLiteral","src":"2806:4:39","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"2800:5:39","nodeType":"YulIdentifier","src":"2800:5:39"},"nativeSrc":"2800:11:39","nodeType":"YulFunctionCall","src":"2800:11:39"},"variables":[{"name":"ptr","nativeSrc":"2793:3:39","nodeType":"YulTypedName","src":"2793:3:39","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"4013:3:39","nodeType":"YulIdentifier","src":"4013:3:39"},{"kind":"number","nativeSrc":"4018:4:39","nodeType":"YulLiteral","src":"4018:4:39","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"4009:3:39","nodeType":"YulIdentifier","src":"4009:3:39"},"nativeSrc":"4009:14:39","nodeType":"YulFunctionCall","src":"4009:14:39"},{"name":"bytecodeHash","nativeSrc":"4025:12:39","nodeType":"YulIdentifier","src":"4025:12:39"}],"functionName":{"name":"mstore","nativeSrc":"4002:6:39","nodeType":"YulIdentifier","src":"4002:6:39"},"nativeSrc":"4002:36:39","nodeType":"YulFunctionCall","src":"4002:36:39"},"nativeSrc":"4002:36:39","nodeType":"YulExpressionStatement","src":"4002:36:39"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"4062:3:39","nodeType":"YulIdentifier","src":"4062:3:39"},{"kind":"number","nativeSrc":"4067:4:39","nodeType":"YulLiteral","src":"4067:4:39","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4058:3:39","nodeType":"YulIdentifier","src":"4058:3:39"},"nativeSrc":"4058:14:39","nodeType":"YulFunctionCall","src":"4058:14:39"},{"name":"salt","nativeSrc":"4074:4:39","nodeType":"YulIdentifier","src":"4074:4:39"}],"functionName":{"name":"mstore","nativeSrc":"4051:6:39","nodeType":"YulIdentifier","src":"4051:6:39"},"nativeSrc":"4051:28:39","nodeType":"YulFunctionCall","src":"4051:28:39"},"nativeSrc":"4051:28:39","nodeType":"YulExpressionStatement","src":"4051:28:39"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"4099:3:39","nodeType":"YulIdentifier","src":"4099:3:39"},{"name":"deployer","nativeSrc":"4104:8:39","nodeType":"YulIdentifier","src":"4104:8:39"}],"functionName":{"name":"mstore","nativeSrc":"4092:6:39","nodeType":"YulIdentifier","src":"4092:6:39"},"nativeSrc":"4092:21:39","nodeType":"YulFunctionCall","src":"4092:21:39"},"nativeSrc":"4092:21:39","nodeType":"YulExpressionStatement","src":"4092:21:39"},{"nativeSrc":"4175:27:39","nodeType":"YulVariableDeclaration","src":"4175:27:39","value":{"arguments":[{"name":"ptr","nativeSrc":"4192:3:39","nodeType":"YulIdentifier","src":"4192:3:39"},{"kind":"number","nativeSrc":"4197:4:39","nodeType":"YulLiteral","src":"4197:4:39","type":"","value":"0x0b"}],"functionName":{"name":"add","nativeSrc":"4188:3:39","nodeType":"YulIdentifier","src":"4188:3:39"},"nativeSrc":"4188:14:39","nodeType":"YulFunctionCall","src":"4188:14:39"},"variables":[{"name":"start","nativeSrc":"4179:5:39","nodeType":"YulTypedName","src":"4179:5:39","type":""}]},{"expression":{"arguments":[{"name":"start","nativeSrc":"4301:5:39","nodeType":"YulIdentifier","src":"4301:5:39"},{"kind":"number","nativeSrc":"4308:4:39","nodeType":"YulLiteral","src":"4308:4:39","type":"","value":"0xff"}],"functionName":{"name":"mstore8","nativeSrc":"4293:7:39","nodeType":"YulIdentifier","src":"4293:7:39"},"nativeSrc":"4293:20:39","nodeType":"YulFunctionCall","src":"4293:20:39"},"nativeSrc":"4293:20:39","nodeType":"YulExpressionStatement","src":"4293:20:39"},{"nativeSrc":"4326:28:39","nodeType":"YulAssignment","src":"4326:28:39","value":{"arguments":[{"name":"start","nativeSrc":"4344:5:39","nodeType":"YulIdentifier","src":"4344:5:39"},{"kind":"number","nativeSrc":"4351:2:39","nodeType":"YulLiteral","src":"4351:2:39","type":"","value":"85"}],"functionName":{"name":"keccak256","nativeSrc":"4334:9:39","nodeType":"YulIdentifier","src":"4334:9:39"},"nativeSrc":"4334:20:39","nodeType":"YulFunctionCall","src":"4334:20:39"},"variableNames":[{"name":"addr","nativeSrc":"4326:4:39","nodeType":"YulIdentifier","src":"4326:4:39"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"paris","externalReferences":[{"declaration":37494,"isOffset":false,"isSlot":false,"src":"4326:4:39","valueSize":1},{"declaration":37489,"isOffset":false,"isSlot":false,"src":"4025:12:39","valueSize":1},{"declaration":37491,"isOffset":false,"isSlot":false,"src":"4104:8:39","valueSize":1},{"declaration":37487,"isOffset":false,"isSlot":false,"src":"4074:4:39","valueSize":1}],"id":37496,"nodeType":"InlineAssembly","src":"2766:1598:39"}]},"documentation":{"id":37485,"nodeType":"StructuredDocumentation","src":"2361:232:39","text":" @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}."},"implemented":true,"kind":"function","modifiers":[],"name":"computeAddress","nameLocation":"2607:14:39","parameters":{"id":37492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37487,"mutability":"mutable","name":"salt","nameLocation":"2630:4:39","nodeType":"VariableDeclaration","scope":37498,"src":"2622:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":37486,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2622:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":37489,"mutability":"mutable","name":"bytecodeHash","nameLocation":"2644:12:39","nodeType":"VariableDeclaration","scope":37498,"src":"2636:20:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":37488,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2636:7:39","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":37491,"mutability":"mutable","name":"deployer","nameLocation":"2666:8:39","nodeType":"VariableDeclaration","scope":37498,"src":"2658:16:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37490,"name":"address","nodeType":"ElementaryTypeName","src":"2658:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2621:54:39"},"returnParameters":{"id":37495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37494,"mutability":"mutable","name":"addr","nameLocation":"2707:4:39","nodeType":"VariableDeclaration","scope":37498,"src":"2699:12:39","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37493,"name":"address","nodeType":"ElementaryTypeName","src":"2699:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2698:14:39"},"scope":37499,"stateMutability":"pure","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[],"canonicalName":"Create2","contractDependencies":[],"contractKind":"library","documentation":{"id":37399,"nodeType":"StructuredDocumentation","src":"127:367:39","text":" @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n `CREATE2` can be used to compute in advance the address where a smart\n contract will be deployed, which allows for interesting new mechanisms known\n as 'counterfactual interactions'.\n See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n information."},"fullyImplemented":true,"linearizedBaseContracts":[37499],"name":"Create2","nameLocation":"503:7:39","scope":37500,"usedErrors":[37406,37409,37412],"usedEvents":[]}],"license":"MIT"},"id":39}