ETH Price: $2,973.98 (+2.53%)
Gas: 1 Gwei

Contract

0xC6759a4Fc56B3ce9734035a56B36e8637c45b77E
 

Overview

ETH Balance

0.009309734292322547 ETH

Eth Value

$27.69 (@ $2,973.98/ETH)

Token Holdings

Transaction Hash
Method
Block
From
To
Value
Approve192290272024-02-14 21:59:11142 days ago1707947951IN
0xC6759a4F...37c45b77E
0 ETH0.001320528.05218552
Approve191520382024-02-04 2:38:23153 days ago1707014303IN
0xC6759a4F...37c45b77E
0 ETH0.0005968412.6791445
Approve187319952023-12-07 4:20:23212 days ago1701922823IN
0xC6759a4F...37c45b77E
0 ETH0.0015297932.49835921
Transfer185872132023-11-16 21:44:23232 days ago1700171063IN
0xC6759a4F...37c45b77E
0 ETH0.0156970730.73199071
Transfer184835812023-11-02 9:42:23246 days ago1698918143IN
0xC6759a4F...37c45b77E
0 ETH0.0086547316.7962802
Approve184244772023-10-25 3:06:59255 days ago1698203219IN
0xC6759a4F...37c45b77E
0 ETH0.0007398115.69627918
Approve183879082023-10-20 0:17:59260 days ago1697761079IN
0xC6759a4F...37c45b77E
0 ETH0.000385388.17658466
Approve182241512023-09-27 2:34:35283 days ago1695782075IN
0xC6759a4F...37c45b77E
0 ETH0.000372297.89875938
Transfer182239672023-09-27 1:57:47283 days ago1695779867IN
0xC6759a4F...37c45b77E
0 ETH0.006219488.44919742
Approve182215722023-09-26 17:55:23283 days ago1695750923IN
0xC6759a4F...37c45b77E
0 ETH0.0006616514.03800508
Approve181621932023-09-18 10:19:23291 days ago1695032363IN
0xC6759a4F...37c45b77E
0 ETH0.000376167.98092254
Transfer181544702023-09-17 8:05:35292 days ago1694937935IN
0xC6759a4F...37c45b77E
0 ETH0.003480168.57550108
Approve181543912023-09-17 7:49:23292 days ago1694936963IN
0xC6759a4F...37c45b77E
0 ETH0.000407958.65531421
Approve181299632023-09-13 21:09:11296 days ago1694639351IN
0xC6759a4F...37c45b77E
0 ETH0.0007767216.50046061
Approve180862822023-09-07 18:17:35302 days ago1694110655IN
0xC6759a4F...37c45b77E
0 ETH0.0017868737.9114071
Transfer179844242023-08-24 12:00:47316 days ago1692878447IN
0xC6759a4F...37c45b77E
0.02735472 ETH0.0005617226.67895593
Transfer179589352023-08-20 22:28:11320 days ago1692570491IN
0xC6759a4F...37c45b77E
0 ETH0.006061513.96588816
Approve179589032023-08-20 22:21:47320 days ago1692570107IN
0xC6759a4F...37c45b77E
0 ETH0.0007212915.32297659
Approve179557412023-08-20 11:44:47320 days ago1692531887IN
0xC6759a4F...37c45b77E
0 ETH0.0006382313.54107737
Approve178800732023-08-09 21:38:23331 days ago1691617103IN
0xC6759a4F...37c45b77E
0 ETH0.0011297524
Approve178236212023-08-02 0:05:23339 days ago1690934723IN
0xC6759a4F...37c45b77E
0 ETH0.000632121.04693199
Approve178236142023-08-02 0:03:59339 days ago1690934639IN
0xC6759a4F...37c45b77E
0 ETH0.0009801620.91818576
Approve177680302023-07-25 5:28:47347 days ago1690262927IN
0xC6759a4F...37c45b77E
0 ETH0.0008391717.9414271
Approve177679762023-07-25 5:17:59347 days ago1690262279IN
0xC6759a4F...37c45b77E
0 ETH0.0008756518.69262626
Approve177679252023-07-25 5:07:47347 days ago1690261667IN
0xC6759a4F...37c45b77E
0 ETH0.0007832116.74082869
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
182239672023-09-27 1:57:47283 days ago1695779867
0xC6759a4F...37c45b77E
0.00930973 ETH
182239672023-09-27 1:57:47283 days ago1695779867
0xC6759a4F...37c45b77E
0.03556213 ETH
182239672023-09-27 1:57:47283 days ago1695779867
0xC6759a4F...37c45b77E
0.02133728 ETH
182239672023-09-27 1:57:47283 days ago1695779867
0xC6759a4F...37c45b77E
0.04978698 ETH
182239672023-09-27 1:57:47283 days ago1695779867
0xC6759a4F...37c45b77E
0.07909474 ETH
178802192023-08-09 22:07:35331 days ago1691618855
0xC6759a4F...37c45b77E
0.00023693 ETH
178802192023-08-09 22:07:35331 days ago1691618855
0xC6759a4F...37c45b77E
0.0262753 ETH
178802192023-08-09 22:07:35331 days ago1691618855
0xC6759a4F...37c45b77E
0.01576518 ETH
178802192023-08-09 22:07:35331 days ago1691618855
0xC6759a4F...37c45b77E
0.03678543 ETH
178802192023-08-09 22:07:35331 days ago1691618855
0xC6759a4F...37c45b77E
0.07847726 ETH
177678782023-07-25 4:58:23347 days ago1690261103
0xC6759a4F...37c45b77E
0.00034865 ETH
177678782023-07-25 4:58:23347 days ago1690261103
0xC6759a4F...37c45b77E
0.03134192 ETH
177678782023-07-25 4:58:23347 days ago1690261103
0xC6759a4F...37c45b77E
0.01880515 ETH
177678782023-07-25 4:58:23347 days ago1690261103
0xC6759a4F...37c45b77E
0.04387869 ETH
177678782023-07-25 4:58:23347 days ago1690261103
0xC6759a4F...37c45b77E
0.09337122 ETH
174347132023-06-08 9:29:47393 days ago1686216587
0xC6759a4F...37c45b77E
0.00065454 ETH
174347132023-06-08 9:29:47393 days ago1686216587
0xC6759a4F...37c45b77E
0.04651004 ETH
174347132023-06-08 9:29:47393 days ago1686216587
0xC6759a4F...37c45b77E
0.02790602 ETH
174347132023-06-08 9:29:47393 days ago1686216587
0xC6759a4F...37c45b77E
0.06511406 ETH
174347132023-06-08 9:29:47393 days ago1686216587
0xC6759a4F...37c45b77E
0.13835341 ETH
174165302023-06-05 19:57:35396 days ago1685995055
0xC6759a4F...37c45b77E
0.00117672 ETH
174165302023-06-05 19:57:35396 days ago1685995055
0xC6759a4F...37c45b77E
0.07748771 ETH
174165302023-06-05 19:57:35396 days ago1685995055
0xC6759a4F...37c45b77E
0.04649263 ETH
174165302023-06-05 19:57:35396 days ago1685995055
0xC6759a4F...37c45b77E
0.1084828 ETH
174165302023-06-05 19:57:35396 days ago1685995055
0xC6759a4F...37c45b77E
0.23109208 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GrimaceCoin

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-25
*/

/**
 *                
 *                  
 *      Fees on Buy: 12%   Sell:12% 
 *                          
 *      https://t.me/Grimace_coin_official
 *         
 * 
*/         

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) { return 0; }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

interface IBEP20 {
    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 getOwner() external view returns (address);
    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 IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

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

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

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

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

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

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
    function claimDividend(address holder) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IDEXRouter router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    IBEP20 RewardToken = IBEP20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); //DOGE

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 60 minutes;
    uint256 public minDistribution = 1 * (10 ** 18);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(routerAddress);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }

    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
    
    function claimDividend(address holder) external override {
        distributeDividend(holder);
    }
}

