0 txs
85.2k calls
constructor
No constructor.
functions
completedSwaps
viewfunction completedSwaps(uint256) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
expiredSwaps
viewfunction expiredSwaps(uint256) view returns (uint256)
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)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAdmin
viewfunction isAdmin(address _address) view returns (bool)
isRebalancer
viewfunction isRebalancer(address _address) view returns (bool)
isValidSignature
viewfunction isValidSignature(bytes32 _hash, bytes _signature) view returns (bytes4)
paused
viewfunction paused() view returns (bool)
PORTFOLIO_BRIDGE_ROLE
viewfunction PORTFOLIO_BRIDGE_ROLE() view returns (bytes32)
portfolioBridge
viewfunction portfolioBridge() view returns (address)
portfolioMain
viewfunction portfolioMain() view returns (address)
REBALANCER_ADMIN_ROLE
viewfunction REBALANCER_ADMIN_ROLE() view returns (bytes32)
slippageTolerance
viewfunction slippageTolerance() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapQueue
viewfunction swapQueue(uint256) view returns (address trader, uint256 quantity, bytes32 symbol)
swapSigner
viewfunction swapSigner() view returns (address)
VERSION
viewfunction VERSION() view returns (bytes32)
addAdmin
nonpayablefunction addAdmin(address _address)
addRebalancer
nonpayablefunction addRebalancer(address _address)
batchClaimBalance
nonpayablefunction batchClaimBalance(address[] _assets, uint256[] _amounts)
claimBalance
nonpayablefunction claimBalance(address _asset, uint256 _amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _swapSigner)
partialSwap
payablefunction partialSwap(tuple _order, bytes _signature, uint256 _takerAmount) payable
pause
nonpayablefunction pause()
processXFerPayload
nonpayablefunction processXFerPayload(tuple _xfer)
removeAdmin
nonpayablefunction removeAdmin(address _address)
removeFromSwapQueue
nonpayablefunction removeFromSwapQueue(uint256 _nonceAndMeta)
removeRebalancer
nonpayablefunction removeRebalancer(address _address)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setPortfolioBridge
nonpayablefunction setPortfolioBridge(address _portfolioBridge)
setPortfolioMain
nonpayablefunction setPortfolioMain()
setSwapSigner
nonpayablefunction setSwapSigner(address _swapSigner)
simpleSwap
payablefunction simpleSwap(tuple _order, bytes _signature) payable
unpause
nonpayablefunction unpause()
updateSwapExpiry
nonpayablefunction updateSwapExpiry(uint256 _nonceAndMeta)
xChainSwap
payablefunction xChainSwap(tuple _order, bytes _signature) payable
events
AddressSet
event AddressSet(string indexed name, string actionName, address newAddress)
Initialized
event Initialized(uint8 version)
Paused
event Paused(address account)
RebalancerWithdraw
event RebalancerWithdraw(address asset, uint256 amount)
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)
RoleUpdated
event RoleUpdated(string indexed name, string actionName, bytes32 updatedRole, address updatedAddress)
SwapExecuted
event SwapExecuted(uint256 indexed nonceAndMeta, address taker, address destTrader, uint256 destChainId, address srcAsset, address destAsset, uint256 srcAmount, uint256 destAmount)
SwapExpired
event SwapExpired(uint256 nonceAndMeta, uint256 timestamp)
SwapQueue
event SwapQueue(string action, uint256 nonceAndMeta, (address trader, uint256 quantity, bytes32 symbol) pendingSwap)
SwapSignerUpdated
event SwapSignerUpdated(address newSwapSigner)
Unpaused
event Unpaused(address account)
XChainFinalized
event XChainFinalized(uint256 indexed nonceAndMeta, address trader, bytes32 symbol, uint256 amount, uint256 timestamp)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b50613ad2806100206000396000f3fe6080604052600436106102495760003560e01c8063822a657211610139578063b74ba04a116100b6578063d28f48d31161007a578063d28f48d31461071f578063d4c2c7521461073f578063d547741f1461076d578063ed6ec96f1461078d578063ed7df71a146107ae578063ffa1ad74146107dc57600080fd5b8063b74ba04a14610695578063c1ad7e20146106a8578063c4d66de8146106c8578063ca15c873146106e8578063d03153aa1461070857600080fd5b8063944bda00116100fd578063944bda00146105cc57806394f59fe7146105df578063a217fddf146105f4578063aa8b38d914610609578063b63c78371461062957600080fd5b8063822a65721461051d5780638456cb59146105565780638c18bdac1461056b5780639010d07c1461058c57806391d14854146105ac57600080fd5b806332f385da116101c75780635c975abb1161018b5780635c975abb146104925780636c75d6f5146104aa57806370480275146104bd578063756c470a146104dd57806380ca29f4146104fd57600080fd5b806332f385da146103fd57806336568abe1461041d5780633f4ba83a1461043d57806343bc4b9a14610452578063467c9eff1461047257600080fd5b806323fe4b971161020e57806323fe4b971461033b578063248a9ca31461036b57806324d7806c1461039b5780632f2ff15d146103bb5780633111133c146103db57600080fd5b80629310ba1461026d57806301ffc9a71461028d5780630c979919146102c25780631626ba7e146102e25780631785f53c1461031b57600080fd5b3661026857600080516020613a5d833981519152610266816107f8565b005b600080fd5b34801561027957600080fd5b506102666102883660046131f2565b610805565b34801561029957600080fd5b506102ad6102a836600461320b565b610884565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102666102dd36600461324a565b6108af565b3480156102ee57600080fd5b506103026102fd3660046132a9565b610951565b6040516001600160e01b031990911681526020016102b9565b34801561032757600080fd5b5061026661033636600461324a565b6109cc565b34801561034757600080fd5b5061035d600080516020613a3d83398151915281565b6040519081526020016102b9565b34801561037757600080fd5b5061035d6103863660046131f2565b60009081526065602052604090206001015490565b3480156103a757600080fd5b506102ad6103b636600461324a565b610a67565b3480156103c757600080fd5b506102666103d63660046132f5565b610a73565b3480156103e757600080fd5b5061035d600080516020613a5d83398151915281565b34801561040957600080fd5b50610266610418366004613325565b610a9d565b34801561042957600080fd5b506102666104383660046132f5565b610c30565b34801561044957600080fd5b50610266610caa565b34801561045e57600080fd5b5061026661046d36600461324a565b610cbd565b34801561047e57600080fd5b506102ad61048d36600461324a565b610d7f565b34801561049e57600080fd5b5060c95460ff166102ad565b6102666104b8366004613350565b610d99565b3480156104c957600080fd5b506102666104d836600461324a565b610dd7565b3480156104e957600080fd5b506102666104f836600461324a565b610e52565b34801561050957600080fd5b5061026661051836600461324a565b610f6a565b34801561052957600080fd5b506101615461053e906001600160a01b031681565b6040516001600160a01b0390911681526020016102b9565b34801561056257600080fd5b50610266610fea565b34801561057757600080fd5b5061016b5461053e906001600160a01b031681565b34801561059857600080fd5b5061053e6105a736600461338d565b610ffd565b3480156105b857600080fd5b506102ad6105c73660046132f5565b611015565b6102666105da3660046133af565b611040565b3480156105eb57600080fd5b506102666110aa565b34801561060057600080fd5b5061035d600081565b34801561061557600080fd5b5061026661062436600461340d565b6111c3565b34801561063557600080fd5b506106706106443660046131f2565b610169602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016102b9565b6102666106a3366004613439565b6112bf565b3480156106b457600080fd5b506102666106c33660046134c2565b6112ea565b3480156106d457600080fd5b506102666106e336600461324a565b611501565b3480156106f457600080fd5b5061035d6107033660046131f2565b6116c9565b34801561071457600080fd5b5061035d6101625481565b34801561072b57600080fd5b5061026661073a3660046131f2565b6116e0565b34801561074b57600080fd5b5061035d61075a3660046131f2565b6101686020526000908152604090205481565b34801561077957600080fd5b506102666107883660046132f5565b6117e0565b34801561079957600080fd5b5061016a5461053e906001600160a01b031681565b3480156107ba57600080fd5b5061035d6107c93660046131f2565b6101676020526000908152604090205481565b3480156107e857600080fd5b5061035d64312e312e3360d81b81565b6108028133611805565b50565b600080516020613a5d83398151915261081d816107f8565b600882901c60009081526101686020526040908190208054600160ff86161b179055517f4e26543a3310528c7ccde0f2a250a579a7eb3192762bd6ae53d14c811f8b1209906108789084904290918252602082015260400190565b60405180910390a15050565b60006001600160e01b03198216635a05180f60e01b14806108a957506108a98261185e565b92915050565b60006108ba816107f8565b6001600160a01b0382166108e95760405162461bcd60e51b81526004016108e09061352e565b60405180910390fd5b6040516252465160e81b81526003016040518091039020600080516020613a7d833981519152600080516020613a5d8339815191528460405161092d929190613551565b60405180910390a261094d600080516020613a5d83398151915283610a73565b5050565b6000806109948585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061189392505050565b50610161549091506001600160a01b03908116908216036109bf5750630b135d3f60e11b90506109c5565b50600090505b9392505050565b60006109d7816107f8565b60016109e360006116c9565b11610a1d5760405162461bcd60e51b815260206004820152600a60248201526952462d414c4f412d303160b01b60448201526064016108e0565b6040516252465160e81b815260030160405190819003812090600080516020613a7d83398151915290610a54906000908690613589565b60405180910390a261094d6000836117e0565b60006108a98183611015565b600082815260656020526040902060010154610a8e816107f8565b610a9883836118d8565b505050565b610aa56118fa565b600080516020613a3d833981519152610abd816107f8565b600b610acf60408401602085016135da565b600d811115610ae057610ae06135c4565b14610b1a5760405162461bcd60e51b815260206004820152600a60248201526952462d50544e532d303160b01b60448201526064016108e0565b6000610b2c606084016040850161324a565b6001600160a01b031603610b705760405162461bcd60e51b815260206004820152600b60248201526a52462d5a414444522d303160a81b60448201526064016108e0565b6000826080013511610bb15760405162461bcd60e51b815260206004820152600a60248201526952462d5a4554442d303160b01b60448201526064016108e0565b60006bffffffffffffffffffffffff610bd060e0850160c086016135fb565b60201c166001600160e01b03166060846040016020810190610bf2919061324a565b6001600160a01b0316901b179050610c23610c13606085016040860161324a565b8460600135856080013584611953565b505050610802600160fb55565b6001600160a01b0381163314610ca05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108e0565b61094d8282611c99565b6000610cb5816107f8565b610802611cbb565b6000610cc8816107f8565b6001610ce1600080516020613a5d8339815191526116c9565b11610d1b5760405162461bcd60e51b815260206004820152600a60248201526952462d414c4f412d303160b01b60448201526064016108e0565b6040516252465160e81b81526003016040518091039020600080516020613a7d833981519152600080516020613a5d83398151915284604051610d5f929190613589565b60405180910390a261094d600080516020613a5d833981519152836117e0565b60006108a9600080516020613a5d83398151915283611015565b610da1611d0d565b610da96118fa565b6000610db6848484611d55565b9050610dcc848560c001358660e0013584611ea3565b50610a98600160fb55565b6000610de2816107f8565b6001600160a01b038216610e085760405162461bcd60e51b81526004016108e09061352e565b6040516252465160e81b815260030160405190819003812090600080516020613a7d83398151915290610e3f906000908690613551565b60405180910390a261094d600083610a73565b6000610e5d816107f8565b61016a54610e8390600080516020613a3d833981519152906001600160a01b0316611015565b15610eae5761016a54610eae90600080516020613a3d833981519152906001600160a01b03166117e0565b61016a80546001600160a01b0319166001600160a01b038416179055610ee2600080516020613a3d83398151915283610a73565b60408051694d41494e4e455452465160b01b8152815190819003600a018120828252601392820192909252725345542d504f5254464f4c494f42524944474560681b60608201526001600160a01b03841660208201527f93686d04af71e21294b8a187e22a1eaba038a0ebbcefbb2b8f50546b57dd4c95906080015b60405180910390a25050565b6000610f75816107f8565b6001600160a01b038216610f9b5760405162461bcd60e51b81526004016108e09061352e565b61016180546001600160a01b0319166001600160a01b0384169081179091556040519081527fe6243347c190ae7a28aef8cfd36bcecf9459bbe5d32fb1ee1bf7358dac0b4b4090602001610878565b6000610ff5816107f8565b610802611f43565b60008281526097602052604081206109c59083611f80565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611048611d0d565b6110506118fa565b600061105d858585611d55565b905060c085013560e086013583101561108c5760e086013561107f8483613638565b611089919061364f565b90505b61109886828585611ea3565b50506110a4600160fb55565b50505050565b60006110b5816107f8565b61016a5460408051631a7a068b60e31b815290516000926001600160a01b03169163d3d034589160048083019260209291908290030181865afa158015611100573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111249190613671565b61016b80546001600160a01b0319166001600160a01b038316179055604051694d41494e4e455452465160b01b8152909150600a01604080519182900382208183526011918301919091527029a2aa16a827a92a2327a624a7a6a0a4a760791b60608301526001600160a01b0383166020830152907f93686d04af71e21294b8a187e22a1eaba038a0ebbcefbb2b8f50546b57dd4c9590608001610f5e565b600080516020613a5d8339815191526111db816107f8565b6111e36118fa565b6001600160a01b03831661125f57604051600090339084908381818185875af1925050503d8060008114611233576040519150601f19603f3d011682016040523d82523d6000602084013e611238565b606091505b50509050806112595760405162461bcd60e51b81526004016108e09061368e565b50611273565b6112736001600160a01b0384163384611f8c565b604080516001600160a01b0385168152602081018490527fa3e40bab7c3da0937e283e65aacdd378a146806f8ac5b873ce32c1f13f45376d910160405180910390a1610a98600160fb55565b6112c7611d0d565b60006112d4848484611fef565b90506112e08482612136565b6110a484826121eb565b600080516020613a5d833981519152611302816107f8565b61130a6118fa565b8382146113465760405162461bcd60e51b815260206004820152600a60248201526952462d4243414d2d303160b01b60448201526064016108e0565b60005b848110156114ef576000868683818110611365576113656136b0565b905060200201602081019061137a919061324a565b6001600160a01b0316036114105760003385858481811061139d5761139d6136b0565b9050602002013560405160006040518083038185875af1925050503d80600081146113e4576040519150601f19603f3d011682016040523d82523d6000602084013e6113e9565b606091505b505090508061140a5760405162461bcd60e51b81526004016108e09061368e565b50611464565b61146433858584818110611426576114266136b0565b9050602002013588888581811061143f5761143f6136b0565b9050602002016020810190611454919061324a565b6001600160a01b03169190611f8c565b7fa3e40bab7c3da0937e283e65aacdd378a146806f8ac5b873ce32c1f13f45376d868683818110611497576114976136b0565b90506020020160208101906114ac919061324a565b8585848181106114be576114be6136b0565b604080516001600160a01b0390951685526020918202939093013590840152500160405180910390a1600101611349565b506114fa600160fb55565b5050505050565b600054610100900460ff16158080156115215750600054600160ff909116105b8061153b5750303b15801561153b575060005460ff166001145b61159e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108e0565b6000805460ff1916600117905580156115c1576000805461ff0019166101001790555b6001600160a01b0382166115e75760405162461bcd60e51b81526004016108e09061352e565b6115ef61231b565b6115f7612342565b6115ff612371565b6116416040518060400160405280600781526020016611195e185b1bdd60ca1b815250604051806040016040528060018152602001603160f81b8152506123a0565b61164c6000336118d8565b611664600080516020613a5d833981519152836118d8565b61016180546001600160a01b0319166001600160a01b03841617905561264861016255801561094d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610878565b60008181526097602052604081206108a9906123d1565b6116e86118fa565b600081815261016960209081526040808320815160608101835281546001600160a01b031680825260018301549482018590526002909201549281018390529392611734929086611953565b9050806117705760405162461bcd60e51b815260206004820152600a60248201526952462d494e56542d303160b01b60448201526064016108e0565b6000838152610169602052604080822080546001600160a01b03191681556001810183905560020191909155517f1652f7987eef685f1a8a54f925f71692e461356fdfcf8c61b43b456b834669f7906117cc90859085906136c6565b60405180910390a15050610802600160fb55565b6000828152606560205260409020600101546117fb816107f8565b610a988383611c99565b61180f8282611015565b61094d5761181c816123db565b6118278360206123ed565b60405160200161183892919061373a565b60408051601f198184030181529082905262461bcd60e51b82526108e0916004016137af565b60006001600160e01b03198216637965db0b60e01b14806108a957506301ffc9a760e01b6001600160e01b03198316146108a9565b60008082516041036118c95760208301516040840151606085015160001a6118bd87828585612589565b945094505050506118d1565b506000905060025b9250929050565b6118e2828261264d565b6000828152609760205260409020610a9890826126d3565b600260fb540361194c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e0565b600260fb55565b600881901c60008181526101676020526040812054909190600160ff85161b908116156119ad5760405162461bcd60e51b8152602060048201526008602482015267292316a4a716981960c11b60448201526064016108e0565b61016b546040805163542da9d160e11b815290516000926001600160a01b03169163a85b53a29160048083019260209291908290030181865afa1580156119f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1c91906137e2565b8703611a7b576040516001600160a01b038916908790600081818185875af1925050503d8060008114611a6b576040519150601f19603f3d011682016040523d82523d6000602084013e611a70565b606091505b505080915050611bfd565b61016b54604051630aadfa7160e11b8152600481018990526000916001600160a01b03169063155bf4e290602401602060405180830381865afa158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea9190613671565b90506001600160a01b038116611b2f5760405162461bcd60e51b815260206004820152600a60248201526952462d44544e462d303160b01b60448201526064016108e0565b604080516001600160a01b038b8116602483015260448083018b905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290851691611b8b91906137fb565b6000604051808303816000865af19150503d8060008114611bc8576040519150601f19603f3d011682016040523d82523d6000602084013e611bcd565b606091505b5091509150818015611bf7575080511580611bf7575080806020019051810190611bf79190613817565b93505050505b80611c1a57611c0e888888886126e8565b60009350505050611c8a565b6000838152610167602090815260409182902080548517905581516001600160a01b038b16815290810189905290810187905242606082015285907f3be4d3de41424d30c5694b594d44a508e9279c13a5e0033630919ce46b87ae159060800160405180910390a2600193505050505b949350505050565b600160fb55565b611ca3828261277f565b6000828152609760205260409020610a9890826127e6565b611cc36127fb565b60c9805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60c95460ff1615611d535760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108e0565b565b60008335606081901c9082907f95afddf5e4bb9f692716b7fdff640e6b8a0d2869597405c6e9d35857ed19a15090611d936040890160208a01613839565b611da360608a0160408b0161324a565b611db360808b0160608c0161324a565b611dc360a08c0160808d0161324a565b611dd360c08d0160a08e0161324a565b6040805160208101989098528701959095526001600160801b0390931660608601526001600160a01b039182166080860152811660a085015290811660c084810191909152911660e0838101919091529088013561010083015287013561012082015261014001604051602081830303815290604052805190602001209050611e9a8660000135876020016020810190611e6d9190613839565b6001600160801b0316611e8660c08a0160a08b0161324a565b6001600160a01b0386163314858a8a612844565b50949350505050565b6040805161010081019091528435815260009060208101611eca60c0880160a0890161324a565b6001600160a01b03168152602001836001600160a01b03168152602001468152602001866060016020810190611f00919061324a565b6001600160a01b03168152602001611f1e606088016040890161324a565b6001600160a01b031681526020018481526020018581525090506114fa8160016129e7565b611f4b611d0d565b60c9805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611cf03390565b60006109c58383612aa2565b6040516001600160a01b038316602482015260448101829052610a9890849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612acc565b6000807f0bcc36e5a2c7a9d70d49c54cd96b2c77c54bf1acde6c051cf01be281b9c0678285356120256040880160208901613862565b6120356060890160408a0161324a565b61204560808a0160608b01613862565b60808a013561205a60c08c0160a08d0161324a565b61206a60e08d0160c08e0161324a565b60408051602081019990995288019690965263ffffffff94851660608801526001600160a01b0393841660808801529390911660a086015260c085015290811660e084810191909152911661010083810191909152908701356101208301528601356101408201526101600160405160208183030381529060405280519060200120905061212985600001358660200160208101906121099190613862565b63ffffffff1661211f6060890160408a0161324a565b6000858989612844565b505050903560601c919050565b604080516101008101825283358152600091602082019061215d906060870190870161324a565b6001600160a01b039081168252841660208201526040016121846080860160608701613862565b63ffffffff16815260200161219f60e0860160c0870161324a565b6001600160a01b031681526020016121bd60c0860160a0870161324a565b6001600160a01b0316815260200184610100013581526020018460e001358152509050610a988160006129e7565b6fffffffffffffffffffffffff00000000823560201b1660008061221560e0860160c0870161324a565b6001600160a01b03161461222a576000612231565b8361010001355b9050600061223f8234613888565b61016a549091506001600160a01b0316631777b454826122656080890160608a01613862565b6040805160e080820183526000808352600b60208401526001600160a01b038c16838501526080808e0135606080860191909152928e0135908401524260a084015263ffffffff198b1660c0840152926122c3918d01908d0161324a565b6040518663ffffffff1660e01b81526004016122e2949392919061389b565b6000604051808303818588803b1580156122fb57600080fd5b505af115801561230f573d6000803e3d6000fd5b50505050505050505050565b600054610100900460ff16611d535760405162461bcd60e51b81526004016108e09061394d565b600054610100900460ff166123695760405162461bcd60e51b81526004016108e09061394d565b611d53612b9e565b600054610100900460ff166123985760405162461bcd60e51b81526004016108e09061394d565b611d53612bd1565b600054610100900460ff166123c75760405162461bcd60e51b81526004016108e09061394d565b61094d8282612bf8565b60006108a9825490565b60606108a96001600160a01b03831660145b606060006123fc836002613638565b612407906002613998565b67ffffffffffffffff81111561241f5761241f6139ab565b6040519080825280601f01601f191660200182016040528015612449576020820181803683370190505b509050600360fc1b81600081518110612464576124646136b0565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612493576124936136b0565b60200101906001600160f81b031916908160001a90535060006124b7846002613638565b6124c2906001613998565b90505b600181111561253a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106124f6576124f66136b0565b1a60f81b82828151811061250c5761250c6136b0565b60200101906001600160f81b031916908160001a90535060049490941c93612533816139c1565b90506124c5565b5083156109c55760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108e0565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156125c05750600090506003612644565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612614573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661263d57600060019250925050612644565b9150600090505b94509492505050565b6126578282611015565b61094d5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561268f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006109c5836001600160a01b038416612c3b565b604080516060810182526001600160a01b0386811682526020808301868152838501888152600087815261016990935291859020845181546001600160a01b03191694169390931783555160018301555160029091015590517f1652f7987eef685f1a8a54f925f71692e461356fdfcf8c61b43b456b834669f79061277090849084906139d8565b60405180910390a15050505050565b6127898282611015565b1561094d5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006109c5836001600160a01b038416612c8a565b60c95460ff16611d535760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108e0565b600887901c60008181526101676020526040902054600160ff8a161b908082161561289c5760405162461bcd60e51b815260206004820152600860248201526752462d494e2d303160c01b60448201526064016108e0565b600083815261016860205260409020548216156128e65760405162461bcd60e51b815260206004820152600860248201526752462d51452d303160c01b60448201526064016108e0565b884211156129215760405162461bcd60e51b8152602060048201526008602482015267292316a8a296981960c11b60448201526064016108e0565b6001600160a01b0388163314806129355750865b61296d5760405162461bcd60e51b815260206004820152600960248201526852462d494d532d303160b81b60448201526064016108e0565b61298061297987612d7d565b8686610951565b6001600160e01b031916631626ba7e60e01b146129ca5760405162461bcd60e51b815260206004820152600860248201526752462d49532d303160c01b60448201526064016108e0565b600092835261016760205260409092209117905550505050505050565b6129f082612dcb565b8015612a08576129ff82612e45565b612a0882612efc565b81600001517f68eb6d948c037c94e470f9a5b288dd93debbcd9342635408e66cb0211686f7f783602001518460400151856060015186608001518760a001518860c001518960e00151604051610f5e97969594939291906001600160a01b039788168152958716602087015260408601949094529185166060850152909316608083015260a082019290925260c081019190915260e00190565b6000826000018281548110612ab957612ab96136b0565b9060005260206000200154905092915050565b6000612b21826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612fb09092919063ffffffff16565b805190915015610a985780806020019051810190612b3f9190613817565b610a985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016108e0565b600054610100900460ff16612bc55760405162461bcd60e51b81526004016108e09061394d565b60c9805460ff19169055565b600054610100900460ff16611c925760405162461bcd60e51b81526004016108e09061394d565b600054610100900460ff16612c1f5760405162461bcd60e51b81526004016108e09061394d565b81516020928301208151919092012061012d9190915561012e55565b6000818152600183016020526040812054612c82575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108a9565b5060006108a9565b60008181526001830160205260408120548015612d73576000612cae600183613888565b8554909150600090612cc290600190613888565b9050818114612d27576000866000018281548110612ce257612ce26136b0565b9060005260206000200154905080876000018481548110612d0557612d056136b0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612d3857612d38613a26565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108a9565b60009150506108a9565b60006108a9612d8a612fbf565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60808101516001600160a01b0316612e1d578060c001513410156108025760405162461bcd60e51b815260206004820152600960248201526852462d494d562d303160b81b60448201526064016108e0565b61080233308360c0015184608001516001600160a01b0316613041909392919063ffffffff16565b60a08101516001600160a01b0316612ed257600081604001516001600160a01b03168260e0015160405160006040518083038185875af1925050503d8060008114612eac576040519150601f19603f3d011682016040523d82523d6000602084013e612eb1565b606091505b505090508061094d5760405162461bcd60e51b81526004016108e09061368e565b61080281604001518260e001518360a001516001600160a01b0316611f8c9092919063ffffffff16565b60808101516001600160a01b0316158015612f1a57508060c0015134115b156108025760c08101516000903390612f339034613888565b604051600081818185875af1925050503d8060008114612f6f576040519150601f19603f3d011682016040523d82523d6000602084013e612f74565b606091505b505090508061094d5760405162461bcd60e51b8152602060048201526008602482015267292316aa2316981960c11b60448201526064016108e0565b6060611c8a8484600085613079565b600061303c7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612fef61012d5490565b61012e546040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b905090565b6040516001600160a01b03808516602483015283166044820152606481018290526110a49085906323b872dd60e01b90608401611fb8565b6060824710156130da5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016108e0565b600080866001600160a01b031685876040516130f691906137fb565b60006040518083038185875af1925050503d8060008114613133576040519150601f19603f3d011682016040523d82523d6000602084013e613138565b606091505b509150915061314987838387613154565b979650505050505050565b606083156131c35782516000036131bc576001600160a01b0385163b6131bc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108e0565b5081611c8a565b611c8a83838151156131d85781518083602001fd5b8060405162461bcd60e51b81526004016108e091906137af565b60006020828403121561320457600080fd5b5035919050565b60006020828403121561321d57600080fd5b81356001600160e01b0319811681146109c557600080fd5b6001600160a01b038116811461080257600080fd5b60006020828403121561325c57600080fd5b81356109c581613235565b60008083601f84011261327957600080fd5b50813567ffffffffffffffff81111561329157600080fd5b6020830191508360208285010111156118d157600080fd5b6000806000604084860312156132be57600080fd5b83359250602084013567ffffffffffffffff8111156132dc57600080fd5b6132e886828701613267565b9497909650939450505050565b6000806040838503121561330857600080fd5b82359150602083013561331a81613235565b809150509250929050565b600060e0828403121561333757600080fd5b50919050565b6000610100828403121561333757600080fd5b6000806000610120848603121561336657600080fd5b613370858561333d565b925061010084013567ffffffffffffffff8111156132dc57600080fd5b600080604083850312156133a057600080fd5b50508035926020909101359150565b60008060008061014085870312156133c657600080fd5b6133d0868661333d565b935061010085013567ffffffffffffffff8111156133ed57600080fd5b6133f987828801613267565b959890975094956101200135949350505050565b6000806040838503121561342057600080fd5b823561342b81613235565b946020939093013593505050565b600080600083850361014081121561345057600080fd5b6101208082121561346057600080fd5b859450840135905067ffffffffffffffff8111156132dc57600080fd5b60008083601f84011261348f57600080fd5b50813567ffffffffffffffff8111156134a757600080fd5b6020830191508360208260051b85010111156118d157600080fd5b600080600080604085870312156134d857600080fd5b843567ffffffffffffffff808211156134f057600080fd5b6134fc8883890161347d565b9096509450602087013591508082111561351557600080fd5b506135228782880161347d565b95989497509550505050565b60208082526009908201526852462d53415a2d303160b81b604082015260600190565b6060808252600890820152674144442d524f4c4560c01b608082015260208101929092526001600160a01b0316604082015260a00190565b6060808252600b908201526a52454d4f56452d524f4c4560a81b608082015260208101929092526001600160a01b0316604082015260a00190565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156135ec57600080fd5b8135600e81106109c557600080fd5b60006020828403121561360d57600080fd5b813563ffffffff19811681146109c557600080fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176108a9576108a9613622565b60008261366c57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561368357600080fd5b81516109c581613235565b60208082526008908201526752462d54462d303160c01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60a08082526007908201526614915353d5915160ca1b60c08201526020810183905260e081016109c5604083018480516001600160a01b0316825260208082015190830152604090810151910152565b60005b83811015613731578181015183820152602001613719565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613772816017850160208801613716565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516137a3816028840160208801613716565b01602801949350505050565b60208152600082518060208401526137ce816040850160208701613716565b601f01601f19169190910160400192915050565b6000602082840312156137f457600080fd5b5051919050565b6000825161380d818460208701613716565b9190910192915050565b60006020828403121561382957600080fd5b815180151581146109c557600080fd5b60006020828403121561384b57600080fd5b81356001600160801b03811681146109c557600080fd5b60006020828403121561387457600080fd5b813563ffffffff811681146109c557600080fd5b818103818111156108a9576108a9613622565b63ffffffff851681526101408101600285106138b9576138b96135c4565b84602083015267ffffffffffffffff84511660408301526020840151600e81106138e5576138e56135c4565b8060608401525060018060a01b036040850151166080830152606084015160a0830152608084015160c083015260a084015160e083015263ffffffff1960c0850151166101008301526139446101208301846001600160a01b03169052565b95945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b808201808211156108a9576108a9613622565b634e487b7160e01b600052604160045260246000fd5b6000816139d0576139d0613622565b506000190190565b60a080825260059082015264105111115160da1b60c08201526020810183905260e081016109c5604083018480516001600160a01b0316825260208082015190830152604090810151910152565b634e487b7160e01b600052603160045260246000fdfe58aa05b56cf9e0a999dff04c62c0ebffe411e3a2a6258f0f135597bd1ba69077f48fc9fa479390222c2fd5227bb7e4f7c4a85d969b82dfa11eb0954487273ab9bafee6bdc2193912cf2754d0840b53e34485a4341b4071fb7da8d091ffef67bfa2646970667358221220ef163ba1a34db5bf767503b7f92ac64ed8d1fea5a9ed34096b7aed937525b2d364736f6c63430008110033