0 txs
5 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)
isAdmin
viewfunction isAdmin(address) view returns (bool)
isGasSetter
viewfunction isGasSetter(address) view returns (bool)
isPauseRole
viewfunction isPauseRole(address) view returns (bool)
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)
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)
setAdmin
nonpayablefunction setAdmin(address addr, bool flag)
setFeeAddr
nonpayablefunction setFeeAddr(address _feeAddr)
setGasSetter
nonpayablefunction setGasSetter(address addr, bool flag)
setLendManager
nonpayablefunction setLendManager(address _lendManager)
setMaxGasPrice
nonpayablefunction setMaxGasPrice(uint256 _maxGasPrice)
setPauseRole
nonpayablefunction setPauseRole(address addr, bool flag)
setTokenInfo
nonpayablefunction setTokenInfo(address token, uint16 _feeRate, uint128 _maxGamma, uint128 _maxNotionalSwap, uint192 _capBal)
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
AdminUpdated
event AdminUpdated(address indexed addr, bool flag)
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)
PauseRoleUpdated
event PauseRoleUpdated(address indexed addr, bool flag)
Unpaused
event Unpaused(address account)
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
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b604051615d6b9081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081622259b414614671575080630426d97514614451578063217a4b70146143ff57806324d7806c1461439757806333d7558b146142e6578063381690691461427e57806339e7fddc1461422c5780633de39c11146141f05780633f4ba83a146140ba57806347e7ef2414613e465780634b0bddd214613d655780635905d23c14613c835780635c975abb14613c23578063637e10cb14613a08578063715018a6146139495780637dc20382146123555780638456cb59146121d05780638da5cb5b1461215f57806399d32fc41461206f5780639f0d5f2714611cea578063a1ae849014611bfe578063a26db1a714611b90578063b2855b4f14611aa4578063b2e693d314611a3e578063ba46ae721461197f578063bc8530f91461192d578063ce824f19146118bd578063d2fa635e146117ad578063d6285b7f14611652578063e1a4e72a14611480578063e3d670d714611436578063e4d43ec1146113fb578063ebc80f1314611065578063f274700714610eb3578063f2fde38b14610e6d578063f3fef3a314610cf5578063f58a435f14610b1b578063f8c8765e1461086b578063fa09e63014610648578063fa75d160146105cb5763fc60fb5d146101e357600080fd5b346105b25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25761021a6146d6565b906024359061022761503d565b73ffffffffffffffffffffffffffffffffffffffff92837f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156105b5575b61027390614863565b8192848216918284526020956009875260408520541693843b156105b2576040517fa373ed4e0000000000000000000000000000000000000000000000000000000081528181600481838a5af180156105935790829161059e575b50506040517f52c49c440000000000000000000000000000000000000000000000000000000081528781600481895afa908115610593578291610566575b506040517fe5e2abf500000000000000000000000000000000000000000000000000000000815288816004818a5afa90811561055b57908392918a96959491610528575b509061036d6127106103658361037295614cde565b049186614904565b614904565b92836103d2575b505050907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb91604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b9196509192508382526005875277ffffffffffffffffffffffffffffffffffffffffffffffff61040884826040862054166148c8565b168483526005885260408320907fffffffffffffffff000000000000000000000000000000000000000000000000825416179055610447838688614f5f565b604051907f3560df8c0000000000000000000000000000000000000000000000000000000082526004820152868160248185895af191821561051c5787928692906104c4575b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb93916104bb9197614e05565b90913880610379565b928092508391503d8311610515575b6104dd8183614822565b810103126105105751859084907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb61048d565b600080fd5b503d6104d3565b604051903d90823e3d90fd5b8681939792503d8311610554575b6105408183614822565b81010312610510575188949061036d610350565b503d610536565b6040513d85823e3d90fd5b90508781813d831161058c575b61057d8183614822565b8101031261051057513861030c565b503d610573565b6040513d84823e3d90fd5b6105a7906147d6565b6105b25780386102ce565b80fd5b503382526002602052604082205460ff1661026a565b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25777ffffffffffffffffffffffffffffffffffffffffffffffff604060209273ffffffffffffffffffffffffffffffffffffffff6106366146d6565b16815260058452205416604051908152f35b50346105b2576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610867576106816146d6565b9073ffffffffffffffffffffffffffffffffffffffff907f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300918083541633148015610852575b6106d090614863565b808416928386526005835277ffffffffffffffffffffffffffffffffffffffffffffffff94856040882054169561070561503d565b838354163314801561083d575b61071b90614863565b85885260058552868160408a205416106107df57867f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9594939282610770836107ae9560408e8d815260058c522054166148c8565b16888b526005875260408b20907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790558484541690615258565b541693604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601060248201527f576f6f505056323a2021616d6f756e74000000000000000000000000000000006044820152fd5b5033885260028552604088205460ff16610712565b5033855260028252604085205460ff166106c7565b5080fd5b50346105b25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b2576108a36146d6565b6108ab6146f9565b9060443573ffffffffffffffffffffffffffffffffffffffff928382168092036105105760643591848316809303610510577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0094855460ff8160401c16159567ffffffffffffffff821680159081610b13575b6001149081610b09575b159081610b00575b50610ad657818760017fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000061097d9516178a55610aa1575b50610970615cdc565b610978615cdc565b614bb6565b610985615cdc565b61098d615cdc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556109dc615cdc565b6109e4615cdc565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00557fffffffffffffffffffffffff000000000000000000000000000000000000000092168260065416176006558160075416176007556008541617600855610a4d575080f35b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff81541690557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b7fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000166801000000000000000117885538610967565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b90501538610930565b303b159150610928565b88915061091e565b50346105b257610b2a36614776565b909192610b3a8261036d86614b73565b9173ffffffffffffffffffffffffffffffffffffffff908186169586845260209660058852610b8d77ffffffffffffffffffffffffffffffffffffffffffffffff96876002604089200154161015614c79565b6006548416908103610c2157505090610ba9604093928661560f565b945b168152600585522054168111610bc357604051908152f35b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f576f6f505056323a20494e535546465f42414c414e43450000000000000000006044820152fd5b8684168103610c3f57506040939291610c399161553c565b94610bab565b959182610c5392610c4e6157a7565b61536c565b90958452600587528460408520541610610c71579060409291610bab565b608486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602160248201527f576f6f505056323a20494e535546465f51554f54455f464f525f53574150464560448201527f45000000000000000000000000000000000000000000000000000000000000006064820152fd5b50346105b25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257610d2d6146d6565b60243590610d3961503d565b73ffffffffffffffffffffffffffffffffffffffff907f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008281541633148015610e57575b610d8690614863565b82821692838652600560205277ffffffffffffffffffffffffffffffffffffffffffffffff91858360408920541610610df9576107ae867f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb95856107708360209860408e8d815260058c522054166148c8565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f576f6f505056323a2021616d6f756e74000000000000000000000000000000006044820152fd5b503385526002602052604085205460ff16610d7d565b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257610eb0610ea86146d6565b610978614d2a565b80f35b50346105b25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257610eeb6146d6565b60243561ffff8116810361106157604435906fffffffffffffffffffffffffffffffff91828116809103610510576064359283168303610510576084359377ffffffffffffffffffffffffffffffffffffffffffffffff851680950361105d576002937fffffffffffffffffffffffffffffffff000000000000000000000000000000009173ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015611047575b610fbc90614863565b168752600560205260408720937fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff79ffff00000000000000000000000000000000000000000000000086549260c01b16911617845560801b1617600182015501907fffffffffffffffff00000000000000000000000000000000000000000000000082541617905580f35b503389526020879052604089205460ff16610fb3565b8580fd5b8280fd5b50346105b257602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25761109f6146d6565b906110a861503d565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156113e6575b6110f490614863565b818193168152600984528160408220541691823b15610867576040517fa373ed4e000000000000000000000000000000000000000000000000000000008152828160048183885af1801561055b579083916113d2575b5050604051917ff077cbab0000000000000000000000000000000000000000000000000000000083528583600481875afa9283156113965781936113a3575b50604051907f1f1fcd51000000000000000000000000000000000000000000000000000000008252868260048184895af191821561139657879392829190611367575b508461122c575b5060405193845216917f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9190a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b91925094508185168082526005875277ffffffffffffffffffffffffffffffffffffffffffffffff61126485826040862054166148c8565b169082526005875260408220907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790556112a3838587614f5f565b6040517fc1ae359a000000000000000000000000000000000000000000000000000000008152868160048185895af191821561051c57908792611318575b50917f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb92956113108682614e05565b9091926111d3565b82819392503d8311611360575b61132f8183614822565b81010312610510575185907f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb6112e1565b503d611325565b611388919250843d861161138f575b6113808183614822565b810190614b47565b90386111cc565b503d611376565b50604051903d90823e3d90fd5b9092508581813d83116113cb575b6113bb8183614822565b8101031261051057519138611189565b503d6113b1565b6113db906147d6565b61086757813861114a565b5033815260028452604081205460ff166110eb565b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25760209054604051908152f35b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25760206114786114736146d6565b614b73565b604051908152f35b50346105b2576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610867576114b96146d6565b906114c2614d2a565b73ffffffffffffffffffffffffffffffffffffffff82169173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee83036115c45750905047604051908282019180831067ffffffffffffffff841117611595578285939284809493819460405252335af161152d614d9a565b5015611537575080f35b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b81602493604051948580927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa918215611647578492611615575b50610eb092503390615258565b90915082813d8311611640575b61162c8183614822565b8101031261051057610eb091519038611608565b503d611622565b6040513d86823e3d90fd5b50346105b2576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610867576004359073ffffffffffffffffffffffffffffffffffffffff908183168093036117a9576116af614d2a565b604051917f1f1fcd51000000000000000000000000000000000000000000000000000000008352818360048188885af1801561179e577f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a11133938691611781575b501684526009815260408420837fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055828452600281526040842060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905560405160018152a280f35b6117989150833d851161138f576113808183614822565b3861170e565b6040513d87823e3d90fd5b8380fd5b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156118a7575b8015611891575b156118335760043560015580f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f576f6f505056323a2021676173536574746572000000000000000000000000006044820152fd5b50338152600460205260ff604082205416611825565b50338152600260205260ff60408220541661181e565b50346105b2576020906118cf36614776565b91925073ffffffffffffffffffffffffffffffffffffffff8060065416908181861614600014611905575050611478925061560f565b82160361191b57506119169161553c565b611478565b61192792610c4e6157a7565b50611478565b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257604060a09173ffffffffffffffffffffffffffffffffffffffff6119d16146d6565b168152600560205220805477ffffffffffffffffffffffffffffffffffffffffffffffff9161ffff83600260018401549301541692604051948116855260c01c1660208401526fffffffffffffffffffffffffffffffff8116604084015260801c60608301526080820152f35b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257602090604073ffffffffffffffffffffffffffffffffffffffff9182611a926146d6565b16815260098452205416604051908152f35b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257611adc6146d6565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015611b7a575b611b2890614863565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060085416176008557f76f97b3f5ffcc8d8d9577d141751a7bed446b46d837fbc81b5c01c165bbfbbf48280a280f35b503383526002602052604083205460ff16611b1f565b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b2576060611bd2611bcd6146d6565b6149b4565b60405190604067ffffffffffffffff918281511684528260208201511660208501520151166040820152f35b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257611c366146d6565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015611cd4575b611c8290614863565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060075416176007557f59ddfdd1bf7e3ea08a07e8aaa1fe2ce9c840fab69fe5ede6ea727a45eb42fc668280a280f35b503383526002602052604083205460ff16611c79565b50346105b2576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261086757611d236146d6565b9073ffffffffffffffffffffffffffffffffffffffff907f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930092828454163314801561205a575b611d7290614863565b82811692604051947f70a082310000000000000000000000000000000000000000000000000000000086523360048701528386602481885afa95861561204f578796612020575b50611dc261503d565b54163314801561200b575b611dd690614863565b611ddf81614b73565b908580604051858101907f23b872dd00000000000000000000000000000000000000000000000000000000825233602482015230604482015288606482015260648152611e2b81614806565b519082855af1611e39614d9a565b81611fcf575b5015611f71578491611e53611e5892614b73565b6148c8565b10611f13577f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62908285526005815277ffffffffffffffffffffffffffffffffffffffffffffffff611eaf8582604089205416614904565b168386526005825260408620907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790556040519384523393a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600d60248201527f414d4f554e545f494e53554646000000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152fd5b80915051848115918215611fe8575b5050905038611e3f565b83809293500103126120075783611fff9101614df8565b808438611fde565b8680fd5b5033855260028252604085205460ff16611dcd565b9095508381813d8311612048575b6120388183614822565b8101031261051057519438611db9565b503d61202e565b6040513d89823e3d90fd5b5033855260028252604085205460ff16611d69565b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b2576120a661503d565b73ffffffffffffffffffffffffffffffffffffffff8060085416908115612101576120da9183549184805560065416615258565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f576f6f505056323a2021666565416464720000000000000000000000000000006044820152fd5b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163314801561233f575b8015612329575b156122cb576122546157a7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f576f6f505056323a202169735061757365526f6c6500000000000000000000006044820152fd5b50338152600360205260ff604082205416612247565b50338152600260205260ff604082205416612240565b50346105b25760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25761238d6146d6565b6123956146f9565b73ffffffffffffffffffffffffffffffffffffffff60843516608435036105105773ffffffffffffffffffffffffffffffffffffffff60a4351660a43503610510576001543a116138eb5773ffffffffffffffffffffffffffffffffffffffff600654168073ffffffffffffffffffffffffffffffffffffffff8416146000146129945750905061242461503d565b61242c6157a7565b61244d73ffffffffffffffffffffffffffffffffffffffff8216151561518e565b61247073ffffffffffffffffffffffffffffffffffffffff608435161515615097565b73ffffffffffffffffffffffffffffffffffffffff600654166124ab8173ffffffffffffffffffffffffffffffffffffffff841614156151f3565b6124e86124b782614b73565b828552600560205277ffffffffffffffffffffffffffffffffffffffffffffffff6002604087200154161015614c79565b6124f181614b73565b90835260056020526125256044359177ffffffffffffffffffffffffffffffffffffffffffffffff604086205416906148c8565b106129365773ffffffffffffffffffffffffffffffffffffffff811682526005602052620186a061256361ffff604085205460c01c16604435614cde565b0490612571826044356148c8565b61257c838554614904565b845573ffffffffffffffffffffffffffffffffffffffff6007541692846040517f31e658a500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152608081602481895afa8015610593576125fd918391612907575b508486615b7e565b9095803b15611061576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526fffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af18015610593576128ef575b5050606435841061286c5760209473ffffffffffffffffffffffffffffffffffffffff841681526005865277ffffffffffffffffffffffffffffffffffffffffffffffff6126ce86826040852054166148c8565b169073ffffffffffffffffffffffffffffffffffffffff8516815260058752604081207fffffffffffffffff0000000000000000000000000000000000000000000000009283825416179055604073ffffffffffffffffffffffffffffffffffffffff600654169182815277ffffffffffffffffffffffffffffffffffffffffffffffff61276187828585205416614904565b169281526005895220918254161790553073ffffffffffffffffffffffffffffffffffffffff608435160361285a575b7f0e8e403c2d36126272b08c75823e988381d9dc47f2f0a9a080d95f891d95c46973ffffffffffffffffffffffffffffffffffffffff60065416916127e0816127da8187614904565b95614904565b6040805195865260208601889052339086015273ffffffffffffffffffffffffffffffffffffffff60a43581166060870152608086019190915260a0850191909152608435811694169260c090a460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b6128678460843585615258565b612791565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f576f6f505056323a2062617365416d6f756e745f4c545f6d696e42617365416d60448201527f6f756e74000000000000000000000000000000000000000000000000000000006064820152fd5b6128f8906147d6565b61290357843861267a565b8480fd5b612929915060803d60801161292f575b6129218183614822565b810190615111565b386125f5565b503d612917565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a202151554f544500000000000000000000000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff821603612f7757506129b961503d565b6129c16157a7565b6129e273ffffffffffffffffffffffffffffffffffffffff8216151561518e565b612a0573ffffffffffffffffffffffffffffffffffffffff608435161515615097565b612a3f73ffffffffffffffffffffffffffffffffffffffff6006541673ffffffffffffffffffffffffffffffffffffffff831614156151f3565b612a92612a4b82614b73565b73ffffffffffffffffffffffffffffffffffffffff83168452600560205277ffffffffffffffffffffffffffffffffffffffffffffffff6002604086200154161015614c79565b612a9b81614b73565b73ffffffffffffffffffffffffffffffffffffffff821683526005602052612ae56044359177ffffffffffffffffffffffffffffffffffffffffffffffff604086205416906148c8565b10612f195773ffffffffffffffffffffffffffffffffffffffff6007541690826040517f31e658a500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152608081602481875afa801561059357612b6b918391612efa575b50604435846159c3565b9093803b15611061576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526fffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af1801561059357612ee6575b505073ffffffffffffffffffffffffffffffffffffffff811683526005602052612c2c620186a0612c2461ffff604087205460c01c1685614cde565b0480936148c8565b916064358310612e625783612c448260209654614904565b815573ffffffffffffffffffffffffffffffffffffffff831681526005855277ffffffffffffffffffffffffffffffffffffffffffffffff612c8e60443582604085205416614904565b169073ffffffffffffffffffffffffffffffffffffffff8416815260058652604081207fffffffffffffffff0000000000000000000000000000000000000000000000009283825416179055604073ffffffffffffffffffffffffffffffffffffffff600654169182815277ffffffffffffffffffffffffffffffffffffffffffffffff612d2586611e538a8487872054166148c8565b169281526005885220918254161790553073ffffffffffffffffffffffffffffffffffffffff6084351603612e38575b73ffffffffffffffffffffffffffffffffffffffff60065416907f0e8e403c2d36126272b08c75823e988381d9dc47f2f0a9a080d95f891d95c469612e0c612d9d8387614904565b9260405191829173ffffffffffffffffffffffffffffffffffffffff806084351698169560a435338b604435879290969594919360a09460c08501988552602085015273ffffffffffffffffffffffffffffffffffffffff809216604085015216606083015260808201520152565b0390a460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055611478565b612e5d8360843573ffffffffffffffffffffffffffffffffffffffff60065416615258565b612d55565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f576f6f505056323a2071756f7465416d6f756e745f4c545f6d696e51756f746560448201527f416d6f756e7400000000000000000000000000000000000000000000000000006064820152fd5b612eef906147d6565b611061578238612be8565b612f13915060803d60801161292f576129218183614822565b38612b61565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f576f6f505056323a2021424153450000000000000000000000000000000000006044820152fd5b612f7f61503d565b612f876157a7565b73ffffffffffffffffffffffffffffffffffffffff82161515806138b3575b156138555773ffffffffffffffffffffffffffffffffffffffff811615158061381d575b156137bf5773ffffffffffffffffffffffffffffffffffffffff811673ffffffffffffffffffffffffffffffffffffffff8316146137615761302573ffffffffffffffffffffffffffffffffffffffff608435161515615097565b61307861303183614b73565b73ffffffffffffffffffffffffffffffffffffffff84168552600560205277ffffffffffffffffffffffffffffffffffffffffffffffff6002604087200154161015614c79565b61308182614b73565b73ffffffffffffffffffffffffffffffffffffffff8316845260056020526130cb6044359177ffffffffffffffffffffffffffffffffffffffffffffffff604087205416906148c8565b1061370357829173ffffffffffffffffffffffffffffffffffffffff600754166040517f31e658a500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152608081602481855afa90811561179e5785916136e4575b50604051907f31e658a500000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff85166004830152608082602481865afa9182156136d95786926136b1575b5061323c8173ffffffffffffffffffffffffffffffffffffffff88876132308a61ffff602060409901988995677fffffffffffffff6131f38d602067ffffffffffffffff809b51169101998a5116906157fc565b60011c16978896168152600560205273ffffffffffffffffffffffffffffffffffffffff838383205460c01c1694168152205460c01c169061581b565b955252604435866159c3565b9093803b156136ad576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526fffffffffffffffffffffffffffffffff92909216602483015287908290604490829084905af190811561204f578791613699575b50506132de620186a06132d661ffff613401941686614cde565b0480946148c8565b916132ea848854614904565b875573ffffffffffffffffffffffffffffffffffffffff60065416808852600560205277ffffffffffffffffffffffffffffffffffffffffffffffff613336868260408c2054166148c8565b16908852600560205260408820907fffffffffffffffff00000000000000000000000000000000000000000000000082541617905573ffffffffffffffffffffffffffffffffffffffff8516875277ffffffffffffffffffffffffffffffffffffffffffffffff6133af6044358260408b205416614904565b1673ffffffffffffffffffffffffffffffffffffffff86168852600560205260408820907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790558286615b7e565b73ffffffffffffffffffffffffffffffffffffffff60079792975416803b15611061576040517fd5bade0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526fffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af1801561059357613685575b5050606435851061360157612e0c613582837f0e8e403c2d36126272b08c75823e988381d9dc47f2f0a9a080d95f891d95c4699360209973ffffffffffffffffffffffffffffffffffffffff8916815260058b52604077ffffffffffffffffffffffffffffffffffffffffffffffff6135168c8284862054166148c8565b169173ffffffffffffffffffffffffffffffffffffffff8b16815260058d5220907fffffffffffffffff0000000000000000000000000000000000000000000000008254161790553073ffffffffffffffffffffffffffffffffffffffff60843516036135f457614904565b9260405191829173ffffffffffffffffffffffffffffffffffffffff808060843516991697169560a435338b604435879290969594919360a09460c08501988552602085015273ffffffffffffffffffffffffffffffffffffffff809216604085015216606083015260808201520152565b61036d896084358a615258565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f576f6f505056323a206261736532416d6f756e745f4c545f6d696e426173653260448201527f416d6f756e7400000000000000000000000000000000000000000000000000006064820152fd5b61368e906147d6565b61105d578538613498565b6136a2906147d6565b61105d5785386132bc565b8780fd5b60409192506136d161323c9160803d60801161292f576129218183614822565b92915061319f565b6040513d88823e3d90fd5b6136fd915060803d60801161292f576129218183614822565b38613144565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f576f6f505056323a202142415345315f42414c414e43450000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f576f6f505056323a2062617365313d3d626173653200000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f576f6f505056323a202162617365546f6b656e320000000000000000000000006044820152fd5b5073ffffffffffffffffffffffffffffffffffffffff6006541673ffffffffffffffffffffffffffffffffffffffff82161415612fca565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f576f6f505056323a202162617365546f6b656e310000000000000000000000006044820152fd5b5073ffffffffffffffffffffffffffffffffffffffff6006541673ffffffffffffffffffffffffffffffffffffffff83161415612fa6565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f576f6f505056323a2021676173507269636500000000000000000000000000006044820152fd5b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257613980614d2a565b600073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054907fffffffffffffffffffffffff000000000000000000000000000000000000000082169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346105b25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257613a406146d6565b602435613a4b61503d565b73ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015613c0d575b613a9790614863565b8183169182855260096020526040852054169281613b03575b5060207f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb91604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005580f35b600560205277ffffffffffffffffffffffffffffffffffffffffffffffff613b3183826040892054166148c8565b16838652600560205260408620907fffffffffffffffff000000000000000000000000000000000000000000000000825416179055613b71828583614f5f565b833b1561290357604051907f371fd8e6000000000000000000000000000000000000000000000000000000008252826004830152858083602481838a5af1928315611396578693613bf4575b505091613bed6020927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb94614e05565b9150613ab0565b613c00919293506147d6565b6129035783908538613bbd565b503384526002602052604084205460ff16613a8e565b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b50346105b25760207f949c0260fa3a6145f57958b7bf0efeb5edb4d3e1e573353a16e69aea2450883d613cb53661471c565b929073ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015613d50575b613d0390614863565b169283855260038252613d4481604087209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b6040519015158152a280f35b5033865260028352604086205460ff16613cfa565b50346105b25760207f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a11133613d973661471c565b929073ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015613e31575b613de590614863565b1692613df2841515614863565b83855260028252613d4481604087209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5033865260028352604086205460ff16613ddc565b50346105b25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257613e7e6146d6565b60243590613e8a61503d565b73ffffffffffffffffffffffffffffffffffffffff807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156140a4575b613ed590614863565b613ede82614b73565b91604051928580602095868101907f23b872dd00000000000000000000000000000000000000000000000000000000825233602482015230604482015288606482015260648152613f2e81614806565b519082865af1613f3c614d9a565b8161406c575b501561400e57613f568591611e5384614b73565b10613fb057907f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629116918285526005815277ffffffffffffffffffffffffffffffffffffffffffffffff611eaf8582604089205416614904565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600d60248201527f414d4f554e545f494e53554646000000000000000000000000000000000000006044820152fd5b606484604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152fd5b80915051858115918215614085575b5050905038613f42565b8380929350010312612007578461409c9101614df8565b80853861407b565b503384526002602052604084205460ff16613ecc565b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416331480156141da575b61413390614863565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff8116156141b0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b60046040517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b503381526002602052604081205460ff1661412a565b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b2576020600154604051908152f35b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257602073ffffffffffffffffffffffffffffffffffffffff60085416604051908152f35b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25760ff604060209273ffffffffffffffffffffffffffffffffffffffff6142d26146d6565b168152600484522054166040519015158152f35b50346105b257610eb06142f83661471c565b9073ffffffffffffffffffffffffffffffffffffffff90817f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633148015614381575b61434590614863565b1683526004602052604083209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b503385526002602052604085205460ff1661433c565b50346105b25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b25760ff604060209273ffffffffffffffffffffffffffffffffffffffff6143eb6146d6565b168152600284522054166040519015158152f35b50346105b257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b257602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b50346105b25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b2576144896146d6565b6144916146f9565b614499614d2a565b73ffffffffffffffffffffffffffffffffffffffff908183169182156146135781169283156145b557614509908386526005602052604086207fffffffffffffffff000000000000000000000000000000000000000000000000815416905561450181614b73565b928391614f5f565b823b156117a9576040517f9f0d5f27000000000000000000000000000000000000000000000000000000008152826004820152848160248183885af1801561179e5761457f575b5060207f18df02dcc52b9c494f391df09661519c0069bd8540141946280399408205ca1a91604051908152a380f35b7f18df02dcc52b9c494f391df09661519c0069bd8540141946280399408205ca1a91946145ad6020926147d6565b949150614550565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f576f6f505056323a20216e6577506f6f6c0000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a2021746f6b656e00000000000000000000000000000000006044820152fd5b9050346108675760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126108675760ff604060209373ffffffffffffffffffffffffffffffffffffffff6146c66146d6565b1681526003855220541615158152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361051057565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361051057565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126105105760043573ffffffffffffffffffffffffffffffffffffffff81168103610510579060243580151581036105105790565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126105105773ffffffffffffffffffffffffffffffffffffffff90600435828116810361051057916024359081168103610510579060443590565b67ffffffffffffffff811161159557604052565b6060810190811067ffffffffffffffff82111761159557604052565b60a0810190811067ffffffffffffffff82111761159557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761159557604052565b1561486a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a202161646d696e00000000000000000000000000000000006044820152fd5b919082039182116148d557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082018092116148d557565b90816020910312610510575160ff811681036105105790565b80156149ae57600190602081108216604e8210831617614997578190600a925b8082116149685750508167ffffffffffffffff0481116148d5570290565b90928067ffffffffffffffff0481116148d55781841661498e575b800292811c9061494a565b80920291614983565b9050600a0a9067ffffffffffffffff82116148d557565b50600190565b60408051916149c2836147ea565b60009283815283836020928284820152015273ffffffffffffffffffffffffffffffffffffffff93848281600754169460248751809481937fd449a83200000000000000000000000000000000000000000000000000000000835216978860048301525afa908115614b3d57614a439160ff918491614b26575b501661492a565b946006541692845183816004817f313ce56700000000000000000000000000000000000000000000000000000000988982525afa908115614b1c5760ff8592614a93928691614ae457501661492a565b94600487518094819382525afa918215614b1157614aba9260ff9290614ae457501661492a565b90835194614ac7866147ea565b67ffffffffffffffff938480921687521690850152169082015290565b614b049150843d8611614b0a575b614afc8183614822565b810190614911565b38614a3c565b503d614af2565b8551903d90823e3d90fd5b86513d85823e3d90fd5b614b049150853d8711614b0a57614afc8183614822565b85513d84823e3d90fd5b90816020910312610510575173ffffffffffffffffffffffffffffffffffffffff811681036105105790565b60065473ffffffffffffffffffffffffffffffffffffffff828116911603614bad57614ba1614baa916156cf565b600054906148c8565b90565b614baa906156cf565b73ffffffffffffffffffffffffffffffffffffffff809116908115614c48577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805490837fffffffffffffffffffffffff00000000000000000000000000000000000000008316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b15614c8057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f576f6f505056323a204341505f455843454544530000000000000000000000006044820152fd5b818102929181159184041417156148d557565b8115614cfb570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303614d6a57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b3d15614df3573d9067ffffffffffffffff82116115955760405191614de760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184614822565b82523d6000602084013e565b606090565b5190811515820361051057565b6040519173ffffffffffffffffffffffffffffffffffffffff60208401917f095ea7b3000000000000000000000000000000000000000000000000000000008352166024840152600092836044820152604481526080810181811067ffffffffffffffff821117614f325760405251839283929083905af190614e86614d9a565b82614ef3575b505015614e9557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53410000000000000000000000000000000000000000000000000000000000006044820152fd5b8091925051918215928315614f0d575b5050503880614e8c565b8293509160209192810103126105b257506020614f2a9101614df8565b388080614f03565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff909316602482015260448101939093526000928392908390614fec81606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614822565b51925af1614ff8614d9a565b81615006575b5015614e9557565b805180159250821561501b575b505038614ffe565b81925090602091810103126105105760206150369101614df8565b3880615013565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00600281541461506d5760029055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b1561509e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f576f6f505056323a2021746f00000000000000000000000000000000000000006044820152fd5b519067ffffffffffffffff8216820361051057565b9081608091031261051057604051906080820182811067ffffffffffffffff8211176115955760405280516fffffffffffffffffffffffffffffffff811681036105105761518691606091845261516a602082016150fc565b602085015261517b604082016150fc565b604085015201614df8565b606082015290565b1561519557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f576f6f505056323a202162617365546f6b656e000000000000000000000000006044820152fd5b156151fa57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f576f6f505056323a2062617365546f6b656e3d3d71756f7465546f6b656e00006044820152fd5b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff9093166024820152604481019390935260009283929083906152bd8160648101614fc0565b51925af16152c9614d9a565b81615335575b50156152d757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53540000000000000000000000000000000000000000000000000000000000006044820152fd5b805180159250821561534a575b5050386152cf565b81925090602091810103126105105760206153659101614df8565b3880615342565b9173ffffffffffffffffffffffffffffffffffffffff908184169384158015615532575b8015615525575b8015615516575b6155095782600754166040928351917f31e658a500000000000000000000000000000000000000000000000000000000958684528860048501526080968785602481865afa9485156154fe579088916000966154df575b50602488518094819382528c16958660048301525afa9687156154d4576000976154b5575b5050602083019767ffffffffffffffff90818a51166020890192835116615440916157fc565b60011c677fffffffffffffff16928391600052600560205261ffff8089819a60002054936000526000205460c01c169160c01c169061547e9161581b565b99525261548a926159c3565b5093166154979084614cde565b620186a0900492836154a8916148c8565b6154b192615b7e565b5091565b6154cc929750803d1061292f576129218183614822565b94388061541a565b86513d6000823e3d90fd5b6154f7919650823d841161292f576129218183614822565b94386153f5565b87513d6000823e3d90fd5b5050505050600090600090565b5082600654168385161461539e565b5082600654168514615397565b5082841615615390565b906155456157a7565b602473ffffffffffffffffffffffffffffffffffffffff916080836007541693604051938480927f31e658a50000000000000000000000000000000000000000000000000000000082528816968760048301525afa90811561560357614baa946155b7936000936155e2575b506159c3565b50906000526005602052620186a06155db61ffff60406000205460c01c1683614cde565b04906148c8565b6155fc91935060803d60801161292f576129218183614822565b91386155b1565b6040513d6000823e3d90fd5b6156176157a7565b73ffffffffffffffffffffffffffffffffffffffff608061565882841694856000526005602052620186a06155db61ffff60406000205460c01c1683614cde565b9160075416936024604051809681937f31e658a500000000000000000000000000000000000000000000000000000000835260048301525afa918215615603576156aa936000936156ae575b50615b7e565b5090565b6156c891935060803d60801161292f576129218183614822565b91386156a4565b6000809160405160208101907f70a0823100000000000000000000000000000000000000000000000000000000825230602482015260248152615711816147ea565b51915afa61571d614d9a565b908061579b575b1561573d57602081805181010312610510576020015190565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f576f6f505056323a202142414c414e43450000000000000000000000000000006044820152fd5b50602081511015615724565b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166157d257565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b9067ffffffffffffffff8082169083161115615816575090565b905090565b9061ffff8082169083161115615816575090565b1561583657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576f6f505056323a20214f5241434c455f4645415349424c45000000000000006044820152fd5b1561589b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f576f6f505056323a20214f524143455f505249434500000000000000000000006044820152fd5b1561590057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f576f6f505056323a20216d61784e6f74696f6e616c56616c75650000000000006044820152fd5b1561596557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f576f6f505056323a202167616d6d6100000000000000000000000000000000006044820152fd5b929192606084015115156159d69061582f565b6fffffffffffffffffffffffffffffffff8085511615156159f690615894565b6159ff826149b4565b81865116615a0d9085614cde565b602082019167ffffffffffffffff809281855116615a2a91614cde565b9381604084019581875116615a3e91614cf1565b81855116615a4b91614cf1565b9773ffffffffffffffffffffffffffffffffffffffff16986000988a8a52600560205260408a206001015460801c1015615a84906158f9565b8b8289825116615a949084614cde565b916040015116615aa391614cde565b82865116615ab091614cf1565b82885116615abd91614cf1565b99895260056020528760408a2060010154168a1115615adb9061595e565b878c5116615ae891614cde565b915116615af491614cde565b915116615b0091614cf1565b670de0b6b3a764000095860394868611615b515750918186615b3a615b4d979695615b34615b449660208e015116896148c8565b90614cde565b0491511690614cf1565b95511690614cde565b0490565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b90604091939293615b946060860151151561582f565b6fffffffffffffffffffffffffffffffff615bb3818751161515615894565b73ffffffffffffffffffffffffffffffffffffffff615bd1836149b4565b921692615c67615c5d6000948686526005602052615bfa6001898820015460801c8511156158f9565b89615c54615c1767ffffffffffffffff809b819401511687614cde565b95615c2a60208501978489511690614cf1565b9989526005602052615c4788600160408c200154168b111561595e565b8260408501511690614cde565b91511690614cde565b8389511690614cf1565b94670de0b6b3a764000094850395858711615caf579085615b3a615c969493615b348460208e0151168b6148c8565b95511680830292830403615b51575090614baa91614cf1565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615615d0b57565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fdfea2646970667358221220a30c8453f2561e4232fb3e9350aea755125036d560d5cda5ed12e3fed42cc09c64736f6c63430008160033