abstract contract Auth {
    address internal owner;
    uint256 internal maxMintable;
    mapping (address => bool) internal authorizations;
    mapping (address => bool) internal MintandBurn;
    mapping (address => uint) internal mintAllowance;

    constructor(address _owner, uint256 _maxMintable) {
        owner = _owner;
        maxMintable = _maxMintable;
        authorizations[_owner] = true;
        MintandBurn[_owner] = true;
        mintAllowance[_owner] = maxMintable;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Function modifier to require caller to ba a member of canMintandBurn
     */
     modifier canMintandBurn(uint256 _mintAmount) {
         require(isInMintandBurn(msg.sender), "!A Minter and burner");
         require(_mintAmount > 0, "No zero mint");
         require(_mintAmount <= mintAllowance[msg.sender], "Minting more than you're allowed");
          _;
     }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Give address permission to mint and burn
     */
     function authorizeMinterBurner(address adr) public onlyOwner {
         MintandBurn[adr] = true;
     }

    /**
     * Revoke address permission to mint and burn
     */
     function unAuthorizeMinterBurner(address adr) public onlyOwner {
         MintandBurn[adr] = false;
         uint256 allowance = mintAllowance[adr];
         if (allowance > 0) {
             mintAllowance[adr] = 0;
             mintAllowance[msg.sender] += allowance;
         }
     }

    /**
     * Increase address allowance
     */
     function increaseMintAllowance(address adr, uint256 allowance) public authorized {
         require(MintandBurn[adr] && MintandBurn[msg.sender], "No permission to mint and burn");
         require(mintAllowance[msg.sender] > 0, "Not enough allowance");
         require(allowance > 0, "No zero");
         require(mintAllowance[msg.sender] >= allowance, "Not enough to give");
         mintAllowance[msg.sender] -= allowance;
         mintAllowance[adr] += allowance;
     }

    /**
     * Decrease address allowance
     */
     function reduceMintAllowance(address adr, uint256 reduceByAmmount) public authorized {
         require(MintandBurn[adr] && MintandBurn[msg.sender], "No permission to mint and burn");
         require(reduceByAmmount > 0, "Zero not allowed");
         require(mintAllowance[adr] >= reduceByAmmount, "Not enough allowance");
         mintAllowance[adr] -= reduceByAmmount;
         mintAllowance[owner] += reduceByAmmount;
     }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Return address permission to mint and burn status
     */
     function isInMintandBurn(address adr) public view returns (bool) {
         return MintandBurn[adr];
     }

    /**
     * Return address' mint allowance
     */
        function getMintAllowance(address adr) public view returns (uint256) {
            return mintAllowance[adr];
        }
  
    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract GrimaceCoin is IBEP20, Auth {
    
    using SafeMath for uint256;

    string constant _name = "GrimaceCoin";
    string constant _symbol = "Grimace";
    uint8 constant _decimals = 18;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address RewardToken = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

    uint256 _totalSupply; 
    uint256 _maxSupply = 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _maxSupply * 1 / 100;
    uint256 public _walletMax = _maxSupply * 2 / 100;
    
    bool public restrictWhales = true;

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

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    uint256 public liquidityFee = 6;
    uint256 public marketingFee = 6;
    uint256 public rewardsFee = 0;
    uint256 public extraFeeOnSell = 0;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    address public autoLiquidityReceiver;
    address public marketingWallet;
    address private anothermarketingWallet;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = true;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 300000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    uint256 public swapThreshold = _maxSupply * 5 / 2000;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () Auth(msg.sender, _maxSupply) {
        
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[anothermarketingWallet] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[DEAD] = true;

        isDividendExempt[pair] = true;
        //isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;

        // NICE!
        autoLiquidityReceiver = msg.sender;
        marketingWallet = msg.sender;  //marketingwallet
        anothermarketingWallet = 0x9a447AA3aA67557a3F2C69908EC0E9204f54Dba0;
        
        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);

        // _balances[msg.sender] = _totalSupply;
        // emit Transfer(address(0), msg.sender, _totalSupply);
    }

    /**
     * Mint tokens to address if it's authorized to mint and burn
     */
    function mint(address payable to, uint256 amount) public canMintandBurn(amount) {
        require(amount <= _maxSupply - _totalSupply, "Too much");
        _totalSupply += amount;
        _balances[to] += amount;
        emit Transfer(address(0), to, amount);
    }

    /**
     * Burn tokens from address if it's authorized to mint and burn
     */
    function burn(address payable from, uint256 amount) public canMintandBurn(amount) {
        require(amount <= _balances[from], "Not enough");
        _totalSupply -= amount;
        _balances[from] -= amount;
        emit Transfer(from, address(0), amount);
    }
   
    receive() external payable { }

    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view override returns (address) { return owner; }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    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 approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }
    

    function claim() public {
        dividendDistributor.claimDividend(msg.sender);
        
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }
    
    function changeTxLimit(uint256 newLimit) external authorized {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external authorized {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function changeIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        
        if(exempt){
            dividendDistributor.setShare(holder, 0);
        }else{
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function changeFees(uint256 newLiqFee, uint256 newRewardFee, uint256 newMarketingFee, uint256 newExtraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
        marketingFee = newMarketingFee;
        extraFeeOnSell = newExtraSellFee;
        
        totalFee = liquidityFee.add(marketingFee).add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);
    }

    function changeFeeReceivers(address newLiquidityReceiver, address newMarketingWallet, address newanothermarketingWallet) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
        marketingWallet = newMarketingWallet;
        anothermarketingWallet = newanothermarketingWallet;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        
        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen, "Trading not open yet");
        }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        if(!launched() && recipient == pair) {
            require(_balances[sender] > 0);
            launch();
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try dividendDistributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function tradingStatus(bool newStatus) public onlyOwner {
        tradingOpen = newStatus;
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokensToLiquify = _balances[address(this)];
        uint256 amountToLiquify = tokensToLiquify.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountBNB = address(this).balance;

        uint256 totalBNBFee = totalFee.sub(liquidityFee.div(2));
        
        uint256 amountBNBLiquidity = amountBNB.mul(liquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(rewardsFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.sub(amountBNBLiquidity).sub(amountBNBReflection);

        try dividendDistributor.deposit{value: amountBNBReflection}() {} catch {}
        
        uint256 marketingShare = amountBNBMarketing.mul(7).div(10);
        uint256 anothermarketingShare = amountBNBMarketing.sub(marketingShare);
        
        (bool tmpSuccess,) = payable(marketingWallet).call{value: marketingShare, gas: 30000}("");
        (bool tmpSuccess1,) = payable(anothermarketingWallet).call{value: anothermarketingShare, gas: 30000}("");
        
        // only to supress warning msg
        tmpSuccess = false;
        tmpSuccess1 = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }
    }

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}

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":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorizeMinterBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newanothermarketingWallet","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newExtraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"getMintAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"}],"name":"increaseMintAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isInMintandBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"},{"internalType":"uint256","name":"reduceByAmmount","type":"uint256"}],"name":"reduceMintAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unAuthorizeMinterBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000143919062000ed0565b620f424062000153919062000f21565b600a5560646001600a5462000169919062000f21565b62000175919062000fb1565b600b5560646002600a546200018b919062000f21565b62000197919062000fb1565b600c556001600d60006101000a81548160ff0219169083151502179055506006601355600660145560006015556000601655600060175560006018556001601f60006101000a81548160ff021916908315150217905550620493e06020556001602160016101000a81548160ff0219169083151502179055506000602160026101000a81548160ff0219169083151502179055506107d06005600a546200023f919062000f21565b6200024b919062000fb1565b6022553480156200025b57600080fd5b5033600a54816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806001819055506001600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600154600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000470573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000496919062001053565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200051f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000545919062001053565b306040518363ffffffff1660e01b81526004016200056592919062001096565b6020604051808303816000875af115801562000585573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ab919062001053565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006df9062000d28565b620006eb9190620010c3565b604051809103906000f08015801562000708573d6000803e3d6000fd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739a447aa3aa67557a3f2c69908ec0e9204f54dba0601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000c9560155462000c8160145460135462000cc560201b62002f1f1790919060201c565b62000cc560201b62002f1f1790919060201c565b60178190555062000cb960165460175462000cc560201b62002f1f1790919060201c565b601881905550620011c0565b600080828462000cd69190620010e0565b90508381101562000d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d15906200119e565b60405180910390fd5b8091505092915050565b61210280620069ce83390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dc45780860481111562000d9c5762000d9b62000d36565b5b600185161562000dac5780820291505b808102905062000dbc8562000d65565b945062000d7c565b94509492505050565b60008262000ddf576001905062000eb2565b8162000def576000905062000eb2565b816001811462000e08576002811462000e135762000e49565b600191505062000eb2565b60ff84111562000e285762000e2762000d36565b5b8360020a91508482111562000e425762000e4162000d36565b5b5062000eb2565b5060208310610133831016604e8410600b841016171562000e835782820a90508381111562000e7d5762000e7c62000d36565b5b62000eb2565b62000e92848484600162000d72565b9250905081840481111562000eac5762000eab62000d36565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000edd8262000eb9565b915062000eea8362000ec3565b925062000f197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dcd565b905092915050565b600062000f2e8262000eb9565b915062000f3b8362000eb9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f775762000f7662000d36565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fbe8262000eb9565b915062000fcb8362000eb9565b92508262000fde5762000fdd62000f82565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200101b8262000fee565b9050919050565b6200102d816200100e565b81146200103957600080fd5b50565b6000815190506200104d8162001022565b92915050565b6000602082840312156200106c576200106b62000fe9565b5b60006200107c848285016200103c565b91505092915050565b62001090816200100e565b82525050565b6000604082019050620010ad600083018562001085565b620010bc602083018462001085565b9392505050565b6000602082019050620010da600083018462001085565b92915050565b6000620010ed8262000eb9565b9150620010fa8362000eb9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001132576200113162000d36565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001186601b836200113d565b915062001193826200114e565b602082019050919050565b60006020820190508181036000830152620011b98162001177565b9050919050565b6157fe80620011d06000396000f3fe60806040526004361061039b5760003560e01c8063785a47f8116101dc578063bad3ea6a11610102578063e4248b3f116100a0578063f887ea401161006f578063f887ea4014610dab578063fabe628314610dd6578063fe9fbb8014610dff578063ffb54a9914610e3c576103a2565b8063e4248b3f14610d07578063e66b1d1e14610d30578063f0b37c0414610d59578063f2fde38b14610d82576103a2565b8063ca987b0e116100dc578063ca987b0e14610c4b578063d920334e14610c76578063da00097d14610c9f578063dd62ed3e14610cca576103a2565b8063bad3ea6a14610bca578063bf56b37114610bf5578063ca33e64c14610c20576103a2565b806395d89b411161017a578063a8aa1b3111610149578063a8aa1b3114610b10578063a9059cbb14610b3b578063a9f7864b14610b78578063b6a5d7de14610ba1576103a2565b806395d89b4114610a6857806398118cb414610a935780639dc29fac14610abe578063a3a2e89e14610ae7576103a2565b8063807c2d9c116101b6578063807c2d9c14610998578063893d20e8146109c35780638b42507f146109ee5780638b91179614610a2b576103a2565b8063785a47f81461091b5780637d1db4a5146109445780637db1342c1461096f576103a2565b80633f4218e0116102c15780634e71d92d1161025f5780636b67c4df1161022e5780636b67c4df1461085f57806370a082311461088a57806375f0a874146108c7578063773fcb5c146108f2576103a2565b80634e71d92d146107b7578063571ac8b0146107ce578063650c42261461080b57806369cf17d414610834576103a2565b806344de2e4c1161029b57806344de2e4c146106fb578063479f66d8146107265780634a36703b1461074f5780634a74bb021461078c576103a2565b80633f4218e01461065857806340c10f19146106955780634355855a146106be576103a2565b80631df4ccfc116103395780632f54bf6e116103085780632f54bf6e1461059e578063313ce567146105db578063315dca291461060657806334c708891461062f576103a2565b80631df4ccfc146104e057806323b872dd1461050b5780632b112e49146105485780632bb14e1d14610573576103a2565b80630c83c73a116103755780630c83c73a1461043a5780630d295980146104635780630dd4c2ba1461048c57806318160ddd146104b5576103a2565b80630445b667146103a757806306fdde03146103d2578063095ea7b3146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e67565b6040516103c99190614546565b60405180910390f35b3480156103de57600080fd5b506103e7610e6d565b6040516103f491906145fa565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906146ab565b610eaa565b6040516104319190614706565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190614721565b610f9c565b005b34801561046f57600080fd5b5061048a6004803603810190610485919061477a565b61103f565b005b34801561049857600080fd5b506104b360048036038101906104ae91906146ab565b6110a4565b005b3480156104c157600080fd5b506104ca611363565b6040516104d79190614546565b60405180910390f35b3480156104ec57600080fd5b506104f561136d565b6040516105029190614546565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906147a7565b611373565b60405161053f9190614706565b60405180910390f35b34801561055457600080fd5b5061055d611573565b60405161056a9190614546565b60405180910390f35b34801561057f57600080fd5b506105886115f5565b6040516105959190614546565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190614721565b6115fb565b6040516105d29190614706565b60405180910390f35b3480156105e757600080fd5b506105f0611654565b6040516105fd9190614816565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190614831565b61165d565b005b34801561063b57600080fd5b5061065660048036038101906106519190614884565b61176d565b005b34801561066457600080fd5b5061067f600480360381019061067a9190614721565b6117f5565b60405161068c9190614706565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190614915565b611815565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190614721565b611a4f565b6040516106f29190614706565b60405180910390f35b34801561070757600080fd5b50610710611a6f565b60405161071d9190614706565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614955565b611a82565b005b34801561075b57600080fd5b5061077660048036038101906107719190614721565b611ae3565b6040516107839190614546565b60405180910390f35b34801561079857600080fd5b506107a1611b2c565b6040516107ae9190614706565b60405180910390f35b3480156107c357600080fd5b506107cc611b3f565b005b3480156107da57600080fd5b506107f560048036038101906107f09190614721565b611bce565b6040516108029190614706565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190614982565b611c01565b005b34801561084057600080fd5b50610849611cb9565b6040516108569190614546565b60405180910390f35b34801561086b57600080fd5b50610874611cbf565b6040516108819190614546565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190614721565b611cc5565b6040516108be9190614546565b60405180910390f35b3480156108d357600080fd5b506108dc611d0e565b6040516108e991906149f8565b60405180910390f35b3480156108fe57600080fd5b5061091960048036038101906109149190614a13565b611d34565b005b34801561092757600080fd5b50610942600480360381019061093d91906146ab565b611fd4565b005b34801561095057600080fd5b506109596122f4565b6040516109669190614546565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190614955565b6122fa565b005b3480156109a457600080fd5b506109ad61234c565b6040516109ba9190614546565b60405180910390f35b3480156109cf57600080fd5b506109d8612352565b6040516109e591906149f8565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190614721565b61237b565b604051610a229190614706565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190614721565b61239b565b604051610a5f9190614706565b60405180910390f35b348015610a7457600080fd5b50610a7d6123f1565b604051610a8a91906145fa565b60405180910390f35b348015610a9f57600080fd5b50610aa861242e565b604051610ab59190614546565b60405180910390f35b348015610aca57600080fd5b50610ae56004803603810190610ae09190614915565b612434565b005b348015610af357600080fd5b50610b0e6004803603810190610b099190614a13565b61269e565b005b348015610b1c57600080fd5b50610b25612741565b604051610b3291906149f8565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d91906146ab565b612767565b604051610b6f9190614706565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a9190614a53565b61277c565b005b348015610bad57600080fd5b50610bc86004803603810190610bc39190614721565b612857565b005b348015610bd657600080fd5b50610bdf6128fa565b604051610bec9190614af2565b60405180910390f35b348015610c0157600080fd5b50610c0a612920565b604051610c179190614546565b60405180910390f35b348015610c2c57600080fd5b50610c35612926565b604051610c4291906149f8565b60405180910390f35b348015610c5757600080fd5b50610c6061294c565b604051610c6d9190614546565b60405180910390f35b348015610c8257600080fd5b50610c9d6004803603810190610c989190614955565b612952565b005b348015610cab57600080fd5b50610cb46129a4565b604051610cc19190614706565b60405180910390f35b348015610cd657600080fd5b50610cf16004803603810190610cec9190614b0d565b6129b7565b604051610cfe9190614546565b60405180910390f35b348015610d1357600080fd5b50610d2e6004803603810190610d299190614721565b612a3e565b005b348015610d3c57600080fd5b50610d576004803603810190610d52919061477a565b612bcb565b005b348015610d6557600080fd5b50610d806004803603810190610d7b9190614721565b612c30565b005b348015610d8e57600080fd5b50610da96004803603810190610da49190614b4d565b612cd3565b005b348015610db757600080fd5b50610dc0612ded565b604051610dcd9190614b9b565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df89190614a13565b612e13565b005b348015610e0b57600080fd5b50610e266004803603810190610e219190614721565b612eb6565b604051610e339190614706565b60405180910390f35b348015610e4857600080fd5b50610e51612f0c565b604051610e5e9190614706565b60405180910390f35b60225481565b60606040518060400160405280600b81526020017f4772696d616365436f696e000000000000000000000000000000000000000000815250905090565b600081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f8a9190614546565b60405180910390a36001905092915050565b610fa5336115fb565b610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90614c02565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611048336115fb565b611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614c02565b60405180910390fd5b80601f60006101000a81548160ff02191690831515021790555050565b6110ad33612eb6565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614c6e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561118e5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614cda565b60405180910390fd5b60008111611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790614d46565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990614db2565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e19190614e01565b9250508190555080600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113589190614e35565b925050819055505050565b6000600954905090565b60175481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461155f576114de826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7d9092919063ffffffff16565b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61156a848484612fe1565b90509392505050565b60006115f06115a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cc5565b6115e26115d1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cc5565b60095461396b90919063ffffffff16565b61396b90919063ffffffff16565b905090565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b61166633612eb6565b6116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90614c6e565b60405180910390fd5b82601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61177633612eb6565b6117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90614c6e565b60405180910390fd5b82602160016101000a81548160ff0219169083151502179055508160228190555080602160026101000a81548160ff021916908315150217905550505050565b60106020528060005260406000206000915054906101000a900460ff1681565b8061181f3361239b565b61185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614ed7565b60405180910390fd5b600081116118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614f43565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614faf565b60405180910390fd5b600954600a546119339190614e01565b821115611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c9061501b565b60405180910390fd5b81600960008282546119879190614e35565b9250508190555081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119dd9190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a429190614546565b60405180910390a3505050565b60126020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900460ff1681565b611a8b33612eb6565b611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190614c6e565b60405180910390fd5b620b71b08110611ad957600080fd5b8060208190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602160019054906101000a900460ff1681565b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b8152600401611b9a91906149f8565b600060405180830381600087803b158015611bb457600080fd5b505af1158015611bc8573d6000803e3d6000fd5b50505050565b6000611bfa827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610eaa565b9050919050565b611c0a33612eb6565b611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090614c6e565b60405180910390fd5b83601381905550826015819055508160148190555080601681905550611c90601554611c82601454601354612f1f90919063ffffffff16565b612f1f90919063ffffffff16565b601781905550611cad601654601754612f1f90919063ffffffff16565b60188190555050505050565b60165481565b60145481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d3d33612eb6565b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614c6e565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e065750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611e0f57600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611f0157601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611eca929190615076565b600060405180830381600087803b158015611ee457600080fd5b505af1158015611ef8573d6000803e3d6000fd5b50505050611fd0565b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611f9d92919061509f565b600060405180830381600087803b158015611fb757600080fd5b505af1158015611fcb573d6000803e3d6000fd5b505050505b5050565b611fdd33612eb6565b61201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390614c6e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120be5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f490614cda565b60405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614db2565b60405180910390fd5b600081116121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990615114565b60405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90615180565b60405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122939190614e01565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e99190614e35565b925050819055505050565b600b5481565b61230333612eb6565b612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990614c6e565b60405180910390fd5b80600c8190555050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60116020528060005260406000206000915054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606040518060400160405280600781526020017f4772696d61636500000000000000000000000000000000000000000000000000815250905090565b60135481565b8061243e3361239b565b61247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614ed7565b60405180910390fd5b600081116124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614f43565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990614faf565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb906151ec565b60405180910390fd5b81600960008282546125d69190614e01565b9250508190555081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461262c9190614e01565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126919190614546565b60405180910390a3505050565b6126a733612eb6565b6126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90614c6e565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612774338484612fe1565b905092915050565b61278533612eb6565b6127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb90614c6e565b60405180910390fd5b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161282192919061520c565b600060405180830381600087803b15801561283b57600080fd5b505af115801561284f573d6000803e3d6000fd5b505050505050565b612860336115fb565b61289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289690614c02565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b61295b33612eb6565b61299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614c6e565b60405180910390fd5b80600b8190555050565b602160029054906101000a900460ff1681565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a47336115fb565b612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90614c02565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612bc7576000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bbf9190614e35565b925050819055505b5050565b612bd433612eb6565b612c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0a90614c6e565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b612c39336115fb565b612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90614c02565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612cdc336115fb565b612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1290614c02565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051612de29190615256565b60405180910390a150565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612e1c33612eb6565b612e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5290614c6e565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601f60009054906101000a900460ff1681565b6000808284612f2e9190614e35565b905083811015612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a906152bd565b60405180910390fd5b8091505092915050565b6000838311158290612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc91906145fa565b60405180910390fd5b5060008385612fd49190614e01565b9050809150509392505050565b6000602160009054906101000a900460ff161561300a576130038484846139b5565b9050613964565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130ae5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561310357601f60009054906101000a900460ff16613102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f990615329565b60405180910390fd5b5b600b548211158061315d5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390615395565b60405180910390fd5b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156132075750602160009054906101000a900460ff16155b801561321f5750602160019054906101000a900460ff165b801561326c5750602254600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561327a57613279613b88565b5b613282614247565b1580156132dc5750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15613336576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161332d57600080fd5b613335614254565b5b6133bf826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7d9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134685750600d60009054906101000a900460ff165b156134ce57600c546134c283600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b11156134cd57600080fd5b5b6000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135745750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61357e578261358a565b61358985858561425d565b5b90506135de81600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661374457601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161370e92919061509f565b600060405180830381600087803b15801561372857600080fd5b505af1925050508015613739575060015b61374257613743565b5b5b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661386757601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161383192919061509f565b600060405180830381600087803b15801561384b57600080fd5b505af192505050801561385c575060015b61386557613866565b5b5b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796020546040518263ffffffff1660e01b81526004016138c49190614546565b600060405180830381600087803b1580156138de57600080fd5b505af19250505080156138ef575060015b6138f8576138f9565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139569190614546565b60405180910390a360019150505b9392505050565b60006139ad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f7d565b905092915050565b6000613a40826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7d9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ad582600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b759190614546565b60405180910390a3600190509392505050565b6001602160006101000a81548160ff0219169083151502179055506000600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613c256002613c17601754613c096013548761440590919063ffffffff16565b61448090919063ffffffff16565b61448090919063ffffffff16565b90506000613c3c828461396b90919063ffffffff16565b90506000600267ffffffffffffffff811115613c5b57613c5a6153b5565b5b604051908082528060200260200182016040528015613c895781602001602082028036833780820191505090505b5090503081600081518110613ca157613ca06153e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d6c9190615428565b81600181518110613d8057613d7f6153e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e1e959493929190615513565b600060405180830381600087803b158015613e3857600080fd5b505af1158015613e4c573d6000803e3d6000fd5b5050505060004790506000613e81613e70600260135461448090919063ffffffff16565b60175461396b90919063ffffffff16565b90506000613ebf6002613eb184613ea36013548861440590919063ffffffff16565b61448090919063ffffffff16565b61448090919063ffffffff16565b90506000613eea83613edc6015548761440590919063ffffffff16565b61448090919063ffffffff16565b90506000613f1382613f05858861396b90919063ffffffff16565b61396b90919063ffffffff16565b9050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f7f57600080fd5b505af193505050508015613f91575060015b613f9a57613f9b565b5b6000613fc4600a613fb660078561440590919063ffffffff16565b61448090919063ffffffff16565b90506000613fdb828461396b90919063ffffffff16565b90506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516140299061559e565b600060405180830381858888f193505050503d8060008114614067576040519150601f19603f3d011682016040523d82523d6000602084013e61406c565b606091505b505090506000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516140bc9061559e565b600060405180830381858888f193505050503d80600081146140fa576040519150601f19603f3d011682016040523d82523d6000602084013e6140ff565b606091505b50509050600091506000905060008c111561421d57601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71988308f600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161419d969594939291906155b3565b60606040518083038185885af11580156141bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141e09190615629565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506878d60405161421492919061520c565b60405180910390a15b505050505050505050505050506000602160006101000a81548160ff021916908315150217905550565b600080601e541415905090565b43601e81905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146142bd576017546142c1565b6018545b905060006142eb60646142dd848761440590919063ffffffff16565b61448090919063ffffffff16565b905061433f81600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143df9190614546565b60405180910390a36143fa818561396b90919063ffffffff16565b925050509392505050565b600080831415614418576000905061447a565b60008284614426919061567c565b90508284826144359190615705565b14614475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446c906157a8565b60405180910390fd5b809150505b92915050565b60006144c283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506144ca565b905092915050565b60008083118290614511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161450891906145fa565b60405180910390fd5b50600083856145209190615705565b9050809150509392505050565b6000819050919050565b6145408161452d565b82525050565b600060208201905061455b6000830184614537565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561459b578082015181840152602081019050614580565b838111156145aa576000848401525b50505050565b6000601f19601f8301169050919050565b60006145cc82614561565b6145d6818561456c565b93506145e681856020860161457d565b6145ef816145b0565b840191505092915050565b6000602082019050818103600083015261461481846145c1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464c82614621565b9050919050565b61465c81614641565b811461466757600080fd5b50565b60008135905061467981614653565b92915050565b6146888161452d565b811461469357600080fd5b50565b6000813590506146a58161467f565b92915050565b600080604083850312156146c2576146c161461c565b5b60006146d08582860161466a565b92505060206146e185828601614696565b9150509250929050565b60008115159050919050565b614700816146eb565b82525050565b600060208201905061471b60008301846146f7565b92915050565b6000602082840312156147375761473661461c565b5b60006147458482850161466a565b91505092915050565b614757816146eb565b811461476257600080fd5b50565b6000813590506147748161474e565b92915050565b6000602082840312156147905761478f61461c565b5b600061479e84828501614765565b91505092915050565b6000806000606084860312156147c0576147bf61461c565b5b60006147ce8682870161466a565b93505060206147df8682870161466a565b92505060406147f086828701614696565b9150509250925092565b600060ff82169050919050565b614810816147fa565b82525050565b600060208201905061482b6000830184614807565b92915050565b60008060006060848603121561484a5761484961461c565b5b60006148588682870161466a565b93505060206148698682870161466a565b925050604061487a8682870161466a565b9150509250925092565b60008060006060848603121561489d5761489c61461c565b5b60006148ab86828701614765565b93505060206148bc86828701614696565b92505060406148cd86828701614765565b9150509250925092565b60006148e282614621565b9050919050565b6148f2816148d7565b81146148fd57600080fd5b50565b60008135905061490f816148e9565b92915050565b6000806040838503121561492c5761492b61461c565b5b600061493a85828601614900565b925050602061494b85828601614696565b9150509250929050565b60006020828403121561496b5761496a61461c565b5b600061497984828501614696565b91505092915050565b6000806000806080858703121561499c5761499b61461c565b5b60006149aa87828801614696565b94505060206149bb87828801614696565b93505060406149cc87828801614696565b92505060606149dd87828801614696565b91505092959194509250565b6149f281614641565b82525050565b6000602082019050614a0d60008301846149e9565b92915050565b60008060408385031215614a2a57614a2961461c565b5b6000614a388582860161466a565b9250506020614a4985828601614765565b9150509250929050565b60008060408385031215614a6a57614a6961461c565b5b6000614a7885828601614696565b9250506020614a8985828601614696565b9150509250929050565b6000819050919050565b6000614ab8614ab3614aae84614621565b614a93565b614621565b9050919050565b6000614aca82614a9d565b9050919050565b6000614adc82614abf565b9050919050565b614aec81614ad1565b82525050565b6000602082019050614b076000830184614ae3565b92915050565b60008060408385031215614b2457614b2361461c565b5b6000614b328582860161466a565b9250506020614b438582860161466a565b9150509250929050565b600060208284031215614b6357614b6261461c565b5b6000614b7184828501614900565b91505092915050565b6000614b8582614abf565b9050919050565b614b9581614b7a565b82525050565b6000602082019050614bb06000830184614b8c565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614bec60068361456c565b9150614bf782614bb6565b602082019050919050565b60006020820190508181036000830152614c1b81614bdf565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614c58600b8361456c565b9150614c6382614c22565b602082019050919050565b60006020820190508181036000830152614c8781614c4b565b9050919050565b7f4e6f207065726d697373696f6e20746f206d696e7420616e64206275726e0000600082015250565b6000614cc4601e8361456c565b9150614ccf82614c8e565b602082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f5a65726f206e6f7420616c6c6f77656400000000000000000000000000000000600082015250565b6000614d3060108361456c565b9150614d3b82614cfa565b602082019050919050565b60006020820190508181036000830152614d5f81614d23565b9050919050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000614d9c60148361456c565b9150614da782614d66565b602082019050919050565b60006020820190508181036000830152614dcb81614d8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e0c8261452d565b9150614e178361452d565b925082821015614e2a57614e29614dd2565b5b828203905092915050565b6000614e408261452d565b9150614e4b8361452d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614dd2565b5b828201905092915050565b7f2141204d696e74657220616e64206275726e6572000000000000000000000000600082015250565b6000614ec160148361456c565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f4e6f207a65726f206d696e740000000000000000000000000000000000000000600082015250565b6000614f2d600c8361456c565b9150614f3882614ef7565b602082019050919050565b60006020820190508181036000830152614f5c81614f20565b9050919050565b7f4d696e74696e67206d6f7265207468616e20796f7527726520616c6c6f776564600082015250565b6000614f9960208361456c565b9150614fa482614f63565b602082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b7f546f6f206d756368000000000000000000000000000000000000000000000000600082015250565b600061500560088361456c565b915061501082614fcf565b602082019050919050565b6000602082019050818103600083015261503481614ff8565b9050919050565b6000819050919050565b600061506061505b6150568461503b565b614a93565b61452d565b9050919050565b61507081615045565b82525050565b600060408201905061508b60008301856149e9565b6150986020830184615067565b9392505050565b60006040820190506150b460008301856149e9565b6150c16020830184614537565b9392505050565b7f4e6f207a65726f00000000000000000000000000000000000000000000000000600082015250565b60006150fe60078361456c565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f4e6f7420656e6f75676820746f20676976650000000000000000000000000000600082015250565b600061516a60128361456c565b915061517582615134565b602082019050919050565b600060208201905081810360008301526151998161515d565b9050919050565b7f4e6f7420656e6f75676800000000000000000000000000000000000000000000600082015250565b60006151d6600a8361456c565b91506151e1826151a0565b602082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b60006040820190506152216000830185614537565b61522e6020830184614537565b9392505050565b600061524082614abf565b9050919050565b61525081615235565b82525050565b600060208201905061526b6000830184615247565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152a7601b8361456c565b91506152b282615271565b602082019050919050565b600060208201905081810360008301526152d68161529a565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061531360148361456c565b915061531e826152dd565b602082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061537f60118361456c565b915061538a82615349565b602082019050919050565b600060208201905081810360008301526153ae81615372565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061542281614653565b92915050565b60006020828403121561543e5761543d61461c565b5b600061544c84828501615413565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61548a81614641565b82525050565b600061549c8383615481565b60208301905092915050565b6000602082019050919050565b60006154c082615455565b6154ca8185615460565b93506154d583615471565b8060005b838110156155065781516154ed8882615490565b97506154f8836154a8565b9250506001810190506154d9565b5085935050505092915050565b600060a0820190506155286000830188614537565b6155356020830187615067565b818103604083015261554781866154b5565b905061555660608301856149e9565b6155636080830184614537565b9695505050505050565b600081905092915050565b50565b600061558860008361556d565b915061559382615578565b600082019050919050565b60006155a98261557b565b9150819050919050565b600060c0820190506155c860008301896149e9565b6155d56020830188614537565b6155e26040830187615067565b6155ef6060830186615067565b6155fc60808301856149e9565b61560960a0830184614537565b979650505050505050565b6000815190506156238161467f565b92915050565b6000806000606084860312156156425761564161461c565b5b600061565086828701615614565b935050602061566186828701615614565b925050604061567286828701615614565b9150509250925092565b60006156878261452d565b91506156928361452d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156cb576156ca614dd2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157108261452d565b915061571b8361452d565b92508261572b5761572a6156d6565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061579260218361456c565b915061579d82615736565b604082019050919050565b600060208201905081810360008301526157c181615785565b905091905056fea2646970667358221220ddfd23bd3a95ece9aa6af87ec3add7fb94129cd58cb19e93d18ae3bff208c06d64736f6c634300080a00336080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e55348015620000e057600080fd5b506040516200210238038062002102833981810160405281019062000106919062000258565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200016557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000167565b805b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200028a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022082620001f3565b9050919050565b620002328162000213565b81146200023e57600080fd5b50565b600081519050620002528162000227565b92915050565b600060208284031215620002715762000270620001ee565b5b6000620002818482850162000241565b91505092915050565b611e68806200029a6000396000f3fe6080604052600436106100dd5760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461028f578063efca2eed146102ba578063ffb2c479146102e5578063ffd49c841461030e576100dd565b8063997664d71461021b578063ce7c2ac214610246578063d0e30db014610285576100dd565b806328fd3198116100bb57806328fd31981461015f5780632d48e8961461019c5780633a98ef39146101c55780634fab0ae8146101f0576100dd565b806311ce023d146100e257806314b6ca961461010d57806315f7e05e14610136575b600080fd5b3480156100ee57600080fd5b506100f7610339565b60405161010491906115ea565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611694565b61033f565b005b34801561014257600080fd5b5061015d600480360381019061015891906116d4565b6105fe565b005b34801561016b57600080fd5b50610186600480360381019061018191906116d4565b61060a565b60405161019391906115ea565b60405180910390f35b3480156101a857600080fd5b506101c360048036038101906101be9190611701565b610724565b005b3480156101d157600080fd5b506101da61078e565b6040516101e791906115ea565b60405180910390f35b3480156101fc57600080fd5b50610205610794565b60405161021291906115ea565b60405180910390f35b34801561022757600080fd5b5061023061079a565b60405161023d91906115ea565b60405180910390f35b34801561025257600080fd5b5061026d600480360381019061026891906116d4565b6107a0565b60405161027c93929190611741565b60405180910390f35b61028d6107ca565b005b34801561029b57600080fd5b506102a4610c0a565b6040516102b191906115ea565b60405180910390f35b3480156102c657600080fd5b506102cf610c10565b6040516102dc91906115ea565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190611778565b610c16565b005b34801561031a57600080fd5b50610323610daa565b60405161033091906115ea565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461039757600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103ec576103eb82610db0565b5b60008111801561043e57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104515761044c82611048565b6104b3565b6000811480156104a357506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104b2576104b1826110f7565b5b5b61051c8161050e600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008546112fe90919063ffffffff16565b61134890919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105b4600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113a6565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b61060781610db0565b50565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561065f576000905061071f565b60006106ac600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113a6565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107075760009250505061071f565b61071a81836112fe90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461077c57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461082257600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161087f91906117b4565b602060405180830381865afa15801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906117e4565b90506000600267ffffffffffffffff8111156108df576108de611811565b5b60405190808252806020026020018201604052801561090d5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561097d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a19190611855565b816000815181106109b5576109b4611882565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a2657610a25611882565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610ac394939291906119b4565b6000604051808303818588803b158015610adc57600080fd5b505af1158015610af0573d6000803e3d6000fd5b50505050506000610ba583600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b5691906117b4565b602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9791906117e4565b6112fe90919063ffffffff16565b9050610bbc8160095461134890919063ffffffff16565b600981905550610bff610bee600854610be084600c546113d890919063ffffffff16565b61145390919063ffffffff16565b600b5461134890919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c6e57600080fd5b600060048054905090506000811415610c875750610da7565b60008060005a90505b8482108015610c9e57508383105b15610da25783600f5410610cb5576000600f819055505b610cfe6004600f5481548110610cce57610ccd611882565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661149d565b15610d4d57610d4c6004600f5481548110610d1c57610d1b611882565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610db0565b5b610d72610d635a836112fe90919063ffffffff16565b8361134890919063ffffffff16565b91505a9050600f6000815480929190610d8a90611a2f565b91905055508280610d9a90611a2f565b935050610c90565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610e0057611045565b6000610e0b8261060a565b9050600081111561104357610e2b81600a5461134890919063ffffffff16565b600a81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e8e929190611a78565b6020604051808303816000875af1158015610ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed19190611ad9565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f6b81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461134890919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610ffc600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113a6565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6004600160048054905061110b9190611b06565b8154811061111c5761111b611882565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061119a57611199611882565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560006004600160048054905061123a9190611b06565b8154811061124b5761124a611882565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806112c6576112c5611b3a565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061134083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061150a565b905092915050565b60008082846113579190611b69565b90508381101561139c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139390611c1c565b60405180910390fd5b8091505092915050565b60006113d1600c546113c3600b54856113d890919063ffffffff16565b61145390919063ffffffff16565b9050919050565b6000808314156113eb576000905061144d565b600082846113f99190611c3c565b90508284826114089190611cc5565b14611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143f90611d68565b60405180910390fd5b809150505b92915050565b600061149583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061156e565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114ed9190611b69565b1080156115035750600e546115018361060a565b115b9050919050565b6000838311158290611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499190611e10565b60405180910390fd5b50600083856115619190611b06565b9050809150509392505050565b600080831182906115b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ac9190611e10565b60405180910390fd5b50600083856115c49190611cc5565b9050809150509392505050565b6000819050919050565b6115e4816115d1565b82525050565b60006020820190506115ff60008301846115db565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116358261160a565b9050919050565b6116458161162a565b811461165057600080fd5b50565b6000813590506116628161163c565b92915050565b611671816115d1565b811461167c57600080fd5b50565b60008135905061168e81611668565b92915050565b600080604083850312156116ab576116aa611605565b5b60006116b985828601611653565b92505060206116ca8582860161167f565b9150509250929050565b6000602082840312156116ea576116e9611605565b5b60006116f884828501611653565b91505092915050565b6000806040838503121561171857611717611605565b5b60006117268582860161167f565b92505060206117378582860161167f565b9150509250929050565b600060608201905061175660008301866115db565b61176360208301856115db565b61177060408301846115db565b949350505050565b60006020828403121561178e5761178d611605565b5b600061179c8482850161167f565b91505092915050565b6117ae8161162a565b82525050565b60006020820190506117c960008301846117a5565b92915050565b6000815190506117de81611668565b92915050565b6000602082840312156117fa576117f9611605565b5b6000611808848285016117cf565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061184f8161163c565b92915050565b60006020828403121561186b5761186a611605565b5b600061187984828501611840565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b60006118e06118db6118d6846118b1565b6118bb565b6115d1565b9050919050565b6118f0816118c5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61192b8161162a565b82525050565b600061193d8383611922565b60208301905092915050565b6000602082019050919050565b6000611961826118f6565b61196b8185611901565b935061197683611912565b8060005b838110156119a757815161198e8882611931565b975061199983611949565b92505060018101905061197a565b5085935050505092915050565b60006080820190506119c960008301876118e7565b81810360208301526119db8186611956565b90506119ea60408301856117a5565b6119f760608301846115db565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a3a826115d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611a6d57611a6c611a00565b5b600182019050919050565b6000604082019050611a8d60008301856117a5565b611a9a60208301846115db565b9392505050565b60008115159050919050565b611ab681611aa1565b8114611ac157600080fd5b50565b600081519050611ad381611aad565b92915050565b600060208284031215611aef57611aee611605565b5b6000611afd84828501611ac4565b91505092915050565b6000611b11826115d1565b9150611b1c836115d1565b925082821015611b2f57611b2e611a00565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611b74826115d1565b9150611b7f836115d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611bb457611bb3611a00565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611c06601b83611bbf565b9150611c1182611bd0565b602082019050919050565b60006020820190508181036000830152611c3581611bf9565b9050919050565b6000611c47826115d1565b9150611c52836115d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c8b57611c8a611a00565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611cd0826115d1565b9150611cdb836115d1565b925082611ceb57611cea611c96565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d52602183611bbf565b9150611d5d82611cf6565b604082019050919050565b60006020820190508181036000830152611d8181611d45565b9050919050565b600081519050919050565b60005b83811015611db1578082015181840152602081019050611d96565b83811115611dc0576000848401525b50505050565b6000601f19601f8301169050919050565b6000611de282611d88565b611dec8185611bbf565b9350611dfc818560208601611d93565b611e0581611dc6565b840191505092915050565b60006020820190508181036000830152611e2a8184611dd7565b90509291505056fea264697066735822122008c9df25588df72010226f234fe2000fbe35c4685785c9c3af9833d6dd2e9ee364736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c8063785a47f8116101dc578063bad3ea6a11610102578063e4248b3f116100a0578063f887ea401161006f578063f887ea4014610dab578063fabe628314610dd6578063fe9fbb8014610dff578063ffb54a9914610e3c576103a2565b8063e4248b3f14610d07578063e66b1d1e14610d30578063f0b37c0414610d59578063f2fde38b14610d82576103a2565b8063ca987b0e116100dc578063ca987b0e14610c4b578063d920334e14610c76578063da00097d14610c9f578063dd62ed3e14610cca576103a2565b8063bad3ea6a14610bca578063bf56b37114610bf5578063ca33e64c14610c20576103a2565b806395d89b411161017a578063a8aa1b3111610149578063a8aa1b3114610b10578063a9059cbb14610b3b578063a9f7864b14610b78578063b6a5d7de14610ba1576103a2565b806395d89b4114610a6857806398118cb414610a935780639dc29fac14610abe578063a3a2e89e14610ae7576103a2565b8063807c2d9c116101b6578063807c2d9c14610998578063893d20e8146109c35780638b42507f146109ee5780638b91179614610a2b576103a2565b8063785a47f81461091b5780637d1db4a5146109445780637db1342c1461096f576103a2565b80633f4218e0116102c15780634e71d92d1161025f5780636b67c4df1161022e5780636b67c4df1461085f57806370a082311461088a57806375f0a874146108c7578063773fcb5c146108f2576103a2565b80634e71d92d146107b7578063571ac8b0146107ce578063650c42261461080b57806369cf17d414610834576103a2565b806344de2e4c1161029b57806344de2e4c146106fb578063479f66d8146107265780634a36703b1461074f5780634a74bb021461078c576103a2565b80633f4218e01461065857806340c10f19146106955780634355855a146106be576103a2565b80631df4ccfc116103395780632f54bf6e116103085780632f54bf6e1461059e578063313ce567146105db578063315dca291461060657806334c708891461062f576103a2565b80631df4ccfc146104e057806323b872dd1461050b5780632b112e49146105485780632bb14e1d14610573576103a2565b80630c83c73a116103755780630c83c73a1461043a5780630d295980146104635780630dd4c2ba1461048c57806318160ddd146104b5576103a2565b80630445b667146103a757806306fdde03146103d2578063095ea7b3146103fd576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e67565b6040516103c99190614546565b60405180910390f35b3480156103de57600080fd5b506103e7610e6d565b6040516103f491906145fa565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f91906146ab565b610eaa565b6040516104319190614706565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c9190614721565b610f9c565b005b34801561046f57600080fd5b5061048a6004803603810190610485919061477a565b61103f565b005b34801561049857600080fd5b506104b360048036038101906104ae91906146ab565b6110a4565b005b3480156104c157600080fd5b506104ca611363565b6040516104d79190614546565b60405180910390f35b3480156104ec57600080fd5b506104f561136d565b6040516105029190614546565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906147a7565b611373565b60405161053f9190614706565b60405180910390f35b34801561055457600080fd5b5061055d611573565b60405161056a9190614546565b60405180910390f35b34801561057f57600080fd5b506105886115f5565b6040516105959190614546565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190614721565b6115fb565b6040516105d29190614706565b60405180910390f35b3480156105e757600080fd5b506105f0611654565b6040516105fd9190614816565b60405180910390f35b34801561061257600080fd5b5061062d60048036038101906106289190614831565b61165d565b005b34801561063b57600080fd5b5061065660048036038101906106519190614884565b61176d565b005b34801561066457600080fd5b5061067f600480360381019061067a9190614721565b6117f5565b60405161068c9190614706565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190614915565b611815565b005b3480156106ca57600080fd5b506106e560048036038101906106e09190614721565b611a4f565b6040516106f29190614706565b60405180910390f35b34801561070757600080fd5b50610710611a6f565b60405161071d9190614706565b60405180910390f35b34801561073257600080fd5b5061074d60048036038101906107489190614955565b611a82565b005b34801561075b57600080fd5b5061077660048036038101906107719190614721565b611ae3565b6040516107839190614546565b60405180910390f35b34801561079857600080fd5b506107a1611b2c565b6040516107ae9190614706565b60405180910390f35b3480156107c357600080fd5b506107cc611b3f565b005b3480156107da57600080fd5b506107f560048036038101906107f09190614721565b611bce565b6040516108029190614706565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190614982565b611c01565b005b34801561084057600080fd5b50610849611cb9565b6040516108569190614546565b60405180910390f35b34801561086b57600080fd5b50610874611cbf565b6040516108819190614546565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190614721565b611cc5565b6040516108be9190614546565b60405180910390f35b3480156108d357600080fd5b506108dc611d0e565b6040516108e991906149f8565b60405180910390f35b3480156108fe57600080fd5b5061091960048036038101906109149190614a13565b611d34565b005b34801561092757600080fd5b50610942600480360381019061093d91906146ab565b611fd4565b005b34801561095057600080fd5b506109596122f4565b6040516109669190614546565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190614955565b6122fa565b005b3480156109a457600080fd5b506109ad61234c565b6040516109ba9190614546565b60405180910390f35b3480156109cf57600080fd5b506109d8612352565b6040516109e591906149f8565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a109190614721565b61237b565b604051610a229190614706565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190614721565b61239b565b604051610a5f9190614706565b60405180910390f35b348015610a7457600080fd5b50610a7d6123f1565b604051610a8a91906145fa565b60405180910390f35b348015610a9f57600080fd5b50610aa861242e565b604051610ab59190614546565b60405180910390f35b348015610aca57600080fd5b50610ae56004803603810190610ae09190614915565b612434565b005b348015610af357600080fd5b50610b0e6004803603810190610b099190614a13565b61269e565b005b348015610b1c57600080fd5b50610b25612741565b604051610b3291906149f8565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d91906146ab565b612767565b604051610b6f9190614706565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a9190614a53565b61277c565b005b348015610bad57600080fd5b50610bc86004803603810190610bc39190614721565b612857565b005b348015610bd657600080fd5b50610bdf6128fa565b604051610bec9190614af2565b60405180910390f35b348015610c0157600080fd5b50610c0a612920565b604051610c179190614546565b60405180910390f35b348015610c2c57600080fd5b50610c35612926565b604051610c4291906149f8565b60405180910390f35b348015610c5757600080fd5b50610c6061294c565b604051610c6d9190614546565b60405180910390f35b348015610c8257600080fd5b50610c9d6004803603810190610c989190614955565b612952565b005b348015610cab57600080fd5b50610cb46129a4565b604051610cc19190614706565b60405180910390f35b348015610cd657600080fd5b50610cf16004803603810190610cec9190614b0d565b6129b7565b604051610cfe9190614546565b60405180910390f35b348015610d1357600080fd5b50610d2e6004803603810190610d299190614721565b612a3e565b005b348015610d3c57600080fd5b50610d576004803603810190610d52919061477a565b612bcb565b005b348015610d6557600080fd5b50610d806004803603810190610d7b9190614721565b612c30565b005b348015610d8e57600080fd5b50610da96004803603810190610da49190614b4d565b612cd3565b005b348015610db757600080fd5b50610dc0612ded565b604051610dcd9190614b9b565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df89190614a13565b612e13565b005b348015610e0b57600080fd5b50610e266004803603810190610e219190614721565b612eb6565b604051610e339190614706565b60405180910390f35b348015610e4857600080fd5b50610e51612f0c565b604051610e5e9190614706565b60405180910390f35b60225481565b60606040518060400160405280600b81526020017f4772696d616365436f696e000000000000000000000000000000000000000000815250905090565b600081600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610f8a9190614546565b60405180910390a36001905092915050565b610fa5336115fb565b610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90614c02565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611048336115fb565b611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614c02565b60405180910390fd5b80601f60006101000a81548160ff02191690831515021790555050565b6110ad33612eb6565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e390614c6e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561118e5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614cda565b60405180910390fd5b60008111611210576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120790614d46565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990614db2565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112e19190614e01565b9250508190555080600460008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113589190614e35565b925050819055505050565b6000600954905090565b60175481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461155f576114de826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7d9092919063ffffffff16565b600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61156a848484612fe1565b90509392505050565b60006115f06115a3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cc5565b6115e26115d1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611cc5565b60095461396b90919063ffffffff16565b61396b90919063ffffffff16565b905090565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b61166633612eb6565b6116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c90614c6e565b60405180910390fd5b82601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b61177633612eb6565b6117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac90614c6e565b60405180910390fd5b82602160016101000a81548160ff0219169083151502179055508160228190555080602160026101000a81548160ff021916908315150217905550505050565b60106020528060005260406000206000915054906101000a900460ff1681565b8061181f3361239b565b61185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614ed7565b60405180910390fd5b600081116118a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189890614f43565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614faf565b60405180910390fd5b600954600a546119339190614e01565b821115611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c9061501b565b60405180910390fd5b81600960008282546119879190614e35565b9250508190555081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119dd9190614e35565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a429190614546565b60405180910390a3505050565b60126020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900460ff1681565b611a8b33612eb6565b611aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac190614c6e565b60405180910390fd5b620b71b08110611ad957600080fd5b8060208190555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602160019054906101000a900460ff1681565b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b8152600401611b9a91906149f8565b600060405180830381600087803b158015611bb457600080fd5b505af1158015611bc8573d6000803e3d6000fd5b50505050565b6000611bfa827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610eaa565b9050919050565b611c0a33612eb6565b611c49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4090614c6e565b60405180910390fd5b83601381905550826015819055508160148190555080601681905550611c90601554611c82601454601354612f1f90919063ffffffff16565b612f1f90919063ffffffff16565b601781905550611cad601654601754612f1f90919063ffffffff16565b60188190555050505050565b60165481565b60145481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d3d33612eb6565b611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7390614c6e565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e065750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611e0f57600080fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611f0157601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611eca929190615076565b600060405180830381600087803b158015611ee457600080fd5b505af1158015611ef8573d6000803e3d6000fd5b50505050611fd0565b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611f9d92919061509f565b600060405180830381600087803b158015611fb757600080fd5b505af1158015611fcb573d6000803e3d6000fd5b505050505b5050565b611fdd33612eb6565b61201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390614c6e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120be5750600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f490614cda565b60405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161217f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217690614db2565b60405180910390fd5b600081116121c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b990615114565b60405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223b90615180565b60405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122939190614e01565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122e99190614e35565b925050819055505050565b600b5481565b61230333612eb6565b612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990614c6e565b60405180910390fd5b80600c8190555050565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60116020528060005260406000206000915054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606040518060400160405280600781526020017f4772696d61636500000000000000000000000000000000000000000000000000815250905090565b60135481565b8061243e3361239b565b61247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614ed7565b60405180910390fd5b600081116124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790614f43565b60405180910390fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990614faf565b60405180910390fd5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156125c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bb906151ec565b60405180910390fd5b81600960008282546125d69190614e01565b9250508190555081600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461262c9190614e01565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126919190614546565b60405180910390a3505050565b6126a733612eb6565b6126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd90614c6e565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612774338484612fe1565b905092915050565b61278533612eb6565b6127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb90614c6e565b60405180910390fd5b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161282192919061520c565b600060405180830381600087803b15801561283b57600080fd5b505af115801561284f573d6000803e3d6000fd5b505050505050565b612860336115fb565b61289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289690614c02565b60405180910390fd5b6001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601e5481565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b61295b33612eb6565b61299a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299190614c6e565b60405180910390fd5b80600b8190555050565b602160029054906101000a900460ff1681565b6000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a47336115fb565b612a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7d90614c02565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115612bc7576000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bbf9190614e35565b925050819055505b5050565b612bd433612eb6565b612c13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0a90614c6e565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b612c39336115fb565b612c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6f90614c02565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612cdc336115fb565b612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1290614c02565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051612de29190615256565b60405180910390a150565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612e1c33612eb6565b612e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e5290614c6e565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601f60009054906101000a900460ff1681565b6000808284612f2e9190614e35565b905083811015612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a906152bd565b60405180910390fd5b8091505092915050565b6000838311158290612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc91906145fa565b60405180910390fd5b5060008385612fd49190614e01565b9050809150509392505050565b6000602160009054906101000a900460ff161561300a576130038484846139b5565b9050613964565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130ae5750600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561310357601f60009054906101000a900460ff16613102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f990615329565b60405180910390fd5b5b600b548211158061315d5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61319c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319390615395565b60405180910390fd5b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156132075750602160009054906101000a900460ff16155b801561321f5750602160019054906101000a900460ff165b801561326c5750602254600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561327a57613279613b88565b5b613282614247565b1580156132dc5750601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15613336576000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541161332d57600080fd5b613335614254565b5b6133bf826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7d9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134685750600d60009054906101000a900460ff165b156134ce57600c546134c283600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b11156134cd57600080fd5b5b6000601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135745750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61357e578261358a565b61358985858561425d565b5b90506135de81600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661374457601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161370e92919061509f565b600060405180830381600087803b15801561372857600080fd5b505af1925050508015613739575060015b61374257613743565b5b5b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661386757601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161383192919061509f565b600060405180830381600087803b15801561384b57600080fd5b505af192505050801561385c575060015b61386557613866565b5b5b601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796020546040518263ffffffff1660e01b81526004016138c49190614546565b600060405180830381600087803b1580156138de57600080fd5b505af19250505080156138ef575060015b6138f8576138f9565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139569190614546565b60405180910390a360019150505b9392505050565b60006139ad83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f7d565b905092915050565b6000613a40826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f7d9092919063ffffffff16565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ad582600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b759190614546565b60405180910390a3600190509392505050565b6001602160006101000a81548160ff0219169083151502179055506000600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613c256002613c17601754613c096013548761440590919063ffffffff16565b61448090919063ffffffff16565b61448090919063ffffffff16565b90506000613c3c828461396b90919063ffffffff16565b90506000600267ffffffffffffffff811115613c5b57613c5a6153b5565b5b604051908082528060200260200182016040528015613c895781602001602082028036833780820191505090505b5090503081600081518110613ca157613ca06153e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d6c9190615428565b81600181518110613d8057613d7f6153e4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e1e959493929190615513565b600060405180830381600087803b158015613e3857600080fd5b505af1158015613e4c573d6000803e3d6000fd5b5050505060004790506000613e81613e70600260135461448090919063ffffffff16565b60175461396b90919063ffffffff16565b90506000613ebf6002613eb184613ea36013548861440590919063ffffffff16565b61448090919063ffffffff16565b61448090919063ffffffff16565b90506000613eea83613edc6015548761440590919063ffffffff16565b61448090919063ffffffff16565b90506000613f1382613f05858861396b90919063ffffffff16565b61396b90919063ffffffff16565b9050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613f7f57600080fd5b505af193505050508015613f91575060015b613f9a57613f9b565b5b6000613fc4600a613fb660078561440590919063ffffffff16565b61448090919063ffffffff16565b90506000613fdb828461396b90919063ffffffff16565b90506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516140299061559e565b600060405180830381858888f193505050503d8060008114614067576040519150601f19603f3d011682016040523d82523d6000602084013e61406c565b606091505b505090506000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516140bc9061559e565b600060405180830381858888f193505050503d80600081146140fa576040519150601f19603f3d011682016040523d82523d6000602084013e6140ff565b606091505b50509050600091506000905060008c111561421d57601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71988308f600080601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161419d969594939291906155b3565b60606040518083038185885af11580156141bb573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906141e09190615629565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506878d60405161421492919061520c565b60405180910390a15b505050505050505050505050506000602160006101000a81548160ff021916908315150217905550565b600080601e541415905090565b43601e81905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146142bd576017546142c1565b6018545b905060006142eb60646142dd848761440590919063ffffffff16565b61448090919063ffffffff16565b905061433f81600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1f90919063ffffffff16565b600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143df9190614546565b60405180910390a36143fa818561396b90919063ffffffff16565b925050509392505050565b600080831415614418576000905061447a565b60008284614426919061567c565b90508284826144359190615705565b14614475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161446c906157a8565b60405180910390fd5b809150505b92915050565b60006144c283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506144ca565b905092915050565b60008083118290614511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161450891906145fa565b60405180910390fd5b50600083856145209190615705565b9050809150509392505050565b6000819050919050565b6145408161452d565b82525050565b600060208201905061455b6000830184614537565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561459b578082015181840152602081019050614580565b838111156145aa576000848401525b50505050565b6000601f19601f8301169050919050565b60006145cc82614561565b6145d6818561456c565b93506145e681856020860161457d565b6145ef816145b0565b840191505092915050565b6000602082019050818103600083015261461481846145c1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061464c82614621565b9050919050565b61465c81614641565b811461466757600080fd5b50565b60008135905061467981614653565b92915050565b6146888161452d565b811461469357600080fd5b50565b6000813590506146a58161467f565b92915050565b600080604083850312156146c2576146c161461c565b5b60006146d08582860161466a565b92505060206146e185828601614696565b9150509250929050565b60008115159050919050565b614700816146eb565b82525050565b600060208201905061471b60008301846146f7565b92915050565b6000602082840312156147375761473661461c565b5b60006147458482850161466a565b91505092915050565b614757816146eb565b811461476257600080fd5b50565b6000813590506147748161474e565b92915050565b6000602082840312156147905761478f61461c565b5b600061479e84828501614765565b91505092915050565b6000806000606084860312156147c0576147bf61461c565b5b60006147ce8682870161466a565b93505060206147df8682870161466a565b92505060406147f086828701614696565b9150509250925092565b600060ff82169050919050565b614810816147fa565b82525050565b600060208201905061482b6000830184614807565b92915050565b60008060006060848603121561484a5761484961461c565b5b60006148588682870161466a565b93505060206148698682870161466a565b925050604061487a8682870161466a565b9150509250925092565b60008060006060848603121561489d5761489c61461c565b5b60006148ab86828701614765565b93505060206148bc86828701614696565b92505060406148cd86828701614765565b9150509250925092565b60006148e282614621565b9050919050565b6148f2816148d7565b81146148fd57600080fd5b50565b60008135905061490f816148e9565b92915050565b6000806040838503121561492c5761492b61461c565b5b600061493a85828601614900565b925050602061494b85828601614696565b9150509250929050565b60006020828403121561496b5761496a61461c565b5b600061497984828501614696565b91505092915050565b6000806000806080858703121561499c5761499b61461c565b5b60006149aa87828801614696565b94505060206149bb87828801614696565b93505060406149cc87828801614696565b92505060606149dd87828801614696565b91505092959194509250565b6149f281614641565b82525050565b6000602082019050614a0d60008301846149e9565b92915050565b60008060408385031215614a2a57614a2961461c565b5b6000614a388582860161466a565b9250506020614a4985828601614765565b9150509250929050565b60008060408385031215614a6a57614a6961461c565b5b6000614a7885828601614696565b9250506020614a8985828601614696565b9150509250929050565b6000819050919050565b6000614ab8614ab3614aae84614621565b614a93565b614621565b9050919050565b6000614aca82614a9d565b9050919050565b6000614adc82614abf565b9050919050565b614aec81614ad1565b82525050565b6000602082019050614b076000830184614ae3565b92915050565b60008060408385031215614b2457614b2361461c565b5b6000614b328582860161466a565b9250506020614b438582860161466a565b9150509250929050565b600060208284031215614b6357614b6261461c565b5b6000614b7184828501614900565b91505092915050565b6000614b8582614abf565b9050919050565b614b9581614b7a565b82525050565b6000602082019050614bb06000830184614b8c565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614bec60068361456c565b9150614bf782614bb6565b602082019050919050565b60006020820190508181036000830152614c1b81614bdf565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614c58600b8361456c565b9150614c6382614c22565b602082019050919050565b60006020820190508181036000830152614c8781614c4b565b9050919050565b7f4e6f207065726d697373696f6e20746f206d696e7420616e64206275726e0000600082015250565b6000614cc4601e8361456c565b9150614ccf82614c8e565b602082019050919050565b60006020820190508181036000830152614cf381614cb7565b9050919050565b7f5a65726f206e6f7420616c6c6f77656400000000000000000000000000000000600082015250565b6000614d3060108361456c565b9150614d3b82614cfa565b602082019050919050565b60006020820190508181036000830152614d5f81614d23565b9050919050565b7f4e6f7420656e6f75676820616c6c6f77616e6365000000000000000000000000600082015250565b6000614d9c60148361456c565b9150614da782614d66565b602082019050919050565b60006020820190508181036000830152614dcb81614d8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e0c8261452d565b9150614e178361452d565b925082821015614e2a57614e29614dd2565b5b828203905092915050565b6000614e408261452d565b9150614e4b8361452d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e8057614e7f614dd2565b5b828201905092915050565b7f2141204d696e74657220616e64206275726e6572000000000000000000000000600082015250565b6000614ec160148361456c565b9150614ecc82614e8b565b602082019050919050565b60006020820190508181036000830152614ef081614eb4565b9050919050565b7f4e6f207a65726f206d696e740000000000000000000000000000000000000000600082015250565b6000614f2d600c8361456c565b9150614f3882614ef7565b602082019050919050565b60006020820190508181036000830152614f5c81614f20565b9050919050565b7f4d696e74696e67206d6f7265207468616e20796f7527726520616c6c6f776564600082015250565b6000614f9960208361456c565b9150614fa482614f63565b602082019050919050565b60006020820190508181036000830152614fc881614f8c565b9050919050565b7f546f6f206d756368000000000000000000000000000000000000000000000000600082015250565b600061500560088361456c565b915061501082614fcf565b602082019050919050565b6000602082019050818103600083015261503481614ff8565b9050919050565b6000819050919050565b600061506061505b6150568461503b565b614a93565b61452d565b9050919050565b61507081615045565b82525050565b600060408201905061508b60008301856149e9565b6150986020830184615067565b9392505050565b60006040820190506150b460008301856149e9565b6150c16020830184614537565b9392505050565b7f4e6f207a65726f00000000000000000000000000000000000000000000000000600082015250565b60006150fe60078361456c565b9150615109826150c8565b602082019050919050565b6000602082019050818103600083015261512d816150f1565b9050919050565b7f4e6f7420656e6f75676820746f20676976650000000000000000000000000000600082015250565b600061516a60128361456c565b915061517582615134565b602082019050919050565b600060208201905081810360008301526151998161515d565b9050919050565b7f4e6f7420656e6f75676800000000000000000000000000000000000000000000600082015250565b60006151d6600a8361456c565b91506151e1826151a0565b602082019050919050565b60006020820190508181036000830152615205816151c9565b9050919050565b60006040820190506152216000830185614537565b61522e6020830184614537565b9392505050565b600061524082614abf565b9050919050565b61525081615235565b82525050565b600060208201905061526b6000830184615247565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152a7601b8361456c565b91506152b282615271565b602082019050919050565b600060208201905081810360008301526152d68161529a565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b600061531360148361456c565b915061531e826152dd565b602082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b600061537f60118361456c565b915061538a82615349565b602082019050919050565b600060208201905081810360008301526153ae81615372565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061542281614653565b92915050565b60006020828403121561543e5761543d61461c565b5b600061544c84828501615413565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61548a81614641565b82525050565b600061549c8383615481565b60208301905092915050565b6000602082019050919050565b60006154c082615455565b6154ca8185615460565b93506154d583615471565b8060005b838110156155065781516154ed8882615490565b97506154f8836154a8565b9250506001810190506154d9565b5085935050505092915050565b600060a0820190506155286000830188614537565b6155356020830187615067565b818103604083015261554781866154b5565b905061555660608301856149e9565b6155636080830184614537565b9695505050505050565b600081905092915050565b50565b600061558860008361556d565b915061559382615578565b600082019050919050565b60006155a98261557b565b9150819050919050565b600060c0820190506155c860008301896149e9565b6155d56020830188614537565b6155e26040830187615067565b6155ef6060830186615067565b6155fc60808301856149e9565b61560960a0830184614537565b979650505050505050565b6000815190506156238161467f565b92915050565b6000806000606084860312156156425761564161461c565b5b600061565086828701615614565b935050602061566186828701615614565b925050604061567286828701615614565b9150509250925092565b60006156878261452d565b91506156928361452d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156156cb576156ca614dd2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006157108261452d565b915061571b8361452d565b92508261572b5761572a6156d6565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061579260218361456c565b915061579d82615736565b604082019050919050565b600060208201905081810360008301526157c181615785565b905091905056fea2646970667358221220ddfd23bd3a95ece9aa6af87ec3add7fb94129cd58cb19e93d18ae3bff208c06d64736f6c634300080a0033

Deployed Bytecode Sourcemap

14095:12973:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15812:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18053:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18897:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11504:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24933:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12585:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18315:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15254:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22109:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18495:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15176:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13079:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18229:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20982:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21302:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14936:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17371:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15042:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14779:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21794:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13623:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15711:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19257:98;;;;;;;;;;;;;:::i;:::-;;19121:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20543:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15212:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15138:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18645:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15376:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20159:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12042:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14661:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19655:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14718:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18409:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14987:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13445:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18139:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15100:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17736:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19889:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15491:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21945:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21586:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11161:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15590:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15519:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15333:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15288;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19544:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15758:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18756:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11687:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19769:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11331:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13865:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15460:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20020:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13253:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15551:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15812:52;;;;:::o;18053:80::-;18101:13;18125:5;;;;;;;;;;;;;;;;;18118:12;;18053:80;:::o;18897:216::-;18972:4;19024:6;18989:11;:23;19001:10;18989:23;;;;;;;;;;;;;;;:32;19013:7;18989:32;;;;;;;;;;;;;;;:41;;;;19067:7;19046:37;;19055:10;19046:37;;;19076:6;19046:37;;;;;;:::i;:::-;;;;;;;;19101:4;19094:11;;18897:216;;;;:::o;11504:105::-;10484:19;10492:10;10484:7;:19::i;:::-;10476:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11596:4:::1;11577:11;:16;11589:3;11577:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;11504:105:::0;:::o;24933:98::-;10484:19;10492:10;10484:7;:19::i;:::-;10476:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25014:9:::1;25000:11;;:23;;;;;;;;;;;;;;;;;;24933:98:::0;:::o;12585:434::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;12690:11:::1;:16;12702:3;12690:16;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;12710:11;:23;12722:10;12710:23;;;;;;;;;;;;;;;;;;;;;;;;;12690:43;12682:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;12806:1;12788:15;:19;12780:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;12870:15;12848:13;:18;12862:3;12848:18;;;;;;;;;;;;;;;;:37;;12840:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12944:15;12922:13;:18;12936:3;12922:18;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;12995:15;12971:13;:20;12985:5:::0;::::1;;;;;;;;;;12971:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;12585:434:::0;;:::o;18315:88::-;18370:7;18388:12;;18381:19;;18315:88;:::o;15254:27::-;;;;:::o;22109:378::-;22209:4;22274:17;22239:11;:19;22251:6;22239:19;;;;;;;;;;;;;;;:31;22259:10;22239:31;;;;;;;;;;;;;;;;:52;22236:186;;22341:69;22377:6;22341:69;;;;;;;;;;;;;;;;;:11;:19;22353:6;22341:19;;;;;;;;;;;;;;;:31;22361:10;22341:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;22307:11;:19;22319:6;22307:19;;;;;;;;;;;;;;;:31;22327:10;22307:31;;;;;;;;;;;;;;;:103;;;;22236:186;22439:40;22453:6;22461:9;22472:6;22439:13;:40::i;:::-;22432:47;;22109:378;;;;;:::o;18495:142::-;18548:7;18575:54;18613:15;18623:4;;;;;;;;;;;18613:9;:15::i;:::-;18575:33;18592:15;18602:4;;;;;;;;;;;18592:9;:15::i;:::-;18575:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;18568:61;;18495:142;:::o;15176:29::-;;;;:::o;13079:103::-;13134:4;13169:5;;;;;;;;;;;13158:16;;:7;:16;;;13151:23;;13079:103;;;:::o;18229:80::-;18281:5;14293:2;18290:16;;18229:80;:::o;20982:312::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21158:20:::1;21134:21;;:44;;;;;;;;;;;;;;;;;;21207:18;21189:15;;:36;;;;;;;;;;;;;;;;;;21261:25;21236:22;;:50;;;;;;;;;;;;;;;;;;20982:312:::0;;;:::o;21302:276::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21459:14:::1;21434:21;;:39;;;;;;;;;;;;;;;;;;21500:16;21484:13;:32;;;;21555:15;21527:25;;:43;;;;;;;;;;;;;;;;;;21302:276:::0;;;:::o;14936:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17371:270::-;17443:6;10873:27;10889:10;10873:15;:27::i;:::-;10865:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10959:1;10945:11;:15;10937:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;11012:13;:25;11026:10;11012:25;;;;;;;;;;;;;;;;10997:11;:40;;10989:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17493:12:::1;;17480:10;;:25;;;;:::i;:::-;17470:6;:35;;17462:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;17545:6;17529:12;;:22;;;;;;;:::i;:::-;;;;;;;;17579:6;17562:9;:13;17572:2;17562:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;17622:2;17601:32;;17618:1;17601:32;;;17626:6;17601:32;;;;;;:::i;:::-;;;;;;;;17371:270:::0;;;:::o;15042:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;14779:33::-;;;;;;;;;;;;;:::o;21794:139::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21887:6:::1;21881:3;:12;21873:21;;;::::0;::::1;;21922:3;21905:14;:20;;;;21794:139:::0;:::o;13623:121::-;13683:7;13714:13;:18;13728:3;13714:18;;;;;;;;;;;;;;;;13707:25;;13623:121;;;:::o;15711:40::-;;;;;;;;;;;;;:::o;19257:98::-;19292:19;;;;;;;;;;;:33;;;19326:10;19292:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19257:98::o;19121:122::-;19176:4;19200:35;19208:7;19217:17;19200:7;:35::i;:::-;19193:42;;19121:122;;;:::o;20543:431::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20700:9:::1;20685:12;:24;;;;20733:12;20720:10;:25;;;;20771:15;20756:12;:30;;;;20814:15;20797:14;:32;;;;20861:46;20896:10;;20861:30;20878:12;;20861;;:16;;:30;;;;:::i;:::-;:34;;:46;;;;:::i;:::-;20850:8;:57;;;;20938:28;20951:14;;20938:8;;:12;;:28;;;;:::i;:::-;20918:17;:48;;;;20543:431:::0;;;;:::o;15212:33::-;;;;:::o;15138:31::-;;;;:::o;18645:105::-;18711:7;18729:9;:18;18739:7;18729:18;;;;;;;;;;;;;;;;18722:25;;18645:105;;;:::o;15376:30::-;;;;;;;;;;;;;:::o;20159:376::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20277:4:::1;20259:23;;:6;:23;;;;:41;;;;;20296:4;;;;;;;;;;;20286:14;;:6;:14;;;;20259:41;20251:50;;;::::0;::::1;;20339:6;20312:16;:24;20329:6;20312:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;20369:6;20366:162;;;20391:19;;;;;;;;;;;:28;;;20420:6;20428:1;20391:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20366:162;;;20461:19;;;;;;;;;;;:28;;;20490:6;20498:9;:17;20508:6;20498:17;;;;;;;;;;;;;;;;20461:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20366:162;20159:376:::0;;:::o;12042:481::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;12143:11:::1;:16;12155:3;12143:16;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;12163:11;:23;12175:10;12163:23;;;;;;;;;;;;;;;;;;;;;;;;;12143:43;12135:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;12269:1;12241:13;:25;12255:10;12241:25;;;;;;;;;;;;;;;;:29;12233:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;12327:1;12315:9;:13;12307:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;12389:9;12360:13;:25;12374:10;12360:25;;;;;;;;;;;;;;;;:38;;12352:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;12462:9;12433:13;:25;12447:10;12433:25;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;12505:9;12483:13;:18;12497:3;12483:18;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;12042:481:::0;;:::o;14661:50::-;;;;:::o;19655:106::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19745:8:::1;19731:10;:22;;;;19655:106:::0;:::o;14718:48::-;;;;:::o;18409:78::-;18461:7;18479:5;;;;;;;;;;;18472:12;;18409:78;:::o;14987:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;13445:109::-;13504:4;13529:11;:16;13541:3;13529:16;;;;;;;;;;;;;;;;;;;;;;;;;13522:23;;13445:109;;;:::o;18139:84::-;18189:13;18213:7;;;;;;;;;;;;;;;;;18206:14;;18139:84;:::o;15100:31::-;;;;:::o;17736:268::-;17810:6;10873:27;10889:10;10873:15;:27::i;:::-;10865:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10959:1;10945:11;:15;10937:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;11012:13;:25;11026:10;11012:25;;;;;;;;;;;;;;;;10997:11;:40;;10989:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17847:9:::1;:15;17857:4;17847:15;;;;;;;;;;;;;;;;17837:6;:25;;17829:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17904:6;17888:12;;:22;;;;;;;:::i;:::-;;;;;;;;17940:6;17921:9;:15;17931:4;17921:15;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;17985:1;17962:34;;17971:4;17962:34;;;17989:6;17962:34;;;;;;:::i;:::-;;;;;;;;17736:268:::0;;;:::o;19889:123::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19998:6:::1;19976:11;:19;19988:6;19976:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19889:123:::0;;:::o;15491:19::-;;;;;;;;;;;;;:::o;21945:156::-;22025:4;22049:44;22063:10;22075:9;22086:6;22049:13;:44::i;:::-;22042:51;;21945:156;;;;:::o;21586:200::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21702:19:::1;;;;;;;;;;;:43;;;21746:11;21759:18;21702:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21586:200:::0;;:::o;11161:94::-;10484:19;10492:10;10484:7;:19::i;:::-;10476:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11243:4:::1;11221:14;:19;11236:3;11221:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;11161:94:::0;:::o;15590:46::-;;;;;;;;;;;;;:::o;15519:25::-;;;;:::o;15333:36::-;;;;;;;;;;;;;:::o;15288:::-;;;;:::o;19544:103::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19631:8:::1;19616:12;:23;;;;19544:103:::0;:::o;15758:45::-;;;;;;;;;;;;;:::o;18756:133::-;18840:7;18858:11;:19;18870:6;18858:19;;;;;;;;;;;;;;;:28;18878:7;18858:28;;;;;;;;;;;;;;;;18851:35;;18756:133;;;;:::o;11687:293::-;10484:19;10492:10;10484:7;:19::i;:::-;10476:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11781:5:::1;11762:11;:16;11774:3;11762:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;11798:17;11818:13;:18;11832:3;11818:18;;;;;;;;;;;;;;;;11798:38;;11864:1;11852:9;:13;11848:124;;;11904:1;11883:13;:18;11897:3;11883:18;;;;;;;;;;;;;;;:22;;;;11950:9;11921:13;:25;11935:10;11921:25;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;11848:124;11750:230;11687:293:::0;:::o;19769:108::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19861:8:::1;19844:14;;:25;;;;;;;;;;;;;;;;;;19769:108:::0;:::o;11331:97::-;10484:19;10492:10;10484:7;:19::i;:::-;10476:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11415:5:::1;11393:14;:19;11408:3;11393:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;11331:97:::0;:::o;13865:173::-;10484:19;10492:10;10484:7;:19::i;:::-;10476:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13949:3:::1;13941:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;13985:4;13963:14;:19;13978:3;13963:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;14005:25;14026:3;14005:25;;;;;;:::i;:::-;;;;;;;;13865:173:::0;:::o;15460:24::-;;;;;;;;;;;;;:::o;20020:131::-;10653:24;10666:10;10653:12;:24::i;:::-;10645:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20137:6:::1;20111:15;:23;20127:6;20111:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20020:131:::0;;:::o;13253:107::-;13309:4;13333:14;:19;13348:3;13333:19;;;;;;;;;;;;;;;;;;;;;;;;;13326:26;;13253:107;;;:::o;15551:30::-;;;;;;;;;;;;;:::o;280:179::-;338:7;358:9;374:1;370;:5;;;;:::i;:::-;358:17;;399:1;394;:6;;386:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;450:1;443:8;;;280:179;;;;:::o;611:190::-;697:7;730:1;725;:6;;733:12;717:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;757:9;773:1;769;:5;;;;:::i;:::-;757:17;;792:1;785:8;;;611:190;;;;;:::o;22495:1641::-;22587:4;22617:16;;;;;;;;;;;22614:73;;;22643:41;22658:6;22666:9;22677:6;22643:14;:41::i;:::-;22636:48;;;;22614:73;22703:14;:22;22718:6;22703:22;;;;;;;;;;;;;;;;;;;;;;;;;22702:23;:53;;;;;22730:14;:25;22745:9;22730:25;;;;;;;;;;;;;;;;;;;;;;;;;22729:26;22702:53;22699:128;;;22779:11;;;;;;;;;;;22771:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22699:128;22857:12;;22847:6;:22;;:49;;;;22873:15;:23;22889:6;22873:23;;;;;;;;;;;;;;;;;;;;;;;;;22847:49;22839:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22948:4;;;;;;;;;;;22934:18;;:10;:18;;;;:39;;;;;22957:16;;;;;;;;;;;22956:17;22934:39;:64;;;;;22977:21;;;;;;;;;;;22934:64;:109;;;;;23030:13;;23002:9;:24;23020:4;23002:24;;;;;;;;;;;;;;;;:41;;22934:109;22931:128;;;23046:10;:8;:10::i;:::-;22931:128;23075:10;:8;:10::i;:::-;23074:11;:32;;;;;23102:4;;;;;;;;;;;23089:17;;:9;:17;;;23074:32;23071:117;;;23151:1;23131:9;:17;23141:6;23131:17;;;;;;;;;;;;;;;;:21;23123:30;;;;;;23168:8;:6;:8::i;:::-;23071:117;23247:53;23269:6;23247:53;;;;;;;;;;;;;;;;;:9;:17;23257:6;23247:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23227:9;:17;23237:6;23227:17;;;;;;;;;;;;;;;:73;;;;23325:15;:26;23341:9;23325:26;;;;;;;;;;;;;;;;;;;;;;;;;23324:27;:45;;;;;23355:14;;;;;;;;;;;23324:45;23321:141;;;23439:10;;23403:32;23428:6;23403:9;:20;23413:9;23403:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;23395:55;;;;;;23321:141;23474:19;23497:11;:19;23509:6;23497:19;;;;;;;;;;;;;;;;;;;;;;;;;23496:20;:47;;;;;23521:11;:22;23533:9;23521:22;;;;;;;;;;;;;;;;;;;;;;;;;23520:23;23496:47;:93;;23583:6;23496:93;;;23546:34;23554:6;23562:9;23573:6;23546:7;:34::i;:::-;23496:93;23474:115;;23623:37;23648:11;23623:9;:20;23633:9;23623:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;23600:9;:20;23610:9;23600:20;;;;;;;;;;;;;;;:60;;;;23706:16;:24;23723:6;23706:24;;;;;;;;;;;;;;;;;;;;;;;;;23702:127;;23751:19;;;;;;;;;;;:28;;;23780:6;23788:9;:17;23798:6;23788:17;;;;;;;;;;;;;;;;23751:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23747:71;;;;;;23702:127;23845:16;:27;23862:9;23845:27;;;;;;;;;;;;;;;;;;;;;;;;;23841:137;;23893:19;;;;;;;;;;;:28;;;23922:9;23933;:20;23943:9;23933:20;;;;;;;;;;;;;;;;23893:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23889:77;;;;;;23841:137;23994:19;;;;;;;;;;;:27;;;24022:14;;23994:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23990:59;;;;;;24083:9;24066:40;;24075:6;24066:40;;;24094:11;24066:40;;;;;;:::i;:::-;;;;;;;;24124:4;24117:11;;;22495:1641;;;;;;:::o;467:136::-;525:7;552:43;556:1;559;552:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;545:50;;467:136;;;;:::o;24148:330::-;24241:4;24278:53;24300:6;24278:53;;;;;;;;;;;;;;;;;:9;:17;24288:6;24278:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24258:9;:17;24268:6;24258:17;;;;;;;;;;;;;;;:73;;;;24365:32;24390:6;24365:9;:20;24375:9;24365:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;24342:9;:20;24352:9;24342:20;;;;;;;;;;;;;;;:55;;;;24430:9;24413:35;;24422:6;24413:35;;;24441:6;24413:35;;;;;;:::i;:::-;;;;;;;;24466:4;24459:11;;24148:330;;;;;:::o;25039:1960::-;15928:4;15909:16;;:23;;;;;;;;;;;;;;;;;;25101::::1;25127:9;:24;25145:4;25127:24;;;;;;;;;;;;;;;;25101:50;;25162:23;25188:54;25240:1;25188:47;25226:8;;25188:33;25208:12;;25188:15;:19;;:33;;;;:::i;:::-;:37;;:47;;;;:::i;:::-;:51;;:54;;;;:::i;:::-;25162:80;;25253:20;25276:36;25296:15;25276;:19;;:36;;;;:::i;:::-;25253:59;;25325:21;25363:1;25349:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25325:40;;25394:4;25376;25381:1;25376:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;25420:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25410:4;25415:1;25410:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;25446:6;;;;;;;;;;;:57;;;25518:12;25545:1;25561:4;25588;25608:15;25446:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25647:17;25667:21;25647:41;;25701:19;25723:33;25736:19;25753:1;25736:12;;:16;;:19;;;;:::i;:::-;25723:8;;:12;;:33;;;;:::i;:::-;25701:55;;25777:26;25806:51;25855:1;25806:44;25838:11;25806:27;25820:12;;25806:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;25777:80;;25868:27;25898:42;25928:11;25898:25;25912:10;;25898:9;:13;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;25868:72;;25951:26;25980:58;26018:19;25980:33;25994:18;25980:9;:13;;:33;;;;:::i;:::-;:37;;:58;;;;:::i;:::-;25951:87;;26055:19;;;;;;;;;;;:27;;;26090:19;26055:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;26051:73;;;;;;26144:22;26169:33;26199:2;26169:25;26192:1;26169:18;:22;;:25;;;;:::i;:::-;:29;;:33;;;;:::i;:::-;26144:58;;26213:29;26245:38;26268:14;26245:18;:22;;:38;;;;:::i;:::-;26213:70;;26305:15;26333;;;;;;;;;;;26325:29;;26362:14;26383:5;26325:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26304:89;;;26405:16;26434:22;;;;;;;;;;;26426:36;;26470:21;26498:5;26426:82;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26404:104;;;26582:5;26569:18;;26612:5;26598:19;;26651:1;26633:15;:19;26630:362;;;26668:6;;;;;;;;;;;:22;;;26698:18;26744:4;26768:15;26802:1;26822::::0;26842:21:::1;;;;;;;;;;;26882:15;26668:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26932:48;26944:18;26964:15;26932:48;;;;;;;:::i;:::-;;;;;;;;26630:362;25080:1919;;;;;;;;;;;;;15974:5:::0;15955:16;;:24;;;;;;;;;;;;;;;;;;25039:1960::o;19363:90::-;19406:4;19444:1;19430:10;;:15;;19423:22;;19363:90;:::o;19461:71::-;19512:12;19499:10;:25;;;;19461:71::o;24486:439::-;24572:7;24602:21;24634:9;24626:17;;:4;;;;;;;;;;;:17;;;:48;;24666:8;;24626:48;;;24646:17;;24626:48;24602:72;;24685:17;24705:34;24735:3;24705:25;24716:13;24705:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24685:54;;24779:39;24808:9;24779;:24;24797:4;24779:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;24752:9;:24;24770:4;24752:24;;;;;;;;;;;;;;;:66;;;;24859:4;24834:42;;24843:6;24834:42;;;24866:9;24834:42;;;;;;:::i;:::-;;;;;;;;24896:21;24907:9;24896:6;:10;;:21;;;;:::i;:::-;24889:28;;;;24486:439;;;;;:::o;809:224::-;867:7;896:1;891;:6;887:25;;;908:1;901:8;;;;887:25;922:9;938:1;934;:5;;;;:::i;:::-;922:17;;967:1;962;958;:5;;;;:::i;:::-;:10;950:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1024:1;1017:8;;;809:224;;;;;:::o;1041:132::-;1099:7;1126:39;1130:1;1133;1126:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1119:46;;1041:132;;;;:::o;1181:189::-;1267:7;1299:1;1295;:5;1302:12;1287:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1326:9;1342:1;1338;:5;;;;:::i;:::-;1326:17;;1361:1;1354:8;;;1181:189;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:116::-;4251:21;4266:5;4251:21;:::i;:::-;4244:5;4241:32;4231:60;;4287:1;4284;4277:12;4231:60;4181:116;:::o;4303:133::-;4346:5;4384:6;4371:20;4362:29;;4400:30;4424:5;4400:30;:::i;:::-;4303:133;;;;:::o;4442:323::-;4498:6;4547:2;4535:9;4526:7;4522:23;4518:32;4515:119;;;4553:79;;:::i;:::-;4515:119;4673:1;4698:50;4740:7;4731:6;4720:9;4716:22;4698:50;:::i;:::-;4688:60;;4644:114;4442:323;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:619::-;5903:6;5911;5919;5968:2;5956:9;5947:7;5943:23;5939:32;5936:119;;;5974:79;;:::i;:::-;5936:119;6094:1;6119:53;6164:7;6155:6;6144:9;6140:22;6119:53;:::i;:::-;6109:63;;6065:117;6221:2;6247:53;6292:7;6283:6;6272:9;6268:22;6247:53;:::i;:::-;6237:63;;6192:118;6349:2;6375:53;6420:7;6411:6;6400:9;6396:22;6375:53;:::i;:::-;6365:63;;6320:118;5826:619;;;;;:::o;6451:607::-;6522:6;6530;6538;6587:2;6575:9;6566:7;6562:23;6558:32;6555:119;;;6593:79;;:::i;:::-;6555:119;6713:1;6738:50;6780:7;6771:6;6760:9;6756:22;6738:50;:::i;:::-;6728:60;;6684:114;6837:2;6863:53;6908:7;6899:6;6888:9;6884:22;6863:53;:::i;:::-;6853:63;;6808:118;6965:2;6991:50;7033:7;7024:6;7013:9;7009:22;6991:50;:::i;:::-;6981:60;;6936:115;6451:607;;;;;:::o;7064:104::-;7109:7;7138:24;7156:5;7138:24;:::i;:::-;7127:35;;7064:104;;;:::o;7174:138::-;7255:32;7281:5;7255:32;:::i;:::-;7248:5;7245:43;7235:71;;7302:1;7299;7292:12;7235:71;7174:138;:::o;7318:155::-;7372:5;7410:6;7397:20;7388:29;;7426:41;7461:5;7426:41;:::i;:::-;7318:155;;;;:::o;7479:490::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:61;7816:7;7807:6;7796:9;7792:22;7763:61;:::i;:::-;7753:71;;7709:125;7873:2;7899:53;7944:7;7935:6;7924:9;7920:22;7899:53;:::i;:::-;7889:63;;7844:118;7479:490;;;;;:::o;7975:329::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:53;8279:7;8270:6;8259:9;8255:22;8234:53;:::i;:::-;8224:63;;8180:117;7975:329;;;;:::o;8310:765::-;8396:6;8404;8412;8420;8469:3;8457:9;8448:7;8444:23;8440:33;8437:120;;;8476:79;;:::i;:::-;8437:120;8596:1;8621:53;8666:7;8657:6;8646:9;8642:22;8621:53;:::i;:::-;8611:63;;8567:117;8723:2;8749:53;8794:7;8785:6;8774:9;8770:22;8749:53;:::i;:::-;8739:63;;8694:118;8851:2;8877:53;8922:7;8913:6;8902:9;8898:22;8877:53;:::i;:::-;8867:63;;8822:118;8979:2;9005:53;9050:7;9041:6;9030:9;9026:22;9005:53;:::i;:::-;8995:63;;8950:118;8310:765;;;;;;;:::o;9081:118::-;9168:24;9186:5;9168:24;:::i;:::-;9163:3;9156:37;9081:118;;:::o;9205:222::-;9298:4;9336:2;9325:9;9321:18;9313:26;;9349:71;9417:1;9406:9;9402:17;9393:6;9349:71;:::i;:::-;9205:222;;;;:::o;9433:468::-;9498:6;9506;9555:2;9543:9;9534:7;9530:23;9526:32;9523:119;;;9561:79;;:::i;:::-;9523:119;9681:1;9706:53;9751:7;9742:6;9731:9;9727:22;9706:53;:::i;:::-;9696:63;;9652:117;9808:2;9834:50;9876:7;9867:6;9856:9;9852:22;9834:50;:::i;:::-;9824:60;;9779:115;9433:468;;;;;:::o;9907:474::-;9975:6;9983;10032:2;10020:9;10011:7;10007:23;10003:32;10000:119;;;10038:79;;:::i;:::-;10000:119;10158:1;10183:53;10228:7;10219:6;10208:9;10204:22;10183:53;:::i;:::-;10173:63;;10129:117;10285:2;10311:53;10356:7;10347:6;10336:9;10332:22;10311:53;:::i;:::-;10301:63;;10256:118;9907:474;;;;;:::o;10387:60::-;10415:3;10436:5;10429:12;;10387:60;;;:::o;10453:142::-;10503:9;10536:53;10554:34;10563:24;10581:5;10563:24;:::i;:::-;10554:34;:::i;:::-;10536:53;:::i;:::-;10523:66;;10453:142;;;:::o;10601:126::-;10651:9;10684:37;10715:5;10684:37;:::i;:::-;10671:50;;10601:126;;;:::o;10733:154::-;10811:9;10844:37;10875:5;10844:37;:::i;:::-;10831:50;;10733:154;;;:::o;10893:187::-;11008:65;11067:5;11008:65;:::i;:::-;11003:3;10996:78;10893:187;;:::o;11086:278::-;11207:4;11245:2;11234:9;11230:18;11222:26;;11258:99;11354:1;11343:9;11339:17;11330:6;11258:99;:::i;:::-;11086:278;;;;:::o;11370:474::-;11438:6;11446;11495:2;11483:9;11474:7;11470:23;11466:32;11463:119;;;11501:79;;:::i;:::-;11463:119;11621:1;11646:53;11691:7;11682:6;11671:9;11667:22;11646:53;:::i;:::-;11636:63;;11592:117;11748:2;11774:53;11819:7;11810:6;11799:9;11795:22;11774:53;:::i;:::-;11764:63;;11719:118;11370:474;;;;;:::o;11850:345::-;11917:6;11966:2;11954:9;11945:7;11941:23;11937:32;11934:119;;;11972:79;;:::i;:::-;11934:119;12092:1;12117:61;12170:7;12161:6;12150:9;12146:22;12117:61;:::i;:::-;12107:71;;12063:125;11850:345;;;;:::o;12201:144::-;12269:9;12302:37;12333:5;12302:37;:::i;:::-;12289:50;;12201:144;;;:::o;12351:167::-;12456:55;12505:5;12456:55;:::i;:::-;12451:3;12444:68;12351:167;;:::o;12524:258::-;12635:4;12673:2;12662:9;12658:18;12650:26;;12686:89;12772:1;12761:9;12757:17;12748:6;12686:89;:::i;:::-;12524:258;;;;:::o;12788:156::-;12928:8;12924:1;12916:6;12912:14;12905:32;12788:156;:::o;12950:365::-;13092:3;13113:66;13177:1;13172:3;13113:66;:::i;:::-;13106:73;;13188:93;13277:3;13188:93;:::i;:::-;13306:2;13301:3;13297:12;13290:19;;12950:365;;;:::o;13321:419::-;13487:4;13525:2;13514:9;13510:18;13502:26;;13574:9;13568:4;13564:20;13560:1;13549:9;13545:17;13538:47;13602:131;13728:4;13602:131;:::i;:::-;13594:139;;13321:419;;;:::o;13746:161::-;13886:13;13882:1;13874:6;13870:14;13863:37;13746:161;:::o;13913:366::-;14055:3;14076:67;14140:2;14135:3;14076:67;:::i;:::-;14069:74;;14152:93;14241:3;14152:93;:::i;:::-;14270:2;14265:3;14261:12;14254:19;;13913:366;;;:::o;14285:419::-;14451:4;14489:2;14478:9;14474:18;14466:26;;14538:9;14532:4;14528:20;14524:1;14513:9;14509:17;14502:47;14566:131;14692:4;14566:131;:::i;:::-;14558:139;;14285:419;;;:::o;14710:180::-;14850:32;14846:1;14838:6;14834:14;14827:56;14710:180;:::o;14896:366::-;15038:3;15059:67;15123:2;15118:3;15059:67;:::i;:::-;15052:74;;15135:93;15224:3;15135:93;:::i;:::-;15253:2;15248:3;15244:12;15237:19;;14896:366;;;:::o;15268:419::-;15434:4;15472:2;15461:9;15457:18;15449:26;;15521:9;15515:4;15511:20;15507:1;15496:9;15492:17;15485:47;15549:131;15675:4;15549:131;:::i;:::-;15541:139;;15268:419;;;:::o;15693:166::-;15833:18;15829:1;15821:6;15817:14;15810:42;15693:166;:::o;15865:366::-;16007:3;16028:67;16092:2;16087:3;16028:67;:::i;:::-;16021:74;;16104:93;16193:3;16104:93;:::i;:::-;16222:2;16217:3;16213:12;16206:19;;15865:366;;;:::o;16237:419::-;16403:4;16441:2;16430:9;16426:18;16418:26;;16490:9;16484:4;16480:20;16476:1;16465:9;16461:17;16454:47;16518:131;16644:4;16518:131;:::i;:::-;16510:139;;16237:419;;;:::o;16662:170::-;16802:22;16798:1;16790:6;16786:14;16779:46;16662:170;:::o;16838:366::-;16980:3;17001:67;17065:2;17060:3;17001:67;:::i;:::-;16994:74;;17077:93;17166:3;17077:93;:::i;:::-;17195:2;17190:3;17186:12;17179:19;;16838:366;;;:::o;17210:419::-;17376:4;17414:2;17403:9;17399:18;17391:26;;17463:9;17457:4;17453:20;17449:1;17438:9;17434:17;17427:47;17491:131;17617:4;17491:131;:::i;:::-;17483:139;;17210:419;;;:::o;17635:180::-;17683:77;17680:1;17673:88;17780:4;17777:1;17770:15;17804:4;17801:1;17794:15;17821:191;17861:4;17881:20;17899:1;17881:20;:::i;:::-;17876:25;;17915:20;17933:1;17915:20;:::i;:::-;17910:25;;17954:1;17951;17948:8;17945:34;;;17959:18;;:::i;:::-;17945:34;18004:1;18001;17997:9;17989:17;;17821:191;;;;:::o;18018:305::-;18058:3;18077:20;18095:1;18077:20;:::i;:::-;18072:25;;18111:20;18129:1;18111:20;:::i;:::-;18106:25;;18265:1;18197:66;18193:74;18190:1;18187:81;18184:107;;;18271:18;;:::i;:::-;18184:107;18315:1;18312;18308:9;18301:16;;18018:305;;;;:::o;18329:170::-;18469:22;18465:1;18457:6;18453:14;18446:46;18329:170;:::o;18505:366::-;18647:3;18668:67;18732:2;18727:3;18668:67;:::i;:::-;18661:74;;18744:93;18833:3;18744:93;:::i;:::-;18862:2;18857:3;18853:12;18846:19;;18505:366;;;:::o;18877:419::-;19043:4;19081:2;19070:9;19066:18;19058:26;;19130:9;19124:4;19120:20;19116:1;19105:9;19101:17;19094:47;19158:131;19284:4;19158:131;:::i;:::-;19150:139;;18877:419;;;:::o;19302:162::-;19442:14;19438:1;19430:6;19426:14;19419:38;19302:162;:::o;19470:366::-;19612:3;19633:67;19697:2;19692:3;19633:67;:::i;:::-;19626:74;;19709:93;19798:3;19709:93;:::i;:::-;19827:2;19822:3;19818:12;19811:19;;19470:366;;;:::o;19842:419::-;20008:4;20046:2;20035:9;20031:18;20023:26;;20095:9;20089:4;20085:20;20081:1;20070:9;20066:17;20059:47;20123:131;20249:4;20123:131;:::i;:::-;20115:139;;19842:419;;;:::o;20267:182::-;20407:34;20403:1;20395:6;20391:14;20384:58;20267:182;:::o;20455:366::-;20597:3;20618:67;20682:2;20677:3;20618:67;:::i;:::-;20611:74;;20694:93;20783:3;20694:93;:::i;:::-;20812:2;20807:3;20803:12;20796:19;;20455:366;;;:::o;20827:419::-;20993:4;21031:2;21020:9;21016:18;21008:26;;21080:9;21074:4;21070:20;21066:1;21055:9;21051:17;21044:47;21108:131;21234:4;21108:131;:::i;:::-;21100:139;;20827:419;;;:::o;21252:158::-;21392:10;21388:1;21380:6;21376:14;21369:34;21252:158;:::o;21416:365::-;21558:3;21579:66;21643:1;21638:3;21579:66;:::i;:::-;21572:73;;21654:93;21743:3;21654:93;:::i;:::-;21772:2;21767:3;21763:12;21756:19;;21416:365;;;:::o;21787:419::-;21953:4;21991:2;21980:9;21976:18;21968:26;;22040:9;22034:4;22030:20;22026:1;22015:9;22011:17;22004:47;22068:131;22194:4;22068:131;:::i;:::-;22060:139;;21787:419;;;:::o;22212:85::-;22257:7;22286:5;22275:16;;22212:85;;;:::o;22303:158::-;22361:9;22394:61;22412:42;22421:32;22447:5;22421:32;:::i;:::-;22412:42;:::i;:::-;22394:61;:::i;:::-;22381:74;;22303:158;;;:::o;22467:147::-;22562:45;22601:5;22562:45;:::i;:::-;22557:3;22550:58;22467:147;;:::o;22620:348::-;22749:4;22787:2;22776:9;22772:18;22764:26;;22800:71;22868:1;22857:9;22853:17;22844:6;22800:71;:::i;:::-;22881:80;22957:2;22946:9;22942:18;22933:6;22881:80;:::i;:::-;22620:348;;;;;:::o;22974:332::-;23095:4;23133:2;23122:9;23118:18;23110:26;;23146:71;23214:1;23203:9;23199:17;23190:6;23146:71;:::i;:::-;23227:72;23295:2;23284:9;23280:18;23271:6;23227:72;:::i;:::-;22974:332;;;;;:::o;23312:157::-;23452:9;23448:1;23440:6;23436:14;23429:33;23312:157;:::o;23475:365::-;23617:3;23638:66;23702:1;23697:3;23638:66;:::i;:::-;23631:73;;23713:93;23802:3;23713:93;:::i;:::-;23831:2;23826:3;23822:12;23815:19;;23475:365;;;:::o;23846:419::-;24012:4;24050:2;24039:9;24035:18;24027:26;;24099:9;24093:4;24089:20;24085:1;24074:9;24070:17;24063:47;24127:131;24253:4;24127:131;:::i;:::-;24119:139;;23846:419;;;:::o;24271:168::-;24411:20;24407:1;24399:6;24395:14;24388:44;24271:168;:::o;24445:366::-;24587:3;24608:67;24672:2;24667:3;24608:67;:::i;:::-;24601:74;;24684:93;24773:3;24684:93;:::i;:::-;24802:2;24797:3;24793:12;24786:19;;24445:366;;;:::o;24817:419::-;24983:4;25021:2;25010:9;25006:18;24998:26;;25070:9;25064:4;25060:20;25056:1;25045:9;25041:17;25034:47;25098:131;25224:4;25098:131;:::i;:::-;25090:139;;24817:419;;;:::o;25242:160::-;25382:12;25378:1;25370:6;25366:14;25359:36;25242:160;:::o;25408:366::-;25550:3;25571:67;25635:2;25630:3;25571:67;:::i;:::-;25564:74;;25647:93;25736:3;25647:93;:::i;:::-;25765:2;25760:3;25756:12;25749:19;;25408:366;;;:::o;25780:419::-;25946:4;25984:2;25973:9;25969:18;25961:26;;26033:9;26027:4;26023:20;26019:1;26008:9;26004:17;25997:47;26061:131;26187:4;26061:131;:::i;:::-;26053:139;;25780:419;;;:::o;26205:332::-;26326:4;26364:2;26353:9;26349:18;26341:26;;26377:71;26445:1;26434:9;26430:17;26421:6;26377:71;:::i;:::-;26458:72;26526:2;26515:9;26511:18;26502:6;26458:72;:::i;:::-;26205:332;;;;;:::o;26543:134::-;26601:9;26634:37;26665:5;26634:37;:::i;:::-;26621:50;;26543:134;;;:::o;26683:147::-;26778:45;26817:5;26778:45;:::i;:::-;26773:3;26766:58;26683:147;;:::o;26836:238::-;26937:4;26975:2;26964:9;26960:18;26952:26;;26988:79;27064:1;27053:9;27049:17;27040:6;26988:79;:::i;:::-;26836:238;;;;:::o;27080:177::-;27220:29;27216:1;27208:6;27204:14;27197:53;27080:177;:::o;27263:366::-;27405:3;27426:67;27490:2;27485:3;27426:67;:::i;:::-;27419:74;;27502:93;27591:3;27502:93;:::i;:::-;27620:2;27615:3;27611:12;27604:19;;27263:366;;;:::o;27635:419::-;27801:4;27839:2;27828:9;27824:18;27816:26;;27888:9;27882:4;27878:20;27874:1;27863:9;27859:17;27852:47;27916:131;28042:4;27916:131;:::i;:::-;27908:139;;27635:419;;;:::o;28060:170::-;28200:22;28196:1;28188:6;28184:14;28177:46;28060:170;:::o;28236:366::-;28378:3;28399:67;28463:2;28458:3;28399:67;:::i;:::-;28392:74;;28475:93;28564:3;28475:93;:::i;:::-;28593:2;28588:3;28584:12;28577:19;;28236:366;;;:::o;28608:419::-;28774:4;28812:2;28801:9;28797:18;28789:26;;28861:9;28855:4;28851:20;28847:1;28836:9;28832:17;28825:47;28889:131;29015:4;28889:131;:::i;:::-;28881:139;;28608:419;;;:::o;29033:167::-;29173:19;29169:1;29161:6;29157:14;29150:43;29033:167;:::o;29206:366::-;29348:3;29369:67;29433:2;29428:3;29369:67;:::i;:::-;29362:74;;29445:93;29534:3;29445:93;:::i;:::-;29563:2;29558:3;29554:12;29547:19;;29206:366;;;:::o;29578:419::-;29744:4;29782:2;29771:9;29767:18;29759:26;;29831:9;29825:4;29821:20;29817:1;29806:9;29802:17;29795:47;29859:131;29985:4;29859:131;:::i;:::-;29851:139;;29578:419;;;:::o;30003:180::-;30051:77;30048:1;30041:88;30148:4;30145:1;30138:15;30172:4;30169:1;30162:15;30189:180;30237:77;30234:1;30227:88;30334:4;30331:1;30324:15;30358:4;30355:1;30348:15;30375:143;30432:5;30463:6;30457:13;30448:22;;30479:33;30506:5;30479:33;:::i;:::-;30375:143;;;;:::o;30524:351::-;30594:6;30643:2;30631:9;30622:7;30618:23;30614:32;30611:119;;;30649:79;;:::i;:::-;30611:119;30769:1;30794:64;30850:7;30841:6;30830:9;30826:22;30794:64;:::i;:::-;30784:74;;30740:128;30524:351;;;;:::o;30881:114::-;30948:6;30982:5;30976:12;30966:22;;30881:114;;;:::o;31001:184::-;31100:11;31134:6;31129:3;31122:19;31174:4;31169:3;31165:14;31150:29;;31001:184;;;;:::o;31191:132::-;31258:4;31281:3;31273:11;;31311:4;31306:3;31302:14;31294:22;;31191:132;;;:::o;31329:108::-;31406:24;31424:5;31406:24;:::i;:::-;31401:3;31394:37;31329:108;;:::o;31443:179::-;31512:10;31533:46;31575:3;31567:6;31533:46;:::i;:::-;31611:4;31606:3;31602:14;31588:28;;31443:179;;;;:::o;31628:113::-;31698:4;31730;31725:3;31721:14;31713:22;;31628:113;;;:::o;31777:732::-;31896:3;31925:54;31973:5;31925:54;:::i;:::-;31995:86;32074:6;32069:3;31995:86;:::i;:::-;31988:93;;32105:56;32155:5;32105:56;:::i;:::-;32184:7;32215:1;32200:284;32225:6;32222:1;32219:13;32200:284;;;32301:6;32295:13;32328:63;32387:3;32372:13;32328:63;:::i;:::-;32321:70;;32414:60;32467:6;32414:60;:::i;:::-;32404:70;;32260:224;32247:1;32244;32240:9;32235:14;;32200:284;;;32204:14;32500:3;32493:10;;31901:608;;;31777:732;;;;:::o;32515:831::-;32778:4;32816:3;32805:9;32801:19;32793:27;;32830:71;32898:1;32887:9;32883:17;32874:6;32830:71;:::i;:::-;32911:80;32987:2;32976:9;32972:18;32963:6;32911:80;:::i;:::-;33038:9;33032:4;33028:20;33023:2;33012:9;33008:18;33001:48;33066:108;33169:4;33160:6;33066:108;:::i;:::-;33058:116;;33184:72;33252:2;33241:9;33237:18;33228:6;33184:72;:::i;:::-;33266:73;33334:3;33323:9;33319:19;33310:6;33266:73;:::i;:::-;32515:831;;;;;;;;:::o;33352:147::-;33453:11;33490:3;33475:18;;33352:147;;;;:::o;33505:114::-;;:::o;33625:398::-;33784:3;33805:83;33886:1;33881:3;33805:83;:::i;:::-;33798:90;;33897:93;33986:3;33897:93;:::i;:::-;34015:1;34010:3;34006:11;33999:18;;33625:398;;;:::o;34029:379::-;34213:3;34235:147;34378:3;34235:147;:::i;:::-;34228:154;;34399:3;34392:10;;34029:379;;;:::o;34414:807::-;34663:4;34701:3;34690:9;34686:19;34678:27;;34715:71;34783:1;34772:9;34768:17;34759:6;34715:71;:::i;:::-;34796:72;34864:2;34853:9;34849:18;34840:6;34796:72;:::i;:::-;34878:80;34954:2;34943:9;34939:18;34930:6;34878:80;:::i;:::-;34968;35044:2;35033:9;35029:18;35020:6;34968:80;:::i;:::-;35058:73;35126:3;35115:9;35111:19;35102:6;35058:73;:::i;:::-;35141;35209:3;35198:9;35194:19;35185:6;35141:73;:::i;:::-;34414:807;;;;;;;;;:::o;35227:143::-;35284:5;35315:6;35309:13;35300:22;;35331:33;35358:5;35331:33;:::i;:::-;35227:143;;;;:::o;35376:663::-;35464:6;35472;35480;35529:2;35517:9;35508:7;35504:23;35500:32;35497:119;;;35535:79;;:::i;:::-;35497:119;35655:1;35680:64;35736:7;35727:6;35716:9;35712:22;35680:64;:::i;:::-;35670:74;;35626:128;35793:2;35819:64;35875:7;35866:6;35855:9;35851:22;35819:64;:::i;:::-;35809:74;;35764:129;35932:2;35958:64;36014:7;36005:6;35994:9;35990:22;35958:64;:::i;:::-;35948:74;;35903:129;35376:663;;;;;:::o;36045:348::-;36085:7;36108:20;36126:1;36108:20;:::i;:::-;36103:25;;36142:20;36160:1;36142:20;:::i;:::-;36137:25;;36330:1;36262:66;36258:74;36255:1;36252:81;36247:1;36240:9;36233:17;36229:105;36226:131;;;36337:18;;:::i;:::-;36226:131;36385:1;36382;36378:9;36367:20;;36045:348;;;;:::o;36399:180::-;36447:77;36444:1;36437:88;36544:4;36541:1;36534:15;36568:4;36565:1;36558:15;36585:185;36625:1;36642:20;36660:1;36642:20;:::i;:::-;36637:25;;36676:20;36694:1;36676:20;:::i;:::-;36671:25;;36715:1;36705:35;;36720:18;;:::i;:::-;36705:35;36762:1;36759;36755:9;36750:14;;36585:185;;;;:::o;36776:220::-;36916:34;36912:1;36904:6;36900:14;36893:58;36985:3;36980:2;36972:6;36968:15;36961:28;36776:220;:::o;37002:366::-;37144:3;37165:67;37229:2;37224:3;37165:67;:::i;:::-;37158:74;;37241:93;37330:3;37241:93;:::i;:::-;37359:2;37354:3;37350:12;37343:19;;37002:366;;;:::o;37374:419::-;37540:4;37578:2;37567:9;37563:18;37555:26;;37627:9;37621:4;37617:20;37613:1;37602:9;37598:17;37591:47;37655:131;37781:4;37655:131;:::i;:::-;37647:139;;37374:419;;;:::o

Swarm Source

ipfs://08c9df25588df72010226f234fe2000fbe35c4685785c9c3af9833d6dd2e9ee3

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.