Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
1,000,000,000.00 VERONICA

Holders:
17
Profile Summary
Blockchain:
Base (8453)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
Veronica

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Created At:
Fri, 31 May 2024 20:38:59 GMT
Token.sol
Token.sol
Context.sol
draft-IERC6093.sol
ERC20.sol
ERC20Burnable.sol
IERC20.sol
IERC20Metadata.sol
Initializable.sol
IUniswapV2Factory.sol
IUniswapV2Pair.sol
IUniswapV2Router01.sol
IUniswapV2Router02.sol
Ownable.sol
Ownable2Step.sol
Token.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "buyFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "sellFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "transferFee",
        "type": "uint16"
      }
    ],
    "name": "CannotExceedMaxTotalFee",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSpender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "pair",
        "type": "address"
      }
    ],
    "name": "InvalidPair",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "InvalidTaxRecipientAddress",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "OwnableInvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "OwnableUnauthorizedAccount",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "AMMPair",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isPair",
        "type": "bool"
      }
    ],
    "name": "AMMPairsUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isExcluded",
        "type": "bool"
      }
    ],
    "name": "ExcludeFromFees",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferStarted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "routerV2",
        "type": "address"
      }
    ],
    "name": "RouterV2Updated",
    "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"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint8",
        "name": "id",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "newAddress",
        "type": "address"
      }
    ],
    "name": "WalletTaxAddressUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint8",
        "name": "id",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "buyFee",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "sellFee",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "transferFee",
        "type": "uint16"
      }
    ],
    "name": "WalletTaxFeesUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint8",
        "name": "id",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "WalletTaxSent",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "AMMPairs",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "acceptOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_router",
        "type": "address"
      }
    ],
    "name": "afterConstructor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "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": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isExcluded",
        "type": "bool"
      }
    ],
    "name": "excludeFromFees",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "isExcludedFromFees",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "marketingAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_newAddress",
        "type": "address"
      }
    ],
    "name": "marketingAddressSetup",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "marketingFees",
    "outputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_buyFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "_sellFee",
        "type": "uint16"
      },
      {
        "internalType": "uint16",
        "name": "_transferFee",
        "type": "uint16"
      }
    ],
    "name": "marketingFeesSetup",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pairV2",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pendingOwner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "routerV2",
    "outputs": [
      {
        "internalType": "contract IUniswapV2Router02",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "pair",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isPair",
        "type": "bool"
      }
    ],
    "name": "setAMMPair",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "totalFees",
    "outputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
