15k txs
10.25m calls
constructor
constructor(address newOwner)
functions
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
extSloads
viewfunction extSloads(bytes32[] slots) view returns (bytes32[] res)
feeRecipient
viewfunction feeRecipient() view returns (address)
idToMarketParams
viewfunction idToMarketParams(bytes32) view returns (address loanToken, address collateralToken, address oracle, address irm, uint256 lltv)
isAuthorized
viewfunction isAuthorized(address, address) view returns (bool)
isIrmEnabled
viewfunction isIrmEnabled(address) view returns (bool)
isLltvEnabled
viewfunction isLltvEnabled(uint256) view returns (bool)
market
viewfunction market(bytes32) view returns (uint128 totalSupplyAssets, uint128 totalSupplyShares, uint128 totalBorrowAssets, uint128 totalBorrowShares, uint128 lastUpdate, uint128 fee)
nonce
viewfunction nonce(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
position
viewfunction position(bytes32, address) view returns (uint256 supplyShares, uint128 borrowShares, uint128 collateral)
accrueInterest
nonpayablefunction accrueInterest(tuple marketParams)
borrow
nonpayablefunction borrow(tuple marketParams, uint256 assets, uint256 shares, address onBehalf, address receiver) returns (uint256, uint256)
createMarket
nonpayablefunction createMarket(tuple marketParams)
enableIrm
nonpayablefunction enableIrm(address irm)
enableLltv
nonpayablefunction enableLltv(uint256 lltv)
flashLoan
nonpayablefunction flashLoan(address token, uint256 assets, bytes data)
liquidate
nonpayablefunction liquidate(tuple marketParams, address borrower, uint256 seizedAssets, uint256 repaidShares, bytes data) returns (uint256, uint256)
repay
nonpayablefunction repay(tuple marketParams, uint256 assets, uint256 shares, address onBehalf, bytes data) returns (uint256, uint256)
setAuthorization
nonpayablefunction setAuthorization(address authorized, bool newIsAuthorized)
setAuthorizationWithSig
nonpayablefunction setAuthorizationWithSig(tuple authorization, tuple signature)
setFee
nonpayablefunction setFee(tuple marketParams, uint256 newFee)
setFeeRecipient
nonpayablefunction setFeeRecipient(address newFeeRecipient)
setOwner
nonpayablefunction setOwner(address newOwner)
supply
nonpayablefunction supply(tuple marketParams, uint256 assets, uint256 shares, address onBehalf, bytes data) returns (uint256, uint256)
supplyCollateral
nonpayablefunction supplyCollateral(tuple marketParams, uint256 assets, address onBehalf, bytes data)
withdraw
nonpayablefunction withdraw(tuple marketParams, uint256 assets, uint256 shares, address onBehalf, address receiver) returns (uint256, uint256)
withdrawCollateral
nonpayablefunction withdrawCollateral(tuple marketParams, uint256 assets, address onBehalf, address receiver)
events
AccrueInterest
event AccrueInterest(bytes32 indexed id, uint256 prevBorrowRate, uint256 interest, uint256 feeShares)
Borrow
event Borrow(bytes32 indexed id, address caller, address indexed onBehalf, address indexed receiver, uint256 assets, uint256 shares)
CreateMarket
event CreateMarket(bytes32 indexed id, (address loanToken, address collateralToken, address oracle, address irm, uint256 lltv) marketParams)
EnableIrm
event EnableIrm(address indexed irm)
EnableLltv
event EnableLltv(uint256 lltv)
FlashLoan
event FlashLoan(address indexed caller, address indexed token, uint256 assets)
IncrementNonce
event IncrementNonce(address indexed caller, address indexed authorizer, uint256 usedNonce)
Liquidate
event Liquidate(bytes32 indexed id, address indexed caller, address indexed borrower, uint256 repaidAssets, uint256 repaidShares, uint256 seizedAssets, uint256 badDebtAssets, uint256 badDebtShares)
Repay
event Repay(bytes32 indexed id, address indexed caller, address indexed onBehalf, uint256 assets, uint256 shares)
SetAuthorization
event SetAuthorization(address indexed caller, address indexed authorizer, address indexed authorized, bool newIsAuthorized)
SetFee
event SetFee(bytes32 indexed id, uint256 newFee)
SetFeeRecipient
event SetFeeRecipient(address indexed newFeeRecipient)
SetOwner
event SetOwner(address indexed newOwner)
Supply
event Supply(bytes32 indexed id, address indexed caller, address indexed onBehalf, uint256 assets, uint256 shares)
SupplyCollateral
event SupplyCollateral(bytes32 indexed id, address indexed caller, address indexed onBehalf, uint256 assets)
Withdraw
event Withdraw(bytes32 indexed id, address caller, address indexed onBehalf, address indexed receiver, uint256 assets, uint256 shares)
WithdrawCollateral
event WithdrawCollateral(bytes32 indexed id, address caller, address indexed onBehalf, address indexed receiver, uint256 assets)
errors
No errors.
creation bytecode
0x60a034620001aa576001600160401b0390601f1990601f62003eb73881900391820184168301929185841183851017620001395780839260409586528339602092839181010312620001aa57516001600160a01b0381169390849003620001aa5782518381018181108782111762000139578452600c81526b7a65726f206164647265737360a01b8382015284156200014f5750508151908101917f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921883524681830152306060830152606082526080820194828610908611176200013957849052519020608052600080546001600160a01b031916821781557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb59080a2613d079081620001b0823960805181818161188a01526124b90152f35b634e487b7160e01b600052604160045260246000fd5b82845192839162461bcd60e51b835280600484015283519081602485015260005b828110620001925750506044935080600085601f938601015201168101030190fd5b80860182015187820160440152869450810162000170565b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c806313af403514612b90578063151c1ade14612b2057806320b76e81146128c1578063238d6579146126f75780632b4f013c1461256e5780632c3c9157146124dc5780633644e5151461248357806346904840146124315780634d98a93b1461231557806350d8cd4b146120815780635a64f51e14611fa95780635c2bea4914611d485780635c60e39a14611cb757806365e4ad9e14611c3757806370ae92d214611bd45780637784c68514611a685780638069218f1461167f5780638720316d1461150f5780638c1358a2146111f85780638da5cb5b146111a757806393c520621461110e578063a99aad8914610eda578063b485f3b814610e8d578063d8eabcb8146104e5578063e0232b4214610398578063e74b981b146102cd578063eecea000146101bb5763f2b863ce1461015157600080fd5b346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85760ff604060209273ffffffffffffffffffffffffffffffffffffffff6101a4612c5a565b168152600484522054166040519015158152f35b80fd5b50346101b85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b8576101f3612c5a565b602435801515908181036102c85761029790338552600660205273ffffffffffffffffffffffffffffffffffffffff604086209416938460005260205261024f60ff604060002054161515841415610249612fdd565b90612f41565b3385526006602052604085208460005260205260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60405190815233907fd5e969f01efe921d3f766bdebad25f0a05e3f237311f56482bf132d0326309c060203392a480f35b600080fd5b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85761036c610308612c5a565b7fffffffffffffffffffffffff000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff91610350838654163314610249612f08565b826001549116938493610361612fdd565b908316851415612f41565b16176001557f2e979f80fe4d43055c584cf4a8467c55875ea36728fc37176c05acd784eb7a738280a280f35b50346101b85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b8576103d0612c5a565b6024358260443567ffffffffffffffff81116104e15761040973ffffffffffffffffffffffffffffffffffffffff913690600401612de8565b91909461041f6104176132c2565b861515612f41565b1693846040518581527fc76f1b4fe4396ac07a9fa55a415d4ca430e72651d37d3401f3bed7cb13fc4f1260203392a361045984338761394a565b333b156104d25761049b91839160405193849283927f31f57072000000000000000000000000000000000000000000000000000000008452886004850161319c565b038183335af180156104d6576104be575b50506104bb9130903390613ab9565b80f35b6104c790612cc3565b6104d25782386104ac565b8280fd5b6040513d84823e3d90fd5b5080fd5b50346101b8576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85761051f36612d50565b9073ffffffffffffffffffffffffffffffffffffffff60a4351660a435036102c8576101043567ffffffffffffffff81116104e157610562903690600401612de8565b9160c4359260e4359260a0862093848452600360205261059f6fffffffffffffffffffffffffffffffff6002604087200154161515610249613016565b6105b46105aa6130f9565b8215881518612f41565b6105be858861336e565b6004602073ffffffffffffffffffffffffffffffffffffffff60408a015116604051928380927fa035b1fe0000000000000000000000000000000000000000000000000000000082525afa908115610e82578591610e50575b506106666106298260a435898c61376d565b156040519061063782612cf3565b601382527f706f736974696f6e206973206865616c746879000000000000000000000000006020830152612f41565b6080880151670de0b6b3a764000003670de0b6b3a76400008111610ca057670429d069189e00009080820291820403610ccd57670de0b6b3a764000090049182670de0b6b3a76400000392670de0b6b3a76400008411610e2357670de0b6b3a764000014610df4578715610cfc57506106df908761383b565b6ec097ce7bc90715b34b9f0fffffffff8101809111610ccd576ec097ce7bc90715b34b9f1000000000900480670de0b6b3a7640000810204670de0b6b3a76400001481151715610ccd57670ff59ee833b300006ec097ce7bc90715b34b9f10000000008390048082189082110281187fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810111610ca057610807926107d9926ec097ce7bc90715b34b9f10000000009190910480831890831102909118906107d4907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830190670de0b6b3a76400000261316b565b61384e565b85855260036020526001604086200154906fffffffffffffffffffffffffffffffff8260801c921690613c33565b935b808452600360205261083960016040862001546fffffffffffffffffffffffffffffffff8160801c911687613c55565b9461084381613c78565b82865260026020526040862073ffffffffffffffffffffffffffffffffffffffff60a4351660005260205260016040600020016fffffffffffffffffffffffffffffffff61089582549382851661322e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008093161790556109266108c983613c78565b84885260036020526108e6600160408a200191825460801c61322e565b6fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b82865260036020526109576fffffffffffffffffffffffffffffffff60016040892001541688808203911102613c78565b83875260036020526fffffffffffffffffffffffffffffffff600160408920019116828254161790556109cd61098c89613c78565b84885260026020526040882073ffffffffffffffffffffffffffffffffffffffff60a435166000526020526108e6600160406000200191825460801c61322e565b8590869084885260026020526040882073ffffffffffffffffffffffffffffffffffffffff60a4351660005260205260016040600020015460801c15610b39575b506040519288845260208401528860408401526060830152608082015273ffffffffffffffffffffffffffffffffffffffff60a43516917fa4946ede45d0c6f06a0f5ce92c9ad3b4751452d2fe0e25010783bcab57a67e4160a03393a4610a90853373ffffffffffffffffffffffffffffffffffffffff60208a01511661394a565b81610acc575b505050610ac08173ffffffffffffffffffffffffffffffffffffffff604095511630903390613ab9565b82519182526020820152f35b333b156104d257610b0e91839160405193849283927fcf7ea196000000000000000000000000000000000000000000000000000000008452886004850161319c565b038183335af180156104d657610b25575b80610a96565b610b2f8291612cc3565b6101b85780610b1f565b91505082865260026020526040862073ffffffffffffffffffffffffffffffffffffffff60a435166000526020526fffffffffffffffffffffffffffffffff600160406000200154169083875260036020526001604088200154610bb46fffffffffffffffffffffffffffffffff82169160801c8285613c55565b818110908218021890610bc682613c78565b8589526003602052600160408a200190826fffffffffffffffffffffffffffffffff610bf684549382851661322e565b169116179055610c0582613c78565b85895260036020526040892090826fffffffffffffffffffffffffffffffff610c3284549382851661322e565b169116179055610c61610c4484613c78565b868a5260036020526108e6600160408c200191825460801c61322e565b84885260026020526040882073ffffffffffffffffffffffffffffffffffffffff60a43516600052602052600160406000200190815416905538610a0e565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b95965090610d78670de0b6b3a7640000918887526003602052610d73600160408920015491670ff59ee833b300009081816ec097ce7bc90715b34b9f10000000000410906ec097ce7bc90715b34b9f10000000000482180218916fffffffffffffffffffffffffffffffff8160801c91168a613c0d565b61383b565b04806ec097ce7bc90715b34b9f10000000008102046ec097ce7bc90715b34b9f10000000001481151715610dc757906ec097ce7bc90715b34b9f1000000000610dc1920261384e565b94610809565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b90506020813d602011610e7a575b81610e6b60209383612d0f565b810103126102c8575138610617565b3d9150610e5e565b6040513d87823e3d90fd5b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85760ff60406020926004358152600584522054166040519015158152f35b50346101b857610ee936612e16565b849691959296958460a08520808552602096600388526fffffffffffffffffffffffffffffffff98610f288a600260408a200154161515610249613016565b1592610f3e610f356130f9565b82158618612f41565b73ffffffffffffffffffffffffffffffffffffffff809c1693610f62610417613132565b610f6c848a61336e565b6110e757505080855260038752610f8e6040862054898160801c91168b613be8565b975b81865260028852604086208360005288526040600020610fb18a825461316b565b9055610fd8610fbf8a613c78565b83885260038a526108e66040892091825460801c613178565b610fe18a613c78565b828752600389527fffffffffffffffffffffffffffffffff00000000000000000000000000000000604088209261101c845493828516613178565b1691161790556040519089825288888301527fedf8870433c83823eb071d3df1caa8d008f12f6440918c20d75a3602cda30fe060403393a48161107a575b5050508360409561107092511630903390613ab9565b8351928352820152f35b333b156104d2576110bc91839160405193849283927f2075be030000000000000000000000000000000000000000000000000000000084528b6004850161319c565b038183335af180156104d6576110d3575b8061105a565b6110dd8291612cc3565b6101b857806110cd565b61110891999a50828752600389526040872054908b8260801c921690613c55565b98610f90565b50346101b85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85773ffffffffffffffffffffffffffffffffffffffff604061115d612ca0565b926004358152600260205220911660005260205260606040600020600181549101546040519182526fffffffffffffffffffffffffffffffff8116602083015260801c6040820152f35b50346101b857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b50346101b85760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85761123136612d50565b60a0812090606081019173ffffffffffffffffffffffffffffffffffffffff808451168552602093600485526112a360ff6040882054166040519061127582612cf3565b600f82527f49524d206e6f7420656e61626c6564000000000000000000000000000000000088830152612f41565b6080840180518752600586526112f560ff604089205416604051906112c782612cf3565b601082527f4c4c5456206e6f7420656e61626c65640000000000000000000000000000000089830152612f41565b838752600386526fffffffffffffffffffffffffffffffff61135681600260408b20015416156040519061132882612cf3565b601682527f6d61726b657420616c72656164792063726561746564000000000000000000008a830152612f41565b84885260038752600260408920019042167fffffffffffffffffffffffffffffffff000000000000000000000000000000008254161790556008865260046040882091848751167fffffffffffffffffffffffff0000000000000000000000000000000000000000908185541617845560018401868a8a01511682825416179055600284018660408a015116828254161790556003840190868651169082541617905551910155827fac4b2400f169220b0c0afdde7a0b32e775ba727ea1cb30b35f935cdaab8683ac60a060405161147281896080809173ffffffffffffffffffffffffffffffffffffffff80825116855280602083015116602086015280604083015116604086015260608201511660608501520151910152565ba25116918261147f578480f35b6114c69284928652600383526040862091866040518096819582947f9451fed40000000000000000000000000000000000000000000000000000000084526004840161304f565b03925af18015611504576114db575b80808480f35b813d83116114fd575b6114ee8183612d0f565b810103126102c85738806114d5565b503d6114e4565b6040513d85823e3d90fd5b50346101b8576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85761154936612d50565b60a435611554612c7d565b60e4359073ffffffffffffffffffffffffffffffffffffffff90818316948584036102c8576104bb958760209361164561163d60a0862092838552600388526115ba6fffffffffffffffffffffffffffffffff6002604088200154161515610249613016565b6115cd6115c56132c2565b8c1515612f41565b6115e06115d8613132565b871515612f41565b6115f46115ec82613328565b6102496131e8565b6115fe848861336e565b611636604061160c8d613c78565b9686815260028b5220958a831696876000528a526108e6600160406000200191825460801c61322e565b838761367c565b610249613289565b60408051338152602081018a90527fe80ebd7cc9223d7382aab2e0d1d6155c65651f83d53c8b9b06901d167e3211429190a401511661394a565b50346101b857610100367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc018181126104d25760a0136104e1576040516116c581612cd7565b6116cd612c5a565b81526116d7612ca0565b906020908181019283526044359384151585036102c85760408201948552606082016064358152608435608084019080825260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112611a64576040516117749161174382612cf3565b601182527f7369676e6174757265206578706972656400000000000000000000000000000088830152421115612f41565b8151926117e873ffffffffffffffffffffffffffffffffffffffff94858751168b526007885260408b208054906117aa826132fb565b9055604051916117b983612cf3565b600d83527f696e76616c6964206e6f6e6365000000000000000000000000000000000000008a84015214612f41565b60405191868301907f81d0284fb0e2cde18d0553b06189d6f7613c96a01bb5b5e7828eade6a0dcac918252858751166040850152858951166060850152895115156080850152845160a08501525160c084015260c0835260e083019167ffffffffffffffff9184841083851117611a35578360405284519020908401907f190100000000000000000000000000000000000000000000000000000000000082527f00000000000000000000000000000000000000000000000000000000000000006101028601526101228501526042835261016084019183831090831117611a35578a92826040525190209060a4359360ff8516809503611a31578894608093835261018082015260c4356101a08201526101c060e43591015282805260015afa15611a26577fd5e969f01efe921d3f766bdebad25f0a05e3f237311f56482bf132d0326309c092829161197f838a51168015159081611a19575b506040519061195182612cf3565b601182527f696e76616c6964207369676e617475726500000000000000000000000000000089830152612f41565b8282511690516040519081527fa58af1a0c70dba0c7aa60d1a1a147ebd61000d1690a968828ac718bca927f2c7873392a3611a0387511515838351168a526006875260408a2084895116600052875260406000209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b511693511693511515916040519283523392a480f35b9050848451161438611943565b6040513d88823e3d90fd5b8380fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8880fd5b50346101b8576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104e1576004359067ffffffffffffffff90818311611a315736602384011215611a31578260040135918211611a3157602491600590368482841b87010111611bd057849181611ae58893613823565b95611af36040519788612d0f565b818752611aff82613823565b947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08789019601368737845b838110611b7557505050505060405193838594850191818652518092526040850193925b828110611b5e57505050500390f35b835185528695509381019392810192600101611b4f565b9497959694611b83816132fb565b9084811015611ba457851b82018301355481861b8801529597949695611b2b565b838a7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b8580fd5b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b857604060209173ffffffffffffffffffffffffffffffffffffffff611c26612c5a565b168152600783522054604051908152f35b50346101b85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b857611c6f612c5a565b6040611c79612ca0565b9273ffffffffffffffffffffffffffffffffffffffff80931681526006602052209116600052602052602060ff604060002054166040519015158152f35b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b857604060c091600435815260036020522080546002600183015492015490604051926fffffffffffffffffffffffffffffffff91828116855260801c6020850152818116604085015260801c60608401528116608083015260801c60a0820152f35b50346101b857604090611d5a36612e98565b9294939190858260a08520918288526003602052611d946fffffffffffffffffffffffffffffffff60028c8b200154161515610249613016565b1593611daa611da16130f9565b82158718612f41565b73ffffffffffffffffffffffffffffffffffffffff871694611dcd6115d8613132565b611dd96115ec86613328565b611de3848861336e565b611f4e57505092610ac0949273ffffffffffffffffffffffffffffffffffffffff9285899689526003602052611f0e8b611e37818c20546fffffffffffffffffffffffffffffffff8160801c91168b613c33565b9a5b8381526002602052878282209516948560005260205281600020611e5e8d8254613221565b9055611e85611e6c8d613c78565b85835260036020526108e684842091825460801c61322e565b611e8e8a613c78565b8482526003602052828220907fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffffffffffffffffffff611eda84549382851661322e565b1691161790558381526003602052206fffffffffffffffffffffffffffffffff806001830154169154161015610249613250565b8a5133815260208101889052604081018a90527fa56fc0ad5702ec05ce63666221f796fb62437c32db1aa1aa075fc6484cf58fbf90606090a4511661394a565b8998509282611f0e611fa173ffffffffffffffffffffffffffffffffffffffff968b9996610ac09b99969c5260036020528c8a2054906fffffffffffffffffffffffffffffffff8260801c921690613c0d565b9a8b98611e39565b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b857611fe1612c5a565b73ffffffffffffffffffffffffffffffffffffffff90612008828454163314610249612f08565b16808252600460205261202560ff60408420541615610249612fdd565b80825260046020526040822060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f590e04cdebeccba40f566186b9746ad295a4cd358ea4fefaaea6ce79630d96c08280a280f35b50346101b85761209036612e98565b909291948294869160a08220958682526003966020968888526fffffffffffffffffffffffffffffffff906120d2826002604088200154161515610249613016565b15936120e86120df6130f9565b8d158718612f41565b73ffffffffffffffffffffffffffffffffffffffff968789169561211561210d613132565b881515612f41565b6121216115ec87613328565b61212b858961336e565b6122e657508a9b5082819b98999a9b528a8a526121566001604083200154838160801c91168a613c33565b9a8b945b61216386613c78565b85845260028d528c8360408620988c8516998a60005283526040600020600101888154958187169061219491613178565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008096161790556121c590613c78565b91888752526040852060010190815460801c906121e191613178565b81546fffffffffffffffffffffffffffffffff1660809190911b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000161790558c8361222b8d613c78565b91888752526040852060010191868354928184169061224991613178565b16911617905561225a90858961367c565b612262613289565b61226b91612f41565b8382528a526040902090806001830154169154161015612289613250565b61229291612f41565b60408051338152602081018890529081018a90527f570954540bed6b1304a87dfe815a5eda4a648f7097a16240dcd85c9b5fd42a4390606090a45116916122d89261394a565b604051928352820152604090f35b9a5061230d8b9498999a9c8483528d8c52600160408420015490848260801c921690613c0d565b9b8c9861215a565b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b8577f297b80e7a896fad470c630f6575072d609bde997260ff3db851939405ec29139602060043561239073ffffffffffffffffffffffffffffffffffffffff8554163314610249612f08565b808452600582526123ab60ff60408620541615610249612fdd565b6123f36040516123ba81612cf3565b601181527f6d6178204c4c545620657863656564656400000000000000000000000000000084820152670de0b6b3a76400008310612f41565b808452600582526040842060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055604051908152a180f35b50346101b857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b857602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346101b857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b857604060a091600435815260086020522073ffffffffffffffffffffffffffffffffffffffff8082541691816001820154169160048160028401541691600384015416920154926040519485526020850152604084015260608301526080820152f35b50346101b85760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b8576125a736612d50565b7f139d6f58e9a127229667c8e3b36e88890a66cfc8ab1024ddc513e189e125b75b602060a4356125f273ffffffffffffffffffffffffffffffffffffffff8654163314610249612f08565b6126ed60a08520948587526003845261269c866fffffffffffffffffffffffffffffffff9261262e84600260408d200154161515610249613016565b818a526003875261264e600260408c20015460801c871415610249612fdd565b61269760405161265d81612cf3565b601081527f6d61782066656520657863656564656400000000000000000000000000000000898201526703782dace9d90000881115612f41565b61336e565b85875260038452821660026040882001906fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b604051908152a280f35b50346101b8576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b85761273136612d50565b9060a43561273d612c7d565b60e43567ffffffffffffffff8111611a315761275d903690600401612de8565b9060a0862080865260036020526127916fffffffffffffffffffffffffffffffff6002604089200154161515610249613016565b61279c6104176132c2565b73ffffffffffffffffffffffffffffffffffffffff809416906127c86127c0613132565b831515612f41565b6127fb6127d487613c78565b828952600260205260408920848a526020526108e6600160408b200191825460801c613178565b604051908682527fa3b9472a1399e17e123f3c2e6586c23e504184d504de59cdaa2b375e880c618460203393a481612843575b505060206104bb939401511630903390613ab9565b333b156128bd5761288591859160405193849283927fb1022fdf000000000000000000000000000000000000000000000000000000008452886004850161319c565b038183335af180156128b25761289c575b8061282e565b6104bb936128ab602092612cc3565b9350612896565b6040513d86823e3d90fd5b8480fd5b50346101b8576128d036612e16565b849691959296958460a0852080855260036020978189526fffffffffffffffffffffffffffffffff996129108b600260408b200154161515610249613016565b159361291d611da16130f9565b73ffffffffffffffffffffffffffffffffffffffff809d16946129416115d8613132565b61294b858b61336e565b612af757505081865280885261296f60016040882001548a8160801c91168c613be8565b985b61297a8a613c78565b9083885260028a52604088208589528a5260016040892001816129a182549482861661322e565b167fffffffffffffffffffffffffffffffff000000000000000000000000000000008094161790556129f06129d58c613c78565b858a52848c526108e6600160408c200191825460801c61322e565b838852828a52612a0f81600160408b200154168d808203911102613c78565b928489528a52600160408920019216908254161790556040519089825288888301527f52acb05cebbd3cd39715469f22afbf5a17496295ef3bc9bb5944056c63ccaa0960403393a481612a72575050508360409561107092511630903390613ab9565b333b156104d257918091612ab59360405194859283927f05b4591c0000000000000000000000000000000000000000000000000000000084528b6004850161319c565b038183335af1908115612aeb575095611070928692604098612adc575b509281975061105a565b612ae590612cc3565b38612ad2565b604051903d90823e3d90fd5b612b1a919a9b50838852828a526001604089200154908c8260801c921690613c55565b99612971565b50346101b85760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b8576104bb612b5c36612d50565b60a081209081845260036020526126976fffffffffffffffffffffffffffffffff6002604087200154161515610249613016565b50346101b85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b857612c2f612bcb612c5a565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000835473ffffffffffffffffffffffffffffffffffffffff80821693612c1a612c12612f08565b863314612f41565b16938493612c26612fdd565b90851415612f41565b161782557f167d3e9c1016ab80e58802ca9da10ce5c6a0f4debc46a2e7a2cd9e56899a4fb58280a280f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102c857565b60c4359073ffffffffffffffffffffffffffffffffffffffff821682036102c857565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102c857565b67ffffffffffffffff8111611a3557604052565b60a0810190811067ffffffffffffffff821117611a3557604052565b6040810190811067ffffffffffffffff821117611a3557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611a3557604052565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126102c85760405190612d8782612cd7565b8173ffffffffffffffffffffffffffffffffffffffff60043581811681036102c857825260243581811681036102c857602083015260443581811681036102c857604083015260643590811681036102c85760608201526080608435910152565b9181601f840112156102c85782359167ffffffffffffffff83116102c857602083818601950101116102c857565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102c857612e4a81612d50565b9160a4359160c4359160e43573ffffffffffffffffffffffffffffffffffffffff811681036102c85791610104359067ffffffffffffffff82116102c857612e9491600401612de8565b9091565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102c857612ecc90612d50565b9060a4359060c4359073ffffffffffffffffffffffffffffffffffffffff9060e43582811681036102c857916101043590811681036102c85790565b60405190612f1582612cf3565b600982527f6e6f74206f776e657200000000000000000000000000000000000000000000006020830152565b15612f495750565b604051907f08c379a000000000000000000000000000000000000000000000000000000000825281602080600483015282519283602484015260005b848110612fc6575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604480968601015201168101030190fd5b818101830151868201604401528593508201612f85565b60405190612fea82612cf3565b600b82527f616c7265616479207365740000000000000000000000000000000000000000006020830152565b6040519061302382612cf3565b601282527f6d61726b6574206e6f74206372656174656400000000000000000000000000006020830152565b909291610140906130a9836101608101966080809173ffffffffffffffffffffffffffffffffffffffff80825116855280602083015116602086015280604083015116604086015260608201511660608501520151910152565b60028154916fffffffffffffffffffffffffffffffff9283811660a087015260801c60c0860152600181015483811660e087015260801c610100860152015490811661012084015260801c910152565b6040519061310682612cf3565b601282527f696e636f6e73697374656e7420696e70757400000000000000000000000000006020830152565b6040519061313f82612cf3565b600c82527f7a65726f206164647265737300000000000000000000000000000000000000006020830152565b91908201809211610ccd57565b9190916fffffffffffffffffffffffffffffffff80809416911601918211610ccd57565b9183606094601f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0948652604060208701528160408701528686013760008582860101520116010190565b604051906131f582612cf3565b600c82527f756e617574686f72697a656400000000000000000000000000000000000000006020830152565b91908203918211610ccd57565b6fffffffffffffffffffffffffffffffff9182169082160391908211610ccd57565b6040519061325d82612cf3565b601682527f696e73756666696369656e74206c6971756964697479000000000000000000006020830152565b6040519061329682612cf3565b601782527f696e73756666696369656e7420636f6c6c61746572616c0000000000000000006020830152565b604051906132cf82612cf3565b600b82527f7a65726f206173736574730000000000000000000000000000000000000000006020830152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ccd5760010190565b73ffffffffffffffffffffffffffffffffffffffff1680331490811561334c575090565b9050600052600660205260406000203360005260205260ff6040600020541690565b91906000908082526003916020928084526fffffffffffffffffffffffffffffffff936040936133a686600287872001541642613221565b80156136715773ffffffffffffffffffffffffffffffffffffffff908160608b01511680613409575b50505060029596975083525220019042167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055565b61344d8591858952878352898920898b519e8f94859384927f9451fed40000000000000000000000000000000000000000000000000000000084526004840161304f565b03925af1998a1561366757869a613637575b50606088999a6134f087898796898860029f8f7f9d9bd501d0657d7dfe415f779a620a62b78bc508ddc0891fbbd8b7ac0f8fce879a8387528785526134fb6134b0846001858b20015416928c61383b565b916134f5671bc16d674ec800006134c7858061383b565b0493670de0b6b3a76400009c856729a2241af62c00008f97846134e99161383b565b049261316b565b61316b565b9061383b565b049561350687613c78565b84825288865260018383200184613521825493828516613178565b167fffffffffffffffffffffffffffffffff0000000000000000000000000000000080931617905561355288613c78565b858352898752838320918561356b845493828516613178565b16911617905580978482528086526002838320015460801c998a6135aa575b505090519889525050505050888401528a83015250a287969538806133cf565b8899506135bf6135ce97989b6135e19a61383b565b04968795835252205416613221565b888d528b8b528d8d205460801c91613be8565b91868b528c89528b8b2090600154168b5288528a8a2061360283825461316b565b905561362761361083613c78565b878c528a8a526108e68d8d2091825460801c613178565b819038898f89908f8f8f8661358a565b9099508381813d8311613660575b61364f8183612d0f565b81010312611bd0575198606061345f565b503d613645565b87513d88823e3d90fd5b505050505050509050565b909291600093808552602092600284526040862073ffffffffffffffffffffffffffffffffffffffff90818516885285526fffffffffffffffffffffffffffffffff600160408920015416156137625784600491604084015116604051928380927fa035b1fe0000000000000000000000000000000000000000000000000000000082525afa948515613757578795613720575b505061371d94955061376d565b90565b9080929550813d8311613750575b6137388183612d0f565b81010312611bd05761371d9495505192859438613710565b503d61372e565b6040513d89823e3d90fd5b506001955050505050565b60806ec097ce7bc90715b34b9f100000000061381361381d949660016040670de0b6b3a7640000986000908b8252600260205273ffffffffffffffffffffffffffffffffffffffff8383209116908183526020526137f86fffffffffffffffffffffffffffffffff8d8187878720015416908552600360205286868620015491828c1c921690613c55565b9b82526002602052828220908252602052200154841c61383b565b049101519061383b565b04101590565b67ffffffffffffffff8111611a355760051b60200190565b81810292918115918404141715610ccd57565b8115610df4570490565b906138629161383b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810191818311610ccd5761371d926107d49161316b565b604051906138a882612cf3565b600782527f6e6f20636f6465000000000000000000000000000000000000000000000000006020830152565b3d1561392d573d9067ffffffffffffffff8211611a35576040519161392160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184612d0f565b82523d6000602084013e565b606090565b908160209103126102c8575180151581036102c85790565b613a9d92600092836139da613a0673ffffffffffffffffffffffffffffffffffffffff83961694613980863b151561024961389b565b60405192839160208301967fa9059cbb000000000000000000000000000000000000000000000000000000008852602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612d0f565b51925af1613a52613a156138d4565b9160405190613a2382612cf3565b601182527f7472616e736665722072657665727465640000000000000000000000000000006020830152612f41565b8051908115918215613a9f575b505060405190613a6e82612cf3565b601782527f7472616e736665722072657475726e65642066616c73650000000000000000006020830152612f41565b565b613ab29250602080918301019101613932565b3880613a5f565b60009291838093613a9d9673ffffffffffffffffffffffffffffffffffffffff80951694613aec863b151561024961389b565b604051928160208501967f23b872dd000000000000000000000000000000000000000000000000000000008852166024850152166044830152606482015260648152613b3781612cd7565b51925af1613b83613b466138d4565b9160405190613b5482612cf3565b601582527f7472616e7366657246726f6d20726576657274656400000000000000000000006020830152612f41565b8051908115918215613bce575b505060405190613b9f82612cf3565b601b82527f7472616e7366657246726f6d2072657475726e65642066616c736500000000006020830152612f41565b613be19250602080918301019101613932565b3880613b90565b620f42408301809311610ccd5760018201809211610ccd5761371d926107d49161383b565b6001820192918310610ccd57620f42408201809211610ccd5761371d926107d49161383b565b91620f42408101809111610ccd5760018201809211610ccd5761371d92613858565b919060018101809111610ccd57620f42408201809211610ccd5761371d92613858565b60405190613c8582612cf3565b601482527f6d61782075696e743132382065786365656465640000000000000000000000006020830152613ccd6fffffffffffffffffffffffffffffffff9283831115612f41565b169056fea264697066735822122079158eb535c7c15b41fefd9a35ecfba352cc57513680ee925005a5e78d70326264736f6c63430008130033000000000000000000000000937ce2d6c488b361825d2db5e8a70e26d48afed5