ETH Price: $3,438.22 (+1.16%)

Token

XINU (XINU)
 

Overview

Max Total Supply

100,000,000 XINU

Holders

175

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
111,483.042715068178547638 XINU

Value
$0.00
0x0b7eb4b740ddc4a992ff7c1206fc8963389c1b28
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XINU

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-31
*/

/*

XINU - The first meme coin to deploy on Xchange (Ethereum)

-A black labrador service dog for the X7 Finance's ecosystem. 

-Every dog learns tricks, our favourite trick is burying (burning) the "quints", the X7100 series of consellation tokens that act as the backstop to the lending pool.

-A meme with a dream, to contribute to the X7 Ecosystem in the best way possible, raising the floor!

WOOF WOOF

Twitter: @XINUxchange
Telegram: @XINUxchange


*/
// SPDX-License-Identifier: MIT
pragma solidity ^ 0.8.15;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.15; */

abstract contract Context {
  function _msgSender() internal view virtual returns(address) {
    return msg.sender;
  }

  function _msgData() internal view virtual returns(bytes calldata) {
    return msg.data;
  }
}

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.15; */

/* import "../utils/Context.sol"; */

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  constructor() {
    _transferOwnership(_msgSender());
  }

  function owner() public view virtual returns(address) {
    return _owner;
  }

    modifier onlyOwner() {
    require(owner() == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }

  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner);
  }

  function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
    _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
  }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.15; */

interface IERC20 {

    function totalSupply() external view returns(uint256);

function balanceOf(address account) external view returns(uint256);

function transfer(address recipient, uint256 amount) external returns(bool);

function allowance(address owner, address spender) external view returns(uint256);

function approve(address spender, uint256 amount) external returns(bool);

function transferFrom(
  address sender,
  address recipient,
  uint256 amount
) external returns(bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.15; */

/* import "../IERC20.sol"; */

interface IERC20Metadata is IERC20 {

  function name() external view returns(string memory);

  function symbol() external view returns(string memory);

  function decimals() external view returns(uint8);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.15; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

contract ERC20 is Context, IERC20, IERC20Metadata {
  mapping(address => uint256) private _balances;

  mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

  constructor(string memory name_, string memory symbol_) {
    _name = name_;
    _symbol = symbol_;
  }

  function name() public view virtual override returns(string memory) {
    return _name;
  }

  function symbol() public view virtual override returns(string memory) {
    return _symbol;
  }

  function decimals() public view virtual override returns(uint8) {
    return 18;
  }

  function totalSupply() public view virtual override returns(uint256) {
    return _totalSupply;
  }

  function balanceOf(address account) public view virtual override returns(uint256) {
    return _balances[account];
  }

  function transfer(address recipient, uint256 amount) public virtual override returns(bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  function allowance(address owner, address spender) public view virtual override returns(uint256) {
    return _allowances[owner][spender];
  }

  function approve(address spender, uint256 amount) public virtual override returns(bool) {
    _approve(_msgSender(), spender, amount);
    return true;
  }

  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) public virtual override returns(bool) {
    _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
    require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
      _approve(sender, _msgSender(), currentAllowance - amount);
    }

    return true;
  }

  function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
    _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
    require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
      _approve(_msgSender(), spender, currentAllowance - subtractedValue);
    }

    return true;
  }

  function _transfer(
    address sender,
    address recipient,
    uint256 amount
  ) internal virtual {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");

    _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
    require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
      _balances[sender] = senderBalance - amount;
    }
    _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

    _afterTokenTransfer(sender, recipient, amount);
  }

  function _mint(address account, uint256 amount) internal virtual {
    require(account != address(0), "ERC20: mint to the zero address");

    _beforeTokenTransfer(address(0), account, amount);

    _totalSupply += amount;
    _balances[account] += amount;
        emit Transfer(address(0), account, amount);

    _afterTokenTransfer(address(0), account, amount);
  }

  function _burn(address account, uint256 amount) internal virtual {
    require(account != address(0), "ERC20: burn from the zero address");

    _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
    require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
      _balances[account] = accountBalance - amount;
    }
    _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

    _afterTokenTransfer(account, address(0), amount);
  }

  function _approve(
    address owner,
    address spender,
    uint256 amount
  ) internal virtual {
    require(owner != address(0), "ERC20: approve from the zero address");
    require(spender != address(0), "ERC20: approve to the zero address");

    _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
  }

  function _beforeTokenTransfer(
    address from,
    address to,
    uint256 amount
  ) internal virtual { }

  function _afterTokenTransfer(
    address from,
    address to,
    uint256 amount
  ) internal virtual { }
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.15; */

