CRO Price: $0.18 (-4.74%)

Contract

0x6ad9893eB92F4916f703f660410a454f6Acc3FE1

Overview

CRO Balance

Cronos Chain LogoCronos Chain LogoCronos Chain Logo0 CRO

CRO Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve171648532024-12-12 22:58:173 hrs ago1734044297IN
0x6ad9893e...f6Acc3FE1
0 CRO0.238466055,050
Approve171648372024-12-12 22:56:473 hrs ago1734044207IN
0x6ad9893e...f6Acc3FE1
0 CRO0.238526655,050
Approve171648162024-12-12 22:54:493 hrs ago1734044089IN
0x6ad9893e...f6Acc3FE1
0 CRO0.274305645,807.5
Approve171557132024-12-12 8:34:5817 hrs ago1733992498IN
0x6ad9893e...f6Acc3FE1
0 CRO0.150733065,048.5
Transfer171446892024-12-11 14:37:5635 hrs ago1733927876IN
0x6ad9893e...f6Acc3FE1
0 CRO3.16776725,200
Claim171433862024-12-11 12:31:2237 hrs ago1733920282IN
0x6ad9893e...f6Acc3FE1
0 CRO0.29858635,050
Claim171311282024-12-10 16:44:542 days ago1733849094IN
0x6ad9893e...f6Acc3FE1
0 CRO0.201681855,050
Claim171311152024-12-10 16:43:342 days ago1733849014IN
0x6ad9893e...f6Acc3FE1
0 CRO0.201681855,050
Claim171311122024-12-10 16:43:172 days ago1733848997IN
0x6ad9893e...f6Acc3FE1
0 CRO0.29858635,050
Exclude From Fee...171235682024-12-10 4:32:302 days ago1733805150IN
0x6ad9893e...f6Acc3FE1
0 CRO0.245427775,048.5
Set Exclude From...171235632024-12-10 4:32:022 days ago1733805122IN
0x6ad9893e...f6Acc3FE1
0 CRO0.236496985,048.5
Transfer171207352024-12-09 23:58:213 days ago1733788701IN
0x6ad9893e...f6Acc3FE1
0 CRO3.16776725,200
Approve171203292024-12-09 23:19:093 days ago1733786349IN
0x6ad9893e...f6Acc3FE1
0 CRO0.238466055,050
Approve171202822024-12-09 23:14:333 days ago1733786073IN
0x6ad9893e...f6Acc3FE1
0 CRO0.238526655,050
Claim171177722024-12-09 19:10:183 days ago1733771418IN
0x6ad9893e...f6Acc3FE1
0 CRO0.29858635,050
Approve171065842024-12-09 1:09:444 days ago1733706584IN
0x6ad9893e...f6Acc3FE1
0 CRO0.238466055,050
Approve171017432024-12-08 17:22:594 days ago1733678579IN
0x6ad9893e...f6Acc3FE1
0 CRO0.238466055,050
Approve170907832024-12-07 23:40:115 days ago1733614811IN
0x6ad9893e...f6Acc3FE1
0 CRO0.150232455,050
Approve170859412024-12-07 15:50:025 days ago1733586602IN
0x6ad9893e...f6Acc3FE1
0 CRO0.237001835,048.5
Approve170784642024-12-07 3:45:195 days ago1733543119IN
0x6ad9893e...f6Acc3FE1
0 CRO0.238526655,050
Claim170769142024-12-07 1:15:066 days ago1733534106IN
0x6ad9893e...f6Acc3FE1
0 CRO0.29858635,050
Transfer170759402024-12-06 23:40:456 days ago1733528445IN
0x6ad9893e...f6Acc3FE1
0 CRO0.847572475,048.5
Transfer170759312024-12-06 23:39:526 days ago1733528392IN
0x6ad9893e...f6Acc3FE1
0 CRO0.847572475,048.5
Transfer170759262024-12-06 23:39:236 days ago1733528363IN
0x6ad9893e...f6Acc3FE1
0 CRO1.919379115,048.5
Claim170678562024-12-06 10:36:526 days ago1733481412IN
0x6ad9893e...f6Acc3FE1
0 CRO0.29858635,050
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
171647642024-12-12 22:49:533 hrs ago1734043793
0x6ad9893e...f6Acc3FE1
12.1907615 CRO
171647642024-12-12 22:49:533 hrs ago1734043793
0x6ad9893e...f6Acc3FE1
6.09538075 CRO
171647642024-12-12 22:49:533 hrs ago1734043793
0x6ad9893e...f6Acc3FE1
6.09538075 CRO
171647642024-12-12 22:49:533 hrs ago1734043793
0x6ad9893e...f6Acc3FE1
24.38152301 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
12.20457925 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
6.10228962 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
6.10228962 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
24.4091585 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
12.50509284 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
6.25254642 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
6.25254642 CRO
171641962024-12-12 21:56:174 hrs ago1734040577
0x6ad9893e...f6Acc3FE1
25.01018569 CRO
171641772024-12-12 21:54:304 hrs ago1734040470
0x6ad9893e...f6Acc3FE1
13.05802746 CRO
171641772024-12-12 21:54:304 hrs ago1734040470
0x6ad9893e...f6Acc3FE1
6.52901373 CRO
171641772024-12-12 21:54:304 hrs ago1734040470
0x6ad9893e...f6Acc3FE1
6.52901373 CRO
171641772024-12-12 21:54:304 hrs ago1734040470
0x6ad9893e...f6Acc3FE1
26.11605493 CRO
171641072024-12-12 21:47:554 hrs ago1734040075
0x6ad9893e...f6Acc3FE1
13.45262054 CRO
171641072024-12-12 21:47:554 hrs ago1734040075
0x6ad9893e...f6Acc3FE1
6.72631027 CRO
171641072024-12-12 21:47:554 hrs ago1734040075
0x6ad9893e...f6Acc3FE1
6.72631027 CRO
171641072024-12-12 21:47:554 hrs ago1734040075
0x6ad9893e...f6Acc3FE1
26.90524108 CRO
171509412024-12-12 0:43:4325 hrs ago1733964223
0x6ad9893e...f6Acc3FE1
13.71834317 CRO
171509412024-12-12 0:43:4325 hrs ago1733964223
0x6ad9893e...f6Acc3FE1
6.85917158 CRO
171509412024-12-12 0:43:4325 hrs ago1733964223
0x6ad9893e...f6Acc3FE1
6.85917158 CRO
171509412024-12-12 0:43:4325 hrs ago1733964223
0x6ad9893e...f6Acc3FE1
27.43668634 CRO
171455242024-12-11 15:58:5534 hrs ago1733932735
0x6ad9893e...f6Acc3FE1
14.12159257 CRO
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RETRIBUTION

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2024-09-16
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}


library SignedSafeMath {

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

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


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

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


library SafeMath {


    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;
        }
    }
}


library SafeCast {

    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }


    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }


    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }


    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }


    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }


    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }


    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }


    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }


    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }


    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }


    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }


    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}


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

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


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);
}


interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}


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 {}

}


abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _setOwner(_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 {
        _setOwner(address(0));
    }

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library IterableMapping {

    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key) public view returns (int) {
        if(!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}


interface DividendPayingTokenOptionalInterface {
  function withdrawableDividendOf(address _owner) external view returns(uint256);
  function withdrawnDividendOf(address _owner) external view returns(uint256);
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}



interface DividendPayingTokenInterface {
  function dividendOf(address _owner) external view returns(uint256);
  function distributeDividends() external payable;
  function withdrawDividend() external;
  event DividendsDistributed(address indexed from, uint256 weiAmount);
  event DividendWithdrawn(address indexed to, uint256 weiAmount);
}


contract DividendPayingToken is ERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
  using SafeMath for uint256;
  using SignedSafeMath for int256;
  using SafeCast for uint256;
  using SafeCast for int256;

  uint256 constant internal magnitude = 2**128;
  uint256 internal magnifiedDividendPerShare;
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;
  uint256 public totalDividendsDistributed;

  constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {

  }


  receive() external payable {
    distributeDividends();
  }


  function distributeDividends() public override payable {
    require(totalSupply() > 0);

    if (msg.value > 0) {
      magnifiedDividendPerShare = magnifiedDividendPerShare.add(
        (msg.value).mul(magnitude) / totalSupply()
      );
      emit DividendsDistributed(msg.sender, msg.value);

      totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
    }
  }


  function withdrawDividend() public virtual override {
    _withdrawDividendOfUser(payable(msg.sender));
  }


  function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      emit DividendWithdrawn(user, _withdrawableDividend);
      (bool success,) = user.call{value: _withdrawableDividend, gas: 3000}("");

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }


  function dividendOf(address _owner) public view override returns(uint256) {
    return withdrawableDividendOf(_owner);
  }


  function withdrawableDividendOf(address _owner) public view override returns(uint256) {
    return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
  }

  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }


  function accumulativeDividendOf(address _owner) public view override returns(uint256) {
    return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256()
      .add(magnifiedDividendCorrections[_owner]).toUint256() / magnitude;
  }

  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);
    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }


  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256() );
  }


  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);
    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .add( (magnifiedDividendPerShare.mul(value)).toInt256() );
  }


  function _setBalance(address account, uint256 newBalance) internal {
    uint256 currentBalance = balanceOf(account);
    if(newBalance > currentBalance) {
      uint256 mintAmount = newBalance.sub(currentBalance);
      _mint(account, mintAmount);
    } else if(newBalance < currentBalance) {
      uint256 burnAmount = currentBalance.sub(newBalance);
      _burn(account, burnAmount);
    }
  }
}


