0 txs
0 calls
constructor
constructor((string assetName, string assetSymbol, address underlyingToken, address priceOracleMiddleware, (uint256 marketId, bytes32[] substrates)[] marketSubstratesConfigs, address[] fuses, (uint256 marketId, address fuse)[] balanceFuses, (address feeFactory, uint256 iporDaoManagementFee, uint256 iporDaoPerformanceFee, address iporDaoFeeRecipientAddress, (address recipient, uint256 feeValue)[] recipientManagementFees, (address recipient, uint256 feeValue)[] recipientPerformanceFees) feeConfig, address accessManager, address plasmaVaultBase, uint256 totalSupplyCap, address withdrawManager) initData_)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
authority
viewfunction authority() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_SLIPPAGE_IN_PERCENTAGE
viewfunction DEFAULT_SLIPPAGE_IN_PERCENTAGE() view returns (uint256)
getUnrealizedManagementFee
viewfunction getUnrealizedManagementFee() view returns (uint256)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
maxDeposit
viewfunction maxDeposit(address) view returns (uint256)
maxMint
viewfunction maxMint(address) view returns (uint256)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256)
name
viewfunction name() view returns (string)
PLASMA_VAULT_BASE
viewfunction PLASMA_VAULT_BASE() view returns (address)
previewDeposit
viewfunction previewDeposit(uint256 assets) view returns (uint256)
previewMint
viewfunction previewMint(uint256 shares) view returns (uint256)
previewRedeem
viewfunction previewRedeem(uint256 shares_) view returns (uint256)
previewWithdraw
viewfunction previewWithdraw(uint256 assets_) view returns (uint256)
read
viewfunction read(address target, bytes data) view returns (tuple result)
symbol
viewfunction symbol() view returns (string)
totalAssets
viewfunction totalAssets() view returns (uint256)
totalAssetsInMarket
viewfunction totalAssetsInMarket(uint256 marketId_) view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
claimRewards
nonpayablefunction claimRewards(tuple[] calls_)
deposit
nonpayablefunction deposit(uint256 assets_, address receiver_) returns (uint256)
depositWithPermit
nonpayablefunction depositWithPermit(uint256 assets_, address receiver_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_) returns (uint256)
execute
nonpayablefunction execute(tuple[] calls_)
executeInternal
nonpayablefunction executeInternal(tuple[] calls_)
mint
nonpayablefunction mint(uint256 shares_, address receiver_) returns (uint256)
readInternal
nonpayablefunction readInternal(address target, bytes data) returns (tuple result)
redeem
nonpayablefunction redeem(uint256 shares_, address receiver_, address owner_) returns (uint256)
redeemFromRequest
nonpayablefunction redeemFromRequest(uint256 shares_, address receiver_, address owner_) returns (uint256)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
transfer
nonpayablefunction transfer(address to_, uint256 value_) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from_, address to_, uint256 value_) returns (bool)
updateInternal
nonpayablefunction updateInternal(address, address, uint256)
updateMarketsBalances
nonpayablefunction updateMarketsBalances(uint256[] marketIds_) returns (uint256)
withdraw
nonpayablefunction withdraw(uint256 assets_, address receiver_, address owner_) returns (uint256 assetsToWithdraw)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
AuthorityUpdated
event AuthorityUpdated(address authority)
Deposit
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)
Initialized
event Initialized(uint64 version)
ManagementFeeDataConfigured
event ManagementFeeDataConfigured(address feeAccount, uint256 feeInPercentage)
ManagementFeeRealized
event ManagementFeeRealized(uint256 unrealizedFeeInUnderlying, uint256 unrealizedFeeInShares)
MarketBalancesUpdated
event MarketBalancesUpdated(uint256[] marketIds, int256 deltaInUnderlying)
MarketSubstratesGranted
event MarketSubstratesGranted(uint256 marketId, bytes32[] substrates)
PerformanceFeeDataConfigured
event PerformanceFeeDataConfigured(address feeAccount, uint256 feeInPercentage)
PriceOracleMiddlewareChanged
event PriceOracleMiddlewareChanged(address newPriceOracleMiddleware)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Withdraw
event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)
WithdrawManagerChanged
event WithdrawManagerChanged(address newWithdrawManager)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC4626ExceededMaxDeposit
error ERC4626ExceededMaxDeposit(address receiver, uint256 assets, uint256 max)
ERC4626ExceededMaxMint
error ERC4626ExceededMaxMint(address receiver, uint256 shares, uint256 max)
ERC4626ExceededMaxRedeem
error ERC4626ExceededMaxRedeem(address owner, uint256 shares, uint256 max)
ERC4626ExceededMaxWithdraw
error ERC4626ExceededMaxWithdraw(address owner, uint256 assets, uint256 max)
FailedInnerCall
error FailedInnerCall()
HandlerNotFound
error HandlerNotFound()
InvalidInitialization
error InvalidInitialization()
InvalidManagementFee
error InvalidManagementFee(uint256 feeInPercentage)
InvalidPerformanceFee
error InvalidPerformanceFee(uint256 feeInPercentage)
MarketLimitExceeded
error MarketLimitExceeded(uint256 marketId, uint256 balanceInMarket, uint256 limit)
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NoAssetsToDeposit
error NoAssetsToDeposit()
NoAssetsToWithdraw
error NoAssetsToWithdraw()
NoSharesToDeposit
error NoSharesToDeposit()
NoSharesToMint
error NoSharesToMint()
NoSharesToRedeem
error NoSharesToRedeem()
NotInitializing
error NotInitializing()
PermitFailed
error PermitFailed()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedIntToUint
error SafeCastOverflowedIntToUint(int256 value)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnauthorizedCaller
error UnauthorizedCaller()
UnsupportedFuse
error UnsupportedFuse()
UnsupportedMethod
error UnsupportedMethod()
UnsupportedQuoteCurrencyFromOracle
error UnsupportedQuoteCurrencyFromOracle()
WithdrawManagerInvalidSharesToRelease
error WithdrawManagerInvalidSharesToRelease(uint256 sharesToRelease)
WithdrawManagerNotSet
error WithdrawManagerNotSet()
WrongAddress
error WrongAddress()
WrongCaller
error WrongCaller(address caller)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60c060405234801561000f575f80fd5b506040516178d83803806178d883398101604081905261002e91611256565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156100775750825b90505f826001600160401b031660011480156100925750303b155b9050811580156100a0575080155b156100be5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156100ec57845460ff60401b1916680100000000000000001785555b855160208701516100fd9190610513565b604086015161010b90610529565b6101176002600a6114f0565b60a0526101208601516001600160a01b0316608052855161010087015161014088015160405161019f93634a5dc1b760e01b9361015b9391929091906024016114fe565b60408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b039384161790526080516001600160a01b03169161053d16565b505f866060015190506103486001600160a01b0316816001600160a01b031663f4a6e4586040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610214919061154b565b6001600160a01b03161461023b57604051630dee4f2f60e41b815260040160405180910390fd5b6060870151610249906105b2565b610269633e3a86e060e01b8860a0015160405160240161015b9190611564565b505f5b8760c00151518110156102f3576102ea630c63abc660e01b8960c00151838151811061029a5761029a6115af565b60200260200101515f01518a60c0015184815181106102bb576102bb6115af565b60200260200101516020015160405160240161015b9291909182526001600160a01b0316602082015260400190565b5060010161026c565b505f5b87608001515181101561035c576103548860800151828151811061031c5761031c6115af565b60200260200101515f01518960800151838151811061033d5761033d6115af565b60200260200101516020015161062760201b60201c565b6001016102f6565b505f8760e001515f01516001600160a01b031663738beeaa6040518060e001604052808b61010001516001600160a01b03168152602001306001600160a01b031681526020018b60e001516020015181526020018b60e001516040015181526020018b60e00151606001516001600160a01b031681526020018b60e001516080015181526020018b60e0015160a001518152506040518263ffffffff1660e01b815260040161040b9190611612565b60c0604051808303815f875af1158015610427573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044b9190611695565b905061046581604001518260a0015161077360201b60201c565b61047d8160600151826080015161086c60201b60201c565b610485610957565b6101608801516001600160a01b03166104b1576040516302067b8560e41b815260040160405180910390fd5b6101608801516104c0906109a3565b5050831561050857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050506118c1565b61051b610a11565b6105258282610a61565b5050565b610531610a11565b61053a81610aca565b50565b60605f80846001600160a01b031684604051610559919061170a565b5f60405180830381855af49150503d805f8114610591576040519150601f19603f3d011682016040523d82523d5f602084013e610596565b606091505b5090925090506105a7858383610b4d565b925050505b92915050565b807f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a0080546001600160a01b0319166001600160a01b0392831617905560405190821681527fd51f0f0ead29844497f2889430c7143324b01211d610174de544ac915ae5943f906020015b60405180910390a150565b5f8281527f78e40624004925a4ef6749756748b1deddc674477302d5b7fe18e5335cde39006020526040902061065c81610bac565b5f82516001600160401b0381111561067657610676610db2565b60405190808252806020026020018201604052801561069f578160200160208202803683370190505b5090505f5b835181101561071d576001835f015f8684815181106106c5576106c56115af565b602002602001015181526020019081526020015f20819055508381815181106106f0576106f06115af565b602002602001015182828151811061070a5761070a6115af565b60209081029190910101526001016106a4565b5080516107339060018401906020840190610d5e565b507f7e2fec298d6e81dab091490fc6ab01dc37a9077786c1d533a01cdc6a8e0f42638484604051610765929190611720565b60405180910390a150505050565b6001600160a01b03821661079a57604051630d23cf4160e11b815260040160405180910390fd5b6113888111156107c557604051630a7e67f960e21b8152600481018290526024015b60405180910390fd5b7f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e0528840080546001600160a01b0319166001600160a01b03841617815561080882610bfd565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527fb51da3e1921b4e807ca7fadcf4582ef9ebbabde509ec7cecd222ca1fd4375df591015b60405180910390a1505050565b6001600160a01b03821661089357604051630d23cf4160e11b815260040160405180910390fd5b6101f48111156108b9576040516324f8f43160e11b8152600481018290526024016107bc565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0080546001600160a01b0319166001600160a01b0384161781556108fc82610bfd565b815461ffff91909116600160a01b0261ffff60a01b19909116178155604080516001600160a01b0385168152602081018490527f72a8ee4b89f4194ad7e618624c280d66eb07d10b8cd84ab0376c16534413aa40910161085f565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0061098142610c2f565b815463ffffffff91909116600160b01b0263ffffffff60b01b19909116179055565b807fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e1180546001600160a01b0319166001600160a01b0392831617905560405190821681527fd8f38238faf978f3ebd926ef7a8ea95baf4119bb290941e49c523f093ea30d949060200161061c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610a5f57604051631afcd79f60e31b815260040160405180910390fd5b565b610a69610a11565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610ab584826117f0565b5060048101610ac483826117f0565b50505050565b610ad2610a11565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f80610afe84610c5f565b9150915081610b0e576012610b10565b805b83546001600160a81b031916600160a01b60ff92909216919091026001600160a01b031916176001600160a01b0394909416939093179091555050565b606082610b6257610b5d82610d35565b610ba5565b8151158015610b7957506001600160a01b0384163b155b15610ba257604051639996b31560e01b81526001600160a01b03851660048201526024016107bc565b50805b9392505050565b60018101545f5b81811015610bf8575f835f015f856001018481548110610bd557610bd56115af565b5f9182526020808320909101548352820192909252604001902055600101610bb3565b505050565b5f61ffff821115610c2b576040516306dfcc6560e41b815260106004820152602481018390526044016107bc565b5090565b5f63ffffffff821115610c2b576040516306dfcc6560e41b815260206004820152602481018390526044016107bc565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f918291829182916001600160a01b03871691610ca59161170a565b5f60405180830381855afa9150503d805f8114610cdd576040519150601f19603f3d011682016040523d82523d5f602084013e610ce2565b606091505b5091509150818015610cf657506020815110155b15610d29575f81806020019051810190610d1091906118aa565b905060ff8111610d27576001969095509350505050565b505b505f9485945092505050565b805115610d455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b828054828255905f5260205f20908101928215610d97579160200282015b82811115610d97578251825591602001919060010190610d7c565b50610c2b9291505b80821115610c2b575f8155600101610d9f565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715610de857610de8610db2565b60405290565b60405160c081016001600160401b0381118282101715610de857610de8610db2565b60405161018081016001600160401b0381118282101715610de857610de8610db2565b604051601f8201601f191681016001600160401b0381118282101715610e5b57610e5b610db2565b604052919050565b5f82601f830112610e72575f80fd5b81516001600160401b03811115610e8b57610e8b610db2565b610e9e601f8201601f1916602001610e33565b818152846020838601011115610eb2575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80516001600160a01b0381168114610ee4575f80fd5b919050565b5f6001600160401b03821115610f0157610f01610db2565b5060051b60200190565b5f82601f830112610f1a575f80fd5b8151610f2d610f2882610ee9565b610e33565b8082825260208201915060208360051b860101925085831115610f4e575f80fd5b602085015b838110156110335780516001600160401b03811115610f70575f80fd5b86016040818903601f19011215610f85575f80fd5b610f8d610dc6565b6020820151815260408201516001600160401b03811115610fac575f80fd5b60208184010192505088601f830112610fc3575f80fd5b8151610fd1610f2882610ee9565b8082825260208201915060208360051b86010192508b831115610ff2575f80fd5b6020850194505b82851015611014578451825260209485019490910190610ff9565b8060208501525050508085525050602083019250602081019050610f53565b5095945050505050565b5f82601f83011261104c575f80fd5b815161105a610f2882610ee9565b8082825260208201915060208360051b86010192508583111561107b575f80fd5b602085015b838110156110335761109181610ece565b835260209283019201611080565b5f82601f8301126110ae575f80fd5b81516110bc610f2882610ee9565b8082825260208201915060208360061b8601019250858311156110dd575f80fd5b602085015b8381101561103357604081880312156110f9575f80fd5b611101610dc6565b8151815261111160208301610ece565b6020820152808452506020830192506040810190506110e2565b5f82601f83011261113a575f80fd5b8151611148610f2882610ee9565b8082825260208201915060208360061b860101925085831115611169575f80fd5b602085015b838110156110335760408188031215611185575f80fd5b61118d610dc6565b61119682610ece565b815260208281015181830152908452929092019160400161116e565b5f60c082840312156111c2575f80fd5b6111ca610dee565b90506111d582610ece565b815260208281015190820152604080830151908201526111f760608301610ece565b606082015260808201516001600160401b03811115611214575f80fd5b6112208482850161112b565b60808301525060a08201516001600160401b0381111561123e575f80fd5b61124a8482850161112b565b60a08301525092915050565b5f60208284031215611266575f80fd5b81516001600160401b0381111561127b575f80fd5b8201610180818503121561128d575f80fd5b611295610e10565b81516001600160401b038111156112aa575f80fd5b6112b686828501610e63565b82525060208201516001600160401b038111156112d1575f80fd5b6112dd86828501610e63565b6020830152506112ef60408301610ece565b604082015261130060608301610ece565b606082015260808201516001600160401b0381111561131d575f80fd5b61132986828501610f0b565b60808301525060a08201516001600160401b03811115611347575f80fd5b6113538682850161103d565b60a08301525060c08201516001600160401b03811115611371575f80fd5b61137d8682850161109f565b60c08301525060e08201516001600160401b0381111561139b575f80fd5b6113a7868285016111b2565b60e0830152506113ba6101008301610ece565b6101008201526113cd6101208301610ece565b61012082015261014082810151908201526113eb6101608301610ece565b610160820152949350505050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156114485780850481111561142c5761142c6113f9565b600184161561143a57908102905b60019390931c928002611411565b935093915050565b5f8261145e575060016105ac565b8161146a57505f6105ac565b8160018114611480576002811461148a576114a6565b60019150506105ac565b60ff84111561149b5761149b6113f9565b50506001821b6105ac565b5060208310610133831016604e8410600b84101617156114c9575081810a6105ac565b6114d55f19848461140d565b805f19048211156114e8576114e86113f9565b029392505050565b5f610ba560ff841683611450565b606081525f84518060608401528060208701608085015e5f60808285018101919091526001600160a01b03959095166020840152604083019390935250601f909101601f19160101919050565b5f6020828403121561155b575f80fd5b610ba582610ece565b602080825282518282018190525f918401906040840190835b818110156115a45783516001600160a01b031683526020938401939092019160010161157d565b509095945050505050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561160857815180516001600160a01b0316875260209081015181880152604090960195909101906001016115d5565b5093949350505050565b6020815260018060a01b03825116602082015260018060a01b036020830151166040820152604082015160608201526060820151608082015260018060a01b0360808301511660a08201525f60a083015160e060c08401526116786101008401826115c3565b905060c0840151601f198483030160e08501526105a782826115c3565b5f60c08284031280156116a6575f80fd5b506116af610dee565b6116b883610ece565b81526116c660208401610ece565b60208201526116d760408401610ece565b60408201526116e860608401610ece565b60608201526080838101519082015260a0928301519281019290925250919050565b5f82518060208501845e5f920191825250919050565b5f60408201848352604060208401528084518083526060850191506020860192505f5b81811015611761578351835260209384019390920191600101611743565b50909695505050505050565b600181811c9082168061178157607f821691505b60208210810361179f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610bf857805f5260205f20601f840160051c810160208510156117ca5750805b601f840160051c820191505b818110156117e9575f81556001016117d6565b5050505050565b81516001600160401b0381111561180957611809610db2565b61181d81611817845461176d565b846117a5565b6020601f82116001811461184f575f83156118385750848201515b5f19600385901b1c1916600184901b1784556117e9565b5f84815260208120601f198516915b8281101561187e578785015182556020948501946001909201910161185e565b508482101561189b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f602082840312156118ba575f80fd5b5051919050565b60805160a051615fd36119055f395f81816124ac015281816124e701528181613d100152613d4d01525f81816103610152818161040301526149780152615fd35ff3fe608060405234801561000f575f80fd5b50600436106102d1575f3560e01c806394bf804d11610184578063c63d75b6116100e1578063d905777e11610095578063e9a2e7781161006f578063e9a2e77814610734578063ef8b30f71461066b578063f538e56214610747576102d1565b8063d905777e146106b7578063dd62ed3e146106ca578063e3efd95f14610721576102d1565b8063c74b5211116100c6578063c74b52111461067e578063ce96cb7714610691578063d79f44eb146106a4576102d1565b8063c63d75b614610658578063c6e6f5921461066b576102d1565b8063b3d7f6b911610138578063ba0876521161011d578063ba0876521461062a578063baae8abf1461063d578063bf7e214f14610650576102d1565b8063b3d7f6b914610604578063b460af9414610617576102d1565b806395d89b411161016957806395d89b41146105d6578063a64099d2146105de578063a9059cbb146105f1576102d1565b806394bf804d146105a35780639569bf28146105b6576102d1565b806332293ccc1161023257806350921b23116101e657806370a08231116101cb57806370a08231146105285780637a9e5e4b1461056f5780638fb3603714610582576102d1565b806350921b23146105025780636e553f6514610515576102d1565b806338d52e0f1161021757806338d52e0f146104d4578063402d267d146104dc5780634cdad506146104ef576102d1565b806332293ccc146104ac5780633887fd78146104c1576102d1565b80630a28a4771161028957806323b872dd1161026e57806323b872dd146104775780633032403a1461048a578063313ce56714610492576102d1565b80630a28a4771461043d57806318160ddd14610450576102d1565b806307a2d13a116102ba57806307a2d13a146103c8578063095ea7b3146103db5780630971a9d0146103fe576102d1565b806301e1d1141461039857806306fdde03146103b3575b5f3660606103007f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab66005460011490565b156103215761030d61074f565b5060408051602081019091525f815261038d565b61038a5f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692915050610906565b90505b915050805190602001f35b6103a061097a565b6040519081526020015b60405180910390f35b6103bb6109b2565b6040516103aa9190615350565b6103a06103d6366004615362565b610a85565b6103ee6103e936600461538d565b610a90565b60405190151581526020016103aa565b6104257f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103aa565b6103a061044b366004615362565b610ab1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02546103a0565b6103ee6104853660046153b7565b610b82565b6103a0610ba0565b61049a610bb6565b60405160ff90911681526020016103aa565b6104bf6104ba3660046153b7565b610bbf565b005b6103a06104cf366004615362565b610bf1565b610425610c23565b6103a06104ea3660046153f5565b610c57565b6103a06104fd366004615362565b610cf6565b6103a0610510366004615420565b610dc4565b6103a0610523366004615476565b610f76565b6103a06105363660046153f5565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6104bf61057d3660046153f5565b610fbf565b61058a611087565b6040516001600160e01b031990911681526020016103aa565b6103a06105b1366004615476565b6110e9565b6105c96105c436600461555c565b61116f565b6040516103aa91906155e9565b6103bb6111d2565b6103a06105ec366004615603565b611223565b6103ee6105ff36600461538d565b611383565b6103a0610612366004615362565b611399565b6103a0610625366004615603565b6113a5565b6103a0610638366004615603565b61173c565b6104bf61064b36600461568a565b6117e8565b610425611b17565b6103a06106663660046153f5565b611b3f565b6103a0610679366004615362565b611b90565b6104bf61068c36600461568a565b611b9b565b6103a061069f3660046153f5565b611ddd565b6105c96106b236600461555c565b611e1e565b6103a06106c53660046153f5565b611ee4565b6103a06106d83660046156c9565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104bf61072f36600461568a565b611f20565b6103a061074236600461568a565b611fef565b6103a0600281565b604080516bffffffffffffffffffffffff193360601b166020808301919091525f80356001600160e01b0319166034840152835180840360180181526038909301845282519282019290922082527fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e00905220546001600160a01b031680610802576040517f4bf4de4e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61084c5f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b03861692915050612069565b905080515f0361085a575050565b5f8180602001905181019061086f9190615742565b9050306001600160a01b031663c74b5211826060015180602001905181019061089891906157de565b6040518263ffffffff1660e01b81526004016108b491906158ef565b5f604051808303815f87803b1580156108cb575f80fd5b505af11580156108dd573d5f803e3d5ffd5b50505060208201516040830151835161090193506001600160a01b03169190612076565b505050565b60605f80846001600160a01b0316846040516109229190615990565b5f60405180830381855af49150503d805f811461095a576040519150601f19603f3d011682016040523d82523d5f602084013e61095f565b606091505b509150915061096f858383612152565b925050505b92915050565b5f806109846121c7565b90505f61099082612346565b90508181106109a1575f9250505090565b6109ab81836159ba565b9250505090565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610a03906159cd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2f906159cd565b8015610a7a5780601f10610a5157610100808354040283529160200191610a7a565b820191905f5260205f20905b815481529060010190602001808311610a5d57829003601f168201915b505050505091505090565b5f610974825f61245f565b5f80610a9a61250c565b9050610aa7818585612515565b5060019392505050565b7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e11545f906001600160a01b03168015610b72575f816001600160a01b0316631540aa896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b459190615a05565b90508015610b7057610b68610b5985612522565b670de0b6b3a76400008361252e565b949350505050565b505b610b7b83612522565b9392505050565b5f610b95610b8e61250c565b5f36612606565b610b68848484612ba9565b5f610bb1610bac6121c7565b612346565b905090565b5f610bb1612bd6565b6040517f1b517b1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8181527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee6006020526040812054610974565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005b546001600160a01b031692915050565b5f80610c61612c13565b90505f610c8c7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b9050818110610c9e57505f9392505050565b5f610cb8610caa610bb6565b6103d69060ff16600a615aff565b9050610cc482846159ba565b610ccf825f19615b1e565b1015610ce057505f19949350505050565b610ced6103d683856159ba565b95945050505050565b7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e11545f906001600160a01b03168015610dbb575f816001600160a01b0316631540aa896040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8a9190615a05565b90508015610db957610b686103d685610dab84670de0b6b3a76400006159ba565b670de0b6b3a764000061252e565b505b610b7b83610a85565b5f610dcd612c3c565b610dd8610b8e61250c565b610de0610c23565b6001600160a01b031663d505accf610df661250c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018a90526064810188905260ff8716608482015260a4810186905260c4810185905260e4015f604051808303815f87803b158015610e5f575f80fd5b505af1925050508015610e70575060015b610f375786610e7d610c23565b6001600160a01b031663dd62ed3e610e9361250c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa158015610edb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eff9190615a05565b1015610f37576040517fb78cb0dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f418787612cbd565b9050610f6c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b9695505050505050565b5f610f7f612c3c565b610f8a610b8e61250c565b610f948383612cbd565b905061097460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f610fc861250c565b9050610fd2611b17565b6001600160a01b0316816001600160a01b03161461102c576040517f068ca9d80000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024015b60405180910390fd5b816001600160a01b03163b5f0361107a576040517fc2f31e5e0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401611023565b61108382612d6c565b5050565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080545f9190600160a01b900460ff166110c1575f6110e3565b7f8fb36037000000000000000000000000000000000000000000000000000000005b91505090565b5f6110f2612c3c565b6110fd610b8e61250c565b825f03611136576040517f01aeea5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821661115d57604051630d23cf4160e11b815260040160405180910390fd5b611165612df7565b610f948383612f51565b6040805160208101909152606081523330146111b7576040517f5c427cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111ca6001600160a01b03841683610906565b815292915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0091610a03906159cd565b5f61122f610b8e61250c565b5f7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e11546040517f5aa42e1c0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820188905290911690635aa42e1c906044016020604051808303815f875af11580156112b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112dc9190615b40565b905080611318576040517fa124f38900000000000000000000000000000000000000000000000000000000815260048101869052602401611023565b5f61132284611ee4565b905080861115611377576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810187905260448101829052606401611023565b610f6c8686865f612fd0565b5f61138f610b8e61250c565b610b7b83836132ca565b5f61097482600161245f565b5f6113ae612c3c565b6113b9610b8e61250c565b835f036113f2576040517fbb464a5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316158061140f57506001600160a01b038216155b1561142d57604051630d23cf4160e11b815260040160405180910390fd5b611435612df7565b5f61143e61097a565b90505f7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e1154604080517fdc71003900000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921692505f91839163dc7100399160048083019260209291908290030181865afa1580156114c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e99190615a05565b90505f8115611525576127106114fe83610a85565b61150a90612711615b59565b6115149190615b1e565b61151e9089615b70565b9050611533565b611530600a89615b70565b90505b6115ac8161153f610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611583573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a79190615a05565b6132e1565b6115b5846135af565b5f6115bf87611ddd565b905080891115611614576040517ffe9cceec0000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152602481018a905260448101829052606401611023565b5f61161e8a611b90565b6040517fd8b3b0b4000000000000000000000000000000000000000000000000000000008152600481018290529091505f906001600160a01b0387169063d8b3b0b4906024016020604051808303815f875af1158015611680573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a49190615a05565b905080156116f4576116b581610a85565b6116bf908c6159ba565b97506116de6116cc61250c565b8b8b8b6116d986886159ba565b6137f6565b6116e889826138bd565b50505050505050611713565b6117086116ff61250c565b8b8b8e866137f6565b8a9750505050505050505b610b7b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f611745612c3c565b611750610b8e61250c565b5f61175a83611ee4565b9050808511156117af576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401611023565b6117bc8585856001612fd0565b915050610b7b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6117f0612c3c565b6117fb610b8e61250c565b805f8167ffffffffffffffff811115611816576118166154a4565b60405190808252806020026020018201604052801561183f578160200160208202803683370190505b5090505f805f61184d61097a565b905061187860017f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b5f5b85811015611aae576118f288888381811061189757611897615b83565b90506020028101906118a99190615b97565b6118b79060208101906153f5565b6001600160a01b03165f9081527f48932b860eb451ad240d4fe2b46522e5a0ac079d201fe50d4e0be078c75b54006020526040902054151590565b611928576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87878281811061193a5761193a615b83565b905060200281019061194c9190615b97565b61195a9060208101906153f5565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015611995573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b99190615a05565b92506119c5858461390a565b15155f036119f957828585815181106119e0576119e0615b83565b6020908102919091010152836119f581615bd3565b9450505b611aa5888883818110611a0e57611a0e615b83565b9050602002810190611a209190615b97565b611a2e906020810190615beb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508c92508b9150859050818110611a7657611a76615b83565b9050602002810190611a889190615b97565b611a969060208101906153f5565b6001600160a01b031690610906565b5060010161187a565b50611ad75f7f054644eb87255c1c6a2d10801735f52fa3b9d6e4477dbed74914d03844ab660055565b611ae08461396f565b611ae9816135af565b505050505061108360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f807ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00610c47565b5f80611b49612c13565b90505f611b747f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b9050818110611b8657505f9392505050565b610b6881836159ba565b5f610974825f613cd6565b303314611bd6576040517f29507dbf000000000000000000000000000000000000000000000000000000008152336004820152602401611023565b805f8167ffffffffffffffff811115611bf157611bf16154a4565b604051908082528060200260200182016040528015611c1a578160200160208202803683370190505b5090505f805f5b84811015611dcb57611c3e87878381811061189757611897615b83565b611c74576040517f2356a16d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b868682818110611c8657611c86615b83565b9050602002810190611c989190615b97565b611ca69060208101906153f5565b6001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ce1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d059190615a05565b9150611d11848361390a565b15155f03611d455781848481518110611d2c57611d2c615b83565b602090810291909101015282611d4181615bd3565b9350505b611dc2878783818110611d5a57611d5a615b83565b9050602002810190611d6c9190615b97565b611d7a906020810190615beb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508b92508a9150859050818110611a7657611a76615b83565b50600101611c21565b50611dd58361396f565b505050505050565b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610974905f61245f565b6040805160208101909152606081526001600160a01b038316611e6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611ece8484604051602401611e84929190615c4c565b60408051601f198184030181529190526020810180516001600160e01b03167f9569bf28000000000000000000000000000000000000000000000000000000001790523090613d72565b905080806020019051810190610b689190615c6d565b6001600160a01b0381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006020526040812054610974565b611f28612c3c565b611f33610b8e61250c565b805f5b81811015611fc457611fbb848483818110611f5357611f53615b83565b9050602002810190611f659190615b97565b611f73906020810190615beb565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250879150859050818110611a7657611a76615b83565b50600101611f36565b505061108360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f611ffb610b8e61250c565b5f8290036120125761200b61097a565b9050610974565b5f61201b61097a565b90506120588484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061396f92505050565b612061816135af565b610b6861097a565b6060610b7b83835f613dc6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167f095ea7b3000000000000000000000000000000000000000000000000000000001790526120e08482613e6e565b61214c576040516001600160a01b0384811660248301525f604483015261214291869182169063095ea7b3906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613f0b565b61214c8482613f0b565b50505050565b6060826121675761216282613f85565b610b7b565b815115801561217e57506001600160a01b0384163b155b156121c0576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611023565b5080610b7b565b5f806121d1613fca565b90506001600160a01b038116156122ce57806001600160a01b031663722713f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122429190615a05565b61224a613ffc565b612252610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612296573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ba9190615a05565b6122c49190615b70565b6110e39190615b70565b6122d6613ffc565b6122de610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612322573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c49190615a05565b5f806123d9604080516060810182525f80825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f006040805160608101825291546001600160a01b0381168352600160a01b810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b6020810151909150429061ffff1615806123fb5750604082015163ffffffff16155b806124105750816040015163ffffffff168111155b1561241e57505f9392505050565b610b68826040015163ffffffff168261243791906159ba565b6124419086615b59565b602084015161ffff1661245a6127106301e13380615b59565b61252e565b5f806124897f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b905080156124df576124da61249c61097a565b6124a7906001615b70565b6124d17f000000000000000000000000000000000000000000000000000000000000000084615b70565b86919086614023565b610b68565b610b688460017f000000000000000000000000000000000000000000000000000000000000000086614023565b5f610bb1614066565b610901838383600161408c565b5f610974826001613cd6565b5f838302815f1985870982811083820303915050805f036125625783828161255857612558615b0a565b0492505050610b7b565b80841161259b576040517f227bc15300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6126146004828486615cf7565b61261d91615d1e565b90505f806001600160e01b031983167f23b872dd000000000000000000000000000000000000000000000000000000000361278f575f6126603660048184615cf7565b81019061266d91906153b7565b50509050612679611b17565b60405163077d973760e41b81526001600160a01b0383811660048301523060248301526001600160e01b03198716604483015291909116906377d973709060640160408051808303815f875af11580156126d5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126f99190615d53565b5050612703611b17565b60405163077d973760e41b81526001600160a01b0389811660048301523060248301526001600160e01b03198716604483015291909116906377d973709060640160408051808303815f875af115801561275f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127839190615d53565b9093509150612a749050565b7f6e553f65000000000000000000000000000000000000000000000000000000006001600160e01b0319841614806127f057507f94bf804d000000000000000000000000000000000000000000000000000000006001600160e01b03198416145b156128b0575f6128033660048184615cf7565b8101906128109190615476565b91505061281b611b17565b60405163077d973760e41b81526001600160a01b0383811660048301523060248301526001600160e01b03198716604483015291909116906377d973709060640160408051808303815f875af1158015612877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289b9190615d53565b50506127836128a8611b17565b8830876141b5565b6001600160e01b031983167f50921b23000000000000000000000000000000000000000000000000000000000361290b575f6128ef3660048184615cf7565b8101906128fc9190615420565b5050505091505061281b611b17565b7fba087652000000000000000000000000000000000000000000000000000000006001600160e01b03198416148061296c57507fb460af94000000000000000000000000000000000000000000000000000000006001600160e01b03198416145b15612998575f61297f3660048184615cf7565b81019061298c9190615603565b92505050612679611b17565b6001600160e01b031983167fa9059cbb0000000000000000000000000000000000000000000000000000000003612a5b576129d1611b17565b60405163077d973760e41b81526001600160a01b0388811660048301523060248301526001600160e01b03198616604483015291909116906377d973709060640160408051808303815f875af1158015612a2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a519190615d53565b9092509050612a74565b612a6e612a66611b17565b8730866141b5565b90925090505b81612ba05763ffffffff811615612b63577ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b178155612ada611b17565b6001600160a01b03166394c7d7ee8888886040518463ffffffff1660e01b8152600401612b0993929190615d85565b5f604051808303815f87803b158015612b20575f80fd5b505af1158015612b32573d5f803e3d5ffd5b505082547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690925550612ba09050565b6040517f068ca9d80000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401611023565b611dd5836142d6565b5f80612bb361250c565b9050612bc0858285614391565b612bcb85858561443e565b506001949350505050565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e009050600281546110e39190600160a01b900460ff16615dc3565b5f7f0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d005b54919050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612cb7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f825f03612cf7576040517f182b250f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216612d1e57604051630d23cf4160e11b815260040160405180910390fd5b612d26612df7565b5f612d3184846144cd565b9050805f03610b7b576040517f8b34d30a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080546001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b5f612e89604080516060810182525f80825260208201819052918101919091527f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f006040805160608101825291546001600160a01b0381168352600160a01b810461ffff166020840152760100000000000000000000000000000000000000000000900463ffffffff1690820152919050565b90505f612e94610ba0565b9050612e9e61454c565b5f612ea882611b90565b9050805f03612eb657505050565b612edf60017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b8251612eeb90826145c3565b612f135f7faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b60408051838152602081018390527fbb92eb7521ac4e9e56f7e75ea06a10cbc121c444e5d175fff5e8e0bc9e804937910160405180910390a1505050565b5f80612f5c83611b3f565b905080841115612fb1576040517f284ff6670000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810185905260448101829052606401611023565b5f612fbb85611399565b9050610b68612fc861250c565b858388614610565b5f845f0361300a576040517ff10cc93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416158061302757506001600160a01b038316155b1561304557604051630d23cf4160e11b815260040160405180910390fd5b61304d612df7565b5f805f61305861097a565b7fb37e8684757599da669b8aea811ee2b3693b2582d2c730fab3f4965fa2ec3e1154604080517fdc71003900000000000000000000000000000000000000000000000000000000815290519293506001600160a01b03909116915f9161310691849163dc7100399160048083019260209291908290030181865afa1580156130e2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d69190615a05565b90505f5b600a8110156131b55761311c8b610a85565b9550613126610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561316a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061318e9190615a05565b94506131ad8261319d886146a0565b6131a79190615b70565b866132e1565b60010161310a565b506131bf836135af565b866131ed576131cd8a610a85565b95506131e36131da61250c565b8a8a898e6137f6565b5050505050610b68565b6040517fd8b3b0b4000000000000000000000000000000000000000000000000000000008152600481018b90525f906001600160a01b0384169063d8b3b0b4906024016020604051808303815f875af115801561324c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132709190615a05565b9050805f036132a3576132828b610a85565b965061329861328f61250c565b8b8b8a8f6137f6565b505050505050610b68565b5f6132af8c8c8c6146c0565b90506132bb8a836138bd565b9b9a5050505050505050505050565b5f806132d461250c565b9050610aa781858561443e565b815f036132ec575050565b5f818310610901575f8060605f613301614740565b90505f815167ffffffffffffffff81111561331e5761331e6154a4565b604051908082528060200260200182016040528015613347578160200160208202803683370190505b50905061335487896159ba565b82519096505f90815b881580159061336b57508181105b156135995761339385828151811061338557613385615b83565b6020026020010151826147bc565b9550885f1b865f815181106133aa576133aa615b83565b602002602001018181525050613440866040516024016133ca9190615ddc565b60408051601f198184030181529190526020810180516001600160e01b03167fbe1946da00000000000000000000000000000000000000000000000000000000179052865187908490811061342157613421615b83565b60200260200101516001600160a01b031661090690919063ffffffff16565b50613449610c23565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561348d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b19190615a05565b9250828b11156134cc576134c5838c6159ba565b98506134d0565b5f98505b8481815181106134e2576134e2615b83565b60200260200101516001600160a01b031663454dab236040518163ffffffff1660e01b8152600401602060405180830381865afa158015613525573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135499190615a05565b9650613555848861390a565b15155f03613589578684898151811061357057613570615b83565b60209081029190910101528761358581615bd3565b9850505b61359281615bd3565b905061335d565b506135a38361396f565b50505050505050505050565b5f6135b861097a565b9050818110156135c6575050565b5f6136266040805180820182525f80825260209182015281518083019092527f9399757a27831a6cfb6cf4cd5c97a908a2f8f41e95a5952fbf83a04e05288400546001600160a01b038116835261ffff600160a01b909104169082015290565b90505f613634610caa610bb6565b90505f80835f01516001600160a01b031663ea26266c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061369b9190615e1e565b6001600160a01b0316639617bcca6136b28561487f565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254602088015160026136e3610bb6565b6136ed9190615e39565b6040516001600160e01b031960e087901b1681526fffffffffffffffffffffffffffffffff9094166004850152602484019290925261ffff16604483015260ff16606482015260840160408051808303815f875af1158015613751573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137759190615e52565b90925090506001600160a01b038216158061378e575080155b1561379b57505050505050565b6137c460017faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b6137ce82826145c3565b611dd55f7faef487a7a52e82ae7bbc470b42be72a1d3c066fb83773bf99cce7e6a7df2f90055565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e006001600160a01b038681169085161461383557613835848784614391565b61383f84836138bd565b8054613855906001600160a01b031686856148d8565b836001600160a01b0316856001600160a01b0316876001600160a01b03167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db86866040516138ad929190918252602082015260400190565b60405180910390a4505050505050565b6001600160a01b0382166138ff576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401611023565b611083825f83614909565b5f805b83518110156139685783818151811061392857613928615b83565b60200260200101515f0315613968578284828151811061394a5761394a615b83565b6020026020010151036139605760019150613968565b60010161390d565b5092915050565b5f61398c60405180604001604052805f8152602001606081525090565b5f805f6139988661499e565b80519091505f806139a7614bd7565b6001600160a01b031663b3596f076139bd610c23565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201526024016040805180830381865afa1580156139fe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a229190615e7e565b915091508267ffffffffffffffff811115613a3f57613a3f6154a4565b604051908082528060200260200182016040528015613a8357816020015b604080518082019091525f8082526020820152815260200190600190039081613a5d5790505b5060208801525f5b83811015613c6f57848181518110613aa557613aa5615b83565b60200260200101515f0315613c6f57613b0a858281518110613ac957613ac9615b83565b60200260200101515f9081527f150144dd6af711bac4392499881ec6649090601bd196a5ece5174c1400b1f70060205260409020546001600160a01b031690565b6040805160048152602481019091526020810180516001600160e01b03167f722713f700000000000000000000000000000000000000000000000000000000179052909750613b63906001600160a01b03891690610906565b806020019051810190613b769190615a05565b9850848181518110613b8a57613b8a615b83565b602002602001015188602001518281518110613ba857613ba8615b83565b602090810291909101015152613bf1613bd5613bc584600a615aff565b613bcf908c615b59565b85614bfe565b6002613bdf610bb6565b613be99190615e39565b60ff16614c09565b88602001518281518110613c0757613c07615b83565b60200260200101516020018181525050613c5b858281518110613c2c57613c2c615b83565b602002602001015189602001518381518110613c4a57613c4a615b83565b602002602001015160200151614c61565b613c659087615ea0565b9550600101613a8b565b508415613c7f57613c7f85614caf565b613c876121c7565b8752613c9287614d44565b7ff1adf92ee604e0c353dfd4481bacd575b0419a97b473374d7822e0c3cdfb29548486604051613cc3929190615ec7565b60405180910390a1505050505050505050565b5f80613d007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90508015613d48576124da613d357f000000000000000000000000000000000000000000000000000000000000000083615b70565b613d3d61097a565b6124d1906001615b70565b610b687f000000000000000000000000000000000000000000000000000000000000000085615b59565b60605f80846001600160a01b031684604051613d8e9190615990565b5f60405180830381855afa9150503d805f811461095a576040519150601f19603f3d011682016040523d82523d5f602084013e61095f565b606081471015613e04576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611023565b5f80856001600160a01b03168486604051613e1f9190615990565b5f6040518083038185875af1925050503d805f8114613e59576040519150601f19603f3d011682016040523d82523d5f602084013e613e5e565b606091505b5091509150610f6c868383612152565b5f805f846001600160a01b031684604051613e899190615990565b5f604051808303815f865af19150503d805f8114613ec2576040519150601f19603f3d011682016040523d82523d5f602084013e613ec7565b606091505b5091509150818015613ef1575080511580613ef1575080806020019051810190613ef19190615b40565b801561096f5750505050506001600160a01b03163b151590565b5f613f1f6001600160a01b03841683612069565b905080515f14158015613f43575080806020019051810190613f419190615b40565b155b15610901576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611023565b805115613f955780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f7f08c469289c3f85d9b575f3ae9be6831541ff770a06ea135aa343a4de7c962d005b546001600160a01b0316919050565b5f7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a77300612c36565b5f8061403086868661252e565b905061403b83614ec7565b801561405657505f848061405157614051615b0a565b868809115b15610ced57610f6c600182615b70565b5f80614070614ef3565b90506001600160a01b038116614087573391505090565b919050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0385166140ef576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401611023565b6001600160a01b038416614131576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401611023565b6001600160a01b038086165f908152600183016020908152604080832093881683529290522083905581156141ae57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516141a591815260200190565b60405180910390a35b5050505050565b6040516001600160a01b03848116602483015283811660448301526001600160e01b0319831660648301525f9182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b03167fb7009613000000000000000000000000000000000000000000000000000000001790525161423c9190615990565b5f60405180830381855afa9150503d805f8114614274576040519150601f19603f3d011682016040523d82523d5f602084013e614279565b606091505b509150915081156142cb5760408151106142ab57808060200190518101906142a19190615d53565b90945092506142cb565b60208151106142cb57808060200190518101906142c89190615b40565b93505b505094509492505050565b6001600160e01b031981165f9081527fd334d8b26e68f82b7df26f2f64b6ffd2aaae5e2fc0e8c144c4b3598dcddd4b0060205260409020546001600160a01b031680614320575050565b604080516001600160e01b031984166024808301919091528251808303909101815260449091019091526020810180516001600160e01b03167f2dc7895200000000000000000000000000000000000000000000000000000000179052610901906001600160a01b03831690610906565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f19811461214c5781811015614430576040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810182905260448101839052606401611023565b61214c84848484035f61408c565b6001600160a01b038316614480576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401611023565b6001600160a01b0382166144c2576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401611023565b610901838383614909565b5f806144d883610c57565b90508084111561452d576040517f79012fb20000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810185905260448101829052606401611023565b5f61453785611b90565b9050610b6861454461250c565b858784614610565b7f239dd7e43331d2af55e2a25a6908f3bcec2957025f1459db97dcdc37c0003f0061457642614f1b565b815463ffffffff91909116760100000000000000000000000000000000000000000000027fffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffff909116179055565b6001600160a01b038216614605576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401611023565b6110835f8383614909565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e008054614648906001600160a01b0316863086614f64565b61465284836145c3565b836001600160a01b0316856001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d785856040516141a5929190918252602082015260400190565b5f6146b66146af600284615b59565b6064614bfe565b6109749083615b70565b5f806146cb83611ee4565b905080851115614720576040517fb94abeec0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024810186905260448101829052606401611023565b5f61472a86610cf6565b9050610ced61473761250c565b8686848a6137f6565b60607fd243afa3da07e6bdec20fdd573a17f99411aa8a62ae64ca2c426d3a86ae0ac008054604080516020808402820181019092528281529291908301828280156147b257602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311614794575b5050505050905090565b60607f45a704819a9dcb1bb5b8cff129eda642cf0e926a9ef104e27aa53f1d1fa47b006040516bffffffffffffffffffffffff19606086901b166020820152603481018490525f906054016040516020818303038152906040528051906020012081526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561487257602002820191905f5260205f20905b81548152602001906001019080831161485e575b5050505050905092915050565b5f6fffffffffffffffffffffffffffffffff8211156148d4576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401611023565b5090565b6040516001600160a01b0383811660248301526044820183905261090191859182169063a9059cbb90606401612110565b604080516001600160a01b038581166024830152848116604483015260648083018590528351808403909101815260849092019092526020810180516001600160e01b03167f32293ccc0000000000000000000000000000000000000000000000000000000017905261214c917f00000000000000000000000000000000000000000000000000000000000000001690610906565b80516060905f8190036149b2575090919050565b5f6149be826002615b59565b67ffffffffffffffff8111156149d6576149d66154a4565b6040519080825280602002602001820160405280156149ff578160200160208202803683370190505b509050835f60605b825115614bc357614a19856002615b59565b67ffffffffffffffff811115614a3157614a316154a4565b604051908082528060200260200182016040528015614a5a578160200160208202803683370190505b5090505f805b8451811015614bb157614a8c86868381518110614a7f57614a7f615b83565b602002602001015161390a565b614ba95783865103614ab257614aaf8687516002614aaa9190615b59565b614f9d565b95505b848181518110614ac457614ac4615b83565b6020026020010151868581518110614ade57614ade615b83565b6020908102919091010152614af284615bd3565b93505f614b17868381518110614b0a57614b0a615b83565b6020026020010151615037565b5190508015614ba7575f5b81811015614ba55783855103614b4757614b448586516002614aaa9190615b59565b94505b614b5c878481518110614b0a57614b0a615b83565b8181518110614b6d57614b6d615b83565b6020026020010151858581518110614b8757614b87615b83565b6020908102919091010152614b9b84615bd3565b9350600101614b22565b505b505b600101614a60565b50614bbb826150b5565b935050614a07565b614bcc846150b5565b979650505050505050565b5f7f0d761ae54d86fc3be4f1f2b44ade677efb1c84a85fc6bb1d087dc42f1e319a00613fed565b5f610b7b8284615b1e565b5f60128203614c19575081610974565b6012821115614c4257614c2d6012836159ba565b614c3890600a615aff565b61200b9084615b59565b61200b83614c518460126159ba565b614c5c90600a615aff565b614bfe565b5f8281527f656f5ca8c676f20b936e991a840e1130bdd664385322f33b6642ec86729ee60060205260408120805490839055614c9c8161523f565b614ca58461523f565b610b689190615f13565b5f811215614d0357614cc8614cc382615f32565b61529d565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a7730080545f90614cf89084906159ba565b90915550613fc79050565b614d0c8161529d565b7f24e02552e88772b8e8fd15f3e6699ba530635ffc6b52322da922b0b497a7730080545f90614d3c908490615b70565b909155505050565b5f80527fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf0006020527ff1a5acf64f330322c7b96c9822a41f340e067e2cefe46839a37cd61f2a91150c54614d945750565b6020810151515f805b8281101561214c57614e0d7fc2733c187287f795e2e6e84d35552a190e774125367241c3e99e955f4babf0005f015f86602001518481518110614de257614de2615b83565b60200260200101515f015181526020019081526020015f2054855f0151670de0b6b3a764000061252e565b915083602001518181518110614e2557614e25615b83565b602002602001015160200151821015614ebf5783602001518181518110614e4e57614e4e615b83565b60200260200101515f015184602001518281518110614e6f57614e6f615b83565b60209081029190910181015101516040517f8f56989d0000000000000000000000000000000000000000000000000000000081526004810192909252602482015260448101839052606401611023565b600101614d9d565b5f6002826003811115614edc57614edc615f68565b614ee69190615f7c565b60ff166001149050919050565b5f807f68262fe08792a71a690eb5eb2de15df1b0f463dd786bf92bdbd5f0f0d1ae8b00610c47565b5f63ffffffff8211156148d4576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526020600482015260248101839052604401611023565b6040516001600160a01b03848116602483015283811660448301526064820183905261214c9186918216906323b872dd90608401612110565b60605f8267ffffffffffffffff811115614fb957614fb96154a4565b604051908082528060200260200182016040528015614fe2578160200160208202803683370190505b5090505f5b845181101561502f5784818151811061500257615002615b83565b602002602001015182828151811061501c5761501c615b83565b6020908102919091010152600101614fe7565b509392505050565b5f8181527f82411e549329f2815579116a6c5e60bff72686c93ab5dba4d06242cfaf96890060209081526040918290208054835181840281018401909452808452606093928301828280156150a957602002820191905f5260205f20905b815481526020019060010190808311615095575b50505050509050919050565b60605f825167ffffffffffffffff8111156150d2576150d26154a4565b6040519080825280602002602001820160405280156150fb578160200160208202803683370190505b5090505f805b84518110156151a65784818151811061511c5761511c615b83565b60200260200101515f1415801561515457506151528386838151811061514457615144615b83565b6020026020010151846152db565b155b1561519e5784818151811061516b5761516b615b83565b602002602001015183838151811061518557615185615b83565b60209081029190910101528161519a81615bd3565b9250505b600101615101565b505f8167ffffffffffffffff8111156151c1576151c16154a4565b6040519080825280602002602001820160405280156151ea578160200160208202803683370190505b5090505f5b828110156152365783818151811061520957615209615b83565b602002602001015182828151811061522357615223615b83565b60209081029190910101526001016151ef565b50949350505050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156148d4576040517f24775e0600000000000000000000000000000000000000000000000000000000815260048101839052602401611023565b5f808212156148d4576040517fa8ce443200000000000000000000000000000000000000000000000000000000815260048101839052602401611023565b5f805b8281101561531857838582815181106152f9576152f9615b83565b602002602001015103615310576001915050610b7b565b6001016152de565b505f949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610b7b6020830184615322565b5f60208284031215615372575f80fd5b5035919050565b6001600160a01b0381168114613fc7575f80fd5b5f806040838503121561539e575f80fd5b82356153a981615379565b946020939093013593505050565b5f805f606084860312156153c9575f80fd5b83356153d481615379565b925060208401356153e481615379565b929592945050506040919091013590565b5f60208284031215615405575f80fd5b8135610b7b81615379565b803560ff81168114614087575f80fd5b5f805f805f8060c08789031215615435575f80fd5b86359550602087013561544781615379565b94506040870135935061545c60608801615410565b9598949750929560808101359460a0909101359350915050565b5f8060408385031215615487575f80fd5b82359150602083013561549981615379565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156154db576154db6154a4565b60405290565b6040805190810167ffffffffffffffff811182821017156154db576154db6154a4565b604051601f8201601f1916810167ffffffffffffffff8111828210171561552d5761552d6154a4565b604052919050565b5f67ffffffffffffffff82111561554e5761554e6154a4565b50601f01601f191660200190565b5f806040838503121561556d575f80fd5b823561557881615379565b9150602083013567ffffffffffffffff811115615593575f80fd5b8301601f810185136155a3575f80fd5b80356155b66155b182615535565b615504565b8181528660208385010111156155ca575f80fd5b816020840160208301375f602083830101528093505050509250929050565b602081525f8251602080840152610b686040840182615322565b5f805f60608486031215615615575f80fd5b83359250602084013561562781615379565b9150604084013561563781615379565b809150509250925092565b5f8083601f840112615652575f80fd5b50813567ffffffffffffffff811115615669575f80fd5b6020830191508360208260051b8501011115615683575f80fd5b9250929050565b5f806020838503121561569b575f80fd5b823567ffffffffffffffff8111156156b1575f80fd5b6156bd85828601615642565b90969095509350505050565b5f80604083850312156156da575f80fd5b82356156e581615379565b9150602083013561549981615379565b5f82601f830112615704575f80fd5b81516157126155b182615535565b818152846020838601011115615726575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215615752575f80fd5b815167ffffffffffffffff811115615768575f80fd5b820160808185031215615779575f80fd5b6157816154b8565b815161578c81615379565b8152602082015161579c81615379565b602082015260408281015190820152606082015167ffffffffffffffff8111156157c4575f80fd5b6157d0868285016156f5565b606083015250949350505050565b5f602082840312156157ee575f80fd5b815167ffffffffffffffff811115615804575f80fd5b8201601f81018413615814575f80fd5b805167ffffffffffffffff81111561582e5761582e6154a4565b8060051b61583e60208201615504565b91825260208184018101929081019087841115615859575f80fd5b6020850192505b83831015614bcc57825167ffffffffffffffff81111561587e575f80fd5b85016040818a03601f19011215615893575f80fd5b61589b6154e1565b60208201516158a981615379565b8152604082015167ffffffffffffffff8111156158c4575f80fd5b6158d38b6020838601016156f5565b6020830152508084525050602082019150602083019250615860565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015615984577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261596e6040870182615322565b9550506020938401939190910190600101615915565b50929695505050505050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610974576109746159a6565b600181811c908216806159e157607f821691505b6020821081036159ff57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215615a15575f80fd5b5051919050565b6001815b6001841115615a5757808504811115615a3b57615a3b6159a6565b6001841615615a4957908102905b60019390931c928002615a20565b935093915050565b5f82615a6d57506001610974565b81615a7957505f610974565b8160018114615a8f5760028114615a9957615ab5565b6001915050610974565b60ff841115615aaa57615aaa6159a6565b50506001821b610974565b5060208310610133831016604e8410600b8410161715615ad8575081810a610974565b615ae45f198484615a1c565b805f1904821115615af757615af76159a6565b029392505050565b5f610b7b8383615a5f565b634e487b7160e01b5f52601260045260245ffd5b5f82615b2c57615b2c615b0a565b500490565b80518015158114614087575f80fd5b5f60208284031215615b50575f80fd5b610b7b82615b31565b8082028115828204841417610974576109746159a6565b80820180821115610974576109746159a6565b634e487b7160e01b5f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112615bc9575f80fd5b9190910192915050565b5f5f198203615be457615be46159a6565b5060010190565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615c1e575f80fd5b83018035915067ffffffffffffffff821115615c38575f80fd5b602001915036819003821315615683575f80fd5b6001600160a01b0383168152604060208201525f610b686040830184615322565b5f60208284031215615c7d575f80fd5b815167ffffffffffffffff811115615c93575f80fd5b820160208185031215615ca4575f80fd5b6040516020810167ffffffffffffffff81118282101715615cc757615cc76154a4565b604052815167ffffffffffffffff811115615ce0575f80fd5b615cec868285016156f5565b825250949350505050565b5f8085851115615d05575f80fd5b83861115615d11575f80fd5b5050820193919092039150565b80356001600160e01b03198116906004841015613968576001600160e01b0319808560040360031b1b82161691505092915050565b5f8060408385031215615d64575f80fd5b615d6d83615b31565b9150602083015163ffffffff81168114615499575f80fd5b6001600160a01b038416815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b60ff8181168382160190811115610974576109746159a6565b602080825282518282018190525f918401906040840190835b81811015615e13578351835260209384019390920191600101615df5565b509095945050505050565b5f60208284031215615e2e575f80fd5b8151610b7b81615379565b60ff8281168282160390811115610974576109746159a6565b5f8060408385031215615e63575f80fd5b8251615e6e81615379565b6020939093015192949293505050565b5f8060408385031215615e8f575f80fd5b505080516020909101519092909150565b8082018281125f831280158216821582161715615ebf57615ebf6159a6565b505092915050565b604080825283519082018190525f9060208501906060840190835b81811015615f00578351835260209384019390920191600101615ee2565b5050602093909301939093525092915050565b8181035f831280158383131683831282161715613968576139686159a6565b5f7f80000000000000000000000000000000000000000000000000000000000000008203615f6257615f626159a6565b505f0390565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680615f8e57615f8e615b0a565b8060ff8416069150509291505056fea2646970667358221220db6cb75f1d0e3b2fd43bda28119fe8e428bbe6f4e00f285b2ac14cc8a38dec6264736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000042000000000000000000000000000000000000060000000000000000000000004195daa3500e418e864954e1abe9e1d710ce824e00000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000e7d80555256711790b4a7da8bebc5f5c1cddf1f0000000000000000000000003ba9022735c7d570ad99563b428e0e122cb0e1ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000b6ca12645b511f691c433c673d3ea5c68bc410e3000000000000000000000000000000000000000000000000000000000000001258657262657275732045766572677265656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036258470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008aad082f04d04d1db2e92160baa630e31c22c0730000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000341d2459606feb164a986767cb72ddd8230744fe0000000000000000000000008e95e58677759d1328ad36f316a3796a693c783e000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000f6a9bd8f6dc537675d499ac1ca14f2c55d8b556900000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001f75844a2905eba5dd8898fb8a289967b0ab2a29000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000010000000000000000000000001f75844a2905eba5dd8898fb8a289967b0ab2a290000000000000000000000000000000000000000000000000000000000000708