0 txs
31 calls
constructor
constructor()
functions
balance
viewfunction balance(address token) view returns (uint256)
decimalInfo
viewfunction decimalInfo(address baseToken) view returns (tuple)
feeAddr
viewfunction feeAddr() view returns (address)
lendManagers
viewfunction lendManagers(address) view returns (address)
maxGasPrice
viewfunction maxGasPrice() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
poolSize
viewfunction poolSize(address token) view returns (uint256)
query
viewfunction query(address fromToken, address toToken, uint256 fromAmount) view returns (uint256 toAmount)
quoteToken
viewfunction quoteToken() view returns (address)
tokenInfos
viewfunction tokenInfos(address) view returns (uint192 reserve, uint16 feeRate, uint128 maxGamma, uint128 maxNotionalSwap, uint192 capBal)
tryQuery
viewfunction tryQuery(address fromToken, address toToken, uint256 fromAmount) view returns (uint256 toAmount)
unclaimedFee
viewfunction unclaimedFee() view returns (uint256)
userPermissions
viewfunction userPermissions(address) view returns (bool isAdmin, bool isGasSetter, bool isPauser)
wooracle
viewfunction wooracle() view returns (address)
claimFee
nonpayablefunction claimFee()
deposit
nonpayablefunction deposit(address token, uint256 amount)
depositAll
nonpayablefunction depositAll(address token)
inCaseTokenGotStuck
nonpayablefunction inCaseTokenGotStuck(address stuckToken)
initialize
nonpayablefunction initialize(address _owner, address _quoteToken, address _wooracle, address _feeAddr)
migrateToNewPool
nonpayablefunction migrateToNewPool(address token, address newPool)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
repayLegacy
nonpayablefunction repayLegacy(address repaidToken, uint256 amount)
repayPrincipal
nonpayablefunction repayPrincipal(address repaidToken, uint256 principalAmount) returns (uint256 repaidAmount)
repayWeeklyLending
nonpayablefunction repayWeeklyLending(address wantToken) returns (uint256 repaidAmount)
setCapBal
nonpayablefunction setCapBal(address token, uint192 capBal)
setFeeAddr
nonpayablefunction setFeeAddr(address _feeAddr)
setFeeRate
nonpayablefunction setFeeRate(address token, uint16 rate)
setLendManager
nonpayablefunction setLendManager(address _lendManager)
setMaxGamma
nonpayablefunction setMaxGamma(address token, uint128 maxGamma)
setMaxGasPrice
nonpayablefunction setMaxGasPrice(uint256 _maxGasPrice)
setMaxNotionalSwap
nonpayablefunction setMaxNotionalSwap(address token, uint128 maxNotionalSwap)
setTokenInfo
nonpayablefunction setTokenInfo(address token, uint16 _feeRate, uint128 _maxGamma, uint128 _maxNotionalSwap, uint192 _capBal)
setUserPermission
nonpayablefunction setUserPermission(address user, bool flagAdmin, bool flagGasSetter, bool flagPauser)
setWooracle
nonpayablefunction setWooracle(address _wooracle)
swap
nonpayablefunction swap(address fromToken, address toToken, uint256 fromAmount, uint256 minToAmount, address to, address rebateTo) returns (uint256 realToAmount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw(address token, uint256 amount)
withdrawAll
nonpayablefunction withdrawAll(address token)
events
Deposit
event Deposit(address indexed token, address indexed sender, uint256 amount)
FeeAddrUpdated
event FeeAddrUpdated(address indexed newFeeAddr)
Initialized
event Initialized(uint64 version)
Migrate
event Migrate(address indexed token, address indexed receiver, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
UserPermissionUpdated
event UserPermissionUpdated(address indexed user, bool flagAdmin, bool flagGasSetter, bool flagPauser)
Withdraw
event Withdraw(address indexed token, address indexed receiver, uint256 amount)
WooracleUpdated
event WooracleUpdated(address indexed newWooracle)
WooSwap
event WooSwap(address indexed fromToken, address indexed toToken, uint256 fromAmount, uint256 toAmount, address from, address indexed to, address rebateTo, uint256 swapVol, uint256 swapFee)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
creation bytecode
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b604051615f9c9081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c80630426d9751461470d578063217a4b70146146bb57806339e7fddc146146695780633de39c111461462d5780633f4ba83a146144f757806347e7ef24146142835780635c975abb14614223578063637e10cb1461400857806368078eed14613ea0578063686f30b014613db1578063715018a614613cf2578063718f0f1914613b8e5780637dc203821461258b5780638456cb591461240357806385fb94221461236b5780638da5cb5b146122fa57806399d32fc41461220a5780639f0d5f2714611e85578063a1ae849014611d99578063a26db1a714611d2b578063a8a4ff6a14611c35578063b2855b4f14611b49578063b2e693d314611ae3578063ba46ae7214611a24578063bc8530f9146119d2578063ce824f1914611962578063d2fa635e1461184f578063d6285b7f1461175c578063e1a4e72a1461158a578063e3d670d714611540578063e4d43ec114611505578063ebc80f131461116f578063ef29cc3414611075578063f274700714610eb0578063f2fde38b14610e6a578063f3fef3a314610cf2578063f58a435f14610b18578063f8c8765e14610868578063fa09e63014610645578063fa75d160146105c85763fc60fb5d146101e057600080fd5b346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57610217614931565b906024359061022461526e565b73ffffffffffffffffffffffffffffffffffffffff92837f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156105b2575b61027090614a94565b8192848216918284526020956007875260408520541693843b156105af576040517fa373ed4e0000000000000000000000000000000000000000000000000000000081528181600481838a5af180156105905790829161059b575b50506040517f52c49c440000000000000000000000000000000000000000000000000000000081528781600481895afa908115610590578291610563575b506040517fe5e2abf500000000000000000000000000000000000000000000000000000000815288816004818a5afa90811561055857908392918a96959491610525575b509061036a6127106103628361036f95614f0f565b049186614b35565b614b35565b92836103cf575b505050907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb91604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b9196509192508382526003875277ffffffffffffffffffffffffffffffffffffffffffffffff6104058482604086205416614af9565b168483526003885260408320907fffffffffffffffff000000000000000000000000000000000000000000000000825416179055610444838688615190565b604051907f3560df8c0000000000000000000000000000000000000000000000000000000082526004820152868160248185895af19182156105195787928692906104c1575b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb93916104b89197615036565b90913880610376565b928092508391503d8311610512575b6104da8183614a53565b8101031261050d5751859084907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb61048a565b600080fd5b503d6104d0565b604051903d90823e3d90fd5b8681939792503d8311610551575b61053d8183614a53565b8101031261050d575188949061036a61034d565b503d610533565b6040513d85823e3d90fd5b90508781813d8311610589575b61057a8183614a53565b8101031261050d575138610309565b503d610570565b6040513d84823e3d90fd5b6105a490614a07565b6105af5780386102cb565b80fd5b503382526002602052604082205460ff16610267565b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5777ffffffffffffffffffffffffffffffffffffffffffffffff604060209273ffffffffffffffffffffffffffffffffffffffff610633614931565b16815260038452205416604051908152f35b50346105af576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126108645761067e614931565b9073ffffffffffffffffffffffffffffffffffffffff907f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930091808354163314801561084f575b6106cd90614a94565b808416928386526003835277ffffffffffffffffffffffffffffffffffffffffffffffff94856040882054169561070261526e565b838354163314801561083a575b61071890614a94565b85885260038552868160408a205416106107dc57867f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb959493928261076d836107ab9560408e8d815260038c52205416614af9565b16888b526003875260408b20907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790558484541690615489565b541693604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601060248201527f576f6f505056323a2021616d6f756e74000000000000000000000000000000006044820152fd5b5033885260028552604088205460ff1661070f565b5033855260028252604085205460ff166106c4565b5080fd5b50346105af5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af576108a0614931565b6108a8614954565b9060443573ffffffffffffffffffffffffffffffffffffffff9283821680920361050d576064359184831680930361050d577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0094855460ff8160401c16159567ffffffffffffffff821680159081610b10575b6001149081610b06575b159081610afd575b50610ad357818760017fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000061097a9516178a55610a9e575b5061096d615f0d565b610975615f0d565b614de7565b610982615f0d565b61098a615f0d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556109d9615f0d565b6109e1615f0d565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00557fffffffffffffffffffffffff000000000000000000000000000000000000000092168260045416176004558160055416176005556006541617600655610a4a575080f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff81541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b7fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000166801000000000000000117885538610964565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050153861092d565b303b159150610925565b88915061091b565b50346105af57610b27366149a7565b909192610b378261036a86614da4565b9173ffffffffffffffffffffffffffffffffffffffff908186169586845260209660038852610b8a77ffffffffffffffffffffffffffffffffffffffffffffffff96876002604089200154161015614eaa565b6004548416908103610c1e57505090610ba66040939286615840565b945b168152600385522054168111610bc057604051908152f35b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f576f6f505056323a20494e535546465f42414c414e43450000000000000000006044820152fd5b8684168103610c3c57506040939291610c369161576d565b94610ba8565b959182610c5092610c4b6159d8565b61559d565b90958452600387528460408520541610610c6e579060409291610ba8565b608486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602160248201527f576f6f505056323a20494e535546465f51554f54455f464f525f53574150464560448201527f45000000000000000000000000000000000000000000000000000000000000006064820152fd5b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57610d2a614931565b60243590610d3661526e565b73ffffffffffffffffffffffffffffffffffffffff907f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008281541633148015610e54575b610d8390614a94565b82821692838652600360205277ffffffffffffffffffffffffffffffffffffffffffffffff91858360408920541610610df6576107ab867f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb958561076d8360209860408e8d815260038c52205416614af9565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f576f6f505056323a2021616d6f756e74000000000000000000000000000000006044820152fd5b503385526002602052604085205460ff16610d7a565b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57610ead610ea5614931565b610975614f5b565b80f35b50346105af5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57610ee8614931565b610ef0614977565b604435906fffffffffffffffffffffffffffffffff9283831680930361050d57606435938416840361050d576084359377ffffffffffffffffffffffffffffffffffffffffffffffff851680950361050d576002936110339273ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163314801561105f575b610f9590614a94565b1687526003602052610ff1604088209485907fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff79ffff00000000000000000000000000000000000000000000000083549260c01b169116179055565b6fffffffffffffffffffffffffffffffff1660809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016176001830155565b01907fffffffffffffffff00000000000000000000000000000000000000000000000082541617905580f35b503389526020879052604089205460ff16610f8c565b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af576110ad614931565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff821680920361050d5773ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015611159575b61111f90614a94565b168252600360205260026040832001907fffffffffffffffff00000000000000000000000000000000000000000000000082541617905580f35b503384526002602052604084205460ff16611116565b50346105af57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af576111a9614931565b906111b261526e565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156114f0575b6111fe90614a94565b818193168152600784528160408220541691823b15610864576040517fa373ed4e000000000000000000000000000000000000000000000000000000008152828160048183885af18015610558579083916114dc575b5050604051917ff077cbab0000000000000000000000000000000000000000000000000000000083528583600481875afa9283156114a05781936114ad575b50604051907f1f1fcd51000000000000000000000000000000000000000000000000000000008252868260048184895af19182156114a057879392829190611471575b5084611336575b5060405193845216917f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9190a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b91925094508185168082526003875277ffffffffffffffffffffffffffffffffffffffffffffffff61136e8582604086205416614af9565b169082526003875260408220907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790556113ad838587615190565b6040517fc1ae359a000000000000000000000000000000000000000000000000000000008152868160048185895af191821561051957908792611422575b50917f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb929561141a8682615036565b9091926112dd565b82819392503d831161146a575b6114398183614a53565b8101031261050d575185907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb6113eb565b503d61142f565b611492919250843d8611611499575b61148a8183614a53565b810190614d78565b90386112d6565b503d611480565b50604051903d90823e3d90fd5b9092508581813d83116114d5575b6114c58183614a53565b8101031261050d57519138611293565b503d6114bb565b6114e590614a07565b610864578138611254565b5033815260028452604081205460ff166111f5565b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5760209054604051908152f35b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57602061158261157d614931565b614da4565b604051908152f35b50346105af576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610864576115c3614931565b906115cc614f5b565b73ffffffffffffffffffffffffffffffffffffffff82169173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee83036116ce5750905047604051908282019180831067ffffffffffffffff84111761169f578285939284809493819460405252335af1611637614fcb565b5015611641575080f35b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa91821561175157849261171f575b50610ead92503390615489565b90915082813d831161174a575b6117368183614a53565b8101031261050d57610ead91519038611712565b503d61172c565b6040513d86823e3d90fd5b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5760043573ffffffffffffffffffffffffffffffffffffffff80821680920361184b576117b6614f5b565b6040517f1f1fcd5100000000000000000000000000000000000000000000000000000000815260208160048187875af190811561175157849161182c575b50168252600760205260408220907fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b611845915060203d6020116114995761148a8183614a53565b386117f4565b8280fd5b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163314801561194c575b8015611933575b156118d55760043560015580f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f576f6f505056323a2021676173536574746572000000000000000000000000006044820152fd5b50338152600260205260ff604082205460081c166118c7565b50338152600260205260ff6040822054166118c0565b50346105af57602090611974366149a7565b91925073ffffffffffffffffffffffffffffffffffffffff80600454169081818616146000146119aa5750506115829250615840565b8216036119c057506119bb9161576d565b611582565b6119cc92610c4b6159d8565b50611582565b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57602073ffffffffffffffffffffffffffffffffffffffff60055416604051908152f35b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57604060a09173ffffffffffffffffffffffffffffffffffffffff611a76614931565b168152600360205220805477ffffffffffffffffffffffffffffffffffffffffffffffff9161ffff83600260018401549301541692604051948116855260c01c1660208401526fffffffffffffffffffffffffffffffff8116604084015260801c60608301526080820152f35b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57602090604073ffffffffffffffffffffffffffffffffffffffff9182611b37614931565b16815260078452205416604051908152f35b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57611b81614931565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015611c1f575b611bcd90614a94565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060065416176006557f76f97b3f5ffcc8d8d9577d141751a7bed446b46d837fbc81b5c01c165bbfbbf48280a280f35b503383526002602052604083205460ff16611bc4565b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57610ead611c70614931565b611c78614988565b9073ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015611d15575b611cc590614a94565b168352600360205260016040842001906fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b503385526002602052604085205460ff16611cbc565b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af576060611d6d611d68614931565b614be5565b60405190604067ffffffffffffffff918281511684528260208201511660208501520151166040820152f35b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57611dd1614931565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015611e6f575b611e1d90614a94565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060055416176005557f59ddfdd1bf7e3ea08a07e8aaa1fe2ce9c840fab69fe5ede6ea727a45eb42fc668280a280f35b503383526002602052604083205460ff16611e14565b50346105af576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261086457611ebe614931565b9073ffffffffffffffffffffffffffffffffffffffff907f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993009282845416331480156121f5575b611f0d90614a94565b82811692604051947f70a082310000000000000000000000000000000000000000000000000000000086523360048701528386602481885afa9586156121ea5787966121bb575b50611f5d61526e565b5416331480156121a6575b611f7190614a94565b611f7a81614da4565b908580604051858101907f23b872dd00000000000000000000000000000000000000000000000000000000825233602482015230604482015288606482015260648152611fc681614a37565b519082855af1611fd4614fcb565b8161216a575b501561210c578491611fee611ff392614da4565b614af9565b106120ae577f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62908285526003815277ffffffffffffffffffffffffffffffffffffffffffffffff61204a8582604089205416614b35565b168386526003825260408620907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790556040519384523393a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600d60248201527f414d4f554e545f494e53554646000000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152fd5b80915051848115918215612183575b5050905038611fda565b83809293500103126121a2578361219a9101615029565b808438612179565b8680fd5b5033855260028252604085205460ff16611f68565b9095508381813d83116121e3575b6121d38183614a53565b8101031261050d57519438611f54565b503d6121c9565b6040513d89823e3d90fd5b5033855260028252604085205460ff16611f04565b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5761224161526e565b73ffffffffffffffffffffffffffffffffffffffff806006541690811561229c576122759183549184805560045416615489565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f576f6f505056323a2021666565416464720000000000000000000000000000006044820152fd5b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346105af5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5760406123ff9173ffffffffffffffffffffffffffffffffffffffff6123be614931565b16815260026020522054604051918160ff849360101c169060ff808260081c1691168491926040919493606084019515158452151560208401521515910152565b0390f35b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015612575575b801561255c575b156124fe576124876159d8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f576f6f505056323a2021697350617573657200000000000000000000000000006044820152fd5b50338152600260205260ff604082205460101c1661247a565b50338152600260205260ff604082205416612473565b50346105af5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af576125c3614931565b6125cb614954565b73ffffffffffffffffffffffffffffffffffffffff608435166084350361050d5773ffffffffffffffffffffffffffffffffffffffff60a4351660a4350361050d576001543a11613b305773ffffffffffffffffffffffffffffffffffffffff600454168073ffffffffffffffffffffffffffffffffffffffff841614600014612bca5750905061265a61526e565b6126626159d8565b61268373ffffffffffffffffffffffffffffffffffffffff821615156153bf565b6126a673ffffffffffffffffffffffffffffffffffffffff6084351615156152c8565b73ffffffffffffffffffffffffffffffffffffffff600454166126e18173ffffffffffffffffffffffffffffffffffffffff84161415615424565b61271e6126ed82614da4565b828552600360205277ffffffffffffffffffffffffffffffffffffffffffffffff6002604087200154161015614eaa565b61272781614da4565b908352600360205261275b6044359177ffffffffffffffffffffffffffffffffffffffffffffffff60408620541690614af9565b10612b6c5773ffffffffffffffffffffffffffffffffffffffff811682526003602052620186a061279961ffff604085205460c01c16604435614f0f565b04906127a782604435614af9565b6127b2838554614b35565b845573ffffffffffffffffffffffffffffffffffffffff6005541692846040517f31e658a500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152608081602481895afa801561059057612833918391612b3d575b508486615daf565b9095803b1561184b576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526fffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af1801561059057612b25575b50506064358410612aa25760209473ffffffffffffffffffffffffffffffffffffffff841681526003865277ffffffffffffffffffffffffffffffffffffffffffffffff6129048682604085205416614af9565b169073ffffffffffffffffffffffffffffffffffffffff8516815260038752604081207fffffffffffffffff0000000000000000000000000000000000000000000000009283825416179055604073ffffffffffffffffffffffffffffffffffffffff600454169182815277ffffffffffffffffffffffffffffffffffffffffffffffff61299787828585205416614b35565b169281526003895220918254161790553073ffffffffffffffffffffffffffffffffffffffff6084351603612a90575b7f0e8e403c2d36126272b08c75823e988381d9dc47f2f0a9a080d95f891d95c46973ffffffffffffffffffffffffffffffffffffffff6004541691612a1681612a108187614b35565b95614b35565b6040805195865260208601889052339086015273ffffffffffffffffffffffffffffffffffffffff60a43581166060870152608086019190915260a0850191909152608435811694169260c090a460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b612a9d8460843585615489565b6129c7565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f576f6f505056323a2062617365416d6f756e745f4c545f6d696e42617365416d60448201527f6f756e74000000000000000000000000000000000000000000000000000000006064820152fd5b612b2e90614a07565b612b395784386128b0565b8480fd5b612b5f915060803d608011612b65575b612b578183614a53565b810190615342565b3861282b565b503d612b4d565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a202151554f544500000000000000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff8216036131ad5750612bef61526e565b612bf76159d8565b612c1873ffffffffffffffffffffffffffffffffffffffff821615156153bf565b612c3b73ffffffffffffffffffffffffffffffffffffffff6084351615156152c8565b612c7573ffffffffffffffffffffffffffffffffffffffff6004541673ffffffffffffffffffffffffffffffffffffffff83161415615424565b612cc8612c8182614da4565b73ffffffffffffffffffffffffffffffffffffffff83168452600360205277ffffffffffffffffffffffffffffffffffffffffffffffff6002604086200154161015614eaa565b612cd181614da4565b73ffffffffffffffffffffffffffffffffffffffff821683526003602052612d1b6044359177ffffffffffffffffffffffffffffffffffffffffffffffff60408620541690614af9565b1061314f5773ffffffffffffffffffffffffffffffffffffffff6005541690826040517f31e658a500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152608081602481875afa801561059057612da1918391613130575b5060443584615bf4565b9093803b1561184b576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526fffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af180156105905761311c575b505073ffffffffffffffffffffffffffffffffffffffff811683526003602052612e62620186a0612e5a61ffff604087205460c01c1685614f0f565b048093614af9565b9160643583106130985783612e7a8260209654614b35565b815573ffffffffffffffffffffffffffffffffffffffff831681526003855277ffffffffffffffffffffffffffffffffffffffffffffffff612ec460443582604085205416614b35565b169073ffffffffffffffffffffffffffffffffffffffff8416815260038652604081207fffffffffffffffff0000000000000000000000000000000000000000000000009283825416179055604073ffffffffffffffffffffffffffffffffffffffff600454169182815277ffffffffffffffffffffffffffffffffffffffffffffffff612f5b86611fee8a848787205416614af9565b169281526003885220918254161790553073ffffffffffffffffffffffffffffffffffffffff608435160361306e575b73ffffffffffffffffffffffffffffffffffffffff60045416907f0e8e403c2d36126272b08c75823e988381d9dc47f2f0a9a080d95f891d95c469613042612fd38387614b35565b9260405191829173ffffffffffffffffffffffffffffffffffffffff806084351698169560a435338b604435879290969594919360a09460c08501988552602085015273ffffffffffffffffffffffffffffffffffffffff809216604085015216606083015260808201520152565b0390a460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055611582565b6130938360843573ffffffffffffffffffffffffffffffffffffffff60045416615489565b612f8b565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f576f6f505056323a2071756f7465416d6f756e745f4c545f6d696e51756f746560448201527f416d6f756e7400000000000000000000000000000000000000000000000000006064820152fd5b61312590614a07565b61184b578238612e1e565b613149915060803d608011612b6557612b578183614a53565b38612d97565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f576f6f505056323a2021424153450000000000000000000000000000000000006044820152fd5b6131b561526e565b6131bd6159d8565b73ffffffffffffffffffffffffffffffffffffffff8216151580613af8575b15613a9a5773ffffffffffffffffffffffffffffffffffffffff8116151580613a62575b15613a045773ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8316146139a65761325b73ffffffffffffffffffffffffffffffffffffffff6084351615156152c8565b6132ae61326783614da4565b73ffffffffffffffffffffffffffffffffffffffff84168552600360205277ffffffffffffffffffffffffffffffffffffffffffffffff6002604087200154161015614eaa565b6132b782614da4565b73ffffffffffffffffffffffffffffffffffffffff8316845260036020526133016044359177ffffffffffffffffffffffffffffffffffffffffffffffff60408720541690614af9565b1061394857829173ffffffffffffffffffffffffffffffffffffffff600554166040517f31e658a500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152608081602481855afa90811561393d57859161391e575b50604051907f31e658a500000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff85166004830152608082602481865afa9182156139135786926138eb575b506134728173ffffffffffffffffffffffffffffffffffffffff88876134668a61ffff602060409901988995677fffffffffffffff6134298d602067ffffffffffffffff809b51169101998a511690615a2d565b60011c16978896168152600360205273ffffffffffffffffffffffffffffffffffffffff838383205460c01c1694168152205460c01c1690615a4c565b95525260443586615bf4565b9093803b156138e7576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526fffffffffffffffffffffffffffffffff92909216602483015287908290604490829084905af19081156121ea5787916138d3575b5050613514620186a061350c61ffff613637941686614f0f565b048094614af9565b91613520848854614b35565b875573ffffffffffffffffffffffffffffffffffffffff60045416808852600360205277ffffffffffffffffffffffffffffffffffffffffffffffff61356c868260408c205416614af9565b16908852600360205260408820907fffffffffffffffff00000000000000000000000000000000000000000000000082541617905573ffffffffffffffffffffffffffffffffffffffff8516875277ffffffffffffffffffffffffffffffffffffffffffffffff6135e56044358260408b205416614b35565b1673ffffffffffffffffffffffffffffffffffffffff86168852600360205260408820907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790558286615daf565b73ffffffffffffffffffffffffffffffffffffffff60059792975416803b1561184b576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526fffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af18015610590576138bb575b50506064358510613837576130426137b8837f0e8e403c2d36126272b08c75823e988381d9dc47f2f0a9a080d95f891d95c4699360209973ffffffffffffffffffffffffffffffffffffffff8916815260038b52604077ffffffffffffffffffffffffffffffffffffffffffffffff61374c8c828486205416614af9565b169173ffffffffffffffffffffffffffffffffffffffff8b16815260038d5220907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790553073ffffffffffffffffffffffffffffffffffffffff608435160361382a57614b35565b9260405191829173ffffffffffffffffffffffffffffffffffffffff808060843516991697169560a435338b604435879290969594919360a09460c08501988552602085015273ffffffffffffffffffffffffffffffffffffffff809216604085015216606083015260808201520152565b61036a896084358a615489565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f576f6f505056323a206261736532416d6f756e745f4c545f6d696e426173653260448201527f416d6f756e7400000000000000000000000000000000000000000000000000006064820152fd5b6138c490614a07565b6138cf5785386136ce565b8580fd5b6138dc90614a07565b6138cf5785386134f2565b8780fd5b604091925061390b6134729160803d608011612b6557612b578183614a53565b9291506133d5565b6040513d88823e3d90fd5b613937915060803d608011612b6557612b578183614a53565b3861337a565b6040513d87823e3d90fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f576f6f505056323a202142415345315f42414c414e43450000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f576f6f505056323a2062617365313d3d626173653200000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f576f6f505056323a202162617365546f6b656e320000000000000000000000006044820152fd5b5073ffffffffffffffffffffffffffffffffffffffff6004541673ffffffffffffffffffffffffffffffffffffffff82161415613200565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f576f6f505056323a202162617365546f6b656e310000000000000000000000006044820152fd5b5073ffffffffffffffffffffffffffffffffffffffff6004541673ffffffffffffffffffffffffffffffffffffffff831614156131dc565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f576f6f505056323a2021676173507269636500000000000000000000000000006044820152fd5b50346105af5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57613bc6614931565b602435908115159182810361050d57604435908115159283830361050d5760643580151580820361050d577f572bc6579da43a41aea9ca879fa488266f617e6d4ce982da30413ff0ed5806a595613cd69373ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015613cdc575b613c6390614a94565b1697888a52600260205260408a20927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060ff61ff0062ff000087549460101b169560081b169316911617171790556040519384938491926040919493606084019515158452151560208401521515910152565b0390a280f35b50338b52600260205260408b205460ff16613c5a565b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57613d29614f5b565b600073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054907fffffffffffffffffffffffff000000000000000000000000000000000000000082169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57613de9614931565b613df1614988565b9073ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015613e8a575b613e3e90614a94565b16825260036020526fffffffffffffffffffffffffffffffff6001604084200191167fffffffffffffffffffffffffffffffff0000000000000000000000000000000082541617905580f35b503384526002602052604084205460ff16613e35565b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57613ed8614931565b613ee0614977565b73ffffffffffffffffffffffffffffffffffffffff807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015613ff2575b613f2b90614a94565b620186a061ffff831611613f9457610ead92168352600360205260408320907fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff79ffff00000000000000000000000000000000000000000000000083549260c01b169116179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21726174650000000000000000000000000000000000000000000000000000006044820152fd5b503384526002602052604084205460ff16613f22565b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57614040614931565b60243561404b61526e565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163314801561420d575b61409790614a94565b8183169182855260076020526040852054169281614103575b5060207f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb91604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b600360205277ffffffffffffffffffffffffffffffffffffffffffffffff6141318382604089205416614af9565b16838652600360205260408620907fffffffffffffffff000000000000000000000000000000000000000000000000825416179055614171828583615190565b833b15612b3957604051907f371fd8e6000000000000000000000000000000000000000000000000000000008252826004830152858083602481838a5af19283156114a05786936141f4575b5050916141ed6020927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb94615036565b91506140b0565b61420091929350614a07565b612b3957839085386141bd565b503384526002602052604084205460ff1661408e565b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af576142bb614931565b602435906142c761526e565b73ffffffffffffffffffffffffffffffffffffffff807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156144e1575b61431290614a94565b61431b82614da4565b91604051928580602095868101907f23b872dd0000000000000000000000000000000000000000000000000000000082523360248201523060448201528860648201526064815261436b81614a37565b519082865af1614379614fcb565b816144a9575b501561444b576143938591611fee84614da4565b106143ed57907f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629116918285526003815277ffffffffffffffffffffffffffffffffffffffffffffffff61204a8582604089205416614b35565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600d60248201527f414d4f554e545f494e53554646000000000000000000000000000000000000006044820152fd5b606484604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152fd5b809150518581159182156144c2575b505090503861437f565b83809293500103126121a257846144d99101615029565b8085386144b8565b503384526002602052604084205460ff16614309565b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015614617575b61457090614a94565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff8116156145ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b60046040517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b503381526002602052604081205460ff16614567565b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af576020600154604051908152f35b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b50346105af57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b50346105af5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105af57614745614931565b61474d614954565b614755614f5b565b73ffffffffffffffffffffffffffffffffffffffff908183169182156148d3578116928315614875576147c5908386526003602052604086207fffffffffffffffff00000000000000000000000000000000000000000000000081541690556147bd81614da4565b928391615190565b823b15614871576040517f9f0d5f27000000000000000000000000000000000000000000000000000000008152826004820152848160248183885af1801561393d5761483b575b5060207f18df02dcc52b9c494f391df09661519c0069bd8540141946280399408205ca1a91604051908152a380f35b7f18df02dcc52b9c494f391df09661519c0069bd8540141946280399408205ca1a9194614869602092614a07565b94915061480c565b8380fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f576f6f505056323a20216e6577506f6f6c0000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a2021746f6b656e00000000000000000000000000000000006044820152fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361050d57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361050d57565b6024359061ffff8216820361050d57565b602435906fffffffffffffffffffffffffffffffff8216820361050d57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc606091011261050d5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361050d5791602435908116810361050d579060443590565b67ffffffffffffffff811161169f57604052565b6060810190811067ffffffffffffffff82111761169f57604052565b60a0810190811067ffffffffffffffff82111761169f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761169f57604052565b15614a9b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a202161646d696e00000000000000000000000000000000006044820152fd5b91908203918211614b0657565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b91908201809211614b0657565b9081602091031261050d575160ff8116810361050d5790565b8015614bdf57600190602081108216604e8210831617614bc8578190600a925b808211614b995750508167ffffffffffffffff048111614b06570290565b90928067ffffffffffffffff048111614b0657818416614bbf575b800292811c90614b7b565b80920291614bb4565b9050600a0a9067ffffffffffffffff8211614b0657565b50600190565b6040805191614bf383614a1b565b60009283815283836020928284820152015273ffffffffffffffffffffffffffffffffffffffff93848281600554169460248751809481937fd449a83200000000000000000000000000000000000000000000000000000000835216978860048301525afa908115614d6e57614c749160ff918491614d57575b5016614b5b565b946004541692845183816004817f313ce56700000000000000000000000000000000000000000000000000000000988982525afa908115614d4d5760ff8592614cc4928691614d15575016614b5b565b94600487518094819382525afa918215614d4257614ceb9260ff9290614d15575016614b5b565b90835194614cf886614a1b565b67ffffffffffffffff938480921687521690850152169082015290565b614d359150843d8611614d3b575b614d2d8183614a53565b810190614b42565b38614c6d565b503d614d23565b8551903d90823e3d90fd5b86513d85823e3d90fd5b614d359150853d8711614d3b57614d2d8183614a53565b85513d84823e3d90fd5b9081602091031261050d575173ffffffffffffffffffffffffffffffffffffffff8116810361050d5790565b60045473ffffffffffffffffffffffffffffffffffffffff828116911603614dde57614dd2614ddb91615900565b60005490614af9565b90565b614ddb90615900565b73ffffffffffffffffffffffffffffffffffffffff809116908115614e79577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805490837fffffffffffffffffffffffff00000000000000000000000000000000000000008316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b15614eb157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f576f6f505056323a204341505f455843454544530000000000000000000000006044820152fd5b81810292918115918404141715614b0657565b8115614f2c570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303614f9b57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b3d15615024573d9067ffffffffffffffff821161169f576040519161501860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184614a53565b82523d6000602084013e565b606090565b5190811515820361050d57565b6040519173ffffffffffffffffffffffffffffffffffffffff60208401917f095ea7b3000000000000000000000000000000000000000000000000000000008352166024840152600092836044820152604481526080810181811067ffffffffffffffff8211176151635760405251839283929083905af1906150b7614fcb565b82615124575b5050156150c657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53410000000000000000000000000000000000000000000000000000000000006044820152fd5b809192505191821592831561513e575b50505038806150bd565b8293509160209192810103126105af5750602061515b9101615029565b388080615134565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201526044810193909352600092839290839061521d81606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614a53565b51925af1615229614fcb565b81615237575b50156150c657565b805180159250821561524c575b50503861522f565b819250906020918101031261050d5760206152679101615029565b3880615244565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00600281541461529e5760029055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b156152cf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f576f6f505056323a2021746f00000000000000000000000000000000000000006044820152fd5b519067ffffffffffffffff8216820361050d57565b9081608091031261050d57604051906080820182811067ffffffffffffffff82111761169f5760405280516fffffffffffffffffffffffffffffffff8116810361050d576153b791606091845261539b6020820161532d565b60208501526153ac6040820161532d565b604085015201615029565b606082015290565b156153c657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f576f6f505056323a202162617365546f6b656e000000000000000000000000006044820152fd5b1561542b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f576f6f505056323a2062617365546f6b656e3d3d71756f7465546f6b656e00006044820152fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff9093166024820152604481019390935260009283929083906154ee81606481016151f1565b51925af16154fa614fcb565b81615566575b501561550857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53540000000000000000000000000000000000000000000000000000000000006044820152fd5b805180159250821561557b575b505038615500565b819250906020918101031261050d5760206155969101615029565b3880615573565b9173ffffffffffffffffffffffffffffffffffffffff908184169384158015615763575b8015615756575b8015615747575b61573a5782600554166040928351917f31e658a500000000000000000000000000000000000000000000000000000000958684528860048501526080968785602481865afa94851561572f57908891600096615710575b50602488518094819382528c16958660048301525afa968715615705576000976156e6575b5050602083019767ffffffffffffffff90818a5116602089019283511661567191615a2d565b60011c677fffffffffffffff16928391600052600360205261ffff8089819a60002054936000526000205460c01c169160c01c16906156af91615a4c565b9952526156bb92615bf4565b5093166156c89084614f0f565b620186a0900492836156d991614af9565b6156e292615daf565b5091565b6156fd929750803d10612b6557612b578183614a53565b94388061564b565b86513d6000823e3d90fd5b615728919650823d8411612b6557612b578183614a53565b9438615626565b87513d6000823e3d90fd5b5050505050600090600090565b508260045416838516146155cf565b50826004541685146155c8565b50828416156155c1565b906157766159d8565b602473ffffffffffffffffffffffffffffffffffffffff916080836005541693604051938480927f31e658a50000000000000000000000000000000000000000000000000000000082528816968760048301525afa90811561583457614ddb946157e893600093615813575b50615bf4565b50906000526003602052620186a061580c61ffff60406000205460c01c1683614f0f565b0490614af9565b61582d91935060803d608011612b6557612b578183614a53565b91386157e2565b6040513d6000823e3d90fd5b6158486159d8565b73ffffffffffffffffffffffffffffffffffffffff608061588982841694856000526003602052620186a061580c61ffff60406000205460c01c1683614f0f565b9160055416936024604051809681937f31e658a500000000000000000000000000000000000000000000000000000000835260048301525afa918215615834576158db936000936158df575b50615daf565b5090565b6158f991935060803d608011612b6557612b578183614a53565b91386158d5565b6000809160405160208101907f70a082310000000000000000000000000000000000000000000000000000000082523060248201526024815261594281614a1b565b51915afa61594e614fcb565b90806159cc575b1561596e5760208180518101031261050d576020015190565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f576f6f505056323a202142414c414e43450000000000000000000000000000006044820152fd5b50602081511015615955565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416615a0357565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b9067ffffffffffffffff8082169083161115615a47575090565b905090565b9061ffff8082169083161115615a47575090565b15615a6757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576f6f505056323a20214f5241434c455f4645415349424c45000000000000006044820152fd5b15615acc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f576f6f505056323a20214f524143455f505249434500000000000000000000006044820152fd5b15615b3157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f576f6f505056323a20216d61784e6f74696f6e616c56616c75650000000000006044820152fd5b15615b9657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a202167616d6d6100000000000000000000000000000000006044820152fd5b92919260608401511515615c0790615a60565b6fffffffffffffffffffffffffffffffff808551161515615c2790615ac5565b615c3082614be5565b81865116615c3e9085614f0f565b602082019167ffffffffffffffff809281855116615c5b91614f0f565b9381604084019581875116615c6f91614f22565b81855116615c7c91614f22565b9773ffffffffffffffffffffffffffffffffffffffff16986000988a8a52600360205260408a206001015460801c1015615cb590615b2a565b8b8289825116615cc59084614f0f565b916040015116615cd491614f0f565b82865116615ce191614f22565b82885116615cee91614f22565b99895260036020528760408a2060010154168a1115615d0c90615b8f565b878c5116615d1991614f0f565b915116615d2591614f0f565b915116615d3191614f22565b670de0b6b3a764000095860394868611615d825750918186615d6b615d7e979695615d65615d759660208e01511689614af9565b90614f0f565b0491511690614f22565b95511690614f0f565b0490565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b90604091939293615dc560608601511515615a60565b6fffffffffffffffffffffffffffffffff615de4818751161515615ac5565b73ffffffffffffffffffffffffffffffffffffffff615e0283614be5565b921692615e98615e8e6000948686526003602052615e2b6001898820015460801c851115615b2a565b89615e85615e4867ffffffffffffffff809b819401511687614f0f565b95615e5b60208501978489511690614f22565b9989526003602052615e7888600160408c200154168b1115615b8f565b8260408501511690614f0f565b91511690614f0f565b8389511690614f22565b94670de0b6b3a764000094850395858711615ee0579085615d6b615ec79493615d658460208e0151168b614af9565b95511680830292830403615d82575090614ddb91614f22565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615615f3c57565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fdfea26469706673582212202d34cd4d7f4cb10c2714ed498f47f05fb1826f74ca409fbf8d0486a405b890c064736f6c63430008160033