0 txs
21.2k calls
constructor
constructor(address MINTABLE_ERC20_IMPLEMENT_, address TERMMAX_ORDER_IMPLEMENT_)
functions
config
viewfunction config() view returns (tuple)
getVersion
purefunction getVersion() pure returns (string)
mintGtFeeRatio
viewfunction mintGtFeeRatio() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
predictOrderAddress
viewfunction predictOrderAddress(tuple params, uint256 salt) view returns (address orderAddress)
previewRedeem
viewfunction previewRedeem(uint256 ftAmount) view returns (uint256 debtTokenAmt, bytes deliveryData)
tokens
viewfunction tokens() view returns (address, address, address, address, address)
acceptOwnership
nonpayablefunction acceptOwnership()
burn
nonpayablefunction burn(address owner, address recipient, uint256 debtTokenAmt)
burn
nonpayablefunction burn(address recipient, uint256 debtTokenAmt)
createOrder
nonpayablefunction createOrder(tuple params, uint256 salt) returns (address order)
createOrder
nonpayablefunction createOrder(tuple params) returns (address)
createOrder
nonpayablefunction createOrder(address maker, uint256 maxXtReserve, address swapTrigger, tuple curveCuts) returns (address)
initialize
nonpayablefunction initialize(tuple params)
issueFt
nonpayablefunction issueFt(address recipient, uint128 debt, bytes collateralData) returns (uint256 gtId, uint128 ftOutAmt)
issueFtByExistedGt
nonpayablefunction issueFtByExistedGt(address recipient, uint128 debt, uint256 gtId) returns (uint128 ftOutAmt)
leverageByXt
nonpayablefunction leverageByXt(address recipient, uint128 xtAmt, bytes callbackData) returns (uint256 gtId)
leverageByXt
nonpayablefunction leverageByXt(address xtOwner, address recipient, uint128 xtAmt, bytes callbackData) returns (uint256 gtId)
mint
nonpayablefunction mint(address recipient, uint256 debtTokenAmt)
redeem
nonpayablefunction redeem(address ftOwner, address recipient, uint256 ftAmount) returns (uint256, bytes)
redeem
nonpayablefunction redeem(uint256 ftAmount, address recipient) returns (uint256, bytes)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateGtConfig
nonpayablefunction updateGtConfig(bytes configData)
updateMarketConfig
nonpayablefunction updateMarketConfig(tuple newConfig)
updateOrderFeeRate
nonpayablefunction updateOrderFeeRate(address order, tuple newFeeConfig)
events
Burn
event Burn(address indexed caller, address indexed receiver, uint256 amount)
CreateOrder
event CreateOrder(address indexed maker, address indexed order)
Initialized
event Initialized(uint64 version)
IssueFt
event IssueFt(address indexed caller, address indexed recipient, uint256 indexed gtId, uint128 debtAmt, uint128 ftAmt, uint128 fee, bytes collateralData)
IssueFtByExistedGt
event IssueFtByExistedGt(address indexed caller, address indexed recipient, uint256 indexed gtId, uint128 debtAmt, uint128 ftAmt, uint128 issueFee)
LeverageByXt
event LeverageByXt(address indexed loanReceiver, address indexed gtReceiver, uint256 indexed gtId, uint128 debtAmt, uint256 xtAmt, uint128 fee, bytes collateralData)
MarketInitialized
event MarketInitialized(address indexed collateral, address indexed underlying, uint64 maturity, address ft, address xt, address gt)
Mint
event Mint(address indexed caller, address indexed receiver, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Redeem
event Redeem(address indexed caller, address indexed recipient, uint128 proportion, uint128 underlyingAmt, bytes deliveryData)
UpdateMarketConfig
event UpdateMarketConfig((address treasurer, uint64 maturity, (uint32 lendTakerFeeRatio, uint32 lendMakerFeeRatio, uint32 borrowTakerFeeRatio, uint32 borrowMakerFeeRatio, uint32 mintGtFeeRatio, uint32 mintGtFeeRef) feeConfig) config)
errors
CanNotRedeemBeforeFinalLiquidationDeadline
error CanNotRedeemBeforeFinalLiquidationDeadline(uint256 liquidationDeadline)
CollateralCanNotEqualUnderlyinng
error CollateralCanNotEqualUnderlyinng()
FailedDeployment
error FailedDeployment()
FeeTooHigh
error FeeTooHigh()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidInitialization
error InvalidInitialization()
InvalidMaturity
error InvalidMaturity()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TermIsNotOpen
error TermIsNotOpen()
creation bytecode
0x60c03461012757601f613c7b38819003918201601f19168301916001600160401b0383118484101761012b57808492604094855283398101031261012757610052602061004b8361013f565b920161013f565b9060805260a0525f516020613c5b5f395f51905f525460ff8160401c16610118576002600160401b03196001600160401b038216016100c2575b604051613b079081610154823960805181610a67015260a05181818161117701528181611324015281816117140152611f060152f35b6001600160401b0319166001600160401b039081175f516020613c5b5f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61008c565b63f92ee8a960e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101275756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816306fdde031461201c575080630d8e6e2c14611fd55780630e6dfcd514611fb457806313560a9014611e91578063358aa0eb14611d7257806339a380ed14611b695780633f5ffaf514611b4e57806340c10f19146119ab5780634cdad506146117be5780634fa05f1d1461173857806352f919a9146116b2578063624a5104146114c6578063715018a61461144757806379502c55146113fd57806379ba5097146113ad5780637bde82f214611358578063887bb9891461120f5780638da5cb5b146111da5780638ff16793146110e4578063910a105c146106a75780639d63848a146106505780639dc29fac146105fb5780639ea1c1c914610593578063d1f55a3c146104f2578063e30c3978146104bd578063f2fde38b14610437578063f41dc9f2146101b35763f6b911bc14610152575f80fd5b346101b0576101603661223d565b9061016c93929361297c565b6001600160401b03835460a01c164210156101a15761018d929333906137c6565b60015f516020613a725f395f51905f525580f35b630cf6cf4760e01b8352600483fd5b80fd5b50346101b0576101c236612729565b90926101cc61297c565b6001600160401b03855460a01c164210156104285760018060a01b036006541660405194630d60240d60e21b865233600487015260018060a01b038316968760248801526020876001600160801b038816948560448301526080606483015281848161023c608482018c8a61337e565b03925af196871561041b5781976103e3575b506102576128b7565b9561027161026c6102666127c4565b86613140565b613929565b600454975190976001600160a01b039081169116813b156103df57886102b0928592836040518096819582946340c10f1960e01b84526004840161303a565b03925af180156103d457889184916103b7575b50506102ce9161305d565b9360018060a01b036004541690813b156103b35785610306928492836040518096819582946340c10f1960e01b84526004840161303a565b03925af180156103a857610393575b5050604096928694926103737f4df3b19e819480e8ca2aff222a35ef1641eedcaf2f0fe5e7bfe9ca499548df80936001600160801b03808c51958695865216998a6020860152168b840152608060608401523395608084019161337e565b0390a460015f516020613a725f395f51905f525582519182526020820152f35b61039e8280926121b8565b6101b05780610315565b6040513d84823e3d90fd5b8280fd5b819250906103c4916121b8565b6103d05786825f6102c3565b5080fd5b6040513d85823e3d90fd5b8380fd5b9096506020813d602011610413575b816103ff602093836121b8565b8101031261040f5751955f61024e565b5f80fd5b3d91506103f2565b50604051903d90823e3d90fd5b630cf6cf4760e01b8552600485fd5b50346101b05760203660031901126101b0576104516121fd565b610459612f3d565b5f516020613ab25f395f51905f5280546001600160a01b0319166001600160a01b039283169081179091555f516020613a325f395f51905f52549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b50346101b057806003193601126101b0575f516020613ab25f395f51905f52546040516001600160a01b039091168152602090f35b50346101b05760203660031901126101b057806004356001600160401b038111610590576105249036906004016126e5565b61052c612f3d565b6006546001600160a01b0316803b1561058e57604051634663566760e11b815260206004820152918391839182908490829061056c9060248301906121d9565b03925af180156103a85761057d5750f35b81610587916121b8565b6101b05780f35b505b50fd5b50346101b0576105a236612729565b936105ae93919361297c565b6001600160401b03815460a01c164210156105ec5760206105d386868686333361339e565b60015f516020613a725f395f51905f5255604051908152f35b630cf6cf4760e01b8152600490fd5b50346101b05760403660031901126101b0576106156121fd565b61061d61297c565b6001600160401b03825460a01c164210156106415761018d906024359033336137c6565b630cf6cf4760e01b8252600482fd5b50346101b057806003193601126101b057600454600554600654600254600354604080516001600160a01b03968716815294861660208601529285169284019290925283166060830152909116608082015260a090f35b50346101b05760203660031901126101b0576004356001600160401b0381116103d0578036036102606003198201126103b3576040516106e68161214b565b6106f283600401612229565b81526024830135906001600160a01b0382168203610fcd576020810191825261071d60448501612229565b926040820193845261073160648601612229565b606083019081526101006083198301126110e0576080604051926107548461211c565b61076060848901612229565b845261076e60a48901612291565b60208501526107803660c48a01612442565b60408501528482019384526101831901126110e05760405191608083018381106001600160401b038211176110cc576040526101848701356001600160a01b03811681036110c85783526107d76101a4880161239a565b60208401526107e96101c4880161239a565b60408401526101e487013580151581036110c857606084015260a084019283526102048701356001600160401b0381116110c85761082d90600436918a01016126e5565b9060c085019182526102248801356001600160401b038111610fb45761085990600436918b01016126e5565b9760e08601988952610244810135906001600160401b0382116110c457600461088592369201016126e5565b9161010086019283525f516020613a925f395f51905f52549760ff8960401c1615986001600160401b038116801590816110bc575b60011490816110b2575b1590816110a9575b5061109a5767ffffffffffffffff1981166001175f516020613a925f395f51905f52558961106e575b50516001600160a01b031661090861395a565b801561105a5761091790613688565b61091f61395a565b60015f516020613a725f395f51905f5255855187516001600160a01b0390811691161461104b578151602081016001600160401b0381511642101561103c57908b93929160408201916109728351612f70565b8a51600380546001600160a01b03199081166001600160a01b03938416179091558b5160028054831691841691909117905591515f8054909316908216179091559051855467ffffffffffffffff60a01b191660a091821b67ffffffffffffffff60a01b1617865591518051600180546020808501516040808701516060808901516080808b01519a8d01516001600160c01b031990981663ffffffff9a909a16999099179490951b67ffffffff000000001693909317911b63ffffffff60401b161791901b63ffffffff60601b16179390921b63ffffffff60801b1692909217931b63ffffffff60a01b16929092179091557f00000000000000000000000000000000000000000000000000000000000000009690610a9188613985565b16966001600160a01b0390610aa590613985565b96519616956001600160a01b0390610abe908216613985565b16946004602060018060a01b038c51166040519283809263313ce56760e01b82525afa908115610fd1578691611000575b50610b048d610afc6136f3565b905190613789565b610b17610b0f6136f3565b845190613789565b908a3b15610fb057828b610b45938a809460405196879586948593630b127b6360e11b855260048501613714565b03925af1908115610ff5578791610fdc575b5050610b658d610afc613747565b610b70610b0f613747565b893b15610fb0578791610b976040519485938493630b127b6360e11b855260048501613714565b0381838c5af1908115610fd1578691610fb8575b5050610bc5610bbc8d610afc613768565b91610afc613768565b89518b519551805160209091015194516040516001600160a01b0398891698949692851694909391926001600160401b03169116610c028461219d565b83526020830197885260408301968c8852606084019485526080840191825260a0840192835251938a3b15610fb4578997604051998a98899863093ce73f60e21b8a5260048a0161018090526101848a01610c5c916121d9565b8981036003190160248b0152610c71916121d9565b95516001600160a01b0390811660448a01529051811660648901529051811660848801529051811660a487015290516001600160401b031660c48601529051805190911660e4850152602081015163ffffffff90811661010486015260408201511661012485015260600151151561014484015282810360031901610164840152610cfb916121d9565b038183875af180156103a857610f9b575b50506001600160601b0360a01b60065416176006556001600160601b0360a01b60055416176005556001600160601b0360a01b6004541617600455610d7d604094855190610d5a87836121b8565b600f82526e2a32b936b6b0bc1026b0b935b2ba1d60891b60208301525190613789565b8051906001600160401b038211610f87578190610d9b6007546120e4565b601f8111610f15575b50602090601f8311600114610ea6578892610e9b575b50508160011b915f199060031b1c1916176007555b5190518454600454600554600654875160a09490941c6001600160401b031684526001600160a01b039283166020850152908216838801528116606083015291821692909116907f923c07a7269eb05c7b48c4002081d856ef37b3cbc4c2bae12d7493178477e30690608090a3610e44575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29168ff0000000000000000195f516020613a925f395f51905f5254165f516020613a925f395f51905f52555160018152a180f35b015190505f80610dba565b600789525f516020613a525f395f51905f529250601f198416895b818110610efd5750908460019594939210610ee5575b505050811b01600755610dcf565b01515f1960f88460031b161c191690555f8080610ed7565b92936020600181928786015181550195019301610ec1565b90915060078852601f830160051c5f516020613a525f395f51905f52019060208410610f72575b90601f8493920160051c5f516020613a525f395f51905f5201905b818110610f645750610da4565b898155849350600101610f57565b5f516020613a525f395f51905f529150610f3c565b634e487b7160e01b87526041600452602487fd5b81610fa5916121b8565b610fb057875f610d0c565b8780fd5b8980fd5b81610fc2916121b8565b610fcd57845f610bab565b8480fd5b6040513d88823e3d90fd5b81610fe6916121b8565b610ff157855f610b57565b8580fd5b6040513d89823e3d90fd5b90506020813d602011611034575b8161101b602093836121b8565b81010312610ff1575160ff81168103610ff1575f610aef565b3d915061100e565b6318f4d05960e31b8c5260048cfd5b6329da690f60e11b8a5260048afd5b631e4fbdf760e01b8b5260048b905260248bfd5b68ffffffffffffffffff191668010000000000000001175f516020613a925f395f51905f52555f6108f5565b63f92ee8a960e01b8c5260048cfd5b9050155f6108cc565b303b1591506108c4565b8b91506108ba565b8a80fd5b8880fd5b634e487b7160e01b89526041600452602489fd5b8680fd5b50346101b05760206110f5366125eb565b815160c083015161010090930151606090810151604080516001600160a01b0394851688820190815296851660208801529390911690850152309084015260808301919091526111528160a084015b03601f1981018352826121b8565b519020604051903060388301526f5af43d82803e903d91602b57fd5bf3ff60248301527f00000000000000000000000000000000000000000000000000000000000000006014830152733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c82012060788201526055604360018060a01b0392012016604051908152f35b50346101b057806003193601126101b0575f516020613a325f395f51905f52546040516001600160a01b039091168152602090f35b50346101b05760803660031901126101b0576112296121fd565b906044356001600160a01b03811691908290036101b0576064356001600160401b0381116103d05761125f90369060040161233b565b6001600160401b03825460a01c1642101561064157602093604051936112848561214b565b83855283868601528360408601528360608601528360808601528360a08601528360c08601528360e0860152610100850191604051906112c382612167565b6040516112cf81612182565b606081526060898201528252858883015260408201918683528660608201526112f661294c565b6080820152845260018060a01b03168652602435905260608251015251525061135060018060a01b036113487f0000000000000000000000000000000000000000000000000000000000000000613985565b168092612d56565b604051908152f35b50346101b05760403660031901126101b057611388611375612213565b61137d61297c565b6004359033336129b4565b9060015f516020613a725f395f51905f52556113a960405192839283612277565b0390f35b50346101b057806003193601126101b0575f516020613ab25f395f51905f5254336001600160a01b03909116036113ea576113e733613688565b80f35b63118cdaa760e01b815233600452602490fd5b50346101b057806003193601126101b0576040519061141b8261211c565b8082526020820152604061142d61294c565b9101526113a961143b6128b7565b60405191829182612690565b50346101b057806003193601126101b057611460612f3d565b5f516020613ab25f395f51905f5280546001600160a01b03199081169091555f516020613a325f395f51905f528054918216905581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101b0576101003660031901126101b0576114e1612f3d565b6114f26114ed366123ab565b612f70565b6114fa6128b7565b611502612936565b81516001600160a01b03908116911603611630575b61162a7f5329c6d8ae2f6a70281fd58d811d748cccbdc4249757649cb845a782dd6070b491611545366123ab565b604082810182905282515f80546001600160a01b0319166001600160a01b0392909216919091179055602080840151875467ffffffffffffffff60a01b191660a091821b67ffffffffffffffff60a01b1617885583516001805484870151868801516060808a01516080808c01519b8901516001600160c01b031990961663ffffffff98909816979097179390981b67ffffffff00000000169290921790881b63ffffffff60401b161795901b63ffffffff60601b16949094179590911b63ffffffff60801b169490941791901b63ffffffff60a01b16179091555191829182612690565b0390a180f35b6001600160a01b03611640612936565b16815260065482906001600160a01b0316611659612936565b813b156103b35760405163671d642960e01b81526001600160a01b0390911660048201529082908290602490829084905af180156103a85761169d575b5050611517565b816116a7916121b8565b6103d057815f611696565b50346101b05760203660031901126101b0576004356001600160401b0381116103d0576116e39036906004016124b7565b6116eb61297c565b6001600160401b03825460a01c1642101561064157602091506105d36001600160a01b036113487f0000000000000000000000000000000000000000000000000000000000000000613985565b50346101b05760803660031901126101b0576117526121fd565b9061175b612213565b604435906001600160801b03821682036103b3576064356001600160401b0381116103df5761178e90369060040161261c565b94909361179961297c565b6001600160401b03815460a01c164210156105ec5760206105d387878787338861339e565b50346101b05760203660031901126101b0576117d861307d565b60018060a01b0360045416604051906318160ddd60e01b8252602082600481845afa9182156103d4578392611976575b50906020602492604051938480926370a0823160e01b82523060048301525afa9182156103d4578392611940575b5061184660249261184e92612848565b6004356131c9565b600654604051637da39d5b60e01b81526004810183905292849184919082906001600160a01b03165afa9182156103d457839261191b575b506003546040516370a0823160e01b8152306004820152929390602090849060249082906001600160a01b03165afa90811561190f57906118db575b6118cc925061327a565b6113a960405192839283612277565b506020823d602011611907575b816118f5602093836121b8565b8101031261040f576118cc91516118c2565b3d91506118e8565b604051903d90823e3d90fd5b6024925061193a903d8086833e61193281836121b8565b810190612855565b91611886565b91506020823d60201161196e575b8161195b602093836121b8565b8101031261040f57905190611846611836565b3d915061194e565b91506020823d6020116119a3575b81611991602093836121b8565b8101031261040f579051906020611808565b3d9150611984565b50346101b05760403660031901126101b0576119c56121fd565b602435906119d161297c565b6001600160401b03835460a01c164210156101a1576003546040516323b872dd60e01b602082015233602482015230604482015260648101849052611a35916001600160a01b0316611a3082608481015b03601f1981018452836121b8565b6139d9565b60045483906001600160a01b0316803b156103d0576040516340c10f1960e01b81526001600160a01b0384166004820152602481018590529082908290604490829084905af180156103a857611b39575b506005546001600160a01b0316803b156103d0576040516340c10f1960e01b81526001600160a01b0384166004820152602481018590529082908290604490829084905af180156103a857611b24575b50506040519182526001600160a01b03169033907fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f890602090a360015f516020613a725f395f51905f525580f35b81611b2e916121b8565b6103b357825f611ad6565b81611b43916121b8565b6103b357825f611a86565b50346101b057806003193601126101b05760206113506127c4565b50346101b05760603660031901126101b057611b836121fd565b602435906001600160801b0382168083036103df5760443591611ba461297c565b6001600160401b03855460a01c164210156104285760065485906001600160a01b0316803b156103d0578180916064604051809481936316e8363160e11b83523360048401528a60248401528960448401525af180156103a857611d5d575b5050611c0d6128b7565b93611c2261026c611c1c6127c4565b85613140565b600454955190956001600160a01b0391821691889116803b156103d057878291611c6394836040518097819582946340c10f1960e01b84526004840161303a565b03925af191821561041b578792611d44575b5050611c809161305d565b6004549095906001600160a01b0316803b156103d0578160405180926340c10f1960e01b8252818381611cb78d8a6004840161303a565b03925af180156103a857611d2f575b50506001600160801b03806020966040519485521694858785015216604083015260018060a01b0316907fb50ea3d7fe2bef28974c75926a6ef8a7266c9e12c600e4bf0ea8d40d401accfb60603392a460015f516020613a725f395f51905f5255604051908152f35b611d3a8280926121b8565b6101b05780611cc6565b81925090611d51916121b8565b610ff15784865f611c75565b81611d67916121b8565b610fcd57845f611c03565b503461040f5760e036600319011261040f576004356001600160a01b0381169081900361040f5760c036602319011261040f57604051611db18161219d565b60243563ffffffff8116810361040f57815260443563ffffffff8116810361040f57602082015260643563ffffffff8116810361040f57604082015260843563ffffffff8116810361040f57606082015260a43563ffffffff8116810361040f57608082015260c43563ffffffff8116810361040f5760a0820152611e34612f3d565b611e3d81612f70565b813b1561040f57611e6860c45f9283604051958694859363b53f9bff60e01b85526004850190612649565b5af18015611e8657611e78575080f35b611e8491505f906121b8565b005b6040513d5f823e3d90fd5b3461040f57611e9f366125eb565b611ea761297c565b6001600160401b035f5460a01c16421015611fa557815160c080840151610100850151606090810151604080516001600160a01b03968716602082019081529487169181019190915294169084015230608084015260a08301939093527f0000000000000000000000000000000000000000000000000000000000000000926e5af43d82803e903d91602b57fd5bf3929091611f469082908101611144565b51902091763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b1760205260018060a01b0390603760095ff5168015611f96576105d381602093612d56565b63b06ebf3d60e01b5f5260045ffd5b630cf6cf4760e01b5f5260045ffd5b3461040f57611388611fc53661223d565b91611fce61297c565b33906129b4565b3461040f575f36600319011261040f576113a9604051611ff66040826121b8565b60058152640322e302e360dc1b60208201526040519182916020835260208301906121d9565b3461040f575f36600319011261040f575f600754612039816120e4565b80845290600181169081156120c05750600114612075575b6113a983612061818503826121b8565b6040519182916020835260208301906121d9565b91905060075f525f516020613a525f395f51905f52915f905b8082106120a657509091508101602001612061612051565b91926001816020925483858801015201910190929161208e565b60ff191660208086019190915291151560051b840190910191506120619050612051565b90600182811c92168015612112575b60208310146120fe57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916120f3565b606081019081106001600160401b0382111761213757604052565b634e487b7160e01b5f52604160045260245ffd5b61012081019081106001600160401b0382111761213757604052565b60a081019081106001600160401b0382111761213757604052565b604081019081106001600160401b0382111761213757604052565b60c081019081106001600160401b0382111761213757604052565b90601f801991011681019081106001600160401b0382111761213757604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361040f57565b602435906001600160a01b038216820361040f57565b35906001600160a01b038216820361040f57565b606090600319011261040f576004356001600160a01b038116810361040f57906024356001600160a01b038116810361040f579060443590565b60409061228e9392815281602082015201906121d9565b90565b35906001600160401b038216820361040f57565b81601f8201121561040f578035906001600160401b03821161213757604051926122d560208460051b01856121b8565b8284526020606081860194028301019181831161040f57602001925b8284106122ff575050505090565b60608483031261040f57602060609160405161231a8161211c565b863581528287013583820152604087013560408201528152019301926122f1565b919060408382031261040f576040519061235482612182565b819380356001600160401b03811161040f57826123729183016122a5565b83526020810135916001600160401b03831161040f5760209261239592016122a5565b910152565b359063ffffffff8216820361040f57565b60c090604319011261040f57604051906123c48261219d565b8160443563ffffffff8116810361040f57815260643563ffffffff8116810361040f57602082015260843563ffffffff8116810361040f57604082015260a43563ffffffff8116810361040f57606082015260c43563ffffffff8116810361040f57608082015260e4359063ffffffff8216820361040f5760a00152565b91908260c091031261040f5760405161245a8161219d565b60a061239581839561246b8161239a565b85526124796020820161239a565b602086015261248a6040820161239a565b604086015261249b6060820161239a565b60608601526124ac6080820161239a565b60808601520161239a565b91906101208382031261040f57604051906124d18261214b565b81936124dc81612229565b83526124ea60208201612229565b60208401526124fb60408201612229565b604084015261250c60608201612229565b606084015260808101356001600160a01b038116810361040f57608084015260a0818101359084015260c08101356001600160a01b038116810361040f5760c084015261255b60e08201612291565b60e0840152610100810135906001600160401b03821161040f5701916101408383031261040f576040519261258f84612167565b8035926001600160401b03841161040f576080826125b583610100976125e2960161233b565b875260208101356020880152604081013560408801526125d760608201612229565b606088015201612442565b60808401520152565b604060031982011261040f57600435906001600160401b03821161040f57612615916004016124b7565b9060243590565b9181601f8401121561040f578235916001600160401b03831161040f576020838186019501011161040f57565b63ffffffff60a08092828151168552826020820151166020860152826040820151166040860152826060820151166060860152826080820151166080860152015116910152565b81516001600160a01b031681526020808301516001600160401b031690820152604091820151610100820193926126c8920190612649565b565b6001600160401b03811161213757601f01601f191660200190565b81601f8201121561040f576020813591016126ff826126ca565b9261270d60405194856121b8565b8284528282011161040f57815f92602092838601378301015290565b606060031982011261040f576004356001600160a01b038116810361040f57916024356001600160801b038116810361040f5791604435906001600160401b03821161040f5761277b9160040161261c565b9091565b8181029291811591840414171561279257565b634e487b7160e01b5f52601160045260245ffd5b81156127b0570490565b634e487b7160e01b5f52601260045260245ffd5b6127dc6001600160401b035f5460a01c164290612848565b62015180810190818111612792576201517f019081116127925762015180900461282c6001549161282663ffffffff61281a818660801c168461277f565b9460a01c16809461277f565b9261277f565b64087f91cd00018064087f91cd00116127925761228e916127a6565b9190820391821161279257565b60208183031261040f578051906001600160401b03821161040f570181601f8201121561040f57805190612888826126ca565b9261289660405194856121b8565b8284526020838301011161040f57815f9260208093018386015e8301015290565b604051906128c48261211c565b5f546001600160a01b038116835260a01c6001600160401b031660208301526040805190836128f28361219d565b63ffffffff6001548181168552818160201c1660208601528181851c1684860152818160601c166060860152818160801c16608086015260a01c1660a08401520152565b6004356001600160a01b038116810361040f5790565b604051906129598261219d565b5f60a0838281528260208201528260408201528260608201528260808201520152565b60025f516020613a725f395f51905f5254146129a55760025f516020613a725f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b9391925f946129c161307d565b600480546040516370a0823160e01b815230928101929092529091906001600160a01b0316602083602481845afa908115611e865788935f92612cd4575b5081612c71575b505060018060a01b0360045416906040516318160ddd60e01b8152602081600481865afa908115612c66578491612c2e575b50612a4390856131c9565b93823b156103df57604051633dae446f60e21b81526001600160a01b039283166004820152918616602483015260448201529082908290606490829084905af180156103a857612c19575b5050600654604051637e3a509d60e11b8152600481018390526001600160a01b038681166024830181905294919391928891859160449183918591165af1928315610ff5578793612bfd575b50829560018060a01b0360035416976040516370a0823160e01b81523060048201526020816024818d5afa91821561190f5791612bc1575b50612b888361026c7f0830e859d308193a7466cf07715c0389a0c5692d9b29004dbf4a629a702a1de69694611a309c612b566001600160801b0398612bbc9761327a565b60405163a9059cbb60e01b60208201526001600160a01b039093166024840152604483018190529d8260648101611a22565b9183612b938b613929565b6040519586951685521660208401526060604084015260018060a01b03169460608301906121d9565b0390a3565b92939190506020833d602011612bf5575b81612bdf602093836121b8565b8101031261040f57915190929190612b88612b12565b3d9150612bd2565b612c129193503d8089833e61193281836121b8565b915f612ada565b81612c23916121b8565b610fcd57845f612a8e565b9350506020833d602011612c5e575b81612c4a602093836121b8565b8101031261040f57612a4388935190612a38565b3d9150612c3d565b6040513d86823e3d90fd5b80919293503b1561040f57604051633dae446f60e21b81523060048201819052602482015260448101929092525f908290606490829084905af18015611e8657612cbf575b90818792612a06565b612ccc9196505f906121b8565b5f945f612cb6565b935090506020833d602011612d03575b81612cf1602093836121b8565b8101031261040f57879251905f6129ff565b3d9150612ce4565b90602080835192838152019201905f5b818110612d285750505090565b9091926020606060019260408751805183528481015185840152015160408201520194019101919091612d1b565b5f805460a01c6001600160401b031660e083019081526004546001600160a01b03908116602085019081526005548216604086019081526006548316608087019081526003548416606088019081529790931696949594919390929091873b1561040f5760408051634aba348f60e01b815260206004820181905288516001600160a01b0390811660248401529751881660448301529551871660648201529151861660848301529151851660a482015260a086015160c482015260c086015190941660e485015290516001600160401b0316610104840152610100840151610120610124850152805161014061014486015280516102848601939093525f938593849392612ec592608092612e8d929190612e77906102c4890190612d0b565b91015186820361028319016102a4880152612d0b565b6020840151610164860152604084015161018486015260608401516001600160a01b03166101a48601529201516101c4840190612649565b038183885af18015611e8657612f08575b50516001600160a01b0316907fd736aee681a6a9c77bb981212f26edcfdfc58eddbb8a6db63b9863ae286f99069080a3565b612f159192505f906121b8565b5f907fd736aee681a6a9c77bb981212f26edcfdfc58eddbb8a6db63b9863ae286f9906612ed6565b5f516020613a325f395f51905f52546001600160a01b03163303612f5d57565b63118cdaa760e01b5f523360045260245ffd5b6301312d0063ffffffff6040830151161090811591613020575b8115613009575b8115612fef575b8115612fd5575b8115612fbc575b50612fad57565b63cd4e616760e01b5f5260045ffd5b631dcd6500915060a063ffffffff91015116115f612fa6565b90506301312d0063ffffffff608083015116101590612f9f565b90506301312d0063ffffffff602083015116101590612f98565b90506301312d0063ffffffff825116101590612f91565b90506301312d0063ffffffff606083015116101590612f8a565b6001600160a01b0390911681526001600160801b03909116602082015260400190565b906001600160801b03809116911603906001600160801b03821161279257565b6130856128b7565b60065460405163a91a53b360e01b815290602090829060049082906001600160a01b03165afa908115611e86575f916130fe575b506001600160401b0391602091156130f657015116611c208101809111612792575b8042106130e55750565b62c9e77160e71b5f5260045260245ffd5b0151166130db565b90506020813d602011613138575b81613119602093836121b8565b8101031261040f5751801515810361040f576001600160401b036130b9565b3d915061310c565b9190915f838202915f19858209918380841093039280840393146131ba57826305f5e10011156131a857507facbe0e98f503f8881186e60dbb7f727bf36b7213ee9f5a78c767074b22e90e2193946305f5e100910990828211900360f81b910360081c170290565b634e487b71905260116020526024601cfd5b5050506305f5e1009192500490565b90662386f26fc100008202905f19662386f26fc1000084099282808510940393808503941461326e578382111561325657662386f26fc10000829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b509061228e92506127a6565b9190915f838202915f19858209918380841093039280840393146132e85782662386f26fc1000011156131a857507fdfd55a2ef7fed2da00d3bd6d84eb0053f60b3275305c1066e4a4d1417cd9a0419394662386f26fc10000910990828211900360f01b910360101c170290565b505050662386f26fc100009192500490565b906305f5e1008202905f196305f5e10084099282808510940393808503941461326e5783821115613256576305f5e100829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b908060209392818452848401375f828201840152601f01601f1916010190565b60035460405163a9059cbb60e01b60208201526001600160a01b03841660248201526001600160801b03861660448201819052929897959694959492935f939284926133ff916133f18260648101611a22565b6001600160a01b03166139d9565b600354604051634cd2a52d60e11b81526001600160a01b0398891660048201819052918916602482015260448101879052608060648201529097919091169590928391829161345291608484019161337e565b038183885af1908115611e86575f9161366e575b5061346f6127c4565b6305f5e100036305f5e10081116127925761026c61348d91856132fa565b916134a06134996128b7565b978461305d565b60045497516001600160a01b039081169891929116803b1561040f57825f916134e09a83604051809d819582946340c10f1960e01b84526004840161303a565b03925af1978815611e86576001600160801b039861365b575b50600654604051630d60240d60e21b815260048101889052602481018990529890941660448901819052608060648a01529360209089906001600160a01b0316818481613549608482018a6121d9565b03925af197881561041b578198613627575b5060055497998a986001600160a01b031690813b156103b357604051633dae446f60e21b81526001600160a01b039091166004820152336024820152604481018790529082908290606490829084905af180156103a857613612575b50507f5ed89e8445cb54712c2b9c1d3d2edb9c3f431b711a76cede9fecd1d3e93ccc849392916001600160801b0361360d92604051958695865260208601521660408401526080606084015260808301906121d9565b0390a4565b61361d8280926121b8565b6101b057806135b7565b9097506020813d602011613653575b81613643602093836121b8565b8101031261040f5751965f61355b565b3d9150613636565b61366791505f906121b8565b5f5f6134f9565b61368291503d805f833e61193281836121b8565b5f613466565b5f516020613ab25f395f51905f5280546001600160a01b03199081169091555f516020613a325f395f51905f5280549182166001600160a01b0393841690811790915591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b604051906137026040836121b8565b6003825262232a1d60e91b6020830152565b9161374060ff916137326040949796976060875260608701906121d9565b9085820360208701526121d9565b9416910152565b604051906137566040836121b8565b60038252622c2a1d60e91b6020830152565b604051906137776040836121b8565b600382526223aa1d60e91b6020830152565b61228e9060208080946040519584879551918291018487015e8401908282015f8152815193849201905e01015f815203601f1981018352826121b8565b600454909392915f916001600160a01b0316803b1561040f57604051633dae446f60e21b81526001600160a01b0387811660048301528316602482015260448101869052905f908290606490829084905af18015611e8657613914575b506005546001600160a01b031690813b156103b357604051633dae446f60e21b81526001600160a01b038781166004830152919091166024820152604481018590529082908290606490829084905af180156103a8576138ff575b505060035460405163a9059cbb60e01b6020828101919091526001600160a01b038085166024840152604483018690527fbac40739b0d4ca32fa2d82fc91630465ba3eddd1598da6fca393b26fb63b945394919391926138e892909116611a308260648101611a22565b6040519384526001600160a01b03908116941692a3565b61390a8280926121b8565b6101b0578061387e565b6139219192505f906121b8565b5f905f613823565b6001600160801b038111613943576001600160801b031690565b6306dfcc6560e41b5f52608060045260245260445ffd5b60ff5f516020613a925f395f51905f525460401c161561397657565b631afcd79f60e31b5f5260045ffd5b6e5af43d82803e903d91602b57fd5bf390763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b17602052603760095ff0906001600160a01b03821615611f9657565b905f602091828151910182855af115611e86575f513d613a2857506001600160a01b0381163b155b613a085750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415613a0156fe9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00a2646970667358221220a02ed4255b1892907cf2ee861d4f52922ade56fa9b35fe62bd122933d74f392464736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0000000000000000000000000099f6f42834773583c67baaa6b15fb3c37a61d6fc000000000000000000000000944187bcec3a49696853df5552473b0772777dfe