library SafeMath {

  function tryAdd(uint256 a, uint256 b) internal pure returns(bool, uint256) {
        unchecked {
            uint256 c = a + b;
      if (c < a) return (false, 0);
      return (true, c);
    }
  }

  function trySub(uint256 a, uint256 b) internal pure returns(bool, uint256) {
        unchecked {
      if (b > a) return (false, 0);
      return (true, a - b);
    }
  }

  function tryMul(uint256 a, uint256 b) internal pure returns(bool, uint256) {
        unchecked {
      // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
      // benefit is lost if 'b' is also tested.
      // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
      if (a == 0) return (true, 0);
            uint256 c = a * b;
      if (c / a != b) return (false, 0);
      return (true, c);
    }
  }

  function tryDiv(uint256 a, uint256 b) internal pure returns(bool, uint256) {
        unchecked {
      if (b == 0) return (false, 0);
      return (true, a / b);
    }
  }

  function tryMod(uint256 a, uint256 b) internal pure returns(bool, uint256) {
        unchecked {
      if (b == 0) return (false, 0);
      return (true, a % b);
    }
  }

  function add(uint256 a, uint256 b) internal pure returns(uint256) {
    return a + b;
  }

  function sub(uint256 a, uint256 b) internal pure returns(uint256) {
    return a - b;
  }

  function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    return a * b;
  }

  function div(uint256 a, uint256 b) internal pure returns(uint256) {
    return a / b;
  }

  function mod(uint256 a, uint256 b) internal pure returns(uint256) {
    return a % b;
  }

  function sub(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns(uint256) {
        unchecked {
      require(b <= a, errorMessage);
      return a - b;
    }
  }

  function div(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns(uint256) {
        unchecked {
      require(b > 0, errorMessage);
      return a / b;
    }
  }

  function mod(
    uint256 a,
    uint256 b,
    string memory errorMessage
  ) internal pure returns(uint256) {
        unchecked {
      require(b > 0, errorMessage);
      return a % b;
    }
  }
}

/* pragma solidity 0.8.15; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Factory {
    event PairCreated(
  address indexed token0,
  address indexed token1,
  address pair,
  uint256
);

function feeTo() external view returns(address);

function feeToSetter() external view returns(address);

function getPair(address tokenA, address tokenB)
external
view
returns(address pair);

function allPairs(uint256) external view returns(address pair);

function allPairsLength() external view returns(uint256);

function createPair(address tokenA, address tokenB)
external
returns(address pair);

function setFeeTo(address) external;

function setFeeToSetter(address) external;
}

/* pragma solidity 0.8.15; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Pair {
    event Approval(
  address indexed owner,
  address indexed spender,
  uint256 value
);
    event Transfer(address indexed from, address indexed to, uint256 value);

function name() external pure returns(string memory);

function symbol() external pure returns(string memory);

function decimals() external pure returns(uint8);

function totalSupply() external view returns(uint256);

function balanceOf(address owner) external view returns(uint256);

function allowance(address owner, address spender)
external
view
returns(uint256);

function approve(address spender, uint256 value) external returns(bool);

function transfer(address to, uint256 value) external returns(bool);

function transferFrom(
  address from,
  address to,
  uint256 value
) external returns(bool);

function DOMAIN_SEPARATOR() external view returns(bytes32);

function PERMIT_TYPEHASH() external pure returns(bytes32);

function nonces(address owner) external view returns(uint256);

function permit(
  address owner,
  address spender,
  uint256 value,
  uint256 deadline,
  uint8 v,
  bytes32 r,
  bytes32 s
) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
  address indexed sender,
  uint256 amount0,
  uint256 amount1,
  address indexed to
);
    event Swap(
  address indexed sender,
  uint256 amount0In,
  uint256 amount1In,
  uint256 amount0Out,
  uint256 amount1Out,
  address indexed to
);
    event Sync(uint112 reserve0, uint112 reserve1);

function MINIMUM_LIQUIDITY() external pure returns(uint256);

function factory() external view returns(address);

function token0() external view returns(address);

function token1() external view returns(address);

function getReserves()
external
view
returns(
  uint112 reserve0,
  uint112 reserve1,
  uint32 blockTimestampLast
);

function price0CumulativeLast() external view returns(uint256);

function price1CumulativeLast() external view returns(uint256);

function kLast() external view returns(uint256);

function mint(address to) external returns(uint256 liquidity);

function burn(address to)
external
returns(uint256 amount0, uint256 amount1);

function swap(
  uint256 amount0Out,
  uint256 amount1Out,
  address to,
  bytes calldata data
) external;

function skim(address to) external;

function sync() external;

function initialize(address, address) external;
}

/* pragma solidity 0.8.15; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    function factory() external pure returns(address);

function WETH() external pure returns(address);

function addLiquidity(
  address tokenA,
  address tokenB,
  uint256 amountADesired,
  uint256 amountBDesired,
  uint256 amountAMin,
  uint256 amountBMin,
  address to,
  uint256 deadline
)
external
returns(
  uint256 amountA,
  uint256 amountB,
  uint256 liquidity
);

function addLiquidityETH(
  address token,
  uint256 amountTokenDesired,
  uint256 amountTokenMin,
  uint256 amountETHMin,
  address to,
  uint256 deadline
)
external
payable
returns(
  uint256 amountToken,
  uint256 amountETH,
  uint256 liquidity
);

function swapExactTokensForTokensSupportingFeeOnTransferTokens(
  uint256 amountIn,
  uint256 amountOutMin,
  address[] calldata path,
  address to,
  uint256 deadline
) external;

function swapExactETHForTokensSupportingFeeOnTransferTokens(
  uint256 amountOutMin,
  address[] calldata path,
  address to,
  uint256 deadline
) external payable;

function swapExactTokensForETHSupportingFeeOnTransferTokens(
  uint256 amountIn,
  uint256 amountOutMin,
  address[] calldata path,
  address to,
  uint256 deadline
) external;
}

/* pragma solidity >=0.8.15; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

contract XINU is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    address public x7101 = address(0x7101a9392EAc53B01e7c07ca3baCa945A56EE105);
    address public x7102 = address(0x7102DC82EF61bfB0410B1b1bF8EA74575bf0A105);
    address public x7103 = address(0x7103eBdbF1f89be2d53EFF9B3CF996C9E775c105);
    address public x7104 = address(0x7104D1f179Cc9cc7fb5c79Be6Da846E3FBC4C105);
    address public x7105 = address(0x7105FAA4a26eD1c67B8B2b41BEc98F06Ee21D105);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

  // Anti-bot and anti-whale mappings and variables
  mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
	uint256 public buyMarketingFee;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellBurnFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForBurn;
    uint256 public tokensForDev;

  /******************/

  // exlcude from fees and max transaction amount
  mapping(address => bool) private _isExcludedFromFees;
  mapping(address => bool) public _isExcludedMaxTransactionAmount;

  // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
  // could be subject to a maximum transfer amount
  mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
    address indexed newAddress,
    address indexed oldAddress
  );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
    uint256 tokensSwapped,
    uint256 ethReceived,
    uint256 tokensIntoLiquidity
  );

  constructor() ERC20("XINU", "XINU") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
    0x7DE8063E9fB43321d2100e8Ddae5167F56A50060
  );

    excludeFromMaxTransaction(address(_uniswapV2Router), true);
    uniswapV2Router = _uniswapV2Router;

    uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
      .createPair(address(this), _uniswapV2Router.WETH());
    excludeFromMaxTransaction(address(uniswapV2Pair), true);
    _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 5;
        uint256 _buyBurnFee = 10;
        uint256 _buyDevFee = 5;

        uint256 _sellMarketingFee = 5;
        uint256 _sellBurnFee = 10;
        uint256 _sellDevFee = 5;

        uint256 totalSupply = 100000000 * 1e18;

    maxTransactionAmount = 2000000 * 1e18; // 2% from total supply maxTransactionAmountTxn
    maxWallet = 2000000 * 1e18; // 2% from total supply maxWallet
    swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

    buyMarketingFee = _buyMarketingFee;
    buyBurnFee = _buyBurnFee;
    buyDevFee = _buyDevFee;
    buyTotalFees = buyMarketingFee + buyBurnFee + buyDevFee;

    sellMarketingFee = _sellMarketingFee;
    sellBurnFee = _sellBurnFee;
    sellDevFee = _sellDevFee;
    sellTotalFees = sellMarketingFee + sellBurnFee + sellDevFee;

    marketingWallet = address(0x78519E437F5b6051e5d09aAE9210c5b2e8Fe43C2); // set as marketing wallet
    devWallet = address(0x78d1676854F04F1C32A5965DAf9ff4083fE6Db5d); // set as dev wallet

    // exclude from paying fees or having max transaction amount
    excludeFromFees(owner(), true);
    excludeFromFees(address(this), true);
    excludeFromFees(address(0xdead), true);
    excludeFromFees(address(marketingWallet), true);
    excludeFromFees(address(devWallet), true);

    excludeFromMaxTransaction(owner(), true);
    excludeFromMaxTransaction(address(this), true);
    excludeFromMaxTransaction(address(0xdead), true);
    excludeFromMaxTransaction(address(marketingWallet), true);
    excludeFromMaxTransaction(address(devWallet), true);

    /*
        _mint is an internal function in ERC20.sol that is only called here,
        and CANNOT be called ever again
    */
    _mint(msg.sender, totalSupply);
  }

  receive() external payable { }

  function setRouter(address _newRouterAddress) external onlyOwner() {
    IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_newRouterAddress);
    uniswapV2Router = _uniswapV2Router;

  }
  function setPair(address _newPairAddress) external onlyOwner() {
      uniswapV2Pair = _newPairAddress;
  }

  // once enabled, can never be turned off
  function enableTrading() external onlyOwner {
    tradingActive = true;
    swapEnabled = true;
  }

  // remove limits after token is stable
  function removeLimits() external onlyOwner returns(bool) {
    limitsInEffect = false;
    return true;
  }

  // disable Transfer delay - cannot be reenabled
  function disableTransferDelay() external onlyOwner returns(bool) {
    transferDelayEnabled = false;
    return true;
  }

  // change the minimum amount of tokens to sell from fees
  function updateSwapTokensAtAmount(uint256 newAmount)
  external
  onlyOwner
  returns(bool)
  {
    require(
      newAmount >= (totalSupply() * 1) / 100000,
      "Swap amount cannot be lower than 0.001% total supply."
    );
    require(
      newAmount <= (totalSupply() * 5) / 1000,
      "Swap amount cannot be higher than 0.5% total supply."
    );
    swapTokensAtAmount = newAmount;
    return true;
  }

  function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
    require(
      newNum >= ((totalSupply() * 1) / 1000) / 1e18,
      "Cannot set maxTransactionAmount lower than 0.1%"
    );
    maxTransactionAmount = newNum * (10 ** 18);
  }

  function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
    require(
      newNum >= ((totalSupply() * 5) / 1000) / 1e18,
      "Cannot set maxWallet lower than 0.5%"
    );
    maxWallet = newNum * (10 ** 18);
  }

  function excludeFromMaxTransaction(address updAds, bool isEx)
  public
  onlyOwner
  {
    _isExcludedMaxTransactionAmount[updAds] = isEx;
  }

  // only use to disable contract sales if absolutely necessary (emergency use only)
  function updateSwapEnabled(bool enabled) external onlyOwner {
    swapEnabled = enabled;
  }

  function excludeFromFees(address account, bool excluded) public onlyOwner {
    _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
  }

  function setAutomatedMarketMakerPair(address pair, bool value)
  public
  onlyOwner
  {
    require(
      pair != uniswapV2Pair,
      "The pair cannot be removed from automatedMarketMakerPairs"
    );

    _setAutomatedMarketMakerPair(pair, value);
  }

  function _setAutomatedMarketMakerPair(address pair, bool value) private {
    automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
  }

  function isExcludedFromFees(address account) public view returns(bool) {
    return _isExcludedFromFees[account];
  }

  function _transfer(
    address from,
    address to,
    uint256 amount
  ) internal override {
    require(from != address(0), "ERC20: transfer from the zero address");
    require(to != address(0), "ERC20: transfer to the zero address");

    if (amount == 0) {
      super._transfer(from, to, 0);
      return;
    }

    if (limitsInEffect) {
      if (
        from != owner() &&
        to != owner() &&
        to != address(0) &&
        to != address(0xdead) &&
        !swapping
      ) {
        if (!tradingActive) {
          require(
            _isExcludedFromFees[from] || _isExcludedFromFees[to],
            "Trading is not active."
          );
        }

        // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
        if (transferDelayEnabled) {
          if (
            to != owner() &&
            to != address(uniswapV2Router) &&
            to != address(uniswapV2Pair)
          ) {
            require(
              _holderLastTransferTimestamp[tx.origin] <
              block.number,
              "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
            );
            _holderLastTransferTimestamp[tx.origin] = block.number;
          }
        }

        //when buy
        if (
          automatedMarketMakerPairs[from] &&
          !_isExcludedMaxTransactionAmount[to]
        ) {
          require(
            amount <= maxTransactionAmount,
            "Buy transfer amount exceeds the maxTransactionAmount."
          );
          require(
            amount + balanceOf(to) <= maxWallet,
            "Max wallet exceeded"
          );
        }
        //when sell
        else if (
          automatedMarketMakerPairs[to] &&
          !_isExcludedMaxTransactionAmount[from]
        ) {
          require(
            amount <= maxTransactionAmount,
            "Sell transfer amount exceeds the maxTransactionAmount."
          );
        } else if (!_isExcludedMaxTransactionAmount[to]) {
          require(
            amount + balanceOf(to) <= maxWallet,
            "Max wallet exceeded"
          );
        }
      }
    }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

    if (
      canSwap &&
      swapEnabled &&
      !swapping &&
      !automatedMarketMakerPairs[from] &&
      !_isExcludedFromFees[from] &&
      !_isExcludedFromFees[to]
    ) {
      swapping = true;

      swapBack();

      swapping = false;
    }

        bool takeFee = !swapping;

    // if any account belongs to _isExcludedFromFee account then remove the fee
    if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
      takeFee = false;
    }

        uint256 fees = 0;
    // only take fees on buys/sells, do not take on wallet transfers
    if (takeFee) {
      // on sell
      if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
        fees = amount.mul(sellTotalFees).div(100);
        tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
        tokensForDev += (fees * sellDevFee) / sellTotalFees;
        tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
      }
      // on buy
      else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        fees = amount.mul(buyTotalFees).div(100);
        tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
        tokensForDev += (fees * buyDevFee) / buyTotalFees;
        tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
      }

      if (fees > 0) {
        super._transfer(from, address(this), fees);
      }

      amount -= fees;
    }

    super._transfer(from, to, amount);
  }

  function swapTokensForEth(uint256 tokenAmount) private {
    // generate the uniswap pair path of token -> weth
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = uniswapV2Router.WETH();

    _approve(address(this), address(uniswapV2Router), tokenAmount);

    // make the swap
    uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
      tokenAmount,
      0, // accept any amount of ETH
      path,
      address(this),
      block.timestamp
    );
  }

  function burnRandomQuint(uint256 ethAmount) private {
    // generate the uniswap pair path of token -> weth
    address[] memory path = new address[](2);
    address[] memory quints = new address[](5);
    quints[0] = x7101;
    quints[1] = x7102;
    quints[2] = x7103;
    quints[3] = x7104;
    quints[4] = x7105;

    uint256 mod = block.number % 5;

    path[0] = uniswapV2Router.WETH();
    path[1] = quints[mod];

    // make the swap
    uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{ value: ethAmount } (
      0,
      path,
      deadAddress,
      block.timestamp
    );
  }

  function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
    // approve token transfer to cover all possible scenarios
    _approve(address(this), address(uniswapV2Router), tokenAmount);

    // add the liquidity
    uniswapV2Router.addLiquidityETH{ value: ethAmount } (
      address(this),
      tokenAmount,
      0, // slippage is unavoidable
      0, // slippage is unavoidable
      devWallet,
      block.timestamp
    );
  }

  function setFees(uint256 _buyMarketingFee, uint256 _buyBurnFee, uint256 _buyDevFee, uint256 _sellMarketingFee, uint256 _sellBurnFee, uint256 _sellDevFee) public onlyOwner {
    buyMarketingFee = _buyMarketingFee;
    buyBurnFee = _buyBurnFee;
    buyDevFee = _buyDevFee;
    buyTotalFees = buyMarketingFee + buyBurnFee + buyDevFee;

    sellMarketingFee = _sellMarketingFee;
    sellBurnFee = _sellBurnFee;
    sellDevFee = _sellDevFee;
    sellTotalFees = sellMarketingFee + sellBurnFee + sellDevFee;
  }


  function swapBack() private {
    uint256 contractBalance = balanceOf(address(this));
    uint256 totalTokensToSwap = tokensForBurn + tokensForMarketing + tokensForDev;
    bool success;

    if (contractBalance == 0 || totalTokensToSwap == 0) {
      return;
    }

    if (contractBalance > swapTokensAtAmount * 20) {
      contractBalance = swapTokensAtAmount * 20;
    }

    uint256 initialETHBalance = address(this).balance;

    swapTokensForEth(contractBalance);

    uint256 ethBalance = address(this).balance.sub(initialETHBalance);

    uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
    uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

    (success, ) = address(devWallet).call{ value: ethForDev } ("");
    (success, ) = address(marketingWallet).call{ value: ethForMarketing / 2 } ("");

    burnRandomQuint(address(this).balance);
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyBurnFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPairAddress","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouterAddress","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"x7101","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x7102","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x7103","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x7104","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"x7105","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737101a9392eac53b01e7c07ca3baca945a56ee105600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737102dc82ef61bfb0410b1b1bf8ea74575bf0a105600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737103ebdbf1f89be2d53eff9b3cf996c9e775c105600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737104d1f179cc9cc7fb5c79be6da846e3fbc4c105600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737105faa4a26ed1c67b8b2b41bec98f06ee21d105600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055503480156200022657600080fd5b506040518060400160405280600481526020017f58494e55000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f58494e55000000000000000000000000000000000000000000000000000000008152508160039081620002a4919062001034565b508060049081620002b6919062001034565b505050620002d9620002cd6200087b60201b60201c565b6200088360201b60201c565b6000737de8063e9fb43321d2100e8ddae5167f56a500609050620003058160016200094960201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000392573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b8919062001185565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000420573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000446919062001185565b6040518363ffffffff1660e01b815260040162000465929190620011c8565b6020604051808303816000875af115801562000485573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ab919062001185565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000520600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200094960201b60201c565b62000555600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000a3360201b60201c565b6000600590506000600a90506000600590506000600590506000600a905060006005905060006a52b7d2dcc80cd2e400000090506a01a784379d99db42000000600f819055506a01a784379d99db42000000601181905550612710600a82620005bf919062001224565b620005cb9190620012b4565b601081905550866016819055508560178190555084601881905550601854601754601654620005fb9190620012ec565b620006079190620012ec565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a54620006379190620012ec565b620006439190620012ec565b6019819055507378519e437f5b6051e5d09aae9210c5b2e8fe43c2600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507378d1676854f04f1c32a5965daf9ff4083fe6db5d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007156200070762000ad460201b60201c565b600162000afe60201b60201c565b6200072830600162000afe60201b60201c565b6200073d61dead600162000afe60201b60201c565b62000772600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000afe60201b60201c565b620007a7600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000afe60201b60201c565b620007c9620007bb62000ad460201b60201c565b60016200094960201b60201c565b620007dc3060016200094960201b60201c565b620007f161dead60016200094960201b60201c565b62000826600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200094960201b60201c565b6200085b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200094960201b60201c565b6200086d338262000c3860201b60201c565b5050505050505050620014a6565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620009596200087b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200097f62000ad460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cf90620013aa565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000b0e6200087b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000b3462000ad460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8490620013aa565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000c2c9190620013e9565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ca19062001456565b60405180910390fd5b62000cbe6000838362000db060201b60201c565b806002600082825462000cd29190620012ec565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000d299190620012ec565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d90919062001489565b60405180910390a362000dac6000838362000db560201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e3c57607f821691505b60208210810362000e525762000e5162000df4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ebc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e7d565b62000ec8868362000e7d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f1562000f0f62000f098462000ee0565b62000eea565b62000ee0565b9050919050565b6000819050919050565b62000f318362000ef4565b62000f4962000f408262000f1c565b84845462000e8a565b825550505050565b600090565b62000f6062000f51565b62000f6d81848462000f26565b505050565b5b8181101562000f955762000f8960008262000f56565b60018101905062000f73565b5050565b601f82111562000fe45762000fae8162000e58565b62000fb98462000e6d565b8101602085101562000fc9578190505b62000fe162000fd88562000e6d565b83018262000f72565b50505b505050565b600082821c905092915050565b6000620010096000198460080262000fe9565b1980831691505092915050565b600062001024838362000ff6565b9150826002028217905092915050565b6200103f8262000dba565b67ffffffffffffffff8111156200105b576200105a62000dc5565b5b62001067825462000e23565b6200107482828562000f99565b600060209050601f831160018114620010ac576000841562001097578287015190505b620010a3858262001016565b86555062001113565b601f198416620010bc8662000e58565b60005b82811015620010e657848901518255600182019150602085019450602081019050620010bf565b8683101562001106578489015162001102601f89168262000ff6565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200114d8262001120565b9050919050565b6200115f8162001140565b81146200116b57600080fd5b50565b6000815190506200117f8162001154565b92915050565b6000602082840312156200119e576200119d6200111b565b5b6000620011ae848285016200116e565b91505092915050565b620011c28162001140565b82525050565b6000604082019050620011df6000830185620011b7565b620011ee6020830184620011b7565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012318262000ee0565b91506200123e8362000ee0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200127a5762001279620011f5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012c18262000ee0565b9150620012ce8362000ee0565b925082620012e157620012e062001285565b5b828204905092915050565b6000620012f98262000ee0565b9150620013068362000ee0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200133e576200133d620011f5565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200139260208362001349565b91506200139f826200135a565b602082019050919050565b60006020820190508181036000830152620013c58162001383565b9050919050565b60008115159050919050565b620013e381620013cc565b82525050565b6000602082019050620014006000830184620013d8565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200143e601f8362001349565b91506200144b8262001406565b602082019050919050565b6000602082019050818103600083015262001471816200142f565b9050919050565b620014838162000ee0565b82525050565b6000602082019050620014a0600083018462001478565b92915050565b61527180620014b66000396000f3fe6080604052600436106103855760003560e01c80638ea5220f116101d1578063bbc0c74211610102578063d85ba063116100a0578063e884f2601161006f578063e884f26014610d2f578063ee559fab14610d5a578063f2fde38b14610d85578063f8b45b0514610dae5761038c565b8063d85ba06314610c71578063dd62ed3e14610c9c578063e2f4560514610cd9578063e71dc3f514610d045761038c565b8063c18bc195116100dc578063c18bc19514610bb5578063c876d0b914610bde578063c8c8ebe414610c09578063d257b34f14610c345761038c565b8063bbc0c74214610b38578063c024666814610b63578063c0d7865514610b8c5761038c565b8063a0d82dc51161016f578063a9059cbb11610149578063a9059cbb14610a68578063adb873bd14610aa5578063b368b8bc14610ad0578063b62496f514610afb5761038c565b8063a0d82dc5146109d5578063a108e59814610a00578063a457c2d714610a2b5761038c565b806395d89b41116101ab57806395d89b411461092b5780639a7a23d6146109565780639c3b4fdc1461097f5780639fccce32146109aa5761038c565b80638ea5220f146108ac57806392136913146108d7578063924de9b7146109025761038c565b80634a62bb65116102b65780637571336a116102545780638187f516116102235780638187f5161461081857806386f6c3c1146108415780638a8c523c1461086a5780638da5cb5b146108815761038c565b80637571336a1461076e57806375f0a874146107975780637bce5a04146107c257806381358c01146107ed5761038c565b80636ddd1713116102905780636ddd1713146106c457806370a08231146106ef578063715018a61461072c578063751039fc146107435761038c565b80634a62bb65146106315780634fbee1931461065c5780636a486a8e146106995761038c565b80631f3fed8f1161032357806327c8f835116102fd57806327c8f83514610573578063313ce5671461059e57806339509351146105c957806349bd5a5e146106065761038c565b80631f3fed8f146104e2578063203e727e1461050d57806323b872dd146105365761038c565b806313606e271161035f57806313606e27146104365780631694505e1461046157806318160ddd1461048c5780631d777856146104b75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd9565b6040516103b39190613edf565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613f9a565b610e6b565b6040516103f09190613ff5565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190614010565b610e89565b60405161042d9190613ff5565b60405180910390f35b34801561044257600080fd5b5061044b610ea9565b604051610458919061404c565b60405180910390f35b34801561046d57600080fd5b50610476610ecf565b60405161048391906140c6565b60405180910390f35b34801561049857600080fd5b506104a1610ef5565b6040516104ae91906140f0565b60405180910390f35b3480156104c357600080fd5b506104cc610eff565b6040516104d991906140f0565b60405180910390f35b3480156104ee57600080fd5b506104f7610f05565b60405161050491906140f0565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f919061410b565b610f0b565b005b34801561054257600080fd5b5061055d60048036038101906105589190614138565b61101a565b60405161056a9190613ff5565b60405180910390f35b34801561057f57600080fd5b50610588611112565b604051610595919061404c565b60405180910390f35b3480156105aa57600080fd5b506105b3611118565b6040516105c091906141a7565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613f9a565b611121565b6040516105fd9190613ff5565b60405180910390f35b34801561061257600080fd5b5061061b6111cd565b604051610628919061404c565b60405180910390f35b34801561063d57600080fd5b506106466111f3565b6040516106539190613ff5565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190614010565b611206565b6040516106909190613ff5565b60405180910390f35b3480156106a557600080fd5b506106ae61125c565b6040516106bb91906140f0565b60405180910390f35b3480156106d057600080fd5b506106d9611262565b6040516106e69190613ff5565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190614010565b611275565b60405161072391906140f0565b60405180910390f35b34801561073857600080fd5b506107416112bd565b005b34801561074f57600080fd5b50610758611345565b6040516107659190613ff5565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141ee565b6113e5565b005b3480156107a357600080fd5b506107ac6114bc565b6040516107b9919061404c565b60405180910390f35b3480156107ce57600080fd5b506107d76114e2565b6040516107e491906140f0565b60405180910390f35b3480156107f957600080fd5b506108026114e8565b60405161080f919061404c565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614010565b61150e565b005b34801561084d57600080fd5b506108686004803603810190610863919061422e565b6115ce565b005b34801561087657600080fd5b5061087f6116c2565b005b34801561088d57600080fd5b50610896611776565b6040516108a3919061404c565b60405180910390f35b3480156108b857600080fd5b506108c16117a0565b6040516108ce919061404c565b60405180910390f35b3480156108e357600080fd5b506108ec6117c6565b6040516108f991906140f0565b60405180910390f35b34801561090e57600080fd5b50610929600480360381019061092491906142bb565b6117cc565b005b34801561093757600080fd5b50610940611865565b60405161094d9190613edf565b60405180910390f35b34801561096257600080fd5b5061097d600480360381019061097891906141ee565b6118f7565b005b34801561098b57600080fd5b50610994611a11565b6040516109a191906140f0565b60405180910390f35b3480156109b657600080fd5b506109bf611a17565b6040516109cc91906140f0565b60405180910390f35b3480156109e157600080fd5b506109ea611a1d565b6040516109f791906140f0565b60405180910390f35b348015610a0c57600080fd5b50610a15611a23565b604051610a22919061404c565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190613f9a565b611a49565b604051610a5f9190613ff5565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f9a565b611b34565b604051610a9c9190613ff5565b60405180910390f35b348015610ab157600080fd5b50610aba611b52565b604051610ac791906140f0565b60405180910390f35b348015610adc57600080fd5b50610ae5611b58565b604051610af2919061404c565b60405180910390f35b348015610b0757600080fd5b50610b226004803603810190610b1d9190614010565b611b7e565b604051610b2f9190613ff5565b60405180910390f35b348015610b4457600080fd5b50610b4d611b9e565b604051610b5a9190613ff5565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906141ee565b611bb1565b005b348015610b9857600080fd5b50610bb36004803603810190610bae9190614010565b611cd6565b005b348015610bc157600080fd5b50610bdc6004803603810190610bd7919061410b565b611d9c565b005b348015610bea57600080fd5b50610bf3611eab565b604051610c009190613ff5565b60405180910390f35b348015610c1557600080fd5b50610c1e611ebe565b604051610c2b91906140f0565b60405180910390f35b348015610c4057600080fd5b50610c5b6004803603810190610c56919061410b565b611ec4565b604051610c689190613ff5565b60405180910390f35b348015610c7d57600080fd5b50610c86612019565b604051610c9391906140f0565b60405180910390f35b348015610ca857600080fd5b50610cc36004803603810190610cbe91906142e8565b61201f565b604051610cd091906140f0565b60405180910390f35b348015610ce557600080fd5b50610cee6120a6565b604051610cfb91906140f0565b60405180910390f35b348015610d1057600080fd5b50610d196120ac565b604051610d2691906140f0565b60405180910390f35b348015610d3b57600080fd5b50610d446120b2565b604051610d519190613ff5565b60405180910390f35b348015610d6657600080fd5b50610d6f612152565b604051610d7c919061404c565b60405180910390f35b348015610d9157600080fd5b50610dac6004803603810190610da79190614010565b612178565b005b348015610dba57600080fd5b50610dc361226f565b604051610dd091906140f0565b60405180910390f35b606060038054610de890614357565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1490614357565b8015610e615780601f10610e3657610100808354040283529160200191610e61565b820191906000526020600020905b815481529060010190602001808311610e4457829003601f168201915b5050505050905090565b6000610e7f610e78612275565b848461227d565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b601e5481565b601d5481565b610f13612275565b73ffffffffffffffffffffffffffffffffffffffff16610f31611776565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906143d4565b60405180910390fd5b670de0b6b3a76400006103e86001610f9d610ef5565b610fa79190614423565b610fb191906144ac565b610fbb91906144ac565b811015610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff49061454f565b60405180910390fd5b670de0b6b3a7640000816110119190614423565b600f8190555050565b6000611027848484612446565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611072612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906145e1565b60405180910390fd5b611106856110fe612275565b85840361227d565b60019150509392505050565b61dead81565b60006012905090565b60006111c361112e612275565b84846001600061113c612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111be9190614601565b61227d565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c5612275565b73ffffffffffffffffffffffffffffffffffffffff166112e3611776565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906143d4565b60405180910390fd5b61134360006130e1565b565b600061134f612275565b73ffffffffffffffffffffffffffffffffffffffff1661136d611776565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906143d4565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6113ed612275565b73ffffffffffffffffffffffffffffffffffffffff1661140b611776565b73ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611458906143d4565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611516612275565b73ffffffffffffffffffffffffffffffffffffffff16611534611776565b73ffffffffffffffffffffffffffffffffffffffff161461158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906143d4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115d6612275565b73ffffffffffffffffffffffffffffffffffffffff166115f4611776565b73ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611641906143d4565b60405180910390fd5b8560168190555084601781905550836018819055506018546017546016546116729190614601565b61167c9190614601565b60158190555082601a8190555081601b8190555080601c81905550601c54601b54601a546116aa9190614601565b6116b49190614601565b601981905550505050505050565b6116ca612275565b73ffffffffffffffffffffffffffffffffffffffff166116e8611776565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906143d4565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6117d4612275565b73ffffffffffffffffffffffffffffffffffffffff166117f2611776565b73ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906143d4565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60606004805461187490614357565b80601f01602080910402602001604051908101604052809291908181526020018280546118a090614357565b80156118ed5780601f106118c2576101008083540402835291602001916118ed565b820191906000526020600020905b8154815290600101906020018083116118d057829003601f168201915b5050505050905090565b6118ff612275565b73ffffffffffffffffffffffffffffffffffffffff1661191d611776565b73ffffffffffffffffffffffffffffffffffffffff1614611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a906143d4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906146c9565b60405180910390fd5b611a0d82826131a7565b5050565b60185481565b601f5481565b601c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060016000611a58612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c9061475b565b60405180910390fd5b611b29611b20612275565b8585840361227d565b600191505092915050565b6000611b48611b41612275565b8484612446565b6001905092915050565b601b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611bb9612275565b73ffffffffffffffffffffffffffffffffffffffff16611bd7611776565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c24906143d4565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cca9190613ff5565b60405180910390a25050565b611cde612275565b73ffffffffffffffffffffffffffffffffffffffff16611cfc611776565b73ffffffffffffffffffffffffffffffffffffffff1614611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d49906143d4565b60405180910390fd5b600081905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611da4612275565b73ffffffffffffffffffffffffffffffffffffffff16611dc2611776565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f906143d4565b60405180910390fd5b670de0b6b3a76400006103e86005611e2e610ef5565b611e389190614423565b611e4291906144ac565b611e4c91906144ac565b811015611e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e85906147ed565b60405180910390fd5b670de0b6b3a764000081611ea29190614423565b60118190555050565b601460009054906101000a900460ff1681565b600f5481565b6000611ece612275565b73ffffffffffffffffffffffffffffffffffffffff16611eec611776565b73ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f39906143d4565b60405180910390fd5b620186a06001611f50610ef5565b611f5a9190614423565b611f6491906144ac565b821015611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d9061487f565b60405180910390fd5b6103e86005611fb3610ef5565b611fbd9190614423565b611fc791906144ac565b821115612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614911565b60405180910390fd5b8160108190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60175481565b60006120bc612275565b73ffffffffffffffffffffffffffffffffffffffff166120da611776565b73ffffffffffffffffffffffffffffffffffffffff1614612130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612127906143d4565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612180612275565b73ffffffffffffffffffffffffffffffffffffffff1661219e611776565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb906143d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a906149a3565b60405180910390fd5b61226c816130e1565b50565b60115481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e390614a35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614ac7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243991906140f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90614b59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90614beb565b60405180910390fd5b6000810361253d5761253883836000613248565b6130dc565b601260009054906101000a900460ff1615612c045761255a611776565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125c85750612598611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126545750600c60149054906101000a900460ff16155b15612c0357601260019054906101000a900460ff1661274e57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061270e5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614c57565b60405180910390fd5b5b601460009054906101000a900460ff161561291a5761276b611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127f45750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284e5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129195743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90614d0f565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129bd5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a6457600f54811115612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614da1565b60405180910390fd5b601154612a1383611275565b82612a1e9190614601565b1115612a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5690614e0d565b60405180910390fd5b612c02565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b075750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b5657600f54811115612b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4890614e9f565b60405180910390fd5b612c01565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c0057601154612bb383611275565b82612bbe9190614601565b1115612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf690614e0d565b60405180910390fd5b5b5b5b5b5b6000612c0f30611275565b905060006010548210159050808015612c345750601260029054906101000a900460ff165b8015612c4d5750600c60149054906101000a900460ff16155b8015612ca35750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cf95750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d4f5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d93576001600c60146101000a81548160ff021916908315150217905550612d776134c7565b6000600c60146101000a81548160ff0219169083151502179055505b6000600c60149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e495750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e5357600090505b600081156130cc57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eb657506000601954115b15612f8357612ee36064612ed5601954886136f090919063ffffffff16565b61370690919063ffffffff16565b9050601954601b5482612ef69190614423565b612f0091906144ac565b601e6000828254612f119190614601565b92505081905550601954601c5482612f299190614423565b612f3391906144ac565b601f6000828254612f449190614601565b92505081905550601954601a5482612f5c9190614423565b612f6691906144ac565b601d6000828254612f779190614601565b925050819055506130a8565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fde57506000601554115b156130a75761300b6064612ffd601554886136f090919063ffffffff16565b61370690919063ffffffff16565b90506015546017548261301e9190614423565b61302891906144ac565b601e60008282546130399190614601565b92505081905550601554601854826130519190614423565b61305b91906144ac565b601f600082825461306c9190614601565b92505081905550601554601654826130849190614423565b61308e91906144ac565b601d600082825461309f9190614601565b925050819055505b5b60008111156130bd576130bc873083613248565b5b80856130c99190614ebf565b94505b6130d7878787613248565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae90614b59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331d90614beb565b60405180910390fd5b61333183838361371c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ae90614f65565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461344a9190614601565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134ae91906140f0565b60405180910390a36134c1848484613721565b50505050565b60006134d230611275565b90506000601f54601d54601e546134e99190614601565b6134f39190614601565b90506000808314806135055750600082145b15613512575050506136ee565b60146010546135219190614423565b83111561353a5760146010546135379190614423565b92505b600047905061354884613726565b600061355d824761396990919063ffffffff16565b905060006135888561357a601d54856136f090919063ffffffff16565b61370690919063ffffffff16565b905060006135b3866135a5601f54866136f090919063ffffffff16565b61370690919063ffffffff16565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135fb90614fb6565b60006040518083038185875af1925050503d8060008114613638576040519150601f19603f3d011682016040523d82523d6000602084013e61363d565b606091505b505080955050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660028361368991906144ac565b60405161369590614fb6565b60006040518083038185875af1925050503d80600081146136d2576040519150601f19603f3d011682016040523d82523d6000602084013e6136d7565b606091505b5050809550506136e64761397f565b505050505050505b565b600081836136fe9190614423565b905092915050565b6000818361371491906144ac565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561374357613742614fcb565b5b6040519080825280602002602001820160405280156137715781602001602082028036833780820191505090505b509050308160008151811061378957613788614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613854919061503e565b8160018151811061386857613867614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138cf30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461227d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613933959493929190615164565b600060405180830381600087803b15801561394d57600080fd5b505af1158015613961573d6000803e3d6000fd5b505050505050565b600081836139779190614ebf565b905092915050565b6000600267ffffffffffffffff81111561399c5761399b614fcb565b5b6040519080825280602002602001820160405280156139ca5781602001602082028036833780820191505090505b5090506000600567ffffffffffffffff8111156139ea576139e9614fcb565b5b604051908082528060200260200182016040528015613a185781602001602082028036833780820191505090505b509050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110613a5257613a51614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613ac357613ac2614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110613b3457613b33614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600381518110613ba557613ba4614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600481518110613c1657613c15614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600543613c5f91906151be565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf2919061503e565b83600081518110613d0657613d05614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818181518110613d5357613d52614ffa565b5b602002602001015183600181518110613d6f57613d6e614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958560008661dead426040518663ffffffff1660e01b8152600401613e0e94939291906151ef565b6000604051808303818588803b158015613e2757600080fd5b505af1158015613e3b573d6000803e3d6000fd5b505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e80578082015181840152602081019050613e65565b83811115613e8f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613eb182613e46565b613ebb8185613e51565b9350613ecb818560208601613e62565b613ed481613e95565b840191505092915050565b60006020820190508181036000830152613ef98184613ea6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f3182613f06565b9050919050565b613f4181613f26565b8114613f4c57600080fd5b50565b600081359050613f5e81613f38565b92915050565b6000819050919050565b613f7781613f64565b8114613f8257600080fd5b50565b600081359050613f9481613f6e565b92915050565b60008060408385031215613fb157613fb0613f01565b5b6000613fbf85828601613f4f565b9250506020613fd085828601613f85565b9150509250929050565b60008115159050919050565b613fef81613fda565b82525050565b600060208201905061400a6000830184613fe6565b92915050565b60006020828403121561402657614025613f01565b5b600061403484828501613f4f565b91505092915050565b61404681613f26565b82525050565b6000602082019050614061600083018461403d565b92915050565b6000819050919050565b600061408c61408761408284613f06565b614067565b613f06565b9050919050565b600061409e82614071565b9050919050565b60006140b082614093565b9050919050565b6140c0816140a5565b82525050565b60006020820190506140db60008301846140b7565b92915050565b6140ea81613f64565b82525050565b600060208201905061410560008301846140e1565b92915050565b60006020828403121561412157614120613f01565b5b600061412f84828501613f85565b91505092915050565b60008060006060848603121561415157614150613f01565b5b600061415f86828701613f4f565b935050602061417086828701613f4f565b925050604061418186828701613f85565b9150509250925092565b600060ff82169050919050565b6141a18161418b565b82525050565b60006020820190506141bc6000830184614198565b92915050565b6141cb81613fda565b81146141d657600080fd5b50565b6000813590506141e8816141c2565b92915050565b6000806040838503121561420557614204613f01565b5b600061421385828601613f4f565b9250506020614224858286016141d9565b9150509250929050565b60008060008060008060c0878903121561424b5761424a613f01565b5b600061425989828a01613f85565b965050602061426a89828a01613f85565b955050604061427b89828a01613f85565b945050606061428c89828a01613f85565b935050608061429d89828a01613f85565b92505060a06142ae89828a01613f85565b9150509295509295509295565b6000602082840312156142d1576142d0613f01565b5b60006142df848285016141d9565b91505092915050565b600080604083850312156142ff576142fe613f01565b5b600061430d85828601613f4f565b925050602061431e85828601613f4f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061436f57607f821691505b60208210810361438257614381614328565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143be602083613e51565b91506143c982614388565b602082019050919050565b600060208201905081810360008301526143ed816143b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061442e82613f64565b915061443983613f64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614472576144716143f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144b782613f64565b91506144c283613f64565b9250826144d2576144d161447d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614539602f83613e51565b9150614544826144dd565b604082019050919050565b600060208201905081810360008301526145688161452c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006145cb602883613e51565b91506145d68261456f565b604082019050919050565b600060208201905081810360008301526145fa816145be565b9050919050565b600061460c82613f64565b915061461783613f64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561464c5761464b6143f4565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146b3603983613e51565b91506146be82614657565b604082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614745602583613e51565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147d7602483613e51565b91506147e28261477b565b604082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614869603583613e51565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148fb603483613e51565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061498d602683613e51565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a1f602483613e51565b9150614a2a826149c3565b604082019050919050565b60006020820190508181036000830152614a4e81614a12565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ab1602283613e51565b9150614abc82614a55565b604082019050919050565b60006020820190508181036000830152614ae081614aa4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b43602583613e51565b9150614b4e82614ae7565b604082019050919050565b60006020820190508181036000830152614b7281614b36565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd5602383613e51565b9150614be082614b79565b604082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c41601683613e51565b9150614c4c82614c0b565b602082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cf9604983613e51565b9150614d0482614c77565b606082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8b603583613e51565b9150614d9682614d2f565b604082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df7601383613e51565b9150614e0282614dc1565b602082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e89603683613e51565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b6000614eca82613f64565b9150614ed583613f64565b925082821015614ee857614ee76143f4565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f4f602683613e51565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b600081905092915050565b50565b6000614fa0600083614f85565b9150614fab82614f90565b600082019050919050565b6000614fc182614f93565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061503881613f38565b92915050565b60006020828403121561505457615053613f01565b5b600061506284828501615029565b91505092915050565b6000819050919050565b600061509061508b6150868461506b565b614067565b613f64565b9050919050565b6150a081615075565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150db81613f26565b82525050565b60006150ed83836150d2565b60208301905092915050565b6000602082019050919050565b6000615111826150a6565b61511b81856150b1565b9350615126836150c2565b8060005b8381101561515757815161513e88826150e1565b9750615149836150f9565b92505060018101905061512a565b5085935050505092915050565b600060a08201905061517960008301886140e1565b6151866020830187615097565b81810360408301526151988186615106565b90506151a7606083018561403d565b6151b460808301846140e1565b9695505050505050565b60006151c982613f64565b91506151d483613f64565b9250826151e4576151e361447d565b5b828206905092915050565b60006080820190506152046000830187615097565b81810360208301526152168186615106565b9050615225604083018561403d565b61523260608301846140e1565b9594505050505056fea2646970667358221220b3434682bbef40c404b6d3fee10898f1a0f714e49dafcc844dba383ad14fb86764736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638ea5220f116101d1578063bbc0c74211610102578063d85ba063116100a0578063e884f2601161006f578063e884f26014610d2f578063ee559fab14610d5a578063f2fde38b14610d85578063f8b45b0514610dae5761038c565b8063d85ba06314610c71578063dd62ed3e14610c9c578063e2f4560514610cd9578063e71dc3f514610d045761038c565b8063c18bc195116100dc578063c18bc19514610bb5578063c876d0b914610bde578063c8c8ebe414610c09578063d257b34f14610c345761038c565b8063bbc0c74214610b38578063c024666814610b63578063c0d7865514610b8c5761038c565b8063a0d82dc51161016f578063a9059cbb11610149578063a9059cbb14610a68578063adb873bd14610aa5578063b368b8bc14610ad0578063b62496f514610afb5761038c565b8063a0d82dc5146109d5578063a108e59814610a00578063a457c2d714610a2b5761038c565b806395d89b41116101ab57806395d89b411461092b5780639a7a23d6146109565780639c3b4fdc1461097f5780639fccce32146109aa5761038c565b80638ea5220f146108ac57806392136913146108d7578063924de9b7146109025761038c565b80634a62bb65116102b65780637571336a116102545780638187f516116102235780638187f5161461081857806386f6c3c1146108415780638a8c523c1461086a5780638da5cb5b146108815761038c565b80637571336a1461076e57806375f0a874146107975780637bce5a04146107c257806381358c01146107ed5761038c565b80636ddd1713116102905780636ddd1713146106c457806370a08231146106ef578063715018a61461072c578063751039fc146107435761038c565b80634a62bb65146106315780634fbee1931461065c5780636a486a8e146106995761038c565b80631f3fed8f1161032357806327c8f835116102fd57806327c8f83514610573578063313ce5671461059e57806339509351146105c957806349bd5a5e146106065761038c565b80631f3fed8f146104e2578063203e727e1461050d57806323b872dd146105365761038c565b806313606e271161035f57806313606e27146104365780631694505e1461046157806318160ddd1461048c5780631d777856146104b75761038c565b806306fdde0314610391578063095ea7b3146103bc57806310d5de53146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dd9565b6040516103b39190613edf565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613f9a565b610e6b565b6040516103f09190613ff5565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190614010565b610e89565b60405161042d9190613ff5565b60405180910390f35b34801561044257600080fd5b5061044b610ea9565b604051610458919061404c565b60405180910390f35b34801561046d57600080fd5b50610476610ecf565b60405161048391906140c6565b60405180910390f35b34801561049857600080fd5b506104a1610ef5565b6040516104ae91906140f0565b60405180910390f35b3480156104c357600080fd5b506104cc610eff565b6040516104d991906140f0565b60405180910390f35b3480156104ee57600080fd5b506104f7610f05565b60405161050491906140f0565b60405180910390f35b34801561051957600080fd5b50610534600480360381019061052f919061410b565b610f0b565b005b34801561054257600080fd5b5061055d60048036038101906105589190614138565b61101a565b60405161056a9190613ff5565b60405180910390f35b34801561057f57600080fd5b50610588611112565b604051610595919061404c565b60405180910390f35b3480156105aa57600080fd5b506105b3611118565b6040516105c091906141a7565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190613f9a565b611121565b6040516105fd9190613ff5565b60405180910390f35b34801561061257600080fd5b5061061b6111cd565b604051610628919061404c565b60405180910390f35b34801561063d57600080fd5b506106466111f3565b6040516106539190613ff5565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190614010565b611206565b6040516106909190613ff5565b60405180910390f35b3480156106a557600080fd5b506106ae61125c565b6040516106bb91906140f0565b60405180910390f35b3480156106d057600080fd5b506106d9611262565b6040516106e69190613ff5565b60405180910390f35b3480156106fb57600080fd5b5061071660048036038101906107119190614010565b611275565b60405161072391906140f0565b60405180910390f35b34801561073857600080fd5b506107416112bd565b005b34801561074f57600080fd5b50610758611345565b6040516107659190613ff5565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141ee565b6113e5565b005b3480156107a357600080fd5b506107ac6114bc565b6040516107b9919061404c565b60405180910390f35b3480156107ce57600080fd5b506107d76114e2565b6040516107e491906140f0565b60405180910390f35b3480156107f957600080fd5b506108026114e8565b60405161080f919061404c565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a9190614010565b61150e565b005b34801561084d57600080fd5b506108686004803603810190610863919061422e565b6115ce565b005b34801561087657600080fd5b5061087f6116c2565b005b34801561088d57600080fd5b50610896611776565b6040516108a3919061404c565b60405180910390f35b3480156108b857600080fd5b506108c16117a0565b6040516108ce919061404c565b60405180910390f35b3480156108e357600080fd5b506108ec6117c6565b6040516108f991906140f0565b60405180910390f35b34801561090e57600080fd5b50610929600480360381019061092491906142bb565b6117cc565b005b34801561093757600080fd5b50610940611865565b60405161094d9190613edf565b60405180910390f35b34801561096257600080fd5b5061097d600480360381019061097891906141ee565b6118f7565b005b34801561098b57600080fd5b50610994611a11565b6040516109a191906140f0565b60405180910390f35b3480156109b657600080fd5b506109bf611a17565b6040516109cc91906140f0565b60405180910390f35b3480156109e157600080fd5b506109ea611a1d565b6040516109f791906140f0565b60405180910390f35b348015610a0c57600080fd5b50610a15611a23565b604051610a22919061404c565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190613f9a565b611a49565b604051610a5f9190613ff5565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190613f9a565b611b34565b604051610a9c9190613ff5565b60405180910390f35b348015610ab157600080fd5b50610aba611b52565b604051610ac791906140f0565b60405180910390f35b348015610adc57600080fd5b50610ae5611b58565b604051610af2919061404c565b60405180910390f35b348015610b0757600080fd5b50610b226004803603810190610b1d9190614010565b611b7e565b604051610b2f9190613ff5565b60405180910390f35b348015610b4457600080fd5b50610b4d611b9e565b604051610b5a9190613ff5565b60405180910390f35b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906141ee565b611bb1565b005b348015610b9857600080fd5b50610bb36004803603810190610bae9190614010565b611cd6565b005b348015610bc157600080fd5b50610bdc6004803603810190610bd7919061410b565b611d9c565b005b348015610bea57600080fd5b50610bf3611eab565b604051610c009190613ff5565b60405180910390f35b348015610c1557600080fd5b50610c1e611ebe565b604051610c2b91906140f0565b60405180910390f35b348015610c4057600080fd5b50610c5b6004803603810190610c56919061410b565b611ec4565b604051610c689190613ff5565b60405180910390f35b348015610c7d57600080fd5b50610c86612019565b604051610c9391906140f0565b60405180910390f35b348015610ca857600080fd5b50610cc36004803603810190610cbe91906142e8565b61201f565b604051610cd091906140f0565b60405180910390f35b348015610ce557600080fd5b50610cee6120a6565b604051610cfb91906140f0565b60405180910390f35b348015610d1057600080fd5b50610d196120ac565b604051610d2691906140f0565b60405180910390f35b348015610d3b57600080fd5b50610d446120b2565b604051610d519190613ff5565b60405180910390f35b348015610d6657600080fd5b50610d6f612152565b604051610d7c919061404c565b60405180910390f35b348015610d9157600080fd5b50610dac6004803603810190610da79190614010565b612178565b005b348015610dba57600080fd5b50610dc361226f565b604051610dd091906140f0565b60405180910390f35b606060038054610de890614357565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1490614357565b8015610e615780601f10610e3657610100808354040283529160200191610e61565b820191906000526020600020905b815481529060010190602001808311610e4457829003601f168201915b5050505050905090565b6000610e7f610e78612275565b848461227d565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b601e5481565b601d5481565b610f13612275565b73ffffffffffffffffffffffffffffffffffffffff16610f31611776565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906143d4565b60405180910390fd5b670de0b6b3a76400006103e86001610f9d610ef5565b610fa79190614423565b610fb191906144ac565b610fbb91906144ac565b811015610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff49061454f565b60405180910390fd5b670de0b6b3a7640000816110119190614423565b600f8190555050565b6000611027848484612446565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611072612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e9906145e1565b60405180910390fd5b611106856110fe612275565b85840361227d565b60019150509392505050565b61dead81565b60006012905090565b60006111c361112e612275565b84846001600061113c612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111be9190614601565b61227d565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601260029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112c5612275565b73ffffffffffffffffffffffffffffffffffffffff166112e3611776565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906143d4565b60405180910390fd5b61134360006130e1565b565b600061134f612275565b73ffffffffffffffffffffffffffffffffffffffff1661136d611776565b73ffffffffffffffffffffffffffffffffffffffff16146113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba906143d4565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6113ed612275565b73ffffffffffffffffffffffffffffffffffffffff1661140b611776565b73ffffffffffffffffffffffffffffffffffffffff1614611461576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611458906143d4565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611516612275565b73ffffffffffffffffffffffffffffffffffffffff16611534611776565b73ffffffffffffffffffffffffffffffffffffffff161461158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611581906143d4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115d6612275565b73ffffffffffffffffffffffffffffffffffffffff166115f4611776565b73ffffffffffffffffffffffffffffffffffffffff161461164a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611641906143d4565b60405180910390fd5b8560168190555084601781905550836018819055506018546017546016546116729190614601565b61167c9190614601565b60158190555082601a8190555081601b8190555080601c81905550601c54601b54601a546116aa9190614601565b6116b49190614601565b601981905550505050505050565b6116ca612275565b73ffffffffffffffffffffffffffffffffffffffff166116e8611776565b73ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611735906143d4565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6117d4612275565b73ffffffffffffffffffffffffffffffffffffffff166117f2611776565b73ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906143d4565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60606004805461187490614357565b80601f01602080910402602001604051908101604052809291908181526020018280546118a090614357565b80156118ed5780601f106118c2576101008083540402835291602001916118ed565b820191906000526020600020905b8154815290600101906020018083116118d057829003601f168201915b5050505050905090565b6118ff612275565b73ffffffffffffffffffffffffffffffffffffffff1661191d611776565b73ffffffffffffffffffffffffffffffffffffffff1614611973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196a906143d4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa906146c9565b60405180910390fd5b611a0d82826131a7565b5050565b60185481565b601f5481565b601c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060016000611a58612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0c9061475b565b60405180910390fd5b611b29611b20612275565b8585840361227d565b600191505092915050565b6000611b48611b41612275565b8484612446565b6001905092915050565b601b5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b611bb9612275565b73ffffffffffffffffffffffffffffffffffffffff16611bd7611776565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c24906143d4565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cca9190613ff5565b60405180910390a25050565b611cde612275565b73ffffffffffffffffffffffffffffffffffffffff16611cfc611776565b73ffffffffffffffffffffffffffffffffffffffff1614611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d49906143d4565b60405180910390fd5b600081905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611da4612275565b73ffffffffffffffffffffffffffffffffffffffff16611dc2611776565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f906143d4565b60405180910390fd5b670de0b6b3a76400006103e86005611e2e610ef5565b611e389190614423565b611e4291906144ac565b611e4c91906144ac565b811015611e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e85906147ed565b60405180910390fd5b670de0b6b3a764000081611ea29190614423565b60118190555050565b601460009054906101000a900460ff1681565b600f5481565b6000611ece612275565b73ffffffffffffffffffffffffffffffffffffffff16611eec611776565b73ffffffffffffffffffffffffffffffffffffffff1614611f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f39906143d4565b60405180910390fd5b620186a06001611f50610ef5565b611f5a9190614423565b611f6491906144ac565b821015611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d9061487f565b60405180910390fd5b6103e86005611fb3610ef5565b611fbd9190614423565b611fc791906144ac565b821115612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200090614911565b60405180910390fd5b8160108190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60175481565b60006120bc612275565b73ffffffffffffffffffffffffffffffffffffffff166120da611776565b73ffffffffffffffffffffffffffffffffffffffff1614612130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612127906143d4565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612180612275565b73ffffffffffffffffffffffffffffffffffffffff1661219e611776565b73ffffffffffffffffffffffffffffffffffffffff16146121f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121eb906143d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225a906149a3565b60405180910390fd5b61226c816130e1565b50565b60115481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e390614a35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361235b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235290614ac7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161243991906140f0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ac90614b59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612524576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b90614beb565b60405180910390fd5b6000810361253d5761253883836000613248565b6130dc565b601260009054906101000a900460ff1615612c045761255a611776565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125c85750612598611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126015750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126545750600c60149054906101000a900460ff16155b15612c0357601260019054906101000a900460ff1661274e57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061270e5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274490614c57565b60405180910390fd5b5b601460009054906101000a900460ff161561291a5761276b611776565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127f45750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561284e5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156129195743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106128d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cb90614d0f565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129bd5750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a6457600f54811115612a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fe90614da1565b60405180910390fd5b601154612a1383611275565b82612a1e9190614601565b1115612a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5690614e0d565b60405180910390fd5b612c02565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b075750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b5657600f54811115612b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4890614e9f565b60405180910390fd5b612c01565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c0057601154612bb383611275565b82612bbe9190614601565b1115612bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf690614e0d565b60405180910390fd5b5b5b5b5b5b6000612c0f30611275565b905060006010548210159050808015612c345750601260029054906101000a900460ff165b8015612c4d5750600c60149054906101000a900460ff16155b8015612ca35750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cf95750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d4f5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d93576001600c60146101000a81548160ff021916908315150217905550612d776134c7565b6000600c60146101000a81548160ff0219169083151502179055505b6000600c60149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e495750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e5357600090505b600081156130cc57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612eb657506000601954115b15612f8357612ee36064612ed5601954886136f090919063ffffffff16565b61370690919063ffffffff16565b9050601954601b5482612ef69190614423565b612f0091906144ac565b601e6000828254612f119190614601565b92505081905550601954601c5482612f299190614423565b612f3391906144ac565b601f6000828254612f449190614601565b92505081905550601954601a5482612f5c9190614423565b612f6691906144ac565b601d6000828254612f779190614601565b925050819055506130a8565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fde57506000601554115b156130a75761300b6064612ffd601554886136f090919063ffffffff16565b61370690919063ffffffff16565b90506015546017548261301e9190614423565b61302891906144ac565b601e60008282546130399190614601565b92505081905550601554601854826130519190614423565b61305b91906144ac565b601f600082825461306c9190614601565b92505081905550601554601654826130849190614423565b61308e91906144ac565b601d600082825461309f9190614601565b925050819055505b5b60008111156130bd576130bc873083613248565b5b80856130c99190614ebf565b94505b6130d7878787613248565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ae90614b59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331d90614beb565b60405180910390fd5b61333183838361371c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ae90614f65565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461344a9190614601565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134ae91906140f0565b60405180910390a36134c1848484613721565b50505050565b60006134d230611275565b90506000601f54601d54601e546134e99190614601565b6134f39190614601565b90506000808314806135055750600082145b15613512575050506136ee565b60146010546135219190614423565b83111561353a5760146010546135379190614423565b92505b600047905061354884613726565b600061355d824761396990919063ffffffff16565b905060006135888561357a601d54856136f090919063ffffffff16565b61370690919063ffffffff16565b905060006135b3866135a5601f54866136f090919063ffffffff16565b61370690919063ffffffff16565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135fb90614fb6565b60006040518083038185875af1925050503d8060008114613638576040519150601f19603f3d011682016040523d82523d6000602084013e61363d565b606091505b505080955050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660028361368991906144ac565b60405161369590614fb6565b60006040518083038185875af1925050503d80600081146136d2576040519150601f19603f3d011682016040523d82523d6000602084013e6136d7565b606091505b5050809550506136e64761397f565b505050505050505b565b600081836136fe9190614423565b905092915050565b6000818361371491906144ac565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561374357613742614fcb565b5b6040519080825280602002602001820160405280156137715781602001602082028036833780820191505090505b509050308160008151811061378957613788614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613854919061503e565b8160018151811061386857613867614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138cf30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461227d565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613933959493929190615164565b600060405180830381600087803b15801561394d57600080fd5b505af1158015613961573d6000803e3d6000fd5b505050505050565b600081836139779190614ebf565b905092915050565b6000600267ffffffffffffffff81111561399c5761399b614fcb565b5b6040519080825280602002602001820160405280156139ca5781602001602082028036833780820191505090505b5090506000600567ffffffffffffffff8111156139ea576139e9614fcb565b5b604051908082528060200260200182016040528015613a185781602001602082028036833780820191505090505b509050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110613a5257613a51614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613ac357613ac2614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110613b3457613b33614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600381518110613ba557613ba4614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600481518110613c1657613c15614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600543613c5f91906151be565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cf2919061503e565b83600081518110613d0657613d05614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818181518110613d5357613d52614ffa565b5b602002602001015183600181518110613d6f57613d6e614ffa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958560008661dead426040518663ffffffff1660e01b8152600401613e0e94939291906151ef565b6000604051808303818588803b158015613e2757600080fd5b505af1158015613e3b573d6000803e3d6000fd5b505050505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613e80578082015181840152602081019050613e65565b83811115613e8f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613eb182613e46565b613ebb8185613e51565b9350613ecb818560208601613e62565b613ed481613e95565b840191505092915050565b60006020820190508181036000830152613ef98184613ea6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f3182613f06565b9050919050565b613f4181613f26565b8114613f4c57600080fd5b50565b600081359050613f5e81613f38565b92915050565b6000819050919050565b613f7781613f64565b8114613f8257600080fd5b50565b600081359050613f9481613f6e565b92915050565b60008060408385031215613fb157613fb0613f01565b5b6000613fbf85828601613f4f565b9250506020613fd085828601613f85565b9150509250929050565b60008115159050919050565b613fef81613fda565b82525050565b600060208201905061400a6000830184613fe6565b92915050565b60006020828403121561402657614025613f01565b5b600061403484828501613f4f565b91505092915050565b61404681613f26565b82525050565b6000602082019050614061600083018461403d565b92915050565b6000819050919050565b600061408c61408761408284613f06565b614067565b613f06565b9050919050565b600061409e82614071565b9050919050565b60006140b082614093565b9050919050565b6140c0816140a5565b82525050565b60006020820190506140db60008301846140b7565b92915050565b6140ea81613f64565b82525050565b600060208201905061410560008301846140e1565b92915050565b60006020828403121561412157614120613f01565b5b600061412f84828501613f85565b91505092915050565b60008060006060848603121561415157614150613f01565b5b600061415f86828701613f4f565b935050602061417086828701613f4f565b925050604061418186828701613f85565b9150509250925092565b600060ff82169050919050565b6141a18161418b565b82525050565b60006020820190506141bc6000830184614198565b92915050565b6141cb81613fda565b81146141d657600080fd5b50565b6000813590506141e8816141c2565b92915050565b6000806040838503121561420557614204613f01565b5b600061421385828601613f4f565b9250506020614224858286016141d9565b9150509250929050565b60008060008060008060c0878903121561424b5761424a613f01565b5b600061425989828a01613f85565b965050602061426a89828a01613f85565b955050604061427b89828a01613f85565b945050606061428c89828a01613f85565b935050608061429d89828a01613f85565b92505060a06142ae89828a01613f85565b9150509295509295509295565b6000602082840312156142d1576142d0613f01565b5b60006142df848285016141d9565b91505092915050565b600080604083850312156142ff576142fe613f01565b5b600061430d85828601613f4f565b925050602061431e85828601613f4f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061436f57607f821691505b60208210810361438257614381614328565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143be602083613e51565b91506143c982614388565b602082019050919050565b600060208201905081810360008301526143ed816143b1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061442e82613f64565b915061443983613f64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614472576144716143f4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144b782613f64565b91506144c283613f64565b9250826144d2576144d161447d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614539602f83613e51565b9150614544826144dd565b604082019050919050565b600060208201905081810360008301526145688161452c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006145cb602883613e51565b91506145d68261456f565b604082019050919050565b600060208201905081810360008301526145fa816145be565b9050919050565b600061460c82613f64565b915061461783613f64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561464c5761464b6143f4565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006146b3603983613e51565b91506146be82614657565b604082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614745602583613e51565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147d7602483613e51565b91506147e28261477b565b604082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614869603583613e51565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148fb603483613e51565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061498d602683613e51565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a1f602483613e51565b9150614a2a826149c3565b604082019050919050565b60006020820190508181036000830152614a4e81614a12565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ab1602283613e51565b9150614abc82614a55565b604082019050919050565b60006020820190508181036000830152614ae081614aa4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614b43602583613e51565b9150614b4e82614ae7565b604082019050919050565b60006020820190508181036000830152614b7281614b36565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614bd5602383613e51565b9150614be082614b79565b604082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614c41601683613e51565b9150614c4c82614c0b565b602082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614cf9604983613e51565b9150614d0482614c77565b606082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8b603583613e51565b9150614d9682614d2f565b604082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df7601383613e51565b9150614e0282614dc1565b602082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e89603683613e51565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b6000614eca82613f64565b9150614ed583613f64565b925082821015614ee857614ee76143f4565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f4f602683613e51565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b600081905092915050565b50565b6000614fa0600083614f85565b9150614fab82614f90565b600082019050919050565b6000614fc182614f93565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061503881613f38565b92915050565b60006020828403121561505457615053613f01565b5b600061506284828501615029565b91505092915050565b6000819050919050565b600061509061508b6150868461506b565b614067565b613f64565b9050919050565b6150a081615075565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150db81613f26565b82525050565b60006150ed83836150d2565b60208301905092915050565b6000602082019050919050565b6000615111826150a6565b61511b81856150b1565b9350615126836150c2565b8060005b8381101561515757815161513e88826150e1565b9750615149836150f9565b92505060018101905061512a565b5085935050505092915050565b600060a08201905061517960008301886140e1565b6151866020830187615097565b81810360408301526151988186615106565b90506151a7606083018561403d565b6151b460808301846140e1565b9695505050505050565b60006151c982613f64565b91506151d483613f64565b9250826151e4576151e361447d565b5b828206905092915050565b60006080820190506152046000830187615097565b81810360208301526152168186615106565b9050615225604083018561403d565b61523260608301846140e1565b9594505050505056fea2646970667358221220b3434682bbef40c404b6d3fee10898f1a0f714e49dafcc844dba383ad14fb86764736f6c634300080f0033

Deployed Bytecode Sourcemap

16097:14570:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4041:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4888:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17799:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16480:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16171:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4335:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17596:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17556:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22123:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5052:453;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16256:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4243:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5511:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16220:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16940:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23597:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17416:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17020:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4442:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1584:97;;;;;;;;;;;;;:::i;:::-;;21334:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22618:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16755:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17314;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16642:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21025:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29202:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21184:102;;;;;;;;;;;;;:::i;:::-;;1380:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16792:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17451:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22857:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4140:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23139:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17383:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17631:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17522:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16561:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5721:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4568:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17489:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16399:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18014:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16980:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22957:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20823:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22380:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17234:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16825:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21691:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17283:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4738:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16867:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17351:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21501:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16318:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1687:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16907:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4041:93;4094:13;4123:5;4116:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4041:93;:::o;4888:158::-;4970:4;4983:39;4992:12;:10;:12::i;:::-;5006:7;5015:6;4983:8;:39::i;:::-;5036:4;5029:11;;4888:158;;;;:::o;17799:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;16480:74::-;;;;;;;;;;;;;:::o;16171:42::-;;;;;;;;;;;;;:::o;4335:101::-;4395:7;4418:12;;4411:19;;4335:101;:::o;17596:28::-;;;;:::o;17556:33::-;;;;:::o;22123:251::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22250:4:::1;22242;22237:1;22221:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22220:26;;;;:::i;:::-;22219:35;;;;:::i;:::-;22209:6;:45;;22193:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;22359:8;22349:6;:19;;;;:::i;:::-;22326:20;:42;;;;22123:251:::0;:::o;5052:453::-;5177:4;5190:36;5200:6;5208:9;5219:6;5190:9;:36::i;:::-;5239:24;5266:11;:19;5278:6;5266:19;;;;;;;;;;;;;;;:33;5286:12;:10;:12::i;:::-;5266:33;;;;;;;;;;;;;;;;5239:60;;5334:6;5314:16;:26;;5306:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5415:57;5424:6;5432:12;:10;:12::i;:::-;5465:6;5446:16;:25;5415:8;:57::i;:::-;5495:4;5488:11;;;5052:453;;;;;:::o;16256:53::-;16302:6;16256:53;:::o;4243:86::-;4300:5;4321:2;4314:9;;4243:86;:::o;5511:204::-;5598:4;5611:80;5620:12;:10;:12::i;:::-;5634:7;5680:10;5643:11;:25;5655:12;:10;:12::i;:::-;5643:25;;;;;;;;;;;;;;;:34;5669:7;5643:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5611:8;:80::i;:::-;5705:4;5698:11;;5511:204;;;;:::o;16220:29::-;;;;;;;;;;;;;:::o;16940:33::-;;;;;;;;;;;;;:::o;23597:119::-;23662:4;23682:19;:28;23702:7;23682:28;;;;;;;;;;;;;;;;;;;;;;;;;23675:35;;23597:119;;;:::o;17416:28::-;;;;:::o;17020:31::-;;;;;;;;;;;;;:::o;4442:120::-;4515:7;4538:9;:18;4548:7;4538:18;;;;;;;;;;;;;;;;4531:25;;4442:120;;;:::o;1584:97::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1645:30:::1;1672:1;1645:18;:30::i;:::-;1584:97::o:0;21334:110::-;21385:4;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21415:5:::1;21398:14;;:22;;;;;;;;;;;;;;;;;;21434:4;21427:11;;21334:110:::0;:::o;22618:147::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22755:4:::1;22713:31;:39;22745:6;22713:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22618:147:::0;;:::o;16755:30::-;;;;;;;;;;;;;:::o;17314:::-;;;;:::o;16642:74::-;;;;;;;;;;;;;:::o;21025:109::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21113:15:::1;21097:13;;:31;;;;;;;;;;;;;;;;;;21025:109:::0;:::o;29202:515::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29398:16:::1;29380:15;:34;;;;29434:11;29421:10;:24;;;;29464:10;29452:9;:22;;;;29527:9;;29514:10;;29496:15;;:28;;;;:::i;:::-;:40;;;;:::i;:::-;29481:12;:55;;;;29564:17;29545:16;:36;;;;29602:12;29588:11;:26;;;;29634:11;29621:10;:24;;;;29701:10;;29687:11;;29668:16;;:30;;;;:::i;:::-;:43;;;;:::i;:::-;29652:13;:59;;;;29202:515:::0;;;;;;:::o;21184:102::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21251:4:::1;21235:13;;:20;;;;;;;;;;;;;;;;;;21276:4;21262:11;;:18;;;;;;;;;;;;;;;;;;21184:102::o:0;1380:80::-;1425:7;1448:6;;;;;;;;;;;1441:13;;1380:80;:::o;16792:24::-;;;;;;;;;;;;;:::o;17451:31::-;;;;:::o;22857:94::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22938:7:::1;22924:11;;:21;;;;;;;;;;;;;;;;;;22857:94:::0;:::o;4140:97::-;4195:13;4224:7;4217:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4140:97;:::o;23139:264::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23259:13:::1;;;;;;;;;;;23251:21;;:4;:21;;::::0;23235:112:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23356:41;23385:4;23391:5;23356:28;:41::i;:::-;23139:264:::0;;:::o;17383:24::-;;;;:::o;17631:27::-;;;;:::o;17522:25::-;;;;:::o;16561:74::-;;;;;;;;;;;;;:::o;5721:392::-;5813:4;5830:24;5857:11;:25;5869:12;:10;:12::i;:::-;5857:25;;;;;;;;;;;;;;;:34;5883:7;5857:34;;;;;;;;;;;;;;;;5830:61;;5926:15;5906:16;:35;;5898:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6013:67;6022:12;:10;:12::i;:::-;6036:7;6064:15;6045:16;:34;6013:8;:67::i;:::-;6103:4;6096:11;;;5721:392;;;;:::o;4568:164::-;4653:4;4666:42;4676:12;:10;:12::i;:::-;4690:9;4701:6;4666:9;:42::i;:::-;4722:4;4715:11;;4568:164;;;;:::o;17489:26::-;;;;:::o;16399:74::-;;;;;;;;;;;;;:::o;18014:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16980:33::-;;;;;;;;;;;;;:::o;22957:176::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23069:8:::1;23038:19;:28;23058:7;23038:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23109:7;23093:34;;;23118:8;23093:34;;;;;;:::i;:::-;;;;;;;;22957:176:::0;;:::o;20823:198::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20897:35:::1;20954:17;20897:75;;20997:16;20979:15;;:34;;;;;;;;;;;;;;;;;;20890:131;20823:198:::0;:::o;22380:232::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22510:4:::1;22502;22497:1;22481:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22480:26;;;;:::i;:::-;22479:35;;;;:::i;:::-;22469:6;:45;;22453:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;22597:8;22587:6;:19;;;;:::i;:::-;22575:9;:31;;;;22380:232:::0;:::o;17234:40::-;;;;;;;;;;;;;:::o;16825:35::-;;;;:::o;21691:426::-;21780:4;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21847:6:::1;21842:1;21826:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21825:28;;;;:::i;:::-;21812:9;:41;;21796:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;21982:4;21977:1;21961:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21960:26;;;;:::i;:::-;21947:9;:39;;21931:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;22084:9;22063:18;:30;;;;22107:4;22100:11;;21691:426:::0;;;:::o;17283:27::-;;;;:::o;4738:144::-;4826:7;4849:11;:18;4861:5;4849:18;;;;;;;;;;;;;;;:27;4868:7;4849:27;;;;;;;;;;;;;;;;4842:34;;4738:144;;;;:::o;16867:33::-;;;;:::o;17351:25::-;;;;:::o;21501:124::-;21560:4;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21596:5:::1;21573:20;;:28;;;;;;;;;;;;;;;;;;21615:4;21608:11;;21501:124:::0;:::o;16318:74::-;;;;;;;;;;;;;:::o;1687:191::-;1515:12;:10;:12::i;:::-;1504:23;;:7;:5;:7::i;:::-;:23;;;1496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1792:1:::1;1772:22;;:8;:22;;::::0;1764:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1844:28;1863:8;1844:18;:28::i;:::-;1687:191:::0;:::o;16907:24::-;;;;:::o;757:91::-;809:7;832:10;825:17;;757:91;:::o;7756:352::-;7891:1;7874:19;;:5;:19;;;7866:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7968:1;7949:21;;:7;:21;;;7941:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8048:6;8018:11;:18;8030:5;8018:18;;;;;;;;;;;;;;;:27;8037:7;8018:27;;;;;;;;;;;;;;;:36;;;;8086:7;8070:32;;8079:5;8070:32;;;8095:6;8070:32;;;;;;:::i;:::-;;;;;;;;7756:352;;;:::o;23722:3841::-;23852:1;23836:18;;:4;:18;;;23828:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23925:1;23911:16;;:2;:16;;;23903:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23990:1;23980:6;:11;23976:77;;24002:28;24018:4;24024:2;24028:1;24002:15;:28::i;:::-;24039:7;;23976:77;24065:14;;;;;;;;;;;24061:1905;;;24112:7;:5;:7::i;:::-;24104:15;;:4;:15;;;;:41;;;;;24138:7;:5;:7::i;:::-;24132:13;;:2;:13;;;;24104:41;:70;;;;;24172:1;24158:16;;:2;:16;;;;24104:70;:104;;;;;24201:6;24187:21;;:2;:21;;;;24104:104;:126;;;;;24222:8;;;;;;;;;;;24221:9;24104:126;24090:1869;;;24256:13;;;;;;;;;;;24251:171;;24306:19;:25;24326:4;24306:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24335:19;:23;24355:2;24335:23;;;;;;;;;;;;;;;;;;;;;;;;;24306:52;24284:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;24251:171;24562:20;;;;;;;;;;;24558:485;;;24621:7;:5;:7::i;:::-;24615:13;;:2;:13;;;;:60;;;;;24659:15;;;;;;;;;;;24645:30;;:2;:30;;;;24615:60;:105;;;;;24706:13;;;;;;;;;;;24692:28;;:2;:28;;;;24615:105;24597:435;;;24830:12;24773:28;:39;24802:9;24773:39;;;;;;;;;;;;;;;;:69;24749:200;;;;;;;;;;;;:::i;:::-;;;;;;;;;25006:12;24964:28;:39;24993:9;24964:39;;;;;;;;;;;;;;;:54;;;;24597:435;24558:485;25091:25;:31;25117:4;25091:31;;;;;;;;;;;;;;;;;;;;;;;;;:82;;;;;25138:31;:35;25170:2;25138:35;;;;;;;;;;;;;;;;;;;;;;;;;25137:36;25091:82;25075:875;;;25230:20;;25220:6;:30;;25198:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;25394:9;;25377:13;25387:2;25377:9;:13::i;:::-;25368:6;:22;;;;:::i;:::-;:35;;25346:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;25075:875;;;25516:25;:29;25542:2;25516:29;;;;;;;;;;;;;;;;;;;;;;;;;:82;;;;;25561:31;:37;25593:4;25561:37;;;;;;;;;;;;;;;;;;;;;;;;;25560:38;25516:82;25500:450;;;25655:20;;25645:6;:30;;25623:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;25500:450;;;25782:31;:35;25814:2;25782:35;;;;;;;;;;;;;;;;;;;;;;;;;25777:173;;25880:9;;25863:13;25873:2;25863:9;:13::i;:::-;25854:6;:22;;;;:::i;:::-;:35;;25832:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;25777:173;25500:450;25075:875;24090:1869;24061:1905;25978:28;26009:24;26027:4;26009:9;:24::i;:::-;25978:55;;26046:12;26085:18;;26061:20;:42;;26046:57;;26124:7;:29;;;;;26142:11;;;;;;;;;;;26124:29;:49;;;;;26165:8;;;;;;;;;;;26164:9;26124:49;:92;;;;;26185:25;:31;26211:4;26185:31;;;;;;;;;;;;;;;;;;;;;;;;;26184:32;26124:92;:129;;;;;26228:19;:25;26248:4;26228:25;;;;;;;;;;;;;;;;;;;;;;;;;26227:26;26124:129;:164;;;;;26265:19;:23;26285:2;26265:23;;;;;;;;;;;;;;;;;;;;;;;;;26264:24;26124:164;26112:264;;;26316:4;26305:8;;:15;;;;;;;;;;;;;;;;;;26331:10;:8;:10::i;:::-;26363:5;26352:8;;:16;;;;;;;;;;;;;;;;;;26112:264;26388:12;26404:8;;;;;;;;;;;26403:9;26388:24;;26506:19;:25;26526:4;26506:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26535:19;:23;26555:2;26535:23;;;;;;;;;;;;;;;;;;;;;;;;;26506:52;26502:90;;;26579:5;26569:15;;26502:90;26604:12;26701:7;26697:819;;;26741:25;:29;26767:2;26741:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;26790:1;26774:13;;:17;26741:50;26737:660;;;26811:34;26841:3;26811:25;26822:13;;26811:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26804:41;;26896:13;;26881:11;;26874:4;:18;;;;:::i;:::-;26873:36;;;;:::i;:::-;26856:13;;:53;;;;;;;:::i;:::-;;;;;;;;26958:13;;26944:10;;26937:4;:17;;;;:::i;:::-;26936:35;;;;:::i;:::-;26920:12;;:51;;;;;;;:::i;:::-;;;;;;;;27032:13;;27012:16;;27005:4;:23;;;;:::i;:::-;27004:41;;;;:::i;:::-;26982:18;;:63;;;;;;;:::i;:::-;;;;;;;;26737:660;;;27089:25;:31;27115:4;27089:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;27139:1;27124:12;;:16;27089:51;27085:312;;;27160:33;27189:3;27160:24;27171:12;;27160:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27153:40;;27243:12;;27229:10;;27222:4;:17;;;;:::i;:::-;27221:34;;;;:::i;:::-;27204:13;;:51;;;;;;;:::i;:::-;;;;;;;;27303:12;;27290:9;;27283:4;:16;;;;:::i;:::-;27282:33;;;;:::i;:::-;27266:12;;:49;;;;;;;:::i;:::-;;;;;;;;27375:12;;27356:15;;27349:4;:22;;;;:::i;:::-;27348:39;;;;:::i;:::-;27326:18;;:61;;;;;;;:::i;:::-;;;;;;;;27085:312;26737:660;27418:1;27411:4;:8;27407:77;;;27432:42;27448:4;27462;27469;27432:15;:42::i;:::-;27407:77;27504:4;27494:14;;;;;:::i;:::-;;;26697:819;27524:33;27540:4;27546:2;27550:6;27524:15;:33::i;:::-;23821:3742;;;;23722:3841;;;;:::o;1884:185::-;1958:16;1977:6;;;;;;;;;;;1958:25;;1999:8;1990:6;;:17;;;;;;;;;;;;;;;;;;2054:8;2023:40;;2044:8;2023:40;;;;;;;;;;;;1947:122;1884:185;:::o;23409:182::-;23522:5;23488:25;:31;23514:4;23488:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23579:5;23545:40;;23573:4;23545:40;;;;;;;;;;;;23409:182;;:::o;6119:683::-;6259:1;6241:20;;:6;:20;;;6233:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6339:1;6318:23;;:9;:23;;;6310:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6390:47;6411:6;6419:9;6430:6;6390:20;:47::i;:::-;6450:21;6474:9;:17;6484:6;6474:17;;;;;;;;;;;;;;;;6450:41;;6523:6;6506:13;:23;;6498:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6638:6;6622:13;:22;6602:9;:17;6612:6;6602:17;;;;;;;;;;;;;;;:42;;;;6682:6;6658:9;:20;6668:9;6658:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6723:9;6706:35;;6715:6;6706:35;;;6734:6;6706:35;;;;;;:::i;:::-;;;;;;;;6750:46;6770:6;6778:9;6789:6;6750:19;:46::i;:::-;6226:576;6119:683;;;:::o;29725:937::-;29760:23;29786:24;29804:4;29786:9;:24::i;:::-;29760:50;;29817:25;29882:12;;29861:18;;29845:13;;:34;;;;:::i;:::-;:49;;;;:::i;:::-;29817:77;;29901:12;29945:1;29926:15;:20;:46;;;;29971:1;29950:17;:22;29926:46;29922:75;;;29983:7;;;;;29922:75;30048:2;30027:18;;:23;;;;:::i;:::-;30009:15;:41;30005:105;;;30100:2;30079:18;;:23;;;;:::i;:::-;30061:41;;30005:105;30118:25;30146:21;30118:49;;30176:33;30193:15;30176:16;:33::i;:::-;30218:18;30239:44;30265:17;30239:21;:25;;:44;;;;:::i;:::-;30218:65;;30292:23;30318:57;30357:17;30318:34;30333:18;;30318:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;30292:83;;30382:17;30402:51;30435:17;30402:28;30417:12;;30402:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;30382:71;;30484:9;;;;;;;;;;;30476:23;;30508:9;30476:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30462:62;;;;;30553:15;;;;;;;;;;;30545:29;;30601:1;30583:15;:19;;;;:::i;:::-;30545:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30531:78;;;;;30618:38;30634:21;30618:15;:38::i;:::-;29753:909;;;;;;;29725:937;:::o;9953:91::-;10010:7;10037:1;10033;:5;;;;:::i;:::-;10026:12;;9953:91;;;;:::o;10050:::-;10107:7;10134:1;10130;:5;;;;:::i;:::-;10123:12;;10050:91;;;;:::o;8114:112::-;;;;:::o;8232:111::-;;;;:::o;27569:525::-;27687:21;27725:1;27711:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27687:40;;27752:4;27734;27739:1;27734:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27774:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27764:4;27769:1;27764:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27805:62;27822:4;27837:15;;;;;;;;;;;27855:11;27805:8;:62::i;:::-;27898:15;;;;;;;;;;;:66;;;27973:11;27993:1;28031:4;28052;28066:15;27898:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27624:470;27569:525;:::o;9856:91::-;9913:7;9940:1;9936;:5;;;;:::i;:::-;9929:12;;9856:91;;;;:::o;28100:630::-;28215:21;28253:1;28239:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28215:40;;28262:23;28302:1;28288:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28262:42;;28323:5;;;;;;;;;;;28311:6;28318:1;28311:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;28347:5;;;;;;;;;;;28335:6;28342:1;28335:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;28371:5;;;;;;;;;;;28359:6;28366:1;28359:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;28395:5;;;;;;;;;;;28383:6;28390:1;28383:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;28419:5;;;;;;;;;;;28407:6;28414:1;28407:9;;;;;;;;:::i;:::-;;;;;;;:17;;;;;;;;;;;28433:11;28462:1;28447:12;:16;;;;:::i;:::-;28433:30;;28482:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28472:4;28477:1;28472:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28521:6;28528:3;28521:11;;;;;;;;:::i;:::-;;;;;;;;28511:4;28516:1;28511:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;28563:15;;;;;;;;;;;:66;;;28638:9;28659:1;28669:4;16302:6;28702:15;28563:161;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28152:578;;;28100:630;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:118::-;5246:24;5264:5;5246:24;:::i;:::-;5241:3;5234:37;5159:118;;:::o;5283:222::-;5376:4;5414:2;5403:9;5399:18;5391:26;;5427:71;5495:1;5484:9;5480:17;5471:6;5427:71;:::i;:::-;5283:222;;;;:::o;5511:329::-;5570:6;5619:2;5607:9;5598:7;5594:23;5590:32;5587:119;;;5625:79;;:::i;:::-;5587:119;5745:1;5770:53;5815:7;5806:6;5795:9;5791:22;5770:53;:::i;:::-;5760:63;;5716:117;5511:329;;;;:::o;5846:619::-;5923:6;5931;5939;5988:2;5976:9;5967:7;5963:23;5959:32;5956:119;;;5994:79;;:::i;:::-;5956:119;6114:1;6139:53;6184:7;6175:6;6164:9;6160:22;6139:53;:::i;:::-;6129:63;;6085:117;6241:2;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6212:118;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;5846:619;;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:1057::-;7740:6;7748;7756;7764;7772;7780;7829:3;7817:9;7808:7;7804:23;7800:33;7797:120;;;7836:79;;:::i;:::-;7797:120;7956:1;7981:53;8026:7;8017:6;8006:9;8002:22;7981:53;:::i;:::-;7971:63;;7927:117;8083:2;8109:53;8154:7;8145:6;8134:9;8130:22;8109:53;:::i;:::-;8099:63;;8054:118;8211:2;8237:53;8282:7;8273:6;8262:9;8258:22;8237:53;:::i;:::-;8227:63;;8182:118;8339:2;8365:53;8410:7;8401:6;8390:9;8386:22;8365:53;:::i;:::-;8355:63;;8310:118;8467:3;8494:53;8539:7;8530:6;8519:9;8515:22;8494:53;:::i;:::-;8484:63;;8438:119;8596:3;8623:53;8668:7;8659:6;8648:9;8644:22;8623:53;:::i;:::-;8613:63;;8567:119;7636:1057;;;;;;;;:::o;8699:323::-;8755:6;8804:2;8792:9;8783:7;8779:23;8775:32;8772:119;;;8810:79;;:::i;:::-;8772:119;8930:1;8955:50;8997:7;8988:6;8977:9;8973:22;8955:50;:::i;:::-;8945:60;;8901:114;8699:323;;;;:::o;9028:474::-;9096:6;9104;9153:2;9141:9;9132:7;9128:23;9124:32;9121:119;;;9159:79;;:::i;:::-;9121:119;9279:1;9304:53;9349:7;9340:6;9329:9;9325:22;9304:53;:::i;:::-;9294:63;;9250:117;9406:2;9432:53;9477:7;9468:6;9457:9;9453:22;9432:53;:::i;:::-;9422:63;;9377:118;9028:474;;;;;:::o;9508:180::-;9556:77;9553:1;9546:88;9653:4;9650:1;9643:15;9677:4;9674:1;9667:15;9694:320;9738:6;9775:1;9769:4;9765:12;9755:22;;9822:1;9816:4;9812:12;9843:18;9833:81;;9899:4;9891:6;9887:17;9877:27;;9833:81;9961:2;9953:6;9950:14;9930:18;9927:38;9924:84;;9980:18;;:::i;:::-;9924:84;9745:269;9694:320;;;:::o;10020:182::-;10160:34;10156:1;10148:6;10144:14;10137:58;10020:182;:::o;10208:366::-;10350:3;10371:67;10435:2;10430:3;10371:67;:::i;:::-;10364:74;;10447:93;10536:3;10447:93;:::i;:::-;10565:2;10560:3;10556:12;10549:19;;10208:366;;;:::o;10580:419::-;10746:4;10784:2;10773:9;10769:18;10761:26;;10833:9;10827:4;10823:20;10819:1;10808:9;10804:17;10797:47;10861:131;10987:4;10861:131;:::i;:::-;10853:139;;10580:419;;;:::o;11005:180::-;11053:77;11050:1;11043:88;11150:4;11147:1;11140:15;11174:4;11171:1;11164:15;11191:348;11231:7;11254:20;11272:1;11254:20;:::i;:::-;11249:25;;11288:20;11306:1;11288:20;:::i;:::-;11283:25;;11476:1;11408:66;11404:74;11401:1;11398:81;11393:1;11386:9;11379:17;11375:105;11372:131;;;11483:18;;:::i;:::-;11372:131;11531:1;11528;11524:9;11513:20;;11191:348;;;;:::o;11545:180::-;11593:77;11590:1;11583:88;11690:4;11687:1;11680:15;11714:4;11711:1;11704:15;11731:185;11771:1;11788:20;11806:1;11788:20;:::i;:::-;11783:25;;11822:20;11840:1;11822:20;:::i;:::-;11817:25;;11861:1;11851:35;;11866:18;;:::i;:::-;11851:35;11908:1;11905;11901:9;11896:14;;11731:185;;;;:::o;11922:234::-;12062:34;12058:1;12050:6;12046:14;12039:58;12131:17;12126:2;12118:6;12114:15;12107:42;11922:234;:::o;12162:366::-;12304:3;12325:67;12389:2;12384:3;12325:67;:::i;:::-;12318:74;;12401:93;12490:3;12401:93;:::i;:::-;12519:2;12514:3;12510:12;12503:19;;12162:366;;;:::o;12534:419::-;12700:4;12738:2;12727:9;12723:18;12715:26;;12787:9;12781:4;12777:20;12773:1;12762:9;12758:17;12751:47;12815:131;12941:4;12815:131;:::i;:::-;12807:139;;12534:419;;;:::o;12959:227::-;13099:34;13095:1;13087:6;13083:14;13076:58;13168:10;13163:2;13155:6;13151:15;13144:35;12959:227;:::o;13192:366::-;13334:3;13355:67;13419:2;13414:3;13355:67;:::i;:::-;13348:74;;13431:93;13520:3;13431:93;:::i;:::-;13549:2;13544:3;13540:12;13533:19;;13192:366;;;:::o;13564:419::-;13730:4;13768:2;13757:9;13753:18;13745:26;;13817:9;13811:4;13807:20;13803:1;13792:9;13788:17;13781:47;13845:131;13971:4;13845:131;:::i;:::-;13837:139;;13564:419;;;:::o;13989:305::-;14029:3;14048:20;14066:1;14048:20;:::i;:::-;14043:25;;14082:20;14100:1;14082:20;:::i;:::-;14077:25;;14236:1;14168:66;14164:74;14161:1;14158:81;14155:107;;;14242:18;;:::i;:::-;14155:107;14286:1;14283;14279:9;14272:16;;13989:305;;;;:::o;14300:244::-;14440:34;14436:1;14428:6;14424:14;14417:58;14509:27;14504:2;14496:6;14492:15;14485:52;14300:244;:::o;14550:366::-;14692:3;14713:67;14777:2;14772:3;14713:67;:::i;:::-;14706:74;;14789:93;14878:3;14789:93;:::i;:::-;14907:2;14902:3;14898:12;14891:19;;14550:366;;;:::o;14922:419::-;15088:4;15126:2;15115:9;15111:18;15103:26;;15175:9;15169:4;15165:20;15161:1;15150:9;15146:17;15139:47;15203:131;15329:4;15203:131;:::i;:::-;15195:139;;14922:419;;;:::o;15347:224::-;15487:34;15483:1;15475:6;15471:14;15464:58;15556:7;15551:2;15543:6;15539:15;15532:32;15347:224;:::o;15577:366::-;15719:3;15740:67;15804:2;15799:3;15740:67;:::i;:::-;15733:74;;15816:93;15905:3;15816:93;:::i;:::-;15934:2;15929:3;15925:12;15918:19;;15577:366;;;:::o;15949:419::-;16115:4;16153:2;16142:9;16138:18;16130:26;;16202:9;16196:4;16192:20;16188:1;16177:9;16173:17;16166:47;16230:131;16356:4;16230:131;:::i;:::-;16222:139;;15949:419;;;:::o;16374:223::-;16514:34;16510:1;16502:6;16498:14;16491:58;16583:6;16578:2;16570:6;16566:15;16559:31;16374:223;:::o;16603:366::-;16745:3;16766:67;16830:2;16825:3;16766:67;:::i;:::-;16759:74;;16842:93;16931:3;16842:93;:::i;:::-;16960:2;16955:3;16951:12;16944:19;;16603:366;;;:::o;16975:419::-;17141:4;17179:2;17168:9;17164:18;17156:26;;17228:9;17222:4;17218:20;17214:1;17203:9;17199:17;17192:47;17256:131;17382:4;17256:131;:::i;:::-;17248:139;;16975:419;;;:::o;17400:240::-;17540:34;17536:1;17528:6;17524:14;17517:58;17609:23;17604:2;17596:6;17592:15;17585:48;17400:240;:::o;17646:366::-;17788:3;17809:67;17873:2;17868:3;17809:67;:::i;:::-;17802:74;;17885:93;17974:3;17885:93;:::i;:::-;18003:2;17998:3;17994:12;17987:19;;17646:366;;;:::o;18018:419::-;18184:4;18222:2;18211:9;18207:18;18199:26;;18271:9;18265:4;18261:20;18257:1;18246:9;18242:17;18235:47;18299:131;18425:4;18299:131;:::i;:::-;18291:139;;18018:419;;;:::o;18443:239::-;18583:34;18579:1;18571:6;18567:14;18560:58;18652:22;18647:2;18639:6;18635:15;18628:47;18443:239;:::o;18688:366::-;18830:3;18851:67;18915:2;18910:3;18851:67;:::i;:::-;18844:74;;18927:93;19016:3;18927:93;:::i;:::-;19045:2;19040:3;19036:12;19029:19;;18688:366;;;:::o;19060:419::-;19226:4;19264:2;19253:9;19249:18;19241:26;;19313:9;19307:4;19303:20;19299:1;19288:9;19284:17;19277:47;19341:131;19467:4;19341:131;:::i;:::-;19333:139;;19060:419;;;:::o;19485:225::-;19625:34;19621:1;19613:6;19609:14;19602:58;19694:8;19689:2;19681:6;19677:15;19670:33;19485:225;:::o;19716:366::-;19858:3;19879:67;19943:2;19938:3;19879:67;:::i;:::-;19872:74;;19955:93;20044:3;19955:93;:::i;:::-;20073:2;20068:3;20064:12;20057:19;;19716:366;;;:::o;20088:419::-;20254:4;20292:2;20281:9;20277:18;20269:26;;20341:9;20335:4;20331:20;20327:1;20316:9;20312:17;20305:47;20369:131;20495:4;20369:131;:::i;:::-;20361:139;;20088:419;;;:::o;20513:223::-;20653:34;20649:1;20641:6;20637:14;20630:58;20722:6;20717:2;20709:6;20705:15;20698:31;20513:223;:::o;20742:366::-;20884:3;20905:67;20969:2;20964:3;20905:67;:::i;:::-;20898:74;;20981:93;21070:3;20981:93;:::i;:::-;21099:2;21094:3;21090:12;21083:19;;20742:366;;;:::o;21114:419::-;21280:4;21318:2;21307:9;21303:18;21295:26;;21367:9;21361:4;21357:20;21353:1;21342:9;21338:17;21331:47;21395:131;21521:4;21395:131;:::i;:::-;21387:139;;21114:419;;;:::o;21539:221::-;21679:34;21675:1;21667:6;21663:14;21656:58;21748:4;21743:2;21735:6;21731:15;21724:29;21539:221;:::o;21766:366::-;21908:3;21929:67;21993:2;21988:3;21929:67;:::i;:::-;21922:74;;22005:93;22094:3;22005:93;:::i;:::-;22123:2;22118:3;22114:12;22107:19;;21766:366;;;:::o;22138:419::-;22304:4;22342:2;22331:9;22327:18;22319:26;;22391:9;22385:4;22381:20;22377:1;22366:9;22362:17;22355:47;22419:131;22545:4;22419:131;:::i;:::-;22411:139;;22138:419;;;:::o;22563:224::-;22703:34;22699:1;22691:6;22687:14;22680:58;22772:7;22767:2;22759:6;22755:15;22748:32;22563:224;:::o;22793:366::-;22935:3;22956:67;23020:2;23015:3;22956:67;:::i;:::-;22949:74;;23032:93;23121:3;23032:93;:::i;:::-;23150:2;23145:3;23141:12;23134:19;;22793:366;;;:::o;23165:419::-;23331:4;23369:2;23358:9;23354:18;23346:26;;23418:9;23412:4;23408:20;23404:1;23393:9;23389:17;23382:47;23446:131;23572:4;23446:131;:::i;:::-;23438:139;;23165:419;;;:::o;23590:222::-;23730:34;23726:1;23718:6;23714:14;23707:58;23799:5;23794:2;23786:6;23782:15;23775:30;23590:222;:::o;23818:366::-;23960:3;23981:67;24045:2;24040:3;23981:67;:::i;:::-;23974:74;;24057:93;24146:3;24057:93;:::i;:::-;24175:2;24170:3;24166:12;24159:19;;23818:366;;;:::o;24190:419::-;24356:4;24394:2;24383:9;24379:18;24371:26;;24443:9;24437:4;24433:20;24429:1;24418:9;24414:17;24407:47;24471:131;24597:4;24471:131;:::i;:::-;24463:139;;24190:419;;;:::o;24615:172::-;24755:24;24751:1;24743:6;24739:14;24732:48;24615:172;:::o;24793:366::-;24935:3;24956:67;25020:2;25015:3;24956:67;:::i;:::-;24949:74;;25032:93;25121:3;25032:93;:::i;:::-;25150:2;25145:3;25141:12;25134:19;;24793:366;;;:::o;25165:419::-;25331:4;25369:2;25358:9;25354:18;25346:26;;25418:9;25412:4;25408:20;25404:1;25393:9;25389:17;25382:47;25446:131;25572:4;25446:131;:::i;:::-;25438:139;;25165:419;;;:::o;25590:297::-;25730:34;25726:1;25718:6;25714:14;25707:58;25799:34;25794:2;25786:6;25782:15;25775:59;25868:11;25863:2;25855:6;25851:15;25844:36;25590:297;:::o;25893:366::-;26035:3;26056:67;26120:2;26115:3;26056:67;:::i;:::-;26049:74;;26132:93;26221:3;26132:93;:::i;:::-;26250:2;26245:3;26241:12;26234:19;;25893:366;;;:::o;26265:419::-;26431:4;26469:2;26458:9;26454:18;26446:26;;26518:9;26512:4;26508:20;26504:1;26493:9;26489:17;26482:47;26546:131;26672:4;26546:131;:::i;:::-;26538:139;;26265:419;;;:::o;26690:240::-;26830:34;26826:1;26818:6;26814:14;26807:58;26899:23;26894:2;26886:6;26882:15;26875:48;26690:240;:::o;26936:366::-;27078:3;27099:67;27163:2;27158:3;27099:67;:::i;:::-;27092:74;;27175:93;27264:3;27175:93;:::i;:::-;27293:2;27288:3;27284:12;27277:19;;26936:366;;;:::o;27308:419::-;27474:4;27512:2;27501:9;27497:18;27489:26;;27561:9;27555:4;27551:20;27547:1;27536:9;27532:17;27525:47;27589:131;27715:4;27589:131;:::i;:::-;27581:139;;27308:419;;;:::o;27733:169::-;27873:21;27869:1;27861:6;27857:14;27850:45;27733:169;:::o;27908:366::-;28050:3;28071:67;28135:2;28130:3;28071:67;:::i;:::-;28064:74;;28147:93;28236:3;28147:93;:::i;:::-;28265:2;28260:3;28256:12;28249:19;;27908:366;;;:::o;28280:419::-;28446:4;28484:2;28473:9;28469:18;28461:26;;28533:9;28527:4;28523:20;28519:1;28508:9;28504:17;28497:47;28561:131;28687:4;28561:131;:::i;:::-;28553:139;;28280:419;;;:::o;28705:241::-;28845:34;28841:1;28833:6;28829:14;28822:58;28914:24;28909:2;28901:6;28897:15;28890:49;28705:241;:::o;28952:366::-;29094:3;29115:67;29179:2;29174:3;29115:67;:::i;:::-;29108:74;;29191:93;29280:3;29191:93;:::i;:::-;29309:2;29304:3;29300:12;29293:19;;28952:366;;;:::o;29324:419::-;29490:4;29528:2;29517:9;29513:18;29505:26;;29577:9;29571:4;29567:20;29563:1;29552:9;29548:17;29541:47;29605:131;29731:4;29605:131;:::i;:::-;29597:139;;29324:419;;;:::o;29749:191::-;29789:4;29809:20;29827:1;29809:20;:::i;:::-;29804:25;;29843:20;29861:1;29843:20;:::i;:::-;29838:25;;29882:1;29879;29876:8;29873:34;;;29887:18;;:::i;:::-;29873:34;29932:1;29929;29925:9;29917:17;;29749:191;;;;:::o;29946:225::-;30086:34;30082:1;30074:6;30070:14;30063:58;30155:8;30150:2;30142:6;30138:15;30131:33;29946:225;:::o;30177:366::-;30319:3;30340:67;30404:2;30399:3;30340:67;:::i;:::-;30333:74;;30416:93;30505:3;30416:93;:::i;:::-;30534:2;30529:3;30525:12;30518:19;;30177:366;;;:::o;30549:419::-;30715:4;30753:2;30742:9;30738:18;30730:26;;30802:9;30796:4;30792:20;30788:1;30777:9;30773:17;30766:47;30830:131;30956:4;30830:131;:::i;:::-;30822:139;;30549:419;;;:::o;30974:147::-;31075:11;31112:3;31097:18;;30974:147;;;;:::o;31127:114::-;;:::o;31247:398::-;31406:3;31427:83;31508:1;31503:3;31427:83;:::i;:::-;31420:90;;31519:93;31608:3;31519:93;:::i;:::-;31637:1;31632:3;31628:11;31621:18;;31247:398;;;:::o;31651:379::-;31835:3;31857:147;32000:3;31857:147;:::i;:::-;31850:154;;32021:3;32014:10;;31651:379;;;:::o;32036:180::-;32084:77;32081:1;32074:88;32181:4;32178:1;32171:15;32205:4;32202:1;32195:15;32222:180;32270:77;32267:1;32260:88;32367:4;32364:1;32357:15;32391:4;32388:1;32381:15;32408:143;32465:5;32496:6;32490:13;32481:22;;32512:33;32539:5;32512:33;:::i;:::-;32408:143;;;;:::o;32557:351::-;32627:6;32676:2;32664:9;32655:7;32651:23;32647:32;32644:119;;;32682:79;;:::i;:::-;32644:119;32802:1;32827:64;32883:7;32874:6;32863:9;32859:22;32827:64;:::i;:::-;32817:74;;32773:128;32557:351;;;;:::o;32914:85::-;32959:7;32988:5;32977:16;;32914:85;;;:::o;33005:158::-;33063:9;33096:61;33114:42;33123:32;33149:5;33123:32;:::i;:::-;33114:42;:::i;:::-;33096:61;:::i;:::-;33083:74;;33005:158;;;:::o;33169:147::-;33264:45;33303:5;33264:45;:::i;:::-;33259:3;33252:58;33169:147;;:::o;33322:114::-;33389:6;33423:5;33417:12;33407:22;;33322:114;;;:::o;33442:184::-;33541:11;33575:6;33570:3;33563:19;33615:4;33610:3;33606:14;33591:29;;33442:184;;;;:::o;33632:132::-;33699:4;33722:3;33714:11;;33752:4;33747:3;33743:14;33735:22;;33632:132;;;:::o;33770:108::-;33847:24;33865:5;33847:24;:::i;:::-;33842:3;33835:37;33770:108;;:::o;33884:179::-;33953:10;33974:46;34016:3;34008:6;33974:46;:::i;:::-;34052:4;34047:3;34043:14;34029:28;;33884:179;;;;:::o;34069:113::-;34139:4;34171;34166:3;34162:14;34154:22;;34069:113;;;:::o;34218:732::-;34337:3;34366:54;34414:5;34366:54;:::i;:::-;34436:86;34515:6;34510:3;34436:86;:::i;:::-;34429:93;;34546:56;34596:5;34546:56;:::i;:::-;34625:7;34656:1;34641:284;34666:6;34663:1;34660:13;34641:284;;;34742:6;34736:13;34769:63;34828:3;34813:13;34769:63;:::i;:::-;34762:70;;34855:60;34908:6;34855:60;:::i;:::-;34845:70;;34701:224;34688:1;34685;34681:9;34676:14;;34641:284;;;34645:14;34941:3;34934:10;;34342:608;;;34218:732;;;;:::o;34956:831::-;35219:4;35257:3;35246:9;35242:19;35234:27;;35271:71;35339:1;35328:9;35324:17;35315:6;35271:71;:::i;:::-;35352:80;35428:2;35417:9;35413:18;35404:6;35352:80;:::i;:::-;35479:9;35473:4;35469:20;35464:2;35453:9;35449:18;35442:48;35507:108;35610:4;35601:6;35507:108;:::i;:::-;35499:116;;35625:72;35693:2;35682:9;35678:18;35669:6;35625:72;:::i;:::-;35707:73;35775:3;35764:9;35760:19;35751:6;35707:73;:::i;:::-;34956:831;;;;;;;;:::o;35793:176::-;35825:1;35842:20;35860:1;35842:20;:::i;:::-;35837:25;;35876:20;35894:1;35876:20;:::i;:::-;35871:25;;35915:1;35905:35;;35920:18;;:::i;:::-;35905:35;35961:1;35958;35954:9;35949:14;;35793:176;;;;:::o;35975:720::-;36210:4;36248:3;36237:9;36233:19;36225:27;;36262:79;36338:1;36327:9;36323:17;36314:6;36262:79;:::i;:::-;36388:9;36382:4;36378:20;36373:2;36362:9;36358:18;36351:48;36416:108;36519:4;36510:6;36416:108;:::i;:::-;36408:116;;36534:72;36602:2;36591:9;36587:18;36578:6;36534:72;:::i;:::-;36616;36684:2;36673:9;36669:18;36660:6;36616:72;:::i;:::-;35975:720;;;;;;;:::o

Swarm Source

ipfs://b3434682bbef40c404b6d3fee10898f1a0f714e49dafcc844dba383ad14fb867
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.