0 txs
0 calls
constructor
No constructor.
functions
addressProvider
viewfunction addressProvider() view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getVault
viewfunction getVault(address _asset) view returns (address)
isLongPool
viewfunction isLongPool() view returns (bool)
owner
viewfunction owner() view returns (address)
positions
viewfunction positions(uint256) view returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
quoteTokens
viewfunction quoteTokens(address) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
vaults
viewfunction vaults(address) view returns (address)
__BaseWasabiPool_init
nonpayablefunction __BaseWasabiPool_init(bool _isLongPool, address _addressProvider, address _manager)
addCollateral
payablefunction addCollateral(tuple _request, tuple _signature) payable returns (tuple)
addQuoteToken
nonpayablefunction addQuoteToken(address _token)
addVault
nonpayablefunction addVault(address _vault)
claimCollateralYield
nonpayablefunction claimCollateralYield()
closePosition
payablefunction closePosition(uint8 _payoutType, tuple _request, tuple _signature, tuple _order, bytes _orderSignature) payable
closePosition
payablefunction closePosition(uint8 _payoutType, tuple _request, tuple _signature) payable
initialize
nonpayablefunction initialize(address _addressProvider, address _manager)
liquidatePosition
payablefunction liquidatePosition(uint8 _payoutType, uint256 _interest, tuple _position, tuple[] _swapFunctions, address _referrer) payable
openPosition
payablefunction openPosition(tuple _request, tuple _signature) payable returns (tuple)
openPositionFor
payablefunction openPositionFor(tuple _request, tuple _signature, address _trader) payable returns (tuple)
recordInterest
nonpayablefunction recordInterest(tuple[] _positions, uint256[] _interests, tuple[] _swapFunctions)
renounceOwnership
nonpayablefunction renounceOwnership()
setAddressProvider
nonpayablefunction setAddressProvider(address _addressProvider)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
CollateralAdded
event CollateralAdded(uint256 id, address trader, uint256 downPaymentAdded, uint256 collateralAdded, uint256 principalReduced, uint256 interestPaid)
CollateralRemoved
event CollateralRemoved(uint256 id, address trader, uint256 downPaymentReduced, uint256 collateralReduced, uint256 principalAdded)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
InterestPaid
event InterestPaid(uint256 id, uint256 interestPaid, uint256 principalAdded, uint256 collateralReduced, uint256 downPaymentReduced)
NativeYieldClaimed
event NativeYieldClaimed(address vault, address token, uint256 amount)
NewVault
event NewVault(address indexed pool, address indexed asset, address vault)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PositionClosed
event PositionClosed(uint256 id, address trader, uint256 payout, uint256 principalRepaid, uint256 interestPaid, uint256 feeAmount)
PositionClosedWithOrder
event PositionClosedWithOrder(uint256 id, address trader, uint8 orderType, uint256 payout, uint256 principalRepaid, uint256 interestPaid, uint256 feeAmount)
PositionDecreased
event PositionDecreased(uint256 id, address trader, uint256 payout, uint256 principalRepaid, uint256 interestPaid, uint256 closeFee, uint256 pastFees, uint256 collateralReduced, uint256 downPaymentReduced)
PositionDecreasedWithOrder
event PositionDecreasedWithOrder(uint256 id, address trader, uint8 orderType, uint256 payout, uint256 principalRepaid, uint256 interestPaid, uint256 closeFee, uint256 pastFees, uint256 collateralReduced, uint256 downPaymentReduced)
PositionIncreased
event PositionIncreased(uint256 id, address trader, uint256 downPaymentAdded, uint256 principalAdded, uint256 collateralAdded, uint256 feesAdded)
PositionLiquidated
event PositionLiquidated(uint256 id, address trader, uint256 payout, uint256 principalRepaid, uint256 interestPaid, uint256 feeAmount)
PositionOpened
event PositionOpened(uint256 positionId, address trader, address currency, address collateralCurrency, uint256 downPayment, uint256 principal, uint256 collateralAmount, uint256 feesToBePaid)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
EthReceivedForNonEthCurrency
error EthReceivedForNonEthCurrency()
EthTransferFailed
error EthTransferFailed(uint256 amount, address _target)
FailedInnerCall
error FailedInnerCall()
InsufficientAmountProvided
error InsufficientAmountProvided()
InsufficientCollateralReceived
error InsufficientCollateralReceived()
InsufficientInterest
error InsufficientInterest()
InsufficientPrincipalRepaid
error InsufficientPrincipalRepaid()
InsufficientPrincipalUsed
error InsufficientPrincipalUsed()
InvalidCurrency
error InvalidCurrency()
InvalidInitialization
error InvalidInitialization()
InvalidInput
error InvalidInput()
InvalidInterestAmount
error InvalidInterestAmount()
InvalidOrder
error InvalidOrder()
InvalidPosition
error InvalidPosition()
InvalidSignature
error InvalidSignature()
InvalidTargetCurrency
error InvalidTargetCurrency()
InvalidVault
error InvalidVault()
LiquidationThresholdNotReached
error LiquidationThresholdNotReached()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotInitializing
error NotInitializing()
OrderExpired
error OrderExpired()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PositionAlreadyTaken
error PositionAlreadyTaken()
PriceTargetNotReached
error PriceTargetNotReached()
PrincipalTooHigh
error PrincipalTooHigh()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SenderNotTrader
error SenderNotTrader()
SwapFunctionNeeded
error SwapFunctionNeeded()
TooMuchCollateralSpent
error TooMuchCollateralSpent()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ValueDeviatedTooMuch
error ValueDeviatedTooMuch()
VaultAlreadyExists
error VaultAlreadyExists()
creation bytecode
0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615f926100fd60003960008181612dc301528181612dec0152612f820152615f926000f3fe6080604052600436106101855760003560e01c806357ab320a116100d157806399fbab881161008a578063ba49f47d11610064578063ba49f47d146104f7578063d4ea31f01461050a578063f2fde38b1461051d578063f319b0001461053d57600080fd5b806399fbab8814610456578063a622ee7c14610483578063ad3cb1cc146104b957600080fd5b806357ab320a146103c95780635cd98826146103dc578063715018a6146103ef57806384b0196e1461040457806386d3979b1461042c5780638da5cb5b1461044157600080fd5b80632954018c1161013e5780634f1ef286116101185780634f1ef2861461036057806352d1902d14610373578063546455671461039657806357581511146103a957600080fd5b80632954018c146102eb57806345aab48a14610310578063485cc9551461034057600080fd5b80630aa19397146101915780630eb9af38146101b35780631a5fa2e3146101f057806321de18f11461021057806322c792d91461023a578063256b5a02146102cb57600080fd5b3661018c57005b600080fd5b34801561019d57600080fd5b506101b16101ac366004614fcf565b61055d565b005b3480156101bf57600080fd5b506101d36101ce3660046150c9565b610a1a565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101fc57600080fd5b506101b161020b3660046150c9565b610a73565b34801561021c57600080fd5b5060005461022a9060ff1681565b60405190151581526020016101e7565b61024d610248366004615111565b610afd565b6040516101e79190815181526020808301516001600160a01b039081169183019190915260408084015182169083015260608084015191821690830152610120820190506080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010083015161010083015292915050565b3480156102d757600080fd5b506101b16102e63660046150c9565b610df9565b3480156102f757600080fd5b506000546101d39061010090046001600160a01b031681565b34801561031c57600080fd5b5061022a61032b3660046150c9565b60036020526000908152604090205460ff1681565b34801561034c57600080fd5b506101b161035b366004615173565b611004565b6101b161036e3660046152f1565b611114565b34801561037f57600080fd5b50610388611133565b6040519081526020016101e7565b6101b16103a4366004615362565b611150565b3480156103b557600080fd5b506101b16103c43660046150c9565b611371565b61024d6103d73660046153c0565b6113f8565b61024d6103ea3660046153ff565b6115ba565b3480156103fb57600080fd5b506101b16115cd565b34801561041057600080fd5b506104196115e1565b6040516101e79796959493929190615494565b34801561043857600080fd5b506101b1611692565b34801561044d57600080fd5b506101d3611bd2565b34801561046257600080fd5b5061038861047136600461552c565b60016020526000908152604090205481565b34801561048f57600080fd5b506101d361049e3660046150c9565b6002602052600090815260409020546001600160a01b031681565b3480156104c557600080fd5b506104ea604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101e79190615545565b6101b1610505366004615558565b611c00565b6101b1610518366004615636565b611ff1565b34801561052957600080fd5b506101b16105383660046150c9565b612188565b34801561054957600080fd5b506101b16105583660046156d4565b6121c6565b6105656122cc565b606461056f612304565b6001600160a01b031663c614384c82336040518363ffffffff1660e01b815260040161059c929190615714565b60006040518083038186803b1580156105b457600080fd5b505afa1580156105c8573d6000803e3d6000fd5b50505086851490506105ed5760405163b4fa3fb360e01b815260040160405180910390fd5b600082900361060f5760405163ac8da8e360e01b815260040160405180910390fd5b8560008882828161062257610622615736565b90506101200201604001602081019061063b91906150c9565b905060008989600081811061065257610652615736565b90506101200201606001602081019061066b91906150c9565b90506000805b848110156108435760008c8c8381811061068d5761068d615736565b905061012002018036038101906106a491906157db565b90506106af81612313565b8151600090815260016020526040902054146106de5760405163673f032f60e11b815260040160405180910390fd5b846001600160a01b031681604001516001600160a01b03161461071457604051631eb3268560e31b815260040160405180910390fd5b836001600160a01b031681606001516001600160a01b03161461074a5760405163020adce760e11b815260040160405180910390fd5b60008b8b8481811061075e5761075e615736565b90506020020135905060006107716123e9565b60408085015160c086015160808701519251630e0700c960e41b81526001600160a01b03928316600482015260248101919091526044810192909252919091169063e0700c9090606401602060405180830381865afa1580156107d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc91906157f8565b90508082118061080a575081155b15610828576040516373a4c33f60e11b815260040160405180910390fd5b6108328286615827565b945050600190920191506106719050565b5060008061085b610854898b615910565b8587612461565b9150915082811461087f5760405163b0f8fc9b60e01b815260040160405180910390fd5b60005b868110156109e45760008e8e8381811061089e5761089e615736565b905061012002018036038101906108b591906157db565b905060008d8d848181106108cb576108cb615736565b905060200201359050600060018a6108e3919061591d565b84146108f9576108f4868389612690565b6108fb565b855b9050600061091c8460a001518560e00151846126909092919063ffffffff16565b9050818460e001818151610930919061591d565b90525060a08401805182919061094790839061591d565b90525042608085015261095984612313565b8451600090815260016020526040902055610974828861591d565b9650610980838961591d565b8451604080519182526020820186905260009082015260608101849052608081018390529098507f4013fac4b4e975fa8ffff23c54f8559a67ae4ed54b834624d4e6888f137d95ce9060a00160405180910390a15050600190920191506108829050565b506109f460008660008085612754565b50505050505050610a126001600080516020615f3d83398151915255565b505050505050565b6001600160a01b03818116600090815260026020526040812054909116610a5457604051630681d31960e51b815260040160405180910390fd5b506001600160a01b039081166000908152600260205260409020541690565b610a7b612304565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c9060240160006040518083038186803b158015610abc57600080fd5b505afa158015610ad0573d6000803e3d6000fd5b5050600080546001600160a01b0390941661010002610100600160a81b0319909416939093179092555050565b610b05614f24565b610b0d6122cc565b610b178484612809565b336001600160a01b03831614801590610bb85750600060019054906101000a90046001600160a01b03166001600160a01b03166398d96aa06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba29190615930565b6001600160a01b0316336001600160a01b031614155b15610bd657604051630f23084160e31b815260040160405180910390fd5b61012084013515801590610c0d57506001600160a01b038216610c01610160860161014087016150c9565b6001600160a01b031614155b15610c2b57604051630f23084160e31b815260040160405180910390fd5b6000610c3d60408601602087016150c9565b90506000610c546101ce60408801602089016150c9565b60405163317afabb60e21b8152608088013560048201529091506001600160a01b0382169063c5ebeaec90602401600060405180830381600087803b158015610c9c57600080fd5b505af1158015610cb0573d6000803e3d6000fd5b50505050600080610cea88806101000190610ccb919061594d565b610cd491615910565b85610ce560608c0160408d016150c9565b612461565b915091508760a00135811015610d135760405163406220a960e01b815260040160405180910390fd5b6040516369a3a14960e01b815260608901356004820152602481018290526001600160a01b038416906369a3a1499060440160006040518083038186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050508760800135821115610d9a576040516335f36d1160e21b815260040160405180910390fd5b8760800135821015610dc957610dc983610db88460808c013561591d565b6001600160a01b0387169190612b28565b610dd586898385612b87565b945050505050610df26001600080516020615f3d83398151915255565b9392505050565b6067610e03612304565b6001600160a01b031663c614384c82336040518363ffffffff1660e01b8152600401610e30929190615714565b60006040518083038186803b158015610e4857600080fd5b505afa158015610e5c573d6000803e3d6000fd5b5050600054604051639b845cdd60e01b815260ff909116151560048201523092506001600160a01b0385169150639b845cdd90602401602060405180830381865afa158015610eaf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed39190615930565b6001600160a01b031614610efa57604051630681d31960e51b815260040160405180910390fd5b6000826001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e9190615930565b6001600160a01b038082166000908152600260205260409020549192501615610f9a576040516304aabf3360e01b815260040160405180910390fd5b6001600160a01b0381811660008181526002602090815260409182902080546001600160a01b03191694881694851790559051928352909130917f891f008b8c9cadc4c9114ed37ce718f739b28049d58e50e35a02d94c4e9b06ff910160405180910390a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156110495750825b90506000826001600160401b031660011480156110655750303b155b905081158015611073575080155b156110915760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156110bb57845460ff60401b1916600160401b1785555b6110c58787612da4565b831561110b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b61111c612db8565b61112582612e5d565b61112f8282612eba565b5050565b600061113d612f77565b50600080516020615f1d83398151915290565b6111586122cc565b61117261116c611167846159b6565b612fc0565b82613057565b600061118460a08401608085016150c9565b905061118f8161316f565b42833510156111b1576040516362b439dd60e11b815260040160405180910390fd5b60006040518060c001604052808560200135815260200185604001358152602001600081526020018660028111156111eb576111eb615a41565b8152600060208201526040016112096101c087016101a088016150c9565b6001600160a01b0316905290506000611233826060870161122e61018089018961594d565b61321b565b606086013560008181526001602052604090205491925090600019016112a9577f75b84e1e549840eae7725d388221efd1eff0445233ca8ba75c16fe9aa4420f9d81858460000151856040015186606001518760a0015160405161129c96959493929190615a57565b60405180910390a1611351565b7fbf109bd723f23a8453e35c569e9a1249639bca162cab600e8ac822cffeb84e5581858460000151856040015186606001518760a0015188608001518961010001518a60e00151604051611348999897969594939291909889526001600160a01b0397909716602089015260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b60405180910390a15b5050505061136c6001600080516020615f3d83398151915255565b505050565b611379612304565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c9060240160006040518083038186803b1580156113ba57600080fd5b505afa1580156113ce573d6000803e3d6000fd5b5050506001600160a01b039091166000908152600360205260409020805460ff1916600117905550565b611400614f24565b6114086122cc565b61141283836136d8565b61142260a08401608085016150c9565b6001600160a01b0316336001600160a01b0316146114e257600060019054906101000a90046001600160a01b03166001600160a01b03166398d96aa06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b19190615930565b6001600160a01b0316336001600160a01b0316146114e257604051630f23084160e31b815260040160405180910390fd5b60006114f6368590038501606086016157db565b905083600001358160a00181815161150e9190615827565b90525060e08101805185359190611526908390615827565b90525061153281612313565b60608501356000818152600160205260409020919091557fe3212ff75492fa89c1dcc88edb7da97c3dba570be9ed969716421a1937d2e8759061157b60a08701608088016150c9565b60405161159392919088359081906000908190615a57565b60405180910390a190506115b46001600080516020615f3d83398151915255565b92915050565b6115c2614f24565b610df2838333610afd565b6115d56138c0565b6115df60006138f2565b565b60006060808280808381600080516020615efd833981519152805490915015801561160e57506001810154155b6116575760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b61165f613963565b611667613a26565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b61169a612304565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c9060240160006040518083038186803b1580156116db57600080fd5b505afa1580156116ef573d6000803e3d6000fd5b5050505060006117036002604360981b0190565b9050806001600160a01b031663662aa11d30600060019054906101000a90046001600160a01b03166001600160a01b031663e8a353926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178c9190615930565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156117d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fd91906157f8565b50806001600160a01b031663860043b630600060019054906101000a90046001600160a01b03166001600160a01b031663e8a353926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611861573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118859190615930565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f691906157f8565b5060405163e12f3a6160e01b81523060048201526004604360981b0190600090829063e12f3a6190602401602060405180830381865afa15801561193e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196291906157f8565b90508015611a6357816001600160a01b031663aad3ec96600060019054906101000a90046001600160a01b03166001600160a01b031663e8a353926040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f09190615930565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6191906157f8565b505b60405163e12f3a6160e01b81523060048201526003604360981b0190819063e12f3a6190602401602060405180830381865afa158015611aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acb91906157f8565b91508115611bcc57806001600160a01b031663aad3ec96600060019054906101000a90046001600160a01b03166001600160a01b031663e8a353926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b599190615930565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca91906157f8565b505b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b611c086122cc565b6064611c12612304565b6001600160a01b031663c614384c82336040518363ffffffff1660e01b8152600401611c3f929190615714565b60006040518083038186803b158015611c5757600080fd5b505afa158015611c6b573d6000803e3d6000fd5b50505050606086013560208501358114611c985760405163af61069360e01b815260040160405180910390fd5b4285606001351015611cbd576040516362b439dd60e11b815260040160405180910390fd5b4287351015611cdf576040516362b439dd60e11b815260040160405180910390fd5b6000611cf160a0890160808a016150c9565b9050611d4a81611d0e611d09368a90038a018a615a99565b613a65565b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613af692505050565b611d5f611d596111678a6159b6565b88613057565b60006040518060c001604052808a6020013581526020018a6040013581526020018860c0013581526020018b6002811115611d9c57611d9c615a41565b815260006020820152604001611dba6101c08c016101a08d016150c9565b6001600160a01b0316905290506000611ddf8260608c0161122e6101808e018e61594d565b60608101516040820151602083015192935090916000611dff8385615827565b90506000611e1060208e018e615b27565b905060018160ff161115611e375760405163af61069360e01b815260040160405180910390fd5b60ff811615611e6257611e4e8260808f0135615b42565b611e5c60a08f013585615b42565b10611e80565b611e708260808f0135615b42565b611e7e60a08f013585615b42565b115b15611e9e57604051635d5ce00360e01b815260040160405180910390fd5b60008981526001602052604090205460001901611f2557855160a080880151604080518d81526001600160a01b038d16602082015260ff86168183015260608101949094526080840188905291830188905260c0830152517f6fe8780cb281bfa04b1136759ae4474c3ada2c511162f19556f299187c63340a9181900360e00190a1611fd0565b7fa3afbbf0ccff02ce05f5ab35fbd61c51728a8de873a5a5e51b910650a41555958989838960000151888a8c60a001518d608001518e61010001518f60e00151604051611fc79a99989796959493929190998a526001600160a01b039890981660208a015260ff9690961660408901526060880194909452608087019290925260a086015260c085015260e08401526101008301526101208201526101400190565b60405180910390a15b50505050505050505050610a126001600080516020615f3d83398151915255565b611ff96122cc565b6064612003612304565b6001600160a01b031663c614384c82336040518363ffffffff1660e01b8152600401612030929190615714565b60006040518083038186803b15801561204857600080fd5b505afa15801561205c573d6000803e3d6000fd5b5050505060006040518060c00160405280888152602001600081526020016000815260200189600281111561209357612093615a41565b8152600160208201526001600160a01b038516604090910152905060006120bc8288888861321b565b9050600060646120d160e08a01356005615b42565b6120db9190615b6f565b9050808260c0015183600001516120f29190615827565b11156121115760405163c4d82e4360e01b815260040160405180910390fd5b7fc84dd454965cb66936af89c78c1833d5dc2554cd53f6ef2ad1f7b0945a94c593883561214460408b0160208c016150c9565b8451604080870151606088015160a089015192516121659695949390615a57565b60405180910390a150505050610a126001600080516020615f3d83398151915255565b6121906138c0565b6001600160a01b0381166121ba57604051631e4fbdf760e01b81526000600482015260240161164e565b6121c3816138f2565b50565b6121ce613cdd565b6121d6613d26565b6121df81613d2e565b6121e7613d3f565b6122638361221c576040518060400160405280600f81526020016e15d85cd8589a54da1bdc9d141bdbdb608a1b815250612244565b6040518060400160405280600e81526020016d15d85cd8589a531bdb99d41bdbdb60921b8152505b604051806040016040528060018152602001603160f81b815250613d4f565b600080546001600160a81b031916841515610100600160a81b031916176101006001600160a01b0385160217815560019060039061229f613d61565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055505050565b600080516020615f3d8339815191528054600119016122fe57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b600061230e611bd2565b905090565b60007f48c32350097d00445d05f246b194474a08c279eadfd70fd48d659fc07ffc7297826000015183602001518460400151856060015186608001518760a001518860c001518960e001518a61010001516040516020016123cc9a99989796959493929190998a5260208a01989098526001600160a01b0396871660408a0152948616606089015292909416608087015260a086015260c085019290925260e08401919091526101008301526101208201526101400190565b604051602081830303815290604052805190602001209050919050565b60008060019054906101000a90046001600160a01b03166001600160a01b031663200110c56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230e9190615930565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ce91906157f8565b6040516370a0823160e01b81523060048201529092506001600160a01b038416906370a0823190602401602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253991906157f8565b855190915060005b8181101561259b57600087828151811061255d5761255d615736565b602002602001015190506125918160400151826020015183600001516001600160a01b0316613db59092919063ffffffff16565b5050600101612541565b506040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa1580156125e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260491906157f8565b61260e908461591d565b6040516370a0823160e01b815230600482015290935082906001600160a01b038616906370a0823190602401602060405180830381865afa158015612657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267b91906157f8565b612685919061591d565b915050935093915050565b60008383028160001985870982811083820303915050806000036126c7578382816126bd576126bd615b59565b0492505050610df2565b8084116126e75760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600061275f85610a1a565b9050600061276d8385615827565b90506127836001600160a01b0387168383612b28565b60405163340f508760e21b8152600481018290526024810188905285151560448201526001600160a01b0383169063d03d421c90606401600060405180830381600087803b1580156127d457600080fd5b505af11580156127e8573d6000803e3d6000fd5b5050505050505050505050565b6001600080516020615f3d83398151915255565b61281d61116c61281884615b91565b613e48565b600061283236849003840161012085016157db565b9050600061284660408501602086016150c9565b9050600061285a60608601604087016150c9565b83519091501561290d5761286d83612313565b85356000908152600160205260409020541461289c5760405163673f032f60e11b815260040160405180910390fd5b82604001516001600160a01b0316826001600160a01b0316146128d257604051631eb3268560e31b815260040160405180910390fd5b82606001516001600160a01b0316816001600160a01b0316146129085760405163020adce760e11b815260040160405180910390fd5b612a28565b84356000908152600160205260409020541561293c5760405163e168e4db60e01b815260040160405180910390fd5b6000546129889060ff1661296957816001600160a01b031660009081526003602052604090205460ff1690565b826001600160a01b031660009081526003602052604090205460ff1690565b6129a557604051631eb3268560e31b815260040160405180910390fd5b806001600160a01b0316826001600160a01b0316036129d75760405163020adce760e11b815260040160405180910390fd5b8261010001518360e001518460c001518560a001516129f69190615827565b612a009190615827565b612a0a9190615827565b15612a285760405163673f032f60e11b815260040160405180910390fd5b612a3661010086018661594d565b9050600003612a585760405163ac8da8e360e01b815260040160405180910390fd5b8460800135600003612a7d57604051635884252160e11b815260040160405180910390fd5b428560c001351015612aa2576040516362b439dd60e11b815260040160405180910390fd5b600054612ad89060ff16612ab65781612ab8565b825b612aca60e08801356060890135615827565b612ad2613d61565b33613f21565b600054611bca9060e08701359060ff16612b0157612afc60608801604089016150c9565b612b11565b612b1160408801602089016150c9565b612b2361026089016102408a016150c9565b613f9c565b6040516001600160a01b0383811660248301526044820183905261136c91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613fec565b612b8f614f24565b6000846101200160000135600014159050600060405180610120016040528087600001358152602001886001600160a01b03168152602001876020016020810190612bda91906150c9565b6001600160a01b03168152602001612bf86060890160408a016150c9565b6001600160a01b0316815260200183612c115742612c18565b6101a08801355b8152602001612c3060608901356101c08a0135615827565b8152602001612c44866101e08a0135615827565b81526020016060880135612c5d886102008b0135615827565b612c679190615827565b8152602001612c7f60e08901356102208a0135615827565b90529050612c8c81612313565b86356000908152600160205260409020558115612cfb577fe80a6b78f88f08b92cac13fc3aa5b23cf4753f8fb8bd85e4b356b670634f77f7863588606089013587612cd7828b615827565b8b60e00135604051612cee96959493929190615a57565b60405180910390a1612d9a565b7f41ae823bf4c91d7bece87d6eada54c198fd07594ad19d96d72d025896049bfdb863588612d2f60408a0160208b016150c9565b612d3f60608b0160408c016150c9565b60e080870151604080519687526001600160a01b0395861660208801529385169386019390935292166060848101919091528a0135608084015260a0830188905260c083015280890135908201526101000160405180910390a15b9695505050505050565b612dac613cdd565b61112f600083836121c6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612e3f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612e33600080516020615f1d833981519152546001600160a01b031690565b6001600160a01b031614155b156115df5760405163703e46dd60e11b815260040160405180910390fd5b612e65612304565b604051630935e01b60e21b81523360048201526001600160a01b0391909116906324d7806c9060240160006040518083038186803b158015612ea657600080fd5b505afa158015611bca573d6000803e3d6000fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612f14575060408051601f3d908101601f19168201909252612f11918101906157f8565b60015b612f3c57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161164e565b600080516020615f1d8339815191528114612f6d57604051632a87526960e21b81526004810182905260240161164e565b61136c838361404f565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115df5760405163703e46dd60e11b815260040160405180910390fd5b60007fa0bd57f9850d2bad9e64e8002b0ce58a1098b44251ffb0980264663b82250ae5826000015183602001518460400151612fff8660600151612313565b61300c87608001516140a5565b60a080890151604080516020810199909952880196909652606087019490945260808601929092529184019190915260c08301526001600160a01b031660e0820152610100016123cc565b60006130628361421a565b905060006001826130766020860186615b27565b604080516000815260208181018084529490945260ff9092168282015291860135606082015290850135608082015260a0016020604051602081039080840390855afa1580156130ca573d6000803e3d6000fd5b50505060206040510351905060006130e0612304565b6001600160a01b031663d1f856ee6065846040518363ffffffff1660e01b815260040161310e929190615714565b6040805180830381865afa15801561312a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314e9190615c5e565b50905080611bca57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b03811633036131825750565b600061318c612304565b6001600160a01b031663d1f856ee6064336040518363ffffffff1660e01b81526004016131ba929190615714565b6040805180830381865afa1580156131d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fa9190615c5e565b5090508061112f57604051630f23084160e31b815260040160405180910390fd5b61326a6040518061012001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b833561328361327e368790038701876157db565b612313565b600082815260016020526040902054146132b05760405163673f032f60e11b815260040160405180910390fd5b60008390036132d25760405163ac8da8e360e01b815260040160405180910390fd5b602086015160c08601359060e08701359060a08801359015806132f85750828960200151115b1561330557602089018390525b613313888a60000151614247565b89526133426133228789615910565b61333260808b0160608c016150c9565b610ce560608c0160408d016150c9565b60408701526020860181905282101561336e57604051631cbf0b8960e01b815260040160405180910390fd5b61338085604001518a6020015161430b565b6040870152606086015260808901511580156133a3575088602001518560400151105b156133c15760405163b0f8fc9b60e01b815260040160405180910390fd5b828960200151036133fc5761010080890135608087015260e08601829052850182905260208501516133f490839061430b565b50855261347b565b8285604001518361340d9190615b42565b6134179190615b6f565b6101008601526040850151839061342e9083615b42565b6134389190615b6f565b60e086015260408501518390613453906101008b0135615b42565b61345d9190615b6f565b60808601526101008501516020860151613477919061430b565b5085525b60608501511561349957613499896000015186606001516003614338565b845160408a01516101008701516134d69291906134c7908c906134bc9085615827565b60005460ff16614391565b6134d19190615827565b61430b565b60a087015285526080890151156135a557845161359d906134f56123e9565b6001600160a01b03166313487f0d8461351460608e0160408f016150c9565b8d606001602081019061352791906150c9565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b039182166024840152166044820152606401602060405180830381865afa158015613579573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d191906157f8565b60c087015285525b60208901516135d2906135be60608b0160408c016150c9565b8b6080015188604001518960600151612754565b61360889606001518960600160208101906135ed91906150c9565b6135fd60408c0160208d016150c9565b8c60a00151896143e9565b82856040015110801561361d57508860800151155b156136b9576000613633368a90038a018a6157db565b90508560e001518160a00181815161364b919061591d565b905250604086015160c08201805161366490839061591d565b90525061010086015160e08201805161367e90839061591d565b90525060808601516101008201805161369890839061591d565b9052506136a481612313565b600086815260016020526040902055506136cc565b6000848152600160208190526040909120555b50505050949350505050565b6136f261116c6136ed36859003850185615c96565b614805565b6000613706368490038401606085016157db565b6040810151606082015191925090843560000361373657604051637ca44a8f60e11b815260040160405180910390fd5b60005460ff16156138205784602001356000036137655760405162ffe80f60e41b815260040160405180910390fd5b600061376f6123e9565b60c08501516080860151604051630e0700c960e41b81526001600160a01b0387811660048301526024820193909352604481019190915291169063e0700c9090606401602060405180830381865afa1580156137cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f391906157f8565b9050808660200135111561381a576040516373a4c33f60e11b815260040160405180910390fd5b50613843565b602085013515613843576040516373a4c33f60e11b815260040160405180910390fd5b61384c83612313565b83516000908152600160205260409020541461387b5760405163673f032f60e11b815260040160405180910390fd5b42856040013510156138a0576040516362b439dd60e11b815260040160405180910390fd5b600054611bca9060ff166138b457816138b6565b825b8635612ad2613d61565b336138c9611bd2565b6001600160a01b0316146115df5760405163118cdaa760e01b815233600482015260240161164e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020615efd833981519152916139a290615d09565b80601f01602080910402602001604051908101604052809291908181526020018280546139ce90615d09565b8015613a1b5780601f106139f057610100808354040283529160200191613a1b565b820191906000526020600020905b8154815290600101906020018083116139fe57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020615efd833981519152916139a290615d09565b60007fd9cfa04c18137773e2e5104f35b2ad1f62323bab79de5db55d8111ce70593b66826000015183602001518460400151856060015186608001518760a001518860c001516040516020016123cc98979695949392919097885260ff96909616602088015260408701949094526060860192909252608085015260a084015260c083015260e08201526101000190565b6000613b018361421a565b90508151604103613c27576020828101516040808501516060808701518351600080825296810180865288905290861a938101849052908101849052608081018290529293909260019060a0016020604051602081039080840390855afa158015613b70573d6000803e3d6000fd5b505050602060405103519050876001600160a01b0316816001600160a01b03161480613c135750613b9f612304565b6040516342e9d87b60e01b81526001600160a01b038a81166004830152838116602483015291909116906342e9d87b90604401602060405180830381865afa158015613bef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c139190615d3d565b15613c22575050505050505050565b505050505b6001600160a01b0384163b15613cc457604051630b135d3f60e11b81526001600160a01b03851690631626ba7e90613c659084908690600401615d5a565b602060405180830381865afa925050508015613c9e575060408051601f3d908101601f19168201909252613c9b91810190615d7b565b60015b15613cc4576374eca2c160e11b6001600160e01b0319821601613cc2575050505050565b505b604051638baa579f60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166115df57604051631afcd79f60e31b815260040160405180910390fd5b6115df613cdd565b613d36613cdd565b6121c381614870565b613d47613cdd565b6115df614878565b613d57613cdd565b61112f8282614880565b60008060019054906101000a90046001600160a01b03166001600160a01b03166323a7b42a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243d573d6000803e3d6000fd5b606081471015613dda5760405163cd78605960e01b815230600482015260240161164e565b600080856001600160a01b03168486604051613df69190615da5565b60006040518083038185875af1925050503d8060008114613e33576040519150601f19603f3d011682016040523d82523d6000602084013e613e38565b606091505b5091509150612d9a8683836148e1565b60007f6a36946795713cb0d845dfd59fe886128a8f898548f6a3bd0d7211014b54b5b6826000015183602001518460400151856060015186608001518760a001518860c001518960e00151613ea18b61010001516140a5565b613eaf8c6101200151612313565b610140808e015160408051602081019e909e528d019b909b526001600160a01b03998a1660608d015297891660808c015260a08b019690965260c08a019490945260e089019290925261010088015261012087015291850191909152610160840152166101808201526101a0016123cc565b3415613f8757816001600160a01b0316846001600160a01b031614613f5957604051631eb3268560e31b815260040160405180910390fd5b823414613f7957604051637ca44a8f60e11b815260040160405180910390fd5b613f828261493d565b611bcc565b611bcc6001600160a01b038516823086614991565b8215801590613fb357506001600160a01b03811615155b15613fd057613fc38383836149ca565b613fcd908461591d565b92505b61136c613fdb614b48565b6001600160a01b0384169085612b28565b60006140016001600160a01b03841683614b9c565b905080516000141580156140265750808060200190518101906140249190615d3d565b155b1561136c57604051635274afe760e01b81526001600160a01b038416600482015260240161164e565b61405882614baa565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561409d5761136c8282614c0f565b61112f614c7c565b805160009081816001600160401b038111156140c3576140c36151ac565b6040519080825280602002602001820160405280156140ec578160200160208202803683370190505b50905060005b828110156141e9577fae8afe996a65dac2aaac44f3859cc01f3527ee213e83ea2eda3501690d0ea95685828151811061412d5761412d615736565b60200260200101516000015186838151811061414b5761414b615736565b60200260200101516020015187848151811061416957614169615736565b602002602001015160400151805190602001206040516020016141ae94939291909384526001600160a01b039290921660208401526040830152606082015260800190565b604051602081830303815290604052805190602001208282815181106141d6576141d6615736565b60209081029190910101526001016140f2565b50806040516020016141fb9190615dc1565b6040516020818303038152906040528051906020012092505050919050565b60006115b4614227614c9b565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806142526123e9565b6001600160a01b031663e0700c9061427060608701604088016150c9565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260c0870135602482015260808701356044820152606401602060405180830381865afa1580156142c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142ec91906157f8565b90508215806142fa57508083115b15614303578092505b509092915050565b6000808284111561432a57614320838561591d565b9150829050614331565b5060009050825b9250929050565b6000828410156143515761434c848461591d565b61435b565b61435b838561591d565b90506143678483615b42565b614372826064615b42565b1115611bcc5760405163604e917360e01b815260040160405180910390fd5b600080826143a3578460e001356143b5565b6143b560c086013560a0870135615827565b6143c490610100870135615827565b9050806143d661010087013586615b42565b6143e09190615b6f565b95945050505050565b60a08101516001600160a01b03831615614415576144088186856149ca565b614412908261591d565b90505b61441d613d61565b6001600160a01b0316856001600160a01b0316036146055760008260c0015182846000015161444c9190615827565b6144569190615827565b90506000614462613d61565b9050600188600281111561447857614478615a41565b0361452e57478211156144ef576001600160a01b038116632e1a7d4d61449e478561591d565b6040518263ffffffff1660e01b81526004016144bc91815260200190565b600060405180830381600087803b1580156144d657600080fd5b505af11580156144ea573d6000803e3d6000fd5b505050505b614500836144fb614b48565b614ca5565b60c08401511561451a5761451a8460c001516144fb614d31565b83516145269087614ca5565b505050611bca565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061459991906157f8565b905080831115614601576001600160a01b03821663d0e30db06145bc838661591d565b6040518263ffffffff1660e01b81526004016000604051808303818588803b1580156145e757600080fd5b505af11580156145fb573d6000803e3d6000fd5b50505050505b5050505b801561462757614627614616614b48565b6001600160a01b0387169083612b28565b60c0820151156146525761465261463c614d31565b60c08401516001600160a01b0388169190612b28565b815115610a1257600286600281111561466d5761466d615a41565b036147ed57600061467d86610a1a565b8351604051636eb1769f60e11b81523060048201526001600160a01b038084166024830152929350909188169063dd62ed3e90604401602060405180830381865afa1580156146d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146f491906157f8565b10156147705760405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015287169063095ea7b3906044016020604051808303816000875af115801561474a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061476e9190615d3d565b505b8251604051636e553f6560e01b815260048101919091526001600160a01b038681166024830152821690636e553f65906044016020604051808303816000875af11580156147c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147e691906157f8565b5050610a12565b8151610a12906001600160a01b038716908690612b28565b60007fd29b28be0a20bef4afc9413b920d8488b80deaa13a72160368141683cabbbe128260000151836020015184604001516148448660600151612313565b6040805160208101969096528501939093526060840191909152608083015260a082015260c0016123cc565b612190613cdd565b6127f5613cdd565b614888613cdd565b600080516020615efd8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026148c28482615e3e565b50600381016148d18382615e3e565b5060008082556001909101555050565b6060826148f6576148f182614d85565b610df2565b815115801561490d57506001600160a01b0384163b155b1561493657604051639996b31560e01b81526001600160a01b038516600482015260240161164e565b5080610df2565b6000819050806001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561497d57600080fd5b505af115801561110b573d6000803e3d6000fd5b6040516001600160a01b038481166024830152838116604483015260648201839052611bcc9186918216906323b872dd90608401612b55565b6000806149d5614dae565b60405163850bf6e360e01b81526001600160a01b0385811660048301526024820188905291925060009183169063850bf6e390604401602060405180830381865afa158015614a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a4c91906157f8565b90508015614b3c5760405163095ea7b360e01b81526001600160a01b0383811660048301526024820183905286169063095ea7b3906044016020604051808303816000875af1158015614aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ac79190615d3d565b5060405163785a291b60e01b81526001600160a01b03858116600483015286811660248301526044820183905283169063785a291b90606401600060405180830381600087803b158015614b1a57600080fd5b505af1158015614b2e573d6000803e3d6000fd5b505050508092505050610df2565b50600095945050505050565b60008060019054906101000a90046001600160a01b03166001600160a01b031663e8a353926040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243d573d6000803e3d6000fd5b6060610df283836000613db5565b806001600160a01b03163b600003614be057604051634c9c8ce360e01b81526001600160a01b038216600482015260240161164e565b600080516020615f1d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051614c2c9190615da5565b600060405180830381855af49150503d8060008114614c67576040519150601f19603f3d011682016040523d82523d6000602084013e614c6c565b606091505b50915091506143e08583836148e1565b34156115df5760405163b398979f60e01b815260040160405180910390fd5b600061230e614e02565b811561112f576000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114614cf8576040519150601f19603f3d011682016040523d82523d6000602084013e614cfd565b606091505b505090508061136c5760405163f733a60960e01b8152600481018490526001600160a01b038316602482015260440161164e565b60008060019054906101000a90046001600160a01b03166001600160a01b031663a14009c26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243d573d6000803e3d6000fd5b805115614d955780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008060019054906101000a90046001600160a01b03166001600160a01b031663e43ac72f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243d573d6000803e3d6000fd5b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614e2d614e76565b614e35614ee0565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000600080516020615efd83398151915281614e90613963565b805190915015614ea857805160209091012092915050565b81548015614eb7579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020615efd83398151915281614efa613a26565b805190915015614f1257805160209091012092915050565b60018201548015614eb7579392505050565b6040518061012001604052806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008083601f840112614f9d57600080fd5b5081356001600160401b03811115614fb457600080fd5b6020830191508360208260051b850101111561433157600080fd5b60008060008060008060608789031215614fe857600080fd5b86356001600160401b03811115614ffe57600080fd5b8701601f8101891361500f57600080fd5b80356001600160401b0381111561502557600080fd5b8960206101208302840101111561503b57600080fd5b6020918201975095508701356001600160401b0381111561505b57600080fd5b61506789828a01614f8b565b90955093505060408701356001600160401b0381111561508657600080fd5b61509289828a01614f8b565b979a9699509497509295939492505050565b6001600160a01b03811681146121c357600080fd5b80356150c4816150a4565b919050565b6000602082840312156150db57600080fd5b8135610df2816150a4565b600061026082840312156150f957600080fd5b50919050565b6000606082840312156150f957600080fd5b600080600060a0848603121561512657600080fd5b83356001600160401b0381111561513c57600080fd5b615148868287016150e6565b93505061515885602086016150ff565b91506080840135615168816150a4565b809150509250925092565b6000806040838503121561518657600080fd5b8235615191816150a4565b915060208301356151a1816150a4565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156151e5576151e56151ac565b60405290565b604051606081016001600160401b03811182821017156151e5576151e56151ac565b60405160c081016001600160401b03811182821017156151e5576151e56151ac565b60405161016081016001600160401b03811182821017156151e5576151e56151ac565b604051601f8201601f191681016001600160401b038111828210171561527a5761527a6151ac565b604052919050565b600082601f83011261529357600080fd5b81356001600160401b038111156152ac576152ac6151ac565b6152bf601f8201601f1916602001615252565b8181528460208386010111156152d457600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561530457600080fd5b823561530f816150a4565b915060208301356001600160401b0381111561532a57600080fd5b61533685828601615282565b9150509250929050565b8035600381106150c457600080fd5b60006101c082840312156150f957600080fd5b600080600060a0848603121561537757600080fd5b61538084615340565b925060208401356001600160401b0381111561539b57600080fd5b6153a78682870161534f565b9250506153b785604086016150ff565b90509250925092565b6000808284036101e08112156153d557600080fd5b6101808112156153e457600080fd5b508291506153f68461018085016150ff565b90509250929050565b6000806080838503121561541257600080fd5b82356001600160401b0381111561542857600080fd5b615434858286016150e6565b9250506153f684602085016150ff565b60005b8381101561545f578181015183820152602001615447565b50506000910152565b60008151808452615480816020860160208601615444565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006154b360e0830189615468565b82810360408401526154c58189615468565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b8181101561551b5783518352602093840193909201916001016154fd565b50909b9a5050505050505050505050565b60006020828403121561553e57600080fd5b5035919050565b602081526000610df26020830184615468565b6000806000806000808688036101a081121561557357600080fd5b61557c88615340565b965060208801356001600160401b0381111561559757600080fd5b6155a38a828b0161534f565b9650506155b38960408a016150ff565b945060e0609f19820112156155c757600080fd5b5060a0870192506101808701356001600160401b038111156155e857600080fd5b8701601f810189136155f957600080fd5b80356001600160401b0381111561560f57600080fd5b89602082840101111561562157600080fd5b60208201935080925050509295509295509295565b6000806000806000808688036101a081121561565157600080fd5b61565a88615340565b965060208801359550610120603f198201121561567657600080fd5b506040870193506101608701356001600160401b0381111561569757600080fd5b6156a389828a01614f8b565b9094509250506101808701356156b8816150a4565b809150509295509295509295565b80151581146121c357600080fd5b6000806000606084860312156156e957600080fd5b83356156f4816156c6565b92506020840135615704816150a4565b91506040840135615168816150a4565b6001600160401b039290921682526001600160a01b0316602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000610120828403121561575f57600080fd5b6157676151c2565b823581529050615779602083016150b9565b602082015261578a604083016150b9565b604082015261579b606083016150b9565b60608201526080828101359082015260a0808301359082015260c0808301359082015260e080830135908201526101009182013591810191909152919050565b600061012082840312156157ee57600080fd5b610df2838361574c565b60006020828403121561580a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156115b4576115b4615811565b60006001600160401b03831115615853576158536151ac565b8260051b61586360208201615252565b84815291508201602082018582111561587b57600080fd5b835b828110156159065780356001600160401b0381111561589b57600080fd5b8501606081890312156158ad57600080fd5b6158b56151eb565b81356158c0816150a4565b81526020828101359082015260408201356001600160401b038111156158e557600080fd5b6158f18a828501615282565b6040830152508352506020918201910161587d565b5050509392505050565b6000610df236848461583a565b818103818111156115b4576115b4615811565b60006020828403121561594257600080fd5b8151610df2816150a4565b6000808335601e1984360301811261596457600080fd5b8301803591506001600160401b0382111561597e57600080fd5b6020019150600581901b360382131561433157600080fd5b600082601f8301126159a757600080fd5b610df28383356020850161583a565b60006101c082360312156159c957600080fd5b6159d161520d565b8235815260208084013590820152604080840135908201526159f6366060850161574c565b60608201526101808301356001600160401b03811115615a1557600080fd5b615a2136828601615996565b6080830152506101a0830135615a36816150a4565b60a082015292915050565b634e487b7160e01b600052602160045260246000fd5b9586526001600160a01b0394909416602086015260408501929092526060840152608083015260a082015260c00190565b803560ff811681146150c457600080fd5b600060e0828403128015615aac57600080fd5b5060405160009060e081016001600160401b0381118282101715615ad257615ad26151ac565b604052615ade84615a88565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c09384013593810193909352509092915050565b600060208284031215615b3957600080fd5b610df282615a88565b80820281158282048414176115b4576115b4615811565b634e487b7160e01b600052601260045260246000fd5b600082615b8c57634e487b7160e01b600052601260045260246000fd5b500490565b60006102608236031215615ba457600080fd5b615bac61522f565b82358152615bbc602084016150b9565b6020820152615bcd604084016150b9565b6040820152606083810135908201526080808401359082015260a0808401359082015260c0808401359082015260e080840135908201526101008301356001600160401b03811115615c1e57600080fd5b615c2a36828601615996565b61010083015250615c3f36610120850161574c565b610120820152615c5261024084016150b9565b61014082015292915050565b60008060408385031215615c7157600080fd5b8251615c7c816156c6565b602084015190925063ffffffff811681146151a157600080fd5b6000610180828403128015615caa57600080fd5b50604051600090608081016001600160401b0381118282101715615cd057615cd06151ac565b60409081528435825260208086013590830152848101359082018190529150615cfc856060860161574c565b6060820152949350505050565b600181811c90821680615d1d57607f821691505b6020821081036150f957634e487b7160e01b600052602260045260246000fd5b600060208284031215615d4f57600080fd5b8151610df2816156c6565b828152604060208201526000615d736040830184615468565b949350505050565b600060208284031215615d8d57600080fd5b81516001600160e01b031981168114610df257600080fd5b60008251615db7818460208701615444565b9190910192915050565b8151600090829060208501835b82811015615dec578151845260209384019390910190600101615dce565b509195945050505050565b601f82111561136c57806000526020600020601f840160051c81016020851015615e1e5750805b601f840160051c820191505b81811015611bca5760008155600101615e2a565b81516001600160401b03811115615e5757615e576151ac565b615e6b81615e658454615d09565b84615df7565b6020601f821160018114615e9f5760008315615e875750848201515b600019600385901b1c1916600184901b178455611bca565b600084815260208120601f198516915b82811015615ecf5787850151825560209485019460019092019101615eaf565b5084821015615eed5786840151600019600387901b60f8161c191681555b50505050600190811b0190555056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212206ca7dd2642b76c4499588d67b8d44ce269597a2f9343066448e8d9b92076818264736f6c634300081a0033