0 txs
179 calls
constructor
constructor(address _initialRescuer, address _initialExecutor, string _strategyName, address _treasuryReservesVault, address _usdsVaultToken, address _daiToUsds)
functions
apiVersion
viewfunction apiVersion() view returns (string)
daiToken
viewfunction daiToken() view returns (address)
daiToUsds
viewfunction daiToUsds() view returns (address)
executor
viewfunction executor() view returns (address)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
inRescueMode
viewfunction inRescueMode() view returns (bool)
latestAssetBalances
viewfunction latestAssetBalances() view returns (tuple[] assetBalances)
latestDaiBalance
viewfunction latestDaiBalance() view returns (uint256)
manualAdjustments
viewfunction manualAdjustments() view returns (tuple[] adjustments)
rescuer
viewfunction rescuer() view returns (address)
strategyName
viewfunction strategyName() view returns (string)
strategyVersion
purefunction strategyVersion() pure returns (string)
treasuryReservesVault
viewfunction treasuryReservesVault() view returns (address)
usdsToken
viewfunction usdsToken() view returns (address)
usdsVaultToken
viewfunction usdsVaultToken() view returns (address)
acceptExecutor
nonpayablefunction acceptExecutor()
acceptRescuer
nonpayablefunction acceptRescuer()
automatedShutdown
nonpayablefunction automatedShutdown(bytes shutdownParamsData)
borrowAndDeposit
nonpayablefunction borrowAndDeposit(uint256 amount)
checkpointAssetBalances
nonpayablefunction checkpointAssetBalances() returns (tuple[])
debtCeilingUpdated
nonpayablefunction debtCeilingUpdated(address token, uint256 newDebtCeiling)
populateShutdownData
nonpayablefunction populateShutdownData(bytes populateParamsData) returns (bytes shutdownParamsData)
proposeNewExecutor
nonpayablefunction proposeNewExecutor(address account)
proposeNewRescuer
nonpayablefunction proposeNewRescuer(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setManualAdjustments
nonpayablefunction setManualAdjustments(tuple[] adjustments)
setRescueMode
nonpayablefunction setRescueMode(bool value)
setTokenAllowance
nonpayablefunction setTokenAllowance(address token, address spender, uint256 amount)
setTreasuryReservesVault
nonpayablefunction setTreasuryReservesVault(address _trv)
trvDeposit
nonpayablefunction trvDeposit(uint256 amount)
trvWithdraw
nonpayablefunction trvWithdraw(uint256 requestedAmount) returns (uint256)
withdrawAndRepay
nonpayablefunction withdrawAndRepay(uint256 withdrawalAmount)
withdrawAndRepayAll
nonpayablefunction withdrawAndRepayAll() returns (uint256 daiAmount)
events
AssetBalancesCheckpoint
event AssetBalancesCheckpoint((address asset, uint256 balance)[] assetBalances)
DaiDeposited
event DaiDeposited(uint256 amount)
DaiWithdrawn
event DaiWithdrawn(uint256 amount)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
ManualAdjustmentsSet
event ManualAdjustmentsSet((address asset, int256 delta)[] adjustments)
NewExecutorAccepted
event NewExecutorAccepted(address indexed oldExecutor, address indexed newExecutor)
NewExecutorProposed
event NewExecutorProposed(address indexed oldExecutor, address indexed oldProposedExecutor, address indexed newProposedExecutor)
NewRescuerAccepted
event NewRescuerAccepted(address indexed oldRescuer, address indexed newRescuer)
NewRescuerProposed
event NewRescuerProposed(address indexed oldRescuer, address indexed oldProposedRescuer, address indexed newProposedRescuer)
RescueModeSet
event RescueModeSet(bool indexed value)
Shutdown
event Shutdown()
TokenAllowanceSet
event TokenAllowanceSet(address token, address spender, uint256 amount)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
TreasuryReservesVaultSet
event TreasuryReservesVaultSet(address indexed trv)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ExpectedNonZero
error ExpectedNonZero()
FailedInnerCall
error FailedInnerCall()
InsufficientBalance
error InsufficientBalance(address token, uint256 required, uint256 balance)
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress()
InvalidVersion
error InvalidVersion(string expected, string actual)
OnlyTreasuryReserveVault
error OnlyTreasuryReserveVault(address caller)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6101006040523480156200001257600080fd5b5060405162003c2538038062003c258339810160408190526200003591620006fc565b8585858583836001600160a01b038216620000635760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0381166200008b5760405163e6c4247b60e01b815260040160405180910390fd5b816001600160a01b0316816001600160a01b031603620000be5760405163e6c4247b60e01b815260040160405180910390fd5b600080546001600160a01b039384166001600160a01b031991821617909155600180549290931691161790556005620000f88382620008a6565b50600680546001600160a01b0319166001600160a01b0392831617905585811660c052841660e08190526040805163f4b9fa7560e01b8152905191945063f4b9fa75935060048082019350602092918290030181865afa15801562000161573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000187919062000972565b6001600160a01b03166080816001600160a01b03168152505060e0516001600160a01b0316634cf282fb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000207919062000972565b6001600160a01b0390811660a05260e0516080516200022b92169060001962000284565b60c05160a0516200024b916001600160a01b039091169060001962000284565b60e05160a0516200026b916001600160a01b039091169060001962000284565b6200027860008462000350565b505050505050620009ee565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620002de90859083906200036416565b6200034a57604080516001600160a01b038516602482015260006044808301919091528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200033e9186916200041516565b6200034a848262000415565b50505050565b6080516200036090838362000488565b5050565b6000806000846001600160a01b03168460405162000383919062000992565b6000604051808303816000865af19150503d8060008114620003c2576040519150601f19603f3d011682016040523d82523d6000602084013e620003c7565b606091505b5091509150818015620003f5575080511580620003f5575080806020019051810190620003f59190620009b0565b80156200040c57506000856001600160a01b03163b115b95945050505050565b60006200042c6001600160a01b03841683620004b5565b9050805160001415801562000454575080806020019051810190620004529190620009b0565b155b156200048357604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b505050565b6001600160a01b03821615620004a657620004a683836000620004cc565b620004838382600019620004cc565b6060620004c58383600062000561565b9392505050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000519573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053f9190620009d4565b81036200054b57505050565b620004836001600160a01b038416838362000284565b606081471015620005885760405163cd78605960e01b81523060048201526024016200047a565b600080856001600160a01b03168486604051620005a6919062000992565b60006040518083038185875af1925050503d8060008114620005e5576040519150601f19603f3d011682016040523d82523d6000602084013e620005ea565b606091505b509092509050620005fd86838362000607565b9695505050505050565b60608262000620576200061a826200066b565b620004c5565b81511580156200063857506001600160a01b0384163b155b156200066357604051639996b31560e01b81526001600160a01b03851660048201526024016200047a565b5080620004c5565b8051156200067c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6001600160a01b03811681146200069557600080fd5b8051620006bb8162000698565b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620006f3578181015183820152602001620006d9565b50506000910152565b60008060008060008060c087890312156200071657600080fd5b8651620007238162000698565b6020880151909650620007368162000698565b60408801519095506001600160401b03808211156200075457600080fd5b818901915089601f8301126200076957600080fd5b8151818111156200077e576200077e620006c0565b604051601f8201601f19908116603f01168101908382118183101715620007a957620007a9620006c0565b816040528281528c6020848701011115620007c357600080fd5b620007d6836020830160208801620006d6565b8098505050505050620007ec60608801620006ae565b9250620007fc60808801620006ae565b91506200080c60a08801620006ae565b90509295509295509295565b600181811c908216806200082d57607f821691505b6020821081036200084e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200048357600081815260208120601f850160051c810160208610156200087d5750805b601f850160051c820191505b818110156200089e5782815560010162000889565b505050505050565b81516001600160401b03811115620008c257620008c2620006c0565b620008da81620008d3845462000818565b8462000854565b602080601f831160018114620009125760008415620008f95750858301515b600019600386901b1c1916600185901b1785556200089e565b600085815260208120601f198616915b82811015620009435788860151825594840194600190910190840162000922565b5085821015620009625787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200098557600080fd5b8151620004c58162000698565b60008251620009a6818460208701620006d6565b9190910192915050565b600060208284031215620009c357600080fd5b81518015158114620004c557600080fd5b600060208284031215620009e757600080fd5b5051919050565b60805160a05160c05160e05161317f62000aa6600039600081816104ec01528181612020015281816121c301526123260152600081816103d101528181610e1001528181611abe01528181611c0001528181611f660152818161210b015281816123ca01526124c90152600061053901526000818161040b01528181610ed60152818161103c015281816110c0015281816115c30152818161181201528181611cb101528181611f010152612540015261317f6000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c8063a25db5e21161012a578063db4f5e23116100bd578063e761bd131161008c578063eecb7c1b11610071578063eecb7c1b1461050e578063f409025614610521578063f8f8d1741461053457600080fd5b8063e761bd13146104df578063ed65bb2c146104e757600080fd5b8063db4f5e23146104a9578063e173ad25146104bc578063e3214534146104c4578063e337e11d146104cc57600080fd5b8063c34c08e5116100f9578063c34c08e514610440578063ce5c715a14610460578063d9a349c114610468578063daeccc791461047b57600080fd5b8063a25db5e2146102e8578063a7229fd9146103f3578063be22f54614610406578063bfccf0ec1461042d57600080fd5b806338a63183116101bd5780636c45bc931161018c5780638112c4af116101715780638112c4af146103af5780638fece34b146103b7578063a06849f2146103cc57600080fd5b80636c45bc93146103865780637b4548841461039c57600080fd5b806338a631831461032a5780634a6c983b1461034a5780635137bf161461036057806359eef8ce1461037357600080fd5b80631810fe7f116101f95780631810fe7f146102b05780631ed760b4146102cd5780631f211405146102e057806325829410146102e857600080fd5b8063032ef9011461022b57806307f184f114610240578063097b144e14610253578063101d168414610266575b600080fd5b61023e610239366004612a55565b61055b565b005b61023e61024e366004612a94565b61060a565b61023e610261366004612ab1565b610742565b6006546102869073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6003546102bd9060ff1681565b60405190151581526020016102a7565b61023e6102db366004612af2565b61080f565b61023e610864565b60408051808201909152600581527f312e302e3000000000000000000000000000000000000000000000000000000060208201525b6040516102a79190612b8c565b6000546102869073ffffffffffffffffffffffffffffffffffffffff1681565b61031d610358366004612b9f565b606092915050565b61023e61036e366004612c5d565b610983565b61023e610381366004612a94565b610a86565b61038e610d78565b6040519081526020016102a7565b61023e6103aa366004612c9f565b610f4d565b61023e611137565b6103bf611277565b6040516102a79190612cb8565b6102867f000000000000000000000000000000000000000000000000000000000000000081565b61023e610401366004612ab1565b611286565b6102867f000000000000000000000000000000000000000000000000000000000000000081565b61023e61043b366004612d1d565b611377565b6001546102869073ffffffffffffffffffffffffffffffffffffffff1681565b6103bf611576565b61023e610476366004612a94565b611629565b6102bd610489366004612da7565b600260209081526000928352604080842090915290825290205460ff1681565b61023e6104b7366004612c9f565b61176e565b61031d611890565b6103bf61191e565b61023e6104da366004612b9f565b6119a0565b61038e611a8d565b6102867f000000000000000000000000000000000000000000000000000000000000000081565b61038e61051c366004612c9f565b611b3e565b61023e61052f366004612c9f565b611ce0565b6102867f000000000000000000000000000000000000000000000000000000000000000081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105ac576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051811515907f18f4a9a726c72020fd959c636d2fd464c6cefe90afeaea3c830b971614cf70b690600090a2600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff16331461065b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166106a8576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460405173ffffffffffffffffffffffffffffffffffffffff808416926101009004169033907f374d23b359cab0f8963c5c1715a6de7974f53af00aecc27de50d93906b70943e90600090a46003805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b610770336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b6107a6576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b1838383611e3a565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527f85032ae4f0dd2efe545913ee631b73ca7fb27bd0ae39e9286c858fc36e63d2c5906060015b60405180910390a1505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610860576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60045473ffffffffffffffffffffffffffffffffffffffff1633146108b5576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163303610906576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154604051339173ffffffffffffffffffffffffffffffffffffffff16907fe963dc9c0d2165b080440a5d2665566142f2426b1ea15f3da8390b0fd336b06490600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600480549091169055565b6109b1336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b6109e7576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f3600760006129e9565b8060005b81811015610a54576007848483818110610a1357610a13612ddc565b835460018101855560009485526020909420604090910292909201926002029091019050610a418282612e0b565b505080610a4d90612e63565b90506109f7565b507fe2aaf97f8a394deb25ef28ece557e81cd39898e1aaeb203b0afacc5eb847a6b38383604051610802929190612ec2565b610ab4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b610aea576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b37576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907ff7f85d5ad92cb1211156f4001d74d075fc49b5ae4b9acf69826291357401125790600090a2600654610b9b9073ffffffffffffffffffffffffffffffffffffffff1682611efc565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517f25829410000000000000000000000000000000000000000000000000000000008152905160009291632582941091600480830192869291908290030181865afa158015610c34573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c7a9190810190612f57565b9050610cb660408051808201909152600581527f312e302e30000000000000000000000000000000000000000000000000000000602082015290565b604051602001610cc69190613022565b6040516020818303038152906040528051906020012081604051602001610ced9190613022565b604051602081830303815290604052805190602001201461086057604080518082018252600581527f312e302e30000000000000000000000000000000000000000000000000000000602082015290517f4204c148000000000000000000000000000000000000000000000000000000008152610d6f9190839060040161303e565b60405180910390fd5b6000610da8336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b610dde576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fd905777e000000000000000000000000000000000000000000000000000000008152306004820152610e96907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d905777e906024015b602060405180830381865afa158015610e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e919190613063565b611f27565b6006546040517f5ceae9c400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201849052306044830152929350911690635ceae9c490606401600060405180830381600087803b158015610f3257600080fd5b505af1158015610f46573d6000803e3d6000fd5b5050505090565b610f7b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b610fb1576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610feb576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610ff5611a8d565b905080821115611077576040517fdb42144d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048201526024810183905260448101829052606401610d6f565b611080826120cf565b6006546040517f5ceae9c400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820185905230604483015290911690635ceae9c4906064015b600060405180830381600087803b15801561111b57600080fd5b505af115801561112f573d6000803e3d6000fd5b505050505050565b600354610100900473ffffffffffffffffffffffffffffffffffffffff16331461118d576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff1633036111de576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054604051339273ffffffffffffffffffffffffffffffffffffffff909216917ff07131157ebea15896dc89264eb9a7572e67cc9fad6b855015730fcec10704e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b6060611281611576565b905090565b6112b4336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b6112ea576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f90968360405161134991815260200190565b60405180910390a361137273ffffffffffffffffffffffffffffffffffffffff84168383612270565b505050565b6113a5336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b6113db576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611428576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260008082526020820152819060005b8281101561112f5784848281811061145b5761145b612ddc565b905060400201803603810190611471919061307c565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a460208281015173ffffffffffffffffffffffffffffffffffffffff8816600090815260028352604080822086517fffffffff000000000000000000000000000000000000000000000000000000001683529093529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905561156f81612e63565b9050611441565b604080516001808252818301909252606091816020015b604080518082019091526000808252602082015281526020019060019003908161158d57905050905060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152602001611605611a8d565b8152508160008151811061161b5761161b612ddc565b602002602001018190525090565b611657336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b61168d576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166116da576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045460015460405173ffffffffffffffffffffffffffffffffffffffff8085169381169216907f4857570a90fe0a0fc580e89a287e77576141ac8e2e8b3710cd26db44f44156c190600090a4600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61179c336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b6117d2576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006546040517f6c665a5500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905230604483015290911690636c665a5590606401600060405180830381600087803b15801561186c57600080fd5b505af1158015611880573d6000803e3d6000fd5b5050505061188d816122f1565b50565b6005805461189d906130d9565b80601f01602080910402602001604051908101604052809291908181526020018280546118c9906130d9565b80156119165780601f106118eb57610100808354040283529160200191611916565b820191906000526020600020905b8154815290600101906020018083116118f957829003601f168201915b505050505081565b60606007805480602002602001604051908101604052809291908181526020016000905b828210156119975760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611942565b50505050905090565b6119ce336000357fffffffff0000000000000000000000000000000000000000000000000000000016611d76565b611a04576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a0e828261247f565b6040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf890600090a16006546040517fcce2f3fb00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063cce2f3fb90602401611101565b6040517fce96cb770000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ce96cb7790602401602060405180830381865afa158015611b1a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112819190613063565b60065460009073ffffffffffffffffffffffffffffffffffffffff16338114611b95576040517fbc1e53f7000000000000000000000000000000000000000000000000000000008152336004820152602401610d6f565b82600003611bcf576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fce96cb770000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ce96cb7790602401602060405180830381865afa158015611c5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c809190613063565b905080841115611c8e578093505b611c97846120cf565b611cd873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168386612270565b509192915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611d33576040517fbc1e53f7000000000000000000000000000000000000000000000000000000008152336004820152602401610d6f565b80600003611d6d576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61188d816122f1565b60035460009060ff1615611da8575060005473ffffffffffffffffffffffffffffffffffffffff838116911614611e34565b60015473ffffffffffffffffffffffffffffffffffffffff84811691161480611e23575073ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b15611e3057506001611e34565b5060005b92915050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa158015611eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed09190613063565b8103611edb57505050565b61137273ffffffffffffffffffffffffffffffffffffffff841683836125b7565b6108607f00000000000000000000000000000000000000000000000000000000000000008383612695565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ba087652906064016020604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe89190613063565b6040517f68f30150000000000000000000000000000000000000000000000000000000008152306004820152602481018290529091507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906368f3015090604401600060405180830381600087803b15801561207957600080fd5b505af115801561208d573d6000803e3d6000fd5b505050507f35ce9a92825e20b0f22cb7effbaab12a8404e2442adec3360b1a6c2e03c23441816040516120c291815260200190565b60405180910390a1919050565b6040517fb460af9400000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b460af94906064016020604051808303816000875af1158015612169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218d9190613063565b506040517f68f30150000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906368f3015090604401600060405180830381600087803b15801561221c57600080fd5b505af1158015612230573d6000803e3d6000fd5b505050507f35ce9a92825e20b0f22cb7effbaab12a8404e2442adec3360b1a6c2e03c234418160405161226591815260200190565b60405180910390a150565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261137291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126e8565b6040517ff2c07aae000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063f2c07aae90604401600060405180830381600087803b15801561237f57600080fd5b505af1158015612393573d6000803e3d6000fd5b50506040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018490523060248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169250636e553f6591506044016020604051808303816000875af115801561242a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244e9190613063565b506040518181527f4c9c073bfd59be8210e93d13794dbfdb0c60612379740185fddfbc97f83d577e90602001612265565b6040517fd905777e0000000000000000000000000000000000000000000000000000000081523060048201526000906124f89073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063d905777e90602401610e50565b90508015611372576006546040517f5ceae9c400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905230604483015290911690635ceae9c490606401600060405180830381600087803b15801561259a57600080fd5b505af11580156125ae573d6000803e3d6000fd5b50505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b300000000000000000000000000000000000000000000000000000000179052612643848261277e565b61268f5760405173ffffffffffffffffffffffffffffffffffffffff84811660248301526000604483015261268591869182169063095ea7b3906064016122aa565b61268f84826126e8565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8216156126bd576126bd83836000611e3a565b61137283827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611e3a565b600061270a73ffffffffffffffffffffffffffffffffffffffff841683612840565b9050805160001415801561272f57508080602001905181019061272d919061312c565b155b15611372576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610d6f565b60008060008473ffffffffffffffffffffffffffffffffffffffff16846040516127a89190613022565b6000604051808303816000865af19150503d80600081146127e5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ea565b606091505b5091509150818015612814575080511580612814575080806020019051810190612814919061312c565b8015612837575060008573ffffffffffffffffffffffffffffffffffffffff163b115b95945050505050565b606061284e83836000612855565b9392505050565b606081471015612893576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610d6f565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516128bc9190613022565b60006040518083038185875af1925050503d80600081146128f9576040519150601f19603f3d011682016040523d82523d6000602084013e6128fe565b606091505b509150915061290e868383612918565b9695505050505050565b60608261292d57612928826129a7565b61284e565b8151158015612951575073ffffffffffffffffffffffffffffffffffffffff84163b155b156129a0576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610d6f565b508061284e565b8051156129b75780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b508054600082556002029060005260206000209081019061188d91905b80821115612a435780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560006001820155600201612a06565b5090565b801515811461188d57600080fd5b600060208284031215612a6757600080fd5b813561284e81612a47565b73ffffffffffffffffffffffffffffffffffffffff8116811461188d57600080fd5b600060208284031215612aa657600080fd5b813561284e81612a72565b600080600060608486031215612ac657600080fd5b8335612ad181612a72565b92506020840135612ae181612a72565b929592945050506040919091013590565b60008060408385031215612b0557600080fd5b8235612b1081612a72565b946020939093013593505050565b60005b83811015612b39578181015183820152602001612b21565b50506000910152565b60008151808452612b5a816020860160208601612b1e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061284e6020830184612b42565b60008060208385031215612bb257600080fd5b823567ffffffffffffffff80821115612bca57600080fd5b818501915085601f830112612bde57600080fd5b813581811115612bed57600080fd5b866020828501011115612bff57600080fd5b60209290920196919550909350505050565b60008083601f840112612c2357600080fd5b50813567ffffffffffffffff811115612c3b57600080fd5b6020830191508360208260061b8501011115612c5657600080fd5b9250929050565b60008060208385031215612c7057600080fd5b823567ffffffffffffffff811115612c8757600080fd5b612c9385828601612c11565b90969095509350505050565b600060208284031215612cb157600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b82811015612d10578151805173ffffffffffffffffffffffffffffffffffffffff168552860151868501529284019290850190600101612cd5565b5091979650505050505050565b600080600060408486031215612d3257600080fd5b8335612d3d81612a72565b9250602084013567ffffffffffffffff811115612d5957600080fd5b612d6586828701612c11565b9497909650939450505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612da257600080fd5b919050565b60008060408385031215612dba57600080fd5b8235612dc581612a72565b9150612dd360208401612d72565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8135612e1681612a72565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ebb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b6020808252818101839052600090604080840186845b87811015612f1b578135612eeb81612a72565b73ffffffffffffffffffffffffffffffffffffffff16835281850135858401529183019190830190600101612ed8565b5090979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f6957600080fd5b815167ffffffffffffffff80821115612f8157600080fd5b818401915084601f830112612f9557600080fd5b815181811115612fa757612fa7612f28565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612fed57612fed612f28565b8160405282815287602084870101111561300657600080fd5b613017836020830160208801612b1e565b979650505050505050565b60008251613034818460208701612b1e565b9190910192915050565b6040815260006130516040830185612b42565b82810360208401526128378185612b42565b60006020828403121561307557600080fd5b5051919050565b60006040828403121561308e57600080fd5b6040516040810181811067ffffffffffffffff821117156130b1576130b1612f28565b6040526130bd83612d72565b815260208301356130cd81612a47565b60208201529392505050565b600181811c908216806130ed57607f821691505b602082108103613126577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60006020828403121561313e57600080fd5b815161284e81612a4756fea26469706673582212209cbca446ba450234b5150493b97b92755f032e7aecb1b12a994bcde709d27df264736f6c634300081400330000000000000000000000009f90430179d9b67341bfa50559bc7b8e35629f1b00000000000000000000000094b62a27a2f23cbdc0220826a8452fb5055cf27300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000f359bae7b6ad295724e798a3ef6fa5109919f3990000000000000000000000000f90a6962e86b5587b4c11ba2b9697dc3ba848000000000000000000000000003225737a9bbb6473cb4a45b7244aca2befdb276a0000000000000000000000000000000000000000000000000000000000000016446169536b794661726d42617365537472617465677900000000000000000000