@arbitrum/nitro-contracts
Version:
Layer 2 precompiles and rollup for Arbitrum Nitro
587 lines (586 loc) • 39.2 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "Outbox",
"sourceName": "src/bridge/Outbox.sol",
"abi": [
{
"inputs": [],
"name": "AlreadyInit",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "AlreadySpent",
"type": "error"
},
{
"inputs": [],
"name": "BadPostUpgradeInit",
"type": "error"
},
{
"inputs": [],
"name": "BridgeCallFailed",
"type": "error"
},
{
"inputs": [],
"name": "HadZeroInit",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "actualLength",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxProofLength",
"type": "uint256"
}
],
"name": "MerkleProofTooLong",
"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"
}
],
"name": "NotRollup",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxIndex",
"type": "uint256"
}
],
"name": "PathNotMinimal",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "proofLength",
"type": "uint256"
}
],
"name": "ProofTooLong",
"type": "error"
},
{
"inputs": [],
"name": "RollupNotChanged",
"type": "error"
},
{
"inputs": [],
"name": "SimulationOnlyEntrypoint",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "root",
"type": "bytes32"
}
],
"name": "UnknownRoot",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "l2Sender",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "zero",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "transactionIndex",
"type": "uint256"
}
],
"name": "OutBoxTransactionExecuted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "outputRoot",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "l2BlockHash",
"type": "bytes32"
}
],
"name": "SendRootUpdated",
"type": "event"
},
{
"inputs": [],
"name": "OUTBOX_VERSION",
"outputs": [
{
"internalType": "uint128",
"name": "",
"type": "uint128"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "bridge",
"outputs": [
{
"internalType": "contract IBridge",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "l2Sender",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "l2Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "l1Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "l2Timestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "calculateItemHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "path",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "item",
"type": "bytes32"
}
],
"name": "calculateMerkleRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "address",
"name": "l2Sender",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "l2Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "l1Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "l2Timestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "executeTransaction",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "address",
"name": "l2Sender",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "l2Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "l1Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "l2Timestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "executeTransactionSimulation",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IBridge",
"name": "_bridge",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "isSpent",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l2ToL1BatchNum",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "l2ToL1Block",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l2ToL1EthBlock",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l2ToL1OutputId",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l2ToL1Sender",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l2ToL1Timestamp",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "postUpgradeInit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "rollup",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "roots",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "spent",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "updateRollupAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "root",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "l2BlockHash",
"type": "bytes32"
}
],
"name": "updateSendRoot",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60a06040523060805234801561001457600080fd5b50608051611a57610037600039600081816107920152610a970152611a576000f3fe608060405234801561001057600080fd5b506004361061016b5760003560e01c806395fcea78116100cd578063c4d66de811610081578063cb23bcb511610066578063cb23bcb5146102b1578063d5b5cc23146102c4578063e78cea92146102e457600080fd5b8063c4d66de81461027e578063c75184df1461029157600080fd5b8063a04cee60116100b2578063a04cee6014610243578063ae6dead714610256578063b0f305371461027657600080fd5b806395fcea78146102285780639f0c04bf1461023057600080fd5b80635a129efe1161012457806372f2a8c71161010957806372f2a8c7146101f857806380648b02146102005780638515bc6a1461022057600080fd5b80635a129efe146101cd5780636ae71f12146101f057600080fd5b8063119852711161015557806311985271146101ab578063288e5b10146101b257806346547790146101c557600080fd5b80627436d31461017057806308635a9514610196575b600080fd5b61018361017e366004611380565b6102f7565b6040519081526020015b60405180910390f35b6101a96101a43660046114a2565b610334565b005b6000610183565b6101a96101c0366004611597565b6103a7565b6101836103fb565b6101e06101db366004611633565b610447565b604051901515815260200161018d565b6101a9610464565b6101836106c1565b6102086106dc565b6040516001600160a01b03909116815260200161018d565b61018361071a565b6101a9610788565b61018361023e36600461164c565b61095e565b6101a96102513660046116db565b6109a3565b610183610264366004611633565b60036020526000908152604090205481565b610183610a3b565b6101a961028c3660046116fd565b610a8d565b610299600281565b6040516001600160801b03909116815260200161018d565b600054610208906001600160a01b031681565b6101836102d2366004611633565b60026020526000908152604090205481565b600154610208906001600160a01b031681565b600061032c84848460405160200161031191815260200190565b60405160208183030381529060405280519060200120610cf6565b949350505050565b6000610346898989898989898961095e565b90506103888c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610db19050565b6103998a8a8a8a8a8a8a8a8a610f1e565b505050505050505050505050565b33156103df576040517f0e13b69d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f0898989898989898989610f1e565b505050505050505050565b6004546000906001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161043957600091505090565b6001600160801b0316919050565b600080600061045584611202565b925092505061032c828261123f565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d99190611721565b6001600160a01b0316336001600160a01b0316146105c157600054604080517f8da5cb5b000000000000000000000000000000000000000000000000000000008152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105779190611721565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b600154604080517fcb23bcb500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106489190611721565b6000549091506001600160a01b03808316911603610692576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600554600090600181016106d757506000919050565b919050565b6006546000906001600160a01b03167fffffffffffffffffffffffff000000000000000000000000000000000000000181016106d757600091505090565b6006546000907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff000000000000000000000001810161077557600091505090565b6bffffffffffffffffffffffff16919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b8565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146108b6576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016105b8565b6004546001600160801b03908116146108fb576040517fd0afb66100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506040805160c0810182526001600160801b0380825260208201526000199181018290526001600160a01b0360608201526bffffffffffffffffffffffff6080820152600060a090910181905260048290556005829055600691909155600755565b6000888888888888888860405160200161097f98979695949392919061173e565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b031633146109fc576000546040517f3933c6fc0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044016105b8565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b60045460009070010000000000000000000000000000000090046001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161043957600091505090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b8565b6001600160a01b038116610b85576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b031615610bc8576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810182526001600160801b038082526020808301919091526000198284018190526001600160a01b03606084018190526bffffffffffffffffffffffff6080850152600060a0909401849052600482815560058390556006929092556007939093556001805473ffffffffffffffffffffffffffffffffffffffff1916938616938417905583517fcb23bcb50000000000000000000000000000000000000000000000000000000081529351929363cb23bcb593818301939290918290030181865afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc69190611721565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b8251600090610100811115610d42576040517ffdac331e0000000000000000000000000000000000000000000000000000000081526004810182905261010060248201526044016105b8565b8260005b82811015610da7576000878281518110610d6257610d626117aa565b60200260200101519050816001901b8716600003610d8e57826000528060205260406000209250610d9e565b8060005282602052604060002092505b50600101610d46565b5095945050505050565b610100835110610df25782516040517fab6a06830000000000000000000000000000000000000000000000000000000081526004016105b891815260200190565b8251610dff9060026118ba565b8210610e4f578183516002610e1491906118ba565b6040517f0b8a724b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105b8565b6000610e5c8484846102f7565b600081815260036020526040902054909150610ea7576040517f8730d7c8000000000000000000000000000000000000000000000000000000008152600481018290526024016105b8565b6000806000610eb586611202565b925092509250610ec5828261123f565b15610eff576040517f9715b8d3000000000000000000000000000000000000000000000000000000008152600481018790526024016105b8565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610f6591815260200190565b60405180910390a46000839050600060046040518060c00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160038201548152505090506040518060c00160405280896001600160801b03168152602001876001600160801b031681526020018c60001b81526020018b6001600160a01b03168152602001886bffffffffffffffffffffffff1681526020016110bf600090565b905280516020808301516001600160801b0390811670010000000000000000000000000000000002921691909117600455604080830151600555606083015160808401516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a0909201516007558151601f860182900482028101820190925284825261117e918b91859190889088908190840183828082843760009201919091525061124e92505050565b805160208201516001600160801b03908116700100000000000000000000000000000000029116176004556040810151600555606081015160808201516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a0015160075550505050505050505050565b600080808061121260ff866118dc565b9050600061122160ff876118f0565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c49906112a090889088908890600401611928565b6000604051808303816000875af11580156112bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e79190810190611972565b9150915081611332578051156113005780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561137857611378611339565b604052919050565b60008060006060848603121561139557600080fd5b833567ffffffffffffffff808211156113ad57600080fd5b818601915086601f8301126113c157600080fd5b81356020828211156113d5576113d5611339565b8160051b92506113e681840161134f565b828152928401810192818101908a85111561140057600080fd5b948201945b8486101561141e57853582529482019490820190611405565b9a918901359950506040909701359695505050505050565b6001600160a01b038116811461144b57600080fd5b50565b80356106d781611436565b60008083601f84011261146b57600080fd5b50813567ffffffffffffffff81111561148357600080fd5b60208301915083602082850101111561149b57600080fd5b9250929050565b60008060008060008060008060008060006101208c8e0312156114c457600080fd5b8b3567ffffffffffffffff808211156114dc57600080fd5b818e0191508e601f8301126114f057600080fd5b8135818111156114ff57600080fd5b8f60208260051b850101111561151457600080fd5b60208381019e50909c508e01359a5061152f60408f0161144e565b995061153d60608f0161144e565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e013591508082111561157057600080fd5b5061157d8e828f01611459565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c0312156115b657600080fd5b8935985060208a01356115c881611436565b975060408a01356115d881611436565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561161057600080fd5b61161c8c828d01611459565b915080935050809150509295985092959850929598565b60006020828403121561164557600080fd5b5035919050565b60008060008060008060008060e0898b03121561166857600080fd5b883561167381611436565b9750602089013561168381611436565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff8111156116bb57600080fd5b6116c78b828c01611459565b999c989b5096995094979396929594505050565b600080604083850312156116ee57600080fd5b50508035926020909101359150565b60006020828403121561170f57600080fd5b813561171a81611436565b9392505050565b60006020828403121561173357600080fd5b815161171a81611436565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156118115781600019048211156117f7576117f76117c0565b8085161561180457918102915b93841c93908002906117db565b509250929050565b60008261182857506001611248565b8161183557506000611248565b816001811461184b576002811461185557611871565b6001915050611248565b60ff841115611866576118666117c0565b50506001821b611248565b5060208310610133831016604e8410600b8410161715611894575081810a611248565b61189e83836117d6565b80600019048211156118b2576118b26117c0565b029392505050565b600061171a8383611819565b634e487b7160e01b600052601260045260246000fd5b6000826118eb576118eb6118c6565b500490565b6000826118ff576118ff6118c6565b500690565b60005b8381101561191f578181015183820152602001611907565b50506000910152565b6001600160a01b0384168152826020820152606060408201526000825180606084015261195c816080850160208701611904565b601f01601f191691909101608001949350505050565b6000806040838503121561198557600080fd5b8251801515811461199557600080fd5b602084015190925067ffffffffffffffff808211156119b357600080fd5b818501915085601f8301126119c757600080fd5b8151818111156119d9576119d9611339565b6119ec6020601f19601f8401160161134f565b9150808252866020828501011115611a0357600080fd5b611a14816020840160208601611904565b508092505050925092905056fea26469706673582212200bdab05d434f8e4c7bbc746a5f99a1bd395367eb3d3e116c9628eb99682224fc64736f6c63430008110033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016b5760003560e01c806395fcea78116100cd578063c4d66de811610081578063cb23bcb511610066578063cb23bcb5146102b1578063d5b5cc23146102c4578063e78cea92146102e457600080fd5b8063c4d66de81461027e578063c75184df1461029157600080fd5b8063a04cee60116100b2578063a04cee6014610243578063ae6dead714610256578063b0f305371461027657600080fd5b806395fcea78146102285780639f0c04bf1461023057600080fd5b80635a129efe1161012457806372f2a8c71161010957806372f2a8c7146101f857806380648b02146102005780638515bc6a1461022057600080fd5b80635a129efe146101cd5780636ae71f12146101f057600080fd5b8063119852711161015557806311985271146101ab578063288e5b10146101b257806346547790146101c557600080fd5b80627436d31461017057806308635a9514610196575b600080fd5b61018361017e366004611380565b6102f7565b6040519081526020015b60405180910390f35b6101a96101a43660046114a2565b610334565b005b6000610183565b6101a96101c0366004611597565b6103a7565b6101836103fb565b6101e06101db366004611633565b610447565b604051901515815260200161018d565b6101a9610464565b6101836106c1565b6102086106dc565b6040516001600160a01b03909116815260200161018d565b61018361071a565b6101a9610788565b61018361023e36600461164c565b61095e565b6101a96102513660046116db565b6109a3565b610183610264366004611633565b60036020526000908152604090205481565b610183610a3b565b6101a961028c3660046116fd565b610a8d565b610299600281565b6040516001600160801b03909116815260200161018d565b600054610208906001600160a01b031681565b6101836102d2366004611633565b60026020526000908152604090205481565b600154610208906001600160a01b031681565b600061032c84848460405160200161031191815260200190565b60405160208183030381529060405280519060200120610cf6565b949350505050565b6000610346898989898989898961095e565b90506103888c8c808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508e9250859150610db19050565b6103998a8a8a8a8a8a8a8a8a610f1e565b505050505050505050505050565b33156103df576040517f0e13b69d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103f0898989898989898989610f1e565b505050505050505050565b6004546000906001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161043957600091505090565b6001600160801b0316919050565b600080600061045584611202565b925092505061032c828261123f565b60008054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d99190611721565b6001600160a01b0316336001600160a01b0316146105c157600054604080517f8da5cb5b000000000000000000000000000000000000000000000000000000008152905133926001600160a01b031691638da5cb5b9160048083019260209291908290030181865afa158015610553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105779190611721565b6040517f23295f0e0000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152911660248201526044015b60405180910390fd5b600154604080517fcb23bcb500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cb23bcb59160048083019260209291908290030181865afa158015610624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106489190611721565b6000549091506001600160a01b03808316911603610692576040517fd054909f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600554600090600181016106d757506000919050565b919050565b6006546000906001600160a01b03167fffffffffffffffffffffffff000000000000000000000000000000000000000181016106d757600091505090565b6006546000907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff000000000000000000000001810161077557600091505090565b6bffffffffffffffffffffffff16919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b8565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038054336001600160a01b038216146108b6576040517f23295f0e0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821660248201526044016105b8565b6004546001600160801b03908116146108fb576040517fd0afb66100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506040805160c0810182526001600160801b0380825260208201526000199181018290526001600160a01b0360608201526bffffffffffffffffffffffff6080820152600060a090910181905260048290556005829055600691909155600755565b6000888888888888888860405160200161097f98979695949392919061173e565b60405160208183030381529060405280519060200120905098975050505050505050565b6000546001600160a01b031633146109fc576000546040517f3933c6fc0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911660248201526044016105b8565b60008281526003602052604080822083905551829184917fb4df3847300f076a369cd76d2314b470a1194d9e8a6bb97f1860aee88a5f67489190a35050565b60045460009070010000000000000000000000000000000090046001600160801b03167fffffffffffffffffffffffffffffffff00000000000000000000000000000001810161043957600091505090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c000000000000000000000000000000000000000060648201526084016105b8565b6001600160a01b038116610b85576040517f1ad0f74300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546001600160a01b031615610bc8576040517fef34ca5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c0810182526001600160801b038082526020808301919091526000198284018190526001600160a01b03606084018190526bffffffffffffffffffffffff6080850152600060a0909401849052600482815560058390556006929092556007939093556001805473ffffffffffffffffffffffffffffffffffffffff1916938616938417905583517fcb23bcb50000000000000000000000000000000000000000000000000000000081529351929363cb23bcb593818301939290918290030181865afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc69190611721565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691909117905550565b8251600090610100811115610d42576040517ffdac331e0000000000000000000000000000000000000000000000000000000081526004810182905261010060248201526044016105b8565b8260005b82811015610da7576000878281518110610d6257610d626117aa565b60200260200101519050816001901b8716600003610d8e57826000528060205260406000209250610d9e565b8060005282602052604060002092505b50600101610d46565b5095945050505050565b610100835110610df25782516040517fab6a06830000000000000000000000000000000000000000000000000000000081526004016105b891815260200190565b8251610dff9060026118ba565b8210610e4f578183516002610e1491906118ba565b6040517f0b8a724b000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105b8565b6000610e5c8484846102f7565b600081815260036020526040902054909150610ea7576040517f8730d7c8000000000000000000000000000000000000000000000000000000008152600481018290526024016105b8565b6000806000610eb586611202565b925092509250610ec5828261123f565b15610eff576040517f9715b8d3000000000000000000000000000000000000000000000000000000008152600481018790526024016105b8565b600092835260026020526040909220600190911b909117905550505050565b6000886001600160a01b0316886001600160a01b03167f20af7f3bbfe38132b8900ae295cd9c8d1914be7052d061a511f3f728dab189648c604051610f6591815260200190565b60405180910390a46000839050600060046040518060c00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a90046001600160801b03166001600160801b03166001600160801b03168152602001600182015481526020016002820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016002820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200160038201548152505090506040518060c00160405280896001600160801b03168152602001876001600160801b031681526020018c60001b81526020018b6001600160a01b03168152602001886bffffffffffffffffffffffff1681526020016110bf600090565b905280516020808301516001600160801b0390811670010000000000000000000000000000000002921691909117600455604080830151600555606083015160808401516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a0909201516007558151601f860182900482028101820190925284825261117e918b91859190889088908190840183828082843760009201919091525061124e92505050565b805160208201516001600160801b03908116700100000000000000000000000000000000029116176004556040810151600555606081015160808201516bffffffffffffffffffffffff1674010000000000000000000000000000000000000000026001600160a01b039091161760065560a0015160075550505050505050505050565b600080808061121260ff866118dc565b9050600061122160ff876118f0565b60008381526002602052604090205492979096509194509092505050565b80821c60011615155b92915050565b6001546040517f9e5d4c4900000000000000000000000000000000000000000000000000000000815260009182916001600160a01b0390911690639e5d4c49906112a090889088908890600401611928565b6000604051808303816000875af11580156112bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e79190810190611972565b9150915081611332578051156113005780518082602001fd5b6040517f376fb55a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561137857611378611339565b604052919050565b60008060006060848603121561139557600080fd5b833567ffffffffffffffff808211156113ad57600080fd5b818601915086601f8301126113c157600080fd5b81356020828211156113d5576113d5611339565b8160051b92506113e681840161134f565b828152928401810192818101908a85111561140057600080fd5b948201945b8486101561141e57853582529482019490820190611405565b9a918901359950506040909701359695505050505050565b6001600160a01b038116811461144b57600080fd5b50565b80356106d781611436565b60008083601f84011261146b57600080fd5b50813567ffffffffffffffff81111561148357600080fd5b60208301915083602082850101111561149b57600080fd5b9250929050565b60008060008060008060008060008060006101208c8e0312156114c457600080fd5b8b3567ffffffffffffffff808211156114dc57600080fd5b818e0191508e601f8301126114f057600080fd5b8135818111156114ff57600080fd5b8f60208260051b850101111561151457600080fd5b60208381019e50909c508e01359a5061152f60408f0161144e565b995061153d60608f0161144e565b985060808e0135975060a08e0135965060c08e0135955060e08e013594506101008e013591508082111561157057600080fd5b5061157d8e828f01611459565b915080935050809150509295989b509295989b9093969950565b60008060008060008060008060006101008a8c0312156115b657600080fd5b8935985060208a01356115c881611436565b975060408a01356115d881611436565b965060608a0135955060808a0135945060a08a0135935060c08a0135925060e08a013567ffffffffffffffff81111561161057600080fd5b61161c8c828d01611459565b915080935050809150509295985092959850929598565b60006020828403121561164557600080fd5b5035919050565b60008060008060008060008060e0898b03121561166857600080fd5b883561167381611436565b9750602089013561168381611436565b965060408901359550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff8111156116bb57600080fd5b6116c78b828c01611459565b999c989b5096995094979396929594505050565b600080604083850312156116ee57600080fd5b50508035926020909101359150565b60006020828403121561170f57600080fd5b813561171a81611436565b9392505050565b60006020828403121561173357600080fd5b815161171a81611436565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808b60601b168352808a60601b16601484015250876028830152866048830152856068830152846088830152828460a8840137506000910160a801908152979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600181815b808511156118115781600019048211156117f7576117f76117c0565b8085161561180457918102915b93841c93908002906117db565b509250929050565b60008261182857506001611248565b8161183557506000611248565b816001811461184b576002811461185557611871565b6001915050611248565b60ff841115611866576118666117c0565b50506001821b611248565b5060208310610133831016604e8410600b8410161715611894575081810a611248565b61189e83836117d6565b80600019048211156118b2576118b26117c0565b029392505050565b600061171a8383611819565b634e487b7160e01b600052601260045260246000fd5b6000826118eb576118eb6118c6565b500490565b6000826118ff576118ff6118c6565b500690565b60005b8381101561191f578181015183820152602001611907565b50506000910152565b6001600160a01b0384168152826020820152606060408201526000825180606084015261195c816080850160208701611904565b601f01601f191691909101608001949350505050565b6000806040838503121561198557600080fd5b8251801515811461199557600080fd5b602084015190925067ffffffffffffffff808211156119b357600080fd5b818501915085601f8301126119c757600080fd5b8151818111156119d9576119d9611339565b6119ec6020601f19601f8401160161134f565b9150808252866020828501011115611a0357600080fd5b611a14816020840160208601611904565b508092505050925092905056fea26469706673582212200bdab05d434f8e4c7bbc746a5f99a1bd395367eb3d3e116c9628eb99682224fc64736f6c63430008110033",
"linkReferences": {},
"deployedLinkReferences": {}
}