0 txs
37 calls
constructor
constructor(address _erc20)
functions
accruedRewards
viewfunction accruedRewards(address) view returns (uint256[] rewardAmounts)
adapter
viewfunction adapter() view returns (address)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
assetInfo
viewfunction assetInfo() view returns (uint8 assetType, address assetAddress, uint8 assetDecimals)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
exchangeRate
viewfunction exchangeRate() view returns (uint256 res)
getRewardTokens
viewfunction getRewardTokens() view returns (address[] rewardTokens)
getTokensIn
viewfunction getTokensIn() view returns (address[] res)
getTokensOut
viewfunction getTokensOut() view returns (address[] res)
isValidTokenIn
viewfunction isValidTokenIn(address token) view returns (bool)
isValidTokenOut
viewfunction isValidTokenOut(address token) view returns (bool)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
previewDeposit
viewfunction previewDeposit(address tokenIn, uint256 amountTokenToDeposit) view returns (uint256 amountSharesOut)
previewRedeem
viewfunction previewRedeem(address tokenOut, uint256 amountSharesToRedeem) view returns (uint256 amountTokenOut)
rewardIndexesStored
viewfunction rewardIndexesStored() view returns (uint256[] indexes)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
yieldToken
viewfunction yieldToken() view returns (address)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
claimOwnership
nonpayablefunction claimOwnership()
claimRewards
nonpayablefunction claimRewards(address) returns (uint256[] rewardAmounts)
deposit
payablefunction deposit(address receiver, address tokenIn, uint256 amountTokenToDeposit, uint256 minSharesOut) payable returns (uint256 amountSharesOut)
initialize
nonpayablefunction initialize(string _name, string _symbol, address _adapter)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
redeem
nonpayablefunction redeem(address receiver, uint256 amountSharesToRedeem, address tokenOut, uint256 minTokenOut, bool burnFromInternalBalance) returns (uint256 amountTokenOut)
rewardIndexesCurrent
nonpayablefunction rewardIndexesCurrent() returns (uint256[] indexes)
setAdapter
nonpayablefunction setAdapter(address _adapter)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner, bool direct, bool renounce)
unpause
nonpayablefunction unpause()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
ClaimRewards
event ClaimRewards(address indexed user, address[] rewardTokens, uint256[] rewardAmounts)
Deposit
event Deposit(address indexed caller, address indexed receiver, address indexed tokenIn, uint256 amountDeposited, uint256 amountSyOut)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Redeem
event Redeem(address indexed caller, address indexed receiver, address indexed tokenOut, uint256 amountSyToRedeem, uint256 amountTokenOut)
SetAdapter
event SetAdapter(address indexed adapter)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
errors
SYInsufficientSharesOut
error SYInsufficientSharesOut(uint256 actualSharesOut, uint256 requiredSharesOut)
SYInsufficientTokenOut
error SYInsufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut)
SYInvalidTokenIn
error SYInvalidTokenIn(address token)
SYInvalidTokenOut
error SYInvalidTokenOut(address token)
SYZeroDeposit
error SYZeroDeposit()
SYZeroRedeem
error SYZeroRedeem()
creation bytecode
0x60c060409080825234620001df57806200474c8038038091620000238285620001f5565b8339602092839181010312620001df57516001600160a01b038116808203620001df578260049185519283809263313ce56760e01b82525afa908115620001eb575f91620001a9575b5060805261013460ff19815416905560a0526001549060ff8260a81c16620001565760ff808360a01c160362000112575b825161451e90816200022e8239608051816112f1015260a05181818161084801528181610d47015281816115fc01528181612ed801528181612f2801528181613079015281816130c40152818161315d015281816131a90152818161351401528181613b5401528181613cd90152613dc00152f35b60ff60a01b1990911660ff60a01b17600155815160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989190a15f806200009d565b60849083519062461bcd60e51b82526004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152fd5b90508281813d8311620001e3575b620001c38183620001f5565b81010312620001df575160ff81168103620001df575f6200006c565b5f80fd5b503d620001b7565b84513d5f823e3d90fd5b601f909101601f19168101906001600160401b038211908210176200021957604052565b634e487b7160e01b5f52604160045260245ffdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c90816303eadcfc146128be5750806306fdde03146127f7578063071bc3c9146127be578063077f224a14611d00578063078dfbe714611b7f578063095ea7b314611b30578063128fced11461022957806318160ddd14611ad457806320e8c5651461151c578063213cae63146114d757806323b872dd14611315578063313ce567146112ba5780633644e515146112825780633ba0b9a9146112425780633f4ba83a146111365780634e71e0c8146110305780635c975abb14610fef57806370a0823114610f8c578063769f8e5d14610d6b57806376d5de8514610cfd578063784367d614610cbc5780637ecebe0014610c595780638456cb5914610ba957806384b0196e14610a735780638da5cb5b14610a2357806395d89b4114610909578063a40bee5014610803578063a9059cbb1461072f578063ab1da79c146106ce578063b8f82b2614610633578063c4f59f9b146105e3578063cbe52ae314610540578063d505accf146102f8578063da88ecb414610224578063dd62ed3e1461027f578063e30c39781461022e578063ef5cfb8c14610229578063f8b2f991146102245763fa5a4f06146101d5575f61000f565b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020610216610211612ad6565b613183565b6040519015158152f35b5f80fd5b612bad565b612b4f565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576102b6612ad6565b6102be612af9565b9073ffffffffffffffffffffffffffffffffffffffff8091165f52600360205260405f2091165f52602052602060405f2054604051908152f35b346102205760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761032f612ad6565b610337612af9565b6044359060843560643560ff82168203610220578042116104e25773ffffffffffffffffffffffffffffffffffffffff9081861692835f52609f60205260405f20908154916001830190556040519260208401927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98452866040860152858816606086015288608086015260a085015260c084015260c0835260e083019183831067ffffffffffffffff8411176104b55761044893610440936040525190206103fe613f80565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220614061565b9190916140e9565b16036104575761001a92613579565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057610577612ad6565b6105808161309e565b1561059c5761059460209160243590613da6565b604051908152f35b60249073ffffffffffffffffffffffffffffffffffffffff604051917f88a50561000000000000000000000000000000000000000000000000000000008352166004820152fd5b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761062f604051610620816129d6565b5f815260405191829182612969565b0390f35b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761066a612ad6565b61067381613183565b156106875761059460209160243590613cbf565b60249073ffffffffffffffffffffffffffffffffffffffff604051917faeabe718000000000000000000000000000000000000000000000000000000008352166004820152fd5b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761001a610708612ad6565b61072a73ffffffffffffffffffffffffffffffffffffffff5f54163314612f4c565b6133f9565b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220577f0100000000000000000000000000000000000000000000000000000000000000610787612ad6565b6107f06004549161079e60028460f81c1415612fb1565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760045560243590336136ea565b6004541617600455602060405160018152f35b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481855afa9081156108fe575f916108bf575b60608360ff84604051925f84526020840152166040820152f35b90506020813d6020116108f6575b816108da602093836129f2565b8101031261022057519060ff82168203610220579060ff6108a5565b3d91506108cd565b6040513d5f823e3d90fd5b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576040516006545f8261094883612bea565b91828252602093600190856001821691825f146109e557505060011461098a575b50610976925003836129f2565b61062f60405192828493845283019061290d565b84915060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f905f915b8583106109cd575050610976935082010185610969565b805483890185015287945086939092019181016109b6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261097695151560051b85010192508791506109699050565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057606b541580610b9f575b15610b4157610b13610abb612c3b565b61062f610ac6612d1d565b610b2160405191610ad6836129d6565b5f83526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e087019061290d565b90858203604087015261290d565b904660608501523060808501525f60a085015283820360c0850152612b1c565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b50606c5415610aab565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057610bf973ffffffffffffffffffffffffffffffffffffffff5f54163314612f4c565b610c01613ff6565b61013460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205773ffffffffffffffffffffffffffffffffffffffff610ca5612ad6565b165f52609f602052602060405f2054604051908152f35b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020610216610cf8612ad6565b61309e565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102205760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057610da2612ad6565b602435610dad612ab3565b91606435916084359384151585036102205760045494610dd360028760f81c1415612fb1565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80971617600455610e248261309e565b15610f45578215610f1b5715610f0c57610e3e823061396e565b610e49828285613b51565b93808510610ed5575091602094917f01000000000000000000000000000000000000000000000000000000000000009373ffffffffffffffffffffffffffffffffffffffff80916040519384528789850152169216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c60403392a46004541617600455604051908152f35b84604491604051917fbfee4ca000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b610f16823361396e565b610e3e565b60046040517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b60248273ffffffffffffffffffffffffffffffffffffffff604051917f88a50561000000000000000000000000000000000000000000000000000000008352166004820152fd5b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205773ffffffffffffffffffffffffffffffffffffffff610fd8612ad6565b165f526002602052602060405f2054604051908152f35b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057602060ff61013454166040519015158152f35b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760015473ffffffffffffffffffffffffffffffffffffffff908181168033036110d857805f549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000928316175f5516600155005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761118673ffffffffffffffffffffffffffffffffffffffff5f54163314612f4c565b610134805460ff8116156111e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020604051670de0b6b3a76400008152f35b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576020610594613f80565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102205760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761134c612ad6565b611354612af9565b6044356004549161136b60028460f81c1415612fb1565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760045573ffffffffffffffffffffffffffffffffffffffff84165f52600360205260405f20335f5260205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103611435575b50906107f0917f0100000000000000000000000000000000000000000000000000000000000000946136ea565b9190818310611479577f010000000000000000000000000000000000000000000000000000000000000094611470836107f095033383613579565b94509091611408565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761062f611510613016565b60405191829182612969565b60807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761154e612ad6565b611556612af9565b60449182359060648035946004549261157560028560f81c1415612fb1565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809516176004556115c686613183565b15611a8d578415611a635773ffffffffffffffffffffffffffffffffffffffff8681169390846119fd578634036119a1575b86817f000000000000000000000000000000000000000000000000000000000000000016988987145f146118e15750975b80611863575047925b60045499878b16946116448b8761329f565b1161180657808a106117d0575016928315611775575050611663613ff6565b838611610220578386160193838511611748576020967fff00000000000000000000000000000000000000000000000000000000000000857f01000000000000000000000000000000000000000000000000000000000000009716911617600455815f526002875260405f206116da87825461329f565b9055815f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518a8152a360405190815285878201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d5960403392a46004541617600455604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300604051917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152601f6024840152820152fd5b898691604051917fbc71f2ba00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b83867f53593a20696e73756666696369656e7420736861726573000000000000000000604051917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260176024840152820152fd5b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa9081156108fe575f916118af575b5092611632565b90506020813d6020116118d9575b816118ca602093836129f2565b8101031261022057518a6118a8565b3d91506118bd565b61195691602091846101996118fa848383541685613e7c565b5416905f6040518096819582947fb8f86171000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19081156108fe575f9161196f575b5097611629565b90506020813d602011611999575b8161198a602093836129f2565b8101031261022057518a611968565b3d915061197d565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f657468206d69736d61746368000000000000000000000000000000000000000081850152fd5b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523085820152878382015282815260a081019080821067ffffffffffffffff8311176104b557611a5e9160405286614280565b6115f8565b60046040517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b60248673ffffffffffffffffffffffffffffffffffffffff604051917faeabe718000000000000000000000000000000000000000000000000000000008352166004820152fd5b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346102205760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057611b74611b6a612ad6565b6024359033613579565b602060405160018152f35b346102205760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057611bb6612ad6565b6024358015158103610220576044359081151582036102205773ffffffffffffffffffffffffffffffffffffffff928391611bf5835f54163314612f4c565b15611ccf571690811590811591611cc7575b5015611c6957805f549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216175f55600154166001555f80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905083611c07565b915050167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b346102205760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760043567ffffffffffffffff811161022057611d4f903690600401612a6d565b60243567ffffffffffffffff811161022057611d6f903690600401612a6d565b90611d78612ab3565b6001549060ff8260a81c1615918280936127ae575b8015612794575b156127105782740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8316176001556126cd575b50611e0060ff60015460a81c16611df28161336e565b611dfb8161336e565b61336e565b825167ffffffffffffffff81116104b557611e1c600554612bea565b601f811161262c575b50806020601f821160011461254f575f91612544575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176005555b835167ffffffffffffffff81116104b557611e89600654612bea565b601f81116124a3575b506020601f82116001146123c45781929394955f926123b9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176006555b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004541617600455604051611f34816129ba565b600181527f31000000000000000000000000000000000000000000000000000000000000006020820152611f7360ff60015460a81c16611dfb8161336e565b835167ffffffffffffffff81116104b557611f8f606d54612bea565b601f8111612318575b506020601f82116001146122395781929394955f9261222e575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617606d555b80519067ffffffffffffffff82116104b557612002606e54612bea565b601f81116121cb575b50602090601f8311600114612107576120a19392915f91836120fc575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617606e555b5f606b555f606c5561207460ff60015460a81c1661336e565b337fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f556133f9565b6120a757005b7fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff600154166001557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b015190508580612028565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831691606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a925f5b8181106121b357509160019391856120a19796941061217c575b505050811b01606e5561205b565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905585808061216e565b92936020600181928786015181550195019301612154565b606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a601f840160051c81019160208510612224575b601f0160051c01905b818110612219575061200b565b5f815560010161220c565b9091508190612203565b015190508580611fb2565b606d5f527f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8905f5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841681106123005750600193949596837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08116106122c9575b505050811b01606d55611fe5565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558580806122bb565b9091602060018192858b015181550193019101612261565b606d5f52601f820160051c7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8019060208310612391575b601f0160051c7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d801905b8181106123865750611f98565b5f8155600101612379565b7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8915061234f565b015190508580611eac565b60065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f905f5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08416811061248b5750600193949596837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0811610612454575b505050811b01600655611edf565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080612446565b9091602060018192858b0151815501930191016123ec565b60065f52601f820160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01906020831061251c575b601f0160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01905b8181106125115750611e92565b5f8155600101612504565b7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f91506124da565b905084015186611e3b565b915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05f925b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0831684106126145760019350827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08116106125dd575b5050811b01600555611e6d565b8601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905586806125d0565b86810151825560209384019360019092019101612579565b60055f52601f820160051c7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00190602083106126a5575b601f0160051c7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b81811061269a5750611e25565b5f815560010161268d565b7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09150612663565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001760015584611ddc565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b158015611d945750600160ff8260a01c1614611d94565b50600160ff8260a01c1610611d8d565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761062f611510612e74565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610220576040516005545f8261283683612bea565b91828252602093600190856001821691825f146109e55750506001146128635750610976925003836129f2565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106128a6575050610976935082010185610969565b8054838901850152879450869390920191810161288f565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205760209073ffffffffffffffffffffffffffffffffffffffff61019954168152f35b91908251928382525f5b8481106129555750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b602081830181015184830182015201612917565b60209060206040818301928281528551809452019301915f5b828110612990575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101612982565b6040810190811067ffffffffffffffff8211176104b557604052565b6020810190811067ffffffffffffffff8211176104b557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104b557604052565b67ffffffffffffffff81116104b557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561022057803590612a8482612a33565b92612a9260405194856129f2565b8284526020838301011161022057815f926020809301838601378301015290565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361022057565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361022057565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361022057565b9081518082526020808093019301915f5b828110612b3b575050505090565b835185529381019392810192600101612b2d565b346102205760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022057612b86612ad6565b5061062f604051612b96816129d6565b5f8152604051918291602083526020830190612b1c565b34610220575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102205761062f604051612b96816129d6565b90600182811c92168015612c31575b6020831014612c0457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612bf9565b604051905f82606d5491612c4e83612bea565b80835292602090600190818116908115612cda5750600114612c7b575b5050612c79925003836129f2565b565b915092606d5f527f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8935f925b828410612cc25750612c799450505081016020015f80612c6b565b85548885018301529485019487945092810192612ca7565b905060209350612c799592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612c6b565b604051905f82606e5491612d3083612bea565b80835292602090600190818116908115612cda5750600114612d5a575050612c79925003836129f2565b915092606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a935f925b828410612da15750612c799450505081016020015f80612c6b565b85548885018301529485019487945092810192612d86565b67ffffffffffffffff81116104b55760051b60200190565b519073ffffffffffffffffffffffffffffffffffffffff8216820361022057565b60209081818403126102205780519067ffffffffffffffff821161022057019180601f84011215610220578251612e2881612db9565b93612e3660405195866129f2565b818552838086019260051b820101928311610220578301905b828210612e5d575050505090565b838091612e6984612dd1565b815201910190612e4f565b73ffffffffffffffffffffffffffffffffffffffff61019954168015612f22575f600491604051928380927fcad107dd0000000000000000000000000000000000000000000000000000000082525afa80156108fe57612efd915f91612f00575b507f0000000000000000000000000000000000000000000000000000000000000000906132ac565b90565b612f1c91503d805f833e612f1481836129f2565b810190612df2565b5f612ed5565b50612efd7f0000000000000000000000000000000000000000000000000000000000000000613262565b15612f5357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15612fb857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff61019954168015612f22575f600491604051928380927f56e2816e0000000000000000000000000000000000000000000000000000000082525afa80156108fe57612efd915f91612f0057507f0000000000000000000000000000000000000000000000000000000000000000906132ac565b73ffffffffffffffffffffffffffffffffffffffff9081610199541691821561315757807f000000000000000000000000000000000000000000000000000000000000000016908216149182156130f457505090565b600492505f90604051938480927fcad107dd0000000000000000000000000000000000000000000000000000000082525afa80156108fe57612efd925f9161313d575b50613c6f565b61315191503d805f833e612f1481836129f2565b5f613137565b809192507f00000000000000000000000000000000000000000000000000000000000000001691161490565b73ffffffffffffffffffffffffffffffffffffffff9081610199541691821561315757807f000000000000000000000000000000000000000000000000000000000000000016908216149182156131d957505090565b600492505f90604051938480927f56e2816e0000000000000000000000000000000000000000000000000000000082525afa80156108fe57612efd925f9161313d5750613c6f565b80518210156132355760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9060405191613270836129ba565b60018352602083019060203683378351156132355773ffffffffffffffffffffffffffffffffffffffff169052565b9190820180921161174857565b91908251600180820190818311611748577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06133006132ea84612db9565b936132f860405195866129f2565b808552612db9565b0136602084013781955f5b84811061333a5750505073ffffffffffffffffffffffffffffffffffffffff9161333491613221565b91169052565b8073ffffffffffffffffffffffffffffffffffffffff61335b859385613221565b51166133678287613221565b520161330b565b1561337557565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff8091169081159081156134d1575b501561347357610199817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f491784ddb6af903db22df115fa8320b4b0b4fdca5e088f87ef5c178a31283e715f80a2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f5f736574416461707465723a20696e76616c69642061646170746572000000006044820152fd5b6040517fdfbe7c820000000000000000000000000000000000000000000000000000000081529150602082600481865afa9182156108fe575f9261353d575b50807f0000000000000000000000000000000000000000000000000000000000000000169116145f61341c565b9091506020813d602011613571575b81613559602093836129f2565b810103126102205761356a90612dd1565b905f613510565b3d915061354c565b73ffffffffffffffffffffffffffffffffffffffff80911691821561366757169182156135e35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526003825260405f20855f5282528060405f2055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff8091169182156138ea57169182156138665782821461380857613720613ff6565b815f52600260205260405f205481811061378457817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f52600284520360405f2055845f5260405f2061377982825461329f565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff168015613acd57613992613ff6565b805f52600260205260405f2054828110613a49578290825f5260026020520360405f20557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182811161022057600454928082168185160391818311611748575f947fff000000000000000000000000000000000000000000000000000000000000006020937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9516911617600455604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff80821681841603613ba1575050612efd918391613e7c565b84613c199160209394613bbd5f98610199928484541690613e7c565b5416906040519687809481937f10a5338600000000000000000000000000000000000000000000000000000000835288600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af19283156108fe575f93613c37575b50612efd918391613e7c565b9192506020823d602011613c67575b81613c53602093836129f2565b8101031261022057612efd91519291613c2b565b3d9150613c46565b908151915f5b838110613c8457505050505f90565b73ffffffffffffffffffffffffffffffffffffffff80613ca48385613221565b511690841614613cb657600101613c75565b50505050600190565b73ffffffffffffffffffffffffffffffffffffffff8181167f0000000000000000000000000000000000000000000000000000000000000000821603613d0457505090565b610199546040517f5c727c7d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9093166004840152602483019390935290916020918391168180604481015b03915afa9081156108fe575f91613d77575090565b90506020813d602011613d9e575b81613d92602093836129f2565b81010312610220575190565b3d9150613d85565b73ffffffffffffffffffffffffffffffffffffffff8181167f0000000000000000000000000000000000000000000000000000000000000000821603613deb57505090565b610199546040517f4e32a1e200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316600484015260248301939093529091602091839116818060448101613d62565b3d15613e77573d90613e5e82612a33565b91613e6c60405193846129f2565b82523d5f602084013e565b606090565b8215613f7b5773ffffffffffffffffffffffffffffffffffffffff1680613f1457505f80809381935af1613eae613e4d565b5015613eb657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff929092166024830152604480830193909352918152612c7991613f766064836129f2565b614280565b505050565b613f886143a7565b613f906143f2565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176104b55760405251902090565b60ff610134541661400357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116140de576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa156108fe575f5173ffffffffffffffffffffffffffffffffffffffff8116156140d657905f90565b505f90600190565b505050505f90600390565b600581101561425357806140fa5750565b600181036141605760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b600281036141c65760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b6003146141cf57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6040516142ea9173ffffffffffffffffffffffffffffffffffffffff166142a6826129ba565b5f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af16142e4613e4d565b91614418565b8051828115918215614387575b50509050156143035750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b83809293500103126102205781015180151581036102205780825f6142f7565b6143af612c3b565b80519081156143bf576020012090565b5050606b5480156143cd5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b6143fa612d1d565b805190811561440a576020012090565b5050606c5480156143cd5790565b91929015614493575081511561442c575090565b3b156144355790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8251909150156144a65750805190602001fd5b6144e4906040519182917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152602483019061290d565b0390fdfea26469706673582212201559fd0375ef6fa3ceae4a897ef3eadf159f9a75ae7c8a50f2868047f34f5b9464736f6c63430008180033000000000000000000000000fe0ccc9942e98c963fe6b4e5194eb6e3baa4cb64