ETH Price: $3,108.31 (+1.52%)
Gas: 4 Gwei

Token

Authentic (ATC)
 

Overview

Max Total Supply

100,000,000 ATC

Holders

211

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 ATC

Value
$0.00
0xcdaa1e0507371aad2d7abeedaadc2c09fc30c484
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Authentic

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
shanghai EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-22
*/

/**

Website     : https://authentic-audit.com
Telegram    : https://t.me/Authenticerc

*/

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    uint256 private _lockTime;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

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

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

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

contract Authentic is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "Authentic";
    string private _symbol = "ATC";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress =
        payable(0xF796953188B6360BC704b13a339ea5ebDE6d9E55);
    address payable public DeployerWalletAddress =
        payable(0x12615C22F8c2cABE14eC34f0f1C82C491247F891);
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD;

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

    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isWalletLimitExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 25;
    uint256 public _buyDeployerFee = 0;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 25;
    uint256 public _sellDeployerFee = 0;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 10;
    uint256 public _deployerShare = 0;

    uint256 public _totalTaxIfBuying = 25;
    uint256 public _totalTaxIfSelling = 25;
    uint256 public _totalDistributionShares = 10;

    uint256 private _totalSupply    = 100000000* 10**_decimals;
    uint256 public _maxTxAmount     = 1000000 * 10**_decimals;
    uint256 public _walletMax       = 1000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 300000 * 10**_decimals;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;

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

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(uint256 amountIn, address[] path);

    event SwapTokensForETH(uint256 amountIn, address[] path);

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyDeployerFee
        );
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellDeployerFee
        );
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _deployerShare
        );

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

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

    function setMarketPairStatus(address account, bool newValue)
        public
        onlyOwner
    {
        isMarketPair[account] = newValue;
    }

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

    function AuthenticExcludedFromFee(address account, bool newValue)
        public
        onlyOwner
    {
        isExcludedFromFee[account] = newValue;
    }

    function AuthenticSetFee(
        uint256 newBuyLiquidityTax,
        uint256 newBuyMarketingTax,
        uint256 newBuyDeployerTax,

        uint256 newSellLiquidityTax,
        uint256 newSellMarketingTax,
        uint256 newSellDeployerTax
    ) external onlyOwner {
        _buyLiquidityFee = newBuyLiquidityTax;
        _buyMarketingFee = newBuyMarketingTax;
        _buyDeployerFee = newBuyDeployerTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyDeployerFee
        );

        _sellLiquidityFee = newSellLiquidityTax;
        _sellMarketingFee = newSellMarketingTax;
        _sellDeployerFee = newSellDeployerTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellDeployerFee
        );
    }

    function setDistributionSettings(
        uint256 newLiquidityShare,
        uint256 newMarketingShare,
        uint256 newDeployerShare
    ) external onlyOwner {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _deployerShare = newDeployerShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _deployerShare
        );
    }

    function AuthenticSetMax(uint256 maxTxAmount, uint256 MaxLimit) external onlyOwner {
        _maxTxAmount = maxTxAmount;
        _walletMax = MaxLimit;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
        checkWalletLimit = newValue;
    }

    function AuthenticExludeMaxWallet(address holder, bool exempt)
        external
        onlyOwner
    {
        isWalletLimitExempt[holder] = exempt;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner {
        minimumTokensBeforeSwap = newLimit;
    }

    function AuthenticMarketingWallet(address newAddress) external onlyOwner {
        marketingWalletAddress = payable(newAddress);
    }

    function AuthenticDeployerWallet(address newAddress) external onlyOwner {
        DeployerWalletAddress = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function AuthenticTransferTokenBalance(address _token, address _to, uint _value) external onlyOwner returns(bool _sent){
        if(_value == 0) {
            _value = IERC20(_token).balanceOf(address(this));
        } else {
            _sent = IERC20(_token).transfer(_to, _value);
        }
    }
    function AuthenticSwapBalance() external onlyOwner {
        uint balance = address(this).balance;
        payable(owner()).transfer(balance);
    }

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

    function transferToAddressETH(address payable recipient, uint256 amount)
        private
    {
        recipient.transfer(amount);
    }

    function changeRouterVersion(address newRouterAddress)
        public
        onlyOwner
        returns (address newPairAddress)
    {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            newRouterAddress
        );

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        if (newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

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

        if (inSwapAndLiquify) {
            return _basicTransfer(sender, recipient, amount);
        } else {
            if (!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(
                    amount <= _maxTxAmount,
                    "Transfer amount exceeds the maxTxAmount."
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >=
                minimumTokensBeforeSwap;

            if (
                overMinimumTokenBalance &&
                !inSwapAndLiquify &&
                !isMarketPair[sender] &&
                swapAndLiquifyEnabled
            ) {
                if (swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

            _balances[sender] = _balances[sender].sub(
                amount,
                "Insufficient Balance"
            );

            uint256 finalAmount = (isExcludedFromFee[sender] ||
                isExcludedFromFee[recipient])
                ? amount
                : takeFee(sender, recipient, amount);

            if (checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            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 swapAndLiquify(uint256 tAmount) private lockTheSwap {
        uint256 tokensForLP = tAmount
            .mul(_liquidityShare)
            .div(_totalDistributionShares)
            .div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(
            _liquidityShare.div(2)
        );

        uint256 amountETHLiquidity = amountReceived
            .mul(_liquidityShare)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHOwner = amountReceived.mul(_deployerShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(
            amountETHOwner
        );

        if (amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if (amountETHOwner > 0)
            transferToAddressETH(DeployerWalletAddress, amountETHOwner);

        if (amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

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

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

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = 0;

        if (isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        } else if (isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        if (feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"AuthenticDeployerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"AuthenticExcludeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"AuthenticExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"AuthenticExludeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"AuthenticMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newBuyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newBuyDeployerTax","type":"uint256"},{"internalType":"uint256","name":"newSellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newSellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newSellDeployerTax","type":"uint256"}],"name":"AuthenticSetFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"MaxLimit","type":"uint256"}],"name":"AuthenticSetMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AuthenticSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"AuthenticTransferTokenBalance","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DeployerWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDeployerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_deployerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDeployerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","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":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDeployerShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600981526020017f41757468656e7469630000000000000000000000000000000000000000000000815250600290816200004a919062000d9d565b506040518060400160405280600381526020017f41544300000000000000000000000000000000000000000000000000000000008152506003908162000091919062000d9d565b50600960045f6101000a81548160ff021916908360ff16021790555073f796953188b6360bc704b13a339ea5ebde6d9e55600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507312615c22f8c2cabe14ec34f0f1c82c491247f89160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152505f600c556019600d555f600e555f600f5560196010555f6011555f601255600a6013555f60145560196015556019601655600a60175560045f9054906101000a900460ff16600a620001de91906200100a565b6305f5e100620001ef91906200105a565b60185560045f9054906101000a900460ff16600a6200020f91906200100a565b620f42406200021f91906200105a565b60195560045f9054906101000a900460ff16600a6200023f91906200100a565b620f42406200024f91906200105a565b601a5560045f9054906101000a900460ff16600a6200026f91906200100a565b620493e06200027f91906200105a565b601b556001601d60156101000a81548160ff0219169083151502179055505f601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002de575f80fd5b505f620002f062000aa960201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000414919062001109565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004a0919062001109565b6040518363ffffffff1660e01b8152600401620004bf9291906200114a565b6020604051808303815f875af1158015620004dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000502919062001109565b601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060185460075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160085f6200063662000ab060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000709600e54620006fa600d54600c5462000ad760201b90919060201c565b62000ad760201b90919060201c565b6015819055506200073e6011546200072f601054600f5462000ad760201b90919060201c565b62000ad760201b90919060201c565b601681905550620007736014546200076460135460125462000ad760201b90919060201c565b62000ad760201b90919060201c565b601781905550600160095f6200078e62000ab060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f620008bd62000ab060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060185460065f620009ed62000aa960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000a3a62000aa960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a9a919062001186565b60405180910390a35062001259565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80828462000ae79190620011a1565b90508381101562000b2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b269062001239565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bb557607f821691505b60208210810362000bcb5762000bca62000b70565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c2f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bf2565b62000c3b868362000bf2565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c8562000c7f62000c798462000c53565b62000c5c565b62000c53565b9050919050565b5f819050919050565b62000ca08362000c65565b62000cb862000caf8262000c8c565b84845462000bfe565b825550505050565b5f90565b62000cce62000cc0565b62000cdb81848462000c95565b505050565b5b8181101562000d025762000cf65f8262000cc4565b60018101905062000ce1565b5050565b601f82111562000d515762000d1b8162000bd1565b62000d268462000be3565b8101602085101562000d36578190505b62000d4e62000d458562000be3565b83018262000ce0565b50505b505050565b5f82821c905092915050565b5f62000d735f198460080262000d56565b1980831691505092915050565b5f62000d8d838362000d62565b9150826002028217905092915050565b62000da88262000b39565b67ffffffffffffffff81111562000dc45762000dc362000b43565b5b62000dd0825462000b9d565b62000ddd82828562000d06565b5f60209050601f83116001811462000e13575f841562000dfe578287015190505b62000e0a858262000d80565b86555062000e79565b601f19841662000e238662000bd1565b5f5b8281101562000e4c5784890151825560018201915060208501945060208101905062000e25565b8683101562000e6c578489015162000e68601f89168262000d62565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000f0b5780860481111562000ee35762000ee262000e81565b5b600185161562000ef35780820291505b808102905062000f038562000eae565b945062000ec3565b94509492505050565b5f8262000f25576001905062000ff7565b8162000f34575f905062000ff7565b816001811462000f4d576002811462000f585762000f8e565b600191505062000ff7565b60ff84111562000f6d5762000f6c62000e81565b5b8360020a91508482111562000f875762000f8662000e81565b5b5062000ff7565b5060208310610133831016604e8410600b841016171562000fc85782820a90508381111562000fc25762000fc162000e81565b5b62000ff7565b62000fd7848484600162000eba565b9250905081840481111562000ff15762000ff062000e81565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620010168262000c53565b9150620010238362000ffe565b9250620010527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f14565b905092915050565b5f620010668262000c53565b9150620010738362000c53565b9250828202620010838162000c53565b915082820484148315176200109d576200109c62000e81565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010d382620010a8565b9050919050565b620010e581620010c7565b8114620010f0575f80fd5b50565b5f815190506200110381620010da565b92915050565b5f60208284031215620011215762001120620010a4565b5b5f6200113084828501620010f3565b91505092915050565b6200114481620010c7565b82525050565b5f6040820190506200115f5f83018562001139565b6200116e602083018462001139565b9392505050565b620011808162000c53565b82525050565b5f6020820190506200119b5f83018462001175565b92915050565b5f620011ad8262000c53565b9150620011ba8362000c53565b9250828201905080821115620011d557620011d462000e81565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f62001221601b83620011db565b91506200122e82620011eb565b602082019050919050565b5f6020820190508181035f830152620012528162001213565b9050919050565b608051614b79620012795f395f81816110d601526111010152614b795ff3fe608060405260043610610384575f3560e01c80638db01077116101d0578063c867d60b11610101578063e61a74531161009f578063f2fde38b1161006e578063f2fde38b14610d29578063f805263a14610d51578063f872858a14610d79578063fd05e4df14610da35761038b565b8063e61a745314610c85578063e7b1ba8e14610cad578063ebc6f53214610ce9578063f0cd1dac14610cff5761038b565b8063d158272d116100db578063d158272d14610bcb578063da00097d14610bf5578063dc44b6a014610c1f578063dd62ed3e14610c495761038b565b8063c867d60b14610b3b578063cb5f6d0514610b77578063d01edad014610ba15761038b565b8063a7e7b02b1161016e578063c49b9a8011610148578063c49b9a8014610a95578063c5d2418914610abd578063c816841b14610ae7578063c860795214610b115761038b565b8063a7e7b02b14610a09578063a9059cbb14610a31578063c2d4640e14610a6d5761038b565b8063a073d37f116101aa578063a073d37f14610951578063a08e671f1461097b578063a457c2d7146109a5578063a5d69d1f146109e15761038b565b80638db01077146108d757806395d89b41146108ff5780639630fb88146109295761038b565b80635342acb4116102b557806370a0823111610253578063844d591c11610222578063844d591c1461081f57806388790a68146108475780638b42507f146108715780638da5cb5b146108ad5761038b565b806370a08231146107655780637d1db4a5146107a1578063807c2d9c146107cb57806382eefb43146107f55761038b565b80635881f3ef1161028f5780635881f3ef146106ad57806361a23c69146106e957806363b52db4146107135780636d1d7e0f1461073d5761038b565b80635342acb41461061d578063557ed1ba1461065957806357a5802f146106835761038b565b806327c8f8351161032257806339509351116102fc57806339509351146105535780633b97084a1461058f5780633ecad271146105b75780634a74bb02146105f35761038b565b806327c8f835146104d55780632b112e49146104ff578063313ce567146105295761038b565b80631694505e1161035e5780631694505e1461041d57806318160ddd1461044757806323b872dd146104715780632563ae83146104ad5761038b565b806301b611901461038f57806306fdde03146103b7578063095ea7b3146103e15761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103b560048036038101906103b09190613bf8565b610dcd565b005b3480156103c2575f80fd5b506103cb610e73565b6040516103d89190613cc0565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613d3a565b610f03565b6040516104149190613d92565b60405180910390f35b348015610428575f80fd5b50610431610f20565b60405161043e9190613e06565b60405180910390f35b348015610452575f80fd5b5061045b610f45565b6040516104689190613e2e565b60405180910390f35b34801561047c575f80fd5b5061049760048036038101906104929190613e47565b610f4e565b6040516104a49190613d92565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce9190613ec1565b611023565b005b3480156104e0575f80fd5b506104e96110d4565b6040516104f69190613efb565b60405180910390f35b34801561050a575f80fd5b506105136110f8565b6040516105209190613e2e565b60405180910390f35b348015610534575f80fd5b5061053d61113b565b60405161054a9190613f2f565b60405180910390f35b34801561055e575f80fd5b5061057960048036038101906105749190613d3a565b611150565b6040516105869190613d92565b60405180910390f35b34801561059a575f80fd5b506105b560048036038101906105b09190613f48565b6111fe565b005b3480156105c2575f80fd5b506105dd60048036038101906105d89190613f73565b61129c565b6040516105ea9190613d92565b60405180910390f35b3480156105fe575f80fd5b506106076112b9565b6040516106149190613d92565b60405180910390f35b348015610628575f80fd5b50610643600480360381019061063e9190613f73565b6112cc565b6040516106509190613d92565b60405180910390f35b348015610664575f80fd5b5061066d6112e9565b60405161067a9190613e2e565b60405180910390f35b34801561068e575f80fd5b506106976112f0565b6040516106a49190613e2e565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190613f73565b6112f6565b6040516106e09190613efb565b60405180910390f35b3480156106f4575f80fd5b506106fd6117de565b60405161070a9190613e2e565b60405180910390f35b34801561071e575f80fd5b506107276117e4565b6040516107349190613e2e565b60405180910390f35b348015610748575f80fd5b50610763600480360381019061075e9190613f73565b6117ea565b005b348015610770575f80fd5b5061078b60048036038101906107869190613f73565b6118c2565b6040516107989190613e2e565b60405180910390f35b3480156107ac575f80fd5b506107b5611908565b6040516107c29190613e2e565b60405180910390f35b3480156107d6575f80fd5b506107df61190e565b6040516107ec9190613e2e565b60405180910390f35b348015610800575f80fd5b50610809611914565b6040516108169190613e2e565b60405180910390f35b34801561082a575f80fd5b5061084560048036038101906108409190613f9e565b61191a565b005b348015610852575f80fd5b5061085b611a06565b6040516108689190613e2e565b60405180910390f35b34801561087c575f80fd5b5061089760048036038101906108929190613f73565b611a0c565b6040516108a49190613d92565b60405180910390f35b3480156108b8575f80fd5b506108c1611a29565b6040516108ce9190613efb565b60405180910390f35b3480156108e2575f80fd5b506108fd60048036038101906108f89190613fdc565b611a50565b005b34801561090a575f80fd5b50610913611b78565b6040516109209190613cc0565b60405180910390f35b348015610934575f80fd5b5061094f600480360381019061094a9190613f9e565b611c08565b005b34801561095c575f80fd5b50610965611cf4565b6040516109729190613e2e565b60405180910390f35b348015610986575f80fd5b5061098f611cfd565b60405161099c9190613e2e565b60405180910390f35b3480156109b0575f80fd5b506109cb60048036038101906109c69190613d3a565b611d03565b6040516109d89190613d92565b60405180910390f35b3480156109ec575f80fd5b50610a076004803603810190610a029190613ec1565b611dcb565b005b348015610a14575f80fd5b50610a2f6004803603810190610a2a9190613f9e565b611e7c565b005b348015610a3c575f80fd5b50610a576004803603810190610a529190613d3a565b611f68565b604051610a649190613d92565b60405180910390f35b348015610a78575f80fd5b50610a936004803603810190610a8e9190614065565b611f86565b005b348015610aa0575f80fd5b50610abb6004803603810190610ab69190613ec1565b612065565b005b348015610ac8575f80fd5b50610ad161214d565b604051610ade9190613e2e565b60405180910390f35b348015610af2575f80fd5b50610afb612153565b604051610b089190613efb565b60405180910390f35b348015610b1c575f80fd5b50610b25612178565b604051610b329190613e2e565b60405180910390f35b348015610b46575f80fd5b50610b616004803603810190610b5c9190613f73565b61217e565b604051610b6e9190613d92565b60405180910390f35b348015610b82575f80fd5b50610b8b61219b565b604051610b989190613e2e565b60405180910390f35b348015610bac575f80fd5b50610bb56121a1565b604051610bc291906140d5565b60405180910390f35b348015610bd6575f80fd5b50610bdf6121c6565b604051610bec91906140d5565b60405180910390f35b348015610c00575f80fd5b50610c096121ec565b604051610c169190613d92565b60405180910390f35b348015610c2a575f80fd5b50610c336121ff565b604051610c409190613e2e565b60405180910390f35b348015610c54575f80fd5b50610c6f6004803603810190610c6a91906140ee565b612205565b604051610c7c9190613e2e565b60405180910390f35b348015610c90575f80fd5b50610cab6004803603810190610ca69190613f73565b612287565b005b348015610cb8575f80fd5b50610cd36004803603810190610cce9190613e47565b61235e565b604051610ce09190613d92565b60405180910390f35b348015610cf4575f80fd5b50610cfd6124fe565b005b348015610d0a575f80fd5b50610d136125e4565b604051610d209190613e2e565b60405180910390f35b348015610d34575f80fd5b50610d4f6004803603810190610d4a9190613f73565b6125ea565b005b348015610d5c575f80fd5b50610d776004803603810190610d729190613f9e565b6127a7565b005b348015610d84575f80fd5b50610d8d612893565b604051610d9a9190613d92565b60405180910390f35b348015610dae575f80fd5b50610db76128a6565b604051610dc49190613e2e565b60405180910390f35b610dd56128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890614176565b60405180910390fd5b8160198190555080601a819055505050565b606060028054610e82906141c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610eae906141c1565b8015610ef95780601f10610ed057610100808354040283529160200191610ef9565b820191905f5260205f20905b815481529060010190602001808311610edc57829003601f168201915b5050505050905090565b5f610f16610f0f6128ac565b84846128b3565b6001905092915050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601854905090565b5f610f5a848484612a76565b5061101884610f676128ac565b61101385604051806060016040528060288152602001614af76028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fca6128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b600190509392505050565b61102b6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90614176565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6111366111257f00000000000000000000000000000000000000000000000000000000000000006118c2565b60185461309b90919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f6111f461115c6128ac565b846111ef8560075f61116c6128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b6128b3565b6001905092915050565b6112066128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990614176565b60405180910390fd5b80601b8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f42905090565b60125481565b5f6112ff6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138290614176565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113fc9190614205565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611461573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114859190614205565b6040518363ffffffff1660e01b81526004016114a2929190614230565b602060405180830381865afa1580156114bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e19190614205565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361166c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115839190614205565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160c9190614205565b6040518363ffffffff1660e01b8152600401611629929190614230565b6020604051808303815f875af1158015611645573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116699190614205565b91505b81601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b60135481565b60145481565b6117f26128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590614176565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60195481565b601a5481565b60165481565b6119226128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590614176565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a586128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90614176565b60405180910390fd5b85600c8190555084600d8190555083600e81905550611b24600e54611b16600d54600c546130e490919063ffffffff16565b6130e490919063ffffffff16565b60158190555082600f819055508160108190555080601181905550611b6a601154611b5c601054600f546130e490919063ffffffff16565b6130e490919063ffffffff16565b601681905550505050505050565b606060038054611b87906141c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb3906141c1565b8015611bfe5780601f10611bd557610100808354040283529160200191611bfe565b820191905f5260205f20905b815481529060010190602001808311611be157829003601f168201915b5050505050905090565b611c106128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614176565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f601b54905090565b60175481565b5f611dc1611d0f6128ac565b84611dbc85604051806060016040528060258152602001614b1f6025913960075f611d386128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b6001905092915050565b611dd36128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690614176565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b611e846128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0790614176565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f611f7b611f746128ac565b8484612a76565b506001905092915050565b611f8e6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614176565b60405180910390fd5b82601281905550816013819055508060148190555061205a60145461204c6013546012546130e490919063ffffffff16565b6130e490919063ffffffff16565b601781905550505050565b61206d6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090614176565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121429190613d92565b60405180910390a150565b600d5481565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6009602052805f5260405f205f915054906101000a900460ff1681565b60115481565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61228f6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290614176565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6123676128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea90614176565b60405180910390fd5b5f8203612479578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124339190613efb565b602060405180830381865afa15801561244e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612472919061426b565b91506124f7565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016124b4929190614296565b6020604051808303815f875af11580156124d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f491906142d1565b90505b9392505050565b6125066128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990614176565b60405180910390fd5b5f47905061259e611a29565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156125e0573d5f803e3d5ffd5b5050565b60155481565b6125f26128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590614176565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061436c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127af6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614176565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612918906143fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690614488565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a699190613e2e565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614516565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a906145a4565b60405180910390fd5b601d60149054906101000a900460ff1615612b7a57612b73848484613141565b9050613032565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c185750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6357601954821115612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990614632565b60405180910390fd5b5b5f612c6d306118c2565b90505f601b548210159050808015612c925750601d60149054906101000a900460ff16155b8015612ce55750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cfd5750601d60159054906101000a900460ff165b15612d2757601d60169054906101000a900460ff1615612d1d57601b5491505b612d268261330b565b5b612dae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e8b575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e9f57612e9a8787876134ef565b612ea1565b845b9050601d60179054906101000a900460ff168015612f06575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3457601a54612f2982612f1b896118c2565b6130e490919063ffffffff16565b1115612f33575f80fd5b5b612f848160065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130229190613e2e565b60405180910390a3600193505050505b9392505050565b5f838311158290613080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130779190613cc0565b60405180910390fd5b505f838561308e919061467d565b9050809150509392505050565b5f6130dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613039565b905092915050565b5f8082846130f291906146b0565b905083811015613137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312e9061472d565b60405180910390fd5b8091505092915050565b5f6131c9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061325a8260065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132f89190613e2e565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055505f61336360026133556017546133476012548761370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f613379828461309b90919063ffffffff16565b9050613384816137c9565b5f4790505f6133b36133a2600260125461378090919063ffffffff16565b60175461309b90919063ffffffff16565b90505f6133f060026133e2846133d46012548861370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f61341a8361340c6014548761370990919063ffffffff16565b61378090919063ffffffff16565b90505f61344282613434858861309b90919063ffffffff16565b61309b90919063ffffffff16565b90505f81111561347957613478600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a38565b5b5f8211156134ad576134ac60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a38565b5b5f831180156134bb57505f87115b156134cb576134ca8784613a80565b5b505050505050505f601d60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135725761356b606461355d6015548661370990919063ffffffff16565b61378090919063ffffffff16565b90506135ed565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135ec576135e960646135db6016548661370990919063ffffffff16565b61378090919063ffffffff16565b90505b5b5f8111156136ec576136458160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e39190613e2e565b60405180910390a35b6136ff818461309b90919063ffffffff16565b9150509392505050565b5f808303613719575f905061377a565b5f8284613726919061474b565b905082848261373591906147b9565b14613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90614859565b60405180910390fd5b809150505b92915050565b5f6137c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b60565b905092915050565b5f600267ffffffffffffffff8111156137e5576137e4614877565b5b6040519080825280602002602001820160405280156138135781602001602082028036833780820191505090505b50905030815f8151811061382a576138296148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f29190614205565b81600181518110613906576139056148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061396c30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139ce9594939291906149c1565b5f604051808303815f87803b1580156139e5575f80fd5b505af11580156139f7573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a2c929190614a19565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613a7b573d5f803e3d5ffd5b505050565b613aac30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80613af6611a29565b426040518863ffffffff1660e01b8152600401613b1896959493929190614a47565b60606040518083038185885af1158015613b34573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b599190614aa6565b5050505050565b5f8083118290613ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9d9190613cc0565b60405180910390fd5b505f8385613bb491906147b9565b9050809150509392505050565b5f80fd5b5f819050919050565b613bd781613bc5565b8114613be1575f80fd5b50565b5f81359050613bf281613bce565b92915050565b5f8060408385031215613c0e57613c0d613bc1565b5b5f613c1b85828601613be4565b9250506020613c2c85828601613be4565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613c6d578082015181840152602081019050613c52565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c9282613c36565b613c9c8185613c40565b9350613cac818560208601613c50565b613cb581613c78565b840191505092915050565b5f6020820190508181035f830152613cd88184613c88565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d0982613ce0565b9050919050565b613d1981613cff565b8114613d23575f80fd5b50565b5f81359050613d3481613d10565b92915050565b5f8060408385031215613d5057613d4f613bc1565b5b5f613d5d85828601613d26565b9250506020613d6e85828601613be4565b9150509250929050565b5f8115159050919050565b613d8c81613d78565b82525050565b5f602082019050613da55f830184613d83565b92915050565b5f819050919050565b5f613dce613dc9613dc484613ce0565b613dab565b613ce0565b9050919050565b5f613ddf82613db4565b9050919050565b5f613df082613dd5565b9050919050565b613e0081613de6565b82525050565b5f602082019050613e195f830184613df7565b92915050565b613e2881613bc5565b82525050565b5f602082019050613e415f830184613e1f565b92915050565b5f805f60608486031215613e5e57613e5d613bc1565b5b5f613e6b86828701613d26565b9350506020613e7c86828701613d26565b9250506040613e8d86828701613be4565b9150509250925092565b613ea081613d78565b8114613eaa575f80fd5b50565b5f81359050613ebb81613e97565b92915050565b5f60208284031215613ed657613ed5613bc1565b5b5f613ee384828501613ead565b91505092915050565b613ef581613cff565b82525050565b5f602082019050613f0e5f830184613eec565b92915050565b5f60ff82169050919050565b613f2981613f14565b82525050565b5f602082019050613f425f830184613f20565b92915050565b5f60208284031215613f5d57613f5c613bc1565b5b5f613f6a84828501613be4565b91505092915050565b5f60208284031215613f8857613f87613bc1565b5b5f613f9584828501613d26565b91505092915050565b5f8060408385031215613fb457613fb3613bc1565b5b5f613fc185828601613d26565b9250506020613fd285828601613ead565b9150509250929050565b5f805f805f8060c08789031215613ff657613ff5613bc1565b5b5f61400389828a01613be4565b965050602061401489828a01613be4565b955050604061402589828a01613be4565b945050606061403689828a01613be4565b935050608061404789828a01613be4565b92505060a061405889828a01613be4565b9150509295509295509295565b5f805f6060848603121561407c5761407b613bc1565b5b5f61408986828701613be4565b935050602061409a86828701613be4565b92505060406140ab86828701613be4565b9150509250925092565b5f6140bf82613ce0565b9050919050565b6140cf816140b5565b82525050565b5f6020820190506140e85f8301846140c6565b92915050565b5f806040838503121561410457614103613bc1565b5b5f61411185828601613d26565b925050602061412285828601613d26565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614160602083613c40565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806141d857607f821691505b6020821081036141eb576141ea614194565b5b50919050565b5f815190506141ff81613d10565b92915050565b5f6020828403121561421a57614219613bc1565b5b5f614227848285016141f1565b91505092915050565b5f6040820190506142435f830185613eec565b6142506020830184613eec565b9392505050565b5f8151905061426581613bce565b92915050565b5f602082840312156142805761427f613bc1565b5b5f61428d84828501614257565b91505092915050565b5f6040820190506142a95f830185613eec565b6142b66020830184613e1f565b9392505050565b5f815190506142cb81613e97565b92915050565b5f602082840312156142e6576142e5613bc1565b5b5f6142f3848285016142bd565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614356602683613c40565b9150614361826142fc565b604082019050919050565b5f6020820190508181035f8301526143838161434a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e4602483613c40565b91506143ef8261438a565b604082019050919050565b5f6020820190508181035f830152614411816143d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614472602283613c40565b915061447d82614418565b604082019050919050565b5f6020820190508181035f83015261449f81614466565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614500602583613c40565b915061450b826144a6565b604082019050919050565b5f6020820190508181035f83015261452d816144f4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458e602383613c40565b915061459982614534565b604082019050919050565b5f6020820190508181035f8301526145bb81614582565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61461c602883613c40565b9150614627826145c2565b604082019050919050565b5f6020820190508181035f83015261464981614610565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61468782613bc5565b915061469283613bc5565b92508282039050818111156146aa576146a9614650565b5b92915050565b5f6146ba82613bc5565b91506146c583613bc5565b92508282019050808211156146dd576146dc614650565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614717601b83613c40565b9150614722826146e3565b602082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b5f61475582613bc5565b915061476083613bc5565b925082820261476e81613bc5565b9150828204841483151761478557614784614650565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6147c382613bc5565b91506147ce83613bc5565b9250826147de576147dd61478c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614843602183613c40565b915061484e826147e9565b604082019050919050565b5f6020820190508181035f83015261487081614837565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6148f46148ef6148ea846148d1565b613dab565b613bc5565b9050919050565b614904816148da565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61493c81613cff565b82525050565b5f61494d8383614933565b60208301905092915050565b5f602082019050919050565b5f61496f8261490a565b6149798185614914565b935061498483614924565b805f5b838110156149b457815161499b8882614942565b97506149a683614959565b925050600181019050614987565b5085935050505092915050565b5f60a0820190506149d45f830188613e1f565b6149e160208301876148fb565b81810360408301526149f38186614965565b9050614a026060830185613eec565b614a0f6080830184613e1f565b9695505050505050565b5f604082019050614a2c5f830185613e1f565b8181036020830152614a3e8184614965565b90509392505050565b5f60c082019050614a5a5f830189613eec565b614a676020830188613e1f565b614a7460408301876148fb565b614a8160608301866148fb565b614a8e6080830185613eec565b614a9b60a0830184613e1f565b979650505050505050565b5f805f60608486031215614abd57614abc613bc1565b5b5f614aca86828701614257565b9350506020614adb86828701614257565b9250506040614aec86828701614257565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200c4d40ab2795641d10cc42683d0d8de289602a8a74701b538a5ce7d99cfcae6964736f6c63430008140033

Deployed Bytecode

0x608060405260043610610384575f3560e01c80638db01077116101d0578063c867d60b11610101578063e61a74531161009f578063f2fde38b1161006e578063f2fde38b14610d29578063f805263a14610d51578063f872858a14610d79578063fd05e4df14610da35761038b565b8063e61a745314610c85578063e7b1ba8e14610cad578063ebc6f53214610ce9578063f0cd1dac14610cff5761038b565b8063d158272d116100db578063d158272d14610bcb578063da00097d14610bf5578063dc44b6a014610c1f578063dd62ed3e14610c495761038b565b8063c867d60b14610b3b578063cb5f6d0514610b77578063d01edad014610ba15761038b565b8063a7e7b02b1161016e578063c49b9a8011610148578063c49b9a8014610a95578063c5d2418914610abd578063c816841b14610ae7578063c860795214610b115761038b565b8063a7e7b02b14610a09578063a9059cbb14610a31578063c2d4640e14610a6d5761038b565b8063a073d37f116101aa578063a073d37f14610951578063a08e671f1461097b578063a457c2d7146109a5578063a5d69d1f146109e15761038b565b80638db01077146108d757806395d89b41146108ff5780639630fb88146109295761038b565b80635342acb4116102b557806370a0823111610253578063844d591c11610222578063844d591c1461081f57806388790a68146108475780638b42507f146108715780638da5cb5b146108ad5761038b565b806370a08231146107655780637d1db4a5146107a1578063807c2d9c146107cb57806382eefb43146107f55761038b565b80635881f3ef1161028f5780635881f3ef146106ad57806361a23c69146106e957806363b52db4146107135780636d1d7e0f1461073d5761038b565b80635342acb41461061d578063557ed1ba1461065957806357a5802f146106835761038b565b806327c8f8351161032257806339509351116102fc57806339509351146105535780633b97084a1461058f5780633ecad271146105b75780634a74bb02146105f35761038b565b806327c8f835146104d55780632b112e49146104ff578063313ce567146105295761038b565b80631694505e1161035e5780631694505e1461041d57806318160ddd1461044757806323b872dd146104715780632563ae83146104ad5761038b565b806301b611901461038f57806306fdde03146103b7578063095ea7b3146103e15761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103b560048036038101906103b09190613bf8565b610dcd565b005b3480156103c2575f80fd5b506103cb610e73565b6040516103d89190613cc0565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613d3a565b610f03565b6040516104149190613d92565b60405180910390f35b348015610428575f80fd5b50610431610f20565b60405161043e9190613e06565b60405180910390f35b348015610452575f80fd5b5061045b610f45565b6040516104689190613e2e565b60405180910390f35b34801561047c575f80fd5b5061049760048036038101906104929190613e47565b610f4e565b6040516104a49190613d92565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce9190613ec1565b611023565b005b3480156104e0575f80fd5b506104e96110d4565b6040516104f69190613efb565b60405180910390f35b34801561050a575f80fd5b506105136110f8565b6040516105209190613e2e565b60405180910390f35b348015610534575f80fd5b5061053d61113b565b60405161054a9190613f2f565b60405180910390f35b34801561055e575f80fd5b5061057960048036038101906105749190613d3a565b611150565b6040516105869190613d92565b60405180910390f35b34801561059a575f80fd5b506105b560048036038101906105b09190613f48565b6111fe565b005b3480156105c2575f80fd5b506105dd60048036038101906105d89190613f73565b61129c565b6040516105ea9190613d92565b60405180910390f35b3480156105fe575f80fd5b506106076112b9565b6040516106149190613d92565b60405180910390f35b348015610628575f80fd5b50610643600480360381019061063e9190613f73565b6112cc565b6040516106509190613d92565b60405180910390f35b348015610664575f80fd5b5061066d6112e9565b60405161067a9190613e2e565b60405180910390f35b34801561068e575f80fd5b506106976112f0565b6040516106a49190613e2e565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190613f73565b6112f6565b6040516106e09190613efb565b60405180910390f35b3480156106f4575f80fd5b506106fd6117de565b60405161070a9190613e2e565b60405180910390f35b34801561071e575f80fd5b506107276117e4565b6040516107349190613e2e565b60405180910390f35b348015610748575f80fd5b50610763600480360381019061075e9190613f73565b6117ea565b005b348015610770575f80fd5b5061078b60048036038101906107869190613f73565b6118c2565b6040516107989190613e2e565b60405180910390f35b3480156107ac575f80fd5b506107b5611908565b6040516107c29190613e2e565b60405180910390f35b3480156107d6575f80fd5b506107df61190e565b6040516107ec9190613e2e565b60405180910390f35b348015610800575f80fd5b50610809611914565b6040516108169190613e2e565b60405180910390f35b34801561082a575f80fd5b5061084560048036038101906108409190613f9e565b61191a565b005b348015610852575f80fd5b5061085b611a06565b6040516108689190613e2e565b60405180910390f35b34801561087c575f80fd5b5061089760048036038101906108929190613f73565b611a0c565b6040516108a49190613d92565b60405180910390f35b3480156108b8575f80fd5b506108c1611a29565b6040516108ce9190613efb565b60405180910390f35b3480156108e2575f80fd5b506108fd60048036038101906108f89190613fdc565b611a50565b005b34801561090a575f80fd5b50610913611b78565b6040516109209190613cc0565b60405180910390f35b348015610934575f80fd5b5061094f600480360381019061094a9190613f9e565b611c08565b005b34801561095c575f80fd5b50610965611cf4565b6040516109729190613e2e565b60405180910390f35b348015610986575f80fd5b5061098f611cfd565b60405161099c9190613e2e565b60405180910390f35b3480156109b0575f80fd5b506109cb60048036038101906109c69190613d3a565b611d03565b6040516109d89190613d92565b60405180910390f35b3480156109ec575f80fd5b50610a076004803603810190610a029190613ec1565b611dcb565b005b348015610a14575f80fd5b50610a2f6004803603810190610a2a9190613f9e565b611e7c565b005b348015610a3c575f80fd5b50610a576004803603810190610a529190613d3a565b611f68565b604051610a649190613d92565b60405180910390f35b348015610a78575f80fd5b50610a936004803603810190610a8e9190614065565b611f86565b005b348015610aa0575f80fd5b50610abb6004803603810190610ab69190613ec1565b612065565b005b348015610ac8575f80fd5b50610ad161214d565b604051610ade9190613e2e565b60405180910390f35b348015610af2575f80fd5b50610afb612153565b604051610b089190613efb565b60405180910390f35b348015610b1c575f80fd5b50610b25612178565b604051610b329190613e2e565b60405180910390f35b348015610b46575f80fd5b50610b616004803603810190610b5c9190613f73565b61217e565b604051610b6e9190613d92565b60405180910390f35b348015610b82575f80fd5b50610b8b61219b565b604051610b989190613e2e565b60405180910390f35b348015610bac575f80fd5b50610bb56121a1565b604051610bc291906140d5565b60405180910390f35b348015610bd6575f80fd5b50610bdf6121c6565b604051610bec91906140d5565b60405180910390f35b348015610c00575f80fd5b50610c096121ec565b604051610c169190613d92565b60405180910390f35b348015610c2a575f80fd5b50610c336121ff565b604051610c409190613e2e565b60405180910390f35b348015610c54575f80fd5b50610c6f6004803603810190610c6a91906140ee565b612205565b604051610c7c9190613e2e565b60405180910390f35b348015610c90575f80fd5b50610cab6004803603810190610ca69190613f73565b612287565b005b348015610cb8575f80fd5b50610cd36004803603810190610cce9190613e47565b61235e565b604051610ce09190613d92565b60405180910390f35b348015610cf4575f80fd5b50610cfd6124fe565b005b348015610d0a575f80fd5b50610d136125e4565b604051610d209190613e2e565b60405180910390f35b348015610d34575f80fd5b50610d4f6004803603810190610d4a9190613f73565b6125ea565b005b348015610d5c575f80fd5b50610d776004803603810190610d729190613f9e565b6127a7565b005b348015610d84575f80fd5b50610d8d612893565b604051610d9a9190613d92565b60405180910390f35b348015610dae575f80fd5b50610db76128a6565b604051610dc49190613e2e565b60405180910390f35b610dd56128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890614176565b60405180910390fd5b8160198190555080601a819055505050565b606060028054610e82906141c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610eae906141c1565b8015610ef95780601f10610ed057610100808354040283529160200191610ef9565b820191905f5260205f20905b815481529060010190602001808311610edc57829003601f168201915b5050505050905090565b5f610f16610f0f6128ac565b84846128b3565b6001905092915050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601854905090565b5f610f5a848484612a76565b5061101884610f676128ac565b61101385604051806060016040528060288152602001614af76028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610fca6128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b600190509392505050565b61102b6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae90614176565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b5f6111366111257f000000000000000000000000000000000000000000000000000000000000dead6118c2565b60185461309b90919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f6111f461115c6128ac565b846111ef8560075f61116c6128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b6128b3565b6001905092915050565b6112066128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990614176565b60405180910390fd5b80601b8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f42905090565b60125481565b5f6112ff6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138290614176565b60405180910390fd5b5f8290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113fc9190614205565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611461573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114859190614205565b6040518363ffffffff1660e01b81526004016114a2929190614230565b602060405180830381865afa1580156114bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e19190614205565b91505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361166c578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561155f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115839190614205565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160c9190614205565b6040518363ffffffff1660e01b8152600401611629929190614230565b6020604051808303815f875af1158015611645573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116699190614205565b91505b81601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050919050565b60135481565b60145481565b6117f26128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590614176565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60195481565b601a5481565b60165481565b6119226128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590614176565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600f5481565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a586128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90614176565b60405180910390fd5b85600c8190555084600d8190555083600e81905550611b24600e54611b16600d54600c546130e490919063ffffffff16565b6130e490919063ffffffff16565b60158190555082600f819055508160108190555080601181905550611b6a601154611b5c601054600f546130e490919063ffffffff16565b6130e490919063ffffffff16565b601681905550505050505050565b606060038054611b87906141c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb3906141c1565b8015611bfe5780601f10611bd557610100808354040283529160200191611bfe565b820191905f5260205f20905b815481529060010190602001808311611be157829003601f168201915b5050505050905090565b611c106128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614176565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f601b54905090565b60175481565b5f611dc1611d0f6128ac565b84611dbc85604051806060016040528060258152602001614b1f6025913960075f611d386128ac565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b6128b3565b6001905092915050565b611dd36128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690614176565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b611e846128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0790614176565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f611f7b611f746128ac565b8484612a76565b506001905092915050565b611f8e6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190614176565b60405180910390fd5b82601281905550816013819055508060148190555061205a60145461204c6013546012546130e490919063ffffffff16565b6130e490919063ffffffff16565b601781905550505050565b61206d6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f090614176565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516121429190613d92565b60405180910390a150565b600d5481565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6009602052805f5260405f205f915054906101000a900460ff1681565b60115481565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61228f6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290614176565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6123676128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ea90614176565b60405180910390fd5b5f8203612479578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016124339190613efb565b602060405180830381865afa15801561244e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612472919061426b565b91506124f7565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016124b4929190614296565b6020604051808303815f875af11580156124d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f491906142d1565b90505b9392505050565b6125066128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990614176565b60405180910390fd5b5f47905061259e611a29565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156125e0573d5f803e3d5ffd5b5050565b60155481565b6125f26128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267590614176565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e39061436c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127af6128ac565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614176565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600e5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612918906143fa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361298f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298690614488565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a699190613e2e565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612adc90614516565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4a906145a4565b60405180910390fd5b601d60149054906101000a900460ff1615612b7a57612b73848484613141565b9050613032565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612c185750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c6357601954821115612c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5990614632565b60405180910390fd5b5b5f612c6d306118c2565b90505f601b548210159050808015612c925750601d60149054906101000a900460ff16155b8015612ce55750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612cfd5750601d60159054906101000a900460ff165b15612d2757601d60169054906101000a900460ff1615612d1d57601b5491505b612d268261330b565b5b612dae846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612e8b575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612e9f57612e9a8787876134ef565b612ea1565b845b9050601d60179054906101000a900460ff168015612f06575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612f3457601a54612f2982612f1b896118c2565b6130e490919063ffffffff16565b1115612f33575f80fd5b5b612f848160065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130229190613e2e565b60405180910390a3600193505050505b9392505050565b5f838311158290613080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130779190613cc0565b60405180910390fd5b505f838561308e919061467d565b9050809150509392505050565b5f6130dc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613039565b905092915050565b5f8082846130f291906146b0565b905083811015613137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312e9061472d565b60405180910390fd5b8091505092915050565b5f6131c9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130399092919063ffffffff16565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061325a8260065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132f89190613e2e565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055505f61336360026133556017546133476012548761370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f613379828461309b90919063ffffffff16565b9050613384816137c9565b5f4790505f6133b36133a2600260125461378090919063ffffffff16565b60175461309b90919063ffffffff16565b90505f6133f060026133e2846133d46012548861370990919063ffffffff16565b61378090919063ffffffff16565b61378090919063ffffffff16565b90505f61341a8361340c6014548761370990919063ffffffff16565b61378090919063ffffffff16565b90505f61344282613434858861309b90919063ffffffff16565b61309b90919063ffffffff16565b90505f81111561347957613478600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613a38565b5b5f8211156134ad576134ac60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613a38565b5b5f831180156134bb57505f87115b156134cb576134ca8784613a80565b5b505050505050505f601d60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135725761356b606461355d6015548661370990919063ffffffff16565b61378090919063ffffffff16565b90506135ed565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156135ec576135e960646135db6016548661370990919063ffffffff16565b61378090919063ffffffff16565b90505b5b5f8111156136ec576136458160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546130e490919063ffffffff16565b60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136e39190613e2e565b60405180910390a35b6136ff818461309b90919063ffffffff16565b9150509392505050565b5f808303613719575f905061377a565b5f8284613726919061474b565b905082848261373591906147b9565b14613775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376c90614859565b60405180910390fd5b809150505b92915050565b5f6137c183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b60565b905092915050565b5f600267ffffffffffffffff8111156137e5576137e4614877565b5b6040519080825280602002602001820160405280156138135781602001602082028036833780820191505090505b50905030815f8151811061382a576138296148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f29190614205565b81600181518110613906576139056148a4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061396c30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016139ce9594939291906149c1565b5f604051808303815f87803b1580156139e5575f80fd5b505af11580156139f7573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613a2c929190614a19565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015613a7b573d5f803e3d5ffd5b505050565b613aac30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128b3565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80613af6611a29565b426040518863ffffffff1660e01b8152600401613b1896959493929190614a47565b60606040518083038185885af1158015613b34573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b599190614aa6565b5050505050565b5f8083118290613ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b9d9190613cc0565b60405180910390fd5b505f8385613bb491906147b9565b9050809150509392505050565b5f80fd5b5f819050919050565b613bd781613bc5565b8114613be1575f80fd5b50565b5f81359050613bf281613bce565b92915050565b5f8060408385031215613c0e57613c0d613bc1565b5b5f613c1b85828601613be4565b9250506020613c2c85828601613be4565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613c6d578082015181840152602081019050613c52565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c9282613c36565b613c9c8185613c40565b9350613cac818560208601613c50565b613cb581613c78565b840191505092915050565b5f6020820190508181035f830152613cd88184613c88565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613d0982613ce0565b9050919050565b613d1981613cff565b8114613d23575f80fd5b50565b5f81359050613d3481613d10565b92915050565b5f8060408385031215613d5057613d4f613bc1565b5b5f613d5d85828601613d26565b9250506020613d6e85828601613be4565b9150509250929050565b5f8115159050919050565b613d8c81613d78565b82525050565b5f602082019050613da55f830184613d83565b92915050565b5f819050919050565b5f613dce613dc9613dc484613ce0565b613dab565b613ce0565b9050919050565b5f613ddf82613db4565b9050919050565b5f613df082613dd5565b9050919050565b613e0081613de6565b82525050565b5f602082019050613e195f830184613df7565b92915050565b613e2881613bc5565b82525050565b5f602082019050613e415f830184613e1f565b92915050565b5f805f60608486031215613e5e57613e5d613bc1565b5b5f613e6b86828701613d26565b9350506020613e7c86828701613d26565b9250506040613e8d86828701613be4565b9150509250925092565b613ea081613d78565b8114613eaa575f80fd5b50565b5f81359050613ebb81613e97565b92915050565b5f60208284031215613ed657613ed5613bc1565b5b5f613ee384828501613ead565b91505092915050565b613ef581613cff565b82525050565b5f602082019050613f0e5f830184613eec565b92915050565b5f60ff82169050919050565b613f2981613f14565b82525050565b5f602082019050613f425f830184613f20565b92915050565b5f60208284031215613f5d57613f5c613bc1565b5b5f613f6a84828501613be4565b91505092915050565b5f60208284031215613f8857613f87613bc1565b5b5f613f9584828501613d26565b91505092915050565b5f8060408385031215613fb457613fb3613bc1565b5b5f613fc185828601613d26565b9250506020613fd285828601613ead565b9150509250929050565b5f805f805f8060c08789031215613ff657613ff5613bc1565b5b5f61400389828a01613be4565b965050602061401489828a01613be4565b955050604061402589828a01613be4565b945050606061403689828a01613be4565b935050608061404789828a01613be4565b92505060a061405889828a01613be4565b9150509295509295509295565b5f805f6060848603121561407c5761407b613bc1565b5b5f61408986828701613be4565b935050602061409a86828701613be4565b92505060406140ab86828701613be4565b9150509250925092565b5f6140bf82613ce0565b9050919050565b6140cf816140b5565b82525050565b5f6020820190506140e85f8301846140c6565b92915050565b5f806040838503121561410457614103613bc1565b5b5f61411185828601613d26565b925050602061412285828601613d26565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614160602083613c40565b915061416b8261412c565b602082019050919050565b5f6020820190508181035f83015261418d81614154565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806141d857607f821691505b6020821081036141eb576141ea614194565b5b50919050565b5f815190506141ff81613d10565b92915050565b5f6020828403121561421a57614219613bc1565b5b5f614227848285016141f1565b91505092915050565b5f6040820190506142435f830185613eec565b6142506020830184613eec565b9392505050565b5f8151905061426581613bce565b92915050565b5f602082840312156142805761427f613bc1565b5b5f61428d84828501614257565b91505092915050565b5f6040820190506142a95f830185613eec565b6142b66020830184613e1f565b9392505050565b5f815190506142cb81613e97565b92915050565b5f602082840312156142e6576142e5613bc1565b5b5f6142f3848285016142bd565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614356602683613c40565b9150614361826142fc565b604082019050919050565b5f6020820190508181035f8301526143838161434a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6143e4602483613c40565b91506143ef8261438a565b604082019050919050565b5f6020820190508181035f830152614411816143d8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614472602283613c40565b915061447d82614418565b604082019050919050565b5f6020820190508181035f83015261449f81614466565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614500602583613c40565b915061450b826144a6565b604082019050919050565b5f6020820190508181035f83015261452d816144f4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61458e602383613c40565b915061459982614534565b604082019050919050565b5f6020820190508181035f8301526145bb81614582565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61461c602883613c40565b9150614627826145c2565b604082019050919050565b5f6020820190508181035f83015261464981614610565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61468782613bc5565b915061469283613bc5565b92508282039050818111156146aa576146a9614650565b5b92915050565b5f6146ba82613bc5565b91506146c583613bc5565b92508282019050808211156146dd576146dc614650565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614717601b83613c40565b9150614722826146e3565b602082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b5f61475582613bc5565b915061476083613bc5565b925082820261476e81613bc5565b9150828204841483151761478557614784614650565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6147c382613bc5565b91506147ce83613bc5565b9250826147de576147dd61478c565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614843602183613c40565b915061484e826147e9565b604082019050919050565b5f6020820190508181035f83015261487081614837565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6148f46148ef6148ea846148d1565b613dab565b613bc5565b9050919050565b614904816148da565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61493c81613cff565b82525050565b5f61494d8383614933565b60208301905092915050565b5f602082019050919050565b5f61496f8261490a565b6149798185614914565b935061498483614924565b805f5b838110156149b457815161499b8882614942565b97506149a683614959565b925050600181019050614987565b5085935050505092915050565b5f60a0820190506149d45f830188613e1f565b6149e160208301876148fb565b81810360408301526149f38186614965565b9050614a026060830185613eec565b614a0f6080830184613e1f565b9695505050505050565b5f604082019050614a2c5f830185613e1f565b8181036020830152614a3e8184614965565b90509392505050565b5f60c082019050614a5a5f830189613eec565b614a676020830188613e1f565b614a7460408301876148fb565b614a8160608301866148fb565b614a8e6080830185613eec565b614a9b60a0830184613e1f565b979650505050505050565b5f805f60608486031215614abd57614abc613bc1565b5b5f614aca86828701614257565b9350506020614adb86828701614257565b9250506040614aec86828701614257565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200c4d40ab2795641d10cc42683d0d8de289602a8a74701b538a5ce7d99cfcae6964736f6c63430008140033

Deployed Bytecode Sourcemap

16028:16470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23587:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19710:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21258:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17724:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19987:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26738:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23755:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16492:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25247:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19896:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20414:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24045:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16879:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17835:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16711:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6734:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17191:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25531:899;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17232:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17274:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24175:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20095:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17523:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17587;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17360:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21838:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17060:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16825:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6231:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22329:812;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19801:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22159:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21130:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17405:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20722:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24640:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21998:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26531:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23149:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24461:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16974:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17772:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17103:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16767:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17147:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16378:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16263:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17882:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16932:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20222:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24319:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24777:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25088:151;;;;;;;;;;;;;:::i;:::-;;17316:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6445:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23877:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17934:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17017:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23587:160;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23696:11:::1;23681:12;:26;;;;23731:8;23718:10;:21;;;;23587:160:::0;;:::o;19710:83::-;19747:13;19780:5;19773:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19710:83;:::o;21258:193::-;21360:4;21382:39;21391:12;:10;:12::i;:::-;21405:7;21414:6;21382:8;:39::i;:::-;21439:4;21432:11;;21258:193;;;;:::o;17724:41::-;;;;;;;;;;;;;:::o;19987:100::-;20040:7;20067:12;;20060:19;;19987:100;:::o;26738:446::-;26870:4;26887:36;26897:6;26905:9;26916:6;26887:9;:36::i;:::-;;26934:220;26957:6;26978:12;:10;:12::i;:::-;27005:138;27061:6;27005:138;;;;;;;;;;;;;;;;;:11;:19;27017:6;27005:19;;;;;;;;;;;;;;;:33;27025:12;:10;:12::i;:::-;27005:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;26934:8;:220::i;:::-;27172:4;27165:11;;26738:446;;;;;:::o;23755:114::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23853:8:::1;23834:16;;:27;;;;;;;;;;;;;;;;;;23755:114:::0;:::o;16492:90::-;;;:::o;25247:128::-;25300:7;25327:40;25344:22;25354:11;25344:9;:22::i;:::-;25327:12;;:16;;:40;;;;:::i;:::-;25320:47;;25247:128;:::o;19896:83::-;19937:5;19962:9;;;;;;;;;;;19955:16;;19896:83;:::o;20414:300::-;20529:4;20551:133;20574:12;:10;:12::i;:::-;20601:7;20623:50;20662:10;20623:11;:25;20635:12;:10;:12::i;:::-;20623:25;;;;;;;;;;;;;;;:34;20649:7;20623:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20551:8;:133::i;:::-;20702:4;20695:11;;20414:300;;;;:::o;24045:122::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24151:8:::1;24125:23;:34;;;;24045:122:::0;:::o;16879:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17835:40::-;;;;;;;;;;;;;:::o;16711:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;6734:90::-;6774:7;6801:15;6794:22;;6734:90;:::o;17191:34::-;;;;:::o;25531:899::-;25639:22;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25679:35:::1;25750:16;25679:98;;25825:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25807:53;;;25883:4;25903:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25807:130;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25790:147;;25980:1;25954:28;;:14;:28;;::::0;25950:226:::1;;26068:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26050:74;;;26133:4;26140:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26050:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26033:131;;25950:226;26202:14;26188:11;;:28;;;;;;;;;;;;;;;;;;26268:16;26250:15;;:34;;;;;;;;;;;;;;;;;;26366:4;26322:19;:41;26350:11;;;;;;;;;;;26322:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;26418:4;26381:12;:34;26402:11;;;;;;;;;;;26381:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;25668:762;25531:899:::0;;;:::o;17232:35::-;;;;:::o;17274:33::-;;;;:::o;24175:136::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24292:10:::1;24259:22;;:44;;;;;;;;;;;;;;;;;;24175:136:::0;:::o;20095:119::-;20161:7;20188:9;:18;20198:7;20188:18;;;;;;;;;;;;;;;;20181:25;;20095:119;;;:::o;17523:57::-;;;;:::o;17587:::-;;;;:::o;17360:38::-;;;;:::o;21838:152::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21974:8:::1;21950:12;:21;21963:7;21950:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21838:152:::0;;:::o;17060:36::-;;;;:::o;16825:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;6231:79::-;6269:7;6296:6;;;;;;;;;;;6289:13;;6231:79;:::o;22329:812::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22635:18:::1;22616:16;:37;;;;22683:18;22664:16;:37;;;;22730:17;22712:15;:35;;;;22780:83;22837:15;;22780:38;22801:16;;22780;;:20;;:38;;;;:::i;:::-;:42;;:83;;;;:::i;:::-;22760:17;:103;;;;22896:19;22876:17;:39;;;;22946:19;22926:17;:39;;;;22995:18;22976:16;:37;;;;23047:86;23106:16;;23047:40;23069:17;;23047;;:21;;:40;;;;:::i;:::-;:44;;:86;;;;:::i;:::-;23026:18;:107;;;;22329:812:::0;;;;;;:::o;19801:87::-;19840:13;19873:7;19866:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19801:87;:::o;22159:162::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22305:8:::1;22276:17;:26;22294:7;22276:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;22159:162:::0;;:::o;21130:120::-;21192:7;21219:23;;21212:30;;21130:120;:::o;17405:44::-;;;;:::o;20722:400::-;20842:4;20864:228;20887:12;:10;:12::i;:::-;20914:7;20936:145;20993:15;20936:145;;;;;;;;;;;;;;;;;:11;:25;20948:12;:10;:12::i;:::-;20936:25;;;;;;;;;;;;;;;:34;20962:7;20936:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;20864:8;:228::i;:::-;21110:4;21103:11;;20722:400;;;;:::o;24640:125::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24749:8:::1;24721:25;;:36;;;;;;;;;;;;;;;;;;24640:125:::0;:::o;21998:153::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22137:6:::1;22111:15;:23;22127:6;22111:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21998:153:::0;;:::o;26531:199::-;26636:4;26658:42;26668:12;:10;:12::i;:::-;26682:9;26693:6;26658:9;:42::i;:::-;;26718:4;26711:11;;26531:199;;;;:::o;23149:430::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23344:17:::1;23326:15;:35;;;;23390:17;23372:15;:35;;;;23435:16;23418:14;:33;;;;23491:80;23546:14;;23491:36;23511:15;;23491;;:19;;:36;;;;:::i;:::-;:40;;:80;;;;:::i;:::-;23464:24;:107;;;;23149:430:::0;;;:::o;24461:171::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24562:8:::1;24538:21;;:32;;;;;;;;;;;;;;;;;;24586:38;24615:8;24586:38;;;;;;:::i;:::-;;;;;;;;24461:171:::0;:::o;16974:36::-;;;;:::o;17772:26::-;;;;;;;;;;;;;:::o;17103:37::-;;;;:::o;16767:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;17147:35::-;;;;:::o;16378:107::-;;;;;;;;;;;;;:::o;16263:108::-;;;;;;;;;;;;;:::o;17882:45::-;;;;;;;;;;;;;:::o;16932:35::-;;;;:::o;20222:184::-;20339:7;20371:11;:18;20383:5;20371:18;;;;;;;;;;;;;;;:27;20390:7;20371:27;;;;;;;;;;;;;;;;20364:34;;20222:184;;;;:::o;24319:134::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24434:10:::1;24402:21;;:43;;;;;;;;;;;;;;;;;;24319:134:::0;:::o;24777:305::-;24885:10;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24920:1:::1;24910:6;:11:::0;24907:168:::1;;24954:6;24947:24;;;24980:4;24947:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24938:48;;24907:168;;;25034:6;25027:23;;;25051:3;25056:6;25027:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25019:44;;24907:168;24777:305:::0;;;;;:::o;25088:151::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25150:12:::1;25165:21;25150:36;;25205:7;:5;:7::i;:::-;25197:25;;:34;25223:7;25197:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25139:100;25088:151::o:0;17316:37::-;;;;:::o;6445:281::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6568:1:::1;6548:22;;:8;:22;;::::0;6526:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6681:8;6652:38;;6673:6;::::0;::::1;;;;;;;;6652:38;;;;;;;;;;;;6710:8;6701:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6445:281:::0;:::o;23877:160::-;6368:12;:10;:12::i;:::-;6358:22;;:6;;;;;;;;;;:22;;;6350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24023:6:::1;23993:19;:27;24013:6;23993:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23877:160:::0;;:::o;17934:35::-;;;;;;;;;;;;;:::o;17017:34::-;;;;:::o;193:115::-;246:15;289:10;274:26;;193:115;:::o;21459:371::-;21603:1;21586:19;;:5;:19;;;21578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21684:1;21665:21;;:7;:21;;;21657:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21768:6;21738:11;:18;21750:5;21738:18;;;;;;;;;;;;;;;:27;21757:7;21738:27;;;;;;;;;;;;;;;:36;;;;21806:7;21790:32;;21799:5;21790:32;;;21815:6;21790:32;;;;;;:::i;:::-;;;;;;;;21459:371;;;:::o;27192:1890::-;27313:4;27356:1;27338:20;;:6;:20;;;27330:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27440:1;27419:23;;:9;:23;;;27411:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27499:16;;;;;;;;;;;27495:1580;;;27539:41;27554:6;27562:9;27573:6;27539:14;:41::i;:::-;27532:48;;;;27495:1580;27618:15;:23;27634:6;27618:23;;;;;;;;;;;;;;;;;;;;;;;;;27617:24;:55;;;;;27646:15;:26;27662:9;27646:26;;;;;;;;;;;;;;;;;;;;;;;;;27645:27;27617:55;27613:232;;;27733:12;;27723:6;:22;;27693:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;27613:232;27861:28;27892:24;27910:4;27892:9;:24::i;:::-;27861:55;;27931:28;28003:23;;27962:20;:64;;27931:95;;28065:23;:61;;;;;28110:16;;;;;;;;;;;28109:17;28065:61;:103;;;;;28148:12;:20;28161:6;28148:20;;;;;;;;;;;;;;;;;;;;;;;;;28147:21;28065:103;:145;;;;;28189:21;;;;;;;;;;;28065:145;28043:371;;;28249:25;;;;;;;;;;;28245:98;;;28320:23;;28297:46;;28245:98;28362:36;28377:20;28362:14;:36::i;:::-;28043:371;28450:102;28490:6;28450:102;;;;;;;;;;;;;;;;;:9;:17;28460:6;28450:17;;;;;;;;;;;;;;;;:21;;:102;;;;;:::i;:::-;28430:9;:17;28440:6;28430:17;;;;;;;;;;;;;;;:122;;;;28569:19;28592:17;:25;28610:6;28592:25;;;;;;;;;;;;;;;;;;;;;;;;;:74;;;;28638:17;:28;28656:9;28638:28;;;;;;;;;;;;;;;;;;;;;;;;;28592:74;28591:156;;28713:34;28721:6;28729:9;28740:6;28713:7;:34::i;:::-;28591:156;;;28687:6;28591:156;28569:178;;28768:16;;;;;;;;;;;:51;;;;;28789:19;:30;28809:9;28789:30;;;;;;;;;;;;;;;;;;;;;;;;;28788:31;28768:51;28764:134;;;28887:10;;28846:37;28871:11;28846:20;28856:9;28846;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;28838:60;;;;;;28764:134;28938:37;28963:11;28938:9;:20;28948:9;28938:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;28915:9;:20;28925:9;28915:20;;;;;;;;;;;;;;;:60;;;;29014:9;28997:40;;29006:6;28997:40;;;29025:11;28997:40;;;;;;:::i;:::-;;;;;;;;29059:4;29052:11;;;;;27192:1890;;;;;;:::o;1715:226::-;1835:7;1868:1;1863;:6;;1871:12;1855:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1895:9;1911:1;1907;:5;;;;:::i;:::-;1895:17;;1932:1;1925:8;;;1715:226;;;;;:::o;1571:136::-;1629:7;1656:43;1660:1;1663;1656:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1649:50;;1571:136;;;;:::o;1382:181::-;1440:7;1460:9;1476:1;1472;:5;;;;:::i;:::-;1460:17;;1501:1;1496;:6;;1488:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1554:1;1547:8;;;1382:181;;;;:::o;29090:401::-;29217:4;29254:90;29290:6;29254:90;;;;;;;;;;;;;;;;;:9;:17;29264:6;29254:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;29234:9;:17;29244:6;29234:17;;;;;;;;;;;;;;;:110;;;;29378:32;29403:6;29378:9;:20;29388:9;29378:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29355:9;:20;29365:9;29355:20;;;;;;;;;;;;;;;:55;;;;29443:9;29426:35;;29435:6;29426:35;;;29454:6;29426:35;;;;;;:::i;:::-;;;;;;;;29479:4;29472:11;;29090:401;;;;;:::o;29499:1177::-;18351:4;18332:16;;:23;;;;;;;;;;;;;;;;;;29571:19:::1;29593:107;29698:1;29593:86;29654:24;;29593:42;29619:15;;29593:7;:25;;:42;;;;:::i;:::-;:60;;:86;;;;:::i;:::-;:104;;:107;;;;:::i;:::-;29571:129;;29711:21;29735:24;29747:11;29735:7;:11;;:24;;;;:::i;:::-;29711:48;;29772:31;29789:13;29772:16;:31::i;:::-;29814:22;29839:21;29814:46;;29873:19;29895:76;29938:22;29958:1;29938:15;;:19;;:22;;;;:::i;:::-;29895:24;;:28;;:76;;;;:::i;:::-;29873:98;;29984:26;30013:101;30112:1;30013:80;30081:11;30013:49;30046:15;;30013:14;:32;;:49;;;;:::i;:::-;:67;;:80;;;;:::i;:::-;:98;;:101;;;;:::i;:::-;29984:130;;30125:22;30150:51;30189:11;30150:34;30169:14;;30150;:18;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;30125:76;;30212:26;30241:82;30298:14;30241:38;30260:18;30241:14;:18;;:38;;;;:::i;:::-;:42;;:82;;;;:::i;:::-;30212:111;;30361:1;30340:18;:22;30336:105;;;30377:64;30398:22;;;;;;;;;;;30422:18;30377:20;:64::i;:::-;30336:105;30475:1;30458:14;:18;30454:96;;;30491:59;30512:21;;;;;;;;;;;30535:14;30491:20;:59::i;:::-;30454:96;30588:1;30567:18;:22;:41;;;;;30607:1;30593:11;:15;30567:41;30563:105;;;30623:45;30636:11;30649:18;30623:12;:45::i;:::-;30563:105;29560:1116;;;;;;;18397:5:::0;18378:16;;:24;;;;;;;;;;;;;;;;;;29499:1177;:::o;31871:624::-;31991:7;32011:17;32031:1;32011:21;;32049:12;:20;32062:6;32049:20;;;;;;;;;;;;;;;;;;;;;;;;;32045:216;;;32098:38;32132:3;32098:29;32109:17;;32098:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;32086:50;;32045:216;;;32158:12;:23;32171:9;32158:23;;;;;;;;;;;;;;;;;;;;;;;;;32154:107;;;32210:39;32245:3;32210:30;32221:18;;32210:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;32198:51;;32154:107;32045:216;32289:1;32277:9;:13;32273:174;;;32334:39;32363:9;32334;:24;32352:4;32334:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;32307:9;:24;32325:4;32307:24;;;;;;;;;;;;;;;:66;;;;32418:4;32393:42;;32402:6;32393:42;;;32425:9;32393:42;;;;;;:::i;:::-;;;;;;;;32273:174;32466:21;32477:9;32466:6;:10;;:21;;;;:::i;:::-;32459:28;;;31871:624;;;;;:::o;1949:250::-;2007:7;2036:1;2031;:6;2027:47;;2061:1;2054:8;;;;2027:47;2086:9;2102:1;2098;:5;;;;:::i;:::-;2086:17;;2131:1;2126;2122;:5;;;;:::i;:::-;:10;2114:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2190:1;2183:8;;;1949:250;;;;;:::o;2207:132::-;2265:7;2292:39;2296:1;2299;2292:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2285:46;;2207:132;;;;:::o;30684:658::-;30810:21;30848:1;30834:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30810:40;;30879:4;30861;30866:1;30861:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30905:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30895:4;30900:1;30895:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30940:62;30957:4;30972:15;;;;;;;;;;;30990:11;30940:8;:62::i;:::-;31041:15;;;;;;;;;;;:66;;;31122:11;31148:1;31192:4;31219;31255:15;31041:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31299:35;31316:11;31329:4;31299:35;;;;;;;:::i;:::-;;;;;;;;30739:603;30684:658;:::o;25383:140::-;25489:9;:18;;:26;25508:6;25489:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25383:140;;:::o;31350:513::-;31498:62;31515:4;31530:15;;;;;;;;;;;31548:11;31498:8;:62::i;:::-;31603:15;;;;;;;;;;;:31;;;31642:9;31675:4;31695:11;31721:1;31764;31807:7;:5;:7::i;:::-;31829:15;31603:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31350:513;;:::o;2347:312::-;2467:7;2499:1;2495;:5;2502:12;2487:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2526:9;2542:1;2538;:5;;;;:::i;:::-;2526:17;;2650:1;2643:8;;;2347:312;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:116::-;5951:21;5966:5;5951:21;:::i;:::-;5944:5;5941:32;5931:60;;5987:1;5984;5977:12;5931:60;5881:116;:::o;6003:133::-;6046:5;6084:6;6071:20;6062:29;;6100:30;6124:5;6100:30;:::i;:::-;6003:133;;;;:::o;6142:323::-;6198:6;6247:2;6235:9;6226:7;6222:23;6218:32;6215:119;;;6253:79;;:::i;:::-;6215:119;6373:1;6398:50;6440:7;6431:6;6420:9;6416:22;6398:50;:::i;:::-;6388:60;;6344:114;6142:323;;;;:::o;6471:118::-;6558:24;6576:5;6558:24;:::i;:::-;6553:3;6546:37;6471:118;;:::o;6595:222::-;6688:4;6726:2;6715:9;6711:18;6703:26;;6739:71;6807:1;6796:9;6792:17;6783:6;6739:71;:::i;:::-;6595:222;;;;:::o;6823:86::-;6858:7;6898:4;6891:5;6887:16;6876:27;;6823:86;;;:::o;6915:112::-;6998:22;7014:5;6998:22;:::i;:::-;6993:3;6986:35;6915:112;;:::o;7033:214::-;7122:4;7160:2;7149:9;7145:18;7137:26;;7173:67;7237:1;7226:9;7222:17;7213:6;7173:67;:::i;:::-;7033:214;;;;:::o;7253:329::-;7312:6;7361:2;7349:9;7340:7;7336:23;7332:32;7329:119;;;7367:79;;:::i;:::-;7329:119;7487:1;7512:53;7557:7;7548:6;7537:9;7533:22;7512:53;:::i;:::-;7502:63;;7458:117;7253:329;;;;:::o;7588:::-;7647:6;7696:2;7684:9;7675:7;7671:23;7667:32;7664:119;;;7702:79;;:::i;:::-;7664:119;7822:1;7847:53;7892:7;7883:6;7872:9;7868:22;7847:53;:::i;:::-;7837:63;;7793:117;7588:329;;;;:::o;7923:468::-;7988:6;7996;8045:2;8033:9;8024:7;8020:23;8016:32;8013:119;;;8051:79;;:::i;:::-;8013:119;8171:1;8196:53;8241:7;8232:6;8221:9;8217:22;8196:53;:::i;:::-;8186:63;;8142:117;8298:2;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8269:115;7923:468;;;;;:::o;8397:1057::-;8501:6;8509;8517;8525;8533;8541;8590:3;8578:9;8569:7;8565:23;8561:33;8558:120;;;8597:79;;:::i;:::-;8558:120;8717:1;8742:53;8787:7;8778:6;8767:9;8763:22;8742:53;:::i;:::-;8732:63;;8688:117;8844:2;8870:53;8915:7;8906:6;8895:9;8891:22;8870:53;:::i;:::-;8860:63;;8815:118;8972:2;8998:53;9043:7;9034:6;9023:9;9019:22;8998:53;:::i;:::-;8988:63;;8943:118;9100:2;9126:53;9171:7;9162:6;9151:9;9147:22;9126:53;:::i;:::-;9116:63;;9071:118;9228:3;9255:53;9300:7;9291:6;9280:9;9276:22;9255:53;:::i;:::-;9245:63;;9199:119;9357:3;9384:53;9429:7;9420:6;9409:9;9405:22;9384:53;:::i;:::-;9374:63;;9328:119;8397:1057;;;;;;;;:::o;9460:619::-;9537:6;9545;9553;9602:2;9590:9;9581:7;9577:23;9573:32;9570:119;;;9608:79;;:::i;:::-;9570:119;9728:1;9753:53;9798:7;9789:6;9778:9;9774:22;9753:53;:::i;:::-;9743:63;;9699:117;9855:2;9881:53;9926:7;9917:6;9906:9;9902:22;9881:53;:::i;:::-;9871:63;;9826:118;9983:2;10009:53;10054:7;10045:6;10034:9;10030:22;10009:53;:::i;:::-;9999:63;;9954:118;9460:619;;;;;:::o;10085:104::-;10130:7;10159:24;10177:5;10159:24;:::i;:::-;10148:35;;10085:104;;;:::o;10195:142::-;10298:32;10324:5;10298:32;:::i;:::-;10293:3;10286:45;10195:142;;:::o;10343:254::-;10452:4;10490:2;10479:9;10475:18;10467:26;;10503:87;10587:1;10576:9;10572:17;10563:6;10503:87;:::i;:::-;10343:254;;;;:::o;10603:474::-;10671:6;10679;10728:2;10716:9;10707:7;10703:23;10699:32;10696:119;;;10734:79;;:::i;:::-;10696:119;10854:1;10879:53;10924:7;10915:6;10904:9;10900:22;10879:53;:::i;:::-;10869:63;;10825:117;10981:2;11007:53;11052:7;11043:6;11032:9;11028:22;11007:53;:::i;:::-;10997:63;;10952:118;10603:474;;;;;:::o;11083:182::-;11223:34;11219:1;11211:6;11207:14;11200:58;11083:182;:::o;11271:366::-;11413:3;11434:67;11498:2;11493:3;11434:67;:::i;:::-;11427:74;;11510:93;11599:3;11510:93;:::i;:::-;11628:2;11623:3;11619:12;11612:19;;11271:366;;;:::o;11643:419::-;11809:4;11847:2;11836:9;11832:18;11824:26;;11896:9;11890:4;11886:20;11882:1;11871:9;11867:17;11860:47;11924:131;12050:4;11924:131;:::i;:::-;11916:139;;11643:419;;;:::o;12068:180::-;12116:77;12113:1;12106:88;12213:4;12210:1;12203:15;12237:4;12234:1;12227:15;12254:320;12298:6;12335:1;12329:4;12325:12;12315:22;;12382:1;12376:4;12372:12;12403:18;12393:81;;12459:4;12451:6;12447:17;12437:27;;12393:81;12521:2;12513:6;12510:14;12490:18;12487:38;12484:84;;12540:18;;:::i;:::-;12484:84;12305:269;12254:320;;;:::o;12580:143::-;12637:5;12668:6;12662:13;12653:22;;12684:33;12711:5;12684:33;:::i;:::-;12580:143;;;;:::o;12729:351::-;12799:6;12848:2;12836:9;12827:7;12823:23;12819:32;12816:119;;;12854:79;;:::i;:::-;12816:119;12974:1;12999:64;13055:7;13046:6;13035:9;13031:22;12999:64;:::i;:::-;12989:74;;12945:128;12729:351;;;;:::o;13086:332::-;13207:4;13245:2;13234:9;13230:18;13222:26;;13258:71;13326:1;13315:9;13311:17;13302:6;13258:71;:::i;:::-;13339:72;13407:2;13396:9;13392:18;13383:6;13339:72;:::i;:::-;13086:332;;;;;:::o;13424:143::-;13481:5;13512:6;13506:13;13497:22;;13528:33;13555:5;13528:33;:::i;:::-;13424:143;;;;:::o;13573:351::-;13643:6;13692:2;13680:9;13671:7;13667:23;13663:32;13660:119;;;13698:79;;:::i;:::-;13660:119;13818:1;13843:64;13899:7;13890:6;13879:9;13875:22;13843:64;:::i;:::-;13833:74;;13789:128;13573:351;;;;:::o;13930:332::-;14051:4;14089:2;14078:9;14074:18;14066:26;;14102:71;14170:1;14159:9;14155:17;14146:6;14102:71;:::i;:::-;14183:72;14251:2;14240:9;14236:18;14227:6;14183:72;:::i;:::-;13930:332;;;;;:::o;14268:137::-;14322:5;14353:6;14347:13;14338:22;;14369:30;14393:5;14369:30;:::i;:::-;14268:137;;;;:::o;14411:345::-;14478:6;14527:2;14515:9;14506:7;14502:23;14498:32;14495:119;;;14533:79;;:::i;:::-;14495:119;14653:1;14678:61;14731:7;14722:6;14711:9;14707:22;14678:61;:::i;:::-;14668:71;;14624:125;14411:345;;;;:::o;14762:225::-;14902:34;14898:1;14890:6;14886:14;14879:58;14971:8;14966:2;14958:6;14954:15;14947:33;14762:225;:::o;14993:366::-;15135:3;15156:67;15220:2;15215:3;15156:67;:::i;:::-;15149:74;;15232:93;15321:3;15232:93;:::i;:::-;15350:2;15345:3;15341:12;15334:19;;14993:366;;;:::o;15365:419::-;15531:4;15569:2;15558:9;15554:18;15546:26;;15618:9;15612:4;15608:20;15604:1;15593:9;15589:17;15582:47;15646:131;15772:4;15646:131;:::i;:::-;15638:139;;15365:419;;;:::o;15790:223::-;15930:34;15926:1;15918:6;15914:14;15907:58;15999:6;15994:2;15986:6;15982:15;15975:31;15790:223;:::o;16019:366::-;16161:3;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16258:93;16347:3;16258:93;:::i;:::-;16376:2;16371:3;16367:12;16360:19;;16019:366;;;:::o;16391:419::-;16557:4;16595:2;16584:9;16580:18;16572:26;;16644:9;16638:4;16634:20;16630:1;16619:9;16615:17;16608:47;16672:131;16798:4;16672:131;:::i;:::-;16664:139;;16391:419;;;:::o;16816:221::-;16956:34;16952:1;16944:6;16940:14;16933:58;17025:4;17020:2;17012:6;17008:15;17001:29;16816:221;:::o;17043:366::-;17185:3;17206:67;17270:2;17265:3;17206:67;:::i;:::-;17199:74;;17282:93;17371:3;17282:93;:::i;:::-;17400:2;17395:3;17391:12;17384:19;;17043:366;;;:::o;17415:419::-;17581:4;17619:2;17608:9;17604:18;17596:26;;17668:9;17662:4;17658:20;17654:1;17643:9;17639:17;17632:47;17696:131;17822:4;17696:131;:::i;:::-;17688:139;;17415:419;;;:::o;17840:224::-;17980:34;17976:1;17968:6;17964:14;17957:58;18049:7;18044:2;18036:6;18032:15;18025:32;17840:224;:::o;18070:366::-;18212:3;18233:67;18297:2;18292:3;18233:67;:::i;:::-;18226:74;;18309:93;18398:3;18309:93;:::i;:::-;18427:2;18422:3;18418:12;18411:19;;18070:366;;;:::o;18442:419::-;18608:4;18646:2;18635:9;18631:18;18623:26;;18695:9;18689:4;18685:20;18681:1;18670:9;18666:17;18659:47;18723:131;18849:4;18723:131;:::i;:::-;18715:139;;18442:419;;;:::o;18867:222::-;19007:34;19003:1;18995:6;18991:14;18984:58;19076:5;19071:2;19063:6;19059:15;19052:30;18867:222;:::o;19095:366::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:419::-;19633:4;19671:2;19660:9;19656:18;19648:26;;19720:9;19714:4;19710:20;19706:1;19695:9;19691:17;19684:47;19748:131;19874:4;19748:131;:::i;:::-;19740:139;;19467:419;;;:::o;19892:227::-;20032:34;20028:1;20020:6;20016:14;20009:58;20101:10;20096:2;20088:6;20084:15;20077:35;19892:227;:::o;20125:366::-;20267:3;20288:67;20352:2;20347:3;20288:67;:::i;:::-;20281:74;;20364:93;20453:3;20364:93;:::i;:::-;20482:2;20477:3;20473:12;20466:19;;20125:366;;;:::o;20497:419::-;20663:4;20701:2;20690:9;20686:18;20678:26;;20750:9;20744:4;20740:20;20736:1;20725:9;20721:17;20714:47;20778:131;20904:4;20778:131;:::i;:::-;20770:139;;20497:419;;;:::o;20922:180::-;20970:77;20967:1;20960:88;21067:4;21064:1;21057:15;21091:4;21088:1;21081:15;21108:194;21148:4;21168:20;21186:1;21168:20;:::i;:::-;21163:25;;21202:20;21220:1;21202:20;:::i;:::-;21197:25;;21246:1;21243;21239:9;21231:17;;21270:1;21264:4;21261:11;21258:37;;;21275:18;;:::i;:::-;21258:37;21108:194;;;;:::o;21308:191::-;21348:3;21367:20;21385:1;21367:20;:::i;:::-;21362:25;;21401:20;21419:1;21401:20;:::i;:::-;21396:25;;21444:1;21441;21437:9;21430:16;;21465:3;21462:1;21459:10;21456:36;;;21472:18;;:::i;:::-;21456:36;21308:191;;;;:::o;21505:177::-;21645:29;21641:1;21633:6;21629:14;21622:53;21505:177;:::o;21688:366::-;21830:3;21851:67;21915:2;21910:3;21851:67;:::i;:::-;21844:74;;21927:93;22016:3;21927:93;:::i;:::-;22045:2;22040:3;22036:12;22029:19;;21688:366;;;:::o;22060:419::-;22226:4;22264:2;22253:9;22249:18;22241:26;;22313:9;22307:4;22303:20;22299:1;22288:9;22284:17;22277:47;22341:131;22467:4;22341:131;:::i;:::-;22333:139;;22060:419;;;:::o;22485:410::-;22525:7;22548:20;22566:1;22548:20;:::i;:::-;22543:25;;22582:20;22600:1;22582:20;:::i;:::-;22577:25;;22637:1;22634;22630:9;22659:30;22677:11;22659:30;:::i;:::-;22648:41;;22838:1;22829:7;22825:15;22822:1;22819:22;22799:1;22792:9;22772:83;22749:139;;22868:18;;:::i;:::-;22749:139;22533:362;22485:410;;;;:::o;22901:180::-;22949:77;22946:1;22939:88;23046:4;23043:1;23036:15;23070:4;23067:1;23060:15;23087:185;23127:1;23144:20;23162:1;23144:20;:::i;:::-;23139:25;;23178:20;23196:1;23178:20;:::i;:::-;23173:25;;23217:1;23207:35;;23222:18;;:::i;:::-;23207:35;23264:1;23261;23257:9;23252:14;;23087:185;;;;:::o;23278:220::-;23418:34;23414:1;23406:6;23402:14;23395:58;23487:3;23482:2;23474:6;23470:15;23463:28;23278:220;:::o;23504:366::-;23646:3;23667:67;23731:2;23726:3;23667:67;:::i;:::-;23660:74;;23743:93;23832:3;23743:93;:::i;:::-;23861:2;23856:3;23852:12;23845:19;;23504:366;;;:::o;23876:419::-;24042:4;24080:2;24069:9;24065:18;24057:26;;24129:9;24123:4;24119:20;24115:1;24104:9;24100:17;24093:47;24157:131;24283:4;24157:131;:::i;:::-;24149:139;;23876:419;;;:::o;24301:180::-;24349:77;24346:1;24339:88;24446:4;24443:1;24436:15;24470:4;24467:1;24460:15;24487:180;24535:77;24532:1;24525:88;24632:4;24629:1;24622:15;24656:4;24653:1;24646:15;24673:85;24718:7;24747:5;24736:16;;24673:85;;;:::o;24764:158::-;24822:9;24855:61;24873:42;24882:32;24908:5;24882:32;:::i;:::-;24873:42;:::i;:::-;24855:61;:::i;:::-;24842:74;;24764:158;;;:::o;24928:147::-;25023:45;25062:5;25023:45;:::i;:::-;25018:3;25011:58;24928:147;;:::o;25081:114::-;25148:6;25182:5;25176:12;25166:22;;25081:114;;;:::o;25201:184::-;25300:11;25334:6;25329:3;25322:19;25374:4;25369:3;25365:14;25350:29;;25201:184;;;;:::o;25391:132::-;25458:4;25481:3;25473:11;;25511:4;25506:3;25502:14;25494:22;;25391:132;;;:::o;25529:108::-;25606:24;25624:5;25606:24;:::i;:::-;25601:3;25594:37;25529:108;;:::o;25643:179::-;25712:10;25733:46;25775:3;25767:6;25733:46;:::i;:::-;25811:4;25806:3;25802:14;25788:28;;25643:179;;;;:::o;25828:113::-;25898:4;25930;25925:3;25921:14;25913:22;;25828:113;;;:::o;25977:732::-;26096:3;26125:54;26173:5;26125:54;:::i;:::-;26195:86;26274:6;26269:3;26195:86;:::i;:::-;26188:93;;26305:56;26355:5;26305:56;:::i;:::-;26384:7;26415:1;26400:284;26425:6;26422:1;26419:13;26400:284;;;26501:6;26495:13;26528:63;26587:3;26572:13;26528:63;:::i;:::-;26521:70;;26614:60;26667:6;26614:60;:::i;:::-;26604:70;;26460:224;26447:1;26444;26440:9;26435:14;;26400:284;;;26404:14;26700:3;26693:10;;26101:608;;;25977:732;;;;:::o;26715:831::-;26978:4;27016:3;27005:9;27001:19;26993:27;;27030:71;27098:1;27087:9;27083:17;27074:6;27030:71;:::i;:::-;27111:80;27187:2;27176:9;27172:18;27163:6;27111:80;:::i;:::-;27238:9;27232:4;27228:20;27223:2;27212:9;27208:18;27201:48;27266:108;27369:4;27360:6;27266:108;:::i;:::-;27258:116;;27384:72;27452:2;27441:9;27437:18;27428:6;27384:72;:::i;:::-;27466:73;27534:3;27523:9;27519:19;27510:6;27466:73;:::i;:::-;26715:831;;;;;;;;:::o;27552:483::-;27723:4;27761:2;27750:9;27746:18;27738:26;;27774:71;27842:1;27831:9;27827:17;27818:6;27774:71;:::i;:::-;27892:9;27886:4;27882:20;27877:2;27866:9;27862:18;27855:48;27920:108;28023:4;28014:6;27920:108;:::i;:::-;27912:116;;27552:483;;;;;:::o;28041:807::-;28290:4;28328:3;28317:9;28313:19;28305:27;;28342:71;28410:1;28399:9;28395:17;28386:6;28342:71;:::i;:::-;28423:72;28491:2;28480:9;28476:18;28467:6;28423:72;:::i;:::-;28505:80;28581:2;28570:9;28566:18;28557:6;28505:80;:::i;:::-;28595;28671:2;28660:9;28656:18;28647:6;28595:80;:::i;:::-;28685:73;28753:3;28742:9;28738:19;28729:6;28685:73;:::i;:::-;28768;28836:3;28825:9;28821:19;28812:6;28768:73;:::i;:::-;28041:807;;;;;;;;;:::o;28854:663::-;28942:6;28950;28958;29007:2;28995:9;28986:7;28982:23;28978:32;28975:119;;;29013:79;;:::i;:::-;28975:119;29133:1;29158:64;29214:7;29205:6;29194:9;29190:22;29158:64;:::i;:::-;29148:74;;29104:128;29271:2;29297:64;29353:7;29344:6;29333:9;29329:22;29297:64;:::i;:::-;29287:74;;29242:129;29410:2;29436:64;29492:7;29483:6;29472:9;29468:22;29436:64;:::i;:::-;29426:74;;29381:129;28854:663;;;;;:::o

Swarm Source

ipfs://0c4d40ab2795641d10cc42683d0d8de289602a8a74701b538a5ce7d99cfcae69
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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