3 txs
184 calls
constructor
constructor((address pendleMarket, uint8 slippage, address ptToken, address ibToken)[] poolsData)
functions
getPoolData
viewfunction getPoolData(address, address) view returns (address pendleMarket, uint8 slippage)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
addPools
nonpayablefunction addPools(tuple[] poolsData)
redeemDust
nonpayablefunction redeemDust(address tokenA, address tokenB, address recipient)
renounceOwnership
nonpayablefunction renounceOwnership()
swapCallback
nonpayablefunction swapCallback(int256 ptToAccount, int256 syToAccount, bytes _data)
swapExactInput
nonpayablefunction swapExactInput(address recipient, address tokenIn, address tokenOut, uint256 amountIn, uint256 minAmountOut, bytes data) returns (uint256 amountOut)
swapExactOutput
nonpayablefunction swapExactOutput(address recipient, address tokenIn, address tokenOut, uint256 maxAmountIn, uint256 amountOut, bytes data) returns (uint256 amountIn)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
NewPair
event NewPair(address indexed ptToken, address indexed ibToken, address pendleMarket, uint8 slippage)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
errors
ApproxFail
error ApproxFail()
ApproximationFailed
error ApproximationFailed()
ApproxParamsInvalid
error ApproxParamsInvalid(uint256 guessMin, uint256 guessMax, uint256 eps)
InsufficientAmount
error InsufficientAmount()
MarketExchangeRateBelowOne
error MarketExchangeRateBelowOne(int256 exchangeRate)
MarketExpired
error MarketExpired()
MarketProportionMustNotEqualOne
error MarketProportionMustNotEqualOne()
MarketProportionTooHigh
error MarketProportionTooHigh(int256 proportion, int256 maxProportion)
MarketRateScalarBelowZero
error MarketRateScalarBelowZero(int256 rateScalar)
MarketZeroTotalPtOrTotalAsset
error MarketZeroTotalPtOrTotalAsset(int256 totalPt, int256 totalAsset)
NotSupported
error NotSupported()
TooMuchRequested
error TooMuchRequested()
UnknownPair
error UnknownPair()
WrongPoolInput
error WrongPoolInput()
creation bytecode
0x60806040523480156200001157600080fd5b5060405162004cad38038062004cad8339810160408190526200003491620005c4565b6200003f3362000051565b6200004a816200006f565b506200077a565b600180546001600160a01b03191690556200006c81620004ea565b50565b604080516080810182526000808252602082018190529181018290526060810191909152815160005b81811015620004e457838181518110620000b657620000b6620006e5565b6020026020010151925060006001600160a01b031683604001516001600160a01b03161480620000f1575060608301516001600160a01b0316155b8062000105575082516001600160a01b0316155b806200011957506064836020015160ff1610155b1562000138576040516325c1cddd60e01b815260040160405180910390fd5b60008084600001516001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156200017e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a49190620006fb565b5091509150806001600160a01b031685604001516001600160a01b031614620001e0576040516325c1cddd60e01b815260040160405180910390fd5b6060850151604051637d2d278360e11b81526001600160a01b0391821660048201529083169063fa5a4f0690602401602060405180830381865afa1580156200022d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025391906200074f565b1580620002d057506060850151604051633c21b3eb60e11b81526001600160a01b0391821660048201529083169063784367d690602401602060405180830381865afa158015620002a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ce91906200074f565b155b15620002ef576040516325c1cddd60e01b815260040160405180910390fd5b6000604051806040016040528087600001516001600160a01b03168152602001876020015160ff168152509050806002600088604001516001600160a01b03166001600160a01b03168152602001908152602001600020600088606001516001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff021916908360ff160217905550905050806002600088606001516001600160a01b03166001600160a01b03168152602001908152602001600020600088604001516001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff021916908360ff16021790555090505085606001516001600160a01b031686604001516001600160a01b03167fe546beeeab60a56b73c1b949bb268220b489f63cd1a9b947e6e8a34013d0824388600001518960200151604051620004cd9291906001600160a01b0392909216825260ff16602082015260400190565b60405180910390a383600101935050505062000098565b50505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200057557620005756200053a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620005a657620005a66200053a565b604052919050565b6001600160a01b03811681146200006c57600080fd5b60006020808385031215620005d857600080fd5b82516001600160401b0380821115620005f057600080fd5b818501915085601f8301126200060557600080fd5b8151818111156200061a576200061a6200053a565b6200062a848260051b016200057b565b818152848101925060079190911b8301840190878211156200064b57600080fd5b928401925b81841015620006da57608084890312156200066b5760008081fd5b6200067562000550565b84516200068281620005ae565b81528486015160ff81168114620006995760008081fd5b81870152604085810151620006ae81620005ae565b90820152606085810151620006c381620005ae565b908201528352608093909301929184019162000650565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000806000606084860312156200071157600080fd5b83516200071e81620005ae565b60208501519093506200073181620005ae565b60408501519092506200074481620005ae565b809150509250925092565b6000602082840312156200076257600080fd5b815180151581146200077357600080fd5b9392505050565b614523806200078a6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80637d4f036a11610081578063ec6390f41161005b578063ec6390f41461019c578063f2fde38b14610228578063fa483e721461023b57600080fd5b80637d4f036a1461012c5780638da5cb5b1461013f578063e30c39781461017e57600080fd5b80633768040e116100b25780633768040e14610109578063715018a61461011c57806379ba50971461012457600080fd5b80630dcaa34c146100ce5780632f1ccfbe146100e3575b600080fd5b6100e16100dc366004613b29565b61024e565b005b6100f66100f1366004613bbd565b61036e565b6040519081526020015b60405180910390f35b6100e1610117366004613c4c565b610473565b6100e16104da565b6100e16104ee565b6100f661013a366004613bbd565b6105a8565b60005473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b60015473ffffffffffffffffffffffffffffffffffffffff16610159565b6101fa6101aa366004613cc1565b600260209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900460ff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610100565b6100e1610236366004613cfa565b6106a0565b6100e1610249366004613d17565b610750565b6102566108ec565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526002602090815260408083208685168452825280832081518083019092525493841681527401000000000000000000000000000000000000000090930460ff16908301526102c282868661096d565b60208101516040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919250610366918391869173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561033d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103619190613d6a565b610abd565b505050505050565b60008061037b8888610b84565b9050600061038a828a8a61096d565b9050806060015173ffffffffffffffffffffffffffffffffffffffff16632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ff9190613d83565b1561041957610412818b8b898989610c39565b925061042c565b610429818b8b8b8b8b8b8b610d9b565b92505b86831115610466576040517f24df576f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050979650505050505050565b61047b6108ec565b6104d68282808060200260200160405190810160405280939291908181526020016000905b828210156104cc576104bd60808302860136819003810190613e70565b815260200190600101906104a0565b5050505050610f56565b5050565b6104e26108ec565b6104ec600061157d565b565b600154339073ffffffffffffffffffffffffffffffffffffffff16811461059c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105a58161157d565b50565b6000806105b58888610b84565b905060006105c4828a8a61096d565b9050806060015173ffffffffffffffffffffffffffffffffffffffff16632f13b60c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106399190613d83565b156106535761064c818b8b8a89896115ae565b9250610666565b610663818b8b8b8b8b8b8b611644565b92505b85831015610466576040517f5945ea5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106a86108ec565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561070b60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600084138061075f5750600083135b61076857600080fd5b600061077682840184613edd565b9050600061078c82600001518360200151610b84565b805190915073ffffffffffffffffffffffffffffffffffffffff1633146107b257600080fd5b600085131561083f57604082015173ffffffffffffffffffffffffffffffffffffffff16631b9d082d336107e589614024565b85606001516040518463ffffffff1660e01b8152600401610808939291906140ca565b600060405180830381600087803b15801561082257600080fd5b505af1158015610836573d6000803e3d6000fd5b50505050610366565b604082015173ffffffffffffffffffffffffffffffffffffffff16631b9d082d3061086988614024565b85606001516040518463ffffffff1660e01b815260040161088c939291906140ca565b600060405180830381600087803b1580156108a657600080fd5b505af11580156108ba573d6000803e3d6000fd5b505050506108e36108d4828460000151856020015161096d565b336108de88614024565b611890565b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610593565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915260008460000151905060008060008373ffffffffffffffffffffffffffffffffffffffff16632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c91906140ff565b92509250925060008773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a5d5787610a5f565b865b6040805160c08101825273ffffffffffffffffffffffffffffffffffffffff97881681529587166020808801919091529487169086015291851660608501525090921660808201529085015160ff1660a082015290505b9392505050565b602083015160808401516040517f769f8e5d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905291821660448201526064810184905260006084820181905292919091169063769f8e5d9060a4015b6020604051808303816000875af1158015610b58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7c9190613d6a565b949350505050565b60408051808201909152600080825260208201525073ffffffffffffffffffffffffffffffffffffffff828116600090815260026020908152604080832085851684528252918290208251808401909352549283168083527401000000000000000000000000000000000000000090930460ff169082015290610c33576040517ffee0069400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b92915050565b6000866040015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d5f576000876060015173ffffffffffffffffffffffffffffffffffffffff16631d52edc46040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190613d6a565b9050610d008582670de0b6b3a76400006001611919565b91506000610d4a8960600151338588888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197692505050565b9050610d57898983610abd565b505050610d91565b6040517fa038794000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9695505050505050565b60008060405180608001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525060408b015190915073ffffffffffffffffffffffffffffffffffffffff90811690891603610ea3576000610e8b8b30888a86604051602001610e779190614141565b604051602081830303815290604052611a91565b915050809250610e9c8b8b88610abd565b5050610f49565b896000015173ffffffffffffffffffffffffffffffffffffffff16635b709f178a8784604051602001610ed69190614141565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401610f03939291906140ca565b60408051808303816000875af1158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f459190614196565b5091505b5098975050505050505050565b604080516080810182526000808252602082018190529181018290526060810191909152815160005b8181101561157757838181518110610f9957610f996141ba565b60200260200101519250600073ffffffffffffffffffffffffffffffffffffffff16836040015173ffffffffffffffffffffffffffffffffffffffff161480610ffa5750606083015173ffffffffffffffffffffffffffffffffffffffff16155b8061101a5750825173ffffffffffffffffffffffffffffffffffffffff16155b8061102d57506064836020015160ff1610155b15611064576040517f25c1cddd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080846000015173ffffffffffffffffffffffffffffffffffffffff16632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906140ff565b50915091508073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1614611148576040517f25c1cddd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608501516040517ffa5a4f0600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529083169063fa5a4f0690602401602060405180830381865afa1580156111ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111de9190613d83565b158061127d575060608501516040517f784367d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529083169063784367d690602401602060405180830381865afa158015611257573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127b9190613d83565b155b156112b4576040517f25c1cddd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060400160405280876000015173ffffffffffffffffffffffffffffffffffffffff168152602001876020015160ff1681525090508060026000886040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff021916908360ff1602179055509050508060026000886060015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000886040015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff021916908360ff160217905550905050856060015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff167fe546beeeab60a56b73c1b949bb268220b489f63cd1a9b947e6e8a34013d082438860000151896020015160405161156192919073ffffffffffffffffffffffffffffffffffffffff92909216825260ff16602082015260400190565b60405180910390a3836001019350505050610f7f565b50505050565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556105a581611cee565b6000866040015173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d5f57600061162f8860600151338787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197692505050565b905061163c888883610abd565b915050610d91565b6000886040015173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036117b35788516040517f1b9d082d0000000000000000000000000000000000000000000000000000000081523391631b9d082d916116c091908990889088906004016141e9565b600060405180830381600087803b1580156116da57600080fd5b505af11580156116ee573d6000803e3d6000fd5b50508a5160408051600080825260208201928390527f29910b110000000000000000000000000000000000000000000000000000000090925290935073ffffffffffffffffffffffffffffffffffffffff90911691506329910b119061175b9030908a90602481016140ca565b60408051808303816000875af1158015611779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179d9190614196565b5090506117ab8a8a83610abd565b915050611884565b600060405180608001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250604051909150611880908b908b908990899061186c908790602001614141565b604051602081830303815290604052611d63565b9150505b98975050505050505050565b60006118a58460800151856020015184611f81565b602084015160808501516040517f20e8c56500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152918216602482015260448101859052606481018590529116906320e8c56590608401610b39565b6000806119278686866120f1565b9050600183600281111561193d5761193d61425a565b14801561195a57506000848061195557611955614289565b868809115b1561196d5761196a6001826142b8565b90505b95945050505050565b6040517f1b9d082d00000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff851690631b9d082d906119cf908890879087906004016140ca565b600060405180830381600087803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b50506040517fbcb7ea5d00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8816925063bcb7ea5d91506024016020604051808303816000875af1158015611a6d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196d9190613d6a565b60008060008760a00151905060006040518060a001604052808360ff166064611aba91906142b8565b611ac860ff861660646142cb565b611ad2908a6142de565b611adc91906142f5565b815260200187815260200160008152602001600a815260200166038d7ea4c680008152509050611bcb896000015173ffffffffffffffffffffffffffffffffffffffff1663794052f3306040518263ffffffff1660e01b8152600401611b5e919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b61012060405180830381865afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba09190614314565b611bc38b6060015173ffffffffffffffffffffffffffffffffffffffff1661221b565b89428561228e565b509093505085831115611c0a576040517fd8d149ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88516040517f29910b1100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906329910b1190611c63908b9087908a906004016140ca565b60408051808303816000875af1158015611c81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ca59190614196565b50935086841015611ce2576040517fd8d149ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50509550959350505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60a080860151604080519283019052838252600091829060208101611d8c60ff851660646142cb565b611d9a60ff861660646142b8565b611da490896142de565b611dae91906142f5565b815260006020820152600a60408083019190915266038d7ea4c68000606090920191909152895190517f794052f3000000000000000000000000000000000000000000000000000000008152306004820152919250611e969173ffffffffffffffffffffffffffffffffffffffff9091169063794052f39060240161012060405180830381865afa158015611e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6b9190614314565b611e8e8a6060015173ffffffffffffffffffffffffffffffffffffffff1661221b565b88428561238e565b5088516040517f5b709f1700000000000000000000000000000000000000000000000000000000815291945060009173ffffffffffffffffffffffffffffffffffffffff90911690635b709f1790611ef6908b9088908a906004016140ca565b60408051808303816000875af1158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f389190614196565b50905086811115611f75576040517fd8d149ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291516000928392908716916120189190614396565b6000604051808303816000865af19150503d8060008114612055576040519150601f19603f3d011682016040523d82523d6000602084013e61205a565b606091505b50915091508180156120845750805115806120845750808060200190518101906120849190613d83565b6120ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53410000000000000000000000000000000000000000000000000000000000006044820152606401610593565b5050505050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050806000036121495783828161213f5761213f614289565b0492505050610ab6565b8084116121b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610593565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60008173ffffffffffffffffffffffffffffffffffffffff16631d52edc46040518163ffffffff1660e01b81526004016020604051808303816000875af115801561226a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c339190613d6a565b600080808061229e898988612461565b905084604001516000036122d1576122c385602001516122be8b84612594565b612618565b60208601526122d18561262e565b60005b85606001518110156123505760006122ec87836126a0565b90506000806122fd8d868e86612725565b50915091508a821061233857612318828c8b60800151612756565b1561232c5791965094509250612383915050565b6020890183905261233c565b8289525b50505080612349906143b2565b90506122d4565b506040517ffa711db200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b955095509592505050565b6000808061239d888887612461565b905083604001516000036123cf576123c184602001516122be838b60000151612789565b60208501526123cf8461262e565b60005b84606001518110156123505760006123ea86836126a0565b90506000806123fb8c868d86612828565b509150915089821161243257612416828b8a6080015161285a565b1561242a5791955090935061245792505050565b828852612443565b61243d6001846142cb565b60208901525b50505080612450906143b2565b90506123d2565b9550959350505050565b61248c6040518060800160405280600081526020016000815260200160008152602001600081525090565b60a084015182106124c9576040517fb2094b5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828560a001516124db91906142cb565b90506124e78582612888565b825260208501516124f9908590612902565b60208301528451158061250e57506020820151155b1561255557845160208301516040517fb1c4aefb00000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610593565b61257385600001518661010001518460200151856000015185612957565b604083015260c085015161258790826129f1565b6060830152509392505050565b600080600090506000600184602001516125ae91906142cb565b90505b80821461261057600060026125c683856142b8565b6125d19060016142b8565b6125db91906142f5565b905060006125ee86886000015184612a25565b1215612606576125ff6001826142cb565b915061260a565b8092505b506125b1565b509392505050565b60008183106126275781610ab6565b5090919050565b60208101518151118061264c5750670de0b6b3a76400008160800151115b156105a5578051602082015160808301516040517fb301af04000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610593565b6000811580156126b35750604083015115155b156126c357506040820151610c33565b60208301518351116126f357602083015183516002916126e2916142b8565b6126ec91906142f5565b9050610c33565b6040517ffa711db200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008080808080612743898961273a8a614024565b8d929190612b3c565b919c909b50909950975050505050505050565b6000828410158015610b7c575061277e8361277984670de0b6b3a76400006142b8565b612ca9565b909311159392505050565b6000806127b66127b18560000151866040015187606001516127ab91906143ea565b90612cc9565b612cec565b905060006127d66127cf670de0b6b3a764000084614411565b839061321d565b905060006127f48660200151866127ed9190614411565b8390612cc9565b9050600061280282876143ea565b90506103e8612813826103e76142de565b61281d91906142f5565b979650505050505050565b6000808080808061283b8a8a8a8a612b3c565b9250925092508261284b90614024565b9a919950975095505050505050565b6000828411158015610b7c575061287d8361277984670de0b6b3a76400006142cb565b909310159392505050565b600061289382613243565b6128aa6128a56201518061016d6142de565b613243565b84608001516128b99190614439565b6128c39190614485565b905060008113610c33576040517f1ca4187600000000000000000000000000000000000000000000000000000000815260048101829052602401610593565b60008060008312612914576001612936565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b905061294d6128a58561294886613276565b61328d565b610b7c9082614439565b60008061296486846129f1565b9050670de0b6b3a76400008112156129ab576040517fca78c8a400000000000000000000000000000000000000000000000000000000815260048101829052602401610593565b60006129c16129ba878a614411565b899061321d565b905060006129ce826132ac565b90506129da818761321d565b6129e490846143ea565b9998505050505050505050565b600080612a036201518061016d6142de565b612a0d84866142de565b612a1791906142f5565b9050610b7c6127b182613243565b600080828560200151612a3891906143ea565b90506000612a468585614411565b9050600082138015612a585750600081135b612abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964207074546f4d61726b657400000000000000000000000000006044820152606401610593565b6000612aec612acd8484614439565b6020890151612adc9089614411565b612ae69088614439565b9061321d565b90506000612b02612afd848661321d565b613314565b8851909150600090612b1d90670de0b6b3a76400009061321d565b9050612b2d816127ab84866143ea565b89604001516129e491906143ea565b600080600080612b5f8860000151886020015189600001518a60400151896133cf565b90506000612b75612b70878461321d565b6134ab565b60608901519091506000871315612bfd576000612b92848361321d565b9050670de0b6b3a7640000811215612bd9576040517fca78c8a400000000000000000000000000000000000000000000000000000000815260048101829052602401610593565b612bf5612bee83670de0b6b3a76400006143ea565b8490612cc9565b915050612c2a565b612c2781612c1381670de0b6b3a76400006143ea565b612c1d9085614439565b612b709190614485565b90505b60006064612c3b8c60e00151613243565b612c459084614439565b612c4f9190614485565b90506000612c5d83856143ea565b905060008112612c7657612c718a826134d7565b612c80565b612c808a82613522565b9750612c8c8a846134d7565b9650612c988a836134d7565b955050505050509450945094915050565b600080612cb683856142de565b670de0b6b3a76400009004949350505050565b600080612cd68385614439565b9050670de0b6b3a7640000815b05949350505050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008212158015612d27575068070c1cc73b00c800008213155b612d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152606401610593565b6000821215612dc657612da282600003612cec565b6ec097ce7bc90715b34b9f100000000081612dbf57612dbf614289565b0592915050565b60006806f05b59d3b20000008312612e1c57507ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000090910190770195e54c5dd42177f53a27172fa9ec630262827000000000612e68565b6803782dace9d90000008312612e6457507ffffffffffffffffffffffffffffffffffffffffffffffffc87d2531627000000909101906b1425982cf597cd205cef7380612e68565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412612ece577fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000009093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412612f20577fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000009093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412612f70577fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000009093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412612fc0577fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000009093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac6200000841261300f577ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000009093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d63100000841261305e577ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000009093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b188000084126130ad577ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800009093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c4000084126130fc577ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00009093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b600080613232670de0b6b3a764000085614439565b9050828181612ce357612ce3614289565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561327257600080fd5b5090565b60008082136132725761328882614024565b610c33565b6000670de0b6b3a76400006132a284846142de565b610ab691906142f5565b6000670de0b6b3a764000082036132ef576040517fa9c8b14d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061330d61330684670de0b6b3a76400006143ea565b849061321d565b9050610ab6815b600080821361337f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6f7574206f6620626f756e6473000000000000000000000000000000000000006044820152606401610593565b670c7d713b49da00008213801561339d5750670f43fc2c04ee000082125b156133c157670de0b6b3a76400006133b48361356d565b81612dbf57612dbf614289565b610c33826136a5565b919050565b6000806133dc8784613a50565b905060006133ed6127cf888a614411565b9050670d529ae9e8600000811315613442576040517ffc68d09e00000000000000000000000000000000000000000000000000000000815260048101829052670d529ae9e86000006024820152604401610593565b600061344d826132ac565b90508561345a828961321d565b6134649190614411565b9350670de0b6b3a7640000841215611f75576040517fca78c8a400000000000000000000000000000000000000000000000000000000815260048101859052602401610593565b6000610c33827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614439565b600080600083126134e957600161350b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b905061294d6128a58561351d86613276565b613ac6565b60008060008312613534576001613556565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b905061294d6128a58561356886613276565b613adb565b670de0b6b3a7640000026000806ec097ce7bc90715b34b9f1000000000808401907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000850102816135bf576135bf614289565b05905060006ec097ce7bc90715b34b9f100000000082800205905081806ec097ce7bc90715b34b9f100000000081840205915060038205016ec097ce7bc90715b34b9f100000000082840205915060058205016ec097ce7bc90715b34b9f100000000082840205915060078205016ec097ce7bc90715b34b9f100000000082840205915060098205016ec097ce7bc90715b34b9f1000000000828402059150600b8205016ec097ce7bc90715b34b9f1000000000828402059150600d8205016ec097ce7bc90715b34b9f1000000000828402059150600f82050160020295945050505050565b6000670de0b6b3a76400008212156136e7576136de826ec097ce7bc90715b34b9f1000000000816136d8576136d8614289565b056136a5565b60000392915050565b60007e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000831261373857770195e54c5dd42177f53a27172fa9ec630262827000000000830592506806f05b59d3b2000000015b73011798004d755d3c8bc8e03204cf44619e0000008312613770576b1425982cf597cd205cef7380830592506803782dace9d9000000015b606492830292026e01855144814a7ff805980ff008400083126137b8576e01855144814a7ff805980ff008400068056bc75e2d63100000840205925068ad78ebc5ac62000000015b6b02df0ab5a80a22c61ab5a70083126137f3576b02df0ab5a80a22c61ab5a70068056bc75e2d6310000084020592506856bc75e2d631000000015b693f1fce3da636ea5cf850831261382a57693f1fce3da636ea5cf85068056bc75e2d631000008402059250682b5e3af16b18800000015b690127fa27722cc06cc5e2831261386157690127fa27722cc06cc5e268056bc75e2d6310000084020592506815af1d78b58c400000015b68280e60114edb805d0383126138965768280e60114edb805d0368056bc75e2d631000008402059250680ad78ebc5ac6200000015b680ebc5fb4174612111083126138c157680ebc5fb4174612111068056bc75e2d631000009384020592015b6808f00f760a4b2db55d83126138f6576808f00f760a4b2db55d68056bc75e2d6310000084020592506802b5e3af16b1880000015b6806f5f1775788937937831261392b576806f5f177578893793768056bc75e2d63100000840205925068015af1d78b58c40000015b6806248f33704b286603831261395f576806248f33704b28660368056bc75e2d63100000840205925067ad78ebc5ac620000015b6805c548670b9510e7ac8312613993576805c548670b9510e7ac68056bc75e2d6310000084020592506756bc75e2d6310000015b600068056bc75e2d63100000840168056bc75e2d6310000080860302816139bc576139bc614289565b059050600068056bc75e2d63100000828002059050818068056bc75e2d63100000818402059150600382050168056bc75e2d63100000828402059150600582050168056bc75e2d63100000828402059150600782050168056bc75e2d63100000828402059150600982050168056bc75e2d63100000828402059150600b820501600202606485820105979650505050505050565b600081831215613abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e656761746976650000000000000000000000000000000000000000000000006044820152606401610593565b610ab682846143ea565b6000826132a2670de0b6b3a7640000846142de565b600082600181613af3670de0b6b3a7640000866142de565b613afd91906142b8565b6132a291906142cb565b73ffffffffffffffffffffffffffffffffffffffff811681146105a557600080fd5b600080600060608486031215613b3e57600080fd5b8335613b4981613b07565b92506020840135613b5981613b07565b91506040840135613b6981613b07565b809150509250925092565b60008083601f840112613b8657600080fd5b50813567ffffffffffffffff811115613b9e57600080fd5b602083019150836020828501011115613bb657600080fd5b9250929050565b600080600080600080600060c0888a031215613bd857600080fd5b8735613be381613b07565b96506020880135613bf381613b07565b95506040880135613c0381613b07565b9450606088013593506080880135925060a088013567ffffffffffffffff811115613c2d57600080fd5b613c398a828b01613b74565b989b979a50959850939692959293505050565b60008060208385031215613c5f57600080fd5b823567ffffffffffffffff80821115613c7757600080fd5b818501915085601f830112613c8b57600080fd5b813581811115613c9a57600080fd5b8660208260071b8501011115613caf57600080fd5b60209290920196919550909350505050565b60008060408385031215613cd457600080fd5b8235613cdf81613b07565b91506020830135613cef81613b07565b809150509250929050565b600060208284031215613d0c57600080fd5b8135610ab681613b07565b60008060008060608587031215613d2d57600080fd5b8435935060208501359250604085013567ffffffffffffffff811115613d5257600080fd5b613d5e87828801613b74565b95989497509550505050565b600060208284031215613d7c57600080fd5b5051919050565b600060208284031215613d9557600080fd5b81518015158114610ab657600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613df757613df7613da5565b60405290565b604051610120810167ffffffffffffffff81118282101715613df757613df7613da5565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e6857613e68613da5565b604052919050565b600060808284031215613e8257600080fd5b613e8a613dd4565b8235613e9581613b07565b8152602083013560ff81168114613eab57600080fd5b60208201526040830135613ebe81613b07565b60408201526060830135613ed181613b07565b60608201529392505050565b60006020808385031215613ef057600080fd5b823567ffffffffffffffff80821115613f0857600080fd5b9084019060808287031215613f1c57600080fd5b613f24613dd4565b8235613f2f81613b07565b815282840135613f3e81613b07565b818501526040830135613f5081613b07565b6040820152606083013582811115613f6757600080fd5b80840193505086601f840112613f7c57600080fd5b823582811115613f8e57613f8e613da5565b613fbe857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e21565b92508083528785828601011115613fd457600080fd5b80858501868501376000908301909401939093526060830152509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f8000000000000000000000000000000000000000000000000000000000000000820361405557614055613ff5565b5060000390565b60005b8381101561407757818101518382015260200161405f565b50506000910152565b6000815180845261409881602086016020860161405c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061196d6060830184614080565b60008060006060848603121561411457600080fd5b835161411f81613b07565b602085015190935061413081613b07565b6040850151909250613b6981613b07565b60208152600073ffffffffffffffffffffffffffffffffffffffff808451166020840152806020850151166040840152806040850151166060840152506060830151608080840152610b7c60a0840182614080565b600080604083850312156141a957600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b80820180821115610c3357610c33613ff5565b81810381811115610c3357610c33613ff5565b8082028115828204841417610c3357610c33613ff5565b60008261430457614304614289565b500490565b80516133ca81613b07565b6000610120828403121561432757600080fd5b61432f613dfd565b82518152602083015160208201526040830151604082015261435360608401614309565b60608201526080830151608082015260a083015160a082015260c083015160c082015260e083015160e08201526101008084015181830152508091505092915050565b600082516143a881846020870161405c565b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143e3576143e3613ff5565b5060010190565b818103600083128015838313168383128216171561440a5761440a613ff5565b5092915050565b808201828112600083128015821682158216171561443157614431613ff5565b505092915050565b808202600082127f80000000000000000000000000000000000000000000000000000000000000008414161561447157614471613ff5565b8181058314821517610c3357610c33613ff5565b60008261449457614494614289565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156144e8576144e8613ff5565b50059056fea26469706673582212203b8c86c3a36c3407fccaf03e0ed7a360347b15b7e4d62b5bba455c592f2dc9a164736f6c634300081300330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000035f3db08a6e9cb4391348b0b404f493e7ae264c000000000000000000000000000000000000000000000000000000000000000140000000000000000000000002ccfce9be49465cc6f947b5f6ac9383673733da90000000000000000000000002416092f143378750bb29b79ed961ab195cceea5000000000000000000000000f9f9779d8ff604732eba9ad345e6a27ef5c2a9d60000000000000000000000000000000000000000000000000000000000000014000000000000000000000000b8b0a120f6a68dd06209619f62429fb1a8e92fec00000000000000000000000035751007a407ca6feffe80b3cb397736d2cf4dbe