@augmentedfinance/protocol-v1
Version:
Augmented Protocol smart contracts
1,228 lines • 60.7 kB
JavaScript
"use strict";
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
Object.defineProperty(exports, "__esModule", { value: true });
exports.StableDebtTokenFactory = void 0;
const contracts_1 = require("@ethersproject/contracts");
class StableDebtTokenFactory extends contracts_1.ContractFactory {
constructor(signer) {
super(_abi, _bytecode, signer);
}
deploy(overrides) {
return super.deploy(overrides || {});
}
getDeployTransaction(overrides) {
return super.getDeployTransaction(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.StableDebtTokenFactory = StableDebtTokenFactory;
const _abi = [
{
inputs: [],
stateMutability: "nonpayable",
type: "constructor",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint16",
name: "",
type: "uint16",
},
],
name: "BaselinePercentageUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "fromUser",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "toUser",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "asset",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "BorrowAllowanceDelegated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "user",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "currentBalance",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "balanceIncrease",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "avgStableRate",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "newTotalSupply",
type: "uint256",
},
],
name: "Burn",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "by",
type: "address",
},
{
indexed: false,
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "EmergencyPaused",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "underlyingAsset",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "pool",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "treasury",
type: "address",
},
{
indexed: false,
internalType: "string",
name: "tokenName",
type: "string",
},
{
indexed: false,
internalType: "string",
name: "tokenSymbol",
type: "string",
},
{
indexed: false,
internalType: "uint8",
name: "tokenDecimals",
type: "uint8",
},
{
indexed: false,
internalType: "bytes",
name: "params",
type: "bytes",
},
],
name: "Initialized",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "user",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "onBehalfOf",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "currentBalance",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "balanceIncrease",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "newRate",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "avgStableRate",
type: "uint256",
},
{
indexed: false,
internalType: "uint256",
name: "newTotalSupply",
type: "uint256",
},
],
name: "Mint",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
{
indexed: false,
internalType: "address",
name: "token",
type: "address",
},
],
name: "ProviderAdded",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "provider",
type: "address",
},
],
name: "ProviderRemoved",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint256",
name: "rate",
type: "uint256",
},
],
name: "RateUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "from",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Transfer",
type: "event",
},
{
inputs: [],
name: "POOL",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "REVISION",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [],
name: "UNDERLYING_ASSET_ADDRESS",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
],
name: "addRewardProvider",
outputs: [],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
],
name: "allowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "approve",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "delegatee",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "approveDelegation",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "attachedToRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "fromUser",
type: "address",
},
{
internalType: "address",
name: "toUser",
type: "address",
},
],
name: "borrowAllowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "burn",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint32",
name: "at",
type: "uint32",
},
],
name: "calcRewardFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
],
name: "claimRewardFor",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint32",
name: "",
type: "uint32",
},
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "holder",
type: "address",
},
{
internalType: "uint256",
name: "baseAmount",
type: "uint256",
},
{
internalType: "uint256",
name: "limit",
type: "uint256",
},
{
internalType: "uint16",
name: "minPct",
type: "uint16",
},
],
name: "claimRewardWithLimitFor",
outputs: [
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint32",
name: "since",
type: "uint32",
},
{
internalType: "bool",
name: "keepPull",
type: "bool",
},
{
internalType: "uint256",
name: "newLimit",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "cumulatedInterest",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "decimals",
outputs: [
{
internalType: "uint8",
name: "",
type: "uint8",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "detachedFromRewardController",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "getAverageStableRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getBaselinePercentage",
outputs: [
{
internalType: "uint16",
name: "",
type: "uint16",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getIncentivesController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getOwner",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getPoolName",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getRewardController",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getSupplyData",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint40",
name: "",
type: "uint40",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getTotalSupplyAndAvgRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "getTotalSupplyLastUpdated",
outputs: [
{
internalType: "uint40",
name: "",
type: "uint40",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "getUserLastUpdated",
outputs: [
{
internalType: "uint40",
name: "",
type: "uint40",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "getUserStableRate",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "address",
name: "pool",
type: "address",
},
{
internalType: "address",
name: "treasury",
type: "address",
},
{
internalType: "address",
name: "underlyingAsset",
type: "address",
},
{
internalType: "uint8",
name: "underlyingDecimals",
type: "uint8",
},
],
internalType: "struct PoolTokenConfig",
name: "config",
type: "tuple",
},
{
internalType: "string",
name: "name",
type: "string",
},
{
internalType: "string",
name: "symbol",
type: "string",
},
{
internalType: "bytes",
name: "params",
type: "bytes",
},
],
name: "initialize",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "config",
type: "tuple",
},
],
name: "initializeRewardPool",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "initializedRewardPoolWith",
outputs: [
{
components: [
{
internalType: "contract IRewardController",
name: "controller",
type: "address",
},
{
internalType: "string",
name: "poolName",
type: "string",
},
{
internalType: "uint16",
name: "baselinePercentage",
type: "uint16",
},
],
internalType: "struct IInitializableRewardPool.InitRewardPoolData",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "isPaused",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
{
internalType: "address",
name: "onBehalfOf",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
internalType: "uint256",
name: "rate",
type: "uint256",
},
],
name: "mint",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "name",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "principalBalanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "provider",
type: "address",
},
],
name: "removeRewardProvider",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "user",
type: "address",
},
],
name: "rewardedBalanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "uint16",
name: "factor",
type: "uint16",
},
],
name: "setBaselinePercentage",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "hook",
type: "address",
},
],
name: "setIncentivesController",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bool",
name: "paused",
type: "bool",
},
],
name: "setPaused",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "symbol",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalSupply",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "address",
name: "",
type: "address",
},
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
name: "transferFrom",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "pure",
type: "function",
},
{
inputs: [
{
internalType: "uint256",
name: "baseline",
type: "uint256",
},
],
name: "updateBaseline",
outputs: [
{
internalType: "bool",
name: "hasBaseline",
type: "bool",
},
{
internalType: "uint256",
name: "appliedRate",
type: "uint256",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "updatePool",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
];
const _bytecode = "0x6080604052620000136001600019620005b9565b600c556000600d553480156200002857600080fd5b506000808080806000604080516020808201808452600080845284519283019094528382528251929391926200006091839162000488565b5081516200007690600190602085019062000488565b506002805460ff929092166001600160a81b0319909216919091176101006001600160a01b03958616021790555050600380546001600160a01b0319908116948316949094179055600480549093169116179055604080516020810190915260008152620000ea90849084908490620000f3565b5050506200064e565b600a80546001600160a01b0319166001600160a01b03861617905561ffff821615620001245762000124826200013c565b82156200013657620001368362000221565b50505050565b6200014662000267565b61ffff811662000162576200015c600062000221565b620001ca565b62000170600160646200056a565b6200017d9060646200056a565b61ffff168161ffff161115620001ca5760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b60448201526064015b60405180910390fd5b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df918409906020015b60405180910390a150565b6200022b62000267565b6200023681620002c3565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b9060200162000216565b600a546001600160a01b0316620002c15760405162461bcd60e51b815260206004820152601660248201527f636f6e74726f6c6c6572206973207265717569726564000000000000000000006044820152606401620001c1565b565b620002d981620002dc60201b620014b61760201c565b50565b620002d981426007546001600160e01b0316821415620002fa575050565b6001600160e01b038211156200030f57600080fd5b60075463ffffffff600160e01b909104811690821681146200037c576007546001600160e01b0390811690620003489084906200038116565b600780546001600160e01b0319166001600160e01b0386811691909117909155620001369082811690849086906200040016565b505050565b60075463ffffffff600160e01b90910481169082161015620003db5760405162461bcd60e51b8152602060048201526012602482015271726574726f6163746976652075706461746560701b6044820152606401620001c1565b6007805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b6009546200040d57505050565b8163ffffffff168163ffffffff16146200037c576009546200043f906ec097ce7bc90715b34b9f100000000062000549565b6200044b908462000597565b9250620004598282620005d3565b6200046b9063ffffffff168462000597565b600860008282546200047e91906200052e565b9091555050505050565b8280546200049690620005fb565b90600052602060002090601f016020900481019282620004ba576000855562000505565b82601f10620004d557805160ff191683800117855562000505565b8280016001018555821562000505579182015b8281111562000505578251825591602001919060010190620004e8565b506200051392915062000517565b5090565b5b8082111562000513576000815560010162000518565b6000821982111562000544576200054462000638565b500190565b6000826200056557634e487b7160e01b81526012600452602481fd5b500490565b600061ffff808316818516818304811182151516156200058e576200058e62000638565b02949350505050565b6000816000190483118215151615620005b457620005b462000638565b500290565b600082821015620005ce57620005ce62000638565b500390565b600063ffffffff83811690831681811015620005f357620005f362000638565b039392505050565b600181811c908216806200061057607f821691505b602082108114156200063257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6135b7806200065e6000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c806390f6fcf211610167578063c04a8a10116100ce578063e4ae9af711610087578063e4ae9af714610649578063e655dbd81461065c578063e74848901461066f578063e78c9b3b1461067e578063f731e9be146106a7578063ff85a2ba146106c457600080fd5b8063c04a8a10146105f6578063c634dfaa14610609578063d29939831461061c578063dd62ed3e14610624578063dde43cba1461063a578063e3161ddd1461064157600080fd5b8063a9dd770211610120578063a9dd770214610587578063b16a19de1461059a578063b187bd26146105ab578063b3f1c93d146105bd578063b6fe2e9c146105d0578063b9c7e266146105e357600080fd5b806390f6fcf21461051557806392efda791461051d57806395d89b411461052e5780639dc29fac14610536578063a8346a8c14610549578063a9059cbb146102ce57600080fd5b80634800df8c1161020b5780637535d246116101c45780637535d2461461042b57806375d2641314610450578063797743381461045657806379ce6b8c14610485578063893d20e8146104cb5780638abc37d3146104e157600080fd5b80634800df8c1461039b5780634d25c4f1146103ae57806355f4f197146103cf578063679aefce146103d75780636bd76d24146103df57806370a082311461041857600080fd5b806318160ddd1161025d57806318160ddd146103305780631dd0f4831461033857806323b872dd1461034b578063313ce5671461035e57806337a92626146103735780633a7d40891461038657600080fd5b806306fdde031461029a5780630746363d146102b8578063095ea7b3146102ce5780630ca2103d146102f157806316c38b3c1461031b575b600080fd5b6102a26106f9565b6040516102af9190613385565b60405180910390f35b6102c061078b565b6040519081526020016102af565b6102e16102dc366004612fbd565b6107a0565b60405190151581526020016102af565b6103046102ff36600461322a565b6107b4565b6040805192151583526020830191909152016102af565b61032e610329366004613064565b610811565b005b6102c0610883565b61032e610346366004612ec8565b610890565b6102e1610359366004612f38565b61089b565b60025460405160ff90911681526020016102af565b61032e61038136600461309c565b6108b9565b61038e6109a7565b6040516102af9190613398565b61032e6103a9366004613210565b610a30565b600a54600160a01b900461ffff1660405161ffff90911681526020016102af565b6102c0610a41565b6102c0610a50565b6102c06103ed366004612f00565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6102c0610426366004612ec8565b610a5a565b6003546001600160a01b03165b6040516001600160a01b0390911681526020016102af565b30610438565b61045e610a89565b6040805194855260208501939093529183015264ffffffffff1660608201526080016102af565b6104b5610493366004612ec8565b6001600160a01b031660009081526013602052604090205464ffffffffff1690565b60405164ffffffffff90911681526020016102af565b60025461010090046001600160a01b0316610438565b6104f46104ef36600461302f565b610abf565b60408051938452602084019290925263ffffffff16908201526060016102af565b6012546102c0565b600a546001600160a01b0316610438565b6102a2610af8565b61032e610544366004612fbd565b610b07565b61055c610557366004612fe8565b610da2565b6040805194855263ffffffff90931660208501529015159183019190915260608201526080016102af565b6102c0610595366004612ec8565b610dce565b6004546001600160a01b0316610438565b600a54600160b01b900460ff166102e1565b6102e16105cb366004612f78565b610dd9565b61032e6105de366004612f00565b61106e565b6102c06105f1366004612ec8565b611082565b61032e610604366004612fbd565b6110b7565b6102c0610617366004612ec8565b611122565b6102a261112d565b6102c0610632366004612f00565b600092915050565b60016102c0565b61032e611137565b61032e6106573660046130d4565b61122d565b61032e61066a366004612ec8565b611435565b60155464ffffffffff166104b5565b6102c061068c366004612ec8565b6001600160a01b031660009081526014602052604090205490565b6106af611479565b604080519283526020830191909152016102af565b6106d76106d2366004612ec8565b611492565b6040805193845263ffffffff90921660208401521515908201526060016102af565b606060008054610708906134f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610734906134f7565b80156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b5050505050905090565b60006107956114c0565b50600090565b905090565b60006107aa611507565b5060005b92915050565b6000806107bf6114c0565b600a54600160a01b900461ffff166107e45760006107db61153f565b91509150915091565b600a546107fd908490600160a01b900461ffff16611553565b905061080881611648565b60019150915091565b610819611690565b600a5460ff600160b01b9091041615158115151461084957600a805460ff60b01b1916600160b01b831515021790555b604051811515815233907facaf4ee8e6a4949ca96787d73dfff5165ff2c555b2304b8517dc5396053add859060200160405180910390a250565b600061079b6012546116ca565b610898611711565b50565b60006108a5611507565b5060005b9392505050565b60025460ff1690565b60408051808201909152600280825261383160f01b6020830152546108f4916101009091046001600160a01b03169033906280000890611753565b60006109036020830183612ec8565b6001600160a01b0316141561091757600080fd5b600061092b600a546001600160a01b031690565b6001600160a01b03161461093e57600080fd5b61089861094e6020830183612ec8565b60006109606060850160408601613210565b61096d60208601866133e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061178492505050565b6109d8604051806060016040528060006001600160a01b0316815260200160608152602001600061ffff1681525090565b60405180606001604052806109f5600a546001600160a01b031690565b6001600160a01b03168152602001610a0b61112d565b8152602001610a25600a5461ffff600160a01b9091041690565b61ffff169052919050565b610a386114c0565b610898816117c7565b6000610a4b6114c0565b610795565b600061079b61153f565b600080610a6683611895565b905080610a765750600092915050565b6108a9610a8284611082565b8290611911565b60008060008060006012549050610a9e6119b6565b610aa7826116ca565b601554919790965091945064ffffffffff1692509050565b60008060004263ffffffff168463ffffffff161015610add57600080fd5b610ae785856119c0565b9093506000925090505b9250925092565b606060018054610708906134f7565b610b0f6119d9565b600080610b1b84611a1e565b92509250506000610b2a610883565b6001600160a01b038616600090815260146020526040812054919250908190868411610b5a576000601255610bd5565b610b6487856134bb565b91506000610b7d610b7486611a76565b60125490611911565b90506000610b94610b8d8a611a76565b8490611911565b9050818110610bae57600093508360128190559450610bd2565b610bca610bba85611a76565b610bc483856134bb565b90611ad9565b601281905594505b50505b85871415610c13576001600160a01b038816600090815260146020908152604080832083905560139091529020805464ffffffffff19169055610c41565b6001600160a01b0388166000908152601360205260409020805464ffffffffff19164264ffffffffff161790555b6015805464ffffffffff19164264ffffffffff1617905586851115610ce2576000610c6c88876134bb565b9050610c79898285611bad565b6040805182815260208101899052908101879052606081018390526080810185905260a081018490526001600160a01b038a169081907fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f9060c00160405180910390a350610d57565b6000610cee86896134bb565b9050610cfb898285611bc9565b604080518281526020810189905290810187905260608101859052608081018490526001600160a01b038a16907f44bd20a79e993bdcc7cbedf54a3b4d19fb78490124b6b90d04fe3242eea579e89060a00160405180910390a2505b6040518781526000906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505050505050565b600080600080610db06114c0565b610dbc88888888611be0565b929b919a509850909650945050505050565b60006107ae82610a5a565b6000610de36119d9565b610e0e6040518060800160405280600081526020016000815260200160008152602001600081525090565b846001600160a01b0316866001600160a01b031614610e3257610e32858786611c31565b600080610e3e87611a1e565b9250925050610e4b610883565b8084526012546060850152610e61908790613425565b60208401526000610e728688611d09565b9050610eb6610e818885613425565b6001600160a01b038a166000908152601460205260409020548390610ea69087611d09565b610eb09190613425565b90611d9e565b604080860182905280518082019091526002815261373960f01b6020820152906fffffffffffffffffffffffffffffffff1015610f0f5760405162461bcd60e51b8152600401610f069190613385565b60405180910390fd5b506040808501516001600160a01b038a16600090815260146020908152838220929092556013825291909120805464ffffffffff421664ffffffffff19918216811790925560158054909116909117905584015184516060860151610f7a92918491610ea691611d09565b60128190556060850152610f9c88610f92848a613425565b8660200151611bad565b876001600160a01b0316896001600160a01b03167fc16f4e4ca34d790de4c656c72fd015c667d688f20be64eea360618545c4c530f89868689604001518a606001518b6020015160405161101896959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a36040518781526001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050159695505050505050565b611076611711565b61107e611e58565b5050565b6001600160a01b03811660009081526014602090815260408083205460139092528220546107ae919064ffffffffff16611e8e565b336000818152600b602090815260408083206001600160a01b03878116808652918452938290208690556004548251941684529183018590529092917fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a35050565b60006107ae82611895565b606061079b610af8565b61113f611e9b565b6000600260019054906101000a90046001600160a01b03166001600160a01b0316630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561118f57600080fd5b505afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c79190612ee4565b604080518082019091526002815261064760f31b60208201529091506001600160a01b03821661120a5760405162461bcd60e51b8152600401610f069190613385565b50600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600080600061123d84611ed6565b9250925092508061124e57600d8490555b61125b6001600c54101590565b156112e1576112dc8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506112d792506108b0915050565b61214c565b611389565b6113708a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b9081908401838280828437600081840152601f19601f820116905080830192505050505050508d60600160208101906112d7919061325a565b611389611382368d90038d018d613182565b878761218c565b61139660208c018c612ec8565b6001600160a01b03166113af60608d0160408e01612ec8565b6001600160a01b03167f2bb6ce244a49e83b442fa9c0617811f0929cb9961fd5ce013ebf708dc4d8bf0260006113e36106f9565b6113eb610af8565b60025460ff168c8c604051611405969594939291906132bf565b60405180910390a38061141857600c8490555b8161142857600c8390556000600d555b5050505050505050505050565b60408051808201909152600280825261383160f01b602083015254611470916101009091046001600160a01b03169033906280000890611753565b61089881612258565b601254600090819061148a816116ca565b939092509050565b600080600061149f6114c0565b6114a884612260565b9250925092505b9193909250565b610898814261226e565b600a546001600160a01b0316331460405180604001604052806002815260200161039360f41b815250906108985760405162461bcd60e51b8152600401610f069190613385565b60405162461bcd60e51b815260206004820152600d60248201526c1393d517d4d5541413d4951151609a1b6044820152606401610f06565b600061079b6007546001600160e01b031690565b6000821580611560575081155b1561156d575060006107ae565b81600261157c60016064613472565b611587906064613472565b611591919061343d565b6115a19061ffff166000196134bb565b6115ab919061345e565b83111560405180604001604052806002815260200161068760f31b815250906115e75760405162461bcd60e51b8152600401610f069190613385565b506115f460016064613472565b6115ff906064613472565b61ffff16600261161160016064613472565b61161c906064613472565b611626919061343d565b61ffff16611634848661349c565b61163e9190613425565b6108a9919061345e565b6116506122f6565b61165981612347565b6040518181527fe65c987b2e4668e09ba867026921588005b2b2063607a1e7e7d91683c8f91b7b906020015b60405180910390a150565b6002546116c89061010090046001600160a01b0316336001604051806040016040528060028152602001611b9b60f11b815250611753565b565b6000806116d56119b6565b9050806116e55750600092915050565b6015546000906116fd90859064ffffffffff16611e8e565b90506117098282611911565b949350505050565b61171a33612350565b60405180604001604052806002815260200161383160f01b815250906108985760405162461bcd60e51b8152600401610f069190613385565b61175e8484846123e5565b819061177d5760405162461bcd60e51b8152600401610f069190613385565b5050505050565b600a80546001600160a01b0319166001600160a01b03861617905561ffff8216156117b2576117b2826117c7565b82156117c1576117c183611648565b50505050565b6117cf6122f6565b61ffff81166117e7576117e26000611648565b611845565b6117f360016064613472565b6117fe906064613472565b61ffff168161ffff1611156118455760405162461bcd60e51b815260206004820152600d60248201526c696c6c6567616c2076616c756560981b6044820152606401610f06565b600a805461ffff60a01b1916600160a01b61ffff8416908102919091179091556040519081527fa4a0021d5a3e887ed39092287593218ba56daabb698755739666df81df91840990602001611685565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03851681526005835283812084519283018552546001600160c01b038116835263ffffffff600160c01b8204811694840194909452600160e01b90049092169281019290925290516001600160c01b031692915050565b600082158061191e575081155b1561192b575060006107ae565b816119426002676765c793fa10079d601b1b61345e565b61194e906000196134bb565b611958919061345e565b83111560405180604001604052806002815260200161068760f31b815250906119945760405162461bcd60e51b8152600401610f069190613385565b50676765c793fa10079d601b1b6119ac60028261345e565b611634848661349c565b600061079b612400565b6000806119cd848461240b565b915091505b9250929050565b600354604080518082019091526002815261323960f01b6020820152906001600160a01b031633146108985760405162461bcd60e51b8152600401610f069190613385565b600080600080611a2d85611895565b905080611a45576000806000935093509350506114af565b600081611a5187610a5a565b611a5b91906134bb565b905081611a688282613425565b909790965090945092505050565b600080611a87633b9aca008461349c565b905082611a98633b9aca008361345e565b1460405180604001604052806002815260200161068760f31b81525090611ad25760405162461bcd60e51b8152600401610f069190613385565b5092915050565b604080518082019091526002815261035360f41b602082015260009082611b135760405162461bcd60e51b8152600401610f069190613385565b506000611b2160028461345e565b9050676765c793fa10079d601b1b611b3b826000196134bb565b611b45919061345e565b84111560405180604001604052806002815260200161068760f31b81525090611b815760405162461bcd60e51b8152600401610f069190613385565b508281611b99676765c793fa10079d601b1b8761349c565b611ba39190613425565b611709919061345e565b611bc48383676765c793fa10079d601b1b846124b6565b505050565b611bc48383676765c793fa10079d601b1b846124ca565b600080600080611bef88612260565b91955093509150611c008785613425565b935061ffff851615611c2757611c1a848661ffff16611553565b611c249087613425565b95505b5094509450949050565b6001600160a01b038084166000908152600b602090815260408083209386168352928152908290205482518084019093526002835261353960f01b918301919091529082821015611c955760405162461bcd60e51b8152600401610f069190613385565b506001600160a01b038481166000818152600b6020908152604080832088861680855290835292819020958790039586905560045481519516855290840185905290927fda919360433220e13b51e8c211e490d148e61a3bd53de8c097194e458b97f3e1910160405180910390a350505050565b6000821580611d16575081155b15611d23575060006107ae565b81611d376002670de0b6b3a764000061345e565b611d43906000196134bb565b611d4d919061345e565b83111560405180604001604052806002815260200161068760f31b81525090611d895760405162461bcd60e51b8152600401610f069190613385565b50670de0b6b3a76400006119ac60028261345e565b604080518082019091526002815261035360f41b602082015260009082611dd85760405162461bcd60e51b8152600401610f069190613385565b506000611de660028461345e565b9050670de0b6b3a7640000611dfd826000196134bb565b611e07919061345e565b84111560405180604001604052806002815260200161068760f31b81525090611e435760405162461bcd60e51b8152600401610f069190613385565b508281611b99670de0b6b3a76400008761349c565b60405162461bcd60e51b815260206004820152600b60248201526a155394d5541413d495115160aa1b6044820152606401610f06565b60006108a98383426124e0565b60408051808201909152600280825261333360f01b6020830152546116c8916101009091046001600160a01b03169033906202000290611753565b6001600080611ee7836000196134bb565b8310611f355760405162461bcd60e51b815260206004820152601960248201527f696e76616c696420636f6e7472616374207265766973696f6e000000000000006044820152606401610f06565b60008411611f855760405162461bcd60e51b815260206004820152601e60248201527f696e636f727265637420696e697469616c697a6572207265766973696f6e00006044820152606401610f06565b82841115611fd55760405162461bcd60e51b815260206004820152601e60248201527f696e636f6e73697374656e7420636f6e7472616374207265766973696f6e00006044820152606401610f06565b611fe260016000196134bb565b600c54101561205e576000600d54118015611ffe575082600c54105b9150818061200b5750303b155b806120175750600c5483115b6120595760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610f06565b6120ce565b61206b60016000196134bb565b600c5414801561207a5750303b155b6120bc5760405162461bcd60e51b81526020600482015260136024820152721a5b9a5d1a585b1a5e995c88189b1bd8dad959606a1b6044820152606401610f06565b6000600c55600d546000199350151591505b81156121255783600d54116121255760405162461bcd60e51b815260206004