ETH Price: $3,373.79 (-3.14%)
Gas: 4 Gwei

Contract

0x5D9E613A9696518BF4102EbAc7Bb40B4cc2202Cf
 

Overview

ETH Balance

1 wei

Eth Value

Less Than $0.01 (@ $3,373.79/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve181556052023-09-17 11:57:47311 days ago1694951867IN
0x5D9E613A...4cc2202Cf
0 ETH0.000378998.05894275
Approve171852692023-05-04 5:36:23447 days ago1683178583IN
0x5D9E613A...4cc2202Cf
0 ETH0.0014128457.09833466
Approve169993212023-04-07 21:39:59473 days ago1680903599IN
0x5D9E613A...4cc2202Cf
0 ETH0.0009633620.48497221
Approve169865662023-04-06 2:04:59475 days ago1680746699IN
0x5D9E613A...4cc2202Cf
0 ETH0.0006785127.35515496
Approve169650932023-04-03 0:56:11478 days ago1680483371IN
0x5D9E613A...4cc2202Cf
0 ETH0.0007723516.42339034
Approve169547762023-04-01 14:05:59480 days ago1680357959IN
0x5D9E613A...4cc2202Cf
0 ETH0.0011300424.02920516
Approve169520372023-04-01 4:49:59480 days ago1680324599IN
0x5D9E613A...4cc2202Cf
0 ETH0.0009225919.61793371
Approve169518852023-04-01 4:19:35480 days ago1680322775IN
0x5D9E613A...4cc2202Cf
0 ETH0.0004390617.74435224
Approve169518772023-04-01 4:17:59480 days ago1680322679IN
0x5D9E613A...4cc2202Cf
0 ETH0.00082317.50022778
Approve169507882023-04-01 0:37:23480 days ago1680309443IN
0x5D9E613A...4cc2202Cf
0 ETH0.0010856823.0858749
Approve169502662023-03-31 22:51:35480 days ago1680303095IN
0x5D9E613A...4cc2202Cf
0 ETH0.0009683320.72287586
Approve169489542023-03-31 18:26:47481 days ago1680287207IN
0x5D9E613A...4cc2202Cf
0 ETH0.0013528728.76752102
Approve169483722023-03-31 16:29:47481 days ago1680280187IN
0x5D9E613A...4cc2202Cf
0 ETH0.0013638728.96438863
Approve169483492023-03-31 16:25:11481 days ago1680279911IN
0x5D9E613A...4cc2202Cf
0 ETH0.0014535230.90761857
Approve169481572023-03-31 15:46:47481 days ago1680277607IN
0x5D9E613A...4cc2202Cf
0 ETH0.0016086334.16220826
Approve169481462023-03-31 15:44:23481 days ago1680277463IN
0x5D9E613A...4cc2202Cf
0 ETH0.0016457434.95041778
Approve169480242023-03-31 15:19:23481 days ago1680275963IN
0x5D9E613A...4cc2202Cf
0 ETH0.0008804732.81908145
Approve169480242023-03-31 15:19:23481 days ago1680275963IN
0x5D9E613A...4cc2202Cf
0 ETH0.0015335732.81908145
Approve169478542023-03-31 14:45:11481 days ago1680273911IN
0x5D9E613A...4cc2202Cf
0 ETH0.0014793931.45773678
Approve169475632023-03-31 13:46:59481 days ago1680270419IN
0x5D9E613A...4cc2202Cf
0 ETH0.0014333230.47821997
Approve169474612023-03-31 13:25:59481 days ago1680269159IN
0x5D9E613A...4cc2202Cf
0 ETH0.0013527728.91288701
Approve169473202023-03-31 12:56:35481 days ago1680267395IN
0x5D9E613A...4cc2202Cf
0 ETH0.0011922925.35282355
Approve169472762023-03-31 12:47:11481 days ago1680266831IN
0x5D9E613A...4cc2202Cf
0 ETH0.001228926.09799901
Approve169472482023-03-31 12:41:35481 days ago1680266495IN
0x5D9E613A...4cc2202Cf
0 ETH0.0013241428.15661246
Approve169466242023-03-31 10:34:47481 days ago1680258887IN
0x5D9E613A...4cc2202Cf
0 ETH0.0011097423.56748689
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
170162402023-04-10 7:10:59471 days ago1681110659
0x5D9E613A...4cc2202Cf
0.00008727 ETH
170162402023-04-10 7:10:59471 days ago1681110659
0x5D9E613A...4cc2202Cf
0.0001309 ETH
170162402023-04-10 7:10:59471 days ago1681110659
0x5D9E613A...4cc2202Cf
0.00021817 ETH
169650952023-04-03 0:56:35478 days ago1680483395
0x5D9E613A...4cc2202Cf
0.00007134 ETH
169650952023-04-03 0:56:35478 days ago1680483395
0x5D9E613A...4cc2202Cf
0.00010701 ETH
169650952023-04-03 0:56:35478 days ago1680483395
0x5D9E613A...4cc2202Cf
0.00017835 ETH
169649292023-04-03 0:23:11478 days ago1680481391
0x5D9E613A...4cc2202Cf
0.00028494 ETH
169649292023-04-03 0:23:11478 days ago1680481391
0x5D9E613A...4cc2202Cf
0.00042741 ETH
169649292023-04-03 0:23:11478 days ago1680481391
0x5D9E613A...4cc2202Cf
0.00071235 ETH
169552312023-04-01 15:37:23480 days ago1680363443
0x5D9E613A...4cc2202Cf
0.00038721 ETH
169552312023-04-01 15:37:23480 days ago1680363443
0x5D9E613A...4cc2202Cf
0.00058082 ETH
169552312023-04-01 15:37:23480 days ago1680363443
0x5D9E613A...4cc2202Cf
0.00096803 ETH
169520402023-04-01 4:50:35480 days ago1680324635
0x5D9E613A...4cc2202Cf
0.00019935 ETH
169520402023-04-01 4:50:35480 days ago1680324635
0x5D9E613A...4cc2202Cf
0.00029902 ETH
169520402023-04-01 4:50:35480 days ago1680324635
0x5D9E613A...4cc2202Cf
0.00049837 ETH
169518812023-04-01 4:18:47480 days ago1680322727
0x5D9E613A...4cc2202Cf
0.00019735 ETH
169518812023-04-01 4:18:47480 days ago1680322727
0x5D9E613A...4cc2202Cf
0.00029603 ETH
169518812023-04-01 4:18:47480 days ago1680322727
0x5D9E613A...4cc2202Cf
0.00049338 ETH
169508072023-04-01 0:41:11480 days ago1680309671
0x5D9E613A...4cc2202Cf
0.00013281 ETH
169508072023-04-01 0:41:11480 days ago1680309671
0x5D9E613A...4cc2202Cf
0.00019922 ETH
169508072023-04-01 0:41:11480 days ago1680309671
0x5D9E613A...4cc2202Cf
0.00033203 ETH
169502682023-03-31 22:51:59480 days ago1680303119
0x5D9E613A...4cc2202Cf
0.00019439 ETH
169502682023-03-31 22:51:59480 days ago1680303119
0x5D9E613A...4cc2202Cf
0.00029159 ETH
169502682023-03-31 22:51:59480 days ago1680303119
0x5D9E613A...4cc2202Cf
0.00048598 ETH
169490852023-03-31 18:53:11481 days ago1680288791
0x5D9E613A...4cc2202Cf
0.00024141 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Mankey

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-30
*/

//SPDX-License-Identifier: MIT

/*
The Forgotten Pokémon Monkey, Mankey has returned.
Mankeyerc.com
https://t.me/MankeysERC

⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣶⣶⣶⣤⣀⣀⣀⣠⡴⣿⣦⣤⣤⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣶⣿⠟⠉⠀⠀⠀⠀⠈⠙⠻⣯⡁⠀⠀⠀⠀⠀⠀⠉⠙⣟⣶⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⠋⠀⠀⠀⠀⠐⢶⣤⡀⠀⠈⠙⢶⣄⡀⠀⠀⠀⠀⠀⠈⠙⠛⠷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⢀⣠⣴⣶⣶⣤⣴⣿⣿⣿⣿⣿⡏⠀⠀⢀⣴⠾⠛⠋⠉⠛⢶⣄⠀⠀⠈⠛⠷⣦⣄⣀⠀⠀⠀⠀⠀⠈⠻⣄⠀⠀⠀⠀⠀⠀⠀⠀
⠀⣰⡿⠛⠉⠁⠀⠈⠙⢿⣿⣿⣿⣿⡇⠀⠀⣸⣿⣦⠀⠀⠀⠀⠀⠉⠻⢦⣀⡀⠀⠈⠙⠛⠿⢶⣶⣤⣤⣤⣤⣾⣷⣶⣤⣀⠀⠀⠀⠀
⢠⡿⠀⠰⠟⣻⣧⠀⠀⠸⣿⣿⣿⣿⠃⠀⠀⣿⠛⠿⢷⣤⣄⡀⠀⠀⠀⠀⢹⡟⠁⠀⠀⠀⣤⣄⣀⡀⣀⣠⣤⣶⣶⣶⠈⢻⣆⠀⠀⠀
⣼⡇⠀⠀⣼⠟⣿⠀⠀⠀⣿⣿⣿⣿⠀⠀⣀⣹⣧⣀⣀⠈⠙⠻⠷⣦⣤⣀⣼⠇⠀⠀⠀⢀⣼⡟⠛⠛⠛⠋⠉⠀⠹⣷⡀⣸⡟⠀⠀⠀
⢿⡇⠀⠀⠉⠀⢻⣇⣠⣴⠿⠟⠛⠉⠀⠈⠉⠀⠀⠉⠉⠙⠛⠶⣤⣤⡿⢟⡁⠀⠀⠀⠀⣾⣿⣿⡀⠀⠀⠀⠀⠀⠀⢻⣿⠟⠁⠀⠀⠀
⢸⣇⠀⠀⢀⣤⡾⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⣼⠛⢛⡷⠶⠾⠟⢿⣏⠙⠻⠷⢦⣤⣀⣀⠀⣸⣿⣷⣶⣤⡀⠀
⠈⢿⣦⣴⡟⠉⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣤⣤⣤⣀⣀⡀⠀⠀⠀⠀⠙⠇⠙⠻⣦⡀⠀⠈⡻⠿⣶⣤⣄⣈⠉⠛⣿⡿⠃⠀⠀⠙⢿⣄
⠀⠀⢸⡟⢀⠀⠀⠀⠀⣠⡶⠟⠋⠁⢹⡿⣧⠀⠀⠀⠉⠙⠻⢶⣄⡀⠀⠀⠀⠀⠙⣷⡶⠟⠛⠻⢦⣿⠟⠛⠻⢿⣿⣡⡴⠿⡿⠂⠈⣿
⠀⠀⣿⡿⠋⠀⢀⣴⣿⠉⠀⠀⠀⠀⢸⡇⠹⣧⠀⠀⠀⠀⠀⠀⠈⠻⣦⡀⠀⠀⠀⠿⠁⠀⠀⠀⠈⠁⠀⠀⠀⠀⠀⠙⢷⣄⠀⠀⠀⢸
⢀⣾⠏⠀⢀⣴⣿⠏⣿⠀⠀⠀⠀⠀⣾⠁⠀⢻⣆⠀⠀⠀⠀⠀⠀⣰⣿⡟⠶⣤⣤⣤⣤⣴⠶⠶⠶⠶⣤⣄⡀⠀⠀⠀⠀⢻⣆⠀⠀⣼
⣸⡏⠀⢠⡟⢸⡟⠀⢿⡄⠀⠀⠀⢰⡏⠀⠀⠀⣿⡄⠀⠀⠀⠀⢠⡟⠁⣿⠀⠀⠀⠀⣸⣿⡆⠀⠀⠀⠀⢹⣿⣦⠀⠀⠀⠀⢿⣤⣼⠟
⣿⡇⠀⣿⠀⣼⡇⠀⠸⣧⠀⠀⠀⣾⠃⠀⠀⠀⠸⣧⠀⠀⠀⣰⡟⠀⠀⢹⡆⠀⠀⢰⡟⠹⡇⠀⠀⠀⢀⣿⣿⠈⢧⡀⠀⠀⣸⡟⠁⠀
⣿⡇⠀⢻⣄⣿⡇⠀⠀⢻⣆⠀⣼⡏⠀⠀⠀⠀⠀⢿⡀⢠⣾⠏⠀⠀⠀⢸⡇⠀⣰⡟⠀⠀⣷⠀⠀⢀⣾⠃⢸⡆⠈⣷⠀⢸⣿⡇⠀⠀
⢹⣧⠀⠀⠛⠿⣧⣀⡀⠀⣻⣾⣟⡀⠀⠀⠀⠀⢀⣸⣷⡟⠁⠀⠀⠀⠀⢈⣷⣴⠟⠀⠀⠀⣿⠀⢠⡾⠃⠀⢸⡇⠀⠸⣇⠀⣿⡇⠀⠀
⠈⠻⣷⣄⣀⠀⠀⠈⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠉⠛⠛⠾⠿⣧⣤⣀⠀⠀⣿⣴⠟⠀⠀⠀⢸⡇⠀⢀⣿⠀⠸⡇⠀⠀
⠀⠀⠈⠙⠻⠿⣿⣿⡿⠟⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠻⠿⣧⣀⠀⠀⠀⢸⣇⣴⡿⣿⠀⠀⣿⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠘⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⢦⣤⣿⡿⠋⢠⡿⠀⢸⡏⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠷⣦⣄⠈⠛⠷⠶⠛⠁⣠⣿⠃⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠿⣷⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣽⣿⣶⣶⣶⣶⡾⠟⠁⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠛⠿⠶⣶⣦⣤⣤⣤⣄⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠙⠛⠛⠿⠿⣷⣶⣶⣶⠾⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

*/


pragma solidity 0.8.19;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    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 IUniswapV2Factory { 
    function createPair(address tokenA, address tokenB) external returns (address pair); 
}
interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

abstract contract Auth {
    address internal _owner;
    constructor(address creatorOwner) { 
        _owner = creatorOwner; 
    }
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    function owner() public view returns (address) { 
        return _owner; 
    }
    function transferOwnership(address payable newOwner) external onlyOwner { 
        _owner = newOwner; 
        emit OwnershipTransferred(newOwner); 
    }
    function renounceOwnership() external onlyOwner { 
        _owner = address(0); 
        emit OwnershipTransferred(address(0)); 
    }
    event OwnershipTransferred(address _owner);
}

contract Mankey is IERC20, Auth {
    uint8 private constant _decimals      = 9;
    uint256 private constant _totalSupply = 500_000_000 * (10**_decimals);
    string private constant _name         = "MANKEYS";
    string private constant _symbol       = "MANKEY";

    uint8 private antiSnipeTax1 = 86;
    uint8 private antiSnipeTax2 = 55;
    uint8 private antiSnipeBlocks1 = 5;
    uint8 private antiSnipeBlocks2 = 5;

    uint8 private _buyTaxRate  = 0;
    uint8 private _sellTaxRate = 1;

    uint16 private _taxSharesMarketing   = 60;
    uint16 private _taxSharesDevelopment = 40;
    uint16 private _taxSharesLP          = 0;
    uint16 private _totalTaxShares = _taxSharesMarketing + _taxSharesDevelopment + _taxSharesLP;

    address payable private _walletMarketing = payable(0x57776bf2800Fe7D1a2581B21CE4fb6708bcc4ACA); 
    address payable private _walletDevelopment = payable(0x57776bf2800Fe7D1a2581B21CE4fb6708bcc4ACA); 

    uint256 private _launchBlock;
    uint256 private _maxTxAmount     = _totalSupply; 
    uint256 private _maxWalletAmount = _totalSupply;
    uint256 private _taxSwapMin = _totalSupply * 10 / 100000;
    uint256 private _taxSwapMax = _totalSupply * 150 / 100000;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _noFees;
    mapping (address => bool) private _noLimits;

    address private _lpOwner;

    address private constant _swapRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private _primarySwapRouter = IUniswapV2Router02(_swapRouterAddress);
    address private _primaryLP;
    mapping (address => bool) private _isLP;

    bool private _tradingOpen;

    bool private _inTaxSwap = false;
    modifier lockTaxSwap { 
        _inTaxSwap = true; 
        _; 
        _inTaxSwap = false; 
    }

    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);
    event TokensBurned(address indexed burnedByWallet, uint256 tokenAmount);

    constructor() Auth(msg.sender) {
        _lpOwner = msg.sender;

        uint256 airdropAmount = _totalSupply * 30 / 100;
        
        _balances[address(this)] =  _totalSupply - airdropAmount;
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _balances[_owner] = airdropAmount;
        emit Transfer(address(0), _owner, _balances[_owner]);

        _noFees[_owner] = true;
        _noFees[address(this)] = true;
        _noFees[_swapRouterAddress] = true;
        _noFees[_walletMarketing] = true;
        _noFees[_walletDevelopment] = true;
        _noLimits[_owner] = true;
        _noLimits[address(this)] = true;
        _noLimits[_swapRouterAddress] = true;
        _noLimits[_walletMarketing] = true;
        _noLimits[_walletDevelopment] = true;
    }

    receive() external payable {}
    
    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(sender), "Trading not open");
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _approveRouter(uint256 _tokenAmount) internal {
        if ( _allowances[address(this)][_swapRouterAddress] < _tokenAmount ) {
            _allowances[address(this)][_swapRouterAddress] = type(uint256).max;
            emit Approval(address(this), _swapRouterAddress, type(uint256).max);
        }
    }

    function addLiquidity() external payable onlyOwner lockTaxSwap {
        require(_primaryLP == address(0), "LP exists");
        require(!_tradingOpen, "trading is open");
        require(msg.value > 0 || address(this).balance>0, "No ETH in contract or message");
        require(_balances[address(this)]>0, "No tokens in contract");
        _primaryLP = IUniswapV2Factory(_primarySwapRouter.factory()).createPair(address(this), _primarySwapRouter.WETH());
        _addLiquidity(_balances[address(this)], address(this).balance, false);
        _isLP[_primaryLP] = true;
        _openTrading();
    }

    function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei, bool autoburn) internal {
        address lpTokenRecipient = _lpOwner;
        if ( autoburn ) { lpTokenRecipient = address(0); }
        _approveRouter(_tokenAmount);
        _primarySwapRouter.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, lpTokenRecipient, block.timestamp );
    }

    function _openTrading() internal {
        _maxTxAmount     = _totalSupply * 1 / 100; 
        _maxWalletAmount = _totalSupply * 1 / 100;
        _tradingOpen = true;
        _launchBlock = block.number;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from Zero wallet");
        if (!_tradingOpen) { require(_noFees[sender] && _noLimits[sender], "Trading not open"); }
        if ( !_inTaxSwap && _isLP[recipient] ) { _swapTaxAndLiquify(); }
        
        if ( sender != address(this) && recipient != address(this) && sender != _owner ) { require(_checkLimits(sender, recipient, amount), "TX exceeds limits"); }
        uint256 _taxAmount = _calculateTax(sender, recipient, amount);
        uint256 _transferAmount = amount - _taxAmount;
        _balances[sender] = _balances[sender] - amount;
        if ( _taxAmount > 0 ) { _balances[address(this)] = _balances[address(this)] + _taxAmount; }
        _balances[recipient] = _balances[recipient] + _transferAmount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _checkLimits(address sender, address recipient, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( _tradingOpen && !_noLimits[sender] && !_noLimits[recipient] ) {
            if ( transferAmount > _maxTxAmount ) { limitCheckPassed = false; }
            else if ( !_isLP[recipient] && (_balances[recipient] + transferAmount > _maxWalletAmount) ) { limitCheckPassed = false; }
        }
        return limitCheckPassed;
    }

    function _checkTradingOpen(address sender) private view returns (bool){
        bool checkResult = false;
        if ( _tradingOpen ) { checkResult = true; } 
        else if (_noFees[sender] && _noLimits[sender]) { checkResult = true; } 

        return checkResult;
    }

    function _calculateTax(address sender, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        
        if ( !_tradingOpen || _noFees[sender] || _noFees[recipient] ) { 
            taxAmount = 0; 
        } else if ( _isLP[sender] ) { 
            if ( block.number >= _launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2 ) {
                taxAmount = amount * _buyTaxRate / 100; 
            } else if ( block.number >= _launchBlock + antiSnipeBlocks1 ) {
                taxAmount = amount * antiSnipeTax2 / 100;
            } else if ( block.number >= _launchBlock) {
                taxAmount = amount * antiSnipeTax1 / 100;
            }
        } else if ( _isLP[recipient] ) { 
            taxAmount = amount * _sellTaxRate / 100; 
        }

        return taxAmount;
    }


    function exemptFromFees(address wallet) external view returns (bool) {
        return _noFees[wallet];
    } 
    function exemptFromLimits(address wallet) external view returns (bool) {
        return _noLimits[wallet];
    } 
    function setExempt(address wallet, bool noFees, bool noLimits) external onlyOwner {
        if (noLimits || noFees) { require(!_isLP[wallet], "Cannot exempt LP"); }
        _noFees[ wallet ] = noFees;
        _noLimits[ wallet ] = noLimits;
    }

    function buyFee() external view returns(uint8) {
        return _buyTaxRate;
    }
    function sellFee() external view returns(uint8) {
        return _sellTaxRate;
    }

    function feeSplit() external view returns (uint16 marketing, uint16 development, uint16 LP ) {
        return ( _taxSharesMarketing, _taxSharesDevelopment, _taxSharesLP);
    }
    function setFees(uint8 buy, uint8 sell) external onlyOwner {
        require(buy + sell <= 99, "Roundtrip too high");
        _buyTaxRate = buy;
        _sellTaxRate = sell;
    }  
    function setFeeSplit(uint16 sharesAutoLP, uint16 sharesMarketing, uint16 sharesDevelopment) external onlyOwner {
        uint16 totalShares = sharesAutoLP + sharesMarketing + sharesDevelopment;
        require( totalShares > 0, "All cannot be 0");
        _taxSharesLP = sharesAutoLP;
        _taxSharesMarketing = sharesMarketing;
        _taxSharesDevelopment = sharesDevelopment;
        _totalTaxShares = totalShares;
    }

    function marketingWallet() external view returns (address) {
        return _walletMarketing;
    }
    function developmentWallet() external view returns (address) {
        return _walletDevelopment;
    }

    function updateWallets(address marketing, address development, address LPtokens) external onlyOwner {
        require(!_isLP[marketing] && !_isLP[development] && !_isLP[LPtokens], "LP cannot be tax wallet");
        
        _walletMarketing = payable(marketing);
        _walletDevelopment = payable(development);
        _lpOwner = LPtokens;
        
        _noFees[marketing] = true;
        _noLimits[marketing] = true;
        
        _noFees[development] = true;        
        _noLimits[development] = true;
    }

    function maxWallet() external view returns (uint256) {
        return _maxWalletAmount;
    }
    function maxTransaction() external view returns (uint256) {
        return _maxTxAmount;
    }

    function swapAtMin() external view returns (uint256) {
        return _taxSwapMin;
    }
    function swapAtMax() external view returns (uint256) {
        return _taxSwapMax;
    }

    function setLimits(uint16 maxTransactionPermille, uint16 maxWalletPermille) external onlyOwner {
        uint256 newTxAmt = _totalSupply * maxTransactionPermille / 1000 + 1;
        require(newTxAmt >= _maxTxAmount, "tx too low");
        _maxTxAmount = newTxAmt;
        uint256 newWalletAmt = _totalSupply * maxWalletPermille / 1000 + 1;
        require(newWalletAmt >= _maxWalletAmount, "wallet too low");
        _maxWalletAmount = newWalletAmt;
    }

    function setTaxSwap(uint32 minValue, uint32 minDivider, uint32 maxValue, uint32 maxDivider) external onlyOwner {
        _taxSwapMin = _totalSupply * minValue / minDivider;
        _taxSwapMax = _totalSupply * maxValue / maxDivider;
        require(_taxSwapMax>=_taxSwapMin, "Min/Max error");
        require(_taxSwapMax>_totalSupply / 100000, "Max too low");
        require(_taxSwapMax<_totalSupply / 100, "Max too high");
    }

    function _burnTokens(address fromWallet, uint256 amount) private {
        if ( amount > 0 ) {
            _balances[fromWallet] -= amount;
            _balances[address(0)] += amount;
            emit Transfer(fromWallet, address(0), amount);
        }
    }

    function _swapTaxAndLiquify() private lockTaxSwap {
        uint256 _taxTokensAvailable = balanceOf(address(this));

        if ( _taxTokensAvailable >= _taxSwapMin && _tradingOpen ) {
            if ( _taxTokensAvailable >= _taxSwapMax ) { _taxTokensAvailable = _taxSwapMax; }

            uint256 _tokensForLP = _taxTokensAvailable * _taxSharesLP / _totalTaxShares / 2;
            
            uint256 _tokensToSwap = _taxTokensAvailable - _tokensForLP;
            if( _tokensToSwap > 10**_decimals ) {
                uint256 _ethPreSwap = address(this).balance;
                _swapTaxTokensForEth(_tokensToSwap);
                uint256 _ethSwapped = address(this).balance - _ethPreSwap;
                if ( _taxSharesLP > 0 ) {
                    uint256 _ethWeiAmount = _ethSwapped * _taxSharesLP / _totalTaxShares ;
                    _approveRouter(_tokensForLP);
                    _addLiquidity(_tokensForLP, _ethWeiAmount, false);
                }
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { _distributeTaxEth(_contractETHBalance); }
        }
    }

    function _swapTaxTokensForEth(uint256 tokenAmount) private {
        _approveRouter(tokenAmount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _primarySwapRouter.WETH();
        _primarySwapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp);
    }

    function _distributeTaxEth(uint256 amount) private {
        uint16 _taxShareTotal = _taxSharesMarketing + _taxSharesDevelopment;
        if (_taxShareTotal > 0) {
            uint256 marketingAmount = amount * _taxSharesMarketing / _taxShareTotal;
            uint256 developmentAmount = amount * _taxSharesDevelopment / _taxShareTotal;
            if ( marketingAmount > 0 ) { _walletMarketing.transfer(marketingAmount); }
            if ( developmentAmount > 0 ) { _walletDevelopment.transfer(developmentAmount); }
        }
    }

    function manualTaxSwapAndSend(uint8 swapTokenPercent, bool sendEth) external onlyOwner lockTaxSwap {
        require(swapTokenPercent <= 100, "Cannot swap more than 100%");
        uint256 tokensToSwap = balanceOf(address(this)) * swapTokenPercent / 100;
        if (tokensToSwap > 10 ** _decimals) {
            _swapTaxTokensForEth(tokensToSwap);
        }
        if (sendEth) { 
            uint256 ethBalance = address(this).balance;
            require(ethBalance > 0, "No ETH");
            _distributeTaxEth(address(this).balance); 
        }
    }

    function burn(uint256 amount) external {
        uint256 _tokensAvailable = balanceOf(msg.sender);
        require(amount <= _tokensAvailable, "balance too low");
        _burnTokens(msg.sender, amount);
        emit TokensBurned(msg.sender, amount);
    }

    function airdrop(address[] calldata addresses, uint256[] calldata tokenAmounts) external onlyOwner {
        require(addresses.length <= 250,"More than 250 wallets");
        require(addresses.length == tokenAmounts.length,"List length mismatch");

        uint256 airdropTotal = 0;
        for(uint i=0; i < addresses.length; i++){
            airdropTotal += (tokenAmounts[i] * 10**_decimals);
        }
        require(_balances[msg.sender] >= airdropTotal, "Token balance too low");

        for(uint i=0; i < addresses.length; i++){
            _balances[msg.sender] -= (tokenAmounts[i] * 10**_decimals);
            _balances[addresses[i]] += (tokenAmounts[i] * 10**_decimals);
            emit Transfer(msg.sender, addresses[i], (tokenAmounts[i] * 10**_decimals) );       
        }

        emit TokensAirdropped(addresses.length, airdropTotal);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnedByWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSplit","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"LP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"swapTokenPercent","type":"uint8"},{"internalType":"bool","name":"sendEth","type":"bool"}],"name":"manualTaxSwapAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sharesAutoLP","type":"uint16"},{"internalType":"uint16","name":"sharesMarketing","type":"uint16"},{"internalType":"uint16","name":"sharesDevelopment","type":"uint16"}],"name":"setFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransactionPermille","type":"uint16"},{"internalType":"uint16","name":"maxWalletPermille","type":"uint16"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minValue","type":"uint32"},{"internalType":"uint32","name":"minDivider","type":"uint32"},{"internalType":"uint32","name":"maxValue","type":"uint32"},{"internalType":"uint32","name":"maxDivider","type":"uint32"}],"name":"setTaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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 payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"development","type":"address"},{"internalType":"address","name":"LPtokens","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526056600060146101000a81548160ff021916908360ff1602179055506037600060156101000a81548160ff021916908360ff1602179055506005600060166101000a81548160ff021916908360ff1602179055506005600060176101000a81548160ff021916908360ff16021790555060008060186101000a81548160ff021916908360ff1602179055506001600060196101000a81548160ff021916908360ff160217905550603c6000601a6101000a81548161ffff021916908361ffff16021790555060286000601c6101000a81548161ffff021916908361ffff160217905550600080601e6101000a81548161ffff021916908361ffff1602179055506000601e9054906101000a900461ffff166000601c9054906101000a900461ffff166000601a9054906101000a900461ffff1662000143919062000b2e565b6200014f919062000b2e565b600160006101000a81548161ffff021916908361ffff1602179055507357776bf2800fe7d1a2581b21ce4fb6708bcc4aca600160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507357776bf2800fe7d1a2581b21ce4fb6708bcc4aca600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000225919062000cd6565b631dcd650062000236919062000d27565b6004556009600a62000249919062000cd6565b631dcd65006200025a919062000d27565b600555620186a0600a6009600a62000273919062000cd6565b631dcd650062000284919062000d27565b62000290919062000d27565b6200029c919062000da1565b600655620186a060966009600a620002b5919062000cd6565b631dcd6500620002c6919062000d27565b620002d2919062000d27565b620002de919062000da1565b600755737a250d5630b4cf539739df2c5dacb4c659f2488d600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060016101000a81548160ff0219169083151502179055503480156200035e57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006064601e6009600a620003f8919062000cd6565b631dcd650062000409919062000d27565b62000415919062000d27565b62000421919062000da1565b9050806009600a62000434919062000cd6565b631dcd650062000445919062000d27565b62000451919062000dd9565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405162000533919062000e25565b60405180910390a380600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600860008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405162000680919062000e25565b60405180910390a36001600a60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000e42565b600061ffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b3b8262000af1565b915062000b488362000af1565b9250828201905061ffff81111562000b655762000b6462000aff565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111562000bca5780860481111562000ba25762000ba162000aff565b5b600185161562000bb25780820291505b808102905062000bc28562000b6b565b945062000b82565b94509492505050565b60008262000be5576001905062000cb8565b8162000bf5576000905062000cb8565b816001811462000c0e576002811462000c195762000c4f565b600191505062000cb8565b60ff84111562000c2e5762000c2d62000aff565b5b8360020a91508482111562000c485762000c4762000aff565b5b5062000cb8565b5060208310610133831016604e8410600b841016171562000c895782820a90508381111562000c835762000c8262000aff565b5b62000cb8565b62000c98848484600162000b78565b9250905081840481111562000cb25762000cb162000aff565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ce38262000cbf565b915062000cf08362000cc9565b925062000d1f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bd3565b905092915050565b600062000d348262000cbf565b915062000d418362000cbf565b925082820262000d518162000cbf565b9150828204841483151762000d6b5762000d6a62000aff565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000dae8262000cbf565b915062000dbb8362000cbf565b92508262000dce5762000dcd62000d72565b5b828204905092915050565b600062000de68262000cbf565b915062000df38362000cbf565b925082820390508181111562000e0e5762000e0d62000aff565b5b92915050565b62000e1f8162000cbf565b82525050565b600060208201905062000e3c600083018462000e14565b92915050565b6155a78062000e526000396000f3fe6080604052600436106101f25760003560e01c80636373ea691161010d57806395d89b41116100a0578063c3f70b521161006f578063c3f70b52146106fa578063dd62ed3e14610725578063e8078d9414610762578063f2fde38b1461076c578063f8b45b0514610795576101f9565b806395d89b411461063e578063a6097b0a14610669578063a9059cbb14610692578063c04a5414146106cf576101f9565b806375f0a874116100dc57806375f0a8741461058257806376a39c28146105ad5780638d3e6e40146105d65780638da5cb5b14610613576101f9565b80636373ea69146104d8578063672434821461050557806370a082311461052e578063715018a61461056b576101f9565b8063368f4800116101855780634d4ce935116101545780634d4ce9351461041e5780634fcd24461461044957806357ff135a146104725780635a90a49e1461049b576101f9565b8063368f48001461037657806342966c681461039f57806346b89834146103c857806347062402146103f3576101f9565b806323b872dd116101c157806323b872dd146102ba5780632b14ca56146102f75780632fb528ba14610322578063313ce5671461034b576101f9565b806306fdde03146101fe578063095ea7b314610229578063147c9f6d1461026657806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107c0565b6040516102209190613d42565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613e02565b6107fd565b60405161025d9190613e5d565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613e78565b6108ef565b005b34801561029b57600080fd5b506102a4610cde565b6040516102b19190613eda565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613ef5565b610d02565b6040516102ee9190613e5d565b60405180910390f35b34801561030357600080fd5b5061030c610f0c565b6040516103199190613f64565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613fd7565b610f22565b005b34801561035757600080fd5b506103606110d1565b60405161036d9190613f64565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190614051565b6110da565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190614091565b611298565b005b3480156103d457600080fd5b506103dd611344565b6040516103ea9190613eda565b60405180910390f35b3480156103ff57600080fd5b5061040861134e565b6040516104159190613f64565b60405180910390f35b34801561042a57600080fd5b50610433611364565b6040516104409190613eda565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906140be565b61136e565b005b34801561047e57600080fd5b50610499600480360381019061049491906140fe565b611488565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190614151565b611665565b6040516104cf9190613e5d565b60405180910390f35b3480156104e457600080fd5b506104ed6116bb565b6040516104fc9392919061418d565b60405180910390f35b34801561051157600080fd5b5061052c6004803603810190610527919061427f565b6116fd565b005b34801561053a57600080fd5b5061055560048036038101906105509190614151565b611b55565b6040516105629190613eda565b60405180910390f35b34801561057757600080fd5b50610580611b9e565b005b34801561058e57600080fd5b50610597611ca7565b6040516105a4919061430f565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061432a565b611cd1565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614151565b611e3b565b60405161060a9190613e5d565b60405180910390f35b34801561061f57600080fd5b50610628611e91565b604051610635919061430f565b60405180910390f35b34801561064a57600080fd5b50610653611eba565b6040516106609190613d42565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b91906143b9565b611ef7565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613e02565b612136565b6040516106c69190613e5d565b60405180910390f35b3480156106db57600080fd5b506106e4612193565b6040516106f1919061430f565b60405180910390f35b34801561070657600080fd5b5061070f6121bd565b60405161071c9190613eda565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614420565b6121c7565b6040516107599190613eda565b60405180910390f35b61076a61224e565b005b34801561077857600080fd5b50610793600480360381019061078e919061449e565b612770565b005b3480156107a157600080fd5b506107aa612878565b6040516107b79190613eda565b60405180910390f35b60606040518060400160405280600781526020017f4d414e4b45595300000000000000000000000000000000000000000000000000815250905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108dd9190613eda565b60405180910390a36001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490614517565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610a215750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610a775750600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90614583565b60405180910390fd5b82600160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610cee9190614705565b631dcd6500610cfd9190614750565b905090565b6000610d0d84612882565b610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d43906147de565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ef85781600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7791906147fe565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f0384848461295d565b90509392505050565b60008060199054906101000a900460ff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614517565b60405180910390fd5b6001601060016101000a81548160ff02191690831515021790555060648260ff161115611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110099061487e565b60405180910390fd5b600060648360ff1661102330611b55565b61102d9190614750565b61103791906148cd565b90506009600a6110479190614705565b8111156110585761105781612e8c565b5b81156110b1576000479050600081116110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d9061494a565b60405180910390fd5b6110af476130ab565b505b506000601060016101000a81548160ff0219169083151502179055505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90614517565b60405180910390fd5b600060016103e88461ffff166009600a6111829190614705565b631dcd65006111919190614750565b61119b9190614750565b6111a591906148cd565b6111af919061496a565b90506004548110156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906149ea565b60405180910390fd5b80600481905550600060016103e88461ffff166009600a6112179190614705565b631dcd65006112269190614750565b6112309190614750565b61123a91906148cd565b611244919061496a565b905060055481101561128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128290614a56565b60405180910390fd5b8060058190555050505050565b60006112a333611b55565b9050808211156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90614ac2565b60405180910390fd5b6112f2338361323a565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb6836040516113389190613eda565b60405180910390a25050565b6000600654905090565b60008060189054906101000a900460ff16905090565b6000600754905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390614517565b60405180910390fd5b6063818361140a9190614ae2565b60ff16111561144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590614b63565b60405180910390fd5b81600060186101000a81548160ff021916908360ff16021790555080600060196101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90614517565b60405180910390fd5b808061151f5750815b156115b257600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614bcf565b60405180910390fd5b5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600080601a9054906101000a900461ffff166000601c9054906101000a900461ffff166000601e9054906101000a900461ffff16925092509250909192565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290614517565b60405180910390fd5b60fa8484905011156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990614c3b565b60405180910390fd5b81819050848490501461181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190614ca7565b60405180910390fd5b6000805b8585905081101561187b576009600a6118379190614705565b84848381811061184a57611849614cc7565b5b9050602002013561185b9190614750565b82611866919061496a565b9150808061187390614cf6565b91505061181e565b5080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590614d8a565b60405180910390fd5b60005b85859050811015611b11576009600a61191a9190614705565b84848381811061192d5761192c614cc7565b5b9050602002013561193e9190614750565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461198c91906147fe565b925050819055506009600a6119a19190614705565b8484838181106119b4576119b3614cc7565b5b905060200201356119c59190614750565b600860008888858181106119dc576119db614cc7565b5b90506020020160208101906119f19190614151565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3a919061496a565b92505081905550858582818110611a5457611a53614cc7565b5b9050602002016020810190611a699190614151565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a611ac59190614705565b878786818110611ad857611ad7614cc7565b5b90506020020135611ae99190614750565b604051611af69190613eda565b60405180910390a38080611b0990614cf6565b915050611901565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba954648585905082604051611b46929190614daa565b60405180910390a15050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390614517565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861636000604051611c9d919061430f565b60405180910390a1565b6000600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614517565b60405180910390fd5b6000818385611d6e9190614dd3565b611d789190614dd3565b905060008161ffff1611611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890614e55565b60405180910390fd5b836000601e6101000a81548161ffff021916908361ffff160217905550826000601a6101000a81548161ffff021916908361ffff160217905550816000601c6101000a81548161ffff021916908361ffff16021790555080600160006101000a81548161ffff021916908361ffff16021790555050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4d414e4b45590000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90614517565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611fa19190614705565b631dcd6500611fb09190614750565b611fba9190614750565b611fc491906148cd565b6006819055508063ffffffff168263ffffffff166009600a611fe69190614705565b631dcd6500611ff59190614750565b611fff9190614750565b61200991906148cd565b6007819055506006546007541015612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d90614ec1565b60405180910390fd5b620186a06009600a6120689190614705565b631dcd65006120779190614750565b61208191906148cd565b600754116120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90614f2d565b60405180910390fd5b60646009600a6120d49190614705565b631dcd65006120e39190614750565b6120ed91906148cd565b60075410612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212790614f99565b60405180910390fd5b50505050565b600061214133612882565b612180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612177906147de565b60405180910390fd5b61218b33848461295d565b905092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600454905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d390614517565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615005565b60405180910390fd5b601060009054906101000a900460ff16156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90615071565b60405180910390fd5b60003411806123e75750600047115b612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d906150dd565b60405180910390fd5b6000600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90615149565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612539919061517e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e6919061517e565b6040518363ffffffff1660e01b81526004016126039291906151ab565b6020604051808303816000875af1158015612622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612646919061517e565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126d1600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205447600061335a565b6001600f6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612753613448565b6000601060016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f590614517565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161286d9190615233565b60405180910390a150565b6000600554905090565b60008060009050601060009054906101000a900460ff16156128a75760019050612954565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129495750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561295357600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c49061529a565b60405180910390fd5b601060009054906101000a900460ff16612ac357600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a835750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906147de565b60405180910390fd5b5b601060019054906101000a900460ff16158015612b295750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3757612b366134e2565b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612b9f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf7575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612c4757612c07848484613681565b612c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3d90615306565b60405180910390fd5b5b6000612c54858585613818565b905060008184612c6491906147fe565b905083600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb191906147fe565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115612d8c5781600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d48919061496a565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd7919061496a565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e779190613eda565b60405180910390a36001925050509392505050565b612e9581613ac8565b6000600267ffffffffffffffff811115612eb257612eb1615326565b5b604051908082528060200260200182016040528015612ee05781602001602082028036833780820191505090505b5090503081600081518110612ef857612ef7614cc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc3919061517e565b81600181518110612fd757612fd6614cc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161307595949392919061544e565b600060405180830381600087803b15801561308f57600080fd5b505af11580156130a3573d6000803e3d6000fd5b505050505050565b600080601c9054906101000a900461ffff166000601a9054906101000a900461ffff166130d89190614dd3565b905060008161ffff1611156132365760008161ffff166000601a9054906101000a900461ffff1661ffff168461310e9190614750565b61311891906148cd565b905060008261ffff166000601c9054906101000a900461ffff1661ffff16856131419190614750565b61314b91906148cd565b905060008211156131c057600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156131be573d6000803e3d6000fd5b505b600081111561323357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613231573d6000803e3d6000fd5b505b50505b5050565b60008111156133565780600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461329291906147fe565b9250508190555080600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132e8919061496a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161334d9190613eda565b60405180910390a35b5050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561338c57600090505b61339584613ac8565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016133fc969594939291906154a8565b60606040518083038185885af115801561341a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061343f919061551e565b50505050505050565b606460016009600a61345a9190614705565b631dcd65006134699190614750565b6134739190614750565b61347d91906148cd565b600481905550606460016009600a6134959190614705565b631dcd65006134a49190614750565b6134ae9190614750565b6134b891906148cd565b6005819055506001601060006101000a81548160ff02191690831515021790555043600381905550565b6001601060016101000a81548160ff021916908315150217905550600061350830611b55565b905060065481101580156135285750601060009054906101000a900460ff165b1561366357600754811061353c5760075490505b60006002600160009054906101000a900461ffff1661ffff166000601e9054906101000a900461ffff1661ffff16846135759190614750565b61357f91906148cd565b61358991906148cd565b90506000818361359991906147fe565b90506009600a6135a99190614705565b8111156136475760004790506135be82612e8c565b600081476135cc91906147fe565b9050600080601e9054906101000a900461ffff1661ffff161115613644576000600160009054906101000a900461ffff1661ffff166000601e9054906101000a900461ffff1661ffff16836136219190614750565b61362b91906148cd565b905061363685613ac8565b6136428582600061335a565b505b50505b6000479050600081111561365f5761365e816130ab565b5b5050505b506000601060016101000a81548160ff021916908315150217905550565b60008060019050601060009054906101000a900460ff1680156136ee5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137445750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561380d5760045483111561375c576000905061380c565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613801575060055483600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ff919061496a565b115b1561380b57600090505b5b5b809150509392505050565b600080601060009054906101000a900460ff1615806138805750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806138d45750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138e25760009050613abd565b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a3c57600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600354613967919061496a565b613971919061496a565b43106139a8576064600060189054906101000a900460ff1660ff16846139979190614750565b6139a191906148cd565b9050613a37565b600060169054906101000a900460ff1660ff166003546139c8919061496a565b43106139ff576064600060159054906101000a900460ff1660ff16846139ee9190614750565b6139f891906148cd565b9050613a36565b6003544310613a35576064600060149054906101000a900460ff1660ff1684613a289190614750565b613a3291906148cd565b90505b5b5b613abc565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613abb576064600060199054906101000a900460ff1660ff1684613aae9190614750565b613ab891906148cd565b90505b5b5b809150509392505050565b80600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613caf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613ca69190613eda565b60405180910390a35b50565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cec578082015181840152602081019050613cd1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d1482613cb2565b613d1e8185613cbd565b9350613d2e818560208601613cce565b613d3781613cf8565b840191505092915050565b60006020820190508181036000830152613d5c8184613d09565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d9982613d6e565b9050919050565b613da981613d8e565b8114613db457600080fd5b50565b600081359050613dc681613da0565b92915050565b6000819050919050565b613ddf81613dcc565b8114613dea57600080fd5b50565b600081359050613dfc81613dd6565b92915050565b60008060408385031215613e1957613e18613d64565b5b6000613e2785828601613db7565b9250506020613e3885828601613ded565b9150509250929050565b60008115159050919050565b613e5781613e42565b82525050565b6000602082019050613e726000830184613e4e565b92915050565b600080600060608486031215613e9157613e90613d64565b5b6000613e9f86828701613db7565b9350506020613eb086828701613db7565b9250506040613ec186828701613db7565b9150509250925092565b613ed481613dcc565b82525050565b6000602082019050613eef6000830184613ecb565b92915050565b600080600060608486031215613f0e57613f0d613d64565b5b6000613f1c86828701613db7565b9350506020613f2d86828701613db7565b9250506040613f3e86828701613ded565b9150509250925092565b600060ff82169050919050565b613f5e81613f48565b82525050565b6000602082019050613f796000830184613f55565b92915050565b613f8881613f48565b8114613f9357600080fd5b50565b600081359050613fa581613f7f565b92915050565b613fb481613e42565b8114613fbf57600080fd5b50565b600081359050613fd181613fab565b92915050565b60008060408385031215613fee57613fed613d64565b5b6000613ffc85828601613f96565b925050602061400d85828601613fc2565b9150509250929050565b600061ffff82169050919050565b61402e81614017565b811461403957600080fd5b50565b60008135905061404b81614025565b92915050565b6000806040838503121561406857614067613d64565b5b60006140768582860161403c565b92505060206140878582860161403c565b9150509250929050565b6000602082840312156140a7576140a6613d64565b5b60006140b584828501613ded565b91505092915050565b600080604083850312156140d5576140d4613d64565b5b60006140e385828601613f96565b92505060206140f485828601613f96565b9150509250929050565b60008060006060848603121561411757614116613d64565b5b600061412586828701613db7565b935050602061413686828701613fc2565b925050604061414786828701613fc2565b9150509250925092565b60006020828403121561416757614166613d64565b5b600061417584828501613db7565b91505092915050565b61418781614017565b82525050565b60006060820190506141a2600083018661417e565b6141af602083018561417e565b6141bc604083018461417e565b949350505050565b600080fd5b600080fd5b600080fd5b60008083601f8401126141e9576141e86141c4565b5b8235905067ffffffffffffffff811115614206576142056141c9565b5b602083019150836020820283011115614222576142216141ce565b5b9250929050565b60008083601f84011261423f5761423e6141c4565b5b8235905067ffffffffffffffff81111561425c5761425b6141c9565b5b602083019150836020820283011115614278576142776141ce565b5b9250929050565b6000806000806040858703121561429957614298613d64565b5b600085013567ffffffffffffffff8111156142b7576142b6613d69565b5b6142c3878288016141d3565b9450945050602085013567ffffffffffffffff8111156142e6576142e5613d69565b5b6142f287828801614229565b925092505092959194509250565b61430981613d8e565b82525050565b60006020820190506143246000830184614300565b92915050565b60008060006060848603121561434357614342613d64565b5b60006143518682870161403c565b93505060206143628682870161403c565b92505060406143738682870161403c565b9150509250925092565b600063ffffffff82169050919050565b6143968161437d565b81146143a157600080fd5b50565b6000813590506143b38161438d565b92915050565b600080600080608085870312156143d3576143d2613d64565b5b60006143e1878288016143a4565b94505060206143f2878288016143a4565b9350506040614403878288016143a4565b9250506060614414878288016143a4565b91505092959194509250565b6000806040838503121561443757614436613d64565b5b600061444585828601613db7565b925050602061445685828601613db7565b9150509250929050565b600061446b82613d6e565b9050919050565b61447b81614460565b811461448657600080fd5b50565b60008135905061449881614472565b92915050565b6000602082840312156144b4576144b3613d64565b5b60006144c284828501614489565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b6000614501601883613cbd565b915061450c826144cb565b602082019050919050565b60006020820190508181036000830152614530816144f4565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b600061456d601783613cbd565b915061457882614537565b602082019050919050565b6000602082019050818103600083015261459c81614560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561462957808604811115614605576146046145a3565b5b60018516156146145780820291505b8081029050614622856145d2565b94506145e9565b94509492505050565b60008261464257600190506146fe565b8161465057600090506146fe565b816001811461466657600281146146705761469f565b60019150506146fe565b60ff841115614682576146816145a3565b5b8360020a915084821115614699576146986145a3565b5b506146fe565b5060208310610133831016604e8410600b84101617156146d45782820a9050838111156146cf576146ce6145a3565b5b6146fe565b6146e184848460016145df565b925090508184048111156146f8576146f76145a3565b5b81810290505b9392505050565b600061471082613dcc565b915061471b83613f48565b92506147487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614632565b905092915050565b600061475b82613dcc565b915061476683613dcc565b925082820261477481613dcc565b9150828204841483151761478b5761478a6145a3565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b60006147c8601083613cbd565b91506147d382614792565b602082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b600061480982613dcc565b915061481483613dcc565b925082820390508181111561482c5761482b6145a3565b5b92915050565b7f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000600082015250565b6000614868601a83613cbd565b915061487382614832565b602082019050919050565b600060208201905081810360008301526148978161485b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d882613dcc565b91506148e383613dcc565b9250826148f3576148f261489e565b5b828204905092915050565b7f4e6f204554480000000000000000000000000000000000000000000000000000600082015250565b6000614934600683613cbd565b915061493f826148fe565b602082019050919050565b6000602082019050818103600083015261496381614927565b9050919050565b600061497582613dcc565b915061498083613dcc565b9250828201905080821115614998576149976145a3565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b60006149d4600a83613cbd565b91506149df8261499e565b602082019050919050565b60006020820190508181036000830152614a03816149c7565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b6000614a40600e83613cbd565b9150614a4b82614a0a565b602082019050919050565b60006020820190508181036000830152614a6f81614a33565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b6000614aac600f83613cbd565b9150614ab782614a76565b602082019050919050565b60006020820190508181036000830152614adb81614a9f565b9050919050565b6000614aed82613f48565b9150614af883613f48565b9250828201905060ff811115614b1157614b106145a3565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b6000614b4d601283613cbd565b9150614b5882614b17565b602082019050919050565b60006020820190508181036000830152614b7c81614b40565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614bb9601083613cbd565b9150614bc482614b83565b602082019050919050565b60006020820190508181036000830152614be881614bac565b9050919050565b7f4d6f7265207468616e203235302077616c6c6574730000000000000000000000600082015250565b6000614c25601583613cbd565b9150614c3082614bef565b602082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f4c697374206c656e677468206d69736d61746368000000000000000000000000600082015250565b6000614c91601483613cbd565b9150614c9c82614c5b565b602082019050919050565b60006020820190508181036000830152614cc081614c84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d0182613dcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d3357614d326145a3565b5b600182019050919050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000614d74601583613cbd565b9150614d7f82614d3e565b602082019050919050565b60006020820190508181036000830152614da381614d67565b9050919050565b6000604082019050614dbf6000830185613ecb565b614dcc6020830184613ecb565b9392505050565b6000614dde82614017565b9150614de983614017565b9250828201905061ffff811115614e0357614e026145a3565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b6000614e3f600f83613cbd565b9150614e4a82614e09565b602082019050919050565b60006020820190508181036000830152614e6e81614e32565b9050919050565b7f4d696e2f4d6178206572726f7200000000000000000000000000000000000000600082015250565b6000614eab600d83613cbd565b9150614eb682614e75565b602082019050919050565b60006020820190508181036000830152614eda81614e9e565b9050919050565b7f4d617820746f6f206c6f77000000000000000000000000000000000000000000600082015250565b6000614f17600b83613cbd565b9150614f2282614ee1565b602082019050919050565b60006020820190508181036000830152614f4681614f0a565b9050919050565b7f4d617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000614f83600c83613cbd565b9150614f8e82614f4d565b602082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b6000614fef600983613cbd565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b600061505b600f83613cbd565b915061506682615025565b602082019050919050565b6000602082019050818103600083015261508a8161504e565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b60006150c7601d83613cbd565b91506150d282615091565b602082019050919050565b600060208201905081810360008301526150f6816150ba565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000615133601583613cbd565b915061513e826150fd565b602082019050919050565b6000602082019050818103600083015261516281615126565b9050919050565b60008151905061517881613da0565b92915050565b60006020828403121561519457615193613d64565b5b60006151a284828501615169565b91505092915050565b60006040820190506151c06000830185614300565b6151cd6020830184614300565b9392505050565b6000819050919050565b60006151f96151f46151ef84613d6e565b6151d4565b613d6e565b9050919050565b600061520b826151de565b9050919050565b600061521d82615200565b9050919050565b61522d81615212565b82525050565b60006020820190506152486000830184615224565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b6000615284601d83613cbd565b915061528f8261524e565b602082019050919050565b600060208201905081810360008301526152b381615277565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b60006152f0601183613cbd565b91506152fb826152ba565b602082019050919050565b6000602082019050818103600083015261531f816152e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061537a61537561537084615355565b6151d4565b613dcc565b9050919050565b61538a8161535f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153c581613d8e565b82525050565b60006153d783836153bc565b60208301905092915050565b6000602082019050919050565b60006153fb82615390565b615405818561539b565b9350615410836153ac565b8060005b8381101561544157815161542888826153cb565b9750615433836153e3565b925050600181019050615414565b5085935050505092915050565b600060a0820190506154636000830188613ecb565b6154706020830187615381565b818103604083015261548281866153f0565b90506154916060830185614300565b61549e6080830184613ecb565b9695505050505050565b600060c0820190506154bd6000830189614300565b6154ca6020830188613ecb565b6154d76040830187615381565b6154e46060830186615381565b6154f16080830185614300565b6154fe60a0830184613ecb565b979650505050505050565b60008151905061551881613dd6565b92915050565b60008060006060848603121561553757615536613d64565b5b600061554586828701615509565b935050602061555686828701615509565b925050604061556786828701615509565b915050925092509256fea264697066735822122039b84dab8f07bba5b330483c6f69418e1ebb6160237078a4a3c365a4519122c264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80636373ea691161010d57806395d89b41116100a0578063c3f70b521161006f578063c3f70b52146106fa578063dd62ed3e14610725578063e8078d9414610762578063f2fde38b1461076c578063f8b45b0514610795576101f9565b806395d89b411461063e578063a6097b0a14610669578063a9059cbb14610692578063c04a5414146106cf576101f9565b806375f0a874116100dc57806375f0a8741461058257806376a39c28146105ad5780638d3e6e40146105d65780638da5cb5b14610613576101f9565b80636373ea69146104d8578063672434821461050557806370a082311461052e578063715018a61461056b576101f9565b8063368f4800116101855780634d4ce935116101545780634d4ce9351461041e5780634fcd24461461044957806357ff135a146104725780635a90a49e1461049b576101f9565b8063368f48001461037657806342966c681461039f57806346b89834146103c857806347062402146103f3576101f9565b806323b872dd116101c157806323b872dd146102ba5780632b14ca56146102f75780632fb528ba14610322578063313ce5671461034b576101f9565b806306fdde03146101fe578063095ea7b314610229578063147c9f6d1461026657806318160ddd1461028f576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107c0565b6040516102209190613d42565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613e02565b6107fd565b60405161025d9190613e5d565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613e78565b6108ef565b005b34801561029b57600080fd5b506102a4610cde565b6040516102b19190613eda565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190613ef5565b610d02565b6040516102ee9190613e5d565b60405180910390f35b34801561030357600080fd5b5061030c610f0c565b6040516103199190613f64565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613fd7565b610f22565b005b34801561035757600080fd5b506103606110d1565b60405161036d9190613f64565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190614051565b6110da565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190614091565b611298565b005b3480156103d457600080fd5b506103dd611344565b6040516103ea9190613eda565b60405180910390f35b3480156103ff57600080fd5b5061040861134e565b6040516104159190613f64565b60405180910390f35b34801561042a57600080fd5b50610433611364565b6040516104409190613eda565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b91906140be565b61136e565b005b34801561047e57600080fd5b50610499600480360381019061049491906140fe565b611488565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190614151565b611665565b6040516104cf9190613e5d565b60405180910390f35b3480156104e457600080fd5b506104ed6116bb565b6040516104fc9392919061418d565b60405180910390f35b34801561051157600080fd5b5061052c6004803603810190610527919061427f565b6116fd565b005b34801561053a57600080fd5b5061055560048036038101906105509190614151565b611b55565b6040516105629190613eda565b60405180910390f35b34801561057757600080fd5b50610580611b9e565b005b34801561058e57600080fd5b50610597611ca7565b6040516105a4919061430f565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf919061432a565b611cd1565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614151565b611e3b565b60405161060a9190613e5d565b60405180910390f35b34801561061f57600080fd5b50610628611e91565b604051610635919061430f565b60405180910390f35b34801561064a57600080fd5b50610653611eba565b6040516106609190613d42565b60405180910390f35b34801561067557600080fd5b50610690600480360381019061068b91906143b9565b611ef7565b005b34801561069e57600080fd5b506106b960048036038101906106b49190613e02565b612136565b6040516106c69190613e5d565b60405180910390f35b3480156106db57600080fd5b506106e4612193565b6040516106f1919061430f565b60405180910390f35b34801561070657600080fd5b5061070f6121bd565b60405161071c9190613eda565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614420565b6121c7565b6040516107599190613eda565b60405180910390f35b61076a61224e565b005b34801561077857600080fd5b50610793600480360381019061078e919061449e565b612770565b005b3480156107a157600080fd5b506107aa612878565b6040516107b79190613eda565b60405180910390f35b60606040518060400160405280600781526020017f4d414e4b45595300000000000000000000000000000000000000000000000000815250905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108dd9190613eda565b60405180910390a36001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490614517565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610a215750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610a775750600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90614583565b60405180910390fd5b82600160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610cee9190614705565b631dcd6500610cfd9190614750565b905090565b6000610d0d84612882565b610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d43906147de565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610ef85781600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e7791906147fe565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f0384848461295d565b90509392505050565b60008060199054906101000a900460ff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa790614517565b60405180910390fd5b6001601060016101000a81548160ff02191690831515021790555060648260ff161115611012576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110099061487e565b60405180910390fd5b600060648360ff1661102330611b55565b61102d9190614750565b61103791906148cd565b90506009600a6110479190614705565b8111156110585761105781612e8c565b5b81156110b1576000479050600081116110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d9061494a565b60405180910390fd5b6110af476130ab565b505b506000601060016101000a81548160ff0219169083151502179055505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90614517565b60405180910390fd5b600060016103e88461ffff166009600a6111829190614705565b631dcd65006111919190614750565b61119b9190614750565b6111a591906148cd565b6111af919061496a565b90506004548110156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed906149ea565b60405180910390fd5b80600481905550600060016103e88461ffff166009600a6112179190614705565b631dcd65006112269190614750565b6112309190614750565b61123a91906148cd565b611244919061496a565b905060055481101561128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128290614a56565b60405180910390fd5b8060058190555050505050565b60006112a333611b55565b9050808211156112e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df90614ac2565b60405180910390fd5b6112f2338361323a565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb6836040516113389190613eda565b60405180910390a25050565b6000600654905090565b60008060189054906101000a900460ff16905090565b6000600754905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390614517565b60405180910390fd5b6063818361140a9190614ae2565b60ff16111561144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590614b63565b60405180910390fd5b81600060186101000a81548160ff021916908360ff16021790555080600060196101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90614517565b60405180910390fd5b808061151f5750815b156115b257600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614bcf565b60405180910390fd5b5b81600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600080601a9054906101000a900461ffff166000601c9054906101000a900461ffff166000601e9054906101000a900461ffff16925092509250909192565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461178b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178290614517565b60405180910390fd5b60fa8484905011156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c990614c3b565b60405180910390fd5b81819050848490501461181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190614ca7565b60405180910390fd5b6000805b8585905081101561187b576009600a6118379190614705565b84848381811061184a57611849614cc7565b5b9050602002013561185b9190614750565b82611866919061496a565b9150808061187390614cf6565b91505061181e565b5080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590614d8a565b60405180910390fd5b60005b85859050811015611b11576009600a61191a9190614705565b84848381811061192d5761192c614cc7565b5b9050602002013561193e9190614750565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461198c91906147fe565b925050819055506009600a6119a19190614705565b8484838181106119b4576119b3614cc7565b5b905060200201356119c59190614750565b600860008888858181106119dc576119db614cc7565b5b90506020020160208101906119f19190614151565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3a919061496a565b92505081905550858582818110611a5457611a53614cc7565b5b9050602002016020810190611a699190614151565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a611ac59190614705565b878786818110611ad857611ad7614cc7565b5b90506020020135611ae99190614750565b604051611af69190613eda565b60405180910390a38080611b0990614cf6565b915050611901565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba954648585905082604051611b46929190614daa565b60405180910390a15050505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390614517565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861636000604051611c9d919061430f565b60405180910390a1565b6000600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614517565b60405180910390fd5b6000818385611d6e9190614dd3565b611d789190614dd3565b905060008161ffff1611611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890614e55565b60405180910390fd5b836000601e6101000a81548161ffff021916908361ffff160217905550826000601a6101000a81548161ffff021916908361ffff160217905550816000601c6101000a81548161ffff021916908361ffff16021790555080600160006101000a81548161ffff021916908361ffff16021790555050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f4d414e4b45590000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90614517565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611fa19190614705565b631dcd6500611fb09190614750565b611fba9190614750565b611fc491906148cd565b6006819055508063ffffffff168263ffffffff166009600a611fe69190614705565b631dcd6500611ff59190614750565b611fff9190614750565b61200991906148cd565b6007819055506006546007541015612056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204d90614ec1565b60405180910390fd5b620186a06009600a6120689190614705565b631dcd65006120779190614750565b61208191906148cd565b600754116120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb90614f2d565b60405180910390fd5b60646009600a6120d49190614705565b631dcd65006120e39190614750565b6120ed91906148cd565b60075410612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212790614f99565b60405180910390fd5b50505050565b600061214133612882565b612180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612177906147de565b60405180910390fd5b61218b33848461295d565b905092915050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600454905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d390614517565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615005565b60405180910390fd5b601060009054906101000a900460ff16156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf90615071565b60405180910390fd5b60003411806123e75750600047115b612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d906150dd565b60405180910390fd5b6000600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f90615149565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612539919061517e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e6919061517e565b6040518363ffffffff1660e01b81526004016126039291906151ab565b6020604051808303816000875af1158015612622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612646919061517e565b600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126d1600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205447600061335a565b6001600f6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612753613448565b6000601060016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f590614517565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161286d9190615233565b60405180910390a150565b6000600554905090565b60008060009050601060009054906101000a900460ff16156128a75760019050612954565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129495750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561295357600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c49061529a565b60405180910390fd5b601060009054906101000a900460ff16612ac357600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a835750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab9906147de565b60405180910390fd5b5b601060019054906101000a900460ff16158015612b295750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3757612b366134e2565b5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612b9f57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bf7575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612c4757612c07848484613681565b612c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3d90615306565b60405180910390fd5b5b6000612c54858585613818565b905060008184612c6491906147fe565b905083600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb191906147fe565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115612d8c5781600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d48919061496a565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd7919061496a565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612e779190613eda565b60405180910390a36001925050509392505050565b612e9581613ac8565b6000600267ffffffffffffffff811115612eb257612eb1615326565b5b604051908082528060200260200182016040528015612ee05781602001602082028036833780820191505090505b5090503081600081518110612ef857612ef7614cc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc3919061517e565b81600181518110612fd757612fd6614cc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161307595949392919061544e565b600060405180830381600087803b15801561308f57600080fd5b505af11580156130a3573d6000803e3d6000fd5b505050505050565b600080601c9054906101000a900461ffff166000601a9054906101000a900461ffff166130d89190614dd3565b905060008161ffff1611156132365760008161ffff166000601a9054906101000a900461ffff1661ffff168461310e9190614750565b61311891906148cd565b905060008261ffff166000601c9054906101000a900461ffff1661ffff16856131419190614750565b61314b91906148cd565b905060008211156131c057600160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156131be573d6000803e3d6000fd5b505b600081111561323357600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613231573d6000803e3d6000fd5b505b50505b5050565b60008111156133565780600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461329291906147fe565b9250508190555080600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132e8919061496a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161334d9190613eda565b60405180910390a35b5050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050811561338c57600090505b61339584613ac8565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b81526004016133fc969594939291906154a8565b60606040518083038185885af115801561341a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061343f919061551e565b50505050505050565b606460016009600a61345a9190614705565b631dcd65006134699190614750565b6134739190614750565b61347d91906148cd565b600481905550606460016009600a6134959190614705565b631dcd65006134a49190614750565b6134ae9190614750565b6134b891906148cd565b6005819055506001601060006101000a81548160ff02191690831515021790555043600381905550565b6001601060016101000a81548160ff021916908315150217905550600061350830611b55565b905060065481101580156135285750601060009054906101000a900460ff165b1561366357600754811061353c5760075490505b60006002600160009054906101000a900461ffff1661ffff166000601e9054906101000a900461ffff1661ffff16846135759190614750565b61357f91906148cd565b61358991906148cd565b90506000818361359991906147fe565b90506009600a6135a99190614705565b8111156136475760004790506135be82612e8c565b600081476135cc91906147fe565b9050600080601e9054906101000a900461ffff1661ffff161115613644576000600160009054906101000a900461ffff1661ffff166000601e9054906101000a900461ffff1661ffff16836136219190614750565b61362b91906148cd565b905061363685613ac8565b6136428582600061335a565b505b50505b6000479050600081111561365f5761365e816130ab565b5b5050505b506000601060016101000a81548160ff021916908315150217905550565b60008060019050601060009054906101000a900460ff1680156136ee5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137445750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561380d5760045483111561375c576000905061380c565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613801575060055483600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137ff919061496a565b115b1561380b57600090505b5b5b809150509392505050565b600080601060009054906101000a900460ff1615806138805750600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806138d45750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156138e25760009050613abd565b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a3c57600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600354613967919061496a565b613971919061496a565b43106139a8576064600060189054906101000a900460ff1660ff16846139979190614750565b6139a191906148cd565b9050613a37565b600060169054906101000a900460ff1660ff166003546139c8919061496a565b43106139ff576064600060159054906101000a900460ff1660ff16846139ee9190614750565b6139f891906148cd565b9050613a36565b6003544310613a35576064600060149054906101000a900460ff1660ff1684613a289190614750565b613a3291906148cd565b90505b5b5b613abc565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613abb576064600060199054906101000a900460ff1660ff1684613aae9190614750565b613ab891906148cd565b90505b5b5b809150509392505050565b80600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613caf577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613ca69190613eda565b60405180910390a35b50565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cec578082015181840152602081019050613cd1565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d1482613cb2565b613d1e8185613cbd565b9350613d2e818560208601613cce565b613d3781613cf8565b840191505092915050565b60006020820190508181036000830152613d5c8184613d09565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d9982613d6e565b9050919050565b613da981613d8e565b8114613db457600080fd5b50565b600081359050613dc681613da0565b92915050565b6000819050919050565b613ddf81613dcc565b8114613dea57600080fd5b50565b600081359050613dfc81613dd6565b92915050565b60008060408385031215613e1957613e18613d64565b5b6000613e2785828601613db7565b9250506020613e3885828601613ded565b9150509250929050565b60008115159050919050565b613e5781613e42565b82525050565b6000602082019050613e726000830184613e4e565b92915050565b600080600060608486031215613e9157613e90613d64565b5b6000613e9f86828701613db7565b9350506020613eb086828701613db7565b9250506040613ec186828701613db7565b9150509250925092565b613ed481613dcc565b82525050565b6000602082019050613eef6000830184613ecb565b92915050565b600080600060608486031215613f0e57613f0d613d64565b5b6000613f1c86828701613db7565b9350506020613f2d86828701613db7565b9250506040613f3e86828701613ded565b9150509250925092565b600060ff82169050919050565b613f5e81613f48565b82525050565b6000602082019050613f796000830184613f55565b92915050565b613f8881613f48565b8114613f9357600080fd5b50565b600081359050613fa581613f7f565b92915050565b613fb481613e42565b8114613fbf57600080fd5b50565b600081359050613fd181613fab565b92915050565b60008060408385031215613fee57613fed613d64565b5b6000613ffc85828601613f96565b925050602061400d85828601613fc2565b9150509250929050565b600061ffff82169050919050565b61402e81614017565b811461403957600080fd5b50565b60008135905061404b81614025565b92915050565b6000806040838503121561406857614067613d64565b5b60006140768582860161403c565b92505060206140878582860161403c565b9150509250929050565b6000602082840312156140a7576140a6613d64565b5b60006140b584828501613ded565b91505092915050565b600080604083850312156140d5576140d4613d64565b5b60006140e385828601613f96565b92505060206140f485828601613f96565b9150509250929050565b60008060006060848603121561411757614116613d64565b5b600061412586828701613db7565b935050602061413686828701613fc2565b925050604061414786828701613fc2565b9150509250925092565b60006020828403121561416757614166613d64565b5b600061417584828501613db7565b91505092915050565b61418781614017565b82525050565b60006060820190506141a2600083018661417e565b6141af602083018561417e565b6141bc604083018461417e565b949350505050565b600080fd5b600080fd5b600080fd5b60008083601f8401126141e9576141e86141c4565b5b8235905067ffffffffffffffff811115614206576142056141c9565b5b602083019150836020820283011115614222576142216141ce565b5b9250929050565b60008083601f84011261423f5761423e6141c4565b5b8235905067ffffffffffffffff81111561425c5761425b6141c9565b5b602083019150836020820283011115614278576142776141ce565b5b9250929050565b6000806000806040858703121561429957614298613d64565b5b600085013567ffffffffffffffff8111156142b7576142b6613d69565b5b6142c3878288016141d3565b9450945050602085013567ffffffffffffffff8111156142e6576142e5613d69565b5b6142f287828801614229565b925092505092959194509250565b61430981613d8e565b82525050565b60006020820190506143246000830184614300565b92915050565b60008060006060848603121561434357614342613d64565b5b60006143518682870161403c565b93505060206143628682870161403c565b92505060406143738682870161403c565b9150509250925092565b600063ffffffff82169050919050565b6143968161437d565b81146143a157600080fd5b50565b6000813590506143b38161438d565b92915050565b600080600080608085870312156143d3576143d2613d64565b5b60006143e1878288016143a4565b94505060206143f2878288016143a4565b9350506040614403878288016143a4565b9250506060614414878288016143a4565b91505092959194509250565b6000806040838503121561443757614436613d64565b5b600061444585828601613db7565b925050602061445685828601613db7565b9150509250929050565b600061446b82613d6e565b9050919050565b61447b81614460565b811461448657600080fd5b50565b60008135905061449881614472565b92915050565b6000602082840312156144b4576144b3613d64565b5b60006144c284828501614489565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b6000614501601883613cbd565b915061450c826144cb565b602082019050919050565b60006020820190508181036000830152614530816144f4565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b600061456d601783613cbd565b915061457882614537565b602082019050919050565b6000602082019050818103600083015261459c81614560565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561462957808604811115614605576146046145a3565b5b60018516156146145780820291505b8081029050614622856145d2565b94506145e9565b94509492505050565b60008261464257600190506146fe565b8161465057600090506146fe565b816001811461466657600281146146705761469f565b60019150506146fe565b60ff841115614682576146816145a3565b5b8360020a915084821115614699576146986145a3565b5b506146fe565b5060208310610133831016604e8410600b84101617156146d45782820a9050838111156146cf576146ce6145a3565b5b6146fe565b6146e184848460016145df565b925090508184048111156146f8576146f76145a3565b5b81810290505b9392505050565b600061471082613dcc565b915061471b83613f48565b92506147487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614632565b905092915050565b600061475b82613dcc565b915061476683613dcc565b925082820261477481613dcc565b9150828204841483151761478b5761478a6145a3565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b60006147c8601083613cbd565b91506147d382614792565b602082019050919050565b600060208201905081810360008301526147f7816147bb565b9050919050565b600061480982613dcc565b915061481483613dcc565b925082820390508181111561482c5761482b6145a3565b5b92915050565b7f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000600082015250565b6000614868601a83613cbd565b915061487382614832565b602082019050919050565b600060208201905081810360008301526148978161485b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d882613dcc565b91506148e383613dcc565b9250826148f3576148f261489e565b5b828204905092915050565b7f4e6f204554480000000000000000000000000000000000000000000000000000600082015250565b6000614934600683613cbd565b915061493f826148fe565b602082019050919050565b6000602082019050818103600083015261496381614927565b9050919050565b600061497582613dcc565b915061498083613dcc565b9250828201905080821115614998576149976145a3565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b60006149d4600a83613cbd565b91506149df8261499e565b602082019050919050565b60006020820190508181036000830152614a03816149c7565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b6000614a40600e83613cbd565b9150614a4b82614a0a565b602082019050919050565b60006020820190508181036000830152614a6f81614a33565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b6000614aac600f83613cbd565b9150614ab782614a76565b602082019050919050565b60006020820190508181036000830152614adb81614a9f565b9050919050565b6000614aed82613f48565b9150614af883613f48565b9250828201905060ff811115614b1157614b106145a3565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b6000614b4d601283613cbd565b9150614b5882614b17565b602082019050919050565b60006020820190508181036000830152614b7c81614b40565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614bb9601083613cbd565b9150614bc482614b83565b602082019050919050565b60006020820190508181036000830152614be881614bac565b9050919050565b7f4d6f7265207468616e203235302077616c6c6574730000000000000000000000600082015250565b6000614c25601583613cbd565b9150614c3082614bef565b602082019050919050565b60006020820190508181036000830152614c5481614c18565b9050919050565b7f4c697374206c656e677468206d69736d61746368000000000000000000000000600082015250565b6000614c91601483613cbd565b9150614c9c82614c5b565b602082019050919050565b60006020820190508181036000830152614cc081614c84565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d0182613dcc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d3357614d326145a3565b5b600182019050919050565b7f546f6b656e2062616c616e636520746f6f206c6f770000000000000000000000600082015250565b6000614d74601583613cbd565b9150614d7f82614d3e565b602082019050919050565b60006020820190508181036000830152614da381614d67565b9050919050565b6000604082019050614dbf6000830185613ecb565b614dcc6020830184613ecb565b9392505050565b6000614dde82614017565b9150614de983614017565b9250828201905061ffff811115614e0357614e026145a3565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b6000614e3f600f83613cbd565b9150614e4a82614e09565b602082019050919050565b60006020820190508181036000830152614e6e81614e32565b9050919050565b7f4d696e2f4d6178206572726f7200000000000000000000000000000000000000600082015250565b6000614eab600d83613cbd565b9150614eb682614e75565b602082019050919050565b60006020820190508181036000830152614eda81614e9e565b9050919050565b7f4d617820746f6f206c6f77000000000000000000000000000000000000000000600082015250565b6000614f17600b83613cbd565b9150614f2282614ee1565b602082019050919050565b60006020820190508181036000830152614f4681614f0a565b9050919050565b7f4d617820746f6f20686967680000000000000000000000000000000000000000600082015250565b6000614f83600c83613cbd565b9150614f8e82614f4d565b602082019050919050565b60006020820190508181036000830152614fb281614f76565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b6000614fef600983613cbd565b9150614ffa82614fb9565b602082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b600061505b600f83613cbd565b915061506682615025565b602082019050919050565b6000602082019050818103600083015261508a8161504e565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b60006150c7601d83613cbd565b91506150d282615091565b602082019050919050565b600060208201905081810360008301526150f6816150ba565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000615133601583613cbd565b915061513e826150fd565b602082019050919050565b6000602082019050818103600083015261516281615126565b9050919050565b60008151905061517881613da0565b92915050565b60006020828403121561519457615193613d64565b5b60006151a284828501615169565b91505092915050565b60006040820190506151c06000830185614300565b6151cd6020830184614300565b9392505050565b6000819050919050565b60006151f96151f46151ef84613d6e565b6151d4565b613d6e565b9050919050565b600061520b826151de565b9050919050565b600061521d82615200565b9050919050565b61522d81615212565b82525050565b60006020820190506152486000830184615224565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b6000615284601d83613cbd565b915061528f8261524e565b602082019050919050565b600060208201905081810360008301526152b381615277565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b60006152f0601183613cbd565b91506152fb826152ba565b602082019050919050565b6000602082019050818103600083015261531f816152e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061537a61537561537084615355565b6151d4565b613dcc565b9050919050565b61538a8161535f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6153c581613d8e565b82525050565b60006153d783836153bc565b60208301905092915050565b6000602082019050919050565b60006153fb82615390565b615405818561539b565b9350615410836153ac565b8060005b8381101561544157815161542888826153cb565b9750615433836153e3565b925050600181019050615414565b5085935050505092915050565b600060a0820190506154636000830188613ecb565b6154706020830187615381565b818103604083015261548281866153f0565b90506154916060830185614300565b61549e6080830184613ecb565b9695505050505050565b600060c0820190506154bd6000830189614300565b6154ca6020830188613ecb565b6154d76040830187615381565b6154e46060830186615381565b6154f16080830185614300565b6154fe60a0830184613ecb565b979650505050505050565b60008151905061551881613dd6565b92915050565b60008060006060848603121561553757615536613d64565b5b600061554586828701615509565b935050602061555686828701615509565b925050604061556786828701615509565b915050925092509256fea264697066735822122039b84dab8f07bba5b330483c6f69418e1ebb6160237078a4a3c365a4519122c264736f6c63430008130033

Deployed Bytecode Sourcemap

6028:16293:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9277:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9615:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16370:535;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9007:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10072:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15239:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20598:567;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9101:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17312:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21173:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17118:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15149:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17214:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15517:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14891:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14653:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15333:178;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21442:876;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9363:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5835:137;;;;;;;;;;;;;:::i;:::-;;16150:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15708:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14770:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5585:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9187:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17782:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9839:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16257:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17014:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9474:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10809:608;;;:::i;:::-;;5672:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16913:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9277:80;9325:13;9349:5;;;;;;;;;;;;;;;;;9342:12;;9277:80;:::o;9615:216::-;9690:4;9742:6;9707:11;:23;9719:10;9707:23;;;;;;;;;;;;;;;:32;9731:7;9707:32;;;;;;;;;;;;;;;:41;;;;9785:7;9764:37;;9773:10;9764:37;;;9794:6;9764:37;;;;;;:::i;:::-;;;;;;;;9819:4;9812:11;;9615:216;;;;:::o;16370:535::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;16490:5:::1;:16;16496:9;16490:16;;;;;;;;;;;;;;;;;;;;;;;;;16489:17;:40;;;;;16511:5;:18;16517:11;16511:18;;;;;;;;;;;;;;;;;;;;;;;;;16510:19;16489:40;:60;;;;;16534:5;:15;16540:8;16534:15;;;;;;;;;;;;;;;;;;;;;;;;;16533:16;16489:60;16481:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;16625:9;16598:16;;:37;;;;;;;;;;;;;;;;;;16675:11;16646:18;;:41;;;;;;;;;;;;;;;;;;16709:8;16698;;:19;;;;;;;;;;;;;;;;;;16759:4;16738:7;:18;16746:9;16738:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;16797:4;16774:9;:20;16784:9;16774:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;16845:4;16822:7;:20;16830:11;16822:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;16893:4;16868:9;:22;16878:11;16868:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;16370:535:::0;;;:::o;9007:88::-;9062:7;6107:1;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;9073:19;;9007:88;:::o;10072:404::-;10172:4;10197:25;10215:6;10197:17;:25::i;:::-;10189:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;10292:17;10257:11;:19;10269:6;10257:19;;;;;;;;;;;;;;;:31;10277:10;10257:31;;;;;;;;;;;;;;;;:52;10254:157;;10393:6;10359:11;:19;10371:6;10359:19;;;;;;;;;;;;;;;:31;10379:10;10359:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;10325:11;:19;10337:6;10325:19;;;;;;;;;;;;;;;:31;10345:10;10325:31;;;;;;;;;;;;;;;:74;;;;10254:157;10428:40;10442:6;10450:9;10461:6;10428:13;:40::i;:::-;10421:47;;10072:404;;;;;:::o;15239:86::-;15280:5;15305:12;;;;;;;;;;;15298:19;;15239:86;:::o;20598:567::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7924:4:::1;7911:10;;:17;;;;;;;;;;;;;;;;;;20736:3:::2;20716:16;:23;;;;20708:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;20781:20;20850:3;20831:16;20804:43;;:24;20822:4;20804:9;:24::i;:::-;:43;;;;:::i;:::-;:49;;;;:::i;:::-;20781:72;;6107:1;20883:2;:15;;;;:::i;:::-;20868:12;:30;20864:97;;;20915:34;20936:12;20915:20;:34::i;:::-;20864:97;20975:7;20971:187;;;21000:18;21021:21;21000:42;;21078:1;21065:10;:14;21057:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;21105:40;21123:21;21105:17;:40::i;:::-;20984:174;20971:187;20697:468;7966:5:::1;7953:10;;:18;;;;;;;;;;;;;;;;;;20598:567:::0;;:::o;9101:80::-;9153:5;6107:1;9162:16;;9101:80;:::o;17312:462::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;17418:16:::1;17484:1;17477:4;17452:22;17437:37;;6107:1;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;17437:37;;;;:::i;:::-;:44;;;;:::i;:::-;:48;;;;:::i;:::-;17418:67;;17516:12;;17504:8;:24;;17496:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;17569:8;17554:12;:23;;;;17588:20;17653:1;17646:4;17626:17;17611:32;;6107:1;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;17611:32;;;;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;17588:66;;17689:16;;17673:12;:32;;17665:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;17754:12;17735:16;:31;;;;17407:367;;17312:462:::0;;:::o;21173:261::-;21223:24;21250:21;21260:10;21250:9;:21::i;:::-;21223:48;;21300:16;21290:6;:26;;21282:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;21347:31;21359:10;21371:6;21347:11;:31::i;:::-;21407:10;21394:32;;;21419:6;21394:32;;;;;;:::i;:::-;;;;;;;;21212:222;21173:261;:::o;17118:90::-;17162:7;17189:11;;17182:18;;17118:90;:::o;15149:84::-;15189:5;15214:11;;;;;;;;;;;15207:18;;15149:84;:::o;17214:90::-;17258:7;17285:11;;17278:18;;17214:90;:::o;15517:183::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15609:2:::1;15601:4;15595:3;:10;;;;:::i;:::-;:16;;;;15587:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;15659:3;15645:11;;:17;;;;;;;;;;;;;;;;;;15688:4;15673:12;;:19;;;;;;;;;;;;;;;;;;15517:183:::0;;:::o;14891:250::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;14988:8:::1;:18;;;;15000:6;14988:18;14984:72;;;15019:5;:13;15025:6;15019:13;;;;;;;;;;;;;;;;;;;;;;;;;15018:14;15010:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;14984:72;15086:6;15066:7;:17;15075:6;15066:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;15125:8;15103:9;:19;15114:6;15103:19;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;14891:250:::0;;;:::o;14653:110::-;14716:4;14740:7;:15;14748:6;14740:15;;;;;;;;;;;;;;;;;;;;;;;;;14733:22;;14653:110;;;:::o;15333:178::-;15376:16;15394:18;15414:9;15446:19;;;;;;;;;;;15467:21;;;;;;;;;;;15490:12;;;;;;;;;;;15437:66;;;;;;15333:178;;;:::o;21442:876::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21580:3:::1;21560:9;;:16;;:23;;21552:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;21647:12;;:19;;21627:9;;:16;;:39;21619:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21703:20;21742:6:::0;21738:116:::1;21756:9;;:16;;21752:1;:20;21738:116;;;6107:1;21828:2;:13;;;;:::i;:::-;21810:12;;21823:1;21810:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;21793:49;;;;;:::i;:::-;;;21774:3;;;;;:::i;:::-;;;;21738:116;;;;21897:12;21872:9;:21;21882:10;21872:21;;;;;;;;;;;;;;;;:37;;21864:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21952:6;21948:297;21966:9;;:16;;21962:1;:20;21948:297;;;6107:1;22047:2;:13;;;;:::i;:::-;22029:12;;22042:1;22029:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;22003:9;:21;22013:10;22003:21;;;;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;6107:1;22122:2;:13;;;;:::i;:::-;22104:12;;22117:1;22104:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;22076:9;:23;22086:9;;22096:1;22086:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22076:23;;;;;;;;;;;;;;;;:60;;;;;;;:::i;:::-;;;;;;;;22177:9;;22187:1;22177:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22156:70;;22165:10;22156:70;;;6107:1;22210:2;:13;;;;:::i;:::-;22192:12;;22205:1;22192:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;22156:70;;;;;;:::i;:::-;;;;;;;;21984:3;;;;;:::i;:::-;;;;21948:297;;;;22262:48;22279:9;;:16;;22297:12;22262:48;;;;;;;:::i;:::-;;;;;;;;21541:777;21442:876:::0;;;;:::o;9363:105::-;9429:7;9447:9;:18;9457:7;9447:18;;;;;;;;;;;;;;;;9440:25;;9363:105;;;:::o;5835:137::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;5912:1:::1;5895:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5931:32;5960:1;5931:32;;;;;;:::i;:::-;;;;;;;;5835:137::o:0;16150:101::-;16200:7;16227:16;;;;;;;;;;;16220:23;;16150:101;:::o;15708:434::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15830:18:::1;15884:17;15866:15;15851:12;:30;;;;:::i;:::-;:50;;;;:::i;:::-;15830:71;;15935:1;15921:11;:15;;;15912:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;15982:12;15967;;:27;;;;;;;;;;;;;;;;;;16027:15;16005:19;;:37;;;;;;;;;;;;;;;;;;16077:17;16053:21;;:41;;;;;;;;;;;;;;;;;;16123:11;16105:15;;:29;;;;;;;;;;;;;;;;;;15819:323;15708:434:::0;;;:::o;14770:114::-;14835:4;14859:9;:17;14869:6;14859:17;;;;;;;;;;;;;;;;;;;;;;;;;14852:24;;14770:114;;;:::o;5585:81::-;5623:7;5651:6;;;;;;;;;;;5644:13;;5585:81;:::o;9187:84::-;9237:13;9261:7;;;;;;;;;;;;;;;;;9254:14;;9187:84;:::o;17782:436::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;17944:10:::1;17918:36;;17933:8;17918:23;;6107:1;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;17918:23;;;;:::i;:::-;:36;;;;:::i;:::-;17904:11;:50;;;;18005:10;17979:36;;17994:8;17979:23;;6107:1;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;17979:23;;;;:::i;:::-;:36;;;;:::i;:::-;17965:11;:50;;;;18047:11;;18034;;:24;;18026:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;18122:6;6107:1;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;18107:21;;;;:::i;:::-;18095:11;;:33;18087:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;18190:3;6107:1;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;18175:18;;;;:::i;:::-;18163:11;;:30;18155:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;17782:436:::0;;;;:::o;9839:225::-;9919:4;9944:29;9962:10;9944:17;:29::i;:::-;9936:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10012:44;10026:10;10038:9;10049:6;10012:13;:44::i;:::-;10005:51;;9839:225;;;;:::o;16257:105::-;16309:7;16336:18;;;;;;;;;;;16329:25;;16257:105;:::o;17014:96::-;17063:7;17090:12;;17083:19;;17014:96;:::o;9474:133::-;9558:7;9576:11;:19;9588:6;9576:19;;;;;;;;;;;;;;;:28;9596:7;9576:28;;;;;;;;;;;;;;;;9569:35;;9474:133;;;;:::o;10809:608::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7924:4:::1;7911:10;;:17;;;;;;;;;;;;;;;;;;10913:1:::2;10891:24;;:10;;;;;;;;;;;:24;;;10883:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;10949:12;;;;;;;;;;;10948:13;10940:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;11012:1;11000:9;:13;:40;;;;11039:1;11017:21;:23;11000:40;10992:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;11118:1;11093:9;:24;11111:4;11093:24;;;;;;;;;;;;;;;;:26;11085:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11187:18;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11169:58;;;11236:4;11243:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11169:100;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11156:10;;:113;;;;;;;;;;;;;;;;;;11280:69;11294:9;:24;11312:4;11294:24;;;;;;;;;;;;;;;;11320:21;11343:5;11280:13;:69::i;:::-;11380:4;11360:5;:17;11366:10;;;;;;;;;;;11360:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;11395:14;:12;:14::i;:::-;7966:5:::1;7953:10;;:18;;;;;;;;;;;;;;;;;;10809:608::o:0;5672:157::-;5522:6;;;;;;;;;;5508:20;;:10;:20;;;5500:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;5765:8:::1;5756:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5790:30;5811:8;5790:30;;;;;;:::i;:::-;;;;;;;;5672:157:::0;:::o;16913:95::-;16957:7;16984:16;;16977:23;;16913:95;:::o;13509:279::-;13574:4;13590:16;13609:5;13590:24;;13630:12;;;;;;;;;;;13625:124;;;13661:4;13647:18;;13625:124;;;13688:7;:15;13696:6;13688:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;13707:9;:17;13717:6;13707:17;;;;;;;;;;;;;;;;;;;;;;;;;13688:36;13684:65;;;13742:4;13728:18;;13684:65;13625:124;13769:11;13762:18;;;13509:279;;;:::o;12040:958::-;12132:4;12175:1;12157:20;;:6;:20;;;12149:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;12227:12;;;;;;;;;;;12222:89;;12251:7;:15;12259:6;12251:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;12270:9;:17;12280:6;12270:17;;;;;;;;;;;;;;;;;;;;;;;;;12251:36;12243:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12222:89;12327:10;;;;;;;;;;;12326:11;:31;;;;;12341:5;:16;12347:9;12341:16;;;;;;;;;;;;;;;;;;;;;;;;;12326:31;12321:64;;;12362:20;:18;:20::i;:::-;12321:64;12428:4;12410:23;;:6;:23;;;;:53;;;;;12458:4;12437:26;;:9;:26;;;;12410:53;:73;;;;;12477:6;;;;;;;;;;12467:16;;:6;:16;;;;12410:73;12405:155;;;12496:39;12509:6;12517:9;12528:6;12496:12;:39::i;:::-;12488:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12405:155;12570:18;12591:40;12605:6;12613:9;12624:6;12591:13;:40::i;:::-;12570:61;;12642:23;12677:10;12668:6;:19;;;;:::i;:::-;12642:45;;12738:6;12718:9;:17;12728:6;12718:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;12698:9;:17;12708:6;12698:17;;;;;;;;;;;;;;;:46;;;;12773:1;12760:10;:14;12755:91;;;12833:10;12806:9;:24;12824:4;12806:24;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;12779:9;:24;12797:4;12779:24;;;;;;;;;;;;;;;:64;;;;12755:91;12902:15;12879:9;:20;12889:9;12879:20;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;12856:9;:20;12866:9;12856:20;;;;;;;;;;;;;;;:61;;;;12950:9;12933:35;;12942:6;12933:35;;;12961:6;12933:35;;;;;;:::i;:::-;;;;;;;;12986:4;12979:11;;;;12040:958;;;;;:::o;19675:366::-;19745:27;19760:11;19745:14;:27::i;:::-;19783:21;19821:1;19807:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19783:40;;19852:4;19834;19839:1;19834:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19878:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19868:4;19873:1;19868:7;;;;;;;;:::i;:::-;;;;;;;:35;;;;;;;;;;;19914:18;;;;;;;;;;;:69;;;19984:11;19996:1;19998:4;20011;20017:15;19914:119;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19734:307;19675:366;:::o;20049:541::-;20111:21;20157;;;;;;;;;;;20135:19;;;;;;;;;;;:43;;;;:::i;:::-;20111:67;;20210:1;20193:14;:18;;;20189:394;;;20228:23;20285:14;20254:45;;20263:19;;;;;;;;;;;20254:28;;:6;:28;;;;:::i;:::-;:45;;;;:::i;:::-;20228:71;;20314:25;20375:14;20342:47;;20351:21;;;;;;;;;;;20342:30;;:6;:30;;;;:::i;:::-;:47;;;;:::i;:::-;20314:75;;20427:1;20409:15;:19;20404:74;;;20433:16;;;;;;;;;;;:25;;:42;20459:15;20433:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20404:74;20517:1;20497:17;:21;20492:80;;;20523:18;;;;;;;;;;;:27;;:46;20551:17;20523:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20492:80;20213:370;;20189:394;20100:490;20049:541;:::o;18226:265::-;18316:1;18307:6;:10;18302:182;;;18360:6;18335:9;:21;18345:10;18335:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;18406:6;18381:9;:21;18399:1;18381:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;18461:1;18432:40;;18441:10;18432:40;;;18465:6;18432:40;;;;;;:::i;:::-;;;;;;;;18302:182;18226:265;;:::o;11425:385::-;11528:24;11555:8;;;;;;;;;;;11528:35;;11579:8;11574:50;;;11619:1;11592:29;;11574:50;11634:28;11649:12;11634:14;:28::i;:::-;11673:18;;;;;;;;;;;:34;;;11715:13;11740:4;11747:12;11761:1;11764;11767:16;11785:15;11673:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11517:293;11425:385;;;:::o;11818:214::-;11900:3;11896:1;6107;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;11881:16;;;;:::i;:::-;:22;;;;:::i;:::-;11862:12;:41;;;;11953:3;11949:1;6107;6170:2;:13;;;;:::i;:::-;6155:11;:29;;;;:::i;:::-;11934:16;;;;:::i;:::-;:22;;;;:::i;:::-;11915:16;:41;;;;11982:4;11967:12;;:19;;;;;;;;;;;;;;;;;;12012:12;11997;:27;;;;11818:214::o;18499:1168::-;7924:4;7911:10;;:17;;;;;;;;;;;;;;;;;;18560:27:::1;18590:24;18608:4;18590:9;:24::i;:::-;18560:54;;18655:11;;18632:19;:34;;:50;;;;;18670:12;;;;;;;;;;;18632:50;18627:1033;;;18728:11;;18705:19;:34;18700:80;;18766:11;;18744:33;;18700:80;18796:20;18874:1;18856:15;;;;;;;;;;;18819:52;;18841:12;;;;;;;;;;;18819:34;;:19;:34;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;18796:79;;18904:21;18950:12;18928:19;:34;;;;:::i;:::-;18904:58;;6107:1;18997:2;:13;;;;:::i;:::-;18981;:29;18977:521;;;19032:19;19054:21;19032:43;;19094:35;19115:13;19094:20;:35::i;:::-;19148:19;19194:11;19170:21;:35;;;;:::i;:::-;19148:57;;19244:1;19229:12:::0;::::1;;;;;;;;;;:16;;;19224:259;;;19271:21;19324:15;;;;;;;;;;;19295:44;;19309:12;;;;;;;;;;;19295:26;;:11;:26;;;;:::i;:::-;:44;;;;:::i;:::-;19271:68;;19363:28;19378:12;19363:14;:28::i;:::-;19414:49;19428:12;19442:13;19457:5;19414:13;:49::i;:::-;19248:235;19224:259;19013:485;;18977:521;19512:27;19542:21;19512:51;;19603:1;19581:19;:23;19578:71;;;19608:38;19626:19;19608:17;:38::i;:::-;19578:71;18685:975;;;18627:1033;18549:1118;7966:5:::0;7953:10;;:18;;;;;;;;;;;;;;;;;;18499:1168::o;13006:495::-;13110:4;13127:21;13151:4;13127:28;;13171:12;;;;;;;;;;;:34;;;;;13188:9;:17;13198:6;13188:17;;;;;;;;;;;;;;;;;;;;;;;;;13187:18;13171:34;:59;;;;;13210:9;:20;13220:9;13210:20;;;;;;;;;;;;;;;;;;;;;;;;;13209:21;13171:59;13166:294;;;13270:12;;13253:14;:29;13248:201;;;13306:5;13287:24;;13248:201;;;13339:5;:16;13345:9;13339:16;;;;;;;;;;;;;;;;;;;;;;;;;13338:17;:79;;;;;13400:16;;13383:14;13360:9;:20;13370:9;13360:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:56;13338:79;13333:116;;;13441:5;13422:24;;13333:116;13248:201;13166:294;13477:16;13470:23;;;13006:495;;;;;:::o;13796:847::-;13893:7;13913:17;13957:12;;;;;;;;;;;13956:13;:32;;;;13973:7;:15;13981:6;13973:15;;;;;;;;;;;;;;;;;;;;;;;;;13956:32;:54;;;;13992:7;:18;14000:9;13992:18;;;;;;;;;;;;;;;;;;;;;;;;;13956:54;13951:656;;;14041:1;14029:13;;13951:656;;;14066:5;:13;14072:6;14066:13;;;;;;;;;;;;;;;;;;;;;;;;;14061:546;;;14153:16;;;;;;;;;;;14119:50;;14134:16;;;;;;;;;;;14119:31;;:12;;:31;;;;:::i;:::-;:50;;;;:::i;:::-;14103:12;:66;14098:400;;14226:3;14212:11;;;;;;;;;;;14203:20;;:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;14191:38;;14098:400;;;14288:16;;;;;;;;;;;14273:31;;:12;;:31;;;;:::i;:::-;14257:12;:47;14252:246;;14363:3;14347:13;;;;;;;;;;;14338:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;14326:40;;14252:246;;;14409:12;;14393;:28;14388:110;;14479:3;14463:13;;;;;;;;;;;14454:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;14442:40;;14388:110;14252:246;14098:400;14061:546;;;14520:5;:16;14526:9;14520:16;;;;;;;;;;;;;;;;;;;;;;;;;14515:92;;;14591:3;14576:12;;;;;;;;;;;14567:21;;:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;14555:39;;14515:92;14061:546;13951:656;14626:9;14619:16;;;13796:847;;;;;:::o;10484:317::-;10604:12;10555:11;:26;10575:4;10555:26;;;;;;;;;;;;;;;:46;7582:42;10555:46;;;;;;;;;;;;;;;;:61;10550:244;;;10683:17;10634:11;:26;10654:4;10634:26;;;;;;;;;;;;;;;:46;7582:42;10634:46;;;;;;;;;;;;;;;:66;;;;7582:42;10720:62;;10737:4;10720:62;;;10764:17;10720:62;;;;;;:::i;:::-;;;;;;;;10550:244;10484:317;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:118::-;4158:24;4176:5;4158:24;:::i;:::-;4153:3;4146:37;4071:118;;:::o;4195:222::-;4288:4;4326:2;4315:9;4311:18;4303:26;;4339:71;4407:1;4396:9;4392:17;4383:6;4339:71;:::i;:::-;4195:222;;;;:::o;4423:619::-;4500:6;4508;4516;4565:2;4553:9;4544:7;4540:23;4536:32;4533:119;;;4571:79;;:::i;:::-;4533:119;4691:1;4716:53;4761:7;4752:6;4741:9;4737:22;4716:53;:::i;:::-;4706:63;;4662:117;4818:2;4844:53;4889:7;4880:6;4869:9;4865:22;4844:53;:::i;:::-;4834:63;;4789:118;4946:2;4972:53;5017:7;5008:6;4997:9;4993:22;4972:53;:::i;:::-;4962:63;;4917:118;4423:619;;;;;:::o;5048:86::-;5083:7;5123:4;5116:5;5112:16;5101:27;;5048:86;;;:::o;5140:112::-;5223:22;5239:5;5223:22;:::i;:::-;5218:3;5211:35;5140:112;;:::o;5258:214::-;5347:4;5385:2;5374:9;5370:18;5362:26;;5398:67;5462:1;5451:9;5447:17;5438:6;5398:67;:::i;:::-;5258:214;;;;:::o;5478:118::-;5549:22;5565:5;5549:22;:::i;:::-;5542:5;5539:33;5529:61;;5586:1;5583;5576:12;5529:61;5478:118;:::o;5602:135::-;5646:5;5684:6;5671:20;5662:29;;5700:31;5725:5;5700:31;:::i;:::-;5602:135;;;;:::o;5743:116::-;5813:21;5828:5;5813:21;:::i;:::-;5806:5;5803:32;5793:60;;5849:1;5846;5839:12;5793:60;5743:116;:::o;5865:133::-;5908:5;5946:6;5933:20;5924:29;;5962:30;5986:5;5962:30;:::i;:::-;5865:133;;;;:::o;6004:464::-;6067:6;6075;6124:2;6112:9;6103:7;6099:23;6095:32;6092:119;;;6130:79;;:::i;:::-;6092:119;6250:1;6275:51;6318:7;6309:6;6298:9;6294:22;6275:51;:::i;:::-;6265:61;;6221:115;6375:2;6401:50;6443:7;6434:6;6423:9;6419:22;6401:50;:::i;:::-;6391:60;;6346:115;6004:464;;;;;:::o;6474:89::-;6510:7;6550:6;6543:5;6539:18;6528:29;;6474:89;;;:::o;6569:120::-;6641:23;6658:5;6641:23;:::i;:::-;6634:5;6631:34;6621:62;;6679:1;6676;6669:12;6621:62;6569:120;:::o;6695:137::-;6740:5;6778:6;6765:20;6756:29;;6794:32;6820:5;6794:32;:::i;:::-;6695:137;;;;:::o;6838:470::-;6904:6;6912;6961:2;6949:9;6940:7;6936:23;6932:32;6929:119;;;6967:79;;:::i;:::-;6929:119;7087:1;7112:52;7156:7;7147:6;7136:9;7132:22;7112:52;:::i;:::-;7102:62;;7058:116;7213:2;7239:52;7283:7;7274:6;7263:9;7259:22;7239:52;:::i;:::-;7229:62;;7184:117;6838:470;;;;;:::o;7314:329::-;7373:6;7422:2;7410:9;7401:7;7397:23;7393:32;7390:119;;;7428:79;;:::i;:::-;7390:119;7548:1;7573:53;7618:7;7609:6;7598:9;7594:22;7573:53;:::i;:::-;7563:63;;7519:117;7314:329;;;;:::o;7649:466::-;7713:6;7721;7770:2;7758:9;7749:7;7745:23;7741:32;7738:119;;;7776:79;;:::i;:::-;7738:119;7896:1;7921:51;7964:7;7955:6;7944:9;7940:22;7921:51;:::i;:::-;7911:61;;7867:115;8021:2;8047:51;8090:7;8081:6;8070:9;8066:22;8047:51;:::i;:::-;8037:61;;7992:116;7649:466;;;;;:::o;8121:607::-;8192:6;8200;8208;8257:2;8245:9;8236:7;8232:23;8228:32;8225:119;;;8263:79;;:::i;:::-;8225:119;8383:1;8408:53;8453:7;8444:6;8433:9;8429:22;8408:53;:::i;:::-;8398:63;;8354:117;8510:2;8536:50;8578:7;8569:6;8558:9;8554:22;8536:50;:::i;:::-;8526:60;;8481:115;8635:2;8661:50;8703:7;8694:6;8683:9;8679:22;8661:50;:::i;:::-;8651:60;;8606:115;8121:607;;;;;:::o;8734:329::-;8793:6;8842:2;8830:9;8821:7;8817:23;8813:32;8810:119;;;8848:79;;:::i;:::-;8810:119;8968:1;8993:53;9038:7;9029:6;9018:9;9014:22;8993:53;:::i;:::-;8983:63;;8939:117;8734:329;;;;:::o;9069:115::-;9154:23;9171:5;9154:23;:::i;:::-;9149:3;9142:36;9069:115;;:::o;9190:430::-;9333:4;9371:2;9360:9;9356:18;9348:26;;9384:69;9450:1;9439:9;9435:17;9426:6;9384:69;:::i;:::-;9463:70;9529:2;9518:9;9514:18;9505:6;9463:70;:::i;:::-;9543;9609:2;9598:9;9594:18;9585:6;9543:70;:::i;:::-;9190:430;;;;;;:::o;9626:117::-;9735:1;9732;9725:12;9749:117;9858:1;9855;9848:12;9872:117;9981:1;9978;9971:12;10012:568;10085:8;10095:6;10145:3;10138:4;10130:6;10126:17;10122:27;10112:122;;10153:79;;:::i;:::-;10112:122;10266:6;10253:20;10243:30;;10296:18;10288:6;10285:30;10282:117;;;10318:79;;:::i;:::-;10282:117;10432:4;10424:6;10420:17;10408:29;;10486:3;10478:4;10470:6;10466:17;10456:8;10452:32;10449:41;10446:128;;;10493:79;;:::i;:::-;10446:128;10012:568;;;;;:::o;10603:::-;10676:8;10686:6;10736:3;10729:4;10721:6;10717:17;10713:27;10703:122;;10744:79;;:::i;:::-;10703:122;10857:6;10844:20;10834:30;;10887:18;10879:6;10876:30;10873:117;;;10909:79;;:::i;:::-;10873:117;11023:4;11015:6;11011:17;10999:29;;11077:3;11069:4;11061:6;11057:17;11047:8;11043:32;11040:41;11037:128;;;11084:79;;:::i;:::-;11037:128;10603:568;;;;;:::o;11177:934::-;11299:6;11307;11315;11323;11372:2;11360:9;11351:7;11347:23;11343:32;11340:119;;;11378:79;;:::i;:::-;11340:119;11526:1;11515:9;11511:17;11498:31;11556:18;11548:6;11545:30;11542:117;;;11578:79;;:::i;:::-;11542:117;11691:80;11763:7;11754:6;11743:9;11739:22;11691:80;:::i;:::-;11673:98;;;;11469:312;11848:2;11837:9;11833:18;11820:32;11879:18;11871:6;11868:30;11865:117;;;11901:79;;:::i;:::-;11865:117;12014:80;12086:7;12077:6;12066:9;12062:22;12014:80;:::i;:::-;11996:98;;;;11791:313;11177:934;;;;;;;:::o;12117:118::-;12204:24;12222:5;12204:24;:::i;:::-;12199:3;12192:37;12117:118;;:::o;12241:222::-;12334:4;12372:2;12361:9;12357:18;12349:26;;12385:71;12453:1;12442:9;12438:17;12429:6;12385:71;:::i;:::-;12241:222;;;;:::o;12469:613::-;12543:6;12551;12559;12608:2;12596:9;12587:7;12583:23;12579:32;12576:119;;;12614:79;;:::i;:::-;12576:119;12734:1;12759:52;12803:7;12794:6;12783:9;12779:22;12759:52;:::i;:::-;12749:62;;12705:116;12860:2;12886:52;12930:7;12921:6;12910:9;12906:22;12886:52;:::i;:::-;12876:62;;12831:117;12987:2;13013:52;13057:7;13048:6;13037:9;13033:22;13013:52;:::i;:::-;13003:62;;12958:117;12469:613;;;;;:::o;13088:93::-;13124:7;13164:10;13157:5;13153:22;13142:33;;13088:93;;;:::o;13187:120::-;13259:23;13276:5;13259:23;:::i;:::-;13252:5;13249:34;13239:62;;13297:1;13294;13287:12;13239:62;13187:120;:::o;13313:137::-;13358:5;13396:6;13383:20;13374:29;;13412:32;13438:5;13412:32;:::i;:::-;13313:137;;;;:::o;13456:757::-;13538:6;13546;13554;13562;13611:3;13599:9;13590:7;13586:23;13582:33;13579:120;;;13618:79;;:::i;:::-;13579:120;13738:1;13763:52;13807:7;13798:6;13787:9;13783:22;13763:52;:::i;:::-;13753:62;;13709:116;13864:2;13890:52;13934:7;13925:6;13914:9;13910:22;13890:52;:::i;:::-;13880:62;;13835:117;13991:2;14017:52;14061:7;14052:6;14041:9;14037:22;14017:52;:::i;:::-;14007:62;;13962:117;14118:2;14144:52;14188:7;14179:6;14168:9;14164:22;14144:52;:::i;:::-;14134:62;;14089:117;13456:757;;;;;;;:::o;14219:474::-;14287:6;14295;14344:2;14332:9;14323:7;14319:23;14315:32;14312:119;;;14350:79;;:::i;:::-;14312:119;14470:1;14495:53;14540:7;14531:6;14520:9;14516:22;14495:53;:::i;:::-;14485:63;;14441:117;14597:2;14623:53;14668:7;14659:6;14648:9;14644:22;14623:53;:::i;:::-;14613:63;;14568:118;14219:474;;;;;:::o;14699:104::-;14744:7;14773:24;14791:5;14773:24;:::i;:::-;14762:35;;14699:104;;;:::o;14809:138::-;14890:32;14916:5;14890:32;:::i;:::-;14883:5;14880:43;14870:71;;14937:1;14934;14927:12;14870:71;14809:138;:::o;14953:155::-;15007:5;15045:6;15032:20;15023:29;;15061:41;15096:5;15061:41;:::i;:::-;14953:155;;;;:::o;15114:345::-;15181:6;15230:2;15218:9;15209:7;15205:23;15201:32;15198:119;;;15236:79;;:::i;:::-;15198:119;15356:1;15381:61;15434:7;15425:6;15414:9;15410:22;15381:61;:::i;:::-;15371:71;;15327:125;15114:345;;;;:::o;15465:174::-;15605:26;15601:1;15593:6;15589:14;15582:50;15465:174;:::o;15645:366::-;15787:3;15808:67;15872:2;15867:3;15808:67;:::i;:::-;15801:74;;15884:93;15973:3;15884:93;:::i;:::-;16002:2;15997:3;15993:12;15986:19;;15645:366;;;:::o;16017:419::-;16183:4;16221:2;16210:9;16206:18;16198:26;;16270:9;16264:4;16260:20;16256:1;16245:9;16241:17;16234:47;16298:131;16424:4;16298:131;:::i;:::-;16290:139;;16017:419;;;:::o;16442:173::-;16582:25;16578:1;16570:6;16566:14;16559:49;16442:173;:::o;16621:366::-;16763:3;16784:67;16848:2;16843:3;16784:67;:::i;:::-;16777:74;;16860:93;16949:3;16860:93;:::i;:::-;16978:2;16973:3;16969:12;16962:19;;16621:366;;;:::o;16993:419::-;17159:4;17197:2;17186:9;17182:18;17174:26;;17246:9;17240:4;17236:20;17232:1;17221:9;17217:17;17210:47;17274:131;17400:4;17274:131;:::i;:::-;17266:139;;16993:419;;;:::o;17418:180::-;17466:77;17463:1;17456:88;17563:4;17560:1;17553:15;17587:4;17584:1;17577:15;17604:102;17646:8;17693:5;17690:1;17686:13;17665:34;;17604:102;;;:::o;17712:848::-;17773:5;17780:4;17804:6;17795:15;;17828:5;17819:14;;17842:712;17863:1;17853:8;17850:15;17842:712;;;17958:4;17953:3;17949:14;17943:4;17940:24;17937:50;;;17967:18;;:::i;:::-;17937:50;18017:1;18007:8;18003:16;18000:451;;;18432:4;18425:5;18421:16;18412:25;;18000:451;18482:4;18476;18472:15;18464:23;;18512:32;18535:8;18512:32;:::i;:::-;18500:44;;17842:712;;;17712:848;;;;;;;:::o;18566:1073::-;18620:5;18811:8;18801:40;;18832:1;18823:10;;18834:5;;18801:40;18860:4;18850:36;;18877:1;18868:10;;18879:5;;18850:36;18946:4;18994:1;18989:27;;;;19030:1;19025:191;;;;18939:277;;18989:27;19007:1;18998:10;;19009:5;;;19025:191;19070:3;19060:8;19057:17;19054:43;;;19077:18;;:::i;:::-;19054:43;19126:8;19123:1;19119:16;19110:25;;19161:3;19154:5;19151:14;19148:40;;;19168:18;;:::i;:::-;19148:40;19201:5;;;18939:277;;19325:2;19315:8;19312:16;19306:3;19300:4;19297:13;19293:36;19275:2;19265:8;19262:16;19257:2;19251:4;19248:12;19244:35;19228:111;19225:246;;;19381:8;19375:4;19371:19;19362:28;;19416:3;19409:5;19406:14;19403:40;;;19423:18;;:::i;:::-;19403:40;19456:5;;19225:246;19496:42;19534:3;19524:8;19518:4;19515:1;19496:42;:::i;:::-;19481:57;;;;19570:4;19565:3;19561:14;19554:5;19551:25;19548:51;;;19579:18;;:::i;:::-;19548:51;19628:4;19621:5;19617:16;19608:25;;18566:1073;;;;;;:::o;19645:281::-;19703:5;19727:23;19745:4;19727:23;:::i;:::-;19719:31;;19771:25;19787:8;19771:25;:::i;:::-;19759:37;;19815:104;19852:66;19842:8;19836:4;19815:104;:::i;:::-;19806:113;;19645:281;;;;:::o;19932:410::-;19972:7;19995:20;20013:1;19995:20;:::i;:::-;19990:25;;20029:20;20047:1;20029:20;:::i;:::-;20024:25;;20084:1;20081;20077:9;20106:30;20124:11;20106:30;:::i;:::-;20095:41;;20285:1;20276:7;20272:15;20269:1;20266:22;20246:1;20239:9;20219:83;20196:139;;20315:18;;:::i;:::-;20196:139;19980:362;19932:410;;;;:::o;20348:166::-;20488:18;20484:1;20476:6;20472:14;20465:42;20348:166;:::o;20520:366::-;20662:3;20683:67;20747:2;20742:3;20683:67;:::i;:::-;20676:74;;20759:93;20848:3;20759:93;:::i;:::-;20877:2;20872:3;20868:12;20861:19;;20520:366;;;:::o;20892:419::-;21058:4;21096:2;21085:9;21081:18;21073:26;;21145:9;21139:4;21135:20;21131:1;21120:9;21116:17;21109:47;21173:131;21299:4;21173:131;:::i;:::-;21165:139;;20892:419;;;:::o;21317:194::-;21357:4;21377:20;21395:1;21377:20;:::i;:::-;21372:25;;21411:20;21429:1;21411:20;:::i;:::-;21406:25;;21455:1;21452;21448:9;21440:17;;21479:1;21473:4;21470:11;21467:37;;;21484:18;;:::i;:::-;21467:37;21317:194;;;;:::o;21517:176::-;21657:28;21653:1;21645:6;21641:14;21634:52;21517:176;:::o;21699:366::-;21841:3;21862:67;21926:2;21921:3;21862:67;:::i;:::-;21855:74;;21938:93;22027:3;21938:93;:::i;:::-;22056:2;22051:3;22047:12;22040:19;;21699:366;;;:::o;22071:419::-;22237:4;22275:2;22264:9;22260:18;22252:26;;22324:9;22318:4;22314:20;22310:1;22299:9;22295:17;22288:47;22352:131;22478:4;22352:131;:::i;:::-;22344:139;;22071:419;;;:::o;22496:180::-;22544:77;22541:1;22534:88;22641:4;22638:1;22631:15;22665:4;22662:1;22655:15;22682:185;22722:1;22739:20;22757:1;22739:20;:::i;:::-;22734:25;;22773:20;22791:1;22773:20;:::i;:::-;22768:25;;22812:1;22802:35;;22817:18;;:::i;:::-;22802:35;22859:1;22856;22852:9;22847:14;;22682:185;;;;:::o;22873:156::-;23013:8;23009:1;23001:6;22997:14;22990:32;22873:156;:::o;23035:365::-;23177:3;23198:66;23262:1;23257:3;23198:66;:::i;:::-;23191:73;;23273:93;23362:3;23273:93;:::i;:::-;23391:2;23386:3;23382:12;23375:19;;23035:365;;;:::o;23406:419::-;23572:4;23610:2;23599:9;23595:18;23587:26;;23659:9;23653:4;23649:20;23645:1;23634:9;23630:17;23623:47;23687:131;23813:4;23687:131;:::i;:::-;23679:139;;23406:419;;;:::o;23831:191::-;23871:3;23890:20;23908:1;23890:20;:::i;:::-;23885:25;;23924:20;23942:1;23924:20;:::i;:::-;23919:25;;23967:1;23964;23960:9;23953:16;;23988:3;23985:1;23982:10;23979:36;;;23995:18;;:::i;:::-;23979:36;23831:191;;;;:::o;24028:160::-;24168:12;24164:1;24156:6;24152:14;24145:36;24028:160;:::o;24194:366::-;24336:3;24357:67;24421:2;24416:3;24357:67;:::i;:::-;24350:74;;24433:93;24522:3;24433:93;:::i;:::-;24551:2;24546:3;24542:12;24535:19;;24194:366;;;:::o;24566:419::-;24732:4;24770:2;24759:9;24755:18;24747:26;;24819:9;24813:4;24809:20;24805:1;24794:9;24790:17;24783:47;24847:131;24973:4;24847:131;:::i;:::-;24839:139;;24566:419;;;:::o;24991:164::-;25131:16;25127:1;25119:6;25115:14;25108:40;24991:164;:::o;25161:366::-;25303:3;25324:67;25388:2;25383:3;25324:67;:::i;:::-;25317:74;;25400:93;25489:3;25400:93;:::i;:::-;25518:2;25513:3;25509:12;25502:19;;25161:366;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25533:419;;;:::o;25958:165::-;26098:17;26094:1;26086:6;26082:14;26075:41;25958:165;:::o;26129:366::-;26271:3;26292:67;26356:2;26351:3;26292:67;:::i;:::-;26285:74;;26368:93;26457:3;26368:93;:::i;:::-;26486:2;26481:3;26477:12;26470:19;;26129:366;;;:::o;26501:419::-;26667:4;26705:2;26694:9;26690:18;26682:26;;26754:9;26748:4;26744:20;26740:1;26729:9;26725:17;26718:47;26782:131;26908:4;26782:131;:::i;:::-;26774:139;;26501:419;;;:::o;26926:188::-;26964:3;26983:18;26999:1;26983:18;:::i;:::-;26978:23;;27015:18;27031:1;27015:18;:::i;:::-;27010:23;;27056:1;27053;27049:9;27042:16;;27079:4;27074:3;27071:13;27068:39;;;27087:18;;:::i;:::-;27068:39;26926:188;;;;:::o;27120:168::-;27260:20;27256:1;27248:6;27244:14;27237:44;27120:168;:::o;27294:366::-;27436:3;27457:67;27521:2;27516:3;27457:67;:::i;:::-;27450:74;;27533:93;27622:3;27533:93;:::i;:::-;27651:2;27646:3;27642:12;27635:19;;27294:366;;;:::o;27666:419::-;27832:4;27870:2;27859:9;27855:18;27847:26;;27919:9;27913:4;27909:20;27905:1;27894:9;27890:17;27883:47;27947:131;28073:4;27947:131;:::i;:::-;27939:139;;27666:419;;;:::o;28091:166::-;28231:18;28227:1;28219:6;28215:14;28208:42;28091:166;:::o;28263:366::-;28405:3;28426:67;28490:2;28485:3;28426:67;:::i;:::-;28419:74;;28502:93;28591:3;28502:93;:::i;:::-;28620:2;28615:3;28611:12;28604:19;;28263:366;;;:::o;28635:419::-;28801:4;28839:2;28828:9;28824:18;28816:26;;28888:9;28882:4;28878:20;28874:1;28863:9;28859:17;28852:47;28916:131;29042:4;28916:131;:::i;:::-;28908:139;;28635:419;;;:::o;29060:171::-;29200:23;29196:1;29188:6;29184:14;29177:47;29060:171;:::o;29237:366::-;29379:3;29400:67;29464:2;29459:3;29400:67;:::i;:::-;29393:74;;29476:93;29565:3;29476:93;:::i;:::-;29594:2;29589:3;29585:12;29578:19;;29237:366;;;:::o;29609:419::-;29775:4;29813:2;29802:9;29798:18;29790:26;;29862:9;29856:4;29852:20;29848:1;29837:9;29833:17;29826:47;29890:131;30016:4;29890:131;:::i;:::-;29882:139;;29609:419;;;:::o;30034:170::-;30174:22;30170:1;30162:6;30158:14;30151:46;30034:170;:::o;30210:366::-;30352:3;30373:67;30437:2;30432:3;30373:67;:::i;:::-;30366:74;;30449:93;30538:3;30449:93;:::i;:::-;30567:2;30562:3;30558:12;30551:19;;30210:366;;;:::o;30582:419::-;30748:4;30786:2;30775:9;30771:18;30763:26;;30835:9;30829:4;30825:20;30821:1;30810:9;30806:17;30799:47;30863:131;30989:4;30863:131;:::i;:::-;30855:139;;30582:419;;;:::o;31007:180::-;31055:77;31052:1;31045:88;31152:4;31149:1;31142:15;31176:4;31173:1;31166:15;31193:233;31232:3;31255:24;31273:5;31255:24;:::i;:::-;31246:33;;31301:66;31294:5;31291:77;31288:103;;31371:18;;:::i;:::-;31288:103;31418:1;31411:5;31407:13;31400:20;;31193:233;;;:::o;31432:171::-;31572:23;31568:1;31560:6;31556:14;31549:47;31432:171;:::o;31609:366::-;31751:3;31772:67;31836:2;31831:3;31772:67;:::i;:::-;31765:74;;31848:93;31937:3;31848:93;:::i;:::-;31966:2;31961:3;31957:12;31950:19;;31609:366;;;:::o;31981:419::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:131;32388:4;32262:131;:::i;:::-;32254:139;;31981:419;;;:::o;32406:332::-;32527:4;32565:2;32554:9;32550:18;32542:26;;32578:71;32646:1;32635:9;32631:17;32622:6;32578:71;:::i;:::-;32659:72;32727:2;32716:9;32712:18;32703:6;32659:72;:::i;:::-;32406:332;;;;;:::o;32744:193::-;32783:3;32802:19;32819:1;32802:19;:::i;:::-;32797:24;;32835:19;32852:1;32835:19;:::i;:::-;32830:24;;32877:1;32874;32870:9;32863:16;;32900:6;32895:3;32892:15;32889:41;;;32910:18;;:::i;:::-;32889:41;32744:193;;;;:::o;32943:165::-;33083:17;33079:1;33071:6;33067:14;33060:41;32943:165;:::o;33114:366::-;33256:3;33277:67;33341:2;33336:3;33277:67;:::i;:::-;33270:74;;33353:93;33442:3;33353:93;:::i;:::-;33471:2;33466:3;33462:12;33455:19;;33114:366;;;:::o;33486:419::-;33652:4;33690:2;33679:9;33675:18;33667:26;;33739:9;33733:4;33729:20;33725:1;33714:9;33710:17;33703:47;33767:131;33893:4;33767:131;:::i;:::-;33759:139;;33486:419;;;:::o;33911:163::-;34051:15;34047:1;34039:6;34035:14;34028:39;33911:163;:::o;34080:366::-;34222:3;34243:67;34307:2;34302:3;34243:67;:::i;:::-;34236:74;;34319:93;34408:3;34319:93;:::i;:::-;34437:2;34432:3;34428:12;34421:19;;34080:366;;;:::o;34452:419::-;34618:4;34656:2;34645:9;34641:18;34633:26;;34705:9;34699:4;34695:20;34691:1;34680:9;34676:17;34669:47;34733:131;34859:4;34733:131;:::i;:::-;34725:139;;34452:419;;;:::o;34877:161::-;35017:13;35013:1;35005:6;35001:14;34994:37;34877:161;:::o;35044:366::-;35186:3;35207:67;35271:2;35266:3;35207:67;:::i;:::-;35200:74;;35283:93;35372:3;35283:93;:::i;:::-;35401:2;35396:3;35392:12;35385:19;;35044:366;;;:::o;35416:419::-;35582:4;35620:2;35609:9;35605:18;35597:26;;35669:9;35663:4;35659:20;35655:1;35644:9;35640:17;35633:47;35697:131;35823:4;35697:131;:::i;:::-;35689:139;;35416:419;;;:::o;35841:162::-;35981:14;35977:1;35969:6;35965:14;35958:38;35841:162;:::o;36009:366::-;36151:3;36172:67;36236:2;36231:3;36172:67;:::i;:::-;36165:74;;36248:93;36337:3;36248:93;:::i;:::-;36366:2;36361:3;36357:12;36350:19;;36009:366;;;:::o;36381:419::-;36547:4;36585:2;36574:9;36570:18;36562:26;;36634:9;36628:4;36624:20;36620:1;36609:9;36605:17;36598:47;36662:131;36788:4;36662:131;:::i;:::-;36654:139;;36381:419;;;:::o;36806:159::-;36946:11;36942:1;36934:6;36930:14;36923:35;36806:159;:::o;36971:365::-;37113:3;37134:66;37198:1;37193:3;37134:66;:::i;:::-;37127:73;;37209:93;37298:3;37209:93;:::i;:::-;37327:2;37322:3;37318:12;37311:19;;36971:365;;;:::o;37342:419::-;37508:4;37546:2;37535:9;37531:18;37523:26;;37595:9;37589:4;37585:20;37581:1;37570:9;37566:17;37559:47;37623:131;37749:4;37623:131;:::i;:::-;37615:139;;37342:419;;;:::o;37767:165::-;37907:17;37903:1;37895:6;37891:14;37884:41;37767:165;:::o;37938:366::-;38080:3;38101:67;38165:2;38160:3;38101:67;:::i;:::-;38094:74;;38177:93;38266:3;38177:93;:::i;:::-;38295:2;38290:3;38286:12;38279:19;;37938:366;;;:::o;38310:419::-;38476:4;38514:2;38503:9;38499:18;38491:26;;38563:9;38557:4;38553:20;38549:1;38538:9;38534:17;38527:47;38591:131;38717:4;38591:131;:::i;:::-;38583:139;;38310:419;;;:::o;38735:179::-;38875:31;38871:1;38863:6;38859:14;38852:55;38735:179;:::o;38920:366::-;39062:3;39083:67;39147:2;39142:3;39083:67;:::i;:::-;39076:74;;39159:93;39248:3;39159:93;:::i;:::-;39277:2;39272:3;39268:12;39261:19;;38920:366;;;:::o;39292:419::-;39458:4;39496:2;39485:9;39481:18;39473:26;;39545:9;39539:4;39535:20;39531:1;39520:9;39516:17;39509:47;39573:131;39699:4;39573:131;:::i;:::-;39565:139;;39292:419;;;:::o;39717:171::-;39857:23;39853:1;39845:6;39841:14;39834:47;39717:171;:::o;39894:366::-;40036:3;40057:67;40121:2;40116:3;40057:67;:::i;:::-;40050:74;;40133:93;40222:3;40133:93;:::i;:::-;40251:2;40246:3;40242:12;40235:19;;39894:366;;;:::o;40266:419::-;40432:4;40470:2;40459:9;40455:18;40447:26;;40519:9;40513:4;40509:20;40505:1;40494:9;40490:17;40483:47;40547:131;40673:4;40547:131;:::i;:::-;40539:139;;40266:419;;;:::o;40691:143::-;40748:5;40779:6;40773:13;40764:22;;40795:33;40822:5;40795:33;:::i;:::-;40691:143;;;;:::o;40840:351::-;40910:6;40959:2;40947:9;40938:7;40934:23;40930:32;40927:119;;;40965:79;;:::i;:::-;40927:119;41085:1;41110:64;41166:7;41157:6;41146:9;41142:22;41110:64;:::i;:::-;41100:74;;41056:128;40840:351;;;;:::o;41197:332::-;41318:4;41356:2;41345:9;41341:18;41333:26;;41369:71;41437:1;41426:9;41422:17;41413:6;41369:71;:::i;:::-;41450:72;41518:2;41507:9;41503:18;41494:6;41450:72;:::i;:::-;41197:332;;;;;:::o;41535:60::-;41563:3;41584:5;41577:12;;41535:60;;;:::o;41601:142::-;41651:9;41684:53;41702:34;41711:24;41729:5;41711:24;:::i;:::-;41702:34;:::i;:::-;41684:53;:::i;:::-;41671:66;;41601:142;;;:::o;41749:126::-;41799:9;41832:37;41863:5;41832:37;:::i;:::-;41819:50;;41749:126;;;:::o;41881:134::-;41939:9;41972:37;42003:5;41972:37;:::i;:::-;41959:50;;41881:134;;;:::o;42021:147::-;42116:45;42155:5;42116:45;:::i;:::-;42111:3;42104:58;42021:147;;:::o;42174:238::-;42275:4;42313:2;42302:9;42298:18;42290:26;;42326:79;42402:1;42391:9;42387:17;42378:6;42326:79;:::i;:::-;42174:238;;;;:::o;42418:179::-;42558:31;42554:1;42546:6;42542:14;42535:55;42418:179;:::o;42603:366::-;42745:3;42766:67;42830:2;42825:3;42766:67;:::i;:::-;42759:74;;42842:93;42931:3;42842:93;:::i;:::-;42960:2;42955:3;42951:12;42944:19;;42603:366;;;:::o;42975:419::-;43141:4;43179:2;43168:9;43164:18;43156:26;;43228:9;43222:4;43218:20;43214:1;43203:9;43199:17;43192:47;43256:131;43382:4;43256:131;:::i;:::-;43248:139;;42975:419;;;:::o;43400:167::-;43540:19;43536:1;43528:6;43524:14;43517:43;43400:167;:::o;43573:366::-;43715:3;43736:67;43800:2;43795:3;43736:67;:::i;:::-;43729:74;;43812:93;43901:3;43812:93;:::i;:::-;43930:2;43925:3;43921:12;43914:19;;43573:366;;;:::o;43945:419::-;44111:4;44149:2;44138:9;44134:18;44126:26;;44198:9;44192:4;44188:20;44184:1;44173:9;44169:17;44162:47;44226:131;44352:4;44226:131;:::i;:::-;44218:139;;43945:419;;;:::o;44370:180::-;44418:77;44415:1;44408:88;44515:4;44512:1;44505:15;44539:4;44536:1;44529:15;44556:85;44601:7;44630:5;44619:16;;44556:85;;;:::o;44647:158::-;44705:9;44738:61;44756:42;44765:32;44791:5;44765:32;:::i;:::-;44756:42;:::i;:::-;44738:61;:::i;:::-;44725:74;;44647:158;;;:::o;44811:147::-;44906:45;44945:5;44906:45;:::i;:::-;44901:3;44894:58;44811:147;;:::o;44964:114::-;45031:6;45065:5;45059:12;45049:22;;44964:114;;;:::o;45084:184::-;45183:11;45217:6;45212:3;45205:19;45257:4;45252:3;45248:14;45233:29;;45084:184;;;;:::o;45274:132::-;45341:4;45364:3;45356:11;;45394:4;45389:3;45385:14;45377:22;;45274:132;;;:::o;45412:108::-;45489:24;45507:5;45489:24;:::i;:::-;45484:3;45477:37;45412:108;;:::o;45526:179::-;45595:10;45616:46;45658:3;45650:6;45616:46;:::i;:::-;45694:4;45689:3;45685:14;45671:28;;45526:179;;;;:::o;45711:113::-;45781:4;45813;45808:3;45804:14;45796:22;;45711:113;;;:::o;45860:732::-;45979:3;46008:54;46056:5;46008:54;:::i;:::-;46078:86;46157:6;46152:3;46078:86;:::i;:::-;46071:93;;46188:56;46238:5;46188:56;:::i;:::-;46267:7;46298:1;46283:284;46308:6;46305:1;46302:13;46283:284;;;46384:6;46378:13;46411:63;46470:3;46455:13;46411:63;:::i;:::-;46404:70;;46497:60;46550:6;46497:60;:::i;:::-;46487:70;;46343:224;46330:1;46327;46323:9;46318:14;;46283:284;;;46287:14;46583:3;46576:10;;45984:608;;;45860:732;;;;:::o;46598:831::-;46861:4;46899:3;46888:9;46884:19;46876:27;;46913:71;46981:1;46970:9;46966:17;46957:6;46913:71;:::i;:::-;46994:80;47070:2;47059:9;47055:18;47046:6;46994:80;:::i;:::-;47121:9;47115:4;47111:20;47106:2;47095:9;47091:18;47084:48;47149:108;47252:4;47243:6;47149:108;:::i;:::-;47141:116;;47267:72;47335:2;47324:9;47320:18;47311:6;47267:72;:::i;:::-;47349:73;47417:3;47406:9;47402:19;47393:6;47349:73;:::i;:::-;46598:831;;;;;;;;:::o;47435:807::-;47684:4;47722:3;47711:9;47707:19;47699:27;;47736:71;47804:1;47793:9;47789:17;47780:6;47736:71;:::i;:::-;47817:72;47885:2;47874:9;47870:18;47861:6;47817:72;:::i;:::-;47899:80;47975:2;47964:9;47960:18;47951:6;47899:80;:::i;:::-;47989;48065:2;48054:9;48050:18;48041:6;47989:80;:::i;:::-;48079:73;48147:3;48136:9;48132:19;48123:6;48079:73;:::i;:::-;48162;48230:3;48219:9;48215:19;48206:6;48162:73;:::i;:::-;47435:807;;;;;;;;;:::o;48248:143::-;48305:5;48336:6;48330:13;48321:22;;48352:33;48379:5;48352:33;:::i;:::-;48248:143;;;;:::o;48397:663::-;48485:6;48493;48501;48550:2;48538:9;48529:7;48525:23;48521:32;48518:119;;;48556:79;;:::i;:::-;48518:119;48676:1;48701:64;48757:7;48748:6;48737:9;48733:22;48701:64;:::i;:::-;48691:74;;48647:128;48814:2;48840:64;48896:7;48887:6;48876:9;48872:22;48840:64;:::i;:::-;48830:74;;48785:129;48953:2;48979:64;49035:7;49026:6;49015:9;49011:22;48979:64;:::i;:::-;48969:74;;48924:129;48397:663;;;;;:::o

Swarm Source

ipfs://39b84dab8f07bba5b330483c6f69418e1ebb6160237078a4a3c365a4519122c2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.