5 txs
7 calls
constructor
constructor(address utilsAdr, address holdingAdr, address _tokenContractAdr)
functions
automator
viewfunction automator() view returns (address)
configFast
viewfunction configFast() view returns (uint80 cashOutPrice, uint80 buyBackPrice, uint24 minTradePercent)
configSlow
viewfunction configSlow() view returns (address pool, address base, address quote, uint256 tokenId, int8 decimalDiff)
correctPriceDirection
purefunction correctPriceDirection(address base, address quote, uint160 sqrtPriceX96) pure returns (uint160 sqrtPriceX96Corrected)
GAS_GRANT
viewfunction GAS_GRANT() view returns (uint256)
getDesiredAction
viewfunction getDesiredAction(uint160 price) view returns (uint8 action)
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 (uint80 lastTradedPrice, uint80 bestObservedPrice, bool direction, bool providingLiquidity, bool waiting)
taskId
viewfunction taskId() view returns (uint256)
tokenContractAdr
viewfunction tokenContractAdr() view returns (address)
tokenHeld
viewfunction tokenHeld() view returns (address)
utils
viewfunction utils() view returns (address)
execute
nonpayablefunction execute(uint256 handle)
migrateFrom
nonpayablefunction migrateFrom(address old)
migrateManually
nonpayablefunction migrateManually(address base, address quote, uint80 cashOutPrice, uint80 buyBackPrice, uint24 minTradePercent, uint256 tokenId, address _tokenHeld, uint80 lastTradedPrice, uint80 bestObservedPrice, bool direction, bool providingLiquidity, bool waiting)
onDeposit
nonpayablefunction onDeposit(uint256 howMuch)
prepareWithdraw
nonpayablefunction prepareWithdraw(uint256 amtEth)
prepareWithdrawAll
nonpayablefunction prepareWithdrawAll()
renounceOwnership
nonpayablefunction renounceOwnership()
rescueEth
nonpayablefunction rescueEth()
rescueTokens
nonpayablefunction rescueTokens(address token)
setConfig
nonpayablefunction setConfig(address base, address quote, uint80 cashOutPrice, uint80 buyBackPrice, uint80 liquidityLowPrice, uint80 liquidityHighPrice, uint24 minTradePercent)
setHoldingContract
nonpayablefunction setHoldingContract(address holdingAdr)
setToken
nonpayablefunction setToken(address _tokenContractAdr)
setUtils
nonpayablefunction setUtils(address utilsAdr)
startAutomation
nonpayablefunction startAutomation()
stopAutomation
nonpayablefunction stopAutomation()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AutomationStarted
event AutomationStarted(uint80 price)
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
0x60e060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a05273f94e7d0710709388bce3161c32b4eea56d3f91cc60c052600180546001600160a01b03191673aaa000e1b72bf8dfa74c958e19e925c0bfae9ded1790555f600255348015610081575f80fd5b506040516159033803806159038339810160408190526100a091610153565b6100a9336100e9565b600480546001600160a01b03199081166001600160a01b039485161790915560038054821694841694909417909355600580549093169116179055610193565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014e575f80fd5b919050565b5f805f60608486031215610165575f80fd5b61016e84610138565b925061017c60208501610138565b915061018a60408501610138565b90509250925092565b60805160a05160c0516157036102005f395f50505f8181611c3d01528181611c9401528181611e1601528181611eec015281816140160152818161413c015261419e01525f8181611cea015281816140aa0152818161410c01528181614246015261427601526157035ff3fe608060405234801561000f575f80fd5b506004361061021a575f3560e01c80635dd8d678116101235780638da5cb5b116100b8578063c19d93fb11610088578063ce31a06b1161006e578063ce31a06b14610684578063f2fde38b1461068c578063fe0d94c11461069f575f80fd5b8063c19d93fb146105be578063c1f36c681461067c575f80fd5b80638da5cb5b14610573578063aa9a091214610590578063b1abe103146105a3578063b3a57943146105ab575f80fd5b8063715018a6116100f3578063715018a6146105225780637a3dfdad1461052a5780637e223c52146105585780638287ccb414610560575f80fd5b80635dd8d678146104a8578063677342ce146104bb57806369953501146104ef5780636cb8491514610502575f80fd5b80632413d155116101b35780633ed29efe1161018357806342fc73951161016957806342fc7395146104555780635a29638d146104685780635d52f9fc14610488575f80fd5b80633ed29efe146103605780634126c3fa146103df575f80fd5b80632413d155146103115780633322b23d1461033157806335657e681461033a578063382e47811461034d575f80fd5b8063144fa6d7116101ee578063144fa6d7146102935780631cb78541146102a65780631f3e51fd146102eb5780631fba9eda146102fe575f80fd5b8062ae3bf81461021e578063048e92f614610233578063082e2ffe1461025b578063111ffe5e1461027b575b5f80fd5b61023161022c3660046149e9565b6106b2565b005b610246610241366004614a04565b610815565b60405190151581526020015b60405180910390f35b61026e6102693660046149e9565b610940565b6040516102529190614a48565b61028562130ee881565b604051908152602001610252565b6102316102a13660046149e9565b610d12565b6001546102c69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610252565b6102316102f93660046149e9565b610d61565b6102c661030c366004614ab6565b610db0565b6005546102c69073ffffffffffffffffffffffffffffffffffffffff1681565b61028560025481565b6102316103483660046149e9565b610e19565b61023161035b366004614a04565b6114db565b600854600954600a54600b54600c546103979473ffffffffffffffffffffffffffffffffffffffff908116948116931691905f0b85565b6040805173ffffffffffffffffffffffffffffffffffffffff96871681529486166020860152929094169183019190915260608201525f9190910b608082015260a001610252565b600d546104279069ffffffffffffffffffff808216916a010000000000000000000081049091169074010000000000000000000000000000000000000000900462ffffff1683565b6040805169ffffffffffffffffffff948516815293909216602084015262ffffff1690820152606001610252565b610231610463366004614b15565b61163a565b6003546102c69073ffffffffffffffffffffffffffffffffffffffff1681565b6004546102c69073ffffffffffffffffffffffffffffffffffffffff1681565b6102316104b6366004614bed565b611bac565b6104ce6104c9366004614a04565b612561565b6040516fffffffffffffffffffffffffffffffff9091168152602001610252565b6102316104fd3660046149e9565b6126e2565b6007546102c69073ffffffffffffffffffffffffffffffffffffffff1681565b610231612731565b61053d610538366004614c7e565b612744565b60405169ffffffffffffffffffff9091168152602001610252565b61023161281f565b61023161056e366004614a04565b612a8f565b5f5473ffffffffffffffffffffffffffffffffffffffff166102c6565b61028561059e366004614caa565b612b70565b610231612c3a565b6102c66105b9366004614cd3565b612da3565b60065461063e9069ffffffffffffffffffff808216916a010000000000000000000081049091169060ff740100000000000000000000000000000000000000008204811691750100000000000000000000000000000000000000000081048216917601000000000000000000000000000000000000000000009091041685565b6040805169ffffffffffffffffffff96871681529590941660208601529115159284019290925290151560608301521515608082015260a001610252565b610231612e1f565b610231613047565b61023161069a3660046149e9565b613093565b6102316106ad366004614a04565b613147565b6106ba613cdb565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6106f45f5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa15801561075c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107809190614d1b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303815f875af11580156107ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108119190614d32565b5050565b5f6002545f148061082557504282105b1561083257506001919050565b600854604080517f3850c7bd00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff1691633850c7bd9160048083019260e09291908290030181865afa15801561089f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c39190614d6e565b5050600954600a549596506108f99573ffffffffffffffffffffffffffffffffffffffff9182169550169250859150612da39050565b600c549091505f9061090d90820b83612744565b69ffffffffffffffffffff1690505f61092582610940565b600681111561093657610936614a1b565b1415949350505050565b6040805160a08101825260065469ffffffffffffffffffff80821683526a010000000000000000000080830482166020808601919091527401000000000000000000000000000000000000000080850460ff90811615158789015275010000000000000000000000000000000000000000008604811615156060808901919091527601000000000000000000000000000000000000000000009096041615156080870190815287519586018852600d54808616875293840490941691850191909152900462ffffff169382019390935291515f929015610a9757805f01516103e80269ffffffffffffffffffff16846103e30273ffffffffffffffffffffffffffffffffffffffff16118015610a83575080602001516103e80269ffffffffffffffffffff16846103ed0273ffffffffffffffffffffffffffffffffffffffff16105b15610a92575060069392505050565b610d09565b816060015115610b0e57805169ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff85161015610ad6575060039392505050565b806020015169ffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161115610a92575060049392505050565b81604001518015610b625750816020015169ffffffffffffffffffff166103e80273ffffffffffffffffffffffffffffffffffffffff16846103e30273ffffffffffffffffffffffffffffffffffffffff16115b15610b71575060059392505050565b8160400151158015610bc65750816020015169ffffffffffffffffffff166103e80273ffffffffffffffffffffffffffffffffffffffff16846103ed0273ffffffffffffffffffffffffffffffffffffffff16105b15610bd5575060059392505050565b8160400151610c75575f621e84808260400151620f4240610bf69190614e1b565b62ffffff16835f01518560200151610c0e9190614e36565b69ffffffffffffffffffff16610c249190614e58565b610c2e9190614eeb565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161115610c6f57506002949350505050565b50610d09565b5f621e84808260400151620f4240610c8d9190614f32565b62ffffff1683602001518560200151610ca69190614e36565b69ffffffffffffffffffff16610cbc9190614e58565b610cc69190614eeb565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161015610d0757506001949350505050565b505b505f9392505050565b610d1a613cdb565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610d69613cdb565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f80610df269ffffffffffffffffffff84167801000000000000000000000000000000000000000000000000610de787600c614f4d565b61059e90600a6150ac565b9050610dfd81612561565b6fffffffffffffffffffffffffffffffff169150505b92915050565b610e21613cdb565b5f805f808473ffffffffffffffffffffffffffffffffffffffff16633ed29efe6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610e6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9291906150ba565b5093509350935093505f805f8773ffffffffffffffffffffffffffffffffffffffff16634126c3fa6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ee7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0b9190615121565b9250925092506040518060a001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe39190615160565b8873ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110509190615160565b61105a9190615179565b5f90810b9091528151600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602080850151600980548416918516919091179055604080860151600a80548516918616919091179055606080870151600b55608090960151600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9092169190911790558051958601815269ffffffffffffffffffff89811680885290891692870183905262ffffff8816968201879052600d8054909416176a0100000000000000000000909202919091177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090950294909417905582517fc19d93fb000000000000000000000000000000000000000000000000000000008152925191928392839283928392918f169163c19d93fb9160048082019260a0929091908290030181865afa1580156111f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061121c91906151b7565b945094509450945094508c73ffffffffffffffffffffffffffffffffffffffff16636cb849156040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611293919061521a565b600780547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556040805160a08101825269ffffffffffffffffffff8981168083529089166020808401829052891515848601819052891515606086018190528915156080909601869052600680549098169094176a0100000000000000000000909302929092177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000009092027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16919091177501000000000000000000000000000000000000000000909202919091177fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000009092029190911790925560015481517fbb54240400000000000000000000000000000000000000000000000000000000815291515f94919091169263bb54240492600480820193918290030181865afa158015611450573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611474919061521a565b905061147f81613d5b565b5f611488613f54565b60405169ffffffffffffffffffff821681529091507ff12c538904fa9fe594295f2c4046a3fb31971aa9b8559708d17db8d1103cc86a9060200160405180910390a1505050505050505050505050505050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146114fe575f80fd5b60045473ffffffffffffffffffffffffffffffffffffffff16318111801561153d575060075473ffffffffffffffffffffffffffffffffffffffff1615155b156116375760045460075473ffffffffffffffffffffffffffffffffffffffff91821691638172047991165f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611595853187615235565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815273ffffffffffffffffffffffffffffffffffffffff9485166004820152939092166024840152604483015260648201526084015b60408051808303815f875af1158015611610573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116349190615248565b50505b50565b611642613cdb565b6003546040517f7afd0a8600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e811660048301528d811660248301525f60448301819052921690637afd0a86906064016020604051808303815f875af11580156116c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e4919061521a565b90506040518060a001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff1681526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611794573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b89190615160565b8f73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611801573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118259190615160565b61182f9190615179565b5f0b81525060085f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015f6101000a81548160ff02191690835f0b60ff16021790555090505060405180606001604052808c69ffffffffffffffffffff1681526020018b69ffffffffffffffffffff1681526020018a62ffffff16815250600d5f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548162ffffff021916908362ffffff1602179055509050508660075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060a001604052808769ffffffffffffffffffff1681526020018669ffffffffffffffffffff1681526020018515158152602001841515815260200183151581525060065f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548160ff0219169083151502179055506060820151815f0160156101000a81548160ff0219169083151502179055506080820151815f0160166101000a81548160ff0219169083151502179055509050505f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb5424046040518163ffffffff1660e01b8152600401602060405180830381865afa158015611450573d5f803e3d5ffd5b611bb4613cdb565b600b5415611c3b5760048054600b546040517f4a2539c30000000000000000000000000000000000000000000000000000000081529283015273ffffffffffffffffffffffffffffffffffffffff1690634a2539c3906024015f604051808303815f87803b158015611c24575f80fd5b505af1158015611c36573d5f803e3d5ffd5b505050505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611d3a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611d3857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b155b15611f7a575f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639ba692496040518163ffffffff1660e01b8152600401602060405180830381865afa158015611daa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dce919061526a565b6003546040517f7afd0a8600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526fffffffffffffffffffffffffffffffff84166044830152929350911690637afd0a86906064016020604051808303815f875af1158015611e7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea3919061521a565b506003546040517f7afd0a8600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526fffffffffffffffffffffffffffffffff8416604483015290911690637afd0a86906064016020604051808303815f875af1158015611f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f77919061521a565b50505b6003546040517f7afd0a8600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff898116600483015288811660248301525f60448301819052921690637afd0a86906064016020604051808303815f875af1158015611ff8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061201c919061521a565b60045490915073ffffffffffffffffffffffffffffffffffffffff90811631908816158015906120515750655af3107a400081115b1561211f57600480546040517f817204790000000000000000000000000000000000000000000000000000000081525f9281019290925273ffffffffffffffffffffffffffffffffffffffff8a81166024840152604483018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6064840152169063817204799060840160408051808303815f875af11580156120f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211c9190615248565b50505b600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216928101929092525f91908a16906370a0823190602401602060405180830381865afa158015612192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b69190614d1b565b600480546040517f6a0f27c200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116938201939093528d831660248201528c8316604482015269ffffffffffffffffffff808b1660648301528916608482015260a481018490529293505f92911690636a0f27c29060c40160408051808303815f875af115801561225c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122809190615299565b5090506040518060a001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612331573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123559190615160565b8d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561239e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c29190615160565b6123cc9190615179565b5f0b90528051600880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602080840151600980548416918516919091179055604080850151600a805485169190951617909355606080850151600b55608090940151600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9092169190911790558251938401835269ffffffffffffffffffff9c8d168085529b909c169b83018c905262ffffff979097169101819052600d805487169099176a0100000000000000000000909a02999099177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000009099029890981790965550506006805475010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909116179055600780549091169055505050505050565b5f815f0361257057505f919050565b81600170010000000000000000000000000000000082106125965760809190911c9060401b5b6801000000000000000082106125b15760409190911c9060201b5b64010000000082106125c85760209190911c9060101b5b6201000082106125dd5760109190911c9060081b5b61010082106125f15760089190911c9060041b5b601082106126045760049190911c9060021b5b600882106126105760011b5b600181858161262157612621614ebe565b048201901c9050600181858161263957612639614ebe565b048201901c9050600181858161265157612651614ebe565b048201901c9050600181858161266957612669614ebe565b048201901c9050600181858161268157612681614ebe565b048201901c9050600181858161269957612699614ebe565b048201901c905060018185816126b1576126b1614ebe565b0491909101901c5f6126c382866152c3565b90508082106126d257806126d4565b815b95945050505050565b919050565b6126ea613cdb565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b612739613cdb565b6127425f613f84565b565b5f80835f0b126127c4576127bd61277573ffffffffffffffffffffffffffffffffffffffff8416630e8d4a516152d6565b61278085600a6150ac565b6127a09073ffffffffffffffffffffffffffffffffffffffff86166152d6565b761000000000000000000000000000000000000000000000612b70565b9050610e13565b6127bd6127eb73ffffffffffffffffffffffffffffffffffffffff8416630e8d4a516152d6565b73ffffffffffffffffffffffffffffffffffffffff841660b461280d876152ed565b61281890600a6150ac565b901b612b70565b612827613cdb565b600154604080517fbb54240400000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163bb5424049160048083019260209291908290030181865afa158015612894573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b8919061521a565b90506002545f148061296257506002546040517f976217cd000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff82169063976217cd9060240161012060405180830381865afa158015612933573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061295791906153d9565b610100015160ff1615155b6129cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416c72656164792072756e6e696e67000000000000000000000000000000000060448201526064015b60405180910390fd5b5f6129d6613f54565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166a010000000000000000000069ffffffffffffffffffff84169081027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016919091171790559050612a4c82613d5b565b60405169ffffffffffffffffffff821681527ff12c538904fa9fe594295f2c4046a3fb31971aa9b8559708d17db8d1103cc86a9060200160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff163314612ab2575f80fd5b624c4b408110158015612adc575060075473ffffffffffffffffffffffffffffffffffffffff1615155b1561163757600480546007546040517f817204790000000000000000000000000000000000000000000000000000000081525f9381019390935273ffffffffffffffffffffffffffffffffffffffff9081166024840152604483018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606484015216906381720479906084016115f5565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f03612bc3575f8411612bb8575f80fd5b508290049050612c33565b808411612bce575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b612c42613cdb565b5f60025560015473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612c825f5473ffffffffffffffffffffffffffffffffffffffff1690565b6001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015612cee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d129190614d1b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303815f875af1158015612d7f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116379190614d32565b5f8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161015612ddf575080612c33565b612e1873ffffffffffffffffffffffffffffffffffffffff831678010000000000000000000000000000000000000000000000006152c3565b9050612c33565b60055473ffffffffffffffffffffffffffffffffffffffff163314612e42575f80fd5b600b5415612ec95760048054600b546040517f329aa4140000000000000000000000000000000000000000000000000000000081529283015273ffffffffffffffffffffffffffffffffffffffff169063329aa414906024015f604051808303815f87803b158015612eb2575f80fd5b505af1158015612ec4573d5f803e3d5ffd5b505050505b60075473ffffffffffffffffffffffffffffffffffffffff161561274257600480546007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316938101849052638172047992909116905f9082906370a0823190602401602060405180830381865afa158015612f64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f889190614d1b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606482015260840160408051808303815f875af1158015613023573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108119190615248565b61304f613cdb565b5f805460405173ffffffffffffffffffffffffffffffffffffffff909116914780156108fc02929091818181858888f19350505050158015611637573d5f803e3d5ffd5b61309b613cdb565b73ffffffffffffffffffffffffffffffffffffffff811661313e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016129c4565b61163781613f84565b6002545f036131535750565b600854604080517f3850c7bd00000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff1691633850c7bd9160048083019260e09291908290030181865afa1580156131c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131e49190614d6e565b5050600954600a5495965061321a9573ffffffffffffffffffffffffffffffffffffffff9182169550169250859150612da39050565b600c549091505f9061322e90820b83612744565b90505f6132468269ffffffffffffffffffff16610940565b6040805160a08101825260065469ffffffffffffffffffff80821683526a0100000000000000000000820416602083015260ff74010000000000000000000000000000000000000000820481161515938301939093527501000000000000000000000000000000000000000000810483161515606083015276010000000000000000000000000000000000000000000090049091161515608082015290915060058260068111156132f9576132f9614a1b565b036133495769ffffffffffffffffffff831660208281018290526040519182527f9aa54d3e86f75cc1d8ac502d5a25d5c0563481537f37787aebdc54a27d156897910160405180910390a1613b0b565b600482600681111561335d5761335d614a1b565b148061337a5750600382600681111561337857613378614a1b565b145b156138ee5760048054600b546040517f329aa4140000000000000000000000000000000000000000000000000000000081529283015273ffffffffffffffffffffffffffffffffffffffff169063329aa414906024015f604051808303815f87803b1580156133e7575f80fd5b505af11580156133f9573d5f803e3d5ffd5b50505f6060840181905291506004905083600681111561341b5761341b614a1b565b036135e057600a54600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821692810192909252909116906370a0823190602401602060405180830381865afa158015613494573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b89190614d1b565b60048054600a546009546040517f8172047900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152604483018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6064840152929350919091169063817204799060840160408051808303815f875af1158015613567573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061358b9190615248565b5050600954600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790556001604083015261379b565b600954600480546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821692810192909252909116906370a0823190602401602060405180830381865afa158015613654573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136789190614d1b565b60048054600954600a546040517f8172047900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169481019490945281166024840152604483018490527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6064840152929350919091169063817204799060840160408051808303815f875af1158015613727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061374b9190615248565b5050600a54600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9092169190911790555f60408301525b5060045473ffffffffffffffffffffffffffffffffffffffff1631655af3107a4000811180156137e2575060075473ffffffffffffffffffffffffffffffffffffffff1615155b156138e85760045460075473ffffffffffffffffffffffffffffffffffffffff918216916381720479915f9116600a61381c8660096152d6565b61382691906152c3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606482015260840160408051808303815f875af11580156138c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138e59190615248565b50505b50613b0b565b600682600681111561390257613902614a1b565b03613912575f6080820152613b0b565b5f82600681111561392557613925614a1b565b14613b0b5760045473ffffffffffffffffffffffffffffffffffffffff1631655af3107a4000811115613a5557600454600a805473ffffffffffffffffffffffffffffffffffffffff928316926381720479925f92909116906139898660096152d6565b61399391906152c3565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b16815273ffffffffffffffffffffffffffffffffffffffff938416600482015292909116602483015260448201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff606482015260840160408051808303815f875af1158015613a2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a529190615248565b50505b60048054600b546040517f145a6ae00000000000000000000000000000000000000000000000000000000081529283015273ffffffffffffffffffffffffffffffffffffffff169063145a6ae0906024015f604051808303815f87803b158015613abd575f80fd5b505af1158015613acf573d5f803e3d5ffd5b505060016060850181905260808501525050600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055505b805160068054602080850151604080870151606088015160808901511515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff9115157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9315157401000000000000000000000000000000000000000002939093167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff69ffffffffffffffffffff9687166a0100000000000000000000027fffffffffffffffffffffffff000000000000000000000000000000000000000090991696909a169590951796909617979097169290921791909117949094169190911790915560015482517fbb5424040000000000000000000000000000000000000000000000000000000081529251613cd49373ffffffffffffffffffffffffffffffffffffffff9092169263bb54240492600480820193918290030181865afa158015613cab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ccf919061521a565b613d5b565b5050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016129c4565b6040517f47e25f2100000000000000000000000000000000000000000000000000000000815262130ee860048201525f9073ffffffffffffffffffffffffffffffffffffffff8316906347e25f2190602401602060405180830381865afa158015613dc8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dec9190614d1b565b6001546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820184905292935091169063095ea7b3906044016020604051808303815f875af1158015613e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e889190614d32565b505f613e974262093a80615466565b6040517fbc0d984d00000000000000000000000000000000000000000000000000000000815230600482018190526024820152604481018290526064810184905262130ee8608482015260a4810182905290915073ffffffffffffffffffffffffffffffffffffffff84169063bc0d984d9060c4016020604051808303815f875af1158015613f28573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f4c9190614d1b565b600255505050565b600954600a545f91613f7f9173ffffffffffffffffffffffffffffffffffffffff9182169116613ff8565b905090565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f73ffffffffffffffffffffffffffffffffffffffff8216614038577f000000000000000000000000000000000000000000000000000000000000000091505b5f8373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015614082573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140a69190615160565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361413a57614132614109600683615179565b857f000000000000000000000000000000000000000000000000000000000000000060786142d9565b915050610e13565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036141c45761413261419b601283615179565b857f000000000000000000000000000000000000000000000000000000000000000060786142d9565b5f6006820390505f60068573ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015614217573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061423b9190615160565b0390505f61426c83887f000000000000000000000000000000000000000000000000000000000000000060786142d9565b90505f61429c83887f000000000000000000000000000000000000000000000000000000000000000060786142d9565b90508069ffffffffffffffffffff168269ffffffffffffffffffff1664e8d4a5100002816142cc576142cc614ebe565b0498975050505050505050565b6003546040517fbc501ee700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301525f92839291169063bc501ee790604401602060405180830381865afa158015614352573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614376919061521a565b6040805160028082526060820183529293505f92909160208301908036833701905050905083815f815181106143ae576143ae615479565b602002602001019063ffffffff16908163ffffffff16815250505f816001815181106143dc576143dc615479565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff84169063883bdbfd906144459085906004016154a6565b5f60405180830381865afa15801561445f573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526144a49190810190615584565b5090505f8563ffffffff1660060b825f815181106144c4576144c4615479565b6020026020010151836001815181106144df576144df615479565b60200260200101510360060b816144f8576144f8614ebe565b0590505f61450a89896105b985614524565b90506145168a82612744565b9a9950505050505050505050565b5f805f8360020b12614539578260020b614546565b8260020b61454690615650565b90506145717ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618615686565b62ffffff168111156145df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f540000000000000000000000000000000000000000000000000000000000000060448201526064016129c4565b5f816001165f0361460157700100000000000000000000000000000000614613565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561465257608061464d826ffff97272373d413259a46990580e213a6152d6565b901c90505b600482161561467c576080614677826ffff2e50f5f656932ef12357cf3c7fdcc6152d6565b901c90505b60088216156146a65760806146a1826fffe5caca7e10e4e61c3624eaa0941cd06152d6565b901c90505b60108216156146d05760806146cb826fffcb9843d60f6159c9db58835c9266446152d6565b901c90505b60208216156146fa5760806146f5826fff973b41fa98c081472e6896dfb254c06152d6565b901c90505b604082161561472457608061471f826fff2ea16466c96a3843ec78b326b528616152d6565b901c90505b608082161561474e576080614749826ffe5dee046a99a2a811c461f1969c30536152d6565b901c90505b610100821615614779576080614774826ffcbe86c7900a88aedcffc83b479aa3a46152d6565b901c90505b6102008216156147a457608061479f826ff987a7253ac413176f2b074cf7815e546152d6565b901c90505b6104008216156147cf5760806147ca826ff3392b0822b70005940c7a398e4b70f36152d6565b901c90505b6108008216156147fa5760806147f5826fe7159475a2c29b7443b29c7fa6e889d96152d6565b901c90505b611000821615614825576080614820826fd097f3bdfd2022b8845ad8f792aa58256152d6565b901c90505b61200082161561485057608061484b826fa9f746462d870fdf8a65dc1f90e061e56152d6565b901c90505b61400082161561487b576080614876826f70d869a156d2a1b890bb3df62baf32f76152d6565b901c90505b6180008216156148a65760806148a1826f31be135f97d08fd981231505542fcfa66152d6565b901c90505b620100008216156148d25760806148cd826f09aa508b5b7a84e1c677de54f3e99bc96152d6565b901c90505b620200008216156148fd5760806148f8826e5d6af8dedb81196699c329225ee6046152d6565b901c90505b62040000821615614927576080614922826d2216e584f5fa1ea926041bedfe986152d6565b901c90505b6208000082161561494f57608061494a826b048a170391f7dc42444e8fa26152d6565b901c90505b5f8460020b131561498757614984817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6152c3565b90505b614996640100000000826156ba565b156149a25760016149a4565b5f5b6149b59060ff16602083901c615466565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611637575f80fd5b80356126dd816149bd565b5f602082840312156149f9575f80fd5b8135612c33816149bd565b5f60208284031215614a14575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160078310614a81577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b805f0b8114611637575f80fd5b69ffffffffffffffffffff81168114611637575f80fd5b80356126dd81614a94565b5f8060408385031215614ac7575f80fd5b8235614ad281614a87565b91506020830135614ae281614a94565b809150509250929050565b62ffffff81168114611637575f80fd5b8015158114611637575f80fd5b80356126dd81614afd565b5f805f805f805f805f805f806101808d8f031215614b31575f80fd5b8c35614b3c816149bd565b9b5060208d0135614b4c816149bd565b9a5060408d0135614b5c81614a94565b995060608d0135614b6c81614a94565b985060808d0135614b7c81614aed565b975060a08d01359650614b9160c08e016149de565b9550614b9f60e08e01614aab565b9450614bae6101008e01614aab565b9350614bbd6101208e01614b0a565b9250614bcc6101408e01614b0a565b9150614bdb6101608e01614b0a565b90509295989b509295989b509295989b565b5f805f805f805f60e0888a031215614c03575f80fd5b8735614c0e816149bd565b96506020880135614c1e816149bd565b95506040880135614c2e81614a94565b94506060880135614c3e81614a94565b93506080880135614c4e81614a94565b925060a0880135614c5e81614a94565b915060c0880135614c6e81614aed565b8091505092959891949750929550565b5f8060408385031215614c8f575f80fd5b8235614c9a81614a87565b91506020830135614ae2816149bd565b5f805f60608486031215614cbc575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215614ce5575f80fd5b8335614cf0816149bd565b92506020840135614d00816149bd565b91506040840135614d10816149bd565b809150509250925092565b5f60208284031215614d2b575f80fd5b5051919050565b5f60208284031215614d42575f80fd5b8151612c3381614afd565b805161ffff811681146126dd575f80fd5b805160ff811681146126dd575f80fd5b5f805f805f805f60e0888a031215614d84575f80fd5b8751614d8f816149bd565b8097505060208801518060020b8114614da6575f80fd5b9550614db460408901614d4d565b9450614dc260608901614d4d565b9350614dd060808901614d4d565b9250614dde60a08901614d5e565b915060c0880151614c6e81614afd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b62ffffff8181168382160190811115610e1357610e13614dee565b69ffffffffffffffffffff8181168382160190811115610e1357610e13614dee565b5f73ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8183021692508183048114821517614eb657614eb6614dee565b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f73ffffffffffffffffffffffffffffffffffffffff831680614f1057614f10614ebe565b8073ffffffffffffffffffffffffffffffffffffffff84160491505092915050565b62ffffff8281168282160390811115610e1357610e13614dee565b5f81810b9083900b01607f81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082121715610e1357610e13614dee565b6001815b6001841115614fc657808504811115614faa57614faa614dee565b6001841615614fb857908102905b60019390931c928002614f8f565b935093915050565b5f82614fdc57506001610e13565b81614fe857505f610e13565b8160018114614ffe576002811461500857615024565b6001915050610e13565b60ff84111561501957615019614dee565b50506001821b610e13565b5060208310610133831016604e8410600b8410161715615047575081810a610e13565b6150727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614f8b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156150a4576150a4614dee565b029392505050565b5f612c3360ff841683614fce565b5f805f805f60a086880312156150ce575f80fd5b85516150d9816149bd565b60208701519095506150ea816149bd565b60408701519094506150fb816149bd565b60608701516080880151919450925061511381614a87565b809150509295509295909350565b5f805f60608486031215615133575f80fd5b835161513e81614a94565b602085015190935061514f81614a94565b6040850151909250614d1081614aed565b5f60208284031215615170575f80fd5b612c3382614d5e565b5f82810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808112607f82131715610e1357610e13614dee565b5f805f805f60a086880312156151cb575f80fd5b85516151d681614a94565b60208701519095506151e781614a94565b60408701519094506151f881614afd565b606087015190935061520981614afd565b608087015190925061511381614afd565b5f6020828403121561522a575f80fd5b8151612c33816149bd565b81810381811115610e1357610e13614dee565b5f8060408385031215615259575f80fd5b505080516020909101519092909150565b5f6020828403121561527a575f80fd5b81516fffffffffffffffffffffffffffffffff81168114612c33575f80fd5b5f80604083850312156152aa575f80fd5b825191506152ba60208401614d5e565b90509250929050565b5f826152d1576152d1614ebe565b500490565b8082028115828204841417610e1357610e13614dee565b5f815f0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80810361532057615320614dee565b5f0392915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff8111828210171561537957615379615328565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153c6576153c6615328565b604052919050565b80516126dd816149bd565b5f6101208284031280156153eb575f80fd5b506153f4615355565b6153fd836153ce565b815261540b602084016153ce565b602082015260408381015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e080840151908201526154596101008401614d5e565b6101008201529392505050565b80820180821115610e1357610e13614dee565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b818110156154e357835163ffffffff168352602093840193909201916001016154bf565b509095945050505050565b5f67ffffffffffffffff82111561550757615507615328565b5060051b60200190565b5f82601f830112615520575f80fd5b815161553361552e826154ee565b61537f565b8082825260208201915060208360051b860101925085831115615554575f80fd5b602085015b8381101561557a57805161556c816149bd565b835260209283019201615559565b5095945050505050565b5f8060408385031215615595575f80fd5b825167ffffffffffffffff8111156155ab575f80fd5b8301601f810185136155bb575f80fd5b80516155c961552e826154ee565b8082825260208201915060208360051b8501019250878311156155ea575f80fd5b6020840193505b8284101561561a5783518060060b8114615609575f80fd5b8252602093840193909101906155f1565b80955050505050602083015167ffffffffffffffff81111561563a575f80fd5b61564685828601615511565b9150509250929050565b5f7f8000000000000000000000000000000000000000000000000000000000000000820361568057615680614dee565b505f0390565b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000810361532057615320614dee565b5f826156c8576156c8614ebe565b50069056fea2646970667358221220b552a643c8b3314c78b89f1125114392ac19a552d808bd4280d67515719d219f64736f6c634300081a0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d0000000000000000000000007d02c1c43a188c6cebafd2a59919f9b936289673000000000000000000000000877df422bf6f792430fe82126e3d794bc2ae4b5a