608060405234801561000f575f80fd5b5033604051806040016040528060088152602001675665726f6e69636160c01b815250604051806040016040528060088152602001675645524f4e49434160c01b81525081600390816100629190610a56565b50600461006f8282610a56565b5050506001600160a01b0381166100a057604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100a981610150565b50735d8e48d8929a419d082cb6f21127096438a83a456100dc73ed7e643b4b99570cd2b542150ab30e4dc51e30f161016c565b6100e860c88080610205565b6100f38160016103d3565b6100fe3060016103d3565b61012d81600a61010f601282610c0b565b61011e906402540be400610c20565b6101289190610c37565b610439565b61014a735d8e48d8929a419d082cb6f21127096438a83a45610150565b50610ccd565b600680546001600160a01b031916905561016981610471565b50565b6101746104c2565b6001600160a01b03811661019d5760405163ab11818760e01b81525f6004820152602401610097565b600780546001600160a01b0319166001600160a01b0383161790556101c38160016103d3565b6040516001600160a01b03821681526001907ff8e79c3705e6b93e151f4c2166fe019e81a78204037fb9913b261eeb877218d99060200160405180910390a250565b61020d6104c2565b600854600a5484916102269161ffff9182169116610c6a565b6102309190610c8c565b600a805461ffff191661ffff92831617908190556008548492610260926201000092839004821692900416610c6a565b61026a9190610c8c565b600a805463ffff000019166201000061ffff93841602179081905560085483926102a39264010000000092839004821692900416610c6a565b6102ad9190610c8c565b600a805461ffff9283166401000000000261ffff60201b19821681179092556109c4908316919092161711806102f15750600a546109c46201000090910461ffff16115b8061030c5750600a546109c464010000000090910461ffff16115b1561035257600a5460405163b7b3de6f60e01b815261ffff8083166004830152620100008304811660248301526401000000009092049091166044820152606401610097565b6040805160608101825261ffff80861682528481166020830152831691810191909152610383906008906003610916565b506040805161ffff8581168252848116602083015283168183015290516001917f5aa2b88de73e9b93e574fbaf914e53e45e2ba25f25692e6e0ba4e0d3c33f9d5a919081900360600190a2505050565b6103db6104c2565b6001600160a01b0382165f81815260096020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166104625760405163ec442f0560e01b81525f6004820152602401610097565b61046d5f83836104f1565b5050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b031633146104ef5760405163118cdaa760e01b8152336004820152602401610097565b565b6001600160a01b0383161580159061051157506001600160a01b03821615155b156107c357600b5460ff1615801561052857505f81115b80156105475750600b546001600160a01b038381166101009092041614155b801561056b57506001600160a01b0383165f9081526009602052604090205460ff16155b801561058f57506001600160a01b0382165f9081526009602052604090205460ff16155b156107c3576001600160a01b0383165f908152600d602052604081205460039060ff16156105cb57600a5461ffff16156105c657505f5b61061d565b6001600160a01b0384165f908152600d602052604090205460ff161561060557600a5462010000900461ffff16156105c65750600161061d565b600a54640100000000900461ffff161561061d575060025b60038160ff1610156107af575f612710600a8360ff166003811061064357610643610c56565b601091828204019190066002029054906101000a900461ffff1661ffff168561066c9190610c20565b6106769190610c37565b92506106828385610ca7565b93505f60088360ff166003811061069b5761069b610c56565b601091828204019190066002029054906101000a900461ffff1661ffff1611156107a157600a8260ff16600381106106d5576106d5610c56565b601091828204019190066002029054906101000a900461ffff1661ffff1660088360ff166003811061070957610709610c56565b601091828204019190066002029054906101000a900461ffff1661ffff16846107329190610c20565b61073c9190610c37565b6007549091506107579087906001600160a01b0316836107e5565b600754604080516001600160a01b039092168252602082018390526001917f4b1a0df20e469b24231f59741640137b104320272da39777bdf2800ac99de1e0910160405180910390a25b6107ab8184610ca7565b9250505b81156107c0576107c08530846107f0565b50505b6107ce8383836107f0565b6107e08383836001600160e01b038416565b505050565b6107e08383836104f1565b6001600160a01b03831661081a578060025f82825461080f9190610cba565b9091555061088a9050565b6001600160a01b0383165f908152602081905260409020548181101561086c5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610097565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166108a6576002805482900390556108c4565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161090991815260200190565b60405180910390a3505050565b60018301918390821561099b579160200282015f5b8382111561096b57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261092b565b80156109995782816101000a81549061ffff021916905560020160208160010104928301926001030261096b565b505b506109a79291506109ab565b5090565b5b808211156109a7575f81556001016109ac565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806109e757607f821691505b602082108103610a0557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156107e057805f5260205f20601f840160051c81016020851015610a305750805b601f840160051c820191505b81811015610a4f575f8155600101610a3c565b5050505050565b81516001600160401b03811115610a6f57610a6f6109bf565b610a8381610a7d84546109d3565b84610a0b565b602080601f831160018114610ab6575f8415610a9f5750858301515b5f19600386901b1c1916600185901b178555610b0d565b5f85815260208120601f198616915b82811015610ae457888601518255948401946001909101908401610ac5565b5085821015610b0157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115610b6357815f1904821115610b4957610b49610b15565b80851615610b5657918102915b93841c9390800290610b2e565b509250929050565b5f82610b7957506001610c05565b81610b8557505f610c05565b8160018114610b9b5760028114610ba557610bc1565b6001915050610c05565b60ff841115610bb657610bb6610b15565b50506001821b610c05565b5060208310610133831016604e8410600b8410161715610be4575081810a610c05565b610bee8383610b29565b805f1904821115610c0157610c01610b15565b0290505b92915050565b5f610c1960ff841683610b6b565b9392505050565b8082028115828204841417610c0557610c05610b15565b5f82610c5157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b61ffff828116828216039080821115610c8557610c85610b15565b5092915050565b61ffff818116838216019080821115610c8557610c85610b15565b81810381811115610c0557610c05610b15565b80820180821115610c0557610c05610b15565b6116b280610cda5f395ff3fe608060405234801561000f575f80fd5b50600436106101bb575f3560e01c806376856557116100f3578063a5ece94111610093578063c400f5e71161006e578063c400f5e7146103df578063dd62ed3e146103f2578063e30c39781461042a578063f2fde38b1461043b575f80fd5b8063a5ece941146103a6578063a9059cbb146103b9578063c0246668146103cc575f80fd5b80638da5cb5b116100ce5780638da5cb5b146103675780638e749a8f146103785780638fffabed1461038b57806395d89b411461039e575f80fd5b8063768565571461032a57806379ba50971461034c57806379cc679014610354575f80fd5b8063408ccbdf1161015e5780634fbee193116101395780634fbee193146102a8578063502f7446146102ca57806370a08231146102fa578063715018a614610322575f80fd5b8063408ccbdf1461025c57806342966c68146102825780634a4dd9cd14610295575f80fd5b806318533a0d1161019957806318533a0d1461021257806323b872dd146102275780632d99d32e1461023a578063313ce5671461024d575f80fd5b806306fdde03146101bf578063095ea7b3146101dd57806318160ddd14610200575b5f80fd5b6101c761044e565b6040516101d491906113c1565b60405180910390f35b6101f06101eb36600461140a565b6104de565b60405190151581526020016101d4565b6002545b6040519081526020016101d4565b610225610220366004611434565b6104f7565b005b6101f0610235366004611456565b6105cc565b610225610248366004611494565b6105ef565b604051601281526020016101d4565b61026f61026a3660046114cf565b61063b565b60405161ffff90911681526020016101d4565b6102256102903660046114cf565b610668565b6102256102a33660046114fc565b610675565b6101f06102b6366004611434565b60096020525f908152604090205460ff1681565b600b546102e29061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016101d4565b610204610308366004611434565b6001600160a01b03165f9081526020819052604090205490565b610225610844565b6101f0610338366004611434565b600d6020525f908152604090205460ff1681565b610225610857565b61022561036236600461140a565b610898565b6005546001600160a01b03166102e2565b61026f6103863660046114cf565b6108ad565b600c546102e2906001600160a01b031681565b6101c76108bc565b6007546102e2906001600160a01b031681565b6101f06103c736600461140a565b6108cb565b6102256103da366004611494565b6108d8565b6102256103ed366004611434565b61093f565b61020461040036600461153c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6006546001600160a01b03166102e2565b610225610449366004611434565b6109d8565b60606003805461045d90611568565b80601f016020809104026020016040519081016040528092919081815260200182805461048990611568565b80156104d45780601f106104ab576101008083540402835291602001916104d4565b820191905f5260205f20905b8154815290600101906020018083116104b757829003601f168201915b5050505050905090565b5f336104eb818585610a49565b60019150505b92915050565b600654600160a81b900460ff16806105195750600654600160a01b900460ff16155b6105815760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b600654600160a81b900460ff161580156105ab576006805461ffff60a01b191661010160a01b1790555b6105b482610a5b565b80156105c8576006805460ff60a81b191690555b5050565b5f336105d9858285610c49565b6105e4858585610cc4565b506001949350505050565b6105f7610d21565b600c546001600160a01b039081169083160361063157604051639d34366d60e01b81526001600160a01b0383166004820152602401610578565b6105c88282610d4e565b600a816003811061064a575f80fd5b60109182820401919006600202915054906101000a900461ffff1681565b6106723382610da5565b50565b61067d610d21565b600854600a5484916106969161ffff91821691166115c8565b6106a091906115ea565b600a805461ffff191661ffff928316179081905560085484926106d09262010000928390048216929004166115c8565b6106da91906115ea565b600a805463ffff000019166201000061ffff938416021790819055600854839261071392640100000000928390048216929004166115c8565b61071d91906115ea565b600a805461ffff9283166401000000000265ffff0000000019821681179092556109c4908316919092161711806107625750600a546109c46201000090910461ffff16115b8061077d5750600a546109c464010000000090910461ffff16115b156107c357600a5460405163b7b3de6f60e01b815261ffff8083166004830152620100008304811660248301526401000000009092049091166044820152606401610578565b6040805160608101825261ffff808616825284811660208301528316918101919091526107f4906008906003611318565b506040805161ffff8581168252848116602083015283168183015290516001917f5aa2b88de73e9b93e574fbaf914e53e45e2ba25f25692e6e0ba4e0d3c33f9d5a919081900360600190a2505050565b61084c610d21565b6108555f610dd9565b565b60065433906001600160a01b0316811461088f5760405163118cdaa760e01b81526001600160a01b0382166004820152602401610578565b61067281610dd9565b6108a3823383610c49565b6105c88282610da5565b6008816003811061064a575f80fd5b60606004805461045d90611568565b5f336104eb818585610cc4565b6108e0610d21565b6001600160a01b0382165f81815260096020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b610947610d21565b6001600160a01b0381166109705760405163ab11818760e01b81525f6004820152602401610578565b600780546001600160a01b0319166001600160a01b0383161790556109968160016108d8565b6040516001600160a01b03821681526001907ff8e79c3705e6b93e151f4c2166fe019e81a78204037fb9913b261eeb877218d99060200160405180910390a250565b6109e0610d21565b600680546001600160a01b0383166001600160a01b03199091168117909155610a116005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610a568383836001610df2565b505050565b80600b60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b60019054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ad3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af79190611605565b6001600160a01b031663c9c6539630600b60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7b9190611605565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610bc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610be99190611605565b600c80546001600160a01b0319166001600160a01b03929092169182179055610c13906001610d4e565b6040516001600160a01b038216907fbc052db65df144ad4f71f02da93cae3d4401104c30ac374d7cc10d87ee07b602905f90a250565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610cbe5781811015610cb057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610578565b610cbe84848484035f610df2565b50505050565b6001600160a01b038316610ced57604051634b637e8f60e11b81525f6004820152602401610578565b6001600160a01b038216610d165760405163ec442f0560e01b81525f6004820152602401610578565b610a56838383610ec4565b6005546001600160a01b031633146108555760405163118cdaa760e01b8152336004820152602401610578565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f911aa18ddbbbc33c9b4c704a71bdaa0984b0aa2e82726a7f51e64bad0b0a84559101610933565b6001600160a01b038216610dce57604051634b637e8f60e11b81525f6004820152602401610578565b6105c8825f83610ec4565b600680546001600160a01b0319169055610672816111a1565b6001600160a01b038416610e1b5760405163e602df0560e01b81525f6004820152602401610578565b6001600160a01b038316610e4457604051634a1406b160e11b81525f6004820152602401610578565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015610cbe57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610eb691815260200190565b60405180910390a350505050565b6001600160a01b03831615801590610ee457506001600160a01b03821615155b1561119657600b5460ff16158015610efb57505f81115b8015610f1a5750600b546001600160a01b038381166101009092041614155b8015610f3e57506001600160a01b0383165f9081526009602052604090205460ff16155b8015610f6257506001600160a01b0382165f9081526009602052604090205460ff16155b15611196576001600160a01b0383165f908152600d602052604081205460039060ff1615610f9e57600a5461ffff1615610f9957505f5b610ff0565b6001600160a01b0384165f908152600d602052604090205460ff1615610fd857600a5462010000900461ffff1615610f9957506001610ff0565b600a54640100000000900461ffff1615610ff0575060025b60038160ff161015611182575f612710600a8360ff1660038110611016576110166115a0565b601091828204019190066002029054906101000a900461ffff1661ffff168561103f9190611620565b6110499190611637565b92506110558385611656565b93505f60088360ff166003811061106e5761106e6115a0565b601091828204019190066002029054906101000a900461ffff1661ffff16111561117457600a8260ff16600381106110a8576110a86115a0565b601091828204019190066002029054906101000a900461ffff1661ffff1660088360ff16600381106110dc576110dc6115a0565b601091828204019190066002029054906101000a900461ffff1661ffff16846111059190611620565b61110f9190611637565b60075490915061112a9087906001600160a01b031683610d16565b600754604080516001600160a01b039092168252602082018390526001917f4b1a0df20e469b24231f59741640137b104320272da39777bdf2800ac99de1e0910160405180910390a25b61117e8184611656565b9250505b8115611193576111938530846111f2565b50505b610a568383836111f2565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03831661121c578060025f8282546112119190611669565b9091555061128c9050565b6001600160a01b0383165f908152602081905260409020548181101561126e5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610578565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b0382166112a8576002805482900390556112c6565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161130b91815260200190565b60405180910390a3505050565b60018301918390821561139d579160200282015f5b8382111561136d57835183826101000a81548161ffff021916908361ffff160217905550926020019260020160208160010104928301926001030261132d565b801561139b5782816101000a81549061ffff021916905560020160208160010104928301926001030261136d565b505b506113a99291506113ad565b5090565b5b808211156113a9575f81556001016113ae565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610672575f80fd5b5f806040838503121561141b575f80fd5b8235611426816113f6565b946020939093013593505050565b5f60208284031215611444575f80fd5b813561144f816113f6565b9392505050565b5f805f60608486031215611468575f80fd5b8335611473816113f6565b92506020840135611483816113f6565b929592945050506040919091013590565b5f80604083850312156114a5575f80fd5b82356114b0816113f6565b9150602083013580151581146114c4575f80fd5b809150509250929050565b5f602082840312156114df575f80fd5b5035919050565b803561ffff811681146114f7575f80fd5b919050565b5f805f6060848603121561150e575f80fd5b611517846114e6565b9250611525602085016114e6565b9150611533604085016114e6565b90509250925092565b5f806040838503121561154d575f80fd5b8235611558816113f6565b915060208301356114c4816113f6565b600181811c9082168061157c57607f821691505b60208210810361159a57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b61ffff8281168282160390808211156115e3576115e36115b4565b5092915050565b61ffff8181168382160190808211156115e3576115e36115b4565b5f60208284031215611615575f80fd5b815161144f816113f6565b80820281158282048414176104f1576104f16115b4565b5f8261165157634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156104f1576104f16115b4565b808201808211156104f1576104f16115b456fea26469706673582212200c7721430fa88e9e4db955551c521d9cb1f9d99d49885b507241ef5ad5cae3fa64736f6c63430008190033