contract RETRIBUTIONDividendTracker is DividendPayingToken, Ownable 
{
    using SafeMath for uint256;
    using SignedSafeMath for int256;
    using IterableMapping for IterableMapping.Map;
    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;
    mapping (address => bool) public excludedFromDividends;
    mapping (address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public immutable minimumTokenBalanceForDividends;
    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() DividendPayingToken("RETRIBUTION_Dividend_Tracker", "RETRIBUTION_Dividend_Tracker") {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 1000 * (10**18); //must hold 200000+ tokens
    }

    function _transfer(address, address, uint256) internal pure override {
        require(false, "RETRIBUTION_Dividend_Tracker: No transfers allowed");
    }

    function withdrawDividend() public pure override {
        require(false, "RETRIBUTION_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main RETRIBUTION contract.");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "RETRIBUTION_Dividend_Tracker: claimWait must be updated to between 1 and 24 hours");    
        require(newClaimWait != claimWait, "RETRIBUTION_Dividend_Tracker: Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns(uint256) {
        return lastProcessedIndex;
    }

    function getNumberOfTokenHolders() external view returns(uint256) {
        return tokenHoldersMap.keys.length;
    }



    function getAccount(address _account)
        public view returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = -1;
        if(index >= 0) {
            if(uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ?
                                                        tokenHoldersMap.keys.length.sub(lastProcessedIndex) :
                                                        0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }


        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ?
                                    lastClaimTime.add(claimWait) :
                                    0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ?
                                                    nextClaimTime.sub(block.timestamp) :
                                                    0;
    }


    function getAccountAtIndex(uint256 index)
        public view returns (address, int256, int256, uint256, uint256,  uint256, uint256, uint256) 
        {
           if(index >= tokenHoldersMap.size()) 
           {
              return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
           }

        address account = tokenHoldersMap.getKeyAtIndex(index);
        return getAccount(account);
    }



    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if(lastClaimTime > block.timestamp)  {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if(excludedFromDividends[account]) {
            return;
        }

        if(newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        }
        else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        processAccount(account, true);
    }



    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if(numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while(gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if(_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if(canAutoClaim(lastClaimTimes[account])) {
                if(processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if(gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }

    function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

        if(amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }


}






contract RETRIBUTION is ERC20, Ownable 
{
    using SafeMath for uint256;
    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    RETRIBUTIONDividendTracker public dividendTracker;

    uint256 public maxSellTransactionAmount = 5_000_000 * (10**18);
    uint256 public swapTokensAtAmount = 100_000 * (10**18);

    uint256 public CRORewardsFee;
    uint256 public marketingFee;
    uint256 public devFee;
    uint256 public totalFees;

    
    address payable public  marketingWallet;
    address payable public  devWallet;

    uint256 public gasForProcessing = 300000;
    mapping (address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping (address => bool) public automatedMarketMakerPairs;
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }



    function setMaxtx(uint256 _maxSellTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxSellTxAmount;
    }

    constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {

        CRORewardsFee = 2;
        marketingFee = 1;
        devFee = 1;
        
        marketingWallet = payable(0x94E380477bD63C3A81c2E8Af4F8d004EE618faCD);
        devWallet = payable(0x54cc29C9890cB5fA36907BD5D26c8FaAEf18f425);

        totalFees = CRORewardsFee.add(marketingFee).add(devFee); 
        dividendTracker = new RETRIBUTIONDividendTracker();
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);

        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[marketingWallet] = true;
        excludeFromFees(devWallet, true);
        dividendTracker.excludeFromDividends(devWallet);
        _isExcludedFromMaxTx[devWallet] = true;
        super.transferOwnership(devWallet);
        _mint(owner(), 500_000_000 * (10**18));
    }

    receive() external payable {

    }

    function updateUniswapV2Router(address newAddress) public onlyOwner {
        require(newAddress != address(uniswapV2Router), "RETRIBUTION: The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "RETRIBUTION: Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }
    
    function setExcludeFromMaxTx(address _address, bool value) public onlyOwner { 
        _isExcludedFromMaxTx[_address] = value;
    }

    function setExcludeFromAll(address _address) public onlyOwner {
        _isExcludedFromMaxTx[_address] = true;
        _isExcludedFromFees[_address] = true;
        dividendTracker.excludeFromDividends(_address);
    }

    function excludeMultipleAccountsFromFees(address[] calldata accounts, bool excluded) public onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "RETRIBUTION: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        if(value) {
            dividendTracker.excludeFromDividends(pair);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200000 && newValue <= 500000, "RETRIBUTION: gasForProcessing must be between 200,000 and 500,000");
        require(newValue != gasForProcessing, "RETRIBUTION: Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }

    function getClaimWait() external view returns(uint256) {
        return dividendTracker.claimWait();
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

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

    function withdrawableDividendOf(address account) public view returns(uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account) public view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccountAtIndex(index);
    }

    function processDividendTracker(uint256 gas) external {
        (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas);
        emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin);
    }

    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }

    function getLastProcessedIndex() external view returns(uint256) {
        return dividendTracker.getLastProcessedIndex();
    }

    function getNumberOfDividendTokenHolders() external view returns(uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function excludeFromDividends(address account) external onlyOwner 
    {
        dividendTracker.excludeFromDividends(account);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    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(automatedMarketMakerPairs[to] && (!_isExcludedFromMaxTx[from]) && (!_isExcludedFromMaxTx[to])){
            require(amount <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellTransactionAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool overMinTokenBalance = contractTokenBalance >= swapTokensAtAmount;

        if(overMinTokenBalance 
        && !inSwapAndLiquify 
        && !automatedMarketMakerPairs[from] 
        && swapAndLiquifyEnabled) 
        {
            swapAndLiquify(swapTokensAtAmount);
        }


        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) 
        {
            uint256 feeTokens = amount*totalFees/100;
            amount = amount.sub(feeTokens);
            super._transfer(from, address(this), feeTokens);
        }

        super._transfer(from, to, amount);

        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

        if(!inSwapAndLiquify) 
        {
            uint256 gas = gasForProcessing;
            try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) 
            {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
            } 
            catch 
            {

            }
        }
    }


    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance, address(this)); 
        uint256 deltaBalance = address(this).balance;
        uint256 marketingAmount = deltaBalance.mul(marketingFee).div(totalFees);
        marketingWallet.transfer(marketingAmount);
        uint256 devAmount = deltaBalance.mul(devFee).div(totalFees);
        devWallet.transfer(devAmount);        
        uint256 dividends = address(this).balance;
        (bool success,) = address(dividendTracker).call{value: dividends}("");

        if(success) {
            emit SendDividends(contractTokenBalance, dividends);
        }
        emit SwapAndLiquify(contractTokenBalance, deltaBalance);
    }

    function swapTokensForEth(uint256 tokenAmount, address _to) private 
    {        
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount, 
            0, 
            path, 
            _to, 
            block.timestamp+30
        );
    }

   
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"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":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","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":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":[],"name":"CRORewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"claim","outputs":[],"stateMutability":"nonpayable","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":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract RETRIBUTIONDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","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":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setExcludeFromAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxAmount","type":"uint256"}],"name":"setMaxtx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600660156101000a81548160ff0219169083151502179055506a0422ca8b0a00a42500000060085569152d02c7e14af6800000600955620493e06010553480156200004f575f80fd5b506040516200aa103803806200aa10833981810160405281019062000075919062001163565b818181600390816200008891906200141d565b5080600490816200009a91906200141d565b505050620000bd620000b1620008ad60201b60201c565b620008b460201b60201c565b6002600a819055506001600b819055506001600c819055507394e380477bd63c3a81c2e8af4f8d004ee618facd600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507354cc29c9890cb5fa36907bd5d26c8faaef18f425600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001ac600c546200019d600b54600a546200097760201b90919060201c565b6200097760201b90919060201c565b600d81905550604051620001c09062000fd0565b604051809103905ff080158015620001da573d5f803e3d5ffd5b5060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f73145863eb42cf62847a6ca784e6416c1682b1b2ae90505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a3919062001562565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032f919062001562565b6040518363ffffffff1660e01b81526004016200034e929190620015a3565b6020604051808303815f875af11580156200036b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000391919062001562565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200041a8160016200098e60201b60201c565b6200044e600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b5160201b60201c565b6200046130600162000b5160201b60201c565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401620004de9190620015ce565b5f604051808303815f87803b158015620004f6575f80fd5b505af115801562000509573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0306040518263ffffffff1660e01b8152600401620005699190620015ce565b5f604051808303815f87803b15801562000581575f80fd5b505af115801562000594573d5f803e3d5ffd5b5050505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0836040518263ffffffff1660e01b8152600401620005f49190620015ce565b5f604051808303815f87803b1580156200060c575f80fd5b505af11580156200061f573d5f803e3d5ffd5b50505050600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000722600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000b5160201b60201c565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016200079f919062001647565b5f604051808303815f87803b158015620007b7575f80fd5b505af1158015620007ca573d5f803e3d5ffd5b50505050600160125f600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000876600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000d1a60201b60201c565b620008a36200088a62000e2e60201b60201c565b6b019d971e4fe8401e7400000062000e5660201b60201c565b50505050620019fa565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836200098691906200168f565b905092915050565b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150362000a20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a179062001773565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550801562000b075760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0836040518263ffffffff1660e01b815260040162000ad79190620015ce565b5f604051808303815f87803b15801562000aef575f80fd5b505af115801562000b02573d5f803e3d5ffd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000b61620008ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000b8762000e2e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bd790620017e1565b60405180910390fd5b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150362000c72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c699062001875565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000d0e9190620018b1565b60405180910390a25050565b62000d2a620008ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000d5062000e2e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000da9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000da090620017e1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000e1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e119062001940565b60405180910390fd5b62000e2b81620008b460201b60201c565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ec7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ebe90620019ae565b60405180910390fd5b62000eda5f838362000fc660201b60201c565b8060025f82825462000eed91906200168f565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000f4191906200168f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000fa79190620019df565b60405180910390a362000fc25f838362000fcb60201b60201c565b5050565b505050565b505050565b613fba8062006a5683390190565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6200103f8262000ff7565b810181811067ffffffffffffffff8211171562001061576200106062001007565b5b80604052505050565b5f6200107562000fde565b905062001083828262001034565b919050565b5f67ffffffffffffffff821115620010a557620010a462001007565b5b620010b08262000ff7565b9050602081019050919050565b5f5b83811015620010dc578082015181840152602081019050620010bf565b5f8484015250505050565b5f620010fd620010f78462001088565b6200106a565b9050828152602081018484840111156200111c576200111b62000ff3565b5b62001129848285620010bd565b509392505050565b5f82601f83011262001148576200114762000fef565b5b81516200115a848260208601620010e7565b91505092915050565b5f80604083850312156200117c576200117b62000fe7565b5b5f83015167ffffffffffffffff8111156200119c576200119b62000feb565b5b620011aa8582860162001131565b925050602083015167ffffffffffffffff811115620011ce57620011cd62000feb565b5b620011dc8582860162001131565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200123557607f821691505b6020821081036200124b576200124a620011f0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620012af7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262001272565b620012bb868362001272565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62001305620012ff620012f984620012d3565b620012dc565b620012d3565b9050919050565b5f819050919050565b6200132083620012e5565b620013386200132f826200130c565b8484546200127e565b825550505050565b5f90565b6200134e62001340565b6200135b81848462001315565b505050565b5b818110156200138257620013765f8262001344565b60018101905062001361565b5050565b601f821115620013d1576200139b8162001251565b620013a68462001263565b81016020851015620013b6578190505b620013ce620013c58562001263565b83018262001360565b50505b505050565b5f82821c905092915050565b5f620013f35f1984600802620013d6565b1980831691505092915050565b5f6200140d8383620013e2565b9150826002028217905092915050565b6200142882620011e6565b67ffffffffffffffff81111562001444576200144362001007565b5b6200145082546200121d565b6200145d82828562001386565b5f60209050601f83116001811462001493575f84156200147e578287015190505b6200148a858262001400565b865550620014f9565b601f198416620014a38662001251565b5f5b82811015620014cc57848901518255600182019150602085019450602081019050620014a5565b86831015620014ec5784890151620014e8601f891682620013e2565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200152c8262001501565b9050919050565b6200153e8162001520565b811462001549575f80fd5b50565b5f815190506200155c8162001533565b92915050565b5f602082840312156200157a576200157962000fe7565b5b5f62001589848285016200154c565b91505092915050565b6200159d8162001520565b82525050565b5f604082019050620015b85f83018562001592565b620015c7602083018462001592565b9392505050565b5f602082019050620015e35f83018462001592565b92915050565b5f6200160962001603620015fd8462001501565b620012dc565b62001501565b9050919050565b5f6200161c82620015e9565b9050919050565b5f6200162f8262001610565b9050919050565b620016418162001623565b82525050565b5f6020820190506200165c5f83018462001636565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200169b82620012d3565b9150620016a883620012d3565b9250828201905080821115620016c357620016c262001662565b5b92915050565b5f82825260208201905092915050565b7f5245545249425554494f4e3a204175746f6d61746564206d61726b6574206d615f8201527f6b6572207061697220697320616c72656164792073657420746f20746861742060208201527f76616c7565000000000000000000000000000000000000000000000000000000604082015250565b5f6200175b604583620016c9565b91506200176882620016d9565b606082019050919050565b5f6020820190508181035f8301526200178c816200174d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620017c9602083620016c9565b9150620017d68262001793565b602082019050919050565b5f6020820190508181035f830152620017fa81620017bb565b9050919050565b7f5245545249425554494f4e3a204163636f756e7420697320616c7265616479205f8201527f7468652076616c7565206f6620276578636c7564656427000000000000000000602082015250565b5f6200185d603783620016c9565b91506200186a8262001801565b604082019050919050565b5f6020820190508181035f8301526200188e816200184f565b9050919050565b5f8115159050919050565b620018ab8162001895565b82525050565b5f602082019050620018c65f830184620018a0565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f62001928602683620016c9565b91506200193582620018cc565b604082019050919050565b5f6020820190508181035f83015262001959816200191a565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001996601f83620016c9565b9150620019a38262001960565b602082019050919050565b5f6020820190508181035f830152620019c78162001988565b9050919050565b620019d981620012d3565b82525050565b5f602082019050620019f45f830184620019ce565b92915050565b60805161503c62001a1a5f395f81816112110152611c02015261503c5ff3fe6080604052600436106102e7575f3560e01c806370a082311161018f578063ad56c13c116100db578063dd62ed3e11610094578063e98030c71161006e578063e98030c714610b5d578063f27fd25414610b85578063f2fde38b14610bc8578063fd3289f814610bf0576102ee565b8063dd62ed3e14610acd578063e2f4560514610b09578063e7841ec014610b33576102ee565b8063ad56c13c146109ac578063b62496f5146109ef578063c024666814610a2b578063c34c591214610a53578063c492f04614610a7d578063c49b9a8014610aa5576102ee565b806395d89b4111610148578063a26579ad11610122578063a26579ad146108ce578063a457c2d7146108f8578063a8b9d24014610934578063a9059cbb14610970576102ee565b806395d89b41146108525780639a7a23d61461087c5780639c1b8af5146108a4576102ee565b806370a082311461075a578063715018a61461079657806375f0a874146107ac578063871c128d146107d65780638da5cb5b146107fe5780638ea5220f14610828576102ee565b806349928a501161024e57806364b0f653116102075780636827e764116101e15780636827e764146106a25780636843cd84146106cc5780636b67c4df14610708578063700bb19114610732576102ee565b806364b0f65314610614578063658c27a91461063e57806365b8dbc01461067a576102ee565b806349928a501461051e57806349bd5a5e146105465780634a74bb02146105705780634e71d92d1461059a5780634fbee193146105b05780635b89029c146105ec576102ee565b806323b872dd116102a057806323b872dd146104005780632c1f52161461043c57806330bb4cff14610466578063313ce5671461049057806331e79db0146104ba57806339509351146104e2576102ee565b806302259e9e146102f257806306fdde031461031c578063095ea7b31461034657806313114a9d146103825780631694505e146103ac57806318160ddd146103d6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610c18565b60405161031391906139f0565b60405180910390f35b348015610327575f80fd5b50610330610c1e565b60405161033d9190613a93565b60405180910390f35b348015610351575f80fd5b5061036c60048036038101906103679190613b3f565b610cae565b6040516103799190613b97565b60405180910390f35b34801561038d575f80fd5b50610396610ccb565b6040516103a391906139f0565b60405180910390f35b3480156103b7575f80fd5b506103c0610cd1565b6040516103cd9190613c0b565b60405180910390f35b3480156103e1575f80fd5b506103ea610cf6565b6040516103f791906139f0565b60405180910390f35b34801561040b575f80fd5b5061042660048036038101906104219190613c24565b610cff565b6040516104339190613b97565b60405180910390f35b348015610447575f80fd5b50610450610df1565b60405161045d9190613ca5565b60405180910390f35b348015610471575f80fd5b5061047a610e16565b60405161048791906139f0565b60405180910390f35b34801561049b575f80fd5b506104a4610eaa565b6040516104b19190613cd9565b60405180910390f35b3480156104c5575f80fd5b506104e060048036038101906104db9190613cf2565b610eb2565b005b3480156104ed575f80fd5b5061050860048036038101906105039190613b3f565b610fb8565b6040516105159190613b97565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f9190613cf2565b61105f565b005b348015610551575f80fd5b5061055a61120f565b6040516105679190613d2c565b60405180910390f35b34801561057b575f80fd5b50610584611233565b6040516105919190613b97565b60405180910390f35b3480156105a5575f80fd5b506105ae611246565b005b3480156105bb575f80fd5b506105d660048036038101906105d19190613cf2565b6112e5565b6040516105e39190613b97565b60405180910390f35b3480156105f7575f80fd5b50610612600480360381019061060d9190613d6f565b611337565b005b34801561061f575f80fd5b5061062861140b565b60405161063591906139f0565b60405180910390f35b348015610649575f80fd5b50610664600480360381019061065f9190613cf2565b61149f565b6040516106719190613b97565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b9190613cf2565b6114f1565b005b3480156106ad575f80fd5b506106b66116ba565b6040516106c391906139f0565b60405180910390f35b3480156106d7575f80fd5b506106f260048036038101906106ed9190613cf2565b6116c0565b6040516106ff91906139f0565b60405180910390f35b348015610713575f80fd5b5061071c611761565b60405161072991906139f0565b60405180910390f35b34801561073d575f80fd5b5061075860048036038101906107539190613dad565b611767565b005b348015610765575f80fd5b50610780600480360381019061077b9190613cf2565b611867565b60405161078d91906139f0565b60405180910390f35b3480156107a1575f80fd5b506107aa6118ac565b005b3480156107b7575f80fd5b506107c0611933565b6040516107cd9190613df8565b60405180910390f35b3480156107e1575f80fd5b506107fc60048036038101906107f79190613dad565b611958565b005b348015610809575f80fd5b50610812611aa7565b60405161081f9190613d2c565b60405180910390f35b348015610833575f80fd5b5061083c611acf565b6040516108499190613df8565b60405180910390f35b34801561085d575f80fd5b50610866611af4565b6040516108739190613a93565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190613d6f565b611b84565b005b3480156108af575f80fd5b506108b8611c9c565b6040516108c591906139f0565b60405180910390f35b3480156108d9575f80fd5b506108e2611ca2565b6040516108ef91906139f0565b60405180910390f35b348015610903575f80fd5b5061091e60048036038101906109199190613b3f565b611d36565b60405161092b9190613b97565b60405180910390f35b34801561093f575f80fd5b5061095a60048036038101906109559190613cf2565b611e1c565b60405161096791906139f0565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613b3f565b611ebd565b6040516109a39190613b97565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613cf2565b611eda565b6040516109e6989796959493929190613e29565b60405180910390f35b3480156109fa575f80fd5b50610a156004803603810190610a109190613cf2565b611f97565b604051610a229190613b97565b60405180910390f35b348015610a36575f80fd5b50610a516004803603810190610a4c9190613d6f565b611fb4565b005b348015610a5e575f80fd5b50610a67612165565b604051610a7491906139f0565b60405180910390f35b348015610a88575f80fd5b50610aa36004803603810190610a9e9190613f06565b61216b565b005b348015610ab0575f80fd5b50610acb6004803603810190610ac69190613f63565b6122c3565b005b348015610ad8575f80fd5b50610af36004803603810190610aee9190613f8e565b612393565b604051610b0091906139f0565b60405180910390f35b348015610b14575f80fd5b50610b1d612415565b604051610b2a91906139f0565b60405180910390f35b348015610b3e575f80fd5b50610b4761241b565b604051610b5491906139f0565b60405180910390f35b348015610b68575f80fd5b50610b836004803603810190610b7e9190613dad565b6124af565b005b348015610b90575f80fd5b50610bab6004803603810190610ba69190613dad565b6125b5565b604051610bbf989796959493929190613e29565b60405180910390f35b348015610bd3575f80fd5b50610bee6004803603810190610be99190613cf2565b612672565b005b348015610bfb575f80fd5b50610c166004803603810190610c119190613dad565b612768565b005b60085481565b606060038054610c2d90613ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5990613ff9565b8015610ca45780601f10610c7b57610100808354040283529160200191610ca4565b820191905f5260205f20905b815481529060010190602001808311610c8757829003601f168201915b5050505050905090565b5f610cc1610cba6127ee565b84846127f5565b6001905092915050565b600d5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f610d0b8484846129b8565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d526127ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890614099565b60405180910390fd5b610de585610ddd6127ee565b8584036127f5565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea591906140cb565b905090565b5f6012905090565b610eba6127ee565b73ffffffffffffffffffffffffffffffffffffffff16610ed8611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614140565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b8152600401610f889190613d2c565b5f604051808303815f87803b158015610f9f575f80fd5b505af1158015610fb1573d5f803e3d5ffd5b5050505050565b5f611055610fc46127ee565b848460015f610fd16127ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611050919061418b565b6127f5565b6001905092915050565b6110676127ee565b73ffffffffffffffffffffffffffffffffffffffff16611085611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290614140565b60405180910390fd5b600160125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b81526004016111df9190613d2c565b5f604051808303815f87803b1580156111f6575f80fd5b505af1158015611208573d5f803e3d5ffd5b5050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660159054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc4c4b37335f6040518363ffffffff1660e01b81526004016112a29291906141be565b6020604051808303815f875af11580156112be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e291906141f9565b50565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61133f6127ee565b73ffffffffffffffffffffffffffffffffffffffff1661135d611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa90614140565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309bbedde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611476573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149a91906140cb565b905090565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6114f96127ee565b73ffffffffffffffffffffffffffffffffffffffff16611517611aa7565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614140565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390614294565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161171b9190613d2c565b602060405180830381865afa158015611736573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175a91906140cb565b9050919050565b600b5481565b5f805f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479856040518263ffffffff1660e01b81526004016117c491906139f0565b6060604051808303815f875af11580156117e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180491906142b2565b9250925092503273ffffffffffffffffffffffffffffffffffffffff165f15157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585896040516118599493929190614302565b60405180910390a350505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6118b46127ee565b73ffffffffffffffffffffffffffffffffffffffff166118d2611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90614140565b60405180910390fd5b6119315f612fb2565b565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119606127ee565b73ffffffffffffffffffffffffffffffffffffffff1661197e611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90614140565b60405180910390fd5b62030d4081101580156119ea57506207a1208111155b611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a20906143db565b60405180910390fd5b6010548103611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490614469565b60405180910390fd5b601054817f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db760405160405180910390a38060108190555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054611b0390613ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2f90613ff9565b8015611b7a5780601f10611b5157610100808354040283529160200191611b7a565b820191905f5260205f20905b815481529060010190602001808311611b5d57829003601f168201915b5050505050905090565b611b8c6127ee565b73ffffffffffffffffffffffffffffffffffffffff16611baa611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790614140565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c859061451d565b60405180910390fd5b611c988282613075565b5050565b60105481565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f2789ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3191906140cb565b905090565b5f8060015f611d436127ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df4906145ab565b60405180910390fd5b611e11611e086127ee565b858584036127f5565b600191505092915050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b8152600401611e779190613d2c565b602060405180830381865afa158015611e92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb691906140cb565b9050919050565b5f611ed0611ec96127ee565b84846129b8565b6001905092915050565b5f805f805f805f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f18a6040518263ffffffff1660e01b8152600401611f3c9190613d2c565b61010060405180830381865afa158015611f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190614607565b97509750975097509750975097509750919395975091939597565b6013602052805f5260405f205f915054906101000a900460ff1681565b611fbc6127ee565b73ffffffffffffffffffffffffffffffffffffffff16611fda611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790614140565b60405180910390fd5b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614728565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121599190613b97565b60405180910390a25050565b600a5481565b6121736127ee565b73ffffffffffffffffffffffffffffffffffffffff16612191611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614140565b60405180910390fd5b5f5b83839050811015612282578160115f86868581811061220b5761220a614746565b5b90506020020160208101906122209190613cf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808061227a90614773565b9150506121e9565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516122b693929190614876565b60405180910390a1505050565b6122cb6127ee565b73ffffffffffffffffffffffffffffffffffffffff166122e9611aa7565b73ffffffffffffffffffffffffffffffffffffffff161461233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614140565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123889190613b97565b60405180910390a150565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7841ec06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612486573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124aa91906140cb565b905090565b6124b76127ee565b73ffffffffffffffffffffffffffffffffffffffff166124d5611aa7565b73ffffffffffffffffffffffffffffffffffffffff161461252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614140565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98030c7826040518263ffffffff1660e01b815260040161258591906139f0565b5f604051808303815f87803b15801561259c575f80fd5b505af11580156125ae573d5f803e3d5ffd5b5050505050565b5f805f805f805f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635183d6fd8a6040518263ffffffff1660e01b815260040161261791906139f0565b61010060405180830381865afa158015612633573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126579190614607565b97509750975097509750975097509750919395975091939597565b61267a6127ee565b73ffffffffffffffffffffffffffffffffffffffff16612698611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e590614140565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275390614916565b60405180910390fd5b61276581612fb2565b50565b6127706127ee565b73ffffffffffffffffffffffffffffffffffffffff1661278e611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db90614140565b60405180910390fd5b8060088190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a906149a4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c890614a32565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129ab91906139f0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d90614ac0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90614b4e565b60405180910390fd5b5f8103612aab57612aa683835f613230565b612fad565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b48575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612b9b575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612be657600854811115612be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdc90614bdc565b60405180910390fd5b5b5f612bf030611867565b90505f6009548210159050808015612c155750600660149054906101000a900460ff16155b8015612c68575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c805750600660159054906101000a900460ff165b15612c9157612c906009546134a5565b5b60115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612d2f575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d73575f6064600d5485612d459190614bfa565b612d4f9190614c68565b9050612d64818561371890919063ffffffff16565b9350612d71863083613230565b505b612d7e858585613230565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc86612dc588611867565b6040518363ffffffff1660e01b8152600401612de2929190614c98565b5f604051808303815f87803b158015612df9575f80fd5b505af1925050508015612e0a575060015b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc85612e5287611867565b6040518363ffffffff1660e01b8152600401612e6f929190614c98565b5f604051808303815f87803b158015612e86575f80fd5b505af1925050508015612e97575060015b50600660149054906101000a900460ff16612faa575f601054905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b8152600401612f0c91906139f0565b6060604051808303815f875af1925050508015612f4757506040513d601f19601f82011682018060405250810190612f4491906142b2565b60015b15612fa8573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a9885858589604051612f9c9493929190614302565b60405180910390a35050505b505b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503613104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb90614d55565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080156131e65760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0836040518263ffffffff1660e01b81526004016131b89190613d2c565b5f604051808303815f87803b1580156131cf575f80fd5b505af11580156131e1573d5f803e3d5ffd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361329e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329590614ac0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361330c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330390614b4e565b60405180910390fd5b61331783838361372d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561339a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339190614de3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613428919061418b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161348c91906139f0565b60405180910390a361349f848484613732565b50505050565b6001600660146101000a81548160ff0219169083151502179055506134ca8130613737565b5f4790505f6134f8600d546134ea600b54856139ae90919063ffffffff16565b6139c390919063ffffffff16565b9050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561355e573d5f803e3d5ffd5b505f613589600d5461357b600c54866139ae90919063ffffffff16565b6139c390919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156135ef573d5f803e3d5ffd5b505f4790505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161363a90614e2e565b5f6040518083038185875af1925050503d805f8114613674576040519150601f19603f3d011682016040523d82523d5f602084013e613679565b606091505b5050905080156136bd577f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc386836040516136b4929190614e42565b60405180910390a15b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686866040516136ee929190614e42565b60405180910390a150505050505f600660146101000a81548160ff02191690831515021790555050565b5f81836137259190614e69565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561375357613752614e9c565b5b6040519080825280602002602001820160405280156137815781602001602082028036833780820191505090505b50905030815f8151811061379857613797614746565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138609190614ec9565b8160018151811061387457613873614746565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050826138da3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612393565b101561390e5761390d3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f196127f5565b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8486601e4261395c919061418b565b6040518663ffffffff1660e01b815260040161397c959493929190614fae565b5f604051808303815f87803b158015613993575f80fd5b505af11580156139a5573d5f803e3d5ffd5b50505050505050565b5f81836139bb9190614bfa565b905092915050565b5f81836139d09190614c68565b905092915050565b5f819050919050565b6139ea816139d8565b82525050565b5f602082019050613a035f8301846139e1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613a40578082015181840152602081019050613a25565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613a6582613a09565b613a6f8185613a13565b9350613a7f818560208601613a23565b613a8881613a4b565b840191505092915050565b5f6020820190508181035f830152613aab8184613a5b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ae482613abb565b9050919050565b613af481613ada565b8114613afe575f80fd5b50565b5f81359050613b0f81613aeb565b92915050565b613b1e816139d8565b8114613b28575f80fd5b50565b5f81359050613b3981613b15565b92915050565b5f8060408385031215613b5557613b54613ab3565b5b5f613b6285828601613b01565b9250506020613b7385828601613b2b565b9150509250929050565b5f8115159050919050565b613b9181613b7d565b82525050565b5f602082019050613baa5f830184613b88565b92915050565b5f819050919050565b5f613bd3613bce613bc984613abb565b613bb0565b613abb565b9050919050565b5f613be482613bb9565b9050919050565b5f613bf582613bda565b9050919050565b613c0581613beb565b82525050565b5f602082019050613c1e5f830184613bfc565b92915050565b5f805f60608486031215613c3b57613c3a613ab3565b5b5f613c4886828701613b01565b9350506020613c5986828701613b01565b9250506040613c6a86828701613b2b565b9150509250925092565b5f613c7e82613bb9565b9050919050565b5f613c8f82613c74565b9050919050565b613c9f81613c85565b82525050565b5f602082019050613cb85f830184613c96565b92915050565b5f60ff82169050919050565b613cd381613cbe565b82525050565b5f602082019050613cec5f830184613cca565b92915050565b5f60208284031215613d0757613d06613ab3565b5b5f613d1484828501613b01565b91505092915050565b613d2681613ada565b82525050565b5f602082019050613d3f5f830184613d1d565b92915050565b613d4e81613b7d565b8114613d58575f80fd5b50565b5f81359050613d6981613d45565b92915050565b5f8060408385031215613d8557613d84613ab3565b5b5f613d9285828601613b01565b9250506020613da385828601613d5b565b9150509250929050565b5f60208284031215613dc257613dc1613ab3565b5b5f613dcf84828501613b2b565b91505092915050565b5f613de282613abb565b9050919050565b613df281613dd8565b82525050565b5f602082019050613e0b5f830184613de9565b92915050565b5f819050919050565b613e2381613e11565b82525050565b5f61010082019050613e3d5f83018b613d1d565b613e4a602083018a613e1a565b613e576040830189613e1a565b613e6460608301886139e1565b613e7160808301876139e1565b613e7e60a08301866139e1565b613e8b60c08301856139e1565b613e9860e08301846139e1565b9998505050505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613ec657613ec5613ea5565b5b8235905067ffffffffffffffff811115613ee357613ee2613ea9565b5b602083019150836020820283011115613eff57613efe613ead565b5b9250929050565b5f805f60408486031215613f1d57613f1c613ab3565b5b5f84013567ffffffffffffffff811115613f3a57613f39613ab7565b5b613f4686828701613eb1565b93509350506020613f5986828701613d5b565b9150509250925092565b5f60208284031215613f7857613f77613ab3565b5b5f613f8584828501613d5b565b91505092915050565b5f8060408385031215613fa457613fa3613ab3565b5b5f613fb185828601613b01565b9250506020613fc285828601613b01565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061401057607f821691505b60208210810361402357614022613fcc565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614083602883613a13565b915061408e82614029565b604082019050919050565b5f6020820190508181035f8301526140b081614077565b9050919050565b5f815190506140c581613b15565b92915050565b5f602082840312156140e0576140df613ab3565b5b5f6140ed848285016140b7565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61412a602083613a13565b9150614135826140f6565b602082019050919050565b5f6020820190508181035f8301526141578161411e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614195826139d8565b91506141a0836139d8565b92508282019050808211156141b8576141b761415e565b5b92915050565b5f6040820190506141d15f830185613de9565b6141de6020830184613b88565b9392505050565b5f815190506141f381613d45565b92915050565b5f6020828403121561420e5761420d613ab3565b5b5f61421b848285016141e5565b91505092915050565b7f5245545249425554494f4e3a2054686520726f7574657220616c7265616479205f8201527f6861732074686174206164647265737300000000000000000000000000000000602082015250565b5f61427e603083613a13565b915061428982614224565b604082019050919050565b5f6020820190508181035f8301526142ab81614272565b9050919050565b5f805f606084860312156142c9576142c8613ab3565b5b5f6142d6868287016140b7565b93505060206142e7868287016140b7565b92505060406142f8868287016140b7565b9150509250925092565b5f6080820190506143155f8301876139e1565b61432260208301866139e1565b61432f60408301856139e1565b61433c60608301846139e1565b95945050505050565b7f5245545249425554494f4e3a20676173466f7250726f63657373696e67206d755f8201527f7374206265206265747765656e203230302c30303020616e64203530302c303060208201527f3000000000000000000000000000000000000000000000000000000000000000604082015250565b5f6143c5604183613a13565b91506143d082614345565b606082019050919050565b5f6020820190508181035f8301526143f2816143b9565b9050919050565b7f5245545249425554494f4e3a2043616e6e6f742075706461746520676173466f5f8201527f7250726f63657373696e6720746f2073616d652076616c756500000000000000602082015250565b5f614453603983613a13565b915061445e826143f9565b604082019050919050565b5f6020820190508181035f83015261448081614447565b9050919050565b7f5245545249425554494f4e3a205468652050616e63616b6553776170207061695f8201527f722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617460208201527f65644d61726b65744d616b657250616972730000000000000000000000000000604082015250565b5f614507605283613a13565b915061451282614487565b606082019050919050565b5f6020820190508181035f830152614534816144fb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614595602583613a13565b91506145a08261453b565b604082019050919050565b5f6020820190508181035f8301526145c281614589565b9050919050565b5f815190506145d781613aeb565b92915050565b6145e681613e11565b81146145f0575f80fd5b50565b5f81519050614601816145dd565b92915050565b5f805f805f805f80610100898b03121561462457614623613ab3565b5b5f6146318b828c016145c9565b98505060206146428b828c016145f3565b97505060406146538b828c016145f3565b96505060606146648b828c016140b7565b95505060806146758b828c016140b7565b94505060a06146868b828c016140b7565b93505060c06146978b828c016140b7565b92505060e06146a88b828c016140b7565b9150509295985092959890939650565b7f5245545249425554494f4e3a204163636f756e7420697320616c7265616479205f8201527f7468652076616c7565206f6620276578636c7564656427000000000000000000602082015250565b5f614712603783613a13565b915061471d826146b8565b604082019050919050565b5f6020820190508181035f83015261473f81614706565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61477d826139d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147af576147ae61415e565b5b600182019050919050565b5f82825260208201905092915050565b5f819050919050565b6147dc81613ada565b82525050565b5f6147ed83836147d3565b60208301905092915050565b5f6148076020840184613b01565b905092915050565b5f602082019050919050565b5f61482683856147ba565b9350614831826147ca565b805f5b858110156148695761484682846147f9565b61485088826147e2565b975061485b8361480f565b925050600181019050614834565b5085925050509392505050565b5f6040820190508181035f83015261488f81858761481b565b905061489e6020830184613b88565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614900602683613a13565b915061490b826148a6565b604082019050919050565b5f6020820190508181035f83015261492d816148f4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61498e602483613a13565b915061499982614934565b604082019050919050565b5f6020820190508181035f8301526149bb81614982565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a1c602283613a13565b9150614a27826149c2565b604082019050919050565b5f6020820190508181035f830152614a4981614a10565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614aaa602583613a13565b9150614ab582614a50565b604082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b38602383613a13565b9150614b4382614ade565b604082019050919050565b5f6020820190508181035f830152614b6581614b2c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e000000000000602082015250565b5f614bc6603a83613a13565b9150614bd182614b6c565b604082019050919050565b5f6020820190508181035f830152614bf381614bba565b9050919050565b5f614c04826139d8565b9150614c0f836139d8565b9250828202614c1d816139d8565b91508282048414831517614c3457614c3361415e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614c72826139d8565b9150614c7d836139d8565b925082614c8d57614c8c614c3b565b5b828204905092915050565b5f604082019050614cab5f830185613de9565b614cb860208301846139e1565b9392505050565b7f5245545249425554494f4e3a204175746f6d61746564206d61726b6574206d615f8201527f6b6572207061697220697320616c72656164792073657420746f20746861742060208201527f76616c7565000000000000000000000000000000000000000000000000000000604082015250565b5f614d3f604583613a13565b9150614d4a82614cbf565b606082019050919050565b5f6020820190508181035f830152614d6c81614d33565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614dcd602683613a13565b9150614dd882614d73565b604082019050919050565b5f6020820190508181035f830152614dfa81614dc1565b9050919050565b5f81905092915050565b50565b5f614e195f83614e01565b9150614e2482614e0b565b5f82019050919050565b5f614e3882614e0e565b9150819050919050565b5f604082019050614e555f8301856139e1565b614e6260208301846139e1565b9392505050565b5f614e73826139d8565b9150614e7e836139d8565b9250828203905081811115614e9657614e9561415e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614ede57614edd613ab3565b5b5f614eeb848285016145c9565b91505092915050565b5f819050919050565b5f614f17614f12614f0d84614ef4565b613bb0565b6139d8565b9050919050565b614f2781614efd565b82525050565b5f81519050919050565b5f819050602082019050919050565b5f602082019050919050565b5f614f5c82614f2d565b614f6681856147ba565b9350614f7183614f37565b805f5b83811015614fa1578151614f8888826147e2565b9750614f9383614f46565b925050600181019050614f74565b5085935050505092915050565b5f60a082019050614fc15f8301886139e1565b614fce6020830187614f1e565b8181036040830152614fe08186614f52565b9050614fef6060830185613d1d565b614ffc60808301846139e1565b969550505050505056fea2646970667358221220c8e26e6f2ba6bca52a49eaf65b45d6d11e3e0f03b599baeceaa2d650fdd5825264736f6c6343000814003360a060405234801562000010575f80fd5b506040518060400160405280601c81526020017f5245545249425554494f4e5f4469766964656e645f547261636b6572000000008152506040518060400160405280601c81526020017f5245545249425554494f4e5f4469766964656e645f547261636b6572000000008152508181816003908162000090919062000415565b508060049081620000a2919062000415565b5050505050620000c7620000bb620000e760201b60201c565b620000ee60201b60201c565b610e10601181905550683635c9adc5dea0000060808181525050620004f9565b5f33905090565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200022d57607f821691505b602082108103620002435762000242620001e8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620002a77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200026a565b620002b386836200026a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620002fd620002f7620002f184620002cb565b620002d4565b620002cb565b9050919050565b5f819050919050565b6200031883620002dd565b62000330620003278262000304565b84845462000276565b825550505050565b5f90565b6200034662000338565b620003538184846200030d565b505050565b5b818110156200037a576200036e5f826200033c565b60018101905062000359565b5050565b601f821115620003c957620003938162000249565b6200039e846200025b565b81016020851015620003ae578190505b620003c6620003bd856200025b565b83018262000358565b50505b505050565b5f82821c905092915050565b5f620003eb5f1984600802620003ce565b1980831691505092915050565b5f620004058383620003da565b9150826002028217905092915050565b6200042082620001b1565b67ffffffffffffffff8111156200043c576200043b620001bb565b5b62000448825462000215565b620004558282856200037e565b5f60209050601f8311600181146200048b575f841562000476578287015190505b620004828582620003f8565b865550620004f1565b601f1984166200049b8662000249565b5f5b82811015620004c4578489015182556001820191506020850194506020810190506200049d565b86831015620004e45784890151620004e0601f891682620003da565b8355505b6001600288020188555050505b505050505050565b608051613aa1620005195f395f81816114e801526116580152613aa15ff3fe608060405260043610610207575f3560e01c8063715018a611610117578063bc4c4b371161009f578063e7841ec01161006e578063e7841ec0146107cf578063e98030c7146107f9578063f2fde38b14610821578063fbcbc0f114610849578063ffb2c4791461088c57610216565b8063bc4c4b3714610705578063be10b61414610741578063dd62ed3e1461076b578063e30443bc146107a757610216565b806395d89b41116100e657806395d89b41146105eb578063a457c2d714610615578063a8b9d24014610651578063a9059cbb1461068d578063aafd847a146106c957610216565b8063715018a61461054557806385a6b3ae1461055b5780638da5cb5b1461058557806391b89fba146105af57610216565b80633009a6091161019a5780634e7b827f116101695780634e7b827f1461044a5780635183d6fd146104865780636a474002146104c95780636f2789ec146104df57806370a082311461050957610216565b80633009a60914610392578063313ce567146103bc57806331e79db0146103e6578063395093511461040e57610216565b806318160ddd116101d657806318160ddd146102b4578063226cfa3d146102de57806323b872dd1461031a57806327ce01471461035657610216565b806303c833021461021a57806306fdde0314610224578063095ea7b31461024e57806309bbedde1461028a57610216565b36610216576102146108ca565b005b5f80fd5b6102226108ca565b005b34801561022f575f80fd5b506102386109a0565b60405161024591906128e5565b60405180910390f35b348015610259575f80fd5b50610274600480360381019061026f9190612996565b610a30565b60405161028191906129ee565b60405180910390f35b348015610295575f80fd5b5061029e610a4d565b6040516102ab9190612a16565b60405180910390f35b3480156102bf575f80fd5b506102c8610a5b565b6040516102d59190612a16565b60405180910390f35b3480156102e9575f80fd5b5061030460048036038101906102ff9190612a2f565b610a64565b6040516103119190612a16565b60405180910390f35b348015610325575f80fd5b50610340600480360381019061033b9190612a5a565b610a79565b60405161034d91906129ee565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612a2f565b610b6b565b6040516103899190612a16565b60405180910390f35b34801561039d575f80fd5b506103a6610c0b565b6040516103b39190612a16565b60405180910390f35b3480156103c7575f80fd5b506103d0610c11565b6040516103dd9190612ac5565b60405180910390f35b3480156103f1575f80fd5b5061040c60048036038101906104079190612a2f565b610c19565b005b348015610419575f80fd5b50610434600480360381019061042f9190612996565b610df5565b60405161044191906129ee565b60405180910390f35b348015610455575f80fd5b50610470600480360381019061046b9190612a2f565b610e9c565b60405161047d91906129ee565b60405180910390f35b348015610491575f80fd5b506104ac60048036038101906104a79190612ade565b610eb9565b6040516104c0989796959493929190612b30565b60405180910390f35b3480156104d4575f80fd5b506104dd611021565b005b3480156104ea575f80fd5b506104f3611063565b6040516105009190612a16565b60405180910390f35b348015610514575f80fd5b5061052f600480360381019061052a9190612a2f565b611069565b60405161053c9190612a16565b60405180910390f35b348015610550575f80fd5b506105596110ae565b005b348015610566575f80fd5b5061056f611135565b60405161057c9190612a16565b60405180910390f35b348015610590575f80fd5b5061059961113b565b6040516105a69190612bac565b60405180910390f35b3480156105ba575f80fd5b506105d560048036038101906105d09190612a2f565b611163565b6040516105e29190612a16565b60405180910390f35b3480156105f6575f80fd5b506105ff611174565b60405161060c91906128e5565b60405180910390f35b348015610620575f80fd5b5061063b60048036038101906106369190612996565b611204565b60405161064891906129ee565b60405180910390f35b34801561065c575f80fd5b5061067760048036038101906106729190612a2f565b6112ea565b6040516106849190612a16565b60405180910390f35b348015610698575f80fd5b506106b360048036038101906106ae9190612996565b61134a565b6040516106c091906129ee565b60405180910390f35b3480156106d4575f80fd5b506106ef60048036038101906106ea9190612a2f565b611367565b6040516106fc9190612a16565b60405180910390f35b348015610710575f80fd5b5061072b60048036038101906107269190612c2a565b6113ad565b60405161073891906129ee565b60405180910390f35b34801561074c575f80fd5b506107556114e6565b6040516107629190612a16565b60405180910390f35b348015610776575f80fd5b50610791600480360381019061078c9190612c68565b61150a565b60405161079e9190612a16565b60405180910390f35b3480156107b2575f80fd5b506107cd60048036038101906107c89190612ca6565b61158c565b005b3480156107da575f80fd5b506107e361177a565b6040516107f09190612a16565b60405180910390f35b348015610804575f80fd5b5061081f600480360381019061081a9190612ade565b611783565b005b34801561082c575f80fd5b5061084760048036038101906108429190612a2f565b6118d1565b005b348015610854575f80fd5b5061086f600480360381019061086a9190612a2f565b6119c7565b604051610883989796959493929190612b30565b60405180910390f35b348015610897575f80fd5b506108b260048036038101906108ad9190612ade565b611b96565b6040516108c193929190612ce4565b60405180910390f35b5f6108d3610a5b565b116108dc575f80fd5b5f34111561099e5761092e6108ef610a5b565b61091370010000000000000000000000000000000034611d1590919063ffffffff16565b61091d9190612d73565b600554611d2a90919063ffffffff16565b6005819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165113460405161097a9190612a16565b60405180910390a261099734600854611d2a90919063ffffffff16565b6008819055505b565b6060600380546109af90612dd0565b80601f01602080910402602001604051908101604052809291908181526020018280546109db90612dd0565b8015610a265780601f106109fd57610100808354040283529160200191610a26565b820191905f5260205f20905b815481529060010190602001808311610a0957829003601f168201915b5050505050905090565b5f610a43610a3c611d3f565b8484611d46565b6001905092915050565b5f600a5f0180549050905090565b5f600254905090565b6010602052805f5260405f205f915090505481565b5f610a85848484611f09565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610acc611d3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290612e70565b60405180910390fd5b610b5f85610b57611d3f565b858403611d46565b60019150509392505050565b5f700100000000000000000000000000000000610bfa610bf560065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610be7610be2610bd188611069565b600554611d1590919063ffffffff16565b611f4e565b611fba90919063ffffffff16565b611fcf565b610c049190612d73565b9050919050565b600e5481565b5f6012905090565b610c21611d3f565b73ffffffffffffffffffffffffffffffffffffffff16610c3f61113b565b73ffffffffffffffffffffffffffffffffffffffff1614610c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8c90612ed8565b60405180910390fd5b600f5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610ce8575f80fd5b6001600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550610d47815f61201b565b600a735a4d33ec45d4cd27861dbd7a57d353b76c6d1553634c60db9c9091836040518363ffffffff1660e01b8152600401610d83929190612f0c565b5f6040518083038186803b158015610d99575f80fd5b505af4158015610dab573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b5f610e92610e01611d3f565b848460015f610e0e611d3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e8d9190612f33565b611d46565b6001905092915050565b600f602052805f5260405f205f915054906101000a900460ff1681565b5f805f805f805f80600a735a4d33ec45d4cd27861dbd7a57d353b76c6d155363deb3d89690916040518263ffffffff1660e01b8152600401610efb9190612f66565b602060405180830381865af4158015610f16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3a9190612f93565b8910610f7d575f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff805f805f805f97509750975097509750975097509750611016565b5f600a735a4d33ec45d4cd27861dbd7a57d353b76c6d155363d1aa9e7e90918c6040518363ffffffff1660e01b8152600401610fba929190612fcd565b602060405180830381865af4158015610fd5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ff99190613008565b9050611004816119c7565b98509850985098509850985098509850505b919395975091939597565b5f611061576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611058906130ef565b60405180910390fd5b565b60115481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110b6611d3f565b73ffffffffffffffffffffffffffffffffffffffff166110d461113b565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190612ed8565b60405180910390fd5b6111335f612085565b565b60085481565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f61116d826112ea565b9050919050565b60606004805461118390612dd0565b80601f01602080910402602001604051908101604052809291908181526020018280546111af90612dd0565b80156111fa5780601f106111d1576101008083540402835291602001916111fa565b820191905f5260205f20905b8154815290600101906020018083116111dd57829003601f168201915b5050505050905090565b5f8060015f611211611d3f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156112cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c29061317d565b60405180910390fd5b6112df6112d6611d3f565b85858403611d46565b600191505092915050565b5f61134360075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461133584610b6b565b61214890919063ffffffff16565b9050919050565b5f61135d611356611d3f565b8484611f09565b6001905092915050565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f6113b6611d3f565b73ffffffffffffffffffffffffffffffffffffffff166113d461113b565b73ffffffffffffffffffffffffffffffffffffffff161461142a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142190612ed8565b60405180910390fd5b5f6114348461215d565b90505f8111156114db574260105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508215158473ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516114c99190612a16565b60405180910390a360019150506114e0565b5f9150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611594611d3f565b73ffffffffffffffffffffffffffffffffffffffff166115b261113b565b73ffffffffffffffffffffffffffffffffffffffff1614611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90612ed8565b60405180910390fd5b600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611776577f000000000000000000000000000000000000000000000000000000000000000081106116f657611687828261201b565b600a735a4d33ec45d4cd27861dbd7a57d353b76c6d155363bc2b405c909184846040518463ffffffff1660e01b81526004016116c5939291906131f6565b5f6040518083038186803b1580156116db575f80fd5b505af41580156116ed573d5f803e3d5ffd5b50505050611769565b611700825f61201b565b600a735a4d33ec45d4cd27861dbd7a57d353b76c6d1553634c60db9c9091846040518363ffffffff1660e01b815260040161173c92919061322b565b5f6040518083038186803b158015611752575f80fd5b505af4158015611764573d5f803e3d5ffd5b505050505b6117748260016113ad565b505b5050565b5f600e54905090565b61178b611d3f565b73ffffffffffffffffffffffffffffffffffffffff166117a961113b565b73ffffffffffffffffffffffffffffffffffffffff16146117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f690612ed8565b60405180910390fd5b610e1081101580156118145750620151808111155b611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a906132e8565b60405180910390fd5b6011548103611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e9061339c565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b6118d9611d3f565b73ffffffffffffffffffffffffffffffffffffffff166118f761113b565b73ffffffffffffffffffffffffffffffffffffffff161461194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194490612ed8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b29061342a565b60405180910390fd5b6119c481612085565b50565b5f805f805f805f80889750600a735a4d33ec45d4cd27861dbd7a57d353b76c6d15536317e142d190918a6040518363ffffffff1660e01b8152600401611a0e929190612f0c565b602060405180830381865af4158015611a29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4d9190613472565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505f8712611aed57600e54871115611a9f57611a98600e548861237290919063ffffffff16565b9550611aec565b5f600e54600a5f018054905011611ab6575f611ad3565b611ad2600e54600a5f018054905061214890919063ffffffff16565b5b9050611ae88189611fba90919063ffffffff16565b9650505b5b611af6886112ea565b9450611b0188610b6b565b935060105f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205492505f8311611b50575f611b66565b611b6560115484611d2a90919063ffffffff16565b5b9150428211611b75575f611b89565b611b88428361214890919063ffffffff16565b5b9050919395975091939597565b5f805f80600a5f018054905090505f8103611bbc575f80600e5493509350935050611d0e565b5f600e5490505f805a90505f805b8984108015611bd857508582105b15611cf5578480611be89061349d565b955050600a5f01805490508510611bfd575f94505b5f600a5f018681548110611c1457611c136134e4565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611c8460105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612387565b15611ca957611c948160016113ad565b15611ca8578180611ca49061349d565b9250505b5b8280611cb49061349d565b9350505f5a905080851115611ceb57611ce8611cd9828761214890919063ffffffff16565b87611d2a90919063ffffffff16565b95505b8094505050611bca565b84600e819055508181600e549850985098505050505050505b9193909250565b5f8183611d229190613511565b905092915050565b5f8183611d379190612f33565b905092915050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dab906135c2565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990613650565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611efc9190612a16565b60405180910390a3505050565b5f611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f40906136de565b60405180910390fd5b505050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa99061376c565b60405180910390fd5b819050919050565b5f8183611fc7919061378a565b905092915050565b5f80821215612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a90613815565b60405180910390fd5b819050919050565b5f61202583611069565b905080821115612055575f612043828461214890919063ffffffff16565b905061204f84826123b8565b50612080565b8082101561207f575f612071838361214890919063ffffffff16565b905061207d8482612473565b505b5b505050565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81836121559190613833565b905092915050565b5f80612168836112ea565b90505f811115612368576121c28160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d2a90919063ffffffff16565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516122499190612a16565b60405180910390a25f8373ffffffffffffffffffffffffffffffffffffffff1682610bb89060405161227a90613893565b5f60405180830381858888f193505050503d805f81146122b5576040519150601f19603f3d011682016040523d82523d5f602084013e6122ba565b606091505b505090508061235e576123138260075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461214890919063ffffffff16565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f9250505061236d565b819250505061236d565b5f9150505b919050565b5f818361237f91906138a7565b905092915050565b5f42821115612398575f90506123b3565b6011546123ae834261214890919063ffffffff16565b101590505b919050565b6123c2828261252e565b61242e6123e26123dd83600554611d1590919063ffffffff16565b611f4e565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461237290919063ffffffff16565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b61247d8282612685565b6124e961249d61249883600554611d1590919063ffffffff16565b611f4e565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611fba90919063ffffffff16565b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259390613931565b60405180910390fd5b6125a75f8383612851565b8060025f8282546125b89190612f33565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461260a9190612f33565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161266e9190612a16565b60405180910390a36126815f8383612856565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea906139bf565b60405180910390fd5b6126fe825f83612851565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277890613a4d565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8282546127d59190613833565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128399190612a16565b60405180910390a361284c835f84612856565b505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612892578082015181840152602081019050612877565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6128b78261285b565b6128c18185612865565b93506128d1818560208601612875565b6128da8161289d565b840191505092915050565b5f6020820190508181035f8301526128fd81846128ad565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61293282612909565b9050919050565b61294281612928565b811461294c575f80fd5b50565b5f8135905061295d81612939565b92915050565b5f819050919050565b61297581612963565b811461297f575f80fd5b50565b5f813590506129908161296c565b92915050565b5f80604083850312156129ac576129ab612905565b5b5f6129b98582860161294f565b92505060206129ca85828601612982565b9150509250929050565b5f8115159050919050565b6129e8816129d4565b82525050565b5f602082019050612a015f8301846129df565b92915050565b612a1081612963565b82525050565b5f602082019050612a295f830184612a07565b92915050565b5f60208284031215612a4457612a43612905565b5b5f612a518482850161294f565b91505092915050565b5f805f60608486031215612a7157612a70612905565b5b5f612a7e8682870161294f565b9350506020612a8f8682870161294f565b9250506040612aa086828701612982565b9150509250925092565b5f60ff82169050919050565b612abf81612aaa565b82525050565b5f602082019050612ad85f830184612ab6565b92915050565b5f60208284031215612af357612af2612905565b5b5f612b0084828501612982565b91505092915050565b612b1281612928565b82525050565b5f819050919050565b612b2a81612b18565b82525050565b5f61010082019050612b445f83018b612b09565b612b51602083018a612b21565b612b5e6040830189612b21565b612b6b6060830188612a07565b612b786080830187612a07565b612b8560a0830186612a07565b612b9260c0830185612a07565b612b9f60e0830184612a07565b9998505050505050505050565b5f602082019050612bbf5f830184612b09565b92915050565b5f612bcf82612909565b9050919050565b612bdf81612bc5565b8114612be9575f80fd5b50565b5f81359050612bfa81612bd6565b92915050565b612c09816129d4565b8114612c13575f80fd5b50565b5f81359050612c2481612c00565b92915050565b5f8060408385031215612c4057612c3f612905565b5b5f612c4d85828601612bec565b9250506020612c5e85828601612c16565b9150509250929050565b5f8060408385031215612c7e57612c7d612905565b5b5f612c8b8582860161294f565b9250506020612c9c8582860161294f565b9150509250929050565b5f8060408385031215612cbc57612cbb612905565b5b5f612cc985828601612bec565b9250506020612cda85828601612982565b9150509250929050565b5f606082019050612cf75f830186612a07565b612d046020830185612a07565b612d116040830184612a07565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d7d82612963565b9150612d8883612963565b925082612d9857612d97612d19565b5b828204905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612de757607f821691505b602082108103612dfa57612df9612da3565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612e5a602883612865565b9150612e6582612e00565b604082019050919050565b5f6020820190508181035f830152612e8781612e4e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612ec2602083612865565b9150612ecd82612e8e565b602082019050919050565b5f6020820190508181035f830152612eef81612eb6565b9050919050565b8082525050565b612f0681612928565b82525050565b5f604082019050612f1f5f830185612ef6565b612f2c6020830184612efd565b9392505050565b5f612f3d82612963565b9150612f4883612963565b9250828201905080821115612f6057612f5f612d46565b5b92915050565b5f602082019050612f795f830184612ef6565b92915050565b5f81519050612f8d8161296c565b92915050565b5f60208284031215612fa857612fa7612905565b5b5f612fb584828501612f7f565b91505092915050565b612fc781612963565b82525050565b5f604082019050612fe05f830185612ef6565b612fed6020830184612fbe565b9392505050565b5f8151905061300281612939565b92915050565b5f6020828403121561301d5761301c612905565b5b5f61302a84828501612ff4565b91505092915050565b7f5245545249425554494f4e5f4469766964656e645f547261636b65723a2077695f8201527f7468647261774469766964656e642064697361626c65642e205573652074686560208201527f2027636c61696d272066756e6374696f6e206f6e20746865206d61696e20524560408201527f545249425554494f4e20636f6e74726163742e00000000000000000000000000606082015250565b5f6130d9607383612865565b91506130e482613033565b608082019050919050565b5f6020820190508181035f830152613106816130cd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613167602583612865565b91506131728261310d565b604082019050919050565b5f6020820190508181035f8301526131948161315b565b9050919050565b5f819050919050565b5f6131be6131b96131b484612909565b61319b565b612909565b9050919050565b5f6131cf826131a4565b9050919050565b5f6131e0826131c5565b9050919050565b6131f0816131d6565b82525050565b5f6060820190506132095f830186612ef6565b61321660208301856131e7565b6132236040830184612fbe565b949350505050565b5f60408201905061323e5f830185612ef6565b61324b60208301846131e7565b9392505050565b7f5245545249425554494f4e5f4469766964656e645f547261636b65723a20636c5f8201527f61696d57616974206d757374206265207570646174656420746f20626574776560208201527f656e203120616e6420323420686f757273000000000000000000000000000000604082015250565b5f6132d2605183612865565b91506132dd82613252565b606082019050919050565b5f6020820190508181035f8301526132ff816132c6565b9050919050565b7f5245545249425554494f4e5f4469766964656e645f547261636b65723a2043615f8201527f6e6e6f742075706461746520636c61696d5761697420746f2073616d6520766160208201527f6c75650000000000000000000000000000000000000000000000000000000000604082015250565b5f613386604383612865565b915061339182613306565b606082019050919050565b5f6020820190508181035f8301526133b38161337a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613414602683612865565b915061341f826133ba565b604082019050919050565b5f6020820190508181035f83015261344181613408565b9050919050565b61345181612b18565b811461345b575f80fd5b50565b5f8151905061346c81613448565b92915050565b5f6020828403121561348757613486612905565b5b5f6134948482850161345e565b91505092915050565b5f6134a782612963565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134d9576134d8612d46565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61351b82612963565b915061352683612963565b925082820261353481612963565b9150828204841483151761354b5761354a612d46565b5b5092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6135ac602483612865565b91506135b782613552565b604082019050919050565b5f6020820190508181035f8301526135d9816135a0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61363a602283612865565b9150613645826135e0565b604082019050919050565b5f6020820190508181035f8301526136678161362e565b9050919050565b7f5245545249425554494f4e5f4469766964656e645f547261636b65723a204e6f5f8201527f207472616e736665727320616c6c6f7765640000000000000000000000000000602082015250565b5f6136c8603283612865565b91506136d38261366e565b604082019050919050565b5f6020820190508181035f8301526136f5816136bc565b9050919050565b7f53616665436173743a2076616c756520646f65736e27742066697420696e20615f8201527f6e20696e74323536000000000000000000000000000000000000000000000000602082015250565b5f613756602883612865565b9150613761826136fc565b604082019050919050565b5f6020820190508181035f8301526137838161374a565b9050919050565b5f61379482612b18565b915061379f83612b18565b92508282019050828112155f8312168382125f8412151617156137c5576137c4612d46565b5b92915050565b7f53616665436173743a2076616c7565206d75737420626520706f7369746976655f82015250565b5f6137ff602083612865565b915061380a826137cb565b602082019050919050565b5f6020820190508181035f83015261382c816137f3565b9050919050565b5f61383d82612963565b915061384883612963565b92508282039050818111156138605761385f612d46565b5b92915050565b5f81905092915050565b50565b5f61387e5f83613866565b915061388982613870565b5f82019050919050565b5f61389d82613873565b9150819050919050565b5f6138b182612b18565b91506138bc83612b18565b925082820390508181125f8412168282135f8512151617156138e1576138e0612d46565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f61391b601f83612865565b9150613926826138e7565b602082019050919050565b5f6020820190508181035f8301526139488161390f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139a9602183612865565b91506139b48261394f565b604082019050919050565b5f6020820190508181035f8301526139d68161399d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a37602283612865565b9150613a42826139dd565b604082019050919050565b5f6020820190508181035f830152613a6481613a2b565b905091905056fea264697066735822122090cf4a50b83d7f481d2e8ae1436f3f17011a300c4212c591ff78c5e25d5ae04664736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b5245545249425554494f4e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065245545249420000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c806370a082311161018f578063ad56c13c116100db578063dd62ed3e11610094578063e98030c71161006e578063e98030c714610b5d578063f27fd25414610b85578063f2fde38b14610bc8578063fd3289f814610bf0576102ee565b8063dd62ed3e14610acd578063e2f4560514610b09578063e7841ec014610b33576102ee565b8063ad56c13c146109ac578063b62496f5146109ef578063c024666814610a2b578063c34c591214610a53578063c492f04614610a7d578063c49b9a8014610aa5576102ee565b806395d89b4111610148578063a26579ad11610122578063a26579ad146108ce578063a457c2d7146108f8578063a8b9d24014610934578063a9059cbb14610970576102ee565b806395d89b41146108525780639a7a23d61461087c5780639c1b8af5146108a4576102ee565b806370a082311461075a578063715018a61461079657806375f0a874146107ac578063871c128d146107d65780638da5cb5b146107fe5780638ea5220f14610828576102ee565b806349928a501161024e57806364b0f653116102075780636827e764116101e15780636827e764146106a25780636843cd84146106cc5780636b67c4df14610708578063700bb19114610732576102ee565b806364b0f65314610614578063658c27a91461063e57806365b8dbc01461067a576102ee565b806349928a501461051e57806349bd5a5e146105465780634a74bb02146105705780634e71d92d1461059a5780634fbee193146105b05780635b89029c146105ec576102ee565b806323b872dd116102a057806323b872dd146104005780632c1f52161461043c57806330bb4cff14610466578063313ce5671461049057806331e79db0146104ba57806339509351146104e2576102ee565b806302259e9e146102f257806306fdde031461031c578063095ea7b31461034657806313114a9d146103825780631694505e146103ac57806318160ddd146103d6576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610c18565b60405161031391906139f0565b60405180910390f35b348015610327575f80fd5b50610330610c1e565b60405161033d9190613a93565b60405180910390f35b348015610351575f80fd5b5061036c60048036038101906103679190613b3f565b610cae565b6040516103799190613b97565b60405180910390f35b34801561038d575f80fd5b50610396610ccb565b6040516103a391906139f0565b60405180910390f35b3480156103b7575f80fd5b506103c0610cd1565b6040516103cd9190613c0b565b60405180910390f35b3480156103e1575f80fd5b506103ea610cf6565b6040516103f791906139f0565b60405180910390f35b34801561040b575f80fd5b5061042660048036038101906104219190613c24565b610cff565b6040516104339190613b97565b60405180910390f35b348015610447575f80fd5b50610450610df1565b60405161045d9190613ca5565b60405180910390f35b348015610471575f80fd5b5061047a610e16565b60405161048791906139f0565b60405180910390f35b34801561049b575f80fd5b506104a4610eaa565b6040516104b19190613cd9565b60405180910390f35b3480156104c5575f80fd5b506104e060048036038101906104db9190613cf2565b610eb2565b005b3480156104ed575f80fd5b5061050860048036038101906105039190613b3f565b610fb8565b6040516105159190613b97565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f9190613cf2565b61105f565b005b348015610551575f80fd5b5061055a61120f565b6040516105679190613d2c565b60405180910390f35b34801561057b575f80fd5b50610584611233565b6040516105919190613b97565b60405180910390f35b3480156105a5575f80fd5b506105ae611246565b005b3480156105bb575f80fd5b506105d660048036038101906105d19190613cf2565b6112e5565b6040516105e39190613b97565b60405180910390f35b3480156105f7575f80fd5b50610612600480360381019061060d9190613d6f565b611337565b005b34801561061f575f80fd5b5061062861140b565b60405161063591906139f0565b60405180910390f35b348015610649575f80fd5b50610664600480360381019061065f9190613cf2565b61149f565b6040516106719190613b97565b60405180910390f35b348015610685575f80fd5b506106a0600480360381019061069b9190613cf2565b6114f1565b005b3480156106ad575f80fd5b506106b66116ba565b6040516106c391906139f0565b60405180910390f35b3480156106d7575f80fd5b506106f260048036038101906106ed9190613cf2565b6116c0565b6040516106ff91906139f0565b60405180910390f35b348015610713575f80fd5b5061071c611761565b60405161072991906139f0565b60405180910390f35b34801561073d575f80fd5b5061075860048036038101906107539190613dad565b611767565b005b348015610765575f80fd5b50610780600480360381019061077b9190613cf2565b611867565b60405161078d91906139f0565b60405180910390f35b3480156107a1575f80fd5b506107aa6118ac565b005b3480156107b7575f80fd5b506107c0611933565b6040516107cd9190613df8565b60405180910390f35b3480156107e1575f80fd5b506107fc60048036038101906107f79190613dad565b611958565b005b348015610809575f80fd5b50610812611aa7565b60405161081f9190613d2c565b60405180910390f35b348015610833575f80fd5b5061083c611acf565b6040516108499190613df8565b60405180910390f35b34801561085d575f80fd5b50610866611af4565b6040516108739190613a93565b60405180910390f35b348015610887575f80fd5b506108a2600480360381019061089d9190613d6f565b611b84565b005b3480156108af575f80fd5b506108b8611c9c565b6040516108c591906139f0565b60405180910390f35b3480156108d9575f80fd5b506108e2611ca2565b6040516108ef91906139f0565b60405180910390f35b348015610903575f80fd5b5061091e60048036038101906109199190613b3f565b611d36565b60405161092b9190613b97565b60405180910390f35b34801561093f575f80fd5b5061095a60048036038101906109559190613cf2565b611e1c565b60405161096791906139f0565b60405180910390f35b34801561097b575f80fd5b5061099660048036038101906109919190613b3f565b611ebd565b6040516109a39190613b97565b60405180910390f35b3480156109b7575f80fd5b506109d260048036038101906109cd9190613cf2565b611eda565b6040516109e6989796959493929190613e29565b60405180910390f35b3480156109fa575f80fd5b50610a156004803603810190610a109190613cf2565b611f97565b604051610a229190613b97565b60405180910390f35b348015610a36575f80fd5b50610a516004803603810190610a4c9190613d6f565b611fb4565b005b348015610a5e575f80fd5b50610a67612165565b604051610a7491906139f0565b60405180910390f35b348015610a88575f80fd5b50610aa36004803603810190610a9e9190613f06565b61216b565b005b348015610ab0575f80fd5b50610acb6004803603810190610ac69190613f63565b6122c3565b005b348015610ad8575f80fd5b50610af36004803603810190610aee9190613f8e565b612393565b604051610b0091906139f0565b60405180910390f35b348015610b14575f80fd5b50610b1d612415565b604051610b2a91906139f0565b60405180910390f35b348015610b3e575f80fd5b50610b4761241b565b604051610b5491906139f0565b60405180910390f35b348015610b68575f80fd5b50610b836004803603810190610b7e9190613dad565b6124af565b005b348015610b90575f80fd5b50610bab6004803603810190610ba69190613dad565b6125b5565b604051610bbf989796959493929190613e29565b60405180910390f35b348015610bd3575f80fd5b50610bee6004803603810190610be99190613cf2565b612672565b005b348015610bfb575f80fd5b50610c166004803603810190610c119190613dad565b612768565b005b60085481565b606060038054610c2d90613ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5990613ff9565b8015610ca45780601f10610c7b57610100808354040283529160200191610ca4565b820191905f5260205f20905b815481529060010190602001808311610c8757829003601f168201915b5050505050905090565b5f610cc1610cba6127ee565b84846127f5565b6001905092915050565b600d5481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f610d0b8484846129b8565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d526127ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc890614099565b60405180910390fd5b610de585610ddd6127ee565b8584036127f5565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea591906140cb565b905090565b5f6012905090565b610eba6127ee565b73ffffffffffffffffffffffffffffffffffffffff16610ed8611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614610f2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614140565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b8152600401610f889190613d2c565b5f604051808303815f87803b158015610f9f575f80fd5b505af1158015610fb1573d5f803e3d5ffd5b5050505050565b5f611055610fc46127ee565b848460015f610fd16127ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611050919061418b565b6127f5565b6001905092915050565b6110676127ee565b73ffffffffffffffffffffffffffffffffffffffff16611085611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290614140565b60405180910390fd5b600160125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0826040518263ffffffff1660e01b81526004016111df9190613d2c565b5f604051808303815f87803b1580156111f6575f80fd5b505af1158015611208573d5f803e3d5ffd5b5050505050565b7f00000000000000000000000039017cdbc84101d737d2410d67fca3ac0783b90f81565b600660159054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc4c4b37335f6040518363ffffffff1660e01b81526004016112a29291906141be565b6020604051808303815f875af11580156112be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e291906141f9565b50565b5f60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b61133f6127ee565b73ffffffffffffffffffffffffffffffffffffffff1661135d611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa90614140565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166309bbedde6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611476573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149a91906140cb565b905090565b5f60125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6114f96127ee565b73ffffffffffffffffffffffffffffffffffffffff16611517611aa7565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614140565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f390614294565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c5481565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161171b9190613d2c565b602060405180830381865afa158015611736573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175a91906140cb565b9050919050565b600b5481565b5f805f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479856040518263ffffffff1660e01b81526004016117c491906139f0565b6060604051808303815f875af11580156117e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180491906142b2565b9250925092503273ffffffffffffffffffffffffffffffffffffffff165f15157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585896040516118599493929190614302565b60405180910390a350505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6118b46127ee565b73ffffffffffffffffffffffffffffffffffffffff166118d2611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614611928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191f90614140565b60405180910390fd5b6119315f612fb2565b565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119606127ee565b73ffffffffffffffffffffffffffffffffffffffff1661197e611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90614140565b60405180910390fd5b62030d4081101580156119ea57506207a1208111155b611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a20906143db565b60405180910390fd5b6010548103611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490614469565b60405180910390fd5b601054817f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db760405160405180910390a38060108190555050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054611b0390613ff9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2f90613ff9565b8015611b7a5780601f10611b5157610100808354040283529160200191611b7a565b820191905f5260205f20905b815481529060010190602001808311611b5d57829003601f168201915b5050505050905090565b611b8c6127ee565b73ffffffffffffffffffffffffffffffffffffffff16611baa611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790614140565b60405180910390fd5b7f00000000000000000000000039017cdbc84101d737d2410d67fca3ac0783b90f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c859061451d565b60405180910390fd5b611c988282613075565b5050565b60105481565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f2789ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3191906140cb565b905090565b5f8060015f611d436127ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df4906145ab565b60405180910390fd5b611e11611e086127ee565b858584036127f5565b600191505092915050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b8152600401611e779190613d2c565b602060405180830381865afa158015611e92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb691906140cb565b9050919050565b5f611ed0611ec96127ee565b84846129b8565b6001905092915050565b5f805f805f805f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f18a6040518263ffffffff1660e01b8152600401611f3c9190613d2c565b61010060405180830381865afa158015611f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190614607565b97509750975097509750975097509750919395975091939597565b6013602052805f5260405f205f915054906101000a900460ff1681565b611fbc6127ee565b73ffffffffffffffffffffffffffffffffffffffff16611fda611aa7565b73ffffffffffffffffffffffffffffffffffffffff1614612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790614140565b60405180910390fd5b80151560115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036120bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b690614728565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121599190613b97565b60405180910390a25050565b600a5481565b6121736127ee565b73ffffffffffffffffffffffffffffffffffffffff16612191611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90614140565b60405180910390fd5b5f5b83839050811015612282578160115f86868581811061220b5761220a614746565b5b90506020020160208101906122209190613cf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808061227a90614773565b9150506121e9565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516122b693929190614876565b60405180910390a1505050565b6122cb6127ee565b73ffffffffffffffffffffffffffffffffffffffff166122e9611aa7565b73ffffffffffffffffffffffffffffffffffffffff161461233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233690614140565b60405180910390fd5b80600660156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123889190613b97565b60405180910390a150565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e7841ec06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612486573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124aa91906140cb565b905090565b6124b76127ee565b73ffffffffffffffffffffffffffffffffffffffff166124d5611aa7565b73ffffffffffffffffffffffffffffffffffffffff161461252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614140565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e98030c7826040518263ffffffff1660e01b815260040161258591906139f0565b5f604051808303815f87803b15801561259c575f80fd5b505af11580156125ae573d5f803e3d5ffd5b5050505050565b5f805f805f805f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635183d6fd8a6040518263ffffffff1660e01b815260040161261791906139f0565b61010060405180830381865afa158015612633573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126579190614607565b97509750975097509750975097509750919395975091939597565b61267a6127ee565b73ffffffffffffffffffffffffffffffffffffffff16612698611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146126ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e590614140565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275390614916565b60405180910390fd5b61276581612fb2565b50565b6127706127ee565b73ffffffffffffffffffffffffffffffffffffffff1661278e611aa7565b73ffffffffffffffffffffffffffffffffffffffff16146127e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127db90614140565b60405180910390fd5b8060088190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285a906149a4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c890614a32565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129ab91906139f0565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1d90614ac0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b90614b4e565b60405180910390fd5b5f8103612aab57612aa683835f613230565b612fad565b60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612b48575060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612b9b575060125f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612be657600854811115612be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdc90614bdc565b60405180910390fd5b5b5f612bf030611867565b90505f6009548210159050808015612c155750600660149054906101000a900460ff16155b8015612c68575060135f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c805750600660159054906101000a900460ff165b15612c9157612c906009546134a5565b5b60115f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612d2f575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d73575f6064600d5485612d459190614bfa565b612d4f9190614c68565b9050612d64818561371890919063ffffffff16565b9350612d71863083613230565b505b612d7e858585613230565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc86612dc588611867565b6040518363ffffffff1660e01b8152600401612de2929190614c98565b5f604051808303815f87803b158015612df9575f80fd5b505af1925050508015612e0a575060015b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc85612e5287611867565b6040518363ffffffff1660e01b8152600401612e6f929190614c98565b5f604051808303815f87803b158015612e86575f80fd5b505af1925050508015612e97575060015b50600660149054906101000a900460ff16612faa575f601054905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479826040518263ffffffff1660e01b8152600401612f0c91906139f0565b6060604051808303815f875af1925050508015612f4757506040513d601f19601f82011682018060405250810190612f4491906142b2565b60015b15612fa8573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a9885858589604051612f9c9493929190614302565b60405180910390a35050505b505b50505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503613104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fb90614d55565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080156131e65760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166331e79db0836040518263ffffffff1660e01b81526004016131b89190613d2c565b5f604051808303815f87803b1580156131cf575f80fd5b505af11580156131e1573d5f803e3d5ffd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361329e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329590614ac0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361330c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330390614b4e565b60405180910390fd5b61331783838361372d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561339a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339190614de3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613428919061418b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161348c91906139f0565b60405180910390a361349f848484613732565b50505050565b6001600660146101000a81548160ff0219169083151502179055506134ca8130613737565b5f4790505f6134f8600d546134ea600b54856139ae90919063ffffffff16565b6139c390919063ffffffff16565b9050600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561355e573d5f803e3d5ffd5b505f613589600d5461357b600c54866139ae90919063ffffffff16565b6139c390919063ffffffff16565b9050600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156135ef573d5f803e3d5ffd5b505f4790505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161363a90614e2e565b5f6040518083038185875af1925050503d805f8114613674576040519150601f19603f3d011682016040523d82523d5f602084013e613679565b606091505b5050905080156136bd577f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc386836040516136b4929190614e42565b60405180910390a15b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148686866040516136ee929190614e42565b60405180910390a150505050505f600660146101000a81548160ff02191690831515021790555050565b5f81836137259190614e69565b905092915050565b505050565b505050565b5f600267ffffffffffffffff81111561375357613752614e9c565b5b6040519080825280602002602001820160405280156137815781602001602082028036833780820191505090505b50905030815f8151811061379857613797614746565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138609190614ec9565b8160018151811061387457613873614746565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050826138da3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612393565b101561390e5761390d3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f196127f5565b5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8486601e4261395c919061418b565b6040518663ffffffff1660e01b815260040161397c959493929190614fae565b5f604051808303815f87803b158015613993575f80fd5b505af11580156139a5573d5f803e3d5ffd5b50505050505050565b5f81836139bb9190614bfa565b905092915050565b5f81836139d09190614c68565b905092915050565b5f819050919050565b6139ea816139d8565b82525050565b5f602082019050613a035f8301846139e1565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613a40578082015181840152602081019050613a25565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613a6582613a09565b613a6f8185613a13565b9350613a7f818560208601613a23565b613a8881613a4b565b840191505092915050565b5f6020820190508181035f830152613aab8184613a5b565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ae482613abb565b9050919050565b613af481613ada565b8114613afe575f80fd5b50565b5f81359050613b0f81613aeb565b92915050565b613b1e816139d8565b8114613b28575f80fd5b50565b5f81359050613b3981613b15565b92915050565b5f8060408385031215613b5557613b54613ab3565b5b5f613b6285828601613b01565b9250506020613b7385828601613b2b565b9150509250929050565b5f8115159050919050565b613b9181613b7d565b82525050565b5f602082019050613baa5f830184613b88565b92915050565b5f819050919050565b5f613bd3613bce613bc984613abb565b613bb0565b613abb565b9050919050565b5f613be482613bb9565b9050919050565b5f613bf582613bda565b9050919050565b613c0581613beb565b82525050565b5f602082019050613c1e5f830184613bfc565b92915050565b5f805f60608486031215613c3b57613c3a613ab3565b5b5f613c4886828701613b01565b9350506020613c5986828701613b01565b9250506040613c6a86828701613b2b565b9150509250925092565b5f613c7e82613bb9565b9050919050565b5f613c8f82613c74565b9050919050565b613c9f81613c85565b82525050565b5f602082019050613cb85f830184613c96565b92915050565b5f60ff82169050919050565b613cd381613cbe565b82525050565b5f602082019050613cec5f830184613cca565b92915050565b5f60208284031215613d0757613d06613ab3565b5b5f613d1484828501613b01565b91505092915050565b613d2681613ada565b82525050565b5f602082019050613d3f5f830184613d1d565b92915050565b613d4e81613b7d565b8114613d58575f80fd5b50565b5f81359050613d6981613d45565b92915050565b5f8060408385031215613d8557613d84613ab3565b5b5f613d9285828601613b01565b9250506020613da385828601613d5b565b9150509250929050565b5f60208284031215613dc257613dc1613ab3565b5b5f613dcf84828501613b2b565b91505092915050565b5f613de282613abb565b9050919050565b613df281613dd8565b82525050565b5f602082019050613e0b5f830184613de9565b92915050565b5f819050919050565b613e2381613e11565b82525050565b5f61010082019050613e3d5f83018b613d1d565b613e4a602083018a613e1a565b613e576040830189613e1a565b613e6460608301886139e1565b613e7160808301876139e1565b613e7e60a08301866139e1565b613e8b60c08301856139e1565b613e9860e08301846139e1565b9998505050505050505050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613ec657613ec5613ea5565b5b8235905067ffffffffffffffff811115613ee357613ee2613ea9565b5b602083019150836020820283011115613eff57613efe613ead565b5b9250929050565b5f805f60408486031215613f1d57613f1c613ab3565b5b5f84013567ffffffffffffffff811115613f3a57613f39613ab7565b5b613f4686828701613eb1565b93509350506020613f5986828701613d5b565b9150509250925092565b5f60208284031215613f7857613f77613ab3565b5b5f613f8584828501613d5b565b91505092915050565b5f8060408385031215613fa457613fa3613ab3565b5b5f613fb185828601613b01565b9250506020613fc285828601613b01565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061401057607f821691505b60208210810361402357614022613fcc565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614083602883613a13565b915061408e82614029565b604082019050919050565b5f6020820190508181035f8301526140b081614077565b9050919050565b5f815190506140c581613b15565b92915050565b5f602082840312156140e0576140df613ab3565b5b5f6140ed848285016140b7565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61412a602083613a13565b9150614135826140f6565b602082019050919050565b5f6020820190508181035f8301526141578161411e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614195826139d8565b91506141a0836139d8565b92508282019050808211156141b8576141b761415e565b5b92915050565b5f6040820190506141d15f830185613de9565b6141de6020830184613b88565b9392505050565b5f815190506141f381613d45565b92915050565b5f6020828403121561420e5761420d613ab3565b5b5f61421b848285016141e5565b91505092915050565b7f5245545249425554494f4e3a2054686520726f7574657220616c7265616479205f8201527f6861732074686174206164647265737300000000000000000000000000000000602082015250565b5f61427e603083613a13565b915061428982614224565b604082019050919050565b5f6020820190508181035f8301526142ab81614272565b9050919050565b5f805f606084860312156142c9576142c8613ab3565b5b5f6142d6868287016140b7565b93505060206142e7868287016140b7565b92505060406142f8868287016140b7565b9150509250925092565b5f6080820190506143155f8301876139e1565b61432260208301866139e1565b61432f60408301856139e1565b61433c60608301846139e1565b95945050505050565b7f5245545249425554494f4e3a20676173466f7250726f63657373696e67206d755f8201527f7374206265206265747765656e203230302c30303020616e64203530302c303060208201527f3000000000000000000000000000000000000000000000000000000000000000604082015250565b5f6143c5604183613a13565b91506143d082614345565b606082019050919050565b5f6020820190508181035f8301526143f2816143b9565b9050919050565b7f5245545249425554494f4e3a2043616e6e6f742075706461746520676173466f5f8201527f7250726f63657373696e6720746f2073616d652076616c756500000000000000602082015250565b5f614453603983613a13565b915061445e826143f9565b604082019050919050565b5f6020820190508181035f83015261448081614447565b9050919050565b7f5245545249425554494f4e3a205468652050616e63616b6553776170207061695f8201527f722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617460208201527f65644d61726b65744d616b657250616972730000000000000000000000000000604082015250565b5f614507605283613a13565b915061451282614487565b606082019050919050565b5f6020820190508181035f830152614534816144fb565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614595602583613a13565b91506145a08261453b565b604082019050919050565b5f6020820190508181035f8301526145c281614589565b9050919050565b5f815190506145d781613aeb565b92915050565b6145e681613e11565b81146145f0575f80fd5b50565b5f81519050614601816145dd565b92915050565b5f805f805f805f80610100898b03121561462457614623613ab3565b5b5f6146318b828c016145c9565b98505060206146428b828c016145f3565b97505060406146538b828c016145f3565b96505060606146648b828c016140b7565b95505060806146758b828c016140b7565b94505060a06146868b828c016140b7565b93505060c06146978b828c016140b7565b92505060e06146a88b828c016140b7565b9150509295985092959890939650565b7f5245545249425554494f4e3a204163636f756e7420697320616c7265616479205f8201527f7468652076616c7565206f6620276578636c7564656427000000000000000000602082015250565b5f614712603783613a13565b915061471d826146b8565b604082019050919050565b5f6020820190508181035f83015261473f81614706565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61477d826139d8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147af576147ae61415e565b5b600182019050919050565b5f82825260208201905092915050565b5f819050919050565b6147dc81613ada565b82525050565b5f6147ed83836147d3565b60208301905092915050565b5f6148076020840184613b01565b905092915050565b5f602082019050919050565b5f61482683856147ba565b9350614831826147ca565b805f5b858110156148695761484682846147f9565b61485088826147e2565b975061485b8361480f565b925050600181019050614834565b5085925050509392505050565b5f6040820190508181035f83015261488f81858761481b565b905061489e6020830184613b88565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614900602683613a13565b915061490b826148a6565b604082019050919050565b5f6020820190508181035f83015261492d816148f4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61498e602483613a13565b915061499982614934565b604082019050919050565b5f6020820190508181035f8301526149bb81614982565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614a1c602283613a13565b9150614a27826149c2565b604082019050919050565b5f6020820190508181035f830152614a4981614a10565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614aaa602583613a13565b9150614ab582614a50565b604082019050919050565b5f6020820190508181035f830152614ad781614a9e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614b38602383613a13565b9150614b4382614ade565b604082019050919050565b5f6020820190508181035f830152614b6581614b2c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e000000000000602082015250565b5f614bc6603a83613a13565b9150614bd182614b6c565b604082019050919050565b5f6020820190508181035f830152614bf381614bba565b9050919050565b5f614c04826139d8565b9150614c0f836139d8565b9250828202614c1d816139d8565b91508282048414831517614c3457614c3361415e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614c72826139d8565b9150614c7d836139d8565b925082614c8d57614c8c614c3b565b5b828204905092915050565b5f604082019050614cab5f830185613de9565b614cb860208301846139e1565b9392505050565b7f5245545249425554494f4e3a204175746f6d61746564206d61726b6574206d615f8201527f6b6572207061697220697320616c72656164792073657420746f20746861742060208201527f76616c7565000000000000000000000000000000000000000000000000000000604082015250565b5f614d3f604583613a13565b9150614d4a82614cbf565b606082019050919050565b5f6020820190508181035f830152614d6c81614d33565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614dcd602683613a13565b9150614dd882614d73565b604082019050919050565b5f6020820190508181035f830152614dfa81614dc1565b9050919050565b5f81905092915050565b50565b5f614e195f83614e01565b9150614e2482614e0b565b5f82019050919050565b5f614e3882614e0e565b9150819050919050565b5f604082019050614e555f8301856139e1565b614e6260208301846139e1565b9392505050565b5f614e73826139d8565b9150614e7e836139d8565b9250828203905081811115614e9657614e9561415e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215614ede57614edd613ab3565b5b5f614eeb848285016145c9565b91505092915050565b5f819050919050565b5f614f17614f12614f0d84614ef4565b613bb0565b6139d8565b9050919050565b614f2781614efd565b82525050565b5f81519050919050565b5f819050602082019050919050565b5f602082019050919050565b5f614f5c82614f2d565b614f6681856147ba565b9350614f7183614f37565b805f5b83811015614fa1578151614f8888826147e2565b9750614f9383614f46565b925050600181019050614f74565b5085935050505092915050565b5f60a082019050614fc15f8301886139e1565b614fce6020830187614f1e565b8181036040830152614fe08186614f52565b9050614fef6060830185613d1d565b614ffc60808301846139e1565b969550505050505056fea2646970667358221220c8e26e6f2ba6bca52a49eaf65b45d6d11e3e0f03b599baeceaa2d650fdd5825264736f6c63430008140033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b5245545249425554494f4e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065245545249420000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): RETRIBUTION
Arg [1] : _symbol (string): RETRIB

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [3] : 5245545249425554494f4e000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 5245545249420000000000000000000000000000000000000000000000000000


Library Used


Deployed Bytecode Sourcemap

25333:11836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25648:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6924:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7848:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25877:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25414:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7249:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8025:460;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25590:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31557:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7146:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33622:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8495:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29644:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25462:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25543:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33225:103;;;;;;;;;;;;;:::i;:::-;;31706:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29502:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33473:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31843:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28859:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25849:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32137:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25815:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32946:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7367:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11881:94;;;;;;;;;;;;;:::i;:::-;;25916:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30883:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11656:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25962:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7034:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30186:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26004:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31441:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8720:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31978:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7504:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32284:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;26171:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29187:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25780:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29874:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33766:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7687:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25717:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33336:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31309:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32610:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;11983:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27130:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25648:62;;;;:::o;6924:100::-;6978:13;7011:5;7004:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6924:100;:::o;7848:169::-;7931:4;7948:39;7957:12;:10;:12::i;:::-;7971:7;7980:6;7948:8;:39::i;:::-;8005:4;7998:11;;7848:169;;;;:::o;25877:24::-;;;;:::o;25414:41::-;;;;;;;;;;;;;:::o;7249:108::-;7310:7;7337:12;;7330:19;;7249:108;:::o;8025:460::-;8131:4;8154:36;8164:6;8172:9;8183:6;8154:9;:36::i;:::-;8201:24;8228:11;:19;8240:6;8228:19;;;;;;;;;;;;;;;:33;8248:12;:10;:12::i;:::-;8228:33;;;;;;;;;;;;;;;;8201:60;;8300:6;8280:16;:26;;8272:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8387:57;8396:6;8404:12;:10;:12::i;:::-;8437:6;8418:16;:25;8387:8;:57::i;:::-;8473:4;8466:11;;;8025:460;;;;;:::o;25590:49::-;;;;;;;;;;;;;:::o;31557:141::-;31620:7;31647:15;;;;;;;;;;;:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31640:50;;31557:141;:::o;7146:93::-;7204:5;7229:2;7222:9;;7146:93;:::o;33622:136::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33705:15:::1;;;;;;;;;;;:36;;;33742:7;33705:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33622:136:::0;:::o;8495:215::-;8583:4;8600:80;8609:12;:10;:12::i;:::-;8623:7;8669:10;8632:11;:25;8644:12;:10;:12::i;:::-;8632:25;;;;;;;;;;;;;;;:34;8658:7;8632:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8600:8;:80::i;:::-;8698:4;8691:11;;8495:215;;;;:::o;29644:222::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29750:4:::1;29717:20;:30;29738:8;29717:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;29797:4;29765:19;:29;29785:8;29765:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;29812:15;;;;;;;;;;;:36;;;29849:8;29812:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29644:222:::0;:::o;25462:38::-;;;:::o;25543:40::-;;;;;;;;;;;;;:::o;33225:103::-;33262:15;;;;;;;;;;;:30;;;33301:10;33314:5;33262:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33225:103::o;31706:125::-;31771:4;31795:19;:28;31815:7;31795:28;;;;;;;;;;;;;;;;;;;;;;;;;31788:35;;31706:125;;;:::o;29502:134::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29623:5:::1;29590:20;:30;29611:8;29590:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;29502:134:::0;;:::o;33473:141::-;33538:7;33565:15;;;;;;;;;;;:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33558:48;;33473:141;:::o;31843:127::-;31909:4;31933:20;:29;31954:7;31933:29;;;;;;;;;;;;;;;;;;;;;;;;;31926:36;;31843:127;;;:::o;28859:320::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28968:15:::1;;;;;;;;;;;28946:38;;:10;:38;;::::0;28938:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29095:15;;;;;;;;;;;29053:59;;29075:10;29053:59;;;;;;;;;;;;29160:10;29123:15;;:48;;;;;;;;;;;;;;;;;;28859:320:::0;:::o;25849:21::-;;;;:::o;32137:139::-;32207:7;32234:15;;;;;;;;;;;:25;;;32260:7;32234:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32227:41;;32137:139;;;:::o;25815:27::-;;;;:::o;32946:271::-;33012:18;33032:14;33048:26;33078:15;;;;;;;;;;;:23;;;33102:3;33078:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33011:95;;;;;;33199:9;33122:87;;33187:5;33122:87;;;33147:10;33159:6;33167:18;33194:3;33122:87;;;;;;;;;:::i;:::-;;;;;;;;33000:217;;;32946:271;:::o;7367:127::-;7441:7;7468:9;:18;7478:7;7468:18;;;;;;;;;;;;;;;;7461:25;;7367:127;;;:::o;11881:94::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11946:21:::1;11964:1;11946:9;:21::i;:::-;11881:94::o:0;25916:39::-;;;;;;;;;;;;;:::o;30883:418::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30981:6:::1;30969:8;:18;;:40;;;;;31003:6;30991:8;:18;;30969:40;30961:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;31110:16;;31098:8;:28:::0;31090:98:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31238:16;;31228:8;31204:51;;;;;;;;;;31285:8;31266:16;:27;;;;30883:418:::0;:::o;11656:87::-;11702:7;11729:6;;;;;;;;;;;11722:13;;11656:87;:::o;25962:33::-;;;;;;;;;;;;;:::o;7034:104::-;7090:13;7123:7;7116:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7034:104;:::o;30186:269::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30293:13:::1;30285:21;;:4;:21;;::::0;30277:116:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30406:41;30435:4;30441:5;30406:28;:41::i;:::-;30186:269:::0;;:::o;26004:40::-;;;;:::o;31441:108::-;31487:7;31514:15;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31507:34;;31441:108;:::o;8720:413::-;8813:4;8830:24;8857:11;:25;8869:12;:10;:12::i;:::-;8857:25;;;;;;;;;;;;;;;:34;8883:7;8857:34;;;;;;;;;;;;;;;;8830:61;;8930:15;8910:16;:35;;8902:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9023:67;9032:12;:10;:12::i;:::-;9046:7;9074:15;9055:16;:34;9023:8;:67::i;:::-;9121:4;9114:11;;;8720:413;;;;:::o;31978:151::-;32047:7;32074:15;;;;;;;;;;;:38;;;32113:7;32074:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32067:54;;31978:151;;;:::o;7504:175::-;7590:4;7607:42;7617:12;:10;:12::i;:::-;7631:9;7642:6;7607:9;:42::i;:::-;7667:4;7660:11;;7504:175;;;;:::o;32284:318::-;32380:7;32402:6;32423;32444:7;32466;32488;32510;32532;32559:15;;;;;;;;;;;:26;;;32586:7;32559:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32552:42;;;;;;;;;;;;;;;;32284:318;;;;;;;;;:::o;26171:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29187:303::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29312:8:::1;29280:40;;:19;:28;29300:7;29280:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;29272:108:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29422:8;29391:19;:28;29411:7;29391:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29464:7;29448:34;;;29473:8;29448:34;;;;;;:::i;:::-;;;;;;;;29187:303:::0;;:::o;25780:28::-;;;;:::o;29874:304::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29991:9:::1;29987:115;30010:8;;:15;;30006:1;:19;29987:115;;;30082:8;30047:19;:32;30067:8;;30076:1;30067:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30047:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;30027:3;;;;;:::i;:::-;;;;29987:115;;;;30119:51;30151:8;;30161;30119:51;;;;;;;;:::i;:::-;;;;;;;;29874:304:::0;;;:::o;33766:171::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33867:8:::1;33843:21;;:32;;;;;;;;;;;;;;;;;;33891:38;33920:8;33891:38;;;;;;:::i;:::-;;;;;;;;33766:171:::0;:::o;7687:151::-;7776:7;7803:11;:18;7815:5;7803:18;;;;;;;;;;;;;;;:27;7822:7;7803:27;;;;;;;;;;;;;;;;7796:34;;7687:151;;;;:::o;25717:54::-;;;;:::o;33336:129::-;33391:7;33418:15;;;;;;;;;;;:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33411:46;;33336:129;:::o;31309:124::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31383:15:::1;;;;;;;;;;;:31;;;31415:9;31383:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31309:124:::0;:::o;32610:328::-;32711:7;32733:6;32754;32775:7;32797;32819;32841;32863;32890:15;;;;;;;;;;;:33;;;32924:5;32890:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32883:47;;;;;;;;;;;;;;;;32610:328;;;;;;;;;:::o;11983:192::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12092:1:::1;12072:22;;:8;:22;;::::0;12064:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12148:19;12158:8;12148:9;:19::i;:::-;11983:192:::0;:::o;27130:123::-;11804:12;:10;:12::i;:::-;11793:23;;:7;:5;:7::i;:::-;:23;;;11785:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27229:16:::1;27202:24;:43;;;;27130:123:::0;:::o;5402:98::-;5455:7;5482:10;5475:17;;5402:98;:::o;10870:350::-;10995:1;10978:19;;:5;:19;;;10970:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11076:1;11057:21;;:7;:21;;;11049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11158:6;11128:11;:18;11140:5;11128:18;;;;;;;;;;;;;;;:27;11147:7;11128:27;;;;;;;;;;;;;;;:36;;;;11196:7;11180:32;;11189:5;11180:32;;;11205:6;11180:32;;;;;;:::i;:::-;;;;;;;;10870:350;;;:::o;33945:1852::-;34065:1;34049:18;;:4;:18;;;34041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34142:1;34128:16;;:2;:16;;;34120:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34210:1;34200:6;:11;34197:92;;34228:28;34244:4;34250:2;34254:1;34228:15;:28::i;:::-;34271:7;;34197:92;34304:25;:29;34330:2;34304:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;34339:20;:26;34360:4;34339:26;;;;;;;;;;;;;;;;;;;;;;;;;34338:27;34304:62;:93;;;;;34372:20;:24;34393:2;34372:24;;;;;;;;;;;;;;;;;;;;;;;;;34371:25;34304:93;34301:229;;;34431:24;;34421:6;:34;;34413:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34301:229;34542:28;34573:24;34591:4;34573:9;:24::i;:::-;34542:55;;34618:24;34669:18;;34645:20;:42;;34618:69;;34703:19;:50;;;;;34737:16;;;;;;;;;;;34736:17;34703:50;:96;;;;;34768:25;:31;34794:4;34768:31;;;;;;;;;;;;;;;;;;;;;;;;;34767:32;34703:96;:131;;;;;34813:21;;;;;;;;;;;34703:131;34700:207;;;34861:34;34876:18;;34861:14;:34::i;:::-;34700:207;34925:19;:25;34945:4;34925:25;;;;;;;;;;;;;;;;;;;;;;;;;34924:26;:54;;;;;34955:19;:23;34975:2;34955:23;;;;;;;;;;;;;;;;;;;;;;;;;34954:24;34924:54;34921:243;;;35005:17;35042:3;35032:9;;35025:6;:16;;;;:::i;:::-;:20;;;;:::i;:::-;35005:40;;35069:21;35080:9;35069:6;:10;;:21;;;;:::i;:::-;35060:30;;35105:47;35121:4;35135;35142:9;35105:15;:47::i;:::-;34990:174;34921:243;35176:33;35192:4;35198:2;35202:6;35176:15;:33::i;:::-;35226:15;;;;;;;;;;;:26;;;35261:4;35268:15;35278:4;35268:9;:15::i;:::-;35226:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35222:74;35310:15;;;;;;;;;;;:26;;;35345:2;35350:13;35360:2;35350:9;:13::i;:::-;35310:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35306:70;35392:16;;;;;;;;;;;35388:402;;35435:11;35449:16;;35435:30;;35484:15;;;;;;;;;;;:23;;;35508:3;35484:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35480:299;;;35700:9;35624:86;;35689:4;35624:86;;;35649:10;35661:6;35669:18;35695:3;35624:86;;;;;;;;;:::i;:::-;;;;;;;;35513:213;;;35480:299;35420:370;35388:402;34030:1767;;33945:1852;;;;:::o;12183:173::-;12239:16;12258:6;;;;;;;;;;;12239:25;;12284:8;12275:6;;:17;;;;;;;;;;;;;;;;;;12339:8;12308:40;;12329:8;12308:40;;;;;;;;;;;;12228:128;12183:173;:::o;30463:412::-;30589:5;30554:40;;:25;:31;30580:4;30554:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;30546:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;30713:5;30679:25;:31;30705:4;30679:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30734:5;30731:79;;;30756:15;;;;;;;;;;;:36;;;30793:4;30756:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30731:79;30861:5;30827:40;;30855:4;30827:40;;;;;;;;;;;;30463:412;;:::o;9143:721::-;9273:1;9255:20;;:6;:20;;;9247:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9357:1;9336:23;;:9;:23;;;9328:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9412:47;9433:6;9441:9;9452:6;9412:20;:47::i;:::-;9472:21;9496:9;:17;9506:6;9496:17;;;;;;;;;;;;;;;;9472:41;;9549:6;9532:13;:23;;9524:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9680:6;9664:13;:22;9644:9;:17;9654:6;9644:17;;;;;;;;;;;;;;;:42;;;;9742:6;9718:9;:20;9728:9;9718:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9781:9;9764:35;;9773:6;9764:35;;;9792:6;9764:35;;;;;;:::i;:::-;;;;;;;;9810:46;9830:6;9838:9;9849:6;9810:19;:46::i;:::-;9236:628;9143:721;;;:::o;35807:754::-;27059:4;27040:16;;:23;;;;;;;;;;;;;;;;;;35892:53:::1;35909:20;35939:4;35892:16;:53::i;:::-;35957:20;35980:21;35957:44;;36012:23;36038:45;36073:9;;36038:30;36055:12;;36038;:16;;:30;;;;:::i;:::-;:34;;:45;;;;:::i;:::-;36012:71;;36094:15;;;;;;;;;;;:24;;:41;36119:15;36094:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36146:17;36166:39;36195:9;;36166:24;36183:6;;36166:12;:16;;:24;;;;:::i;:::-;:28;;:39;;;;:::i;:::-;36146:59;;36216:9;;;;;;;;;;;:18;;:29;36235:9;36216:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36264:17;36284:21;36264:41;;36317:12;36342:15;;;;;;;;;;;36334:29;;36371:9;36334:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36316:69;;;36401:7;36398:90;;;36430:46;36444:20;36466:9;36430:46;;;;;;;:::i;:::-;;;;;;;;36398:90;36503:50;36518:20;36540:12;36503:50;;;;;;;:::i;:::-;;;;;;;;35881:680;;;;;27105:5:::0;27086:16;;:24;;;;;;;;;;;;;;;;;;35807:754;:::o;1193:98::-;1251:7;1282:1;1278;:5;;;;:::i;:::-;1271:12;;1193:98;;;;:::o;11230:92::-;;;;:::o;11328:90::-;;;;:::o;36569:590::-;36662:21;36700:1;36686:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36662:40;;36731:4;36713;36718:1;36713:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;36757:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36747:4;36752:1;36747:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;36848:11;36795:50;36813:4;36828:15;;;;;;;;;;;36795:9;:50::i;:::-;:64;36792:156;;;36874:62;36891:4;36906:15;;;;;;;;;;;36933:1;36924:11;36874:8;:62::i;:::-;36792:156;36958:15;;;;;;;;;;;:66;;;37039:11;37066:1;37083:4;37103:3;37138:2;37122:15;:18;;;;:::i;:::-;36958:193;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36643:516;36569:590;;:::o;1301:98::-;1359:7;1390:1;1386;:5;;;;:::i;:::-;1379:12;;1301:98;;;;:::o;1409:::-;1467:7;1498:1;1494;:5;;;;:::i;:::-;1487:12;;1409:98;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:151::-;4219:9;4252:37;4283:5;4252:37;:::i;:::-;4239:50;;4144:151;;;:::o;4301:181::-;4413:62;4469:5;4413:62;:::i;:::-;4408:3;4401:75;4301:181;;:::o;4488:272::-;4606:4;4644:2;4633:9;4629:18;4621:26;;4657:96;4750:1;4739:9;4735:17;4726:6;4657:96;:::i;:::-;4488:272;;;;:::o;4766:619::-;4843:6;4851;4859;4908:2;4896:9;4887:7;4883:23;4879:32;4876:119;;;4914:79;;:::i;:::-;4876:119;5034:1;5059:53;5104:7;5095:6;5084:9;5080:22;5059:53;:::i;:::-;5049:63;;5005:117;5161:2;5187:53;5232:7;5223:6;5212:9;5208:22;5187:53;:::i;:::-;5177:63;;5132:118;5289:2;5315:53;5360:7;5351:6;5340:9;5336:22;5315:53;:::i;:::-;5305:63;;5260:118;4766:619;;;;;:::o;5391:134::-;5449:9;5482:37;5513:5;5482:37;:::i;:::-;5469:50;;5391:134;;;:::o;5531:177::-;5624:9;5657:45;5696:5;5657:45;:::i;:::-;5644:58;;5531:177;;;:::o;5714:217::-;5844:80;5918:5;5844:80;:::i;:::-;5839:3;5832:93;5714:217;;:::o;5937:308::-;6073:4;6111:2;6100:9;6096:18;6088:26;;6124:114;6235:1;6224:9;6220:17;6211:6;6124:114;:::i;:::-;5937:308;;;;:::o;6251:86::-;6286:7;6326:4;6319:5;6315:16;6304:27;;6251:86;;;:::o;6343:112::-;6426:22;6442:5;6426:22;:::i;:::-;6421:3;6414:35;6343:112;;:::o;6461:214::-;6550:4;6588:2;6577:9;6573:18;6565:26;;6601:67;6665:1;6654:9;6650:17;6641:6;6601:67;:::i;:::-;6461:214;;;;:::o;6681:329::-;6740:6;6789:2;6777:9;6768:7;6764:23;6760:32;6757:119;;;6795:79;;:::i;:::-;6757:119;6915:1;6940:53;6985:7;6976:6;6965:9;6961:22;6940:53;:::i;:::-;6930:63;;6886:117;6681:329;;;;:::o;7016:118::-;7103:24;7121:5;7103:24;:::i;:::-;7098:3;7091:37;7016:118;;:::o;7140:222::-;7233:4;7271:2;7260:9;7256:18;7248:26;;7284:71;7352:1;7341:9;7337:17;7328:6;7284:71;:::i;:::-;7140:222;;;;:::o;7368:116::-;7438:21;7453:5;7438:21;:::i;:::-;7431:5;7428:32;7418:60;;7474:1;7471;7464:12;7418:60;7368:116;:::o;7490:133::-;7533:5;7571:6;7558:20;7549:29;;7587:30;7611:5;7587:30;:::i;:::-;7490:133;;;;:::o;7629:468::-;7694:6;7702;7751:2;7739:9;7730:7;7726:23;7722:32;7719:119;;;7757:79;;:::i;:::-;7719:119;7877:1;7902:53;7947:7;7938:6;7927:9;7923:22;7902:53;:::i;:::-;7892:63;;7848:117;8004:2;8030:50;8072:7;8063:6;8052:9;8048:22;8030:50;:::i;:::-;8020:60;;7975:115;7629:468;;;;;:::o;8103:329::-;8162:6;8211:2;8199:9;8190:7;8186:23;8182:32;8179:119;;;8217:79;;:::i;:::-;8179:119;8337:1;8362:53;8407:7;8398:6;8387:9;8383:22;8362:53;:::i;:::-;8352:63;;8308:117;8103:329;;;;:::o;8438:104::-;8483:7;8512:24;8530:5;8512:24;:::i;:::-;8501:35;;8438:104;;;:::o;8548:142::-;8651:32;8677:5;8651:32;:::i;:::-;8646:3;8639:45;8548:142;;:::o;8696:254::-;8805:4;8843:2;8832:9;8828:18;8820:26;;8856:87;8940:1;8929:9;8925:17;8916:6;8856:87;:::i;:::-;8696:254;;;;:::o;8956:76::-;8992:7;9021:5;9010:16;;8956:76;;;:::o;9038:115::-;9123:23;9140:5;9123:23;:::i;:::-;9118:3;9111:36;9038:115;;:::o;9159:989::-;9444:4;9482:3;9471:9;9467:19;9459:27;;9496:71;9564:1;9553:9;9549:17;9540:6;9496:71;:::i;:::-;9577:70;9643:2;9632:9;9628:18;9619:6;9577:70;:::i;:::-;9657;9723:2;9712:9;9708:18;9699:6;9657:70;:::i;:::-;9737:72;9805:2;9794:9;9790:18;9781:6;9737:72;:::i;:::-;9819:73;9887:3;9876:9;9872:19;9863:6;9819:73;:::i;:::-;9902;9970:3;9959:9;9955:19;9946:6;9902:73;:::i;:::-;9985;10053:3;10042:9;10038:19;10029:6;9985:73;:::i;:::-;10068;10136:3;10125:9;10121:19;10112:6;10068:73;:::i;:::-;9159:989;;;;;;;;;;;:::o;10154:117::-;10263:1;10260;10253:12;10277:117;10386:1;10383;10376:12;10400:117;10509:1;10506;10499:12;10540:568;10613:8;10623:6;10673:3;10666:4;10658:6;10654:17;10650:27;10640:122;;10681:79;;:::i;:::-;10640:122;10794:6;10781:20;10771:30;;10824:18;10816:6;10813:30;10810:117;;;10846:79;;:::i;:::-;10810:117;10960:4;10952:6;10948:17;10936:29;;11014:3;11006:4;10998:6;10994:17;10984:8;10980:32;10977:41;10974:128;;;11021:79;;:::i;:::-;10974:128;10540:568;;;;;:::o;11114:698::-;11206:6;11214;11222;11271:2;11259:9;11250:7;11246:23;11242:32;11239:119;;;11277:79;;:::i;:::-;11239:119;11425:1;11414:9;11410:17;11397:31;11455:18;11447:6;11444:30;11441:117;;;11477:79;;:::i;:::-;11441:117;11590:80;11662:7;11653:6;11642:9;11638:22;11590:80;:::i;:::-;11572:98;;;;11368:312;11719:2;11745:50;11787:7;11778:6;11767:9;11763:22;11745:50;:::i;:::-;11735:60;;11690:115;11114:698;;;;;:::o;11818:323::-;11874:6;11923:2;11911:9;11902:7;11898:23;11894:32;11891:119;;;11929:79;;:::i;:::-;11891:119;12049:1;12074:50;12116:7;12107:6;12096:9;12092:22;12074:50;:::i;:::-;12064:60;;12020:114;11818:323;;;;:::o;12147:474::-;12215:6;12223;12272:2;12260:9;12251:7;12247:23;12243:32;12240:119;;;12278:79;;:::i;:::-;12240:119;12398:1;12423:53;12468:7;12459:6;12448:9;12444:22;12423:53;:::i;:::-;12413:63;;12369:117;12525:2;12551:53;12596:7;12587:6;12576:9;12572:22;12551:53;:::i;:::-;12541:63;;12496:118;12147:474;;;;;:::o;12627:180::-;12675:77;12672:1;12665:88;12772:4;12769:1;12762:15;12796:4;12793:1;12786:15;12813:320;12857:6;12894:1;12888:4;12884:12;12874:22;;12941:1;12935:4;12931:12;12962:18;12952:81;;13018:4;13010:6;13006:17;12996:27;;12952:81;13080:2;13072:6;13069:14;13049:18;13046:38;13043:84;;13099:18;;:::i;:::-;13043:84;12864:269;12813:320;;;:::o;13139:227::-;13279:34;13275:1;13267:6;13263:14;13256:58;13348:10;13343:2;13335:6;13331:15;13324:35;13139:227;:::o;13372:366::-;13514:3;13535:67;13599:2;13594:3;13535:67;:::i;:::-;13528:74;;13611:93;13700:3;13611:93;:::i;:::-;13729:2;13724:3;13720:12;13713:19;;13372:366;;;:::o;13744:419::-;13910:4;13948:2;13937:9;13933:18;13925:26;;13997:9;13991:4;13987:20;13983:1;13972:9;13968:17;13961:47;14025:131;14151:4;14025:131;:::i;:::-;14017:139;;13744:419;;;:::o;14169:143::-;14226:5;14257:6;14251:13;14242:22;;14273:33;14300:5;14273:33;:::i;:::-;14169:143;;;;:::o;14318:351::-;14388:6;14437:2;14425:9;14416:7;14412:23;14408:32;14405:119;;;14443:79;;:::i;:::-;14405:119;14563:1;14588:64;14644:7;14635:6;14624:9;14620:22;14588:64;:::i;:::-;14578:74;;14534:128;14318:351;;;;:::o;14675:182::-;14815:34;14811:1;14803:6;14799:14;14792:58;14675:182;:::o;14863:366::-;15005:3;15026:67;15090:2;15085:3;15026:67;:::i;:::-;15019:74;;15102:93;15191:3;15102:93;:::i;:::-;15220:2;15215:3;15211:12;15204:19;;14863:366;;;:::o;15235:419::-;15401:4;15439:2;15428:9;15424:18;15416:26;;15488:9;15482:4;15478:20;15474:1;15463:9;15459:17;15452:47;15516:131;15642:4;15516:131;:::i;:::-;15508:139;;15235:419;;;:::o;15660:180::-;15708:77;15705:1;15698:88;15805:4;15802:1;15795:15;15829:4;15826:1;15819:15;15846:191;15886:3;15905:20;15923:1;15905:20;:::i;:::-;15900:25;;15939:20;15957:1;15939:20;:::i;:::-;15934:25;;15982:1;15979;15975:9;15968:16;;16003:3;16000:1;15997:10;15994:36;;;16010:18;;:::i;:::-;15994:36;15846:191;;;;:::o;16043:352::-;16174:4;16212:2;16201:9;16197:18;16189:26;;16225:87;16309:1;16298:9;16294:17;16285:6;16225:87;:::i;:::-;16322:66;16384:2;16373:9;16369:18;16360:6;16322:66;:::i;:::-;16043:352;;;;;:::o;16401:137::-;16455:5;16486:6;16480:13;16471:22;;16502:30;16526:5;16502:30;:::i;:::-;16401:137;;;;:::o;16544:345::-;16611:6;16660:2;16648:9;16639:7;16635:23;16631:32;16628:119;;;16666:79;;:::i;:::-;16628:119;16786:1;16811:61;16864:7;16855:6;16844:9;16840:22;16811:61;:::i;:::-;16801:71;;16757:125;16544:345;;;;:::o;16895:235::-;17035:34;17031:1;17023:6;17019:14;17012:58;17104:18;17099:2;17091:6;17087:15;17080:43;16895:235;:::o;17136:366::-;17278:3;17299:67;17363:2;17358:3;17299:67;:::i;:::-;17292:74;;17375:93;17464:3;17375:93;:::i;:::-;17493:2;17488:3;17484:12;17477:19;;17136:366;;;:::o;17508:419::-;17674:4;17712:2;17701:9;17697:18;17689:26;;17761:9;17755:4;17751:20;17747:1;17736:9;17732:17;17725:47;17789:131;17915:4;17789:131;:::i;:::-;17781:139;;17508:419;;;:::o;17933:663::-;18021:6;18029;18037;18086:2;18074:9;18065:7;18061:23;18057:32;18054:119;;;18092:79;;:::i;:::-;18054:119;18212:1;18237:64;18293:7;18284:6;18273:9;18269:22;18237:64;:::i;:::-;18227:74;;18183:128;18350:2;18376:64;18432:7;18423:6;18412:9;18408:22;18376:64;:::i;:::-;18366:74;;18321:129;18489:2;18515:64;18571:7;18562:6;18551:9;18547:22;18515:64;:::i;:::-;18505:74;;18460:129;17933:663;;;;;:::o;18602:553::-;18779:4;18817:3;18806:9;18802:19;18794:27;;18831:71;18899:1;18888:9;18884:17;18875:6;18831:71;:::i;:::-;18912:72;18980:2;18969:9;18965:18;18956:6;18912:72;:::i;:::-;18994;19062:2;19051:9;19047:18;19038:6;18994:72;:::i;:::-;19076;19144:2;19133:9;19129:18;19120:6;19076:72;:::i;:::-;18602:553;;;;;;;:::o;19161:289::-;19301:34;19297:1;19289:6;19285:14;19278:58;19370:34;19365:2;19357:6;19353:15;19346:59;19439:3;19434:2;19426:6;19422:15;19415:28;19161:289;:::o;19456:366::-;19598:3;19619:67;19683:2;19678:3;19619:67;:::i;:::-;19612:74;;19695:93;19784:3;19695:93;:::i;:::-;19813:2;19808:3;19804:12;19797:19;;19456:366;;;:::o;19828:419::-;19994:4;20032:2;20021:9;20017:18;20009:26;;20081:9;20075:4;20071:20;20067:1;20056:9;20052:17;20045:47;20109:131;20235:4;20109:131;:::i;:::-;20101:139;;19828:419;;;:::o;20253:244::-;20393:34;20389:1;20381:6;20377:14;20370:58;20462:27;20457:2;20449:6;20445:15;20438:52;20253:244;:::o;20503:366::-;20645:3;20666:67;20730:2;20725:3;20666:67;:::i;:::-;20659:74;;20742:93;20831:3;20742:93;:::i;:::-;20860:2;20855:3;20851:12;20844:19;;20503:366;;;:::o;20875:419::-;21041:4;21079:2;21068:9;21064:18;21056:26;;21128:9;21122:4;21118:20;21114:1;21103:9;21099:17;21092:47;21156:131;21282:4;21156:131;:::i;:::-;21148:139;;20875:419;;;:::o;21300:306::-;21440:34;21436:1;21428:6;21424:14;21417:58;21509:34;21504:2;21496:6;21492:15;21485:59;21578:20;21573:2;21565:6;21561:15;21554:45;21300:306;:::o;21612:366::-;21754:3;21775:67;21839:2;21834:3;21775:67;:::i;:::-;21768:74;;21851:93;21940:3;21851:93;:::i;:::-;21969:2;21964:3;21960:12;21953:19;;21612:366;;;:::o;21984:419::-;22150:4;22188:2;22177:9;22173:18;22165:26;;22237:9;22231:4;22227:20;22223:1;22212:9;22208:17;22201:47;22265:131;22391:4;22265:131;:::i;:::-;22257:139;;21984:419;;;:::o;22409:224::-;22549:34;22545:1;22537:6;22533:14;22526:58;22618:7;22613:2;22605:6;22601:15;22594:32;22409:224;:::o;22639:366::-;22781:3;22802:67;22866:2;22861:3;22802:67;:::i;:::-;22795:74;;22878:93;22967:3;22878:93;:::i;:::-;22996:2;22991:3;22987:12;22980:19;;22639:366;;;:::o;23011:419::-;23177:4;23215:2;23204:9;23200:18;23192:26;;23264:9;23258:4;23254:20;23250:1;23239:9;23235:17;23228:47;23292:131;23418:4;23292:131;:::i;:::-;23284:139;;23011:419;;;:::o;23436:143::-;23493:5;23524:6;23518:13;23509:22;;23540:33;23567:5;23540:33;:::i;:::-;23436:143;;;;:::o;23585:120::-;23657:23;23674:5;23657:23;:::i;:::-;23650:5;23647:34;23637:62;;23695:1;23692;23685:12;23637:62;23585:120;:::o;23711:141::-;23767:5;23798:6;23792:13;23783:22;;23814:32;23840:5;23814:32;:::i;:::-;23711:141;;;;:::o;23858:1444::-;23989:6;23997;24005;24013;24021;24029;24037;24045;24094:3;24082:9;24073:7;24069:23;24065:33;24062:120;;;24101:79;;:::i;:::-;24062:120;24221:1;24246:64;24302:7;24293:6;24282:9;24278:22;24246:64;:::i;:::-;24236:74;;24192:128;24359:2;24385:63;24440:7;24431:6;24420:9;24416:22;24385:63;:::i;:::-;24375:73;;24330:128;24497:2;24523:63;24578:7;24569:6;24558:9;24554:22;24523:63;:::i;:::-;24513:73;;24468:128;24635:2;24661:64;24717:7;24708:6;24697:9;24693:22;24661:64;:::i;:::-;24651:74;;24606:129;24774:3;24801:64;24857:7;24848:6;24837:9;24833:22;24801:64;:::i;:::-;24791:74;;24745:130;24914:3;24941:64;24997:7;24988:6;24977:9;24973:22;24941:64;:::i;:::-;24931:74;;24885:130;25054:3;25081:64;25137:7;25128:6;25117:9;25113:22;25081:64;:::i;:::-;25071:74;;25025:130;25194:3;25221:64;25277:7;25268:6;25257:9;25253:22;25221:64;:::i;:::-;25211:74;;25165:130;23858:1444;;;;;;;;;;;:::o;25308:242::-;25448:34;25444:1;25436:6;25432:14;25425:58;25517:25;25512:2;25504:6;25500:15;25493:50;25308:242;:::o;25556:366::-;25698:3;25719:67;25783:2;25778:3;25719:67;:::i;:::-;25712:74;;25795:93;25884:3;25795:93;:::i;:::-;25913:2;25908:3;25904:12;25897:19;;25556:366;;;:::o;25928:419::-;26094:4;26132:2;26121:9;26117:18;26109:26;;26181:9;26175:4;26171:20;26167:1;26156:9;26152:17;26145:47;26209:131;26335:4;26209:131;:::i;:::-;26201:139;;25928:419;;;:::o;26353:180::-;26401:77;26398:1;26391:88;26498:4;26495:1;26488:15;26522:4;26519:1;26512:15;26539:233;26578:3;26601:24;26619:5;26601:24;:::i;:::-;26592:33;;26647:66;26640:5;26637:77;26634:103;;26717:18;;:::i;:::-;26634:103;26764:1;26757:5;26753:13;26746:20;;26539:233;;;:::o;26778:184::-;26877:11;26911:6;26906:3;26899:19;26951:4;26946:3;26942:14;26927:29;;26778:184;;;;:::o;26968:102::-;27037:4;27060:3;27052:11;;26968:102;;;:::o;27076:108::-;27153:24;27171:5;27153:24;:::i;:::-;27148:3;27141:37;27076:108;;:::o;27190:179::-;27259:10;27280:46;27322:3;27314:6;27280:46;:::i;:::-;27358:4;27353:3;27349:14;27335:28;;27190:179;;;;:::o;27375:122::-;27427:5;27452:39;27487:2;27482:3;27478:12;27473:3;27452:39;:::i;:::-;27443:48;;27375:122;;;;:::o;27503:115::-;27575:4;27607;27602:3;27598:14;27590:22;;27503:115;;;:::o;27654:699::-;27783:3;27806:86;27885:6;27880:3;27806:86;:::i;:::-;27799:93;;27916:58;27968:5;27916:58;:::i;:::-;27997:7;28028:1;28013:315;28038:6;28035:1;28032:13;28013:315;;;28108:42;28143:6;28134:7;28108:42;:::i;:::-;28170:63;28229:3;28214:13;28170:63;:::i;:::-;28163:70;;28256:62;28311:6;28256:62;:::i;:::-;28246:72;;28073:255;28060:1;28057;28053:9;28048:14;;28013:315;;;28017:14;28344:3;28337:10;;27788:565;;27654:699;;;;;:::o;28359:491::-;28534:4;28572:2;28561:9;28557:18;28549:26;;28621:9;28615:4;28611:20;28607:1;28596:9;28592:17;28585:47;28649:118;28762:4;28753:6;28745;28649:118;:::i;:::-;28641:126;;28777:66;28839:2;28828:9;28824:18;28815:6;28777:66;:::i;:::-;28359:491;;;;;;:::o;28856:225::-;28996:34;28992:1;28984:6;28980:14;28973:58;29065:8;29060:2;29052:6;29048:15;29041:33;28856:225;:::o;29087:366::-;29229:3;29250:67;29314:2;29309:3;29250:67;:::i;:::-;29243:74;;29326:93;29415:3;29326:93;:::i;:::-;29444:2;29439:3;29435:12;29428:19;;29087:366;;;:::o;29459:419::-;29625:4;29663:2;29652:9;29648:18;29640:26;;29712:9;29706:4;29702:20;29698:1;29687:9;29683:17;29676:47;29740:131;29866:4;29740:131;:::i;:::-;29732:139;;29459:419;;;:::o;29884:223::-;30024:34;30020:1;30012:6;30008:14;30001:58;30093:6;30088:2;30080:6;30076:15;30069:31;29884:223;:::o;30113:366::-;30255:3;30276:67;30340:2;30335:3;30276:67;:::i;:::-;30269:74;;30352:93;30441:3;30352:93;:::i;:::-;30470:2;30465:3;30461:12;30454:19;;30113:366;;;:::o;30485:419::-;30651:4;30689:2;30678:9;30674:18;30666:26;;30738:9;30732:4;30728:20;30724:1;30713:9;30709:17;30702:47;30766:131;30892:4;30766:131;:::i;:::-;30758:139;;30485:419;;;:::o;30910:221::-;31050:34;31046:1;31038:6;31034:14;31027:58;31119:4;31114:2;31106:6;31102:15;31095:29;30910:221;:::o;31137:366::-;31279:3;31300:67;31364:2;31359:3;31300:67;:::i;:::-;31293:74;;31376:93;31465:3;31376:93;:::i;:::-;31494:2;31489:3;31485:12;31478:19;;31137:366;;;:::o;31509:419::-;31675:4;31713:2;31702:9;31698:18;31690:26;;31762:9;31756:4;31752:20;31748:1;31737:9;31733:17;31726:47;31790:131;31916:4;31790:131;:::i;:::-;31782:139;;31509:419;;;:::o;31934:224::-;32074:34;32070:1;32062:6;32058:14;32051:58;32143:7;32138:2;32130:6;32126:15;32119:32;31934:224;:::o;32164:366::-;32306:3;32327:67;32391:2;32386:3;32327:67;:::i;:::-;32320:74;;32403:93;32492:3;32403:93;:::i;:::-;32521:2;32516:3;32512:12;32505:19;;32164:366;;;:::o;32536:419::-;32702:4;32740:2;32729:9;32725:18;32717:26;;32789:9;32783:4;32779:20;32775:1;32764:9;32760:17;32753:47;32817:131;32943:4;32817:131;:::i;:::-;32809:139;;32536:419;;;:::o;32961:222::-;33101:34;33097:1;33089:6;33085:14;33078:58;33170:5;33165:2;33157:6;33153:15;33146:30;32961:222;:::o;33189:366::-;33331:3;33352:67;33416:2;33411:3;33352:67;:::i;:::-;33345:74;;33428:93;33517:3;33428:93;:::i;:::-;33546:2;33541:3;33537:12;33530:19;;33189:366;;;:::o;33561:419::-;33727:4;33765:2;33754:9;33750:18;33742:26;;33814:9;33808:4;33804:20;33800:1;33789:9;33785:17;33778:47;33842:131;33968:4;33842:131;:::i;:::-;33834:139;;33561:419;;;:::o;33986:245::-;34126:34;34122:1;34114:6;34110:14;34103:58;34195:28;34190:2;34182:6;34178:15;34171:53;33986:245;:::o;34237:366::-;34379:3;34400:67;34464:2;34459:3;34400:67;:::i;:::-;34393:74;;34476:93;34565:3;34476:93;:::i;:::-;34594:2;34589:3;34585:12;34578:19;;34237:366;;;:::o;34609:419::-;34775:4;34813:2;34802:9;34798:18;34790:26;;34862:9;34856:4;34852:20;34848:1;34837:9;34833:17;34826:47;34890:131;35016:4;34890:131;:::i;:::-;34882:139;;34609:419;;;:::o;35034:410::-;35074:7;35097:20;35115:1;35097:20;:::i;:::-;35092:25;;35131:20;35149:1;35131:20;:::i;:::-;35126:25;;35186:1;35183;35179:9;35208:30;35226:11;35208:30;:::i;:::-;35197:41;;35387:1;35378:7;35374:15;35371:1;35368:22;35348:1;35341:9;35321:83;35298:139;;35417:18;;:::i;:::-;35298:139;35082:362;35034:410;;;;:::o;35450:180::-;35498:77;35495:1;35488:88;35595:4;35592:1;35585:15;35619:4;35616:1;35609:15;35636:185;35676:1;35693:20;35711:1;35693:20;:::i;:::-;35688:25;;35727:20;35745:1;35727:20;:::i;:::-;35722:25;;35766:1;35756:35;;35771:18;;:::i;:::-;35756:35;35813:1;35810;35806:9;35801:14;;35636:185;;;;:::o;35827:364::-;35964:4;36002:2;35991:9;35987:18;35979:26;;36015:87;36099:1;36088:9;36084:17;36075:6;36015:87;:::i;:::-;36112:72;36180:2;36169:9;36165:18;36156:6;36112:72;:::i;:::-;35827:364;;;;;:::o;36197:293::-;36337:34;36333:1;36325:6;36321:14;36314:58;36406:34;36401:2;36393:6;36389:15;36382:59;36475:7;36470:2;36462:6;36458:15;36451:32;36197:293;:::o;36496:366::-;36638:3;36659:67;36723:2;36718:3;36659:67;:::i;:::-;36652:74;;36735:93;36824:3;36735:93;:::i;:::-;36853:2;36848:3;36844:12;36837:19;;36496:366;;;:::o;36868:419::-;37034:4;37072:2;37061:9;37057:18;37049:26;;37121:9;37115:4;37111:20;37107:1;37096:9;37092:17;37085:47;37149:131;37275:4;37149:131;:::i;:::-;37141:139;;36868:419;;;:::o;37293:225::-;37433:34;37429:1;37421:6;37417:14;37410:58;37502:8;37497:2;37489:6;37485:15;37478:33;37293:225;:::o;37524:366::-;37666:3;37687:67;37751:2;37746:3;37687:67;:::i;:::-;37680:74;;37763:93;37852:3;37763:93;:::i;:::-;37881:2;37876:3;37872:12;37865:19;;37524:366;;;:::o;37896:419::-;38062:4;38100:2;38089:9;38085:18;38077:26;;38149:9;38143:4;38139:20;38135:1;38124:9;38120:17;38113:47;38177:131;38303:4;38177:131;:::i;:::-;38169:139;;37896:419;;;:::o;38321:147::-;38422:11;38459:3;38444:18;;38321:147;;;;:::o;38474:114::-;;:::o;38594:398::-;38753:3;38774:83;38855:1;38850:3;38774:83;:::i;:::-;38767:90;;38866:93;38955:3;38866:93;:::i;:::-;38984:1;38979:3;38975:11;38968:18;;38594:398;;;:::o;38998:379::-;39182:3;39204:147;39347:3;39204:147;:::i;:::-;39197:154;;39368:3;39361:10;;38998:379;;;:::o;39383:332::-;39504:4;39542:2;39531:9;39527:18;39519:26;;39555:71;39623:1;39612:9;39608:17;39599:6;39555:71;:::i;:::-;39636:72;39704:2;39693:9;39689:18;39680:6;39636:72;:::i;:::-;39383:332;;;;;:::o;39721:194::-;39761:4;39781:20;39799:1;39781:20;:::i;:::-;39776:25;;39815:20;39833:1;39815:20;:::i;:::-;39810:25;;39859:1;39856;39852:9;39844:17;;39883:1;39877:4;39874:11;39871:37;;;39888:18;;:::i;:::-;39871:37;39721:194;;;;:::o;39921:180::-;39969:77;39966:1;39959:88;40066:4;40063:1;40056:15;40090:4;40087:1;40080:15;40107:351;40177:6;40226:2;40214:9;40205:7;40201:23;40197:32;40194:119;;;40232:79;;:::i;:::-;40194:119;40352:1;40377:64;40433:7;40424:6;40413:9;40409:22;40377:64;:::i;:::-;40367:74;;40323:128;40107:351;;;;:::o;40464:85::-;40509:7;40538:5;40527:16;;40464:85;;;:::o;40555:158::-;40613:9;40646:61;40664:42;40673:32;40699:5;40673:32;:::i;:::-;40664:42;:::i;:::-;40646:61;:::i;:::-;40633:74;;40555:158;;;:::o;40719:147::-;40814:45;40853:5;40814:45;:::i;:::-;40809:3;40802:58;40719:147;;:::o;40872:114::-;40939:6;40973:5;40967:12;40957:22;;40872:114;;;:::o;40992:132::-;41059:4;41082:3;41074:11;;41112:4;41107:3;41103:14;41095:22;;40992:132;;;:::o;41130:113::-;41200:4;41232;41227:3;41223:14;41215:22;;41130:113;;;:::o;41279:732::-;41398:3;41427:54;41475:5;41427:54;:::i;:::-;41497:86;41576:6;41571:3;41497:86;:::i;:::-;41490:93;;41607:56;41657:5;41607:56;:::i;:::-;41686:7;41717:1;41702:284;41727:6;41724:1;41721:13;41702:284;;;41803:6;41797:13;41830:63;41889:3;41874:13;41830:63;:::i;:::-;41823:70;;41916:60;41969:6;41916:60;:::i;:::-;41906:70;;41762:224;41749:1;41746;41742:9;41737:14;;41702:284;;;41706:14;42002:3;41995:10;;41403:608;;;41279:732;;;;:::o;42017:831::-;42280:4;42318:3;42307:9;42303:19;42295:27;;42332:71;42400:1;42389:9;42385:17;42376:6;42332:71;:::i;:::-;42413:80;42489:2;42478:9;42474:18;42465:6;42413:80;:::i;:::-;42540:9;42534:4;42530:20;42525:2;42514:9;42510:18;42503:48;42568:108;42671:4;42662:6;42568:108;:::i;:::-;42560:116;;42686:72;42754:2;42743:9;42739:18;42730:6;42686:72;:::i;:::-;42768:73;42836:3;42825:9;42821:19;42812:6;42768:73;:::i;:::-;42017:831;;;;;;;;:::o

Swarm Source

ipfs://90cf4a50b83d7f481d2e8ae1436f3f17011a300c4212c591ff78c5e25d5ae046

Block Transaction Gas Used Reward
view all blocks validated

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.