UNPKG

@augmentedfinance/protocol-v1

Version:

Augmented Protocol smart contracts

934 lines 73.4 kB
"use strict"; /* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ProtocolDataProviderFactory = void 0; const contracts_1 = require("@ethersproject/contracts"); class ProtocolDataProviderFactory extends contracts_1.ContractFactory { constructor(signer) { super(_abi, _bytecode, signer); } deploy(addressesProvider, overrides) { return super.deploy(addressesProvider, overrides || {}); } getDeployTransaction(addressesProvider, overrides) { return super.getDeployTransaction(addressesProvider, overrides || {}); } attach(address) { return super.attach(address); } connect(signer) { return super.connect(signer); } static connect(address, signerOrProvider) { return new contracts_1.Contract(address, _abi, signerOrProvider); } } exports.ProtocolDataProviderFactory = ProtocolDataProviderFactory; const _abi = [ { inputs: [ { internalType: "contract IMarketAccessController", name: "addressesProvider", type: "address", }, ], stateMutability: "nonpayable", type: "constructor", }, { inputs: [], name: "ADDRESS_PROVIDER", outputs: [ { internalType: "contract IMarketAccessController", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "ETH", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "USD", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, { internalType: "address", name: "token", type: "address", }, { internalType: "enum IUiPoolDataProvider.TokenType", name: "tokenType", type: "uint8", }, ], name: "balanceOf", outputs: [ { components: [ { internalType: "uint256", name: "balance", type: "uint256", }, { internalType: "uint256", name: "underlyingBalance", type: "uint256", }, { internalType: "uint256", name: "rewardedBalance", type: "uint256", }, { internalType: "uint32", name: "unstakeWindowStart", type: "uint32", }, { internalType: "uint32", name: "unstakeWindowEnd", type: "uint32", }, ], internalType: "struct IUiPoolDataProvider.TokenBalance", name: "r", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address[]", name: "users", type: "address[]", }, { internalType: "address[]", name: "tokens", type: "address[]", }, { internalType: "enum IUiPoolDataProvider.TokenType[]", name: "tokenTypes", type: "uint8[]", }, { internalType: "enum IUiPoolDataProvider.TokenType", name: "defType", type: "uint8", }, ], name: "batchBalanceOf", outputs: [ { components: [ { internalType: "uint256", name: "balance", type: "uint256", }, { internalType: "uint256", name: "underlyingBalance", type: "uint256", }, { internalType: "uint256", name: "rewardedBalance", type: "uint256", }, { internalType: "uint32", name: "unstakeWindowStart", type: "uint32", }, { internalType: "uint32", name: "unstakeWindowEnd", type: "uint32", }, ], internalType: "struct IUiPoolDataProvider.TokenBalance[]", name: "balances", type: "tuple[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "holder", type: "address", }, { internalType: "uint32", name: "minDuration", type: "uint32", }, ], name: "explainReward", outputs: [ { components: [ { internalType: "uint256", name: "amountClaimable", type: "uint256", }, { internalType: "uint256", name: "amountExtra", type: "uint256", }, { internalType: "uint256", name: "maxBoost", type: "uint256", }, { internalType: "uint256", name: "boostLimit", type: "uint256", }, { internalType: "uint32", name: "latestClaimAt", type: "uint32", }, { components: [ { internalType: "uint256", name: "amount", type: "uint256", }, { internalType: "uint256", name: "extra", type: "uint256", }, { internalType: "address", name: "pool", type: "address", }, { internalType: "uint32", name: "since", type: "uint32", }, { internalType: "uint32", name: "factor", type: "uint32", }, { internalType: "enum RewardType", name: "rewardType", type: "uint8", }, ], internalType: "struct RewardExplainEntry[]", name: "allocations", type: "tuple[]", }, ], internalType: "struct RewardExplained", name: "", type: "tuple", }, { internalType: "uint32", name: "at", type: "uint32", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getAddresses", outputs: [ { components: [ { internalType: "address", name: "addressProvider", type: "address", }, { internalType: "address", name: "lendingPool", type: "address", }, { internalType: "address", name: "stakeConfigurator", type: "address", }, { internalType: "address", name: "rewardConfigurator", type: "address", }, { internalType: "address", name: "rewardController", type: "address", }, { internalType: "address", name: "wethGateway", type: "address", }, { internalType: "address", name: "priceOracle", type: "address", }, { internalType: "address", name: "lendingPriceOracle", type: "address", }, { internalType: "address", name: "rewardToken", type: "address", }, { internalType: "address", name: "rewardStake", type: "address", }, { internalType: "address", name: "referralRegistry", type: "address", }, ], internalType: "struct IUiPoolDataProvider.Addresses", name: "data", type: "tuple", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "bool", name: "includeAssets", type: "bool", }, ], name: "getAllTokenDescriptions", outputs: [ { components: [ { internalType: "address", name: "token", type: "address", }, { internalType: "address", name: "priceToken", type: "address", }, { internalType: "address", name: "rewardPool", type: "address", }, { internalType: "string", name: "tokenSymbol", type: "string", }, { internalType: "address", name: "underlying", type: "address", }, { internalType: "uint8", name: "decimals", type: "uint8", }, { internalType: "enum IUiPoolDataProvider.TokenType", name: "tokenType", type: "uint8", }, { internalType: "bool", name: "active", type: "bool", }, { internalType: "bool", name: "frozen", type: "bool", }, ], internalType: "struct IUiPoolDataProvider.TokenDescription[]", name: "tokens", type: "tuple[]", }, { internalType: "uint256", name: "tokenCount", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "bool", name: "includeAssets", type: "bool", }, ], name: "getAllTokens", outputs: [ { internalType: "address[]", name: "tokens", type: "address[]", }, { internalType: "uint256", name: "tokenCount", type: "uint256", }, { internalType: "enum IUiPoolDataProvider.TokenType[]", name: "tokenTypes", type: "uint8[]", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveConfigurationData", outputs: [ { internalType: "uint256", name: "decimals", type: "uint256", }, { internalType: "uint256", name: "ltv", type: "uint256", }, { internalType: "uint256", name: "liquidationThreshold", type: "uint256", }, { internalType: "uint256", name: "liquidationBonus", type: "uint256", }, { internalType: "uint256", name: "reserveFactor", type: "uint256", }, { internalType: "bool", name: "usageAsCollateralEnabled", type: "bool", }, { internalType: "bool", name: "borrowingEnabled", type: "bool", }, { internalType: "bool", name: "stableBorrowRateEnabled", type: "bool", }, { internalType: "bool", name: "isActive", type: "bool", }, { internalType: "bool", name: "isFrozen", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveData", outputs: [ { internalType: "uint256", name: "availableLiquidity", type: "uint256", }, { internalType: "uint256", name: "totalStableDebt", type: "uint256", }, { internalType: "uint256", name: "totalVariableDebt", type: "uint256", }, { internalType: "uint256", name: "liquidityRate", type: "uint256", }, { internalType: "uint256", name: "variableBorrowRate", type: "uint256", }, { internalType: "uint256", name: "stableBorrowRate", type: "uint256", }, { internalType: "uint256", name: "averageStableBorrowRate", type: "uint256", }, { internalType: "uint256", name: "liquidityIndex", type: "uint256", }, { internalType: "uint256", name: "variableBorrowIndex", type: "uint256", }, { internalType: "uint40", name: "lastUpdateTimestamp", type: "uint40", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, ], name: "getReserveTokensAddresses", outputs: [ { internalType: "address", name: "depositTokenAddress", type: "address", }, { internalType: "address", name: "stableDebtTokenAddress", type: "address", }, { internalType: "address", name: "variableDebtTokenAddress", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "user", type: "address", }, ], name: "getReservesData", outputs: [ { components: [ { internalType: "address", name: "underlyingAsset", type: "address", }, { internalType: "address", name: "pricingAsset", type: "address", }, { internalType: "string", name: "name", type: "string", }, { internalType: "string", name: "symbol", type: "string", }, { internalType: "uint256", name: "decimals", type: "uint256", }, { internalType: "uint256", name: "baseLTVasCollateral", type: "uint256", }, { internalType: "uint256", name: "reserveLiquidationThreshold", type: "uint256", }, { internalType: "uint256", name: "reserveLiquidationBonus", type: "uint256", }, { internalType: "uint256", name: "reserveFactor", type: "uint256", }, { internalType: "bool", name: "usageAsCollateralEnabled", type: "bool", }, { internalType: "bool", name: "borrowingEnabled", type: "bool", }, { internalType: "bool", name: "stableBorrowRateEnabled", type: "bool", }, { internalType: "bool", name: "isActive", type: "bool", }, { internalType: "bool", name: "isFrozen", type: "bool", }, { internalType: "uint128", name: "liquidityIndex", type: "uint128", }, { internalType: "uint128", name: "variableBorrowIndex", type: "uint128", }, { internalType: "uint128", name: "liquidityRate", type: "uint128", }, { internalType: "uint128", name: "variableBorrowRate", type: "uint128", }, { internalType: "uint128", name: "stableBorrowRate", type: "uint128", }, { internalType: "uint40", name: "lastUpdateTimestamp", type: "uint40", }, { internalType: "address", name: "depositTokenAddress", type: "address", }, { internalType: "address", name: "stableDebtTokenAddress", type: "address", }, { internalType: "address", name: "variableDebtTokenAddress", type: "address", }, { internalType: "address", name: "strategy", type: "address", }, { internalType: "bool", name: "isExternalStrategy", type: "bool", }, { internalType: "uint256", name: "availableLiquidity", type: "uint256", }, { internalType: "uint256", name: "totalPrincipalStableDebt", type: "uint256", }, { internalType: "uint256", name: "averageStableRate", type: "uint256", }, { internalType: "uint256", name: "totalStableDebt", type: "uint256", }, { internalType: "uint256", name: "stableDebtLastUpdateTimestamp", type: "uint256", }, { internalType: "uint256", name: "totalScaledVariableDebt", type: "uint256", }, { internalType: "uint256", name: "priceInEth", type: "uint256", }, ], internalType: "struct IUiPoolDataProvider.AggregatedReserveData[]", name: "", type: "tuple[]", }, { components: [ { internalType: "address", name: "underlyingAsset", type: "address", }, { internalType: "uint256", name: "scaledDepositTokenBalance", type: "uint256", }, { internalType: "bool", name: "usageAsCollateralEnabledOnUser", type: "bool", }, { internalType: "uint256", name: "stableBorrowRate", type: "uint256", }, { internalType: "uint256", name: "scaledVariableDebt", type: "uint256", }, { internalType: "uint256", name: "principalStableDebt", type: "uint256", }, { internalType: "uint256", name: "stableBorrowLastUpdateTimestamp", type: "uint256", }, ], internalType: "struct IUiPoolDataProvider.UserReserveData[]", name: "", type: "tuple[]", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "asset", type: "address", }, { internalType: "address", name: "user", type: "address", }, ], name: "getUserReserveData", outputs: [ { internalType: "uint256", name: "currentDepositBalance", type: "uint256", }, { internalType: "uint256", name: "currentStableDebt", type: "uint256", }, { internalType: "uint256", name: "currentVariableDebt", type: "uint256", }, { internalType: "uint256", name: "principalStableDebt", type: "uint256", }, { internalType: "uint256", name: "scaledVariableDebt", type: "uint256", }, { internalType: "uint256", name: "stableBorrowRate", type: "uint256", }, { internalType: "uint256", name: "liquidityRate", type: "uint256", }, { internalType: "uint40", name: "stableRateLastUpdated", type: "uint40", }, { internalType: "bool", name: "usageAsCollateralEnabled", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address[]", name: "pools", type: "address[]", }, { internalType: "uint256", name: "ignoreMask", type: "uint256", }, ], name: "rewardPoolNames", outputs: [ { internalType: "string[]", name: "names", type: "string[]", }, ], stateMutability: "view", type: "function", }, ]; const _bytecode = "0x60a06040523480156200001157600080fd5b506040516200569a3803806200569a83398101604081905262000034916200004a565b60601b6001600160601b0319166080526200007a565b6000602082840312156200005c578081fd5b81516001600160a01b038116811462000073578182fd5b9392505050565b60805160601c6155b5620000e56000396000818160ff015281816105a0015281816106b101528181610bc401528181610f450152818161109901528181611a8501528181612d2a01528181612f5d0152818161308f015281816131240152613f7201526155b56000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806374831afa11610097578063a39fac1211610066578063a39fac1214610342578063cf0a230a14610357578063d2493b6c14610378578063ec489c21146103b557600080fd5b806374831afa146102c65780638322fff2146102e757806387471ff3146103025780639dab71581461032257600080fd5b806328dd2d01116100d357806328dd2d011461017957806335ea6a75146101d95780633e1501411461023d578063443b60b1146102a457600080fd5b80631848effa146100fa5780631bf6c21b1461013e57806320710b8014610159575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101217310f7fc1f91ba351f9c629c5947ad69bd03c05b9681565b61016c6101673660046147f3565b6103d7565b6040516101359190614d70565b61018c6101873660046146a2565b61058f565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015264ffffffffff1660e0830152151561010082015261012001610135565b6101ec6101e736600461466a565b610bb1565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c085015260e084015261010083015264ffffffffff1661012082015261014001610135565b61025061024b36600461466a565b610f32565b604080519a8b5260208b01999099529789019690965260608801949094526080870192909252151560a0860152151560c0850152151560e08401521515610100830152151561012082015261014001610135565b6102b76102b23660046148ba565b61108f565b60405161013593929190614cde565b6102d96102d43660046148ba565b611a7e565b60405161013592919061508f565b61012173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b61031561031036600461474d565b61250c565b604051610135919061500a565b6103356103303660046146da565b6126e4565b6040516101359190615386565b61034a612cd2565b6040516101359190615185565b61036a610365366004614720565b612e63565b60405161013592919061528d565b61038b61038636600461466a565b612f55565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610135565b6103c86103c336600461466a565b613087565b60405161013593929190614dd1565b6060826001600160401b038111156103ff57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561043257816020015b606081526020019060019003908161041d5790505b50905060005b83811015610586576001831615158061048e5750600085858381811061046e57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610483919061466a565b6001600160a01b0316145b156104985761056d565b8484828181106104b857634e487b7160e01b600052603260045260246000fd5b90506020020160208101906104cd919061466a565b6001600160a01b031663d29939836040518163ffffffff1660e01b815260040160006040518083038186803b15801561050557600080fd5b505afa158015610519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261054191908101906148f4565b82828151811061056157634e487b7160e01b600052603260045260246000fd5b60200260200101819052505b610578816001615469565b60019390931c929050610438565b505b9392505050565b6000806000806000806000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105f757600080fd5b505afa15801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062f9190614686565b6040516335ea6a7560e01b81526001600160a01b038e8116600483015291909116906335ea6a75906024016101806040518083038186803b15801561067357600080fd5b505afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab919061499e565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561070857600080fd5b505afa15801561071c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107409190614686565b604051634417a58360e01b81526001600160a01b038e811660048301529190911690634417a5839060240160206040518083038186803b15801561078357600080fd5b505afa158015610797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bb9190614983565b905081606001516001600160801b031694506107e882610160015160ff1682613ebd90919063ffffffff16565b60e08301516040516370a0823160e01b81526001600160a01b038f811660048301529295509116906370a082319060240160206040518083038186803b15801561083157600080fd5b505afa158015610845573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108699190614b2b565b610120830151909b506001600160a01b031615610985576101208201516040516370a0823160e01b81526001600160a01b038e81166004830152909116906370a082319060240160206040518083038186803b1580156108c857600080fd5b505afa1580156108dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109009190614b2b565b610120830151604051630ed1279f60e11b81526001600160a01b038f81166004830152929b50911690631da24f3e9060240160206040518083038186803b15801561094a57600080fd5b505afa15801561095e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109829190614b2b565b96505b6101008201516001600160a01b031615610ba2576101008201516040516370a0823160e01b81526001600160a01b038e81166004830152909116906370a082319060240160206040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190614b2b565b61010083015160405163631a6fd560e11b81526001600160a01b038f81166004830152929c5091169063c634dfaa9060240160206040518083038186803b158015610a6357600080fd5b505afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190614b2b565b61010083015160405163e78c9b3b60e01b81526001600160a01b038f81166004830152929a5091169063e78c9b3b9060240160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190614b2b565b610100830151604051631e739ae360e21b81526001600160a01b038f811660048301529298509116906379ce6b8c9060240160206040518083038186803b158015610b6757600080fd5b505afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f9190614be7565b93505b50509295985092959850929598565b60008060008060008060008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1b57600080fd5b505afa158015610c2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c539190614686565b6040516335ea6a7560e01b81526001600160a01b038e8116600483015291909116906335ea6a75906024016101806040518083038186803b158015610c9757600080fd5b505afa158015610cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccf919061499e565b60e08101516040516370a0823160e01b81526001600160a01b0391821660048201529192508d16906370a082319060240160206040518083038186803b158015610d1857600080fd5b505afa158015610d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d509190614b2b565b610120820151909b506001600160a01b031615610de0578061012001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610da557600080fd5b505afa158015610db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddd9190614b2b565b98505b6101008101516001600160a01b031615610ee5578061010001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e3257600080fd5b505afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a9190614b2b565b99508061010001516001600160a01b03166390f6fcf26040518163ffffffff1660e01b815260040160206040518083038186803b158015610eaa57600080fd5b505afa158015610ebe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190614b2b565b94505b6060810151608082015160a08301516020840151604085015160c0909501516001600160801b039485169c509284169a509083169850821695509116925090509193959799509193959799565b60008060008060008060008060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f9c57600080fd5b505afa158015610fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd49190614686565b60405163c44b11f760e01b81526001600160a01b038e81166004830152919091169063c44b11f79060240160206040518083038186803b15801561101757600080fd5b505afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104f9190614983565b905061105a81613ed1565b909e50929c50909a509850965061107081613f1d565b9d9f9c9e509a9c999b989a8d15159a9099909850919650945092505050565b60606000606060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110f057600080fd5b505afa158015611104573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111289190614686565b90506000816001600160a01b031663d1946dbc6040518163ffffffff1660e01b815260040160006040518083038186803b15801561116557600080fd5b505afa158015611179573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111a1919081019061483c565b905060606000806111b56301000000613f59565b90506001600160a01b0381161561124157806001600160a01b03166378a9eeed6040518163ffffffff1660e01b815260040160006040518083038186803b1580156111ff57600080fd5b505afa158015611213573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261123b9190810190614876565b90935091505b835161124e9060036154a9565b835161125b906002615469565b6112659190615469565b9650881561127c5783516112799088615469565b96505b866001600160401b038111156112a257634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156112cb578160200160208202803683370190505b509750866001600160401b038111156112f457634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561131d578160200160208202803683370190505b5095506000965061133062100000613f59565b88888151811061135057634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600586888151811061139257634e487b7160e01b600052603260045260246000fd5b602002602001019060078111156113b957634e487b7160e01b600052602160045260246000fd5b908160078111156113da57634e487b7160e01b600052602160045260246000fd5b8152505060006001600160a01b031688888151811061140957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161461142d5786611429816154f8565b9750505b61143962200000613f59565b88888151811061145957634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600686888151811061149b57634e487b7160e01b600052603260045260246000fd5b602002602001019060078111156114c257634e487b7160e01b600052602160045260246000fd5b908160078111156114e357634e487b7160e01b600052602160045260246000fd5b8152505060006001600160a01b031688888151811061151257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316146115365786611532816154f8565b9750505b60005b8451811015611960576000866001600160a01b03166335ea6a7587848151811061157357634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016115a691906001600160a01b0391909116815260200190565b6101806040518083038186803b1580156115bf57600080fd5b505afa1580156115d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f7919061499e565b90508a156116e25785828151811061161f57634e487b7160e01b600052603260045260246000fd5b60200260200101518a8a8151811061164757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506000888a8151811061168957634e487b7160e01b600052603260045260246000fd5b602002602001019060078111156116b057634e487b7160e01b600052602160045260246000fd5b908160078111156116d157634e487b7160e01b600052602160045260246000fd5b905250886116de816154f8565b9950505b8060e001518a8a8151811061170757634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506001888a8151811061174957634e487b7160e01b600052603260045260246000fd5b6020026020010190600781111561177057634e487b7160e01b600052602160045260246000fd5b9081600781111561179157634e487b7160e01b600052602160045260246000fd5b9052508861179e816154f8565b610120830151909a506001600160a01b0316159050611878578061012001518a8a815181106117dd57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506002888a8151811061181f57634e487b7160e01b600052603260045260246000fd5b6020026020010190600781111561184657634e487b7160e01b600052602160045260246000fd5b9081600781111561186757634e487b7160e01b600052602160045260246000fd5b90525088611874816154f8565b9950505b6101008101516001600160a01b03161561194d578061010001518a8a815181106118b257634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250506003888a815181106118f457634e487b7160e01b600052603260045260246000fd5b6020026020010190600781111561191b57634e487b7160e01b600052602160045260246000fd5b9081600781111561193c57634e487b7160e01b600052602160045260246000fd5b90525088611949816154f8565b9950505b5080611958816154f8565b915050611539565b5060005b8351811015611a715783818151811061198d57634e487b7160e01b600052603260045260246000fd5b60200260200101518989815181106119b557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250508281106119e35760046119e6565b60075b878981518110611a0657634e487b7160e01b600052603260045260246000fd5b60200260200101906007811115611a2d57634e487b7160e01b600052602160045260246000fd5b90816007811115611a4e57634e487b7160e01b600052602160045260246000fd5b90525087611a5b816154f8565b9850508080611a69906154f8565b915050611964565b5050505050509193909250565b60606000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611adc57600080fd5b505afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b149190614686565b90506000816001600160a01b031663d1946dbc6040518163ffffffff1660e01b815260040160006040518083038186803b158015611b5157600080fd5b505afa158015611b65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b8d919081019061483c565b90506060600080611ba16301000000613f59565b90506001600160a01b03811615611c2d57806001600160a01b03166378a9eeed6040518163ffffffff1660e01b815260040160006040518083038186803b158015611beb57600080fd5b505afa158015611bff573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c279190810190614876565b90935091505b8351611c3a9060036154a9565b8351611c47906002615469565b611c519190615469565b95508715611c68578351611c659087615469565b95505b856001600160401b03811115611c8e57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611cc757816020015b611cb46143e5565b815260200190600190039081611cac5790505b509650600095506000611cdc62100000613f59565b90506001600160a01b03811615611e7957604051806101200160405280826001600160a01b03168152602001826001600160a01b0316815260200160006001600160a01b03168152602001826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611d6057600080fd5b505afa158015611d74573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d9c91908101906148f4565b815260200160006001600160a01b03168152602001826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e229190614c01565b60ff168152602001600581526001602082015260006040909101528851899089908110611e5f57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508680611e75906154f8565b9750505b611e8562200000613f59565b90506001600160a01b0381161561204d57604051806101200160405280826001600160a01b0316815260200160006001600160a01b03168152602001826001600160a01b03168152602001826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611f0957600080fd5b505afa158015611f1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f4591908101906148f4565b815260200189600081518110611f6b57634e487b7160e01b600052603260045260246000fd5b6020026020010151600001516001600160a01b03168152602001826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611fbe57600080fd5b505afa158015611fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff69190614c01565b60ff16815260200160068152600160208201526000604090910152885189908990811061203357634e487b7160e01b600052603260045260246000fd5b60200260200101819052508680612049906154f8565b9750505b60005b855181101561242d5785818151811061207957634e487b7160e01b600052603260045260246000fd5b60209081029190910101516040516335ea6a7560e01b81526001600160a01b0380831660048301529193506000918916906335ea6a75906024016101806040518083038186803b1580156120cc57600080fd5b505afa1580156120e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612104919061499e565b90506000806000806121198560000151613f1d565b8851519397509195509350915060301c60ff168480156121365750825b92508f156122f957604051806101200160405280896001600160a01b03168152602001896001600160a01b0316815260200160006001600160a01b03168152602001896001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156121b157600080fd5b505afa1580156121c5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121ed91908101906148f4565b8152602001612206886000015151600160501b16151590565b612211576000612291565b610140880151604051634e89a71160e01b81526001600160a01b038c8116600483015290911690634e89a7119060240160206040518083038186803b15801561225957600080fd5b505afa15801561226d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122919190614686565b6001600160a01b0316815260ff8316602082015260400160008152602001600115158152602001600015158152508f8f815181106122df57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508d806122f5906154f8565b9e50505b61230c6001898860e00151848989613ff4565b8f8f8151811061232c57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508d80612342906154f8565b610120880151909f506001600160a01b03161590506123a95761236f600289886101200151848789613ff4565b8f8f8151811061238f57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508d806123a5906154f8565b9e50505b6101008601516001600160a01b031615612414576123da600389886101000151848680156123d45750875b89613ff4565b8f8f815181106123fa57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508d80612410906154f8565b9e50505b5050505050508080612425906154f8565b915050612050565b5060005b84518110156125005760006001600160a01b031685828151811061246557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03161415612481576124ee565b6124b48582815181106124a457634e487b7160e01b600052603260045260246000fd5b6020026020010151858310614176565b8989815181106124d457634e487b7160e01b600052603260045260246000fd5b602002602001018190525087806124ea906154f8565b9850505b806124f8816154f8565b915050612431565b50505050505050915091565b606061251885886154a9565b6001600160401b0381111561253d57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156125ac57816020015b6125996040518060a00160405280600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525090565b81526020019060019003908161255b5790505b50905060005b878110156126d85760005b868110156126c5576126738a8a848181106125e857634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125fd919061466a565b89898481811061261d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612632919061466a565b871561266d5788888581811061265857634e487b7160e01b600052603260045260246000fd5b905060200201602081019061033091906148da565b866126e4565b838261267f8a866154a9565b6126899190615469565b815181106126a757634e487b7160e01b600052603260045260246000fd5b602002602001018190525080806126bd906154f8565b9150506125bd565b50806126d0816154f8565b9150506125b2565b50979650505050505050565b6127226040518060a00160405280600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525090565b600482600781111561274457634e487b7160e01b600052602160045260246000fd5b10612aea57600482600781111561276b57634e487b7160e01b600052602160045260246000fd5b14806127965750600782600781111561279457634e487b7160e01b600052602160045260246000fd5b145b1561292a5760405163115eb1cf60e01b81526001600160a01b03858116600483015284169063115eb1cf9060240160606040518083038186803b1580156127dc57600080fd5b505afa1580156127f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061