3.6k txs
4.3k calls
constructor
constructor()
functions
bridgeAdapters
viewfunction bridgeAdapters(uint8 id) view returns (address bridgeAdapter)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
executor
viewfunction executor() view returns (address)
feeManager
viewfunction feeManager() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isActive
viewfunction isActive() view returns (bool)
owner
viewfunction owner() view returns (address)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swappers
viewfunction swappers(uint8 id) view returns (address swapper)
wrapped
viewfunction wrapped() view returns (address)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
bridgeAndExecute
payablefunction bridgeAndExecute(tuple instructions, tuple feeData, bytes signature) payable
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
receiveFromBridge
payablefunction receiveFromBridge(tuple postBridge, address target, address paymentOperator, bytes payload, address refund, uint8 bridgeId, bytes32 txId) payable
registerBridge
nonpayablefunction registerBridge(address bridge)
registerSwapper
nonpayablefunction registerSwapper(address swapper)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setExecutor
nonpayablefunction setExecutor(address _executor)
setFeeManager
nonpayablefunction setFeeManager(address _feeManager)
setWrapped
nonpayablefunction setWrapped(address _wrapped)
swapAndExecute
payablefunction swapAndExecute(tuple instructions, tuple feeData, bytes signature) payable
toggleActive
nonpayablefunction toggleActive()
withdraw
nonpayablefunction withdraw(address to, uint256 amount)
withdrawERC20
nonpayablefunction withdrawERC20(address token, address to, uint256 amount)
events
BridgeCalled
event BridgeCalled(bytes32 indexed txId, bytes4 indexed appId, uint256 indexed dstChainId, (uint256 amountIn, address tokenIn, address tokenOut, address target, bytes4 affiliateId, (address recipient, address token, uint256 amount)[] fees) txInfo)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
ReceivedFromBridge
event ReceivedFromBridge(bytes32 indexed txId)
RegisteredBridgeAdapter
event RegisteredBridgeAdapter(address bridge)
RegisteredSwapper
event RegisteredSwapper(address swapper)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SetExecutor
event SetExecutor(address executor)
SetFeeManager
event SetFeeManager(address feeManager)
SetIsActive
event SetIsActive(bool isActive)
SetWrapped
event SetWrapped(address wrapped)
Swapped
event Swapped(bytes32 indexed txId, bytes4 indexed appId, (uint256 amountIn, address tokenIn, address tokenOut, address target, bytes4 affiliateId, (address recipient, address token, uint256 amount)[] fees) txInfo)
Withdraw
event Withdraw(address to, uint256 amount)
WithdrawERC20
event WithdrawERC20(address token, address to, uint256 amount)
errors
ExpiredFees
error ExpiredFees()
InvalidFees
error InvalidFees()
InvalidRecipient
error InvalidRecipient()
InvalidSwapParams
error InvalidSwapParams()
NotEnoughNative
error NotEnoughNative()
OnlyBridgeAdapter
error OnlyBridgeAdapter()
OnlyWrapped
error OnlyWrapped()
ProtocolFeeCannotBeFetched
error ProtocolFeeCannotBeFetched()
RefundFailed
error RefundFailed()
UTBPaused
error UTBPaused()
WithdrawalFailed
error WithdrawalFailed()
creation bytecode
0x60806040526008805460ff191660011790553480156200001e57600080fd5b5033620151808180620000785760405162461bcd60e51b815260206004820152601e60248201527f416363657373436f6e74726f6c3a20302064656661756c742061646d696e000060448201526064015b60405180910390fd5b600180546001600160d01b0316600160d01b65ffffffffffff851602179055620000a4600082620000ad565b50505062000201565b8162000151576000620000c86002546001600160a01b031690565b6001600160a01b031614620001355760405162461bcd60e51b815260206004820152602c60248201527f416363657373436f6e74726f6c3a2064656661756c742061646d696e20616c7260448201526b1958591e4819dc985b9d195960a21b60648201526084016200006f565b600280546001600160a01b0319166001600160a01b0383161790555b6200015d828262000161565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200015d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001bd3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b613e7680620002116000396000f3fe6080604052600436106102085760003560e01c8063649a5ec711610118578063c34c08e5116100a0578063d0fb02031161006f578063d0fb02031461063d578063d547741f1461065d578063d602b9fd1461067d578063e547f18914610692578063f3fef3a3146106b257600080fd5b8063c34c08e5146105b8578063cc8463c8146105d8578063cefc1429146105ed578063cf6eefb71461060257600080fd5b80639be111d1116100e75780639be111d114610506578063a1eda53c14610519578063a217fddf1461054d578063c1aa293814610562578063c273d5991461058257600080fd5b8063649a5ec71461049357806384ef8ffc146104b35780638da5cb5b146104d157806391d14854146104e657600080fd5b806329c68dc11161019b578063472d35b91161016a578063472d35b9146103d25780634d70c1be146103f257806350e70d48146104405780635327a3d214610460578063634e93da1461047357600080fd5b806329c68dc11461035d5780632f2ff15d1461037257806336568abe1461039257806344004cc1146103b257600080fd5b80630fd0d448116101d75780630fd0d448146102d25780631c3c0ea8146102e557806322f3e2d414610305578063248a9ca31461031f57600080fd5b806301ffc9a71461023f578063022d63fb14610274578063085cdc901461029d5780630aa6220b146102bd57600080fd5b3661023a576005546001600160a01b031633146102385760405163699483ad60e11b815260040160405180910390fd5b005b600080fd5b34801561024b57600080fd5b5061025f61025a366004612d41565b6106d2565b60405190151581526020015b60405180910390f35b34801561028057600080fd5b50620697805b60405165ffffffffffff909116815260200161026b565b3480156102a957600080fd5b506102386102b8366004612d7c565b6106fd565b3480156102c957600080fd5b50610238610801565b6102386102e0366004612fc4565b610817565b3480156102f157600080fd5b50610238610300366004612d7c565b610896565b34801561031157600080fd5b5060085461025f9060ff1681565b34801561032b57600080fd5b5061034f61033a366004613081565b60009081526020819052604090206001015490565b60405190815260200161026b565b34801561036957600080fd5b50610238610912565b34801561037e57600080fd5b5061023861038d36600461309a565b610986565b34801561039e57600080fd5b506102386103ad36600461309a565b610a00565b3480156103be57600080fd5b506102386103cd3660046130ca565b610aea565b3480156103de57600080fd5b506102386103ed366004612d7c565b610b94565b3480156103fe57600080fd5b5061042861040d36600461310b565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026b565b34801561044c57600080fd5b50600554610428906001600160a01b031681565b61023861046e366004613188565b610c09565b34801561047f57600080fd5b5061023861048e366004612d7c565b610e05565b34801561049f57600080fd5b506102386104ae36600461330b565b610e19565b3480156104bf57600080fd5b506002546001600160a01b0316610428565b3480156104dd57600080fd5b50610428610e2d565b3480156104f257600080fd5b5061025f61050136600461309a565b610e46565b610238610514366004613333565b610e6f565b34801561052557600080fd5b5061052e611125565b6040805165ffffffffffff93841681529290911660208301520161026b565b34801561055957600080fd5b5061034f600081565b34801561056e57600080fd5b5061023861057d366004612d7c565b611179565b34801561058e57600080fd5b5061042861059d36600461310b565b6006602052600090815260409020546001600160a01b031681565b3480156105c457600080fd5b50600354610428906001600160a01b031681565b3480156105e457600080fd5b506102866111ee565b3480156105f957600080fd5b5061023861124d565b34801561060e57600080fd5b506106176112cb565b604080516001600160a01b03909316835265ffffffffffff90911660208301520161026b565b34801561064957600080fd5b50600454610428906001600160a01b031681565b34801561066957600080fd5b5061023861067836600461309a565b6112ec565b34801561068957600080fd5b50610238611369565b34801561069e57600080fd5b506102386106ad366004612d7c565b61137c565b3480156106be57600080fd5b506102386106cd36600461338a565b61146f565b60006001600160e01b031982166318a4c3c360e11b14806106f757506106f782611570565b92915050565b610708600033610e46565b61072d5760405162461bcd60e51b8152600401610724906133b6565b60405180910390fd5b60008190508160066000836001600160a01b031663b3cea2176040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079b91906133da565b60ff168152602080820192909252604090810160002080546001600160a01b0319166001600160a01b039485161790555191841682527f045bca16533d0fc816946d4fed24579b6a647b413e265262ef42f57e3b97ccbe91015b60405180910390a15050565b600061080c816115a5565b6108146115af565b50565b60ff82166000908152600760205260409020546001600160a01b0316331461085257604051634d42556160e11b815260040160405180910390fd5b60405181907fc221aef60cd94200debd47cbc2c50629463a09ea1b11edf02613c8a1cfb9285090600090a261088c878787878760006115bc565b5050505050505050565b6108a1600033610e46565b6108bd5760405162461bcd60e51b8152600401610724906133b6565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f34d4f6a542f13533b1eaa27e7ae8691368028d05b7075ad7a6c34df851a67a43906020015b60405180910390a150565b61091d600033610e46565b6109395760405162461bcd60e51b8152600401610724906133b6565b6008805460ff8082161560ff1990921682179092556040519116151581527faeb03a50c9701616b8cbe9323999e71acdc40e04ba61e689beca2096f0df5c4b9060200160405180910390a1565b816109f25760405162461bcd60e51b815260206004820152603660248201527f416363657373436f6e74726f6c3a2063616e2774206469726563746c79206772604482015275616e742064656661756c742061646d696e20726f6c6560501b6064820152608401610724565b6109fc8282611702565b5050565b81158015610a1b57506002546001600160a01b038281169116145b15610ae057600080610a2b6112cb565b90925090506001600160a01b038216158015610a4e575065ffffffffffff811615155b8015610a6157504265ffffffffffff8216105b610acb5760405162461bcd60e51b815260206004820152603560248201527f416363657373436f6e74726f6c3a206f6e6c792063616e2072656e6f756e636560448201527420696e2074776f2064656c6179656420737465707360581b6064820152608401610724565b50506001805465ffffffffffff60a01b191690555b6109fc828261172c565b610af5600033610e46565b610b115760405162461bcd60e51b8152600401610724906133b6565b6001600160a01b038216610b3857604051634e46966960e11b815260040160405180910390fd5b610b438383836117a6565b604080516001600160a01b038086168252841660208201529081018290527f33c35f9541201e342d5e7467016e65a0a06182eb12a5f17103f71cec95b6cb29906060015b60405180910390a1505050565b610b9f600033610e46565b610bbb5760405162461bcd60e51b8152600401610724906133b6565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5d0517e3a4eabea892d9750138cd21d4a6cf3b935b43d0598df7055f463819b290602001610907565b60085460ff16610c2c5760405163f35a207b60e01b815260040160405180910390fd5b6060840151610c3e6020850185612d41565b6001600160e01b0319168561012001517fc5abfba86de3bfb43bd15b6d753b93a158372fb5b4911a88d098646fe1b66de66040518060c00160405280896000015160200151600001518152602001896000015160200151606001516001600160a01b03168152602001896020015160200151608001516001600160a01b0316815260200189608001516001600160a01b03168152602001886020016020810190610ce89190612d41565b6001600160e01b0319168152602001610d0460a08a018a6133f7565b808060200260200160405190810160405280939291908181526020016000905b82821015610d5057610d416060830286013681900381019061343f565b81526020019060010190610d24565b5050505050815250604051610d6591906134a9565b60405180910390a46000610da5848660000151602001518787604051602001610d8f929190613755565b6040516020818303038152906040528686611809565b9050600080610db78760000151611a8f565b6020808b0151015182905260c08a01519194509250610ded9150600083610dde873461386f565b610de8919061386f565b611ad9565b610dfc82876040013589611b72565b50505050505050565b6000610e10816115a5565b6109fc82611c8d565b6000610e24816115a5565b6109fc82611d00565b6000610e416002546001600160a01b031690565b905090565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60085460ff16610e925760405163f35a207b60e01b815260040160405180910390fd5b610e9f6020840184612d41565b6001600160e01b0319168460c001357ff76b0a9f3f6bd67b451ced26ad2cb170e00275721f450e2f7218a0fd53bb6b826040518060c00160405280888060000190610eea9190613882565b610ef89060208101906138a2565b358152602001610f088980613882565b610f169060208101906138a2565b610f27906080810190606001612d7c565b6001600160a01b03168152602001610f3f8980613882565b610f4d9060208101906138a2565b610f5e9060a0810190608001612d7c565b6001600160a01b03168152602001886020016020810190610f7f9190612d7c565b6001600160a01b03168152602001876020016020810190610fa09190612d41565b6001600160e01b0319168152602001610fbc60a08901896133f7565b808060200260200160405190810160405280939291908181526020016000905b8282101561100857610ff96060830286013681900381019061343f565b81526020019060010190610fdc565b505050505081525060405161101d91906134a9565b60405180910390a3600061105f846110358780613882565b6110439060208101906138a2565b61104c906138b8565b8787604051602001610d8f929190613a18565b90506110f361106e8680613882565b61107790613aea565b6110876040880160208901612d7c565b6110976060890160408a01612d7c565b6110a460a08a018a613af6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110e99250505060808b0160608c01612d7c565b8a608001356115bc565b6110fd9082613b3c565b905061111e6111126080870160608801612d7c565b6000610de8843461386f565b5050505050565b600254600090600160d01b900465ffffffffffff16801515801561115157504265ffffffffffff821610155b61115d57600080611171565b600254600160a01b900465ffffffffffff16815b915091509091565b611184600033610e46565b6111a05760405162461bcd60e51b8152600401610724906133b6565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f0de7811252327f6943a2aef15bd0fba109c2268b233d76c788361d2bb1e426b190602001610907565b600254600090600160d01b900465ffffffffffff16801515801561121957504265ffffffffffff8216105b61123457600154600160d01b900465ffffffffffff16611247565b600254600160a01b900465ffffffffffff165b91505090565b60006112576112cb565b509050336001600160a01b038216146112c35760405162461bcd60e51b815260206004820152602860248201527f416363657373436f6e74726f6c3a2070656e64696e672061646d696e206d75736044820152671d081858d8d95c1d60c21b6064820152608401610724565b610814611d69565b6001546001600160a01b03811691600160a01b90910465ffffffffffff1690565b8161135f5760405162461bcd60e51b815260206004820152603760248201527f416363657373436f6e74726f6c3a2063616e2774206469726563746c7920726560448201527f766f6b652064656661756c742061646d696e20726f6c650000000000000000006064820152608401610724565b6109fc8282611e34565b6000611374816115a5565b610814611e59565b611387600033610e46565b6113a35760405162461bcd60e51b8152600401610724906133b6565b60008190508160076000836001600160a01b031663b3cea2176040518163ffffffff1660e01b81526004016020604051808303816000875af11580156113ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141191906133da565b60ff168152602080820192909252604090810160002080546001600160a01b0319166001600160a01b039485161790555191841682527f6f4418111fb0cb2aaf22842dc0ae3034310e55b00eb4428c118ffca3b871524d91016107f5565b61147a600033610e46565b6114965760405162461bcd60e51b8152600401610724906133b6565b6001600160a01b0382166114bd57604051634e46966960e11b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461150a576040519150601f19603f3d011682016040523d82523d6000602084013e61150f565b606091505b5050905080611531576040516327fcd9d160e01b815260040160405180910390fd5b604080516001600160a01b0385168152602081018490527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649101610b87565b60006001600160e01b03198216637965db0b60e01b14806106f757506301ffc9a760e01b6001600160e01b03198316146106f7565b6108148133611e64565b6115ba600080611ebd565b565b60008060006115ca89611a8f565b9450909250905083156115e4576115e18484613b3c565b92505b6001600160a01b03821661166d576003546001600160a01b0316638463e1b361160d8684613b3c565b8a8a8a87878c8c6040518963ffffffff1660e01b81526004016116369796959493929190613b4f565b6000604051808303818588803b15801561164f57600080fd5b505af1158015611663573d6000803e3d6000fd5b50505050506116f6565b6003546116859083906001600160a01b031683611f7d565b600354604051638463e1b360e01b81526001600160a01b0390911690638463e1b39086906116c3908c908c908c90899089908e908890600401613b4f565b6000604051808303818588803b1580156116dc57600080fd5b505af11580156116f0573d6000803e3d6000fd5b50505050505b50509695505050505050565b60008281526020819052604090206001015461171d816115a5565b611727838361200c565b505050565b6001600160a01b038116331461179c5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610724565b6109fc82826120b6565b6040516001600160a01b03831660248201526044810182905261172790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526120f1565b60004686608001351461182f57604051632d8768f960e01b815260040160405180910390fd5b856060013542111561185457604051634626666b60e11b815260040160405180910390fd5b6004546001600160a01b031615611a3957600480546040516318fac89160e11b81526001600160a01b03909116916331f59122916118989188918891889101613b9e565b600060405180830381600087803b1580156118b257600080fd5b505af11580156118c6573d6000803e3d6000fd5b506118d992505050604087013582613b3c565b905060006118ea60a08801886133f7565b808060200260200160405190810160405280939291908181526020016000905b82821015611936576119276060830286013681900381019061343f565b8152602001906001019061190a565b5050505050905060005b8151811015611a3657600082828151811061195d5761195d613bce565b6020026020010151905060006001600160a01b031681602001516001600160a01b0316146119a25761199d816020015133836000015184604001516121c6565b611a2d565b805160408083015190516000926001600160a01b031691908381818185875af1925050503d80600081146119f2576040519150601f19603f3d011682016040523d82523d6000602084013e6119f7565b606091505b50509050816040015185611a0b9190613b3c565b945080611a2b57604051630f724b8160e11b815260040160405180910390fd5b505b50600101611940565b50505b60608501516000906001600160a01b031615611a555781611a62565b8551611a62908390613b3c565b905080341015611a855760405163418810fb60e01b815260040160405180910390fd5b5095945050505050565b60008060008084602001519050611aa5856121fe565b60408401519296509094509250611abc908461386f565b9250611ad18160c00151858360400151611ad9565b509193909250565b8015611727576001600160a01b038216611b67576000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b3a576040519150601f19603f3d011682016040523d82523d6000602084013e611b3f565b606091505b5050905080611b6157604051633c31275160e21b815260040160405180910390fd5b50505050565b6117278284836117a6565b6000611b7e82856122c5565b60408084015160ff166000908152600760205220549091506001600160a01b031663e65b8d3082611bb0576000611bb2565b855b611bbc9086613b3c565b604051806101200160405280888152602001866020015181526020018660600151815260200186608001516001600160a01b031681526020018660a001516001600160a01b031681526020018660e00151815260200186610100015181526020018660c001516001600160a01b031681526020018661012001518152506040518363ffffffff1660e01b8152600401611c559190613be4565b6000604051808303818588803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050505050505050565b6000611c976111ee565b611ca042612387565b611caa9190613cb3565b9050611cb682826123f2565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b6000611d0b82612471565b611d1442612387565b611d1e9190613cb3565b9050611d2a8282611ebd565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b91016107f5565b600080611d746112cb565b91509150611d898165ffffffffffff16151590565b8015611d9c57504265ffffffffffff8216105b611df95760405162461bcd60e51b815260206004820152602860248201527f416363657373436f6e74726f6c3a207472616e736665722064656c6179206e6f6044820152671d081c185cdcd95960c21b6064820152608401610724565b611e156000611e106002546001600160a01b031690565b6120b6565b611e2060008361200c565b5050600180546001600160d01b0319169055565b600082815260208190526040902060010154611e4f816115a5565b61172783836120b6565b6115ba6000806123f2565b611e6e8282610e46565b6109fc57611e7b816124c0565b611e868360206124d2565b604051602001611e97929190613cd9565b60408051601f198184030181529082905262461bcd60e51b825261072491600401613d4e565b600254600160d01b900465ffffffffffff168015611f40574265ffffffffffff82161015611f1657600254600180546001600160d01b0316600160a01b90920465ffffffffffff16600160d01b02919091179055611f40565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b50600280546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611fce848261266d565b611b61576040516001600160a01b03841660248201526000604482015261200290859063095ea7b360e01b906064016117d2565b611b6184826120f1565b816120ac5760006120256002546001600160a01b031690565b6001600160a01b0316146120905760405162461bcd60e51b815260206004820152602c60248201527f416363657373436f6e74726f6c3a2064656661756c742061646d696e20616c7260448201526b1958591e4819dc985b9d195960a21b6064820152608401610724565b600280546001600160a01b0319166001600160a01b0383161790555b6109fc8282612714565b811580156120d157506002546001600160a01b038281169116145b156120e757600280546001600160a01b03191690555b6109fc8282612798565b6000612146826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127fd9092919063ffffffff16565b90508051600014806121675750808060200190518101906121679190613d61565b6117275760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610724565b6040516001600160a01b0380851660248301528316604482015260648101829052611b619085906323b872dd60e01b906084016117d2565b600080600080846020015190506122198160e0015151151590565b1561225257845160ff166000908152600660205260409020546122469082906001600160a01b0316612814565b935093509350506122be565b608081015160608201516001600160a01b0391821691160361227757612246816129b8565b61228081612a04565b1561228e5761224681612a39565b61229781612ac4565b156122a55761224681612af6565b604051635037072d60e01b815260040160405180910390fd5b9193909250565b60408083015160ff1660009081526007602052818120546101008501519251631c624af560e01b815291926001600160a01b039091169183918391631c624af59161231291600401613d4e565b6020604051808303816000875af1158015612331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123559190613d83565b90506001600160a01b0381161561237c57612371818386611f7d565b6000925050506106f7565b506001949350505050565b600065ffffffffffff8211156123ee5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610724565b5090565b60006123fc6112cb565b6001805465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617179055915061243e90508165ffffffffffff16151590565b15611727576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a1505050565b60008061247c6111ee565b90508065ffffffffffff168365ffffffffffff16116124a45761249f8382613da0565b6124b9565b6124b965ffffffffffff841662069780612b95565b9392505050565b60606106f76001600160a01b03831660145b606060006124e1836002613dbf565b6124ec906002613b3c565b6001600160401b0381111561250357612503612d99565b6040519080825280601f01601f19166020018201604052801561252d576020820181803683370190505b509050600360fc1b8160008151811061254857612548613bce565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061257757612577613bce565b60200101906001600160f81b031916908160001a905350600061259b846002613dbf565b6125a6906001613b3c565b90505b600181111561261e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106125da576125da613bce565b1a60f81b8282815181106125f0576125f0613bce565b60200101906001600160f81b031916908160001a90535060049490941c9361261781613dd6565b90506125a9565b5083156124b95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610724565b6000806000846001600160a01b03168460405161268a9190613ded565b6000604051808303816000865af19150503d80600081146126c7576040519150601f19603f3d011682016040523d82523d6000602084013e6126cc565b606091505b50915091508180156126f65750805115806126f65750808060200190518101906126f69190613d61565b801561270b57506001600160a01b0385163b15155b95945050505050565b61271e8282610e46565b6109fc576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556127543390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6127a28282610e46565b156109fc576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606061280c8484600085612bab565b949350505050565b6060820151600090819081906001600160a01b03166128aa57600554855160408051630d0e30db60e41b815290516001600160a01b039093169263d0e30db0929160048082019260009290919082900301818588803b15801561287657600080fd5b505af115801561288a573d6000803e3d6000fd5b505087516005546001600160a01b031660608a015293506128be92505050565b6128be8560600151333088600001516121c6565b6128d18560600151858760000151611f7d565b604051630b85f61960e21b81526001600160a01b03851690632e17d864906128fd908890600401613dff565b60408051808303816000875af115801561291b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293f9190613e12565b90935091506001600160a01b0383166129b157600554604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561299857600080fd5b505af11580156129ac573d6000803e3d6000fd5b505050505b9250925092565b6060810151600090819081906001600160a01b03166129df575050815160009150806122be565b6129f38460600151333087600001516121c6565b5050506060810151815160006122be565b60608101516000906001600160a01b03161580156106f7575060055460808301516001600160a01b0390811691161492915050565b6000806000600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db085600001516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a9257600080fd5b505af1158015612aa6573d6000803e3d6000fd5b505060055496516001600160a01b0390971697879650945050505050565b60055460608201516000916001600160a01b0391821691161480156106f7575050608001516001600160a01b03161590565b6000806000612b20600560009054906101000a90046001600160a01b0316333087600001516121c6565b6005548451604051632e1a7d4d60e01b81526001600160a01b0390921691632e1a7d4d91612b549160040190815260200190565b600060405180830381600087803b158015612b6e57600080fd5b505af1158015612b82573d6000803e3d6000fd5b5050945160009690955086945092505050565b6000818310612ba457816124b9565b5090919050565b606082471015612c0c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610724565b600080866001600160a01b03168587604051612c289190613ded565b60006040518083038185875af1925050503d8060008114612c65576040519150601f19603f3d011682016040523d82523d6000602084013e612c6a565b606091505b5091509150612c7b87838387612c86565b979650505050505050565b60608315612cf5578251600003612cee576001600160a01b0385163b612cee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610724565b508161280c565b61280c8383815115612d0a5781518083602001fd5b8060405162461bcd60e51b81526004016107249190613d4e565b80356001600160e01b031981168114612d3c57600080fd5b919050565b600060208284031215612d5357600080fd5b6124b982612d24565b6001600160a01b038116811461081457600080fd5b8035612d3c81612d5c565b600060208284031215612d8e57600080fd5b81356124b981612d5c565b634e487b7160e01b600052604160045260246000fd5b60405161010081016001600160401b0381118282101715612dd257612dd2612d99565b60405290565b60405161014081016001600160401b0381118282101715612dd257612dd2612d99565b60ff8116811461081457600080fd5b8035612d3c81612dfb565b600082601f830112612e2657600080fd5b81356001600160401b0380821115612e4057612e40612d99565b604051601f8301601f19908116603f01168101908282118183101715612e6857612e68612d99565b81604052838152866020858801011115612e8157600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006101008284031215612eb457600080fd5b612ebc612daf565b9050813581526020820135602082015260408201356040820152612ee260608301612d71565b6060820152612ef360808301612d71565b6080820152612f0460a08301612e0a565b60a0820152612f1560c08301612d71565b60c082015260e08201356001600160401b03811115612f3357600080fd5b612f3f84828501612e15565b60e08301525092915050565b600060408284031215612f5d57600080fd5b604051604081016001600160401b038282108183111715612f8057612f80612d99565b8160405282935084359150612f9482612dfb565b90825260208401359080821115612faa57600080fd5b50612fb785828601612ea1565b6020830152505092915050565b600080600080600080600060e0888a031215612fdf57600080fd5b87356001600160401b0380821115612ff657600080fd5b6130028b838c01612f4b565b985060208a0135915061301482612d5c565b90965060408901359061302682612d5c565b9095506060890135908082111561303c57600080fd5b506130498a828b01612e15565b945050608088013561305a81612d5c565b925060a088013561306a81612dfb565b8092505060c0880135905092959891949750929550565b60006020828403121561309357600080fd5b5035919050565b600080604083850312156130ad57600080fd5b8235915060208301356130bf81612d5c565b809150509250929050565b6000806000606084860312156130df57600080fd5b83356130ea81612d5c565b925060208401356130fa81612d5c565b929592945050506040919091013590565b60006020828403121561311d57600080fd5b81356124b981612dfb565b600060c0828403121561313a57600080fd5b50919050565b60008083601f84011261315257600080fd5b5081356001600160401b0381111561316957600080fd5b60208301915083602082850101111561318157600080fd5b9250929050565b6000806000806060858703121561319e57600080fd5b84356001600160401b03808211156131b557600080fd5b9086019061014082890312156131ca57600080fd5b6131d2612dd8565b8235828111156131e157600080fd5b6131ed8a828601612f4b565b82525060208301358281111561320257600080fd5b61320e8a828601612f4b565b60208301525061322060408401612e0a565b60408201526060830135606082015261323b60808401612d71565b608082015261324c60a08401612d71565b60a082015261325d60c08401612d71565b60c082015260e08301358281111561327457600080fd5b6132808a828601612e15565b60e083015250610100808401358381111561329a57600080fd5b6132a68b828701612e15565b8284015250506101208084013581830152508096505060208701359150808211156132d057600080fd5b6132dc88838901613128565b945060408701359150808211156132f257600080fd5b506132ff87828801613140565b95989497509550505050565b60006020828403121561331d57600080fd5b813565ffffffffffff811681146124b957600080fd5b6000806000806060858703121561334957600080fd5b84356001600160401b038082111561336057600080fd5b9086019060e0828903121561337457600080fd5b909450602086013590808211156132d057600080fd5b6000806040838503121561339d57600080fd5b82356133a881612d5c565b946020939093013593505050565b6020808252600a908201526927b7363c9030b236b4b760b11b604082015260600190565b6000602082840312156133ec57600080fd5b81516124b981612dfb565b6000808335601e1984360301811261340e57600080fd5b8301803591506001600160401b0382111561342857600080fd5b602001915060608102360382131561318157600080fd5b60006060828403121561345157600080fd5b604051606081018181106001600160401b038211171561347357613473612d99565b604052823561348181612d5c565b8152602083013561349181612d5c565b60208201526040928301359281019290925250919050565b6000602080835260e0830184518285015281850151604060018060a01b03808316604088015260408801519250606081841660608901528160608a015116608089015263ffffffff60e01b60808a01511660a089015260a0890151935060c0808901528484518087526101008a0191508786019650600095505b808610156135585786518051851683528881015185168984015285015185830152958701956001959095019490820190613523565b509998505050505050505050565b60005b83811015613581578181015183820152602001613569565b50506000910152565b600081518084526135a2816020860160208601613566565b601f01601f19169290920160200192915050565b6000610100825184526020830151602085015260408301516040850152606083015160018060a01b03808216606087015280608086015116608087015260ff60a08601511660a08701528060c08601511660c0870152505060e08301518160e086015261270b8286018261358a565b60ff8151168252600060208201516040602085015261280c60408501826135b6565b8183526000602080850194508260005b858110156136a657813561366a81612d5c565b6001600160a01b039081168852828401359061368582612d5c565b16878401526040828101359088015260609687019690910190600101613657565b509495945050505050565b60006001600160e01b0319806136c684612d24565b168452806136d660208501612d24565b1660208501525060408201356040840152606082013560608401526080820135608084015260a0820135601e1983360301811261371257600080fd5b82016020810190356001600160401b0381111561372e57600080fd5b60608102360382131561374057600080fd5b60c060a086015261270b60c086018284613647565b6040815260008351610140806040850152613774610180850183613625565b91506020860151603f19808685030160608701526137928483613625565b9350604088015191506137aa608087018360ff169052565b606088015160a087015260808801516001600160a01b03811660c0880152915060a08801516001600160a01b03811660e0880152915060c088015191506101006137fe818801846001600160a01b03169052565b60e0890151925061012082888703018189015261381b868561358a565b9550818a01519350828887030185890152613836868561358a565b9550808a01516101608901525050505050828103602084015261270b81856136b1565b634e487b7160e01b600052601160045260246000fd5b818103818111156106f7576106f7613859565b60008235603e1983360301811261389857600080fd5b9190910192915050565b6000823560fe1983360301811261389857600080fd5b60006106f73683612ea1565b6000808335601e198436030181126138db57600080fd5b83016020810192503590506001600160401b038111156138fa57600080fd5b80360382131561318157600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000813561393f81612dfb565b60ff16835260208201353683900360fe1901811261395c57600080fd5b828101905060406020850152803560408501526020810135606085015260408101356080850152606081013561399181612d5c565b6001600160a01b031660a08501526139ab60808201612d71565b6001600160a01b031660c08501526139c560a08201612e0a565b60ff1660e08501526139d960c08201612d71565b6101006139f0818701836001600160a01b03169052565b6139fd60e08401846138c4565b93509150806101208701525061270b61014086018383613909565b6040815260008335603e19853603018112613a3257600080fd5b60e06040840152613a496101208401868301613932565b9050613a5760208601612d71565b6001600160a01b03166060840152613a7160408601612d71565b6001600160a01b03166080840152613a8b60608601612d71565b6001600160a01b03811660a085015250608085013560c0840152613ab260a08601866138c4565b848303603f190160e0860152613ac9838284613909565b9250505060c0850135610100840152828103602084015261270b81856136b1565b60006106f73683612f4b565b6000808335601e19843603018112613b0d57600080fd5b8301803591506001600160401b03821115613b2757600080fd5b60200191503681900382131561318157600080fd5b808201808211156106f7576106f7613859565b600060018060a01b03808a168352808916602084015260e06040840152613b7960e084018961358a565b96811660608401526080830195909552509190921660a082015260c001529392505050565b604081526000613bb1604083018661358a565b8281036020840152613bc4818587613909565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b602081528151602082015260006020830151610120806040850152613c0d610140850183613625565b9150604085015160608501526060850151613c3360808601826001600160a01b03169052565b5060808501516001600160a01b03811660a08601525060a0850151601f19808685030160c0870152613c65848361358a565b935060c08701519150808685030160e087015250613c83838261358a565b92505060e0850151610100613ca2818701836001600160a01b03169052565b959095015193019290925250919050565b65ffffffffffff818116838216019080821115613cd257613cd2613859565b5092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613d11816017850160208801613566565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613d42816028840160208801613566565b01602801949350505050565b6020815260006124b9602083018461358a565b600060208284031215613d7357600080fd5b815180151581146124b957600080fd5b600060208284031215613d9557600080fd5b81516124b981612d5c565b65ffffffffffff828116828216039080821115613cd257613cd2613859565b80820281158282048414176106f7576106f7613859565b600081613de557613de5613859565b506000190190565b60008251613898818460208701613566565b6020815260006124b960208301846135b6565b60008060408385031215613e2557600080fd5b8251613e3081612d5c565b602093909301519294929350505056fea2646970667358221220418d495d7ecf002aba870f93100a51d069dc18ec8a40430bef3f505cdd71924064736f6c63430008180033