2 txs
16 calls
constructor
constructor(address utilsAdr, address holdingAdr, address _tokenContractAdr)
functions
automator
viewfunction automator() view returns (address)
correctPriceDirection
purefunction correctPriceDirection(address base, address quote, uint160 sqrtPriceX96) pure returns (uint160 sqrtPriceX96Corrected)
GAS_GRANT
viewfunction GAS_GRANT() view returns (uint256)
getPriceFromSqrtPriceX96
purefunction getPriceFromSqrtPriceX96(int8 decimalDiff, uint160 sqrtPriceX96) pure returns (uint80 price_12Decimals)
getSqrtPriceX96FromPrice
purefunction getSqrtPriceX96FromPrice(int8 decimalDiff, uint80 price_12Decimals) pure returns (uint160 sqrtPriceX96)
holdingContract
viewfunction holdingContract() view returns (address)
mulDiv
purefunction mulDiv(uint256 a, uint256 b, uint256 denominator) pure returns (uint256 result)
owner
viewfunction owner() view returns (address)
shouldExecute
viewfunction shouldExecute(uint256 handle) view returns (bool)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
state
viewfunction state() view returns (address tokenHeld, uint80 lastTradedPrice, uint80 bestObservedPrice, bool direction)
taskId
viewfunction taskId() view returns (uint256)
tokenContractAdr
viewfunction tokenContractAdr() view returns (address)
utils
viewfunction utils() view returns (address)
execute
nonpayablefunction execute(uint256 handle)
onDeposit
nonpayablefunction onDeposit(uint256 howMuch)
prepareWithdraw
nonpayablefunction prepareWithdraw(uint256 amtEth)
prepareWithdrawAll
nonpayablefunction prepareWithdrawAll()
renounceOwnership
nonpayablefunction renounceOwnership()
rescueEth
nonpayablefunction rescueEth()
rescueTokens
nonpayablefunction rescueTokens(address token)
setHoldingContract
nonpayablefunction setHoldingContract(address holdingAdr)
setToken
nonpayablefunction setToken(address _tokenContractAdr)
setUtils
nonpayablefunction setUtils(address utilsAdr)
startAutomation
nonpayablefunction startAutomation(bool direction)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AutomationStarted
event AutomationStarted(uint80 price, bool direction)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SawBetterPrice
event SawBetterPrice(uint80 price)
TradeExecuted
event TradeExecuted(address targetToken, uint80 price)
errors
No errors.
creation bytecode
0x60e060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a05273f94e7d0710709388bce3161c32b4eea56d3f91cc60c052600180546001600160a01b03191673aaa000e1b72bf8dfa74c958e19e925c0bfae9ded1790555f600255348015610081575f80fd5b506040516136ef3803806136ef8339810160408190526100a091610153565b6100a9336100e9565b600480546001600160a01b03199081166001600160a01b039485161790915560038054821694841694909417909355600580549093169116179055610193565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014e575f80fd5b919050565b5f805f60608486031215610165575f80fd5b61016e84610138565b925061017c60208501610138565b915061018a60408501610138565b90509250925092565b60805160a05160c0516134986102575f395f81816115900152818161183101528181611bfa01528181611cf20152611dac01525f81816116b30152818161180801528181611852015281816120800152818161220d015281816122c401528181612390015281816124b6015261251801525f8181611047015281816115b6015281816117e701528181611c5101528181611e5b01528181611ef901528181611fb10152818161242401528181612486015281816125c001526125f001526134985ff3fe608060405234801561000f575f80fd5b50600436106101a4575f3560e01c8063677342ce116100e8578063aa9a091211610093578063c1f36c681161006e578063c1f36c6814610487578063ce31a06b1461048f578063f2fde38b14610497578063fe0d94c1146104aa575f80fd5b8063aa9a0912146103b7578063b3a57943146103ca578063c19d93fb146103dd575f80fd5b80637a3dfdad116100c35780637a3dfdad146103595780638287ccb4146103875780638da5cb5b1461039a575f80fd5b8063677342ce1461030a578063699535011461033e578063715018a614610351575f80fd5b80631fba9eda116101535780633322b23d1161012e5780633322b23d146102ae578063382e4781146102b75780635a29638d146102ca5780635d52f9fc146102ea575f80fd5b80631fba9eda146102685780632413d1551461027b5780632c93a93c1461029b575f80fd5b8063144fa6d711610183578063144fa6d7146101fd5780631cb78541146102105780631f3e51fd14610255575f80fd5b8062ae3bf8146101a8578063048e92f6146101bd578063111ffe5e146101e5575b5f80fd5b6101bb6101b6366004612bcb565b6104bd565b005b6101d06101cb366004612be6565b610620565b60405190151581526020015b60405180910390f35b6101ef620f424081565b6040519081526020016101dc565b6101bb61020b366004612bcb565b61087b565b6001546102309073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dc565b6101bb610263366004612bcb565b6108ca565b610230610276366004612c0d565b610919565b6005546102309073ffffffffffffffffffffffffffffffffffffffff1681565b6101bb6102a9366004612c5d565b610982565b6101ef60025481565b6101bb6102c5366004612be6565b610c21565b6003546102309073ffffffffffffffffffffffffffffffffffffffff1681565b6004546102309073ffffffffffffffffffffffffffffffffffffffff1681565b61031d610318366004612be6565b610d13565b6040516fffffffffffffffffffffffffffffffff90911681526020016101dc565b6101bb61034c366004612bcb565b610e94565b6101bb610ee3565b61036c610367366004612c78565b610ef6565b60405169ffffffffffffffffffff90911681526020016101dc565b6101bb610395366004612be6565b610fd1565b5f5473ffffffffffffffffffffffffffffffffffffffff16610230565b6101ef6103c5366004612ca2565b6110ad565b6102306103d8366004612ccb565b611177565b60065460075461043e9173ffffffffffffffffffffffffffffffffffffffff81169169ffffffffffffffffffff7401000000000000000000000000000000000000000090920482169181169060ff6a01000000000000000000009091041684565b6040805173ffffffffffffffffffffffffffffffffffffffff95909516855269ffffffffffffffffffff93841660208601529190921690830152151560608201526080016101dc565b6101bb6111f3565b6101bb61121f565b6101bb6104a5366004612bcb565b61126b565b6101bb6104b8366004612be6565b61131f565b6104c5611761565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6104ff5f5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015610567573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058b9190612d13565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303815f875af11580156105f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061061c9190612d2a565b5050565b5f8060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb5424046040518163ffffffff1660e01b8152600401602060405180830381865afa15801561068c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b09190612d45565b9050428173ffffffffffffffffffffffffffffffffffffffff1663976217cd6002546040518263ffffffff1660e01b81526004016106f091815260200190565b61012060405180830381865afa15801561070c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190612e21565b60a0015110156107435750600192915050565b5f61074c6117e1565b60075469ffffffffffffffffffff9190911691506a0100000000000000000000900460ff1680156107cd57506007546107939069ffffffffffffffffffff166103e8612edb565b73ffffffffffffffffffffffffffffffffffffffff166107b5826103e3612edb565b73ffffffffffffffffffffffffffffffffffffffff16115b156107dc575060019392505050565b6007546a0100000000000000000000900460ff1615801561084d57506007546108139069ffffffffffffffffffff166103e8612edb565b73ffffffffffffffffffffffffffffffffffffffff16610835826103ed612edb565b73ffffffffffffffffffffffffffffffffffffffff16105b1561085c575060019392505050565b61086581611894565b15610874575060019392505050565b5050919050565b610883611761565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108d2611761565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f8061095b69ffffffffffffffffffff8416780100000000000000000000000000000000000000000000000061095087600c612f41565b6103c590600a6130a0565b905061096681610d13565b6fffffffffffffffffffffffffffffffff169150505b92915050565b61098a611761565b600154604080517fbb54240400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163bb5424049160048083019260209291908290030181865afa1580156109f7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1b9190612d45565b90506002545f1480610ac557506002546040517f976217cd000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff82169063976217cd9060240161012060405180830381865afa158015610a96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aba9190612e21565b610100015160ff1615155b610b30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416c72656164792072756e6e696e67000000000000000000000000000000000060448201526064015b60405180910390fd5b5f610b396117e1565b60068054600780547fffff00000000000000000000000000000000000000000000000000000000000090921669ffffffffffffffffffff8516740100000000000000000000000000000000000000008102919091179093557fffffffffffffffffffffffffffffffffffffffffff00000000000000000000009091169091176a0100000000000000000000861515021790559050610bd68261199e565b6040805169ffffffffffffffffffff8316815284151560208201527f2ae08d8f064e1a0514ceca720ebd76661043537475d18997512f60da861ebc5e910160405180910390a1505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610c44575f80fd5b600480546006546040517f8172047900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216938101939093525f60248401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448401526064830184905216906381720479906084015b60408051808303815f875af1158015610cea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0e91906130ae565b505050565b5f815f03610d2257505f919050565b8160017001000000000000000000000000000000008210610d485760809190911c9060401b5b680100000000000000008210610d635760409190911c9060201b5b6401000000008210610d7a5760209190911c9060101b5b620100008210610d8f5760109190911c9060081b5b6101008210610da35760089190911c9060041b5b60108210610db65760049190911c9060021b5b60088210610dc25760011b5b6001818581610dd357610dd36130d0565b048201901c90506001818581610deb57610deb6130d0565b048201901c90506001818581610e0357610e036130d0565b048201901c90506001818581610e1b57610e1b6130d0565b048201901c90506001818581610e3357610e336130d0565b048201901c90506001818581610e4b57610e4b6130d0565b048201901c90506001818581610e6357610e636130d0565b0491909101901c5f610e7582866130fd565b9050808210610e845780610e86565b815b95945050505050565b919050565b610e9c611761565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610eeb611761565b610ef45f611b84565b565b5f80835f0b12610f7657610f6f610f2773ffffffffffffffffffffffffffffffffffffffff8416630e8d4a51613110565b610f3285600a6130a0565b610f529073ffffffffffffffffffffffffffffffffffffffff8616613110565b7610000000000000000000000000000000000000000000006110ad565b905061097c565b610f6f610f9d73ffffffffffffffffffffffffffffffffffffffff8416630e8d4a51613110565b73ffffffffffffffffffffffffffffffffffffffff841660b4610fbf87613127565b610fca90600a6130a0565b901b6110ad565b60055473ffffffffffffffffffffffffffffffffffffffff163314610ff4575f80fd5b624c4b4081106110aa57600480546040517f817204790000000000000000000000000000000000000000000000000000000081525f9281019290925273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166024840152604483018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60648401521690638172047990608401610ccf565b50565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f03611100575f84116110f5575f80fd5b508290049050611170565b80841161110b575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610156111b3575080611170565b6111ec73ffffffffffffffffffffffffffffffffffffffff831678010000000000000000000000000000000000000000000000006130fd565b9050611170565b60055473ffffffffffffffffffffffffffffffffffffffff163314611216575f80fd5b610ef45f611bf8565b611227611761565b5f805460405173ffffffffffffffffffffffffffffffffffffffff909116914780156108fc02929091818181858888f193505050501580156110aa573d5f803e3d5ffd5b611273611761565b73ffffffffffffffffffffffffffffffffffffffff8116611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b27565b6110aa81611b84565b600154604080517fbb54240400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163bb5424049160048083019260209291908290030181865afa15801561138c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b09190612d45565b90505f6113bb6117e1565b6007549091506a0100000000000000000000900460ff16801561141a57506007546113f49069ffffffffffffffffffff166103e8613162565b69ffffffffffffffffffff1661140c826103e3613162565b69ffffffffffffffffffff16115b1561149157600780547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001669ffffffffffffffffffff83169081179091556040519081527f9aa54d3e86f75cc1d8ac502d5a25d5c0563481537f37787aebdc54a27d156897906020015b60405180910390a1611758565b6007546a0100000000000000000000900460ff161580156114ee57506007546114c89069ffffffffffffffffffff166103e8613162565b69ffffffffffffffffffff166114e0826103ed613162565b69ffffffffffffffffffff16105b1561155c57600780547fffffffffffffffffffffffffffffffffffffffffffff000000000000000000001669ffffffffffffffffffff83169081179091556040519081527f9aa54d3e86f75cc1d8ac502d5a25d5c0563481537f37787aebdc54a27d15689790602001611484565b6115718169ffffffffffffffffffff16611894565b15611758576007546a0100000000000000000000900460ff166115b4577f00000000000000000000000000000000000000000000000000000000000000006115d6565b7f00000000000000000000000000000000000000000000000000000000000000005b600680546007805469ffffffffffffffffffff86167401000000000000000000000000000000000000000081027fffff00000000000000000000000000000000000000000000000000000000000090941673ffffffffffffffffffffffffffffffffffffffff9690961695909517929092179092557fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000060ff6a0100000000000000000000808404919091161502167fffffffffffffffffffffffffffffffffffffffffff00000000000000000000009091161790911790556116d77f0000000000000000000000000000000000000000000000000000000000000000611bf8565b6006546116f99073ffffffffffffffffffffffffffffffffffffffff16611bf8565b6006546040805173ffffffffffffffffffffffffffffffffffffffff909216825269ffffffffffffffffffff831660208301527f9d8ae36f2e253054df0c002dffa06031bd7c6925211d28cdc5698a9508df9e26910160405180910390a15b610d0e8261199e565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610ef4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b27565b5f61182c7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612372565b6118767f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612372565b6118859064e8d4a51000613162565b61188f919061318e565b905090565b6007545f90819060c8906a0100000000000000000000900460ff166118ba5760626118bd565b60665b6007546118d99160ff169069ffffffffffffffffffff16612edb565b60065461190a919074010000000000000000000000000000000000000000900469ffffffffffffffffffff166131c1565b61191491906131ed565b6007549091506a0100000000000000000000900460ff1615611967578073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610915050919050565b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1611915050919050565b6040517f47e25f21000000000000000000000000000000000000000000000000000000008152620f424060048201525f9073ffffffffffffffffffffffffffffffffffffffff8316906347e25f2190602401602060405180830381865afa158015611a0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a2f9190612d13565b6001546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820184905292935091169063095ea7b3906044016020604051808303815f875af1158015611aa7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611acb9190612d2a565b506040517fbc0d984d000000000000000000000000000000000000000000000000000000008152306004820181905260248201525f6044820181905260648201839052620f4240608483015260a482015273ffffffffffffffffffffffffffffffffffffffff83169063bc0d984d9060c4016020604051808303815f875af1158015611b59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b7d9190612d13565b6002555050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611ca057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611e5957600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611d39573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5d9190612d13565b905064e8d4a510008110611e5757600480546040517f8172047900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093528483166024820152604481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606482015291169063817204799060840160408051808303815f875af1158015611e30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5491906130ae565b50505b505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461205e57600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611f40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f649190612d13565b9050624c4b40811061205c57600480546040517f8172047900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093528483166024820152604481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606482015291169063817204799060840160408051808303815f875af1158015612035573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205991906130ae565b50505b505b73ffffffffffffffffffffffffffffffffffffffff8116158015906120cf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156110aa5760045473ffffffffffffffffffffffffffffffffffffffff16316301312d0081106121c257600480546040517f817204790000000000000000000000000000000000000000000000000000000081525f9281019290925273ffffffffffffffffffffffffffffffffffffffff8481166024840152604483018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6064840152169063817204799060840160408051808303815f875af115801561219b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bf91906130ae565b50505b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092527f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612252573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122769190612d13565b90506301312d00811061061c57600480546040517f8172047900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116938201939093528483166024820152604481018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606482015291169063817204799060840160408051808303815f875af1158015612348573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236c91906130ae565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82166123b2577f000000000000000000000000000000000000000000000000000000000000000091505b5f8373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124209190613234565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b4576124ac61248360068361324d565b857f00000000000000000000000000000000000000000000000000000000000000006078612653565b91505061097c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253e576124ac61251560128361324d565b857f00000000000000000000000000000000000000000000000000000000000000006078612653565b5f6006820390505f60068573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612591573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125b59190613234565b0390505f6125e683887f00000000000000000000000000000000000000000000000000000000000000006078612653565b90505f61261683887f00000000000000000000000000000000000000000000000000000000000000006078612653565b90508069ffffffffffffffffffff168269ffffffffffffffffffff1664e8d4a510000281612646576126466130d0565b0498975050505050505050565b6003546040517fbc501ee700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301525f92839291169063bc501ee790604401602060405180830381865afa1580156126cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f09190612d45565b6040805160028082526060820183529293505f92909160208301908036833701905050905083815f815181106127285761272861328b565b602002602001019063ffffffff16908163ffffffff16815250505f816001815181106127565761275661328b565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff84169063883bdbfd906127bf9085906004016132b8565b5f60405180830381865afa1580156127d9573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261281e9190810190613396565b5090505f8563ffffffff1660060b825f8151811061283e5761283e61328b565b6020026020010151836001815181106128595761285961328b565b60200260200101510360060b81612872576128726130d0565b0590505f61288489896103d88561289e565b90506128908a82610ef6565b9a9950505050505050505050565b60020b5f60ff82901d80830118620d89e88111156128e0576128e07f8b86327a0000000000000000000000000000000000000000000000000000000084612b9b565b7001fffcb933bd6fad37aa2d162d1a5940016001821602700100000000000000000000000000000000186002821615612929576ffff97272373d413259a46990580e213a0260801c5b6004821615612948576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612967576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612986576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156129a5576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156129c4576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156129e3576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612a03576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612a23576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612a43576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612a63576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612a83576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612aa3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612ac3576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612ae3576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612b04576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612b24576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612b43576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612b60576b048a170391f7dc42444e8fa20260801c5b5f841315612b8b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff045b63ffffffff0160201c9392505050565b815f528060020b60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff811681146110aa575f80fd5b5f60208284031215612bdb575f80fd5b813561117081612baa565b5f60208284031215612bf6575f80fd5b5035919050565b80355f81900b8114610e8f575f80fd5b5f8060408385031215612c1e575f80fd5b612c2783612bfd565b9150602083013569ffffffffffffffffffff81168114612c45575f80fd5b809150509250929050565b80151581146110aa575f80fd5b5f60208284031215612c6d575f80fd5b813561117081612c50565b5f8060408385031215612c89575f80fd5b612c9283612bfd565b91506020830135612c4581612baa565b5f805f60608486031215612cb4575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215612cdd575f80fd5b8335612ce881612baa565b92506020840135612cf881612baa565b91506040840135612d0881612baa565b809150509250925092565b5f60208284031215612d23575f80fd5b5051919050565b5f60208284031215612d3a575f80fd5b815161117081612c50565b5f60208284031215612d55575f80fd5b815161117081612baa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff81118282101715612db157612db1612d60565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612dfe57612dfe612d60565b604052919050565b8051610e8f81612baa565b805160ff81168114610e8f575f80fd5b5f610120828403128015612e33575f80fd5b50612e3c612d8d565b612e4583612e06565b8152612e5360208401612e06565b602082015260408381015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e08084015190820152612ea16101008401612e11565b6101008201529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8183021692508183048114821517612f3957612f39612eae565b505092915050565b5f81810b9083900b01607f81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808212171561097c5761097c612eae565b6001815b6001841115612fba57808504811115612f9e57612f9e612eae565b6001841615612fac57908102905b60019390931c928002612f83565b935093915050565b5f82612fd05750600161097c565b81612fdc57505f61097c565b8160018114612ff25760028114612ffc57613018565b600191505061097c565b60ff84111561300d5761300d612eae565b50506001821b61097c565b5060208310610133831016604e8410600b841016171561303b575081810a61097c565b6130667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612f7f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561309857613098612eae565b029392505050565b5f61117060ff841683612fc2565b5f80604083850312156130bf575f80fd5b505080516020909101519092909150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261310b5761310b6130d0565b500490565b808202811582820484141761097c5761097c612eae565b5f815f0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80810361315a5761315a612eae565b5f0392915050565b69ffffffffffffffffffff818116838216029081169081811461318757613187612eae565b5092915050565b5f69ffffffffffffffffffff8316806131a9576131a96130d0565b8069ffffffffffffffffffff84160491505092915050565b73ffffffffffffffffffffffffffffffffffffffff818116838216019081111561097c5761097c612eae565b5f73ffffffffffffffffffffffffffffffffffffffff831680613212576132126130d0565b8073ffffffffffffffffffffffffffffffffffffffff84160491505092915050565b5f60208284031215613244575f80fd5b61117082612e11565b5f82810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808112607f8213171561097c5761097c612eae565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b818110156132f557835163ffffffff168352602093840193909201916001016132d1565b509095945050505050565b5f67ffffffffffffffff82111561331957613319612d60565b5060051b60200190565b5f82601f830112613332575f80fd5b815161334561334082613300565b612db7565b8082825260208201915060208360051b860101925085831115613366575f80fd5b602085015b8381101561338c57805161337e81612baa565b83526020928301920161336b565b5095945050505050565b5f80604083850312156133a7575f80fd5b825167ffffffffffffffff8111156133bd575f80fd5b8301601f810185136133cd575f80fd5b80516133db61334082613300565b8082825260208201915060208360051b8501019250878311156133fc575f80fd5b6020840193505b8284101561342c5783518060060b811461341b575f80fd5b825260209384019390910190613403565b80955050505050602083015167ffffffffffffffff81111561344c575f80fd5b61345885828601613323565b915050925092905056fea2646970667358221220bc6c294fc1dc208ab17702eb34c6fdbbf447b0c647fd66b87811201aebb8e00f64736f6c634300081a0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d000000000000000000000000280c6098169b7103417302e4277988ba5aa196ba00000000000000000000000042ebf47db15dc996b1288f417062b8386a8a3873