0 txs
27 calls
constructor
constructor(address _initialRescuer, address _initialExecutor, string _strategyName, address _treasuryReservesVault, address _daiToken, address _daiJoin, address _pot)
functions
apiVersion
viewfunction apiVersion() view returns (string)
daiJoin
viewfunction daiJoin() view returns (address)
daiToken
viewfunction daiToken() 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)
latestDsrBalance
viewfunction latestDsrBalance() view returns (uint256)
manualAdjustments
viewfunction manualAdjustments() view returns (tuple[] adjustments)
pot
viewfunction pot() view returns (address)
RAY
viewfunction RAY() view returns (uint256)
rescuer
viewfunction rescuer() view returns (address)
strategyName
viewfunction strategyName() view returns (string)
strategyVersion
purefunction strategyVersion() pure returns (string)
treasuryReservesVault
viewfunction treasuryReservesVault() view returns (address)
acceptExecutor
nonpayablefunction acceptExecutor()
acceptRescuer
nonpayablefunction acceptRescuer()
automatedShutdown
nonpayablefunction automatedShutdown(bytes shutdownParamsData)
borrowAndDeposit
nonpayablefunction borrowAndDeposit(uint256 amount)
checkpointAssetBalances
nonpayablefunction checkpointAssetBalances() returns (tuple[] assetBalances)
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)
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)
TreasuryReservesVaultSet
event TreasuryReservesVaultSet(address indexed trv)
errors
ExpectedNonZero
error ExpectedNonZero()
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)
creation bytecode
0x60e06040523480156200001157600080fd5b50604051620044a2380380620044a283398101604081905262000034916200086a565b8686868683836001600160a01b038216620000625760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0381166200008a5760405163e6c4247b60e01b815260040160405180910390fd5b816001600160a01b0316816001600160a01b031603620000bd5760405163e6c4247b60e01b815260040160405180910390fd5b600080546001600160a01b039384166001600160a01b031991821617909155600180549290931691161790556005620000f7838262000a23565b50600680546001600160a01b0319166001600160a01b03928316179055851660a0819052604080516336569e7760e01b81529051600095509193506336569e7792506004808201926020929091908290030181865afa1580156200015f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000185919062000aef565b6001600160a01b0383811660c05260a0516040516328ec8bf160e21b8152908216600482015291925082169063a3b22fc490602401600060405180830381600087803b158015620001d557600080fd5b505af1158015620001ea573d6000803e3d6000fd5b505060c0516040516328ec8bf160e21b81526001600160a01b039182166004820152908416925063a3b22fc49150602401600060405180830381600087803b1580156200023657600080fd5b505af11580156200024b573d6000803e3d6000fd5b5050506001600160a01b038516608081905260a0516200026f92506000196200028a565b6200027c600086620003eb565b505050505050505062000bcd565b801580620003085750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000b14565b155b620003805760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084015b60405180910390fd5b6040516001600160a01b038316602482015260448101829052620003e690849063095ea7b360e01b906064015b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b0393841617905290620003ff16565b505050565b608051620003fb908383620004d3565b5050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200044e906001600160a01b03851690849062000500565b90508051600014806200047257508080602001905181019062000472919062000b2e565b620003e65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000377565b6001600160a01b03821615620004f157620004f18383600062000519565b620003e6838260001962000519565b6060620005118484600085620005cc565b949350505050565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000566573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200058c919062000b14565b81036200059857505050565b620005af6001600160a01b0384168360006200028a565b8015620003e657620003e66001600160a01b0384168383620006b0565b6060824710156200062f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000377565b600080866001600160a01b031685876040516200064d919062000b52565b60006040518083038185875af1925050503d80600081146200068c576040519150601f19603f3d011682016040523d82523d6000602084013e62000691565b606091505b509092509050620006a5878383876200076a565b979650505050505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa15801562000701573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000727919062000b14565b9050620007648463095ea7b360e01b8562000743868662000b70565b6040516001600160a01b0390921660248301526044820152606401620003ad565b50505050565b60608315620007de578251600003620007d6576001600160a01b0385163b620007d65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000377565b508162000511565b620005118383815115620007f55781518083602001fd5b8060405162461bcd60e51b815260040162000377919062000b98565b80516001600160a01b03811681146200082957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200086157818101518382015260200162000847565b50506000910152565b600080600080600080600060e0888a0312156200088657600080fd5b620008918862000811565b9650620008a16020890162000811565b60408901519096506001600160401b0380821115620008bf57600080fd5b818a0191508a601f830112620008d457600080fd5b815181811115620008e957620008e96200082e565b604051601f8201601f19908116603f011681019083821181831017156200091457620009146200082e565b816040528281528d60208487010111156200092e57600080fd5b6200094183602083016020880162000844565b8099505050505050620009576060890162000811565b9350620009676080890162000811565b92506200097760a0890162000811565b91506200098760c0890162000811565b905092959891949750929550565b600181811c90821680620009aa57607f821691505b602082108103620009cb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003e657600081815260208120601f850160051c81016020861015620009fa5750805b601f850160051c820191505b8181101562000a1b5782815560010162000a06565b505050505050565b81516001600160401b0381111562000a3f5762000a3f6200082e565b62000a578162000a50845462000995565b84620009d1565b602080601f83116001811462000a8f576000841562000a765750858301515b600019600386901b1c1916600185901b17855562000a1b565b600085815260208120601f198616915b8281101562000ac05788860151825594840194600190910190840162000a9f565b508582101562000adf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000b0257600080fd5b62000b0d8262000811565b9392505050565b60006020828403121562000b2757600080fd5b5051919050565b60006020828403121562000b4157600080fd5b8151801515811462000b0d57600080fd5b6000825162000b6681846020870162000844565b9190910192915050565b8082018082111562000b9257634e487b7160e01b600052601160045260246000fd5b92915050565b602081526000825180602084015262000bb981604085016020870162000844565b601f01601f19169190910160400192915050565b60805160a05160c05161380b62000c976000396000818161037b0152818161097401528181610a0e01528181610aaf01528181610b4101528181610c3d01528181612330015281816123f20152818161276901528181612b2c01528181612bc10152612c550152600081816104600152818161249601526126cb01526000818161042601528181611169015281816112d5015281816113680152818161157c0152818161195801528181611ba701528181611f31015281816122cc015261280f015261380b6000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80638112c4af1161012a578063ce5c715a116100bd578063e173ad251161008c578063e337e11d11610071578063e337e11d1461050e578063eecb7c1b14610521578063f40902561461053457600080fd5b8063e173ad25146104fe578063e32145341461050657600080fd5b8063ce5c715a146104a2578063d9a349c1146104aa578063daeccc79146104bd578063db4f5e23146104eb57600080fd5b8063be22f546116100f9578063be22f54614610421578063bfccf0ec14610448578063c11645bc1461045b578063c34c08e51461048257600080fd5b80638112c4af146103f15780638fece34b146103f9578063a25db5e2146102e8578063a7229fd91461040e57600080fd5b80633698e122116101bd5780635137bf161161018c57806359eef8ce1161017157806359eef8ce146103c35780636c45bc93146103d65780637b454884146103de57600080fd5b80635137bf161461039d578063552033c4146103b057600080fd5b80633698e1221461032a57806338a63183146103405780634a6c983b146103605780634ba2363a1461037657600080fd5b80631810fe7f116101f95780631810fe7f146102b05780631ed760b4146102cd5780631f211405146102e057806325829410146102e857600080fd5b8063032ef9011461022b57806307f184f114610240578063097b144e14610253578063101d168414610266575b600080fd5b61023e610239366004613063565b610547565b005b61023e61024e3660046130a2565b6105f6565b61023e6102613660046130bf565b61072e565b6006546102869073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6003546102bd9060ff1681565b60405190151581526020016102a7565b61023e6102db366004613100565b6107fb565b61023e610850565b60408051808201909152600581527f312e302e3000000000000000000000000000000000000000000000000000000060208201525b6040516102a7919061319a565b61033261096f565b6040519081526020016102a7565b6000546102869073ffffffffffffffffffffffffffffffffffffffff1681565b61031d61036e3660046131ad565b606092915050565b6102867f000000000000000000000000000000000000000000000000000000000000000081565b61023e6103ab36600461326b565b610cb4565b6103326b033b2e3c9fd0803ce800000081565b61023e6103d13660046130a2565b610db7565b6103326110a9565b61023e6103ec3660046132ad565b6111e2565b61023e6113e1565b610401611521565b6040516102a791906132c6565b61023e61041c3660046130bf565b611613565b6102867f000000000000000000000000000000000000000000000000000000000000000081565b61023e61045636600461332b565b611704565b6102867f000000000000000000000000000000000000000000000000000000000000000081565b6001546102869073ffffffffffffffffffffffffffffffffffffffff1681565b61040161190b565b61023e6104b83660046130a2565b6119be565b6102bd6104cb3660046133b5565b600260209081526000928352604080842090915290825290205460ff1681565b61023e6104f93660046132ad565b611b03565b61031d611c25565b610401611cb3565b61023e61051c3660046131ad565b611d35565b61033261052f3660046132ad565b611e4c565b61023e6105423660046132ad565b611f63565b60005473ffffffffffffffffffffffffffffffffffffffff163314610598576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051811515907f18f4a9a726c72020fd959c636d2fd464c6cefe90afeaea3c830b971614cf70b690600090a2600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610647576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610694576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460405173ffffffffffffffffffffffffffffffffffffffff808416926101009004169033907f374d23b359cab0f8963c5c1715a6de7974f53af00aecc27de50d93906b70943e90600090a46003805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b61075c336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b610792576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61079d8383836120bd565b6040805173ffffffffffffffffffffffffffffffffffffffff8086168252841660208201529081018290527f85032ae4f0dd2efe545913ee631b73ca7fb27bd0ae39e9286c858fc36e63d2c5906060015b60405180910390a1505050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461084c576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60045473ffffffffffffffffffffffffffffffffffffffff1633146108a1576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff1633036108f2576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154604051339173ffffffffffffffffffffffffffffffffffffffff16907fe963dc9c0d2165b080440a5d2665566142f2426b1ea15f3da8390b0fd336b06490600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600480549091169055565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0191906133ea565b90506000814211610aa0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b91906133ea565b610bf1565b6b033b2e3c9fd0803ce80000007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3c91906133ea565b610bdd7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663487bf0826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610baa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bce91906133ea565b610bd88642613432565b6121a7565b610be79190613445565b610bf1919061345c565b6040517f0bebac86000000000000000000000000000000000000000000000000000000008152306004820152909150610cad90829073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630bebac8690602401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca891906133ea565b61229d565b9250505090565b610ce2336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b610d18576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2460076000612ff7565b8060005b81811015610d85576007848483818110610d4457610d44613497565b835460018101855560009485526020909420604090910292909201926002029091019050610d7282826134c6565b505080610d7e9061351e565b9050610d28565b507fe2aaf97f8a394deb25ef28ece557e81cd39898e1aaeb203b0afacc5eb847a6b383836040516107ee929190613556565b610de5336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b610e1b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610e68576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907ff7f85d5ad92cb1211156f4001d74d075fc49b5ae4b9acf69826291357401125790600090a2600654610ecc9073ffffffffffffffffffffffffffffffffffffffff16826122c7565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604080517f25829410000000000000000000000000000000000000000000000000000000008152905160009291632582941091600480830192869291908290030181865afa158015610f65573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fab91908101906135eb565b9050610fe760408051808201909152600581527f312e302e30000000000000000000000000000000000000000000000000000000602082015290565b604051602001610ff791906136ab565b604051602081830303815290604052805190602001208160405160200161101e91906136ab565b604051602081830303815290604052805190602001201461084c57604080518082018252600581527f312e302e30000000000000000000000000000000000000000000000000000000602082015290517f4204c1480000000000000000000000000000000000000000000000000000000081526110a0919083906004016136c7565b60405180910390fd5b60006110d9336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b61110f576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061111a6122f2565b925050915061112981836123c3565b6006546040517f5ceae9c400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820185905230604483015290911690635ceae9c490606401600060405180830381600087803b1580156111c357600080fd5b505af11580156111d7573d6000803e3d6000fd5b509394505050505090565b611210336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b611246576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003611280576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061128b6122f2565b509150915081831115611310576040517fdb42144d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016600482015260248101849052604481018390526064016110a0565b600061131c8483612546565b905061132881856123c3565b6006546040517f5ceae9c400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820187905230604483015290911690635ceae9c4906064015b600060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b5050505050505050565b600354610100900473ffffffffffffffffffffffffffffffffffffffff163314611437576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff163303611488576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054604051339273ffffffffffffffffffffffffffffffffffffffff909216917ff07131157ebea15896dc89264eb9a7572e67cc9fad6b855015730fcec10704e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055600380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b6060600061152d6122f2565b5050604080516001808252818301909252919250816020015b604080518082019091526000808252602082015281526020019060019003908161154657905050915060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815260200182815250826000815181106115cd576115cd613497565b60200260200101819052507f712b3b0a5f3cb040d45cf2a931e77b8db33017aa563d0109a6d97c20dd74b39d8260405161160791906132c6565b60405180910390a15090565b611641336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b611677576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096836040516116d691815260200190565b60405180910390a36116ff73ffffffffffffffffffffffffffffffffffffffff84168383612574565b505050565b611732336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b611768576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166117b5576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260008082526020820152819060005b82811015611903578484828181106117e8576117e8613497565b9050604002018036038101906117fe91906136f5565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a460208281015173ffffffffffffffffffffffffffffffffffffffff8816600090815260028352604080822086517fffffffff000000000000000000000000000000000000000000000000000000001683529093529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556118fc8161351e565b90506117ce565b505050505050565b604080516001808252818301909252606091816020015b604080518082019091526000808252602082015281526020019060019003908161192257905050905060405180604001604052807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815260200161199a61096f565b815250816000815181106119b0576119b0613497565b602002602001018190525090565b6119ec336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b611a22576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116611a6f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045460015460405173ffffffffffffffffffffffffffffffffffffffff8085169381169216907f4857570a90fe0a0fc580e89a287e77576141ac8e2e8b3710cd26db44f44156c190600090a4600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b611b31336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b611b67576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006546040517f6c665a5500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820184905230604483015290911690636c665a5590606401600060405180830381600087803b158015611c0157600080fd5b505af1158015611c15573d6000803e3d6000fd5b50505050611c2281612648565b50565b60058054611c3290613752565b80601f0160208091040260200160405190810160405280929190818152602001828054611c5e90613752565b8015611cab5780601f10611c8057610100808354040283529160200191611cab565b820191906000526020600020905b815481529060010190602001808311611c8e57829003601f168201915b505050505081565b60606007805480602002602001604051908101604052809291908181526020016000905b82821015611d2c5760008481526020908190206040805180820190915260028502909101805473ffffffffffffffffffffffffffffffffffffffff168252600190810154828401529083529092019101611cd7565b50505050905090565b611d63336000357fffffffff0000000000000000000000000000000000000000000000000000000016611ff9565b611d99576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611da382826127af565b6040517f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf890600090a16006546040517fcce2f3fb00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff9091169063cce2f3fb906024015b600060405180830381600087803b158015611e3857600080fd5b505af1158015611903573d6000803e3d6000fd5b60065460009073ffffffffffffffffffffffffffffffffffffffff16338114611ea3576040517fbc1e53f70000000000000000000000000000000000000000000000000000000081523360048201526024016110a0565b82600003611edd576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000611eea6122f2565b9250925092506000611efc8784612546565b905081811115611f0d578396508190505b611f1781886123c3565b611f5873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168689612574565b509495945050505050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611fb6576040517fbc1e53f70000000000000000000000000000000000000000000000000000000081523360048201526024016110a0565b80600003611ff0576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c2281612648565b60035460009060ff161561202b575060005473ffffffffffffffffffffffffffffffffffffffff8381169116146120b7565b60015473ffffffffffffffffffffffffffffffffffffffff848116911614806120a6575073ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b156120b3575060016120b7565b5060005b92915050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561212f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215391906133ea565b810361215e57505050565b61218073ffffffffffffffffffffffffffffffffffffffff841683600061285a565b80156116ff576116ff73ffffffffffffffffffffffffffffffffffffffff841683836129dc565b6000828015612274576001831680156121c2578492506121d2565b6b033b2e3c9fd0803ce800000092505b506002909204916b019d971e4fe8401e740000005b831561226e5784850285868204146121fe57600080fd5b8181018181101561220e57600080fd5b6b033b2e3c9fd0803ce80000009004955050600184161561226357848302838682041415861515161561224057600080fd5b8181018181101561225057600080fd5b6b033b2e3c9fd0803ce800000090049350505b6002840493506121e7565b50612296565b8280156122845760009250612294565b6b033b2e3c9fd0803ce800000092505b505b5092915050565b60006b033b2e3c9fd0803ce80000006122b68385613445565b6122c0919061345c565b9392505050565b61084c7f00000000000000000000000000000000000000000000000000000000000000008383612ad5565b60008060006122ff612b28565b6040517f0bebac860000000000000000000000000000000000000000000000000000000081523060048201529092507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630bebac8690602401602060405180830381865afa15801561238c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b091906133ea565b90506123bc828261229d565b9250909192565b6040517f7f8661a1000000000000000000000000000000000000000000000000000000008152600481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690637f8661a190602401600060405180830381600087803b15801561244b57600080fd5b505af115801561245f573d6000803e3d6000fd5b50506040517fef693bed000000000000000000000000000000000000000000000000000000008152306004820152602481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16925063ef693bed9150604401600060405180830381600087803b1580156124f157600080fd5b505af1158015612505573d6000803e3d6000fd5b505050507f35ce9a92825e20b0f22cb7effbaab12a8404e2442adec3360b1a6c2e03c234418160405161253a91815260200190565b60405180910390a15050565b600081612554600182613432565b61256a6b033b2e3c9fd0803ce800000086613445565b6122b691906137a5565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116ff9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612cc0565b600061265b82612656612b28565b612dcf565b90507f4c9c073bfd59be8210e93d13794dbfdb0c60612379740185fddfbc97f83d577e8260405161268e91815260200190565b60405180910390a16040517f3b4da69f000000000000000000000000000000000000000000000000000000008152306004820152602481018390527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690633b4da69f90604401600060405180830381600087803b15801561272457600080fd5b505af1158015612738573d6000803e3d6000fd5b50506040517f049878f3000000000000000000000000000000000000000000000000000000008152600481018490527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16925063049878f39150602401611e1e565b6000806127ba6122f2565b92505091506127c981836123c3565b8115612854576006546040517f5ceae9c400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820185905230604483015290911690635ceae9c4906064016113a9565b50505050565b8015806128fa57506040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156128d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f891906133ea565b155b612986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016110a0565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526116ff9084907f095ea7b300000000000000000000000000000000000000000000000000000000906064016125c6565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015612a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7691906133ea565b9050612854847f095ea7b30000000000000000000000000000000000000000000000000000000085612aa886866137a5565b60405173ffffffffffffffffffffffffffffffffffffffff909216602483015260448201526064016125c6565b73ffffffffffffffffffffffffffffffffffffffff821615612afd57612afd838360006120bd565b6116ff83827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6120bd565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166320aba08b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb991906133ea565b4211612c53577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c92aecc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4e91906133ea565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639f678cca6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612c2a573d6000803e3d6000fd5b6000612d22826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612de89092919063ffffffff16565b9050805160001480612d43575080806020019051810190612d4391906137b8565b6116ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016110a0565b6000816122b66b033b2e3c9fd0803ce800000085613445565b6060612df78484600085612dff565b949350505050565b606082471015612e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016110a0565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612eba91906136ab565b60006040518083038185875af1925050503d8060008114612ef7576040519150601f19603f3d011682016040523d82523d6000602084013e612efc565b606091505b5091509150612f0d87838387612f18565b979650505050505050565b60608315612fae578251600003612fa75773ffffffffffffffffffffffffffffffffffffffff85163b612fa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016110a0565b5081612df7565b612df78383815115612fc35781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a0919061319a565b5080546000825560020290600052602060002090810190611c2291905b808211156130515780547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560006001820155600201613014565b5090565b8015158114611c2257600080fd5b60006020828403121561307557600080fd5b81356122c081613055565b73ffffffffffffffffffffffffffffffffffffffff81168114611c2257600080fd5b6000602082840312156130b457600080fd5b81356122c081613080565b6000806000606084860312156130d457600080fd5b83356130df81613080565b925060208401356130ef81613080565b929592945050506040919091013590565b6000806040838503121561311357600080fd5b823561311e81613080565b946020939093013593505050565b60005b8381101561314757818101518382015260200161312f565b50506000910152565b6000815180845261316881602086016020860161312c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122c06020830184613150565b600080602083850312156131c057600080fd5b823567ffffffffffffffff808211156131d857600080fd5b818501915085601f8301126131ec57600080fd5b8135818111156131fb57600080fd5b86602082850101111561320d57600080fd5b60209290920196919550909350505050565b60008083601f84011261323157600080fd5b50813567ffffffffffffffff81111561324957600080fd5b6020830191508360208260061b850101111561326457600080fd5b9250929050565b6000806020838503121561327e57600080fd5b823567ffffffffffffffff81111561329557600080fd5b6132a18582860161321f565b90969095509350505050565b6000602082840312156132bf57600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b8281101561331e578151805173ffffffffffffffffffffffffffffffffffffffff1685528601518685015292840192908501906001016132e3565b5091979650505050505050565b60008060006040848603121561334057600080fd5b833561334b81613080565b9250602084013567ffffffffffffffff81111561336757600080fd5b6133738682870161321f565b9497909650939450505050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146133b057600080fd5b919050565b600080604083850312156133c857600080fd5b82356133d381613080565b91506133e160208401613380565b90509250929050565b6000602082840312156133fc57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156120b7576120b7613403565b80820281158282048414176120b7576120b7613403565b600082613492577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81356134d181613080565b73ffffffffffffffffffffffffffffffffffffffff81167fffffffffffffffffffffffff000000000000000000000000000000000000000083541617825550602082013560018201555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361354f5761354f613403565b5060010190565b6020808252818101839052600090604080840186845b878110156135af57813561357f81613080565b73ffffffffffffffffffffffffffffffffffffffff1683528185013585840152918301919083019060010161356c565b5090979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156135fd57600080fd5b815167ffffffffffffffff8082111561361557600080fd5b818401915084601f83011261362957600080fd5b81518181111561363b5761363b6135bc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715613681576136816135bc565b8160405282815287602084870101111561369a57600080fd5b612f0d83602083016020880161312c565b600082516136bd81846020870161312c565b9190910192915050565b6040815260006136da6040830185613150565b82810360208401526136ec8185613150565b95945050505050565b60006040828403121561370757600080fd5b6040516040810181811067ffffffffffffffff8211171561372a5761372a6135bc565b60405261373683613380565b8152602083013561374681613055565b60208201529392505050565b600181811c9082168061376657607f821691505b60208210810361379f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156120b7576120b7613403565b6000602082840312156137ca57600080fd5b81516122c08161305556fea264697066735822122041799ee9709741d5bdaf6194330db80d5d429bc6cc8a0f7d95aa32678c4d26e564736f6c634300081300330000000000000000000000009f90430179d9b67341bfa50559bc7b8e35629f1b000000000000000000000000b1e8ab0a81aadf632a653e46caeda1593d71d14300000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000f359bae7b6ad295724e798a3ef6fa5109919f3990000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000009759a6ac90977b93b58547b4a71c78317f391a28000000000000000000000000197e90f9fad81970ba7976f33cbd77088e5d7cf7000000000000000000000000000000000000000000000000000000000000000f4473724261736553747261746567790000000000000000000000000000000000