0 txs
0 calls
constructor
No constructor.
functions
chf24
viewfunction chf24() view returns (address)
cnh24
viewfunction cnh24() view returns (address)
CRYPTO_DESK
viewfunction CRYPTO_DESK() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eur24
viewfunction eur24() view returns (address)
exchangeRates
viewfunction exchangeRates(address, address) view returns (uint256)
exchangeSpread
viewfunction exchangeSpread() view returns (uint256)
f24
viewfunction f24() view returns (address)
f24AirdropPaused
viewfunction f24AirdropPaused() view returns (bool)
f24AirdropStart
viewfunction f24AirdropStart() view returns (uint256)
f24DeskAddress
viewfunction f24DeskAddress() view returns (address)
f24PerUSDC
viewfunction f24PerUSDC() view returns (uint256)
f24timelock
viewfunction f24timelock() view returns (address)
FEE_DESK
viewfunction FEE_DESK() view returns (uint256)
FEE_HUNDRET_PERCENT
viewfunction FEE_HUNDRET_PERCENT() view returns (uint256)
fees
viewfunction fees(uint256) view returns (uint256)
fiat24account
viewfunction fiat24account() view returns (address)
gbp24
viewfunction gbp24() view returns (address)
getExchangeRate
viewfunction getExchangeRate(address _inputToken, address _outputToken) view returns (uint256)
getFee
viewfunction getFee(uint256 _tokenId, uint256 _usdcAmount) view returns (uint256 feeInUSDC)
getPoolFeeOfMostLiquidPool
viewfunction getPoolFeeOfMostLiquidPool(address _inputToken, address _outputToken) view returns (uint24)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSpread
viewfunction getSpread(address _inputToken, address _outputToken, bool exactOut) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
marketClosed
viewfunction marketClosed() view returns (bool)
marketClosedSpread
viewfunction marketClosedSpread() view returns (uint256)
MAX_DIGITS
viewfunction MAX_DIGITS() view returns (uint256)
maxUsdcDepositAmount
viewfunction maxUsdcDepositAmount() view returns (uint256)
minUsdcDepositAmount
viewfunction minUsdcDepositAmount() view returns (uint256)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
RATES_UPDATER_OPERATOR_ROLE
viewfunction RATES_UPDATER_OPERATOR_ROLE() view returns (bytes32)
RATES_UPDATER_ROBOT_ROLE
viewfunction RATES_UPDATER_ROBOT_ROLE() view returns (bytes32)
slippage
viewfunction slippage() view returns (uint256)
standardFee
viewfunction standardFee() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TREASURY_DESK
viewfunction TREASURY_DESK() view returns (uint256)
UNISWAP_FACTORY
viewfunction UNISWAP_FACTORY() view returns (address)
UNISWAP_PERIPHERY_PAYMENTS
viewfunction UNISWAP_PERIPHERY_PAYMENTS() view returns (address)
UNISWAP_QUOTER
viewfunction UNISWAP_QUOTER() view returns (address)
UNISWAP_ROUTER
viewfunction UNISWAP_ROUTER() view returns (address)
usd24
viewfunction usd24() view returns (address)
USDC_DIVISOR
viewfunction USDC_DIVISOR() view returns (uint256)
usdc
viewfunction usdc() view returns (address)
usdcDepositAddress
viewfunction usdcDepositAddress() view returns (address)
validXXX24Tokens
viewfunction validXXX24Tokens(address) view returns (bool)
weth
viewfunction weth() view returns (address)
XXX24_DIVISOR
viewfunction XXX24_DIVISOR() view returns (uint256)
addCNH24
nonpayablefunction addCNH24(address _cnh24)
changeExchangeSpread
nonpayablefunction changeExchangeSpread(uint256 _exchangeSpread)
changeMarketClosedSpread
nonpayablefunction changeMarketClosedSpread(uint256 _marketClosedSpread)
changeMaxUsdcDepositAmount
nonpayablefunction changeMaxUsdcDepositAmount(uint256 _maxUsdcDepositAmount)
changeMinUsdcDepositAmount
nonpayablefunction changeMinUsdcDepositAmount(uint256 _minUsdcDepositAmount)
changeSlippage
nonpayablefunction changeSlippage(uint256 _slippage)
changeStandardFee
nonpayablefunction changeStandardFee(uint256 _standardFee)
changeUsdcAddress
nonpayablefunction changeUsdcAddress(address _usdcAddress)
changeUsdcDepositAddress
nonpayablefunction changeUsdcDepositAddress(address _usdcDepositAddress)
depositByWallet
nonpayablefunction depositByWallet(address _client, address _outputToken, uint256 _usdcAmount) returns (uint256)
depositETH
payablefunction depositETH(address _outputToken) payable returns (uint256)
depositTokenViaEth
nonpayablefunction depositTokenViaEth(address _inputToken, address _outputToken, uint256 _amount) returns (uint256)
depositTokenViaUsdc
nonpayablefunction depositTokenViaUsdc(address _inputToken, address _outputToken, uint256 _amount) returns (uint256)
getQuote
nonpayablefunction getQuote(address _inputToken, address _outputToken, uint24 _fee, uint256 _amount) returns (uint256)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _fiat24account, address _usd24, address _eur24, address _chf24, address _gbp24, address _usdc, address _weth, address _f24, address _f24timelock, address _f24DeskAddress, address _usdcDepositAddress)
moneyExchangeExactIn
nonpayablefunction moneyExchangeExactIn(address _inputToken, address _outputToken, uint256 _inputAmount) returns (uint256)
moneyExchangeExactOut
nonpayablefunction moneyExchangeExactOut(address _inputToken, address _outputToken, uint256 _outputAmount) returns (uint256)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
unpause
nonpayablefunction unpause()
updateExchangeRates
nonpayablefunction updateExchangeRates(uint256 _usd_eur, uint256 _usd_chf, uint256 _usd_gbp, uint256 _usd_cnh, bool _isMarketClosed)
updateUsdcUsd24ExchangeRate
nonpayablefunction updateUsdcUsd24ExchangeRate(uint256 _usdc_usd24)
events
DepositedByWallet
event DepositedByWallet(uint256 indexed tokenId, address indexed clientAddress, uint256 indexed walletId, address walletAddress, address outputToken, uint256 usdcAmount)
DepositedEth
event DepositedEth(address indexed sender, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount)
DepositedTokenViaEth
event DepositedTokenViaEth(address indexed sender, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount)
DepositedTokenViaUsd
event DepositedTokenViaUsd(address indexed sender, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount)
ExchangeRatesUpdatedByOperator
event ExchangeRatesUpdatedByOperator(address indexed sender, uint256 usdeur, uint256 usdchf, uint256 usdgbp, uint256 usdcnh, bool marketClosed)
ExchangeRatesUpdatedByRobot
event ExchangeRatesUpdatedByRobot(address indexed sender, uint256 usdeur, uint256 usdchf, uint256 usdgbp, uint256 usdcnh, bool marketClosed)
MoneyExchangedExactIn
event MoneyExchangedExactIn(address indexed sender, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount)
MoneyExchangedExactOut
event MoneyExchangedExactOut(address indexed sender, address inputToken, address outputToken, uint256 inputAmount, uint256 outputAmount)
Paused
event Paused(address account)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Unpaused
event Unpaused(address account)
UsdcDepositAddressChanged
event UsdcDepositAddressChanged(address oldAddress, address newAddress)
errors
Fiat24CryptoDeposit__AddressHasNoToken
error Fiat24CryptoDeposit__AddressHasNoToken(address sender)
Fiat24CryptoDeposit__EthRefundFailed
error Fiat24CryptoDeposit__EthRefundFailed()
Fiat24CryptoDeposit__InputTokenOutputTokenSame
error Fiat24CryptoDeposit__InputTokenOutputTokenSame(address inputToken, address outputToken)
Fiat24CryptoDeposit__NoPoolAvailable
error Fiat24CryptoDeposit__NoPoolAvailable(address tokenA, address tokenB)
Fiat24CryptoDeposit__NotOperator
error Fiat24CryptoDeposit__NotOperator(address sender)
Fiat24CryptoDeposit__NotRateUpdater
error Fiat24CryptoDeposit__NotRateUpdater(address sender)
Fiat24CryptoDeposit__NotTokensWalletProvider
error Fiat24CryptoDeposit__NotTokensWalletProvider(address sender, uint256 tokenId)
Fiat24CryptoDeposit__NotValidInputToken
error Fiat24CryptoDeposit__NotValidInputToken(address token)
Fiat24CryptoDeposit__NotValidOutputToken
error Fiat24CryptoDeposit__NotValidOutputToken(address token)
Fiat24CryptoDeposit__Paused
error Fiat24CryptoDeposit__Paused()
Fiat24CryptoDeposit__SwapOutputAmountZero
error Fiat24CryptoDeposit__SwapOutputAmountZero()
Fiat24CryptoDeposit__UsdcAmountHigherMaxDepositAmount
error Fiat24CryptoDeposit__UsdcAmountHigherMaxDepositAmount(uint256 usdcAmount, uint256 maxAmount)
Fiat24CryptoDeposit__UsdcAmountLowerMinDepositAmount
error Fiat24CryptoDeposit__UsdcAmountLowerMinDepositAmount(uint256 usdcAmount, uint256 minAmount)
Fiat24CryptoDeposit__ValueZero
error Fiat24CryptoDeposit__ValueZero()
creation bytecode
0x608060405234801561001057600080fd5b50615375806100206000396000f3fe60806040526004361061032b5760003560e01c806301ffc9a71461033057806304f2697814610365578063063286cc146103895780630caa0540146103b85780630f2f45d2146103ce5780630fbf0944146103e45780631118bb3b146104045780631557c3b4146104265780631b7238771461043c5780631fb0292f1461046c57806320af28c51461048c578063248a9ca3146104ac57806324fb9edf146104cc5780632c7692bd146104e15780632d2da806146105155780632f2ff15d146105285780632f5008f914610548578063310a03251461056857806336568abe146105885780633c3ef2fb146105a85780633e032a3b146105c85780633e413bee146105de5780633f4ba83a146105fe5780633fc8cef31461061357806341f33e191461063357806344c3b29f14610649578063488da0dc1461066957806348a5dec6146106895780634acc79ed146106a3578063503fa44f146106d057806355275af51461070857806355e644441461072a5780635c975abb1461074a5780636b77e75a1461076257806372a023fa14610782578063746459f9146107a257806376902b83146107c257806381d892dd146107e25780638456cb59146108025780638c9b6c28146104265780638f1a3879146108175780638f28f584146108375780638f6ac9941461085757806391d148541461086d578063972d0bba1461088d578063983318d9146108a3578063a01c3e2b146108c3578063a217fddf146108e3578063a75f4eb1146108f8578063acd0032d14610918578063aee6b4431461092e578063b268630b1461094e578063b461e29914610976578063b4a08b6b14610996578063b6a09e25146109b8578063baaa61be146109d8578063bc1b2bcc146109f8578063bec872b014610a0e578063c0154ccb14610a2e578063c5881e2114610426578063c74c0fac14610a53578063cbf99d3814610a7b578063d0e1ec2d14610a9b578063d250185c14610ab1578063d547741f14610ad1578063d826492014610389578063e9b39e2a14610af1578063eeaa315e14610b11578063f5b541a614610b31578063f7f1544514610b53578063f80b0de914610b6d578063f8140a7e14610b8d575b600080fd5b34801561033c57600080fd5b5061035061034b366004614be0565b610ba3565b60405190151581526020015b60405180910390f35b34801561037157600080fd5b5061037b60df5481565b60405190815260200161035c565b34801561039557600080fd5b506103ab60008051602061530083398151915281565b60405161035c9190614c0a565b3480156103c457600080fd5b5061037b60d55481565b3480156103da57600080fd5b5061037b61238c81565b3480156103f057600080fd5b5060dd546103ab906001600160a01b031681565b34801561041057600080fd5b5061042461041f366004614c1e565b610bda565b005b34801561043257600080fd5b5061037b61271081565b34801561044857600080fd5b50610350610457366004614c5f565b60d66020526000908152604090205460ff1681565b34801561047857600080fd5b5060ce546103ab906001600160a01b031681565b34801561049857600080fd5b5060ca546103ab906001600160a01b031681565b3480156104b857600080fd5b5061037b6104c7366004614c1e565b610c20565b3480156104d857600080fd5b5061037b600581565b3480156104ed57600080fd5b506105016104fc366004614c7c565b610c35565b60405162ffffff909116815260200161035c565b61037b610523366004614c5f565b6110b0565b34801561053457600080fd5b50610424610543366004614cb5565b611905565b34801561055457600080fd5b50610424610563366004614c5f565b611927565b34801561057457600080fd5b50610424610583366004614c1e565b6119a7565b34801561059457600080fd5b506104246105a3366004614cb5565b611a0d565b3480156105b457600080fd5b506104246105c3366004614c5f565b611a8b565b3480156105d457600080fd5b5061037b60d25481565b3480156105ea57600080fd5b5060d0546103ab906001600160a01b031681565b34801561060a57600080fd5b50610424611b0f565b34801561061f57600080fd5b5060d1546103ab906001600160a01b031681565b34801561063f57600080fd5b5061037b60db5481565b34801561065557600080fd5b5060cb546103ab906001600160a01b031681565b34801561067557600080fd5b50610424610684366004614ce8565b611b3b565b34801561069557600080fd5b5060d9546103509060ff1681565b3480156106af57600080fd5b5061037b6106be366004614c1e565b60d86020526000908152604090205481565b3480156106dc57600080fd5b5061037b6106eb366004614c7c565b60d760209081526000928352604080842090915290825290205481565b34801561071457600080fd5b5061037b6000805160206152c083398151915281565b34801561073657600080fd5b5060cc546103ab906001600160a01b031681565b34801561075657600080fd5b5060975460ff16610350565b34801561076e57600080fd5b5061037b61077d366004614d35565b61220c565b34801561078e57600080fd5b5061037b61079d366004614d8e565b6122b7565b3480156107ae57600080fd5b5061037b6107bd366004614d8e565b6124f6565b3480156107ce57600080fd5b506104246107dd366004614dcf565b612908565b3480156107ee57600080fd5b506104246107fd366004614c1e565b612fd6565b34801561080e57600080fd5b50610424612ffd565b34801561082357600080fd5b5061037b610832366004614ead565b613027565b34801561084357600080fd5b5061037b610852366004614d8e565b6130b5565b34801561086357600080fd5b5061037b60de5481565b34801561087957600080fd5b50610350610888366004614cb5565b613342565b34801561089957600080fd5b5061037b60d45481565b3480156108af57600080fd5b5060dc546103ab906001600160a01b031681565b3480156108cf57600080fd5b5061037b6108de366004614d8e565b61336d565b3480156108ef57600080fd5b5061037b600081565b34801561090457600080fd5b50610424610913366004614c1e565b613b7f565b34801561092457600080fd5b5061037b60da5481565b34801561093a57600080fd5b5060cd546103ab906001600160a01b031681565b34801561095a57600080fd5b506103ab73b27308f9f90d607463bb33ea1bebb41c27ce5ab681565b34801561098257600080fd5b5061037b610991366004614d8e565b613ba6565b3480156109a257600080fd5b5061037b6000805160206152e083398151915281565b3480156109c457600080fd5b5060c9546103ab906001600160a01b031681565b3480156109e457600080fd5b5061037b6109f3366004614c7c565b6141d2565b348015610a0457600080fd5b5061037b6123f381565b348015610a1a57600080fd5b50610424610a29366004614c1e565b6142fa565b348015610a3a57600080fd5b5060e0546103ab9061010090046001600160a01b031681565b348015610a5f57600080fd5b506103ab731f98431c8ad98523631ae4a59f267346ea31f98481565b348015610a8757600080fd5b5060cf546103ab906001600160a01b031681565b348015610aa757600080fd5b5061037b61239181565b348015610abd57600080fd5b5061037b610acc366004614ef8565b614321565b348015610add57600080fd5b50610424610aec366004614cb5565b61436b565b348015610afd57600080fd5b50610424610b0c366004614c5f565b614388565b348015610b1d57600080fd5b50610424610b2c366004614c1e565b6143cc565b348015610b3d57600080fd5b5061037b60008051602061532083398151915281565b348015610b5f57600080fd5b5060e0546103509060ff1681565b348015610b7957600080fd5b50610424610b88366004614c1e565b6143f3565b348015610b9957600080fd5b5061037b60d35481565b60006001600160e01b03198216637965db0b60e01b1480610bd457506301ffc9a760e01b6001600160e01b03198316145b92915050565b610bf260008051602061532083398151915233613342565b610c1b57335b604051630d86bd6960e31b8152600401610c129190614c0a565b60405180910390fd5b60da55565b60009081526065602052604090206001015490565b604051630b4c774160e11b815260009081908190819081908190731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610c7e908b908b90606490600401614f1a565b602060405180830381865afa158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbf9190614f42565b90506001600160a01b03811615610d5957809150816001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d359190614f5f565b9250836001600160801b0316836001600160801b03161115610d5957829350606494505b604051630b4c774160e11b8152731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610d96908b908b906101f490600401614f1a565b602060405180830381865afa158015610db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd79190614f42565b90506001600160a01b03811615610e7257809150816001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4d9190614f5f565b9250836001600160801b0316836001600160801b03161115610e72578293506101f494505b604051630b4c774160e11b8152731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610eaf908b908b90610bb890600401614f1a565b602060405180830381865afa158015610ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef09190614f42565b90506001600160a01b03811615610f8b57809150816001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f669190614f5f565b9250836001600160801b0316836001600160801b03161115610f8b57829350610bb894505b604051630b4c774160e11b8152731f98431c8ad98523631ae4a59f267346ea31f98490631698ee8290610fc8908b908b9061271090600401614f1a565b602060405180830381865afa158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110099190614f42565b90506001600160a01b038116156110a457809150816001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561105b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107f9190614f5f565b9250836001600160801b0316836001600160801b031611156110a45782935061271094505b50929695505050505050565b60006110be60975460ff1690565b156110dc5760405163694974fb60e11b815260040160405180910390fd5b346000036110fc57604051620abbb960e61b815260040160405180910390fd5b6001600160a01b038216600090815260d6602052604090205460ff16611137578160405163f5f4c28560e01b8152600401610c129190614c0a565b60c9546040516302af047960e41b81526000916001600160a01b031690632af0479090611168903390600401614c0a565b602060405180830381865afa158015611185573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a99190614f88565b9050806000036111cf57335b6040516384b288a360e01b8152600401610c129190614c0a565b60d15460d0546000916111ee916001600160a01b039182169116610c35565b90508062ffffff1660000361122a5760d15460d05460405163a4ea635160e01b8152610c12926001600160a01b03908116921690600401614fa1565b604080516101008101825260d1546001600160a01b03908116825260d05416602082015262ffffff8316918101919091523060608201526000906080810161127342600f614fd1565b81526020013481526020016112f26112ce60646112c860d2546112c260d160009054906101000a90046001600160a01b031660d060009054906101000a90046001600160a01b03168b3461220c565b9061441a565b90614426565b60d15460d0546112ec916001600160a01b039081169116883461220c565b90614432565b81526000602090910181905260405163414bf38960e01b8152919250906000805160206153008339815191529063414bf389903490611335908690600401614fe4565b60206040518083038185885af1158015611353573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906113789190614f88565b90506000805160206153008339815191526001600160a01b03166312210e8a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b50506040516000925033915047908381818185875af1925050503d806000811461141d576040519150601f19603f3d011682016040523d82523d6000602084013e611422565b606091505b505090508061144457604051631390f2fb60e21b815260040160405180910390fd5b8160000361146557604051639b29a93160e01b815260040160405180910390fd5b60d45482111561148d5760d4546040516375889fd760e11b8152610c1291849160040161504d565b60d5548210156114b55760d55460405163444ed8a560e11b8152610c1291849160040161504d565b60c9546040516368800cd360e01b8152600481018790526000916001600160a01b0316906368800cd390602401602060405180830381865afa1580156114ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115239190614f88565b60c954604051634f558e7960e01b8152600481018390529192506000916001600160a01b0390911690634f558e7990602401602060405180830381865afa158015611572573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611596919061505b565b905060006115a48886614321565b90508215806115b1575081155b156116cf5760d05460dc546115d3916001600160a01b0390811691168761443e565b60cb5460c9546040516331a9108f60e11b815261239160048201526116ca926001600160a01b03908116921690636352211e906024015b602060405180830381865afa158015611627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164b9190614f42565b60c9546040516331a9108f60e11b81526123f360048201526001600160a01b0390911690636352211e90602401602060405180830381865afa158015611695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b99190614f42565b6116c561271086615078565b614541565b611772565b60d05460dc546116f5916001600160a01b0390811691166116f0848961509a565b61443e565b60d05460c9546040516331a9108f60e11b815260048101869052611772926001600160a01b03908116921690636352211e906024015b602060405180830381865afa158015611748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176c9190614f42565b8361443e565b60d0546001600160a01b03908116600090815260d76020908152604080832060cb5490941683529290529081205461271090816117af858a61509a565b6117b99190615078565b6117c391906150ad565b6117cd9190615078565b60cb54909150612710906117ec906001600160a01b03168d6000613027565b60cb5461271090611806906001600160a01b03168f6141d2565b61181090856150ad565b61181a9190615078565b61182491906150ad565b61182e9190615078565b60c9546040516331a9108f60e11b815261239160048201529192506118ac918d916001600160a01b031690636352211e906024015b602060405180830381865afa158015611880573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a49190614f42565b335b84614541565b60d15460405133917f34d7d1806267c56e6c814b66febca4a2a46f1dd9d8af4146c62b585f6b84c2c9916118ef916001600160a01b0316908f90349087906150c4565b60405180910390a29a9950505050505050505050565b61190e82610c20565b611918813361464f565b61192283836146b3565b505050565b61193f60008051602061532083398151915233613342565b6119495733610bf8565b60dc80546001600160a01b038381166001600160a01b0319831681179093556040519116917f333d753eb88dfde031e8da4385e0440b26920614852643bc6c80e79718dac36d9161199b918491614fa1565b60405180910390a15050565b6119bf6000805160206152c083398151915233613342565b6119df57335b60405163f6d317e160e01b8152600401610c129190614c0a565b60d0546001600160a01b03908116600090815260d76020908152604080832060cb5490941683529290522055565b6001600160a01b0381163314611a7d5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610c12565b611a878282614739565b5050565b611aa360008051602061532083398151915233613342565b611aad5733610bf8565b60e08054610100600160a81b0319166101006001600160a01b0393841690810291909117909155600081815260d660209081526040808320805460ff1916600117905560cb54909416825260d78152838220928252919091522062011ae49055565b611b2760008051602061532083398151915233613342565b611b315733610bf8565b611b396147a0565b565b611b536000805160206152c083398151915233613342565b15611c7b5760cb80546001600160a01b03908116600090815260d76020818152604080842060cc8054871686529083528185208c905586548616855283835281852060cd8054881687529084528286208c905587548716865284845282862060ce8054891688529085528387208c905588548816875285855283872060e08054610100908190048b168a529187528589208d905560d9805460ff19168d15159081179091559a548a1689529686528488209354891688529290945282862054905487168652828620549354871686528286205494549190910490951684529283902054925133957f9f360fb4784547b0e5ca1a9940b6c40efc68cd7558feb8c2d2ad9b9669ed83be95611c6e95909492909160ff16906150ed565b60405180910390a2612205565b611c936000805160206152e083398151915233613342565b156121ff5760cb546001600160a01b03908116600090815260d76020908152604080832060cc549094168352929052908120548610611d075760cb546001600160a01b03908116600090815260d76020908152604080832060cc5490941683529290522054611d02908761509a565b611d3e565b60cb546001600160a01b03908116600090815260d76020908152604080832060cc5490941683529290522054611d3e90879061509a565b60cb546001600160a01b03908116600090815260d76020908152604080832060cc5490941683529290522054909150611d79612710836150ad565b611d839190615078565b60cb546001600160a01b03908116600090815260d76020908152604080832060cd54909416835292905290812054919250908610611df65760cb546001600160a01b03908116600090815260d76020908152604080832060cd5490941683529290522054611df1908761509a565b611e2d565b60cb546001600160a01b03908116600090815260d76020908152604080832060cd5490941683529290522054611e2d90879061509a565b60cb546001600160a01b03908116600090815260d76020908152604080832060cd5490941683529290522054909150611e68612710836150ad565b611e729190615078565b60cb546001600160a01b03908116600090815260d76020908152604080832060ce54909416835292905290812054919250908610611ee55760cb546001600160a01b03908116600090815260d76020908152604080832060ce5490941683529290522054611ee0908761509a565b611f1c565b60cb546001600160a01b03908116600090815260d76020908152604080832060ce5490941683529290522054611f1c90879061509a565b60cb546001600160a01b03908116600090815260d76020908152604080832060ce5490941683529290522054909150611f57612710836150ad565b611f619190615078565b60cb546001600160a01b03908116600090815260d76020908152604080832060e0546101009004909416835292905290812054919250908610611fde5760cb546001600160a01b03908116600090815260d76020908152604080832060e054610100900490941683529290522054611fd9908761509a565b61201a565b60cb546001600160a01b03908116600090815260d76020908152604080832060e05461010090049094168352929052205461201a90879061509a565b60cb546001600160a01b03908116600090815260d76020908152604080832060e05461010090049094168352929052205490915061205a612710836150ad565b6120649190615078565b905061012c84101561209f5760cb546001600160a01b03908116600090815260d76020908152604080832060cc549094168352929052208990555b61012c8310156120d85760cb546001600160a01b03908116600090815260d76020908152604080832060cd549094168352929052208890555b61012c8210156121115760cb546001600160a01b03908116600090815260d76020908152604080832060ce549094168352929052208790555b61012c81101561214f5760cb546001600160a01b03908116600090815260d76020908152604080832060e05461010090049094168352929052208690555b60d9805460ff191686151590811790915560cb546001600160a01b03908116600090815260d76020908152604080832060cc54851684529091528082205460cd54841683528183205460ce54851684528284205460e054610100900490951684529282902054915133957f8d901df24d3fcb3c29b3949e685435c71fbb313dffa57e49da96fc7abd47b537956121ee9593949092909160ff16906150ed565b60405180910390a250505050612205565b336119c5565b5050505050565b60405163f7729d4360e01b81526001600160a01b0380861660048301528416602482015262ffffff83166044820152606481018290526000608482018190529073b27308f9f90d607463bb33ea1bebb41c27ce5ab69063f7729d439060a4016020604051808303816000875af115801561228a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ae9190614f88565b95945050505050565b60006122c560975460ff1690565b156122e35760405163694974fb60e11b815260040160405180910390fd5b8160000361230357604051620abbb960e61b815260040160405180910390fd5b6001600160a01b038416600090815260d6602052604090205460ff1661233e578360405163d6fa3fa360e01b8152600401610c129190614c0a565b6001600160a01b038316600090815260d6602052604090205460ff16612379578260405163f5f4c28560e01b8152600401610c129190614c0a565b826001600160a01b0316846001600160a01b0316036123af578383604051639b6c165760e01b8152600401610c12929190614fa1565b612428843360c9546040516331a9108f60e11b815261238c60048201526001600160a01b0390911690636352211e90602401602060405180830381865afa1580156123fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124229190614f42565b85614541565b600061271061243986866000613027565b61271061244688886141d2565b61245090876150ad565b61245a9190615078565b61246491906150ad565b61246e9190615078565b60c9546040516331a9108f60e11b815261239160048201529192506124a79186916001600160a01b031690636352211e90602401611863565b336001600160a01b03167fa6ad14cbf43fd219354877f33abdfa78542d2d066c833c03a195d83b1ccbba39868686856040516124e694939291906150c4565b60405180910390a2949350505050565b600061250460975460ff1690565b156125225760405163694974fb60e11b815260040160405180910390fd5b60d55482101561254a5760d55460405163444ed8a560e11b8152610c1291849160040161504d565b60c954604051632f745c5960e01b81526000916001600160a01b031690632f745c599061257d9088908590600401615112565b602060405180830381865afa15801561259a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125be9190614f88565b60c954604051632f745c5960e01b81529192506001600160a01b031690632f745c59906125f2903390600090600401615112565b602060405180830381865afa15801561260f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126339190614f88565b60c9546040516368800cd360e01b8152600481018490526001600160a01b03909116906368800cd390602401602060405180830381865afa15801561267c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a09190614f88565b146126c25733816040516334c7a20560e21b8152600401610c12929190615112565b60006126ce8285614321565b60d0546001600160a01b03908116600090815260d76020908152604080832060cb5490941683529290529081205491925090612710908161270f858961509a565b6127199190615078565b61272391906150ad565b61272d9190615078565b60cb549091506127109061274c906001600160a01b0316886000613027565b60cb5461271090612766906001600160a01b03168a6141d2565b61277090856150ad565b61277a9190615078565b61278491906150ad565b61278e9190615078565b60d05460dc549192506127b4916001600160a01b03918216918a91166116c5868a61509a565b60d0546127cb906001600160a01b03168833612422565b60c9546040516331a9108f60e11b815261239160048201526128469188916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561281b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283f9190614f42565b8984614541565b60c9546001600160a01b0316632f745c593360006040518363ffffffff1660e01b8152600401612877929190615112565b602060405180830381865afa158015612894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b89190614f88565b6001600160a01b038816847f3f65d89a3e87576d9d84da7409131cdbf5f3b8247415b3313e707cc91d5bb4a2338a8a6040516128f69392919061512b565b60405180910390a49695505050505050565b600054610100900460ff166129235760005460ff1615612927565b303b155b61298a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c12565b600054610100900460ff161580156129ac576000805461ffff19166101011790555b6129b461482d565b6129bc614854565b6129c7600033614887565b6129df60008051602061532083398151915233614887565b8b60c960006101000a8154816001600160a01b0302191690836001600160a01b031602179055508a60cb60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508960cc60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508860cd60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508760ce60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508660d060006101000a8154816001600160a01b0302191690836001600160a01b031602179055508560d160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508460cf60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508360ca60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260dd60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160dc60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550640ba43b740060d481905550624c4b4060d581905550600560d281905550606460d381905550600160d660008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160d660008c6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160d660008b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160d660008a6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555061271060d7600060d060009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600060cb60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000208190555061271060d7600060cb60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600060cb60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000208190555061240660d7600060cb60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600060cc60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020819055506123aa60d7600060cb60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600060cd60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550611c4760d7600060cb60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020600060ce60009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002081905550606460d860006005815260200190815260200160002081905550603260d860006004815260200190815260200160002081905550601960d860006003815260200190815260200160002081905550600a60d860006002815260200190815260200160002081905550600060d860006001815260200190815260200160002081905550600060d960006101000a81548160ff0219169083151502179055506126ac60da8190555061270b60db819055508015612fc8576000805461ff00191690555b505050505050505050505050565b612fee60008051602061532083398151915233613342565b612ff85733610bf8565b60d355565b61301560008051602061532083398151915233613342565b61301f5733610bf8565b611b39614891565b60cb54600090612710906001600160a01b038681169116148015613058575060cb546001600160a01b038581169116145b6130ad5760d95460ff1661306e5760da5461308b565b61271060db5460da5461308191906150ad565b61308b9190615078565b905082156130ad57806130a0612710806150ad565b6130aa9190615078565b90505b949350505050565b60006130c360975460ff1690565b156130e15760405163694974fb60e11b815260040160405180910390fd5b8160000361310157604051620abbb960e61b815260040160405180910390fd5b6001600160a01b038416600090815260d6602052604090205460ff1661313c578360405163d6fa3fa360e01b8152600401610c129190614c0a565b6001600160a01b038316600090815260d6602052604090205460ff16613177578260405163f5f4c28560e01b8152600401610c129190614c0a565b826001600160a01b0316846001600160a01b0316036131ad578383604051639b6c165760e01b8152600401610c12929190614fa1565b60006127106131be85876001613027565b6127106131cb87896141d2565b6131d590876150ad565b6131df9190615078565b6131e991906150ad565b6131f39190615078565b90508060000361321557604051620abbb960e61b815260040160405180910390fd5b613288853360c9546040516331a9108f60e11b815261238c60048201526001600160a01b0390911690636352211e90602401602060405180830381865afa158015613264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a69190614f42565b60c9546040516331a9108f60e11b815261239160048201526133039186916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156132d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132fc9190614f42565b3386614541565b336001600160a01b03167f0817d793c7fe339a7cd6f6cf8e2b6deadf3e9a29c74b5e0b87966710b03827f1868684876040516124e694939291906150c4565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061337b60975460ff1690565b156133995760405163694974fb60e11b815260040160405180910390fd5b816000036133b957604051620abbb960e61b815260040160405180910390fd5b6001600160a01b038316600090815260d6602052604090205460ff166133f4578260405163f5f4c28560e01b8152600401610c129190614c0a565b60c9546040516302af047960e41b81526000916001600160a01b031690632af0479090613425903390600401614c0a565b602060405180830381865afa158015613442573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134669190614f88565b90508060000361347657336111b5565b61348385335b3086614541565b61349c856000805160206153008339815191528561490c565b60d1546000906134b69087906001600160a01b0316610c35565b90508062ffffff166000036134ef5760d15460405163a4ea635160e01b8152610c129188916001600160a01b0390911690600401614fa1565b60408051610100810182526001600160a01b03808916825260d15416602082015262ffffff8316918101919091523060608201526000906080810161353542600f614fd1565b815260200186815260200161358861356f60646112c860d2546112c28e60d160009054906101000a90046001600160a01b03168b8f61220c565b60d1546112ec908c906001600160a01b0316888c61220c565b81526000602090910181905260405163414bf38960e01b8152919250906000805160206153008339815191529063414bf389906135c9908590600401614fe4565b6020604051808303816000875af11580156135e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360c9190614f88565b90508060000361362f57604051639b29a93160e01b815260040160405180910390fd5b60d154613654906001600160a01b03166000805160206153008339815191528361490c565b60d15460d054613670916001600160a01b039081169116610c35565b92508262ffffff166000036136ac5760d15460d05460405163a4ea635160e01b8152610c12926001600160a01b03908116921690600401614fa1565b60d15460d0546000916136cd916001600160a01b039182169116868561220c565b604080516101008101825260d1546001600160a01b03908116825260d05416602082015262ffffff8716918101919091523060608201529091506080810161371642600f614fd1565b815260200183815260200161374561373e60646112c860d2548761441a90919063ffffffff16565b8490614432565b8152600060209091015260405163414bf38960e01b81529093506000805160206153008339815191529063414bf38990613783908690600401614fe4565b6020604051808303816000875af11580156137a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c69190614f88565b9150816000036137e957604051639b29a93160e01b815260040160405180910390fd5b60d4548211156138115760d4546040516375889fd760e11b8152610c1291849160040161504d565b60d5548210156138395760d55460405163444ed8a560e11b8152610c1291849160040161504d565b60c9546040516368800cd360e01b8152600481018790526000916001600160a01b0316906368800cd390602401602060405180830381865afa158015613883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a79190614f88565b60c954604051634f558e7960e01b8152600481018390529192506000916001600160a01b0390911690634f558e7990602401602060405180830381865afa1580156138f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391a919061505b565b905060006139288886614321565b9050821580613935575081155b156139975760d05460dc54613957916001600160a01b0390811691168761443e565b60cb5460c9546040516331a9108f60e11b81526123916004820152613992926001600160a01b03908116921690636352211e9060240161160a565b6139f2565b60d05460dc546139b8916001600160a01b0390811691166116f0848961509a565b60d05460c9546040516331a9108f60e11b8152600481018690526139f2926001600160a01b03908116921690636352211e9060240161172b565b60d0546001600160a01b03908116600090815260d76020908152604080832060cb54909416835292905220546127109081613a2d848961509a565b613a379190615078565b613a4191906150ad565b613a4b9190615078565b60cb5490955061271090613a6a906001600160a01b03168d6000613027565b60cb5461271090613a84906001600160a01b03168f6141d2565b613a8e90896150ad565b613a989190615078565b613aa291906150ad565b613aac9190615078565b60c9546040516331a9108f60e11b81526123916004820152919650613b28918d916001600160a01b031690636352211e90602401602060405180830381865afa158015613afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b219190614f42565b3388614541565b336001600160a01b03167fd1469a782115ba96fa7fabe422d9723867f349cfbaf9b999e327e3db4f8baa3e8d8d8d89604051613b6794939291906150c4565b60405180910390a250929a9950505050505050505050565b613b9760008051602061532083398151915233613342565b613ba15733610bf8565b60db55565b6000613bb460975460ff1690565b15613bd25760405163694974fb60e11b815260040160405180910390fd5b81600003613bf257604051620abbb960e61b815260040160405180910390fd5b6001600160a01b038316600090815260d6602052604090205460ff16613c2d578260405163f5f4c28560e01b8152600401610c129190614c0a565b60c9546040516302af047960e41b81526000916001600160a01b031690632af0479090613c5e903390600401614c0a565b602060405180830381865afa158015613c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9f9190614f88565b905080600003613caf57336111b5565b613cb9853361347c565b613cd2856000805160206153008339815191528561490c565b60d0546000906001600160a01b03878116911614613e5c5760d054600090613d049088906001600160a01b0316610c35565b90508062ffffff16600003613d3d5760d05460405163a4ea635160e01b8152610c129189916001600160a01b0390911690600401614fa1565b60d054600090613d599089906001600160a01b0316848961220c565b60408051610100810182526001600160a01b03808c16825260d05416602082015262ffffff85169181019190915230606082015290915060009060808101613da242600f614fd1565b8152602001888152602001613dd1613dca60646112c860d2548861441a90919063ffffffff16565b8590614432565b8152600060209091015260405163414bf38960e01b81529091506000805160206153008339815191529063414bf38990613e0f908490600401614fe4565b6020604051808303816000875af1158015613e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e529190614f88565b9350505050613e5f565b50825b80600003613e8057604051639b29a93160e01b815260040160405180910390fd5b60d454811115613ea85760d4546040516375889fd760e11b8152610c1291839160040161504d565b60d554811015613ed05760d55460405163444ed8a560e11b8152610c1291839160040161504d565b60c9546040516368800cd360e01b8152600481018490526000916001600160a01b0316906368800cd390602401602060405180830381865afa158015613f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3e9190614f88565b60c954604051634f558e7960e01b8152600481018390529192506000916001600160a01b0390911690634f558e7990602401602060405180830381865afa158015613f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb1919061505b565b90506000613fbf8585614321565b9050821580613fcc575081155b1561402e5760d05460dc54613fee916001600160a01b0390811691168661443e565b60cb5460c9546040516331a9108f60e11b81526123916004820152614029926001600160a01b03908116921690636352211e9060240161160a565b614089565b60d05460dc5461404f916001600160a01b0390811691166116f0848861509a565b60d05460c9546040516331a9108f60e11b815260048101869052614089926001600160a01b03908116921690636352211e9060240161172b565b60d0546001600160a01b03908116600090815260d76020908152604080832060cb5490941683529290529081205461271090816140c6858961509a565b6140d09190615078565b6140da91906150ad565b6140e49190615078565b60cb5490915061271090614103906001600160a01b03168b6000613027565b60cb546127109061411d906001600160a01b03168d6141d2565b61412790856150ad565b6141319190615078565b61413b91906150ad565b6141459190615078565b60c9546040516331a9108f60e11b8152612391600482015291925061417e918b916001600160a01b031690636352211e90602401611863565b336001600160a01b03167fb9e470208de2a9058ebfcea09f875f4b4fab9492dd164962f84d744002e6465d8b8b8b856040516141bd94939291906150c4565b60405180910390a29998505050505050505050565b60cb5460009081906001600160a01b0385811691161480614200575060cb546001600160a01b038481169116145b15614296576001600160a01b03808516600090815260d760209081526040808320938716835292905220541561425b576001600160a01b03808516600090815260d7602090815260408083209387168352929052205461428f565b6001600160a01b03808416600090815260d7602090815260408083209388168352929052205461428f906305f5e100615078565b90506142f3565b60cb546001600160a01b03908116600090815260d760209081526040808320878516845290915280822054928716825290205461271091906142dc906305f5e100615078565b6142e691906150ad565b6142f09190615078565b90505b9392505050565b61431260008051602061532083398151915233613342565b61431c5733610bf8565b60d255565b60008061432d84614a0f565b905060006005821115614343575060d354614354565b50600081815260d860205260409020545b61271061436182866150ad565b6122ae9190615078565b61437482610c20565b61437e813361464f565b6119228383614739565b6143a060008051602061532083398151915233613342565b6143aa5733610bf8565b60d080546001600160a01b0319166001600160a01b0392909216919091179055565b6143e460008051602061532083398151915233613342565b6143ee5733610bf8565b60d555565b61440b60008051602061532083398151915233613342565b6144155733610bf8565b60d455565b60006142f382846150ad565b60006142f38284615078565b60006142f3828461509a565b600080846001600160a01b031663a9059cbb60e01b8585604051602401614466929190615112565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516144a49190615173565b6000604051808303816000865af19150503d80600081146144e1576040519150601f19603f3d011682016040523d82523d6000602084013e6144e6565b606091505b5091509150818015614510575080511580614510575080806020019051810190614510919061505b565b6122055760405162461bcd60e51b815260206004820152600260248201526114d560f21b6044820152606401610c12565b600080856001600160a01b03166323b872dd60e01b86868660405160240161456b9392919061512b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516145a99190615173565b6000604051808303816000865af19150503d80600081146145e6576040519150601f19603f3d011682016040523d82523d6000602084013e6145eb565b606091505b5091509150818015614615575080511580614615575080806020019051810190614615919061505b565b6146475760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b6044820152606401610c12565b505050505050565b6146598282613342565b611a8757614671816001600160a01b03166014614a39565b61467c836020614a39565b60405160200161468d92919061518f565b60408051601f198184030181529082905262461bcd60e51b8252610c12916004016151fe565b6146bd8282613342565b611a875760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556146f53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6147438282613342565b15611a875760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60975460ff166147e95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c12565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516148239190614c0a565b60405180910390a1565b600054610100900460ff16611b395760405162461bcd60e51b8152600401610c1290615231565b600054610100900460ff1661487b5760405162461bcd60e51b8152600401610c1290615231565b6097805460ff19169055565b611a8782826146b3565b60975460ff16156148d75760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c12565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586148163390565b600080846001600160a01b031663095ea7b360e01b8585604051602401614934929190615112565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516149729190615173565b6000604051808303816000865af19150503d80600081146149af576040519150601f19603f3d011682016040523d82523d6000602084013e6149b4565b606091505b50915091508180156149de5750805115806149de5750808060200190518101906149de919061505b565b6122055760405162461bcd60e51b8152602060048201526002602482015261534160f01b6044820152606401610c12565b600081815b81156142f357614a2582600a614426565b9150614a32816001614bd4565b9050614a14565b60606000614a488360026150ad565b614a53906002614fd1565b6001600160401b03811115614a6a57614a6a61527c565b6040519080825280601f01601f191660200182016040528015614a94576020820181803683370190505b509050600360fc1b81600081518110614aaf57614aaf615292565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614ade57614ade615292565b60200101906001600160f81b031916908160001a9053506000614b028460026150ad565b614b0d906001614fd1565b90505b6001811115614b85576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614b4157614b41615292565b1a60f81b828281518110614b5757614b57615292565b60200101906001600160f81b031916908160001a90535060049490941c93614b7e816152a8565b9050614b10565b5083156142f35760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610c12565b60006142f38284614fd1565b600060208284031215614bf257600080fd5b81356001600160e01b0319811681146142f357600080fd5b6001600160a01b0391909116815260200190565b600060208284031215614c3057600080fd5b5035919050565b6001600160a01b0381168114614c4c57600080fd5b50565b8035614c5a81614c37565b919050565b600060208284031215614c7157600080fd5b81356142f381614c37565b60008060408385031215614c8f57600080fd5b8235614c9a81614c37565b91506020830135614caa81614c37565b809150509250929050565b60008060408385031215614cc857600080fd5b823591506020830135614caa81614c37565b8015158114614c4c57600080fd5b600080600080600060a08688031215614d0057600080fd5b853594506020860135935060408601359250606086013591506080860135614d2781614cda565b809150509295509295909350565b60008060008060808587031215614d4b57600080fd5b8435614d5681614c37565b93506020850135614d6681614c37565b9250604085013562ffffff81168114614d7e57600080fd5b9396929550929360600135925050565b600080600060608486031215614da357600080fd5b8335614dae81614c37565b92506020840135614dbe81614c37565b929592945050506040919091013590565b60008060008060008060008060008060006101608c8e031215614df157600080fd5b8b35614dfc81614c37565b9a5060208c0135614e0c81614c37565b995060408c0135614e1c81614c37565b985060608c0135614e2c81614c37565b975060808c0135614e3c81614c37565b965060a08c0135614e4c81614c37565b955060c08c0135614e5c81614c37565b945060e08c0135614e6c81614c37565b93506101008c0135614e7d81614c37565b9250614e8c6101208d01614c4f565b9150614e9b6101408d01614c4f565b90509295989b509295989b9093969950565b600080600060608486031215614ec257600080fd5b8335614ecd81614c37565b92506020840135614edd81614c37565b91506040840135614eed81614cda565b809150509250925092565b60008060408385031215614f0b57600080fd5b50508035926020909101359150565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b600060208284031215614f5457600080fd5b81516142f381614c37565b600060208284031215614f7157600080fd5b81516001600160801b03811681146142f357600080fd5b600060208284031215614f9a57600080fd5b5051919050565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bd457610bd4614fbb565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b918252602082015260400190565b60006020828403121561506d57600080fd5b81516142f381614cda565b60008261509557634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610bd457610bd4614fbb565b8082028115828204841417610bd457610bd4614fbb565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b9485526020850193909352604084019190915260608301521515608082015260a00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60005b8381101561516a578181015183820152602001615152565b50506000910152565b6000825161518581846020870161514f565b9190910192915050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516151c181601785016020880161514f565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516151f281602884016020880161514f565b01602801949350505050565b602081526000825180602084015261521d81604085016020870161514f565b601f01601f19169190910160400192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000816152b7576152b7614fbb565b50600019019056fedc8b1416a064e54e8fcba3f3bc78e3cce2f7fdb81752ac1a2e9b70b7acaf194f7ef4199f9933b2356707a03fe4c11182ceeb37ad11aa40a3d14a8ed728083cf0000000000000000000000000e592427a0aece92de3edee1f18e0157c0586156497667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929a2646970667358221220b868f5f557cf87c89eb8ead36030c4f6736042f5c0ee33fc3d9dbd9c83d31c8f64736f6c63430008120033