557 txs
541 calls
constructor
constructor(uint8 domainID, address[] initialRelayers, uint256 initialRelayerThreshold, uint256 fee, uint256 expiry)
functions
_depositCounts
viewfunction _depositCounts(uint8) view returns (uint64)
_domainID
viewfunction _domainID() view returns (uint8)
_expiry
viewfunction _expiry() view returns (uint40)
_fee
viewfunction _fee() view returns (uint128)
_hasVotedOnProposal
viewfunction _hasVotedOnProposal(uint72 destNonce, bytes32 dataHash, address relayer) view returns (bool)
_relayerThreshold
viewfunction _relayerThreshold() view returns (uint8)
_resourceIDToHandlerAddress
viewfunction _resourceIDToHandlerAddress(bytes32) view returns (address)
_totalRelayers
viewfunction _totalRelayers() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getProposal
viewfunction getProposal(uint8 originDomainID, uint64 depositNonce, bytes32 dataHash) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMemberIndex
viewfunction getRoleMemberIndex(bytes32 role, address account) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isRelayer
viewfunction isRelayer(address relayer) view returns (bool)
isValidForwarder
viewfunction isValidForwarder(address) view returns (bool)
MAX_RELAYERS
viewfunction MAX_RELAYERS() view returns (uint256)
paused
viewfunction paused() view returns (bool)
RELAYER_ROLE
viewfunction RELAYER_ROLE() view returns (bytes32)
adminAddRelayer
nonpayablefunction adminAddRelayer(address relayerAddress)
adminChangeFee
nonpayablefunction adminChangeFee(uint256 newFee)
adminChangeRelayerThreshold
nonpayablefunction adminChangeRelayerThreshold(uint256 newThreshold)
adminPauseTransfers
nonpayablefunction adminPauseTransfers()
adminRemoveRelayer
nonpayablefunction adminRemoveRelayer(address relayerAddress)
adminSetBurnable
nonpayablefunction adminSetBurnable(address handlerAddress, address tokenAddress)
adminSetDepositNonce
nonpayablefunction adminSetDepositNonce(uint8 domainID, uint64 nonce)
adminSetForwarder
nonpayablefunction adminSetForwarder(address forwarder, bool valid)
adminSetGenericResource
nonpayablefunction adminSetGenericResource(address handlerAddress, bytes32 resourceID, address contractAddress, bytes4 depositFunctionSig, uint256 depositFunctionDepositerOffset, bytes4 executeFunctionSig)
adminSetResource
nonpayablefunction adminSetResource(address handlerAddress, bytes32 resourceID, address tokenAddress)
adminUnpauseTransfers
nonpayablefunction adminUnpauseTransfers()
adminWithdraw
nonpayablefunction adminWithdraw(address handlerAddress, bytes data)
cancelProposal
nonpayablefunction cancelProposal(uint8 domainID, uint64 depositNonce, bytes32 dataHash)
deposit
payablefunction deposit(uint8 destinationDomainID, bytes32 resourceID, bytes data) payable
executeProposal
nonpayablefunction executeProposal(uint8 domainID, uint64 depositNonce, bytes data, bytes32 resourceID, bool revertOnFail)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceAdmin
nonpayablefunction renounceAdmin(address newAdmin)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
transferFunds
nonpayablefunction transferFunds(address[] addrs, uint256[] amounts)
voteProposal
nonpayablefunction voteProposal(uint8 domainID, uint64 depositNonce, bytes32 resourceID, bytes data)
events
Deposit
event Deposit(uint8 destinationDomainID, bytes32 resourceID, uint64 depositNonce, address indexed user, bytes data, bytes handlerResponse)
FailedHandlerExecution
event FailedHandlerExecution(bytes lowLevelData)
Paused
event Paused(address account)
ProposalEvent
event ProposalEvent(uint8 originDomainID, uint64 depositNonce, uint8 status, bytes32 dataHash)
ProposalVote
event ProposalVote(uint8 originDomainID, uint64 depositNonce, uint8 status, bytes32 dataHash)
RelayerAdded
event RelayerAdded(address relayer)
RelayerRemoved
event RelayerRemoved(address relayer)
RelayerThresholdChanged
event RelayerThresholdChanged(uint256 newThreshold)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
creation bytecode
0x60806040523480156200001157600080fd5b5060405162003da538038062003da5833981016040819052620000349162000422565b6002805460ff191660ff87161790556200004e8362000155565b6002805460ff929092166101000261ff001990921691909117905562000074826200018d565b600280546001600160801b0392909216620100000262010000600160901b0319909216919091179055620000a881620001c3565b6002805464ffffffffff92909216600160901b0264ffffffffff60901b19909216919091179055620000e56000620000df620001f7565b6200023a565b60005b84518110156200014957620001407fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48683815181106200012c576200012c6200052b565b60200260200101516200024a60201b60201c565b600101620000e8565b50505050505062000541565b600060ff82111562000189576040516306dfcc6560e41b815260086004820152602481018390526044015b60405180910390fd5b5090565b60006001600160801b0382111562000189576040516306dfcc6560e41b8152608060048201526024810183905260440162000180565b600064ffffffffff82111562000189576040516306dfcc6560e41b8152602860048201526024810183905260440162000180565b600033601436108015906200022457506001600160a01b03811660009081526005602052604090205460ff165b1562000235575060131936013560601c5b919050565b620002468282620002d7565b5050565b60008281526001602052604090206002015462000271906200026b620001f7565b62000345565b6200023a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b606482015260840162000180565b6000828152600160205260409020620002f1908262000368565b15620002465762000301620001f7565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526001602052604081206200035f90836200037f565b90505b92915050565b60006200035f836001600160a01b038416620003a2565b6001600160a01b038116600090815260018301602052604081205415156200035f565b6000818152600183016020526040812054620003eb5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000362565b50600062000362565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200023557600080fd5b600080600080600060a086880312156200043b57600080fd5b855160ff811681146200044d57600080fd5b602087810151919650906001600160401b03808211156200046d57600080fd5b818901915089601f8301126200048257600080fd5b815181811115620004975762000497620003f4565b8060051b604051601f19603f83011681018181108582111715620004bf57620004bf620003f4565b60405291825284820192508381018501918c831115620004de57600080fd5b938501935b828510156200050757620004f7856200040a565b84529385019392850192620004e3565b60408c015160608d01516080909d01519b9e919d509b9a9950975050505050505050565b634e487b7160e01b600052603260045260246000fd5b61385480620005516000396000f3fe6080604052600436106102c65760003560e01c806391c404ac11610179578063c5b37c22116100d6578063d15ef64e1161008a578063edc20c3c11610064578063edc20c3c1461087d578063f8c39e441461089d578063ffaac0eb146108cd57600080fd5b8063d15ef64e1461081e578063d547741f1461083e578063d7a9cd791461085e57600080fd5b8063ca15c873116100bb578063ca15c873146107be578063cb10f215146107de578063cdb0f73a146107fe57600080fd5b8063c5b37c2214610724578063c5ec89701461077457600080fd5b80639debb3bd1161012d578063a9cf69fa11610112578063a9cf69fa146106b7578063bd2a1820146106e4578063c0331b3e1461070457600080fd5b80639debb3bd1461068d578063a217fddf146106a257600080fd5b8063926d7d7f1161015e578063926d7d7f1461060d5780639d82dd63146106415780639dd694f41461066157600080fd5b806391c404ac146105cd57806391d14854146105ed57600080fd5b8063541d554811610227578063802aabe8116101db57806384db809f116101c057806384db809f146105255780638c0c26311461058d5780639010d07c146105ad57600080fd5b8063802aabe8146104fb57806380ae1c281461051057600080fd5b80635c975abb1161020c5780635c975abb146104a35780635e1fab0f146104bb5780637febe63f146104db57600080fd5b8063541d5548146104535780635a1ad87c1461048357600080fd5b806336568abe1161027e5780634b0b919d116102635780634b0b919d146103c35780634e056005146104135780634e0df3f61461043357600080fd5b806336568abe146103835780634603ae38146103a357600080fd5b8063206a98fd116102af578063206a98fd14610300578063248a9ca3146103205780632f2ff15d1461036357600080fd5b806305e2ca17146102cb57806317f03ce5146102e0575b600080fd5b6102de6102d9366004612e92565b6108e2565b005b3480156102ec57600080fd5b506102de6102fb366004612f04565b610b30565b34801561030c57600080fd5b506102de61031b366004612f50565b610eab565b34801561032c57600080fd5b5061035061033b366004612fcd565b60009081526001602052604090206002015490565b6040519081526020015b60405180910390f35b34801561036f57600080fd5b506102de61037e366004613008565b61119e565b34801561038f57600080fd5b506102de61039e366004613008565b61123c565b3480156103af57600080fd5b506102de6103be36600461307d565b6112ee565b3480156103cf57600080fd5b506103fa6103de3660046130dd565b60036020526000908152604090205467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161035a565b34801561041f57600080fd5b506102de61042e366004612fcd565b611395565b34801561043f57600080fd5b5061035061044e366004613008565b611415565b34801561045f57600080fd5b5061047361046e3660046130f8565b6114f0565b604051901515815260200161035a565b34801561048f57600080fd5b506102de61049e366004613145565b61151c565b3480156104af57600080fd5b5060005460ff16610473565b3480156104c757600080fd5b506102de6104d63660046130f8565b611628565b3480156104e757600080fd5b506104736104f63660046131a3565b6116cd565b34801561050757600080fd5b506103506117b4565b34801561051c57600080fd5b506102de6117e4565b34801561053157600080fd5b50610568610540366004612fcd565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161035a565b34801561059957600080fd5b506102de6105a83660046131f3565b6117f6565b3480156105b957600080fd5b506105686105c8366004613221565b611888565b3480156105d957600080fd5b506102de6105e8366004612fcd565b6118a7565b3480156105f957600080fd5b50610473610608366004613008565b61195c565b34801561061957600080fd5b506103507fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc481565b34801561064d57600080fd5b506102de61065c3660046130f8565b611974565b34801561066d57600080fd5b5060025461067b9060ff1681565b60405160ff909116815260200161035a565b34801561069957600080fd5b5061035060c881565b3480156106ae57600080fd5b50610350600081565b3480156106c357600080fd5b506106d76106d2366004612f04565b611a5a565b60405161035a91906132ad565b3480156106f057600080fd5b506102de6106ff366004613391565b611b69565b34801561071057600080fd5b506102de61071f366004613424565b611bc5565b34801561073057600080fd5b50600254610753906201000090046fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff909116815260200161035a565b34801561078057600080fd5b506002546107a8907201000000000000000000000000000000000000900464ffffffffff1681565b60405164ffffffffff909116815260200161035a565b3480156107ca57600080fd5b506103506107d9366004612fcd565b612249565b3480156107ea57600080fd5b506102de6107f9366004613493565b612260565b34801561080a57600080fd5b506102de6108193660046130f8565b612332565b34801561082a57600080fd5b506102de6108393660046134b3565b612470565b34801561084a57600080fd5b506102de610859366004613008565b6124b0565b34801561086a57600080fd5b5060025461067b90610100900460ff1681565b34801561088957600080fd5b506102de6108983660046134e8565b612540565b3480156108a957600080fd5b506104736108b83660046130f8565b60056020526000908152604090205460ff1681565b3480156108d957600080fd5b506102de612629565b6108ea612639565b6002546201000090046fffffffffffffffffffffffffffffffff1634146109585760405162461bcd60e51b815260206004820152601660248201527f496e636f72726563742066656520737570706c6965640000000000000000000060448201526064015b60405180910390fd5b60008381526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16806109ca5760405162461bcd60e51b815260206004820181905260248201527f7265736f757263654944206e6f74206d617070656420746f2068616e646c6572604482015260640161094f565b60ff85166000908152600360205260408120805482906109f39067ffffffffffffffff16613541565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905590506000610a24612676565b6040517fb07e54bb000000000000000000000000000000000000000000000000000000008152909150839060009073ffffffffffffffffffffffffffffffffffffffff83169063b07e54bb90610a84908b9087908c908c90600401613593565b6000604051808303816000875af1158015610aa3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610acb91908101906135f7565b90508273ffffffffffffffffffffffffffffffffffffffff167f17bc3181e17a9620a479c24e6c606e474ba84fc036877b768926872e8cd0e11f8a8a878b8b87604051610b1d9695949392919061369a565b60405180910390a2505050505050505050565b610b386126e2565b60ff838116600884901b68ffffffffffffffff0016176000818152600660209081526040808320868452909152808220815160808101909252805493949293919290918391166004811115610b8f57610b8f613243565b6004811115610ba057610ba0613243565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527a010000000000000000000000000000000000000000000000000000810460ff1660408301527b01000000000000000000000000000000000000000000000000000000900464ffffffffff1660609091015280519091506001816004811115610c3457610c34613243565b1480610c5157506002816004811115610c4f57610c4f613243565b145b610c9d5760405162461bcd60e51b815260206004820152601c60248201527f50726f706f73616c2063616e6e6f742062652063616e63656c6c656400000000604482015260640161094f565b600254606083015164ffffffffff7201000000000000000000000000000000000000909204821691610cd09116436136ec565b64ffffffffff1611610d245760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206e6f7420617420657870697279207468726573686f6c64604482015260640161094f565b600480835268ffffffffffffffffff841660009081526006602090815260408083208884529091529020835181548593839160ff1916906001908490811115610d6f57610d6f613243565b02179055506020820151815460408085015160609095015164ffffffffff167b01000000000000000000000000000000000000000000000000000000027affffffffffffffffffffffffffffffffffffffffffffffffffffff60ff9096167a010000000000000000000000000000000000000000000000000000027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff78ffffffffffffffffffffffffffffffffffffffffffffffffff90951661010002949094167fffffffffff0000000000000000000000000000000000000000000000000000ff909316929092179290921793909316929092179055517f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d590610e9b908890889060049089906136ff565b60405180910390a1505050505050565b610eb361279e565b610ebb612639565b600082815260046020908152604080832054905173ffffffffffffffffffffffffffffffffffffffff9091169268ffffffffffffffff0060088a901b1660ff8b1617929091610f109185918a918a9101613735565b60408051601f19818403018152918152815160209283012068ffffffffffffffffff851660009081526006845282812082825290935291209091506002815460ff166004811115610f6357610f63613243565b14610fb05760405162461bcd60e51b815260206004820181905260248201527f50726f706f73616c206d75737420686176652050617373656420737461747573604482015260640161094f565b805460ff1916600317815583851561104f576040517fe248cff200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e248cff290611018908a908d908d90600401613774565b600060405180830381600087803b15801561103257600080fd5b505af1158015611046573d6000803e3d6000fd5b50505050611152565b6040517fe248cff200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e248cff2906110a5908a908d908d90600401613774565b600060405180830381600087803b1580156110bf57600080fd5b505af19250505080156110d0575060015b611152573d8080156110fe576040519150601f19603f3d011682016040523d82523d6000602084013e611103565b606091505b50825460ff191660021783556040517fbd37c1f0d53bb2f33fe4c2104de272fcdeb4d2fef3acdbf1e4ddc3d6833ca3769061113f90839061378e565b60405180910390a1505050505050611196565b7f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d58b8b60038660405161118894939291906136ff565b60405180910390a150505050505b505050505050565b6000828152600160205260409020600201546111bc90610608612676565b61122e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201527f2061646d696e20746f206772616e740000000000000000000000000000000000606482015260840161094f565b611238828261283c565b5050565b611244612676565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840161094f565b61123882826128bf565b6112f6612942565b60005b8381101561138e57848482818110611313576113136137a1565b905060200201602081019061132891906130f8565b73ffffffffffffffffffffffffffffffffffffffff166108fc848484818110611353576113536137a1565b905060200201359081150290604051600060405180830381858888f19350505050158015611385573d6000803e3d6000fd5b506001016112f9565b5050505050565b61139d612942565b6113a6816129c1565b6002805460ff92909216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff9092169190911790556040518181527fa20d6b84cd798a24038be305eff8a45ca82ef54a2aa2082005d8e14c0a4746c8906020015b60405180910390a150565b60008061142184612249565b905060005b8181101561147b578373ffffffffffffffffffffffffffffffffffffffff1661144f8683611888565b73ffffffffffffffffffffffffffffffffffffffff16036114735791506114ea9050565b600101611426565b5060405162461bcd60e51b815260206004820152603260248201527f416363657373436f6e74726f6c3a206163636f756e74206973206e6f7420612060448201527f6d656d626572206f662074686520726f6c650000000000000000000000000000606482015260840161094f565b92915050565b60006114ea7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48361195c565b611524612942565b60008581526004602081905260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a811691821790925592517fde319d99000000000000000000000000000000000000000000000000000000008152918201889052861660248201527fffffffff000000000000000000000000000000000000000000000000000000008086166044830152606482018590528316608482015287919063de319d999060a401600060405180830381600087803b15801561160757600080fd5b505af115801561161b573d6000803e3d6000fd5b5050505050505050505050565b611630612942565b600061163a612676565b90508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116b75760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f742072656e6f756e6365206f6e6573656c66000000000000000000604482015260640161094f565b6116c260008361119e565b61123860008261123c565b68ffffffffffffffffff8316600090815260066020908152604080832085845290915280822081516080810190925280546117ac929190829060ff16600481111561171a5761171a613243565b600481111561172b5761172b613243565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527a010000000000000000000000000000000000000000000000000000810460ff1660408301527b01000000000000000000000000000000000000000000000000000000900464ffffffffff1660609091015283612a0c565b949350505050565b60006117df7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc4612249565b905090565b6117ec612942565b6117f4612a77565b565b6117fe612942565b6040517f07b7ed9900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301528391908216906307b7ed99906024015b600060405180830381600087803b15801561186b57600080fd5b505af115801561187f573d6000803e3d6000fd5b50505050505050565b60008281526001602052604081206118a09083612adf565b9392505050565b6118af612942565b6002546201000090046fffffffffffffffffffffffffffffffff168190036119195760405162461bcd60e51b815260206004820152601f60248201527f43757272656e742066656520697320657175616c20746f206e65772066656500604482015260640161094f565b61192281612aeb565b6002806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050565b60008281526001602052604081206118a09083612b41565b61199e7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48261195c565b6119ea5760405162461bcd60e51b815260206004820152601f60248201527f6164647220646f65736e277420686176652072656c6179657220726f6c652100604482015260640161094f565b611a147fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc4826124b0565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f10e1f7ce9fd7d1b90a66d13a2ab3cb8dd7f29f3f8d520b143b063ccfbab6906b9060200161140a565b60408051608081018252600080825260208201819052918101829052606081019190915260ff848116600885901b68ffffffffffffffff00161760008181526006602090815260408083208784529091529081902081516080810190925280549293919290918391166004811115611ad457611ad4613243565b6004811115611ae557611ae5613243565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff1660208301527a010000000000000000000000000000000000000000000000000000810460ff1660408301527b01000000000000000000000000000000000000000000000000000000900464ffffffffff1660609091015295945050505050565b611b71612942565b6040517f0968f264000000000000000000000000000000000000000000000000000000008152829073ffffffffffffffffffffffffffffffffffffffff821690630968f2649061185190859060040161378e565b611bcd61279e565b611bd5612639565b600083815260046020908152604080832054905173ffffffffffffffffffffffffffffffffffffffff9091169268ffffffffffffffff00600889901b1660ff8a1617929091611c2a9185918891889101613735565b60408051601f19818403018152828252805160209182012068ffffffffffffffffff861660009081526006835283812082825290925282822060808501909352825490945090929190829060ff166004811115611c8957611c89613243565b6004811115611c9a57611c9a613243565b81529054610100810478ffffffffffffffffffffffffffffffffffffffffffffffffff166020808401919091527a010000000000000000000000000000000000000000000000000000820460ff166040808501919091527b0100000000000000000000000000000000000000000000000000000090920464ffffffffff1660609093019290925260008a8152600490925290205490915073ffffffffffffffffffffffffffffffffffffffff16611d935760405162461bcd60e51b815260206004820152601960248201527f6e6f2068616e646c657220666f72207265736f75726365494400000000000000604482015260640161094f565b600281516004811115611da857611da8613243565b03611dc557611dbc898988888b6001610eab565b5050505061138e565b6000611dcf612676565b9050600182600001516004811115611de957611de9613243565b1115611e5d5760405162461bcd60e51b815260206004820152602360248201527f70726f706f73616c20616c72656164792065786563757465642f63616e63656c60448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161094f565b611e678282612a0c565b15611eb45760405162461bcd60e51b815260206004820152601560248201527f72656c6179657220616c726561647920766f7465640000000000000000000000604482015260640161094f565b600082516004811115611ec957611ec9613243565b03611f3a576040805160808101825260018082526000602083018190528284015264ffffffffff4316606083015291519093507f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d591611f2d918d918d9188906136ff565b60405180910390a1611fbc565b600254606083015164ffffffffff7201000000000000000000000000000000000000909204821691611f6d9116436136ec565b64ffffffffff161115611fbc5760048083526040517f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d591611fb3918d918d9188906136ff565b60405180910390a15b600482516004811115611fd157611fd1613243565b146120d757612008611fe282612b70565b836020015178ffffffffffffffffffffffffffffffffffffffffffffffffff1617612ba8565b78ffffffffffffffffffffffffffffffffffffffffffffffffff16602083015260408201805190612038826137d0565b60ff1690525081516040517f25f8daaa4635a7729927ba3f5b3d59cc3320aca7c32c9db4e7ca7b957434364091612074918d918d9188906136ff565b60405180910390a1600254604083015160ff61010090920482169116106120d75760028083526040517f968626a768e76ba1363efe44e322a6c4900c5f084e0b45f35e294dfddaa9e0d5916120ce918d918d9188906136ff565b60405180910390a15b68ffffffffffffffffff8416600090815260066020908152604080832086845290915290208251815484929190829060ff1916600183600481111561211e5761211e613243565b021790555060208201518154604084015160609094015164ffffffffff167b01000000000000000000000000000000000000000000000000000000027affffffffffffffffffffffffffffffffffffffffffffffffffffff60ff9095167a010000000000000000000000000000000000000000000000000000027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff78ffffffffffffffffffffffffffffffffffffffffffffffffff90941661010002939093167fffffffffff0000000000000000000000000000000000000000000000000000ff90921691909117919091179290921691909117905560028251600481111561222957612229613243565b0361223d5761223d8a8a89898c6000610eab565b50505050505050505050565b60008181526001602052604081206114ea90612c07565b612268612942565b60008281526004602081905260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925592517fb8fa37360000000000000000000000000000000000000000000000000000000081529182018590528316602482015284919063b8fa373690604401600060405180830381600087803b15801561231457600080fd5b505af1158015612328573d6000803e3d6000fd5b5050505050505050565b61235c7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48261195c565b156123a95760405162461bcd60e51b815260206004820152601e60248201527f6164647220616c7265616479206861732072656c6179657220726f6c65210000604482015260640161094f565b60c86123b36117b4565b106124005760405162461bcd60e51b815260206004820152601660248201527f72656c6179657273206c696d6974207265616368656400000000000000000000604482015260640161094f565b61242a7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48261119e565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f03580ee9f53a62b7cb409a2cb56f9be87747dd15017afc5cef6eef321e4fb2c59060200161140a565b612478612942565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600560205260409020805460ff1916911515919091179055565b6000828152600160205260409020600201546124ce90610608612676565b6112e45760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000606482015260840161094f565b612548612942565b60ff821660009081526003602052604090205467ffffffffffffffff908116908216116125dd5760405162461bcd60e51b815260206004820152602660248201527f446f6573206e6f7420616c6c6f772064656372656d656e7473206f662074686560448201527f206e6f6e63650000000000000000000000000000000000000000000000000000606482015260840161094f565b60ff91909116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff909216919091179055565b612631612942565b6117f4612c11565b60005460ff16156117f4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600033601436108015906126af575073ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205460ff165b156126dd57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c5b919050565b60006126ec612676565b90506126f960008261195c565b8061272957506127297fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48261195c565b61279b5760405162461bcd60e51b815260206004820152602660248201527f4272696467653a2073656e646572206973206e6f742072656c61796572206f7260448201527f2061646d696e0000000000000000000000000000000000000000000000000000606482015260840161094f565b50565b6127ca7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc4610608612676565b6117f45760405162461bcd60e51b815260206004820152602860248201527f4272696467653a2073656e64657220646f65736e277420686176652072656c6160448201527f79657220726f6c65000000000000000000000000000000000000000000000000606482015260840161094f565b60008281526001602052604090206128549082612c4c565b1561123857612861612676565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526001602052604090206128d79082612c6e565b15611238576128e4612676565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b61294f6000610608612676565b6117f45760405162461bcd60e51b815260206004820152602660248201527f4272696467653a2073656e64657220646f65736e277420686176652061646d6960448201527f6e20726f6c650000000000000000000000000000000000000000000000000000606482015260840161094f565b600060ff821115612a08576040517f6dfcc650000000000000000000000000000000000000000000000000000000008152600860048201526024810183905260440161094f565b5090565b6000612a387fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc48361195c565b612a44575060006114ea565b826020015178ffffffffffffffffffffffffffffffffffffffffffffffffff16612a6d83612b70565b1615159392505050565b612a7f612639565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612ab5612676565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b60006118a08383612c90565b60006fffffffffffffffffffffffffffffffff821115612a08576040517f6dfcc650000000000000000000000000000000000000000000000000000000008152608060048201526024810183905260440161094f565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156118a0565b600080612b9d7fe2b7fb3b832174769106daebcfd6d1970523240dda11281102db9363b83b0dc484611415565b6001901b9392505050565b600078ffffffffffffffffffffffffffffffffffffffffffffffffff821115612a08576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260c860048201526024810183905260440161094f565b60006114ea825490565b612c19612cba565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612ab5612676565b60006118a08373ffffffffffffffffffffffffffffffffffffffff8416612cf6565b60006118a08373ffffffffffffffffffffffffffffffffffffffff8416612d45565b6000826000018281548110612ca757612ca76137a1565b9060005260206000200154905092915050565b60005460ff166117f4576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600183016020526040812054612d3d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556114ea565b5060006114ea565b60008181526001830160205260408120548015612e2e576000612d696001836136ec565b8554909150600090612d7d906001906136ec565b9050808214612de2576000866000018281548110612d9d57612d9d6137a1565b9060005260206000200154905080876000018481548110612dc057612dc06137a1565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612df357612df36137ef565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506114ea565b60009150506114ea565b803560ff811681146126dd57600080fd5b60008083601f840112612e5b57600080fd5b50813567ffffffffffffffff811115612e7357600080fd5b602083019150836020828501011115612e8b57600080fd5b9250929050565b60008060008060608587031215612ea857600080fd5b612eb185612e38565b935060208501359250604085013567ffffffffffffffff811115612ed457600080fd5b612ee087828801612e49565b95989497509550505050565b803567ffffffffffffffff811681146126dd57600080fd5b600080600060608486031215612f1957600080fd5b612f2284612e38565b9250612f3060208501612eec565b9150604084013590509250925092565b803580151581146126dd57600080fd5b60008060008060008060a08789031215612f6957600080fd5b612f7287612e38565b9550612f8060208801612eec565b9450604087013567ffffffffffffffff811115612f9c57600080fd5b612fa889828a01612e49565b90955093505060608701359150612fc160808801612f40565b90509295509295509295565b600060208284031215612fdf57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461279b57600080fd5b6000806040838503121561301b57600080fd5b82359150602083013561302d81612fe6565b809150509250929050565b60008083601f84011261304a57600080fd5b50813567ffffffffffffffff81111561306257600080fd5b6020830191508360208260051b8501011115612e8b57600080fd5b6000806000806040858703121561309357600080fd5b843567ffffffffffffffff808211156130ab57600080fd5b6130b788838901613038565b909650945060208701359150808211156130d057600080fd5b50612ee087828801613038565b6000602082840312156130ef57600080fd5b6118a082612e38565b60006020828403121561310a57600080fd5b81356118a081612fe6565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146126dd57600080fd5b60008060008060008060c0878903121561315e57600080fd5b863561316981612fe6565b955060208701359450604087013561318081612fe6565b935061318e60608801613115565b925060808701359150612fc160a08801613115565b6000806000606084860312156131b857600080fd5b833568ffffffffffffffffff811681146131d157600080fd5b92506020840135915060408401356131e881612fe6565b809150509250925092565b6000806040838503121561320657600080fd5b823561321181612fe6565b9150602083013561302d81612fe6565b6000806040838503121561323457600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600581106132a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60006080820190506132c0828451613272565b78ffffffffffffffffffffffffffffffffffffffffffffffffff602084015116602083015260ff604084015116604083015264ffffffffff606084015116606083015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561336157613361613309565b604052919050565b600067ffffffffffffffff82111561338357613383613309565b50601f01601f191660200190565b600080604083850312156133a457600080fd5b82356133af81612fe6565b9150602083013567ffffffffffffffff8111156133cb57600080fd5b8301601f810185136133dc57600080fd5b80356133ef6133ea82613369565b613338565b81815286602083850101111561340457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561343c57600080fd5b61344586612e38565b945061345360208701612eec565b935060408601359250606086013567ffffffffffffffff81111561347657600080fd5b61348288828901612e49565b969995985093965092949392505050565b6000806000606084860312156134a857600080fd5b83356131d181612fe6565b600080604083850312156134c657600080fd5b82356134d181612fe6565b91506134df60208401612f40565b90509250929050565b600080604083850312156134fb57600080fd5b61350483612e38565b91506134df60208401612eec565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681810361355e5761355e613512565b6001019392505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b84815273ffffffffffffffffffffffffffffffffffffffff841660208201526060604082015260006135c9606083018486613568565b9695505050505050565b60005b838110156135ee5781810151838201526020016135d6565b50506000910152565b60006020828403121561360957600080fd5b815167ffffffffffffffff81111561362057600080fd5b8201601f8101841361363157600080fd5b805161363f6133ea82613369565b81815285602083850101111561365457600080fd5b6136658260208301602086016135d3565b95945050505050565b600081518084526136868160208601602086016135d3565b601f01601f19169290920160200192915050565b60ff8716815285602082015267ffffffffffffffff8516604082015260a0606082015260006136cd60a083018587613568565b82810360808401526136df818561366e565b9998505050505050505050565b818103818111156114ea576114ea613512565b60ff8516815267ffffffffffffffff84166020820152608081016137266040830185613272565b82606083015295945050505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b168152818360148301376000910160140190815292915050565b838152604060208201526000613665604083018486613568565b6020815260006118a0602083018461366e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff81036137e6576137e6613512565b60010192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122099dd80c7031fe7a86aa8a4194ed384fce9b5039e81757cd77c281430abd2a16064736f6c63430008160033000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000040000000000000000000000008f6fe7a99d451f180b637a59fc78b4c7ed1537c0000000000000000000000000ffa2e207ab1cba6c7212ed9a759d657e0c7002f40000000000000000000000007bc467df8ced91cf9b037ee3e5f4666c3f55e28d000000000000000000000000cb941c0f19ec3584adad6cea680ee4d3dbb659db