@arbitrum/nitro-contracts
Version:
Layer 2 precompiles and rollup for Arbitrum Nitro
1,006 lines • 66.1 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Inbox",
"sourceName": "src/bridge/Inbox.sol",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "_maxDataSize",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "dataLength",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxDataLength",
"type": "uint256"
}
],
"name": "DataTooLarge",
"type": "error"
},
{
"inputs": [],
"name": "GasLimitTooLarge",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "expected",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "actual",
"type": "uint256"
}
],
"name": "InsufficientSubmissionCost",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "expected",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "actual",
"type": "uint256"
}
],
"name": "InsufficientValue",
"type": "error"
},
{
"inputs": [],
"name": "L1Forked",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "origin",
"type": "address"
}
],
"name": "NotAllowedOrigin",
"type": "error"
},
{
"inputs": [],
"name": "NotCodelessOrigin",
"type": "error"
},
{
"inputs": [],
"name": "NotForked",
"type": "error"
},
{
"inputs": [],
"name": "NotOrigin",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "NotOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "rollup",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "NotRollupOrOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "l2CallValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deposit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxSubmissionCost",
"type": "uint256"
},
{
"internalType": "address",
"name": "excessFeeRefundAddress",
"type": "address"
},
{
"internalType": "address",
"name": "callValueRefundAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "RetryableData",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "user",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "val",
"type": "bool"
}
],
"name": "AllowListAddressSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bool",
"name": "isEnabled",
"type": "bool"
}
],
"name": "AllowListEnabledUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "messageNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "InboxMessageDelivered",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "messageNum",
"type": "uint256"
}
],
"name": "InboxMessageDeliveredFromOrigin",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [],
"name": "allowListEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "bridge",
"outputs": [
{
"internalType": "contract IBridge",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "dataLength",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "baseFee",
"type": "uint256"
}
],
"name": "calculateRetryableSubmissionFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "l2CallValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxSubmissionCost",
"type": "uint256"
},
{
"internalType": "address",
"name": "excessFeeRefundAddress",
"type": "address"
},
{
"internalType": "address",
"name": "callValueRefundAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "createRetryableTicket",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "l2CallValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxSubmissionCost",
"type": "uint256"
},
{
"internalType": "address",
"name": "excessFeeRefundAddress",
"type": "address"
},
{
"internalType": "address",
"name": "callValueRefundAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "createRetryableTicketNoRefundAliasRewrite",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "depositEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "depositEth",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "getProxyAdmin",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IBridge",
"name": "_bridge",
"type": "address"
},
{
"internalType": "contract ISequencerInbox",
"name": "_sequencerInbox",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isAllowed",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxDataSize",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IBridge",
"name": "",
"type": "address"
}
],
"name": "postUpgradeInit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "sendContractTransaction",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "sendL1FundedContractTransaction",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "sendL1FundedUnsignedTransaction",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "sendL1FundedUnsignedTransactionToFork",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "messageData",
"type": "bytes"
}
],
"name": "sendL2Message",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "messageData",
"type": "bytes"
}
],
"name": "sendL2MessageFromOrigin",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "sendUnsignedTransaction",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "sendUnsignedTransactionToFork",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "address",
"name": "withdrawTo",
"type": "address"
}
],
"name": "sendWithdrawEthToFork",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "sequencerInbox",
"outputs": [
{
"internalType": "contract ISequencerInbox",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "user",
"type": "address[]"
},
{
"internalType": "bool[]",
"name": "val",
"type": "bool[]"
}
],
"name": "setAllowList",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_allowListEnabled",
"type": "bool"
}
],
"name": "setAllowListEnabled",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "l2CallValue",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxSubmissionCost",
"type": "uint256"
},
{
"internalType": "address",
"name": "excessFeeRefundAddress",
"type": "address"
},
{
"internalType": "address",
"name": "callValueRefundAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "unsafeCreateRetryableTicket",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": "0x60e0604052306080524660c0523480156200001957600080fd5b5060405162002bf538038062002bf58339810160408190526200003c9162000045565b60a0526200005f565b6000602082840312156200005857600080fd5b5051919050565b60805160a05160c051612b27620000ce600039600081816105800152818161079901528181611017015281816113b101526118380152600081816104c30152818161082f0152818161088401528181611b5a0152611bb3015260008181610bfa01526114530152612b276000f3fe6080604052600436106101b65760003560e01c806370665f14116100ec578063c474d2c51161008a578063e78cea9211610064578063e78cea9214610491578063e8eb1dc3146104b1578063ee35f327146104e5578063efeadb6d1461050557600080fd5b8063c474d2c51461043e578063e3de72a51461045e578063e6bd12cf1461047e57600080fd5b80638b3240a0116100c65780638b3240a01461037d578063a66b327d146103ce578063b75436bb146103ee578063babcc5391461040e57600080fd5b806370665f14146103285780638456cb59146103485780638a631aa61461035d57600080fd5b8063485cc955116101595780635e916758116101335780635e916758146102dc578063679b6ded146102ef57806367ef3ab8146103025780636e6e8a6a1461031557600080fd5b8063485cc955146102845780635075788b146102a45780635c975abb146102c457600080fd5b80631fe927cf116101955780631fe927cf1461021457806322bd5c1c146102345780633f4ba83a14610265578063439370b11461027c57600080fd5b8062f72382146101bb5780630f4d14e9146101ee5780631b871c8d14610201575b600080fd5b3480156101c757600080fd5b506101db6101d636600461227d565b610525565b6040519081526020015b60405180910390f35b6101db6101fc3660046122fa565b61066e565b6101db61020f366004612313565b6106d1565b34801561022057600080fd5b506101db61022f3660046123b8565b610743565b34801561024057600080fd5b5060665461025590600160a01b900460ff1681565b60405190151581526020016101e5565b34801561027157600080fd5b5061027a61090e565b005b6101db610a43565b34801561029057600080fd5b5061027a61029f3660046123fa565b610b21565b3480156102b057600080fd5b506101db6102bf36600461227d565b610ce3565b3480156102d057600080fd5b5060335460ff16610255565b6101db6102ea366004612433565b610d8e565b6101db6102fd366004612313565b610e41565b6101db61031036600461249d565b610ea6565b6101db610323366004612313565b610f5c565b34801561033457600080fd5b506101db610343366004612510565b610fc1565b34801561035457600080fd5b5061027a611148565b34801561036957600080fd5b506101db61037836600461255d565b61127a565b34801561038957600080fd5b507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03165b6040516001600160a01b0390911681526020016101e5565b3480156103da57600080fd5b506101db6103e93660046125b2565b611323565b3480156103fa57600080fd5b506101db6104093660046123b8565b61135b565b34801561041a57600080fd5b506102556104293660046125d4565b60676020526000908152604090205460ff1681565b34801561044a57600080fd5b5061027a6104593660046125d4565b611449565b34801561046a57600080fd5b5061027a6104793660046126de565b61155d565b6101db61048c36600461249d565b6117e2565b34801561049d57600080fd5b506065546103b6906001600160a01b031681565b3480156104bd57600080fd5b506101db7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f157600080fd5b506066546103b6906001600160a01b031681565b34801561051157600080fd5b5061027a6105203660046127a0565b611904565b600061052f611b01565b606654600160a01b900460ff16801561055857503260009081526067602052604090205460ff16155b1561057d57604051630f51ed7160e41b81523260048201526024015b60405180910390fd5b467f0000000000000000000000000000000000000000000000000000000000000000036105bd57604051635180dd8360e11b815260040160405180910390fd5b3332146105dd5760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff8811156106065760405163107c527b60e01b815260040160405180910390fd5b610662600373111100000000000000000000000000000000111019330160008b8b8b8b6001600160a01b03168b8b8b60405160200161064c9897969594939291906127bb565b6040516020818303038152906040526000611b56565b98975050505050505050565b6000610678611b01565b606654600160a01b900460ff1680156106a157503260009081526067602052604090205460ff16155b156106c157604051630f51ed7160e41b8152326004820152602401610574565b6106c9610a43565b90505b919050565b60006106db611b01565b606654600160a01b900460ff16801561070457503260009081526067602052604090205460ff16155b1561072457604051630f51ed7160e41b8152326004820152602401610574565b6107358a8a8a8a8a8a8a8a8a610f5c565b9a9950505050505050505050565b600061074d611b01565b606654600160a01b900460ff16801561077657503260009081526067602052604090205460ff16155b1561079657604051630f51ed7160e41b8152326004820152602401610574565b467f0000000000000000000000000000000000000000000000000000000000000000146107ef576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107f7611c37565b61082d576040517fc8958ead00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008211156108b0576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610574565b60006108d760033386866040516108c892919061281d565b60405180910390206000611c4c565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a290505b92915050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c919061282d565b9050336001600160a01b03821614610a38576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f2919061282d565b9050336001600160a01b03821614610a3657604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b610a40611d13565b50565b6000610a4d611b01565b606654600160a01b900460ff168015610a7657503260009081526067602052604090205460ff16155b15610a9657604051630f51ed7160e41b8152326004820152602401610574565b33803b151580610aa65750323314155b15610ac4575033731111000000000000000000000000000000001111015b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b166020820152346034820152610b1b90600c9033906054015b60405160208183030381529060405234611b56565b91505090565b600054610100900460ff1615808015610b415750600054600160ff909116105b80610b5b5750303b158015610b5b575060005460ff166001145b610bcd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610574565b6000805460ff191660011790558015610bf0576000805461ff0019166101001790555b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c8e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610574565b610c988383611d65565b8015610cde576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6000610ced611b01565b606654600160a01b900460ff168015610d1657503260009081526067602052604090205460ff16155b15610d3657604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff881115610d5f5760405163107c527b60e01b815260040160405180910390fd5b61066260033360008b8b8b8b6001600160a01b03168b8b8b60405160200161064c9897969594939291906127bb565b6000610d98611b01565b606654600160a01b900460ff168015610dc157503260009081526067602052604090205460ff16155b15610de157604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff861115610e0a5760405163107c527b60e01b815260040160405180910390fd5b610e3760073360018989896001600160a01b0316348a8a604051602001610b06979695949392919061284a565b9695505050505050565b6000610e4b611b01565b606654600160a01b900460ff168015610e7457503260009081526067602052604090205460ff16155b15610e9457604051630f51ed7160e41b8152326004820152602401610574565b6107358a8a8a8a8a8a8a348b8b611e57565b6000610eb0611b01565b606654600160a01b900460ff168015610ed957503260009081526067602052604090205460ff16155b15610ef957604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff871115610f225760405163107c527b60e01b815260040160405180910390fd5b610f5160073360008a8a8a8a6001600160a01b0316348b8b604051602001610b069897969594939291906127bb565b979650505050505050565b6000610f66611b01565b606654600160a01b900460ff168015610f8f57503260009081526067602052604090205460ff16155b15610faf57604051630f51ed7160e41b8152326004820152602401610574565b6107358a8a8a8a8a8a8a348b8b611f50565b6000610fcb611b01565b606654600160a01b900460ff168015610ff457503260009081526067602052604090205460ff16155b1561101457604051630f51ed7160e41b8152326004820152602401610574565b467f00000000000000000000000000000000000000000000000000000000000000000361105457604051635180dd8360e11b815260040160405180910390fd5b3332146110745760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff86111561109d5760405163107c527b60e01b815260040160405180910390fd5b604080516001600160a01b0384166024808301919091528251808303909101815260449091018252602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f25e16063000000000000000000000000000000000000000000000000000000001790529151610e37926003923373111100000000000000000000000000000000111019019261064c926000928d928d928d926064928e92016128c9565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015611192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b6919061282d565b9050336001600160a01b03821614611272576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611208573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122c919061282d565b9050336001600160a01b0382161461127057604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b610a40612087565b6000611284611b01565b606654600160a01b900460ff1680156112ad57503260009081526067602052604090205460ff16155b156112cd57604051630f51ed7160e41b8152326004820152602401610574565b67ffffffffffffffff8711156112f65760405163107c527b60e01b815260040160405180910390fd5b610f5160033360018a8a8a6001600160a01b03168a8a8a60405160200161064c979695949392919061284a565b600081156113315781611333565b485b61133e84600661294d565b61134a90610578612964565b611354919061294d565b9392505050565b6000611365611b01565b606654600160a01b900460ff16801561138e57503260009081526067602052604090205460ff16155b156113ae57604051630f51ed7160e41b8152326004820152602401610574565b467f000000000000000000000000000000000000000000000000000000000000000014611407576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61135460033385858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611b56915050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114e75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610574565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b03821614610cde576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610574565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa1580156115a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115cb919061282d565b9050336001600160a01b03821614611687576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611641919061282d565b9050336001600160a01b0382161461168557604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b81518351146116d85760405162461bcd60e51b815260206004820152600d60248201527f494e56414c49445f494e505554000000000000000000000000000000000000006044820152606401610574565b60005b83518110156117dc578281815181106116f6576116f6612977565b60200260200101516067600086848151811061171457611714612977565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555083818151811061176557611765612977565b60200260200101516001600160a01b03167fd9739f45a01ce092c5cdb3d68f63d63d21676b1c6c0b4f9cbc6be4cf5449595a8483815181106117a9576117a9612977565b60200260200101516040516117c2911515815260200190565b60405180910390a2806117d48161298d565b9150506116db565b50505050565b60006117ec611b01565b606654600160a01b900460ff16801561181557503260009081526067602052604090205460ff16155b1561183557604051630f51ed7160e41b8152326004820152602401610574565b467f00000000000000000000000000000000000000000000000000000000000000000361187557604051635180dd8360e11b815260040160405180910390fd5b3332146118955760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff8711156118be5760405163107c527b60e01b815260040160405180910390fd5b610f51600773111100000000000000000000000000000000111019330160008a8a8a8a6001600160a01b0316348b8b604051602001610b069897969594939291906127bb565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa15801561194e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611972919061282d565b9050336001600160a01b03821614611a2e576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e8919061282d565b9050336001600160a01b03821614611a2c57604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b606654600160a01b900460ff16151582151503611a8d5760405162461bcd60e51b815260206004820152600b60248201527f414c52454144595f5345540000000000000000000000000000000000000000006044820152606401610574565b60668054831515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f16435b45f7482047f839a6a19d291442627200f52cad2803c595150d0d440eb390611af590841515815260200190565b60405180910390a15050565b60335460ff1615611b545760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610574565b565b60007f000000000000000000000000000000000000000000000000000000000000000083511115611bdf5782516040517f4634691b00000000000000000000000000000000000000000000000000000000815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610574565b6000611bf48686868051906020012086611c4c565b9050807fff64905f73a67fb594e0f940a8075a860db489ad991e032f48c81123eb52d60b85604051611c2691906129c5565b60405180910390a295945050505050565b60003332148015611c475750333b155b905090565b6065546000906001600160a01b0316638db5993b838773111100000000000000000000000000000000111188016040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815260ff90921660048301526001600160a01b031660248201526044810187905260640160206040518083038185885af1158015611ce5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d0a91906129f8565b95945050505050565b611d1b6120c4565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600054610100900460ff16611de25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610574565b606580546001600160a01b038085167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117909155606680547fffffffffffffffffffffff00000000000000000000000000000000000000000016918316919091179055611e53612116565b5050565b600083611e64868861294d565b611e6e8c8c612964565b611e789190612964565b811015611eda57611e89868861294d565b611e938c8c612964565b611e9d9190612964565b6040517f7040b58c000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610574565b6001600160a01b0389163b15611f0457731111000000000000000000000000000000001111890198505b6001600160a01b0388163b15611f2e57731111000000000000000000000000000000001111880197505b611f408c8c8c8c8c8c8c8c8c8c611f50565b9c9b505050505050505050505050565b60008560011480611f615750846001145b15611fae57338b8b868c8c8c8c8c8b8b6040517f07c266e30000000000000000000000000000000000000000000000000000000081526004016105749b9a99989796959493929190612a11565b67ffffffffffffffff861115611fd75760405163107c527b60e01b815260040160405180910390fd5b6000611fe38348611323565b9050808a1015612029576040517ffadf238a00000000000000000000000000000000000000000000000000000000815260048101829052602481018b9052604401610574565b611f406009336001600160a01b038f168e898f8f6001600160a01b03168f6001600160a01b03168f8f8e8e90508f8f6040516020016120729b9a99989796959493929190612a97565b60405160208183030381529060405288611b56565b61208f611b01565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611d483390565b60335460ff16611b545760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610574565b600054610100900460ff166121935760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610574565b611b54600054610100900460ff166122135760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610574565b6033805460ff19169055565b6001600160a01b0381168114610a4057600080fd5b60008083601f84011261224657600080fd5b50813567ffffffffffffffff81111561225e57600080fd5b60208301915083602082850101111561227657600080fd5b9250929050565b600080600080600080600060c0888a03121561229857600080fd5b87359650602088013595506040880135945060608801356122b88161221f565b93506080880135925060a088013567ffffffffffffffff8111156122db57600080fd5b6122e78a828b01612234565b989b979a50959850939692959293505050565b60006020828403121561230c57600080fd5b5035919050565b60008060008060008060008060006101008a8c03121561233257600080fd5b893561233d8161221f565b985060208a0135975060408a0135965060608a013561235b8161221f565b955060808a013561236b8161221f565b945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561239557600080fd5b6123a18c828d01612234565b915080935050809150509295985092959850929598565b600080602083850312156123cb57600080fd5b823567ffffffffffffffff8111156123e257600080fd5b6123ee85828601612234565b90969095509350505050565b6000806040838503121561240d57600080fd5b82356124188161221f565b915060208301356124288161221f565b809150509250929050565b60008060008060006080868803121561244b57600080fd5b853594506020860135935060408601356124648161221f565b9250606086013567ffffffffffffffff81111561248057600080fd5b61248c88828901612234565b969995985093965092949392505050565b60008060008060008060a087890312156124b657600080fd5b86359550602087013594506040870135935060608701356124d68161221f565b9250608087013567ffffffffffffffff8111156124f257600080fd5b6124fe89828a01612234565b979a9699509497509295939492505050565b600080600080600060a0868803121561252857600080fd5b85359450602086013593506040860135925060608601359150608086013561254f8161221f565b809150509295509295909350565b60008060008060008060a0878903121561257657600080fd5b8635955060208701359450604087013561258f8161221f565b935060608701359250608087013567ffffffffffffffff8111156124f257600080fd5b600080604083850312156125c557600080fd5b50508035926020909101359150565b6000602082840312156125e657600080fd5b81356113548161221f565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612630576126306125f1565b604052919050565b600067ffffffffffffffff821115612652576126526125f1565b5060051b60200190565b803580151581146106cc57600080fd5b600082601f83011261267d57600080fd5b8135602061269261268d83612638565b612607565b82815260059290921b840181019181810190868411156126b157600080fd5b8286015b848110156126d3576126c68161265c565b83529183019183016126b5565b509695505050505050565b600080604083850312156126f157600080fd5b823567ffffffffffffffff8082111561270957600080fd5b818501915085601f83011261271d57600080fd5b8135602061272d61268d83612638565b82815260059290921b8401810191818101908984111561274c57600080fd5b948201945b838610156127735785356127648161221f565b82529482019490820190612751565b9650508601359250508082111561278957600080fd5b506127968582860161266c565b9150509250929050565b6000602082840312156127b257600080fd5b6113548261265c565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b168152876001820152866021820152856041820152846061820152836081820152818360a18301376000910160a101908152979650505050505050565b8183823760009101908152919050565b60006020828403121561283f57600080fd5b81516113548161221f565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b16815286600182015285602182015284604182015283606182015281836081830137600091016081019081529695505050505050565b60005b838110156128c05781810151838201526020016128a8565b50506000910152565b7fff000000000000000000000000000000000000000000000000000000000000008860f81b168152866001820152856021820152846041820152836061820152826081820152600082516129248160a18501602087016128a5565b9190910160a10198975050505050505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761090857610908612937565b8082018082111561090857610908612937565b634e487b7160e01b600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129be576129be612937565b5060010190565b60208152600082518060208401526129e48160408501602087016128a5565b601f01601f19169190910160400192915050565b600060208284031215612a0a57600080fd5b5051919050565b60006101406001600160a01b03808f168452808e1660208501528c60408501528b60608501528a6080850152808a1660a085015280891660c0850152508660e084015285610100840152806101208401528381840152506101608385828501376000838501820152601f909301601f19169091019091019b9a5050505050505050505050565b8b81528a60208201528960408201528860608201528760808201528660a08201528560c08201528460e08201528361010082015260006101208385828501376000929093019092019081529b9a505050505050505050505056fea2646970667358221220e5ae09c9672894fd2326726db25562f398d0f90ab65bac1b89ccd0359cac435a64736f6c63430008110033",
"deployedBytecode": "0x6080604052600436106101b65760003560e01c806370665f14116100ec578063c474d2c51161008a578063e78cea9211610064578063e78cea9214610491578063e8eb1dc3146104b1578063ee35f327146104e5578063efeadb6d1461050557600080fd5b8063c474d2c51461043e578063e3de72a51461045e578063e6bd12cf1461047e57600080fd5b80638b3240a0116100c65780638b3240a01461037d578063a66b327d146103ce578063b75436bb146103ee578063babcc5391461040e57600080fd5b806370665f14146103285780638456cb59146103485780638a631aa61461035d57600080fd5b8063485cc955116101595780635e916758116101335780635e916758146102dc578063679b6ded146102ef57806367ef3ab8146103025780636e6e8a6a1461031557600080fd5b8063485cc955146102845780635075788b146102a45780635c975abb146102c457600080fd5b80631fe927cf116101955780631fe927cf1461021457806322bd5c1c146102345780633f4ba83a14610265578063439370b11461027c57600080fd5b8062f72382146101bb5780630f4d14e9146101ee5780631b871c8d14610201575b600080fd5b3480156101c757600080fd5b506101db6101d636600461227d565b610525565b6040519081526020015b60405180910390f35b6101db6101fc3660046122fa565b61066e565b6101db61020f366004612313565b6106d1565b34801561022057600080fd5b506101db61022f3660046123b8565b610743565b34801561024057600080fd5b5060665461025590600160a01b900460ff1681565b60405190151581526020016101e5565b34801561027157600080fd5b5061027a61090e565b005b6101db610a43565b34801561029057600080fd5b5061027a61029f3660046123fa565b610b21565b3480156102b057600080fd5b506101db6102bf36600461227d565b610ce3565b3480156102d057600080fd5b5060335460ff16610255565b6101db6102ea366004612433565b610d8e565b6101db6102fd366004612313565b610e41565b6101db61031036600461249d565b610ea6565b6101db610323366004612313565b610f5c565b34801561033457600080fd5b506101db610343366004612510565b610fc1565b34801561035457600080fd5b5061027a611148565b34801561036957600080fd5b506101db61037836600461255d565b61127a565b34801561038957600080fd5b507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b03165b6040516001600160a01b0390911681526020016101e5565b3480156103da57600080fd5b506101db6103e93660046125b2565b611323565b3480156103fa57600080fd5b506101db6104093660046123b8565b61135b565b34801561041a57600080fd5b506102556104293660046125d4565b60676020526000908152604090205460ff1681565b34801561044a57600080fd5b5061027a6104593660046125d4565b611449565b34801561046a57600080fd5b5061027a6104793660046126de565b61155d565b6101db61048c36600461249d565b6117e2565b34801561049d57600080fd5b506065546103b6906001600160a01b031681565b3480156104bd57600080fd5b506101db7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f157600080fd5b506066546103b6906001600160a01b031681565b34801561051157600080fd5b5061027a6105203660046127a0565b611904565b600061052f611b01565b606654600160a01b900460ff16801561055857503260009081526067602052604090205460ff16155b1561057d57604051630f51ed7160e41b81523260048201526024015b60405180910390fd5b467f0000000000000000000000000000000000000000000000000000000000000000036105bd57604051635180dd8360e11b815260040160405180910390fd5b3332146105dd5760405163feb3d07160e01b815260040160405180910390fd5b67ffffffffffffffff8811156106065760405163107c527b60e01b815260040160405180910390fd5b610662600373111100000000000000000000000000000000111019330160008b8b8b8b6001600160a01b03168b8b8b60405160200161064c9897969594939291906127bb565b6040516020818303038152906040526000611b56565b98975050505050505050565b6000610678611b01565b606654600160a01b900460ff1680156106a157503260009081526067602052604090205460ff16155b156106c157604051630f51ed7160e41b8152326004820152602401610574565b6106c9610a43565b90505b919050565b60006106db611b01565b606654600160a01b900460ff16801561070457503260009081526067602052604090205460ff16155b1561072457604051630f51ed7160e41b8152326004820152602401610574565b6107358a8a8a8a8a8a8a8a8a610f5c565b9a9950505050505050505050565b600061074d611b01565b606654600160a01b900460ff16801561077657503260009081526067602052604090205460ff16155b1561079657604051630f51ed7160e41b8152326004820152602401610574565b467f0000000000000000000000000000000000000000000000000000000000000000146107ef576040517fc6ea680300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107f7611c37565b61082d576040517fc8958ead00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008211156108b0576040517f4634691b000000000000000000000000000000000000000000000000000000008152600481018390527f00000000000000000000000000000000000000000000000000000000000000006024820152604401610574565b60006108d760033386866040516108c892919061281d565b60405180910390206000611c4c565b60405190915081907fab532385be8f1005a4b6ba8fa20a2245facb346134ac739fe9a5198dc1580b9c90600090a290505b92915050565b6065546040805163cb23bcb560e01b815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c919061282d565b9050336001600160a01b03821614610a38576000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f2919061282d565b9050336001600160a01b03821614610a3657604051630739600760e01b81523360048201526001600160a01b03808416602483015282166044820152606401610574565b505b610a40611d13565b50565b6000610a4d611b01565b606654600160a01b900460ff168015610a7657503260009081526067602052604090205460ff16155b15610a9657604051630f51ed7160e41b8152326004820152602401610574565b33803b151580610aa65750323314155b15610ac4575033731111000000000000000000000000000000001111015b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b166020820152346034820152610b1b90600c9033906054015b60405160208183030381529060405234611b56565b91505090565b600054610100900460ff1615808015610b415750600054600160ff909116105b80610b5b5750303b158015610b5b575060005460ff166001145b610bcd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610574565b6000805460ff191660011790558015610bf057600