ETH Price: $3,151.48 (+1.03%)
Gas: 2 Gwei

Contract

0xe15375fE7E63b57954d22ad2BB4AB9438f86BA4F
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve185381032023-11-10 0:55:59246 days ago1699577759IN
0xe15375fE...38f86BA4F
0 ETH0.0015791634.04916433
Approve185379782023-11-10 0:30:47246 days ago1699576247IN
0xe15375fE...38f86BA4F
0 ETH0.0017452437.58151234
Approve184059982023-10-22 13:00:23265 days ago1697979623IN
0xe15375fE...38f86BA4F
0 ETH0.000246679.36676463
Approve181998512023-09-23 16:57:35293 days ago1695488255IN
0xe15375fE...38f86BA4F
0 ETH0.000357367.69744806
Approve181998432023-09-23 16:55:59293 days ago1695488159IN
0xe15375fE...38f86BA4F
0 ETH0.000201916.88503791
Approve181998372023-09-23 16:54:47293 days ago1695488087IN
0xe15375fE...38f86BA4F
0 ETH0.000376878.11753288
Approve181784462023-09-20 16:58:35296 days ago1695229115IN
0xe15375fE...38f86BA4F
0 ETH0.0010211921.99580443
Approve181784392023-09-20 16:57:11296 days ago1695229031IN
0xe15375fE...38f86BA4F
0 ETH0.0009828321.16945346
Approve181784182023-09-20 16:52:59296 days ago1695228779IN
0xe15375fE...38f86BA4F
0 ETH0.0007747316.68706158
Approve181631652023-09-18 13:38:11299 days ago1695044291IN
0xe15375fE...38f86BA4F
0 ETH0.00038513.12799961
Approve181631572023-09-18 13:36:35299 days ago1695044195IN
0xe15375fE...38f86BA4F
0 ETH0.000682114.69195788
Approve181233082023-09-12 22:45:35304 days ago1694558735IN
0xe15375fE...38f86BA4F
0 ETH0.000403338.65177176
Approve179784172023-08-23 15:51:11324 days ago1692805871IN
0xe15375fE...38f86BA4F
0 ETH0.001129524.32872987
Transfer179385812023-08-18 2:03:35330 days ago1692324215IN
0xe15375fE...38f86BA4F
0 ETH0.0024598638.58362452
Transfer179385532023-08-18 1:57:59330 days ago1692323879IN
0xe15375fE...38f86BA4F
0 ETH0.0016854326.43648666
Transfer179385252023-08-18 1:52:23330 days ago1692323543IN
0xe15375fE...38f86BA4F
0 ETH0.0019052729.86786375
Transfer179384882023-08-18 1:44:59330 days ago1692323099IN
0xe15375fE...38f86BA4F
0 ETH0.0020125131.54901663
Approve179384572023-08-18 1:38:47330 days ago1692322727IN
0xe15375fE...38f86BA4F
0 ETH0.0011767825.24268715
Approve179384342023-08-18 1:34:11330 days ago1692322451IN
0xe15375fE...38f86BA4F
0 ETH0.0011955725.64557655
Approve179384192023-08-18 1:31:11330 days ago1692322271IN
0xe15375fE...38f86BA4F
0 ETH0.0013373828.68760602
Approve179383862023-08-18 1:24:35330 days ago1692321875IN
0xe15375fE...38f86BA4F
0 ETH0.0012124126.00684294
Approve179383672023-08-18 1:20:47330 days ago1692321647IN
0xe15375fE...38f86BA4F
0 ETH0.0011603924.89092814
Transfer179376462023-08-17 22:55:11330 days ago1692312911IN
0xe15375fE...38f86BA4F
0 ETH0.00767946112.04031976
Approve179375382023-08-17 22:33:35330 days ago1692311615IN
0xe15375fE...38f86BA4F
0 ETH0.00538978115.61338761
Transfer179375152023-08-17 22:28:47330 days ago1692311327IN
0xe15375fE...38f86BA4F
0 ETH0.00607491130.21203573
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
179258562023-08-16 7:18:59332 days ago1692170339
0xe15375fE...38f86BA4F
0.00037407 ETH
179258562023-08-16 7:18:59332 days ago1692170339
0xe15375fE...38f86BA4F
0.00037407 ETH
179253842023-08-16 5:43:47332 days ago1692164627
0xe15375fE...38f86BA4F
0.00037911 ETH
179253842023-08-16 5:43:47332 days ago1692164627
0xe15375fE...38f86BA4F
0.00037911 ETH
179252072023-08-16 5:08:11332 days ago1692162491
0xe15375fE...38f86BA4F
0.00039018 ETH
179252072023-08-16 5:08:11332 days ago1692162491
0xe15375fE...38f86BA4F
0.00039018 ETH
179251722023-08-16 5:01:11332 days ago1692162071
0xe15375fE...38f86BA4F
0.00042044 ETH
179251722023-08-16 5:01:11332 days ago1692162071
0xe15375fE...38f86BA4F
0.00042044 ETH
179187792023-08-15 7:33:47333 days ago1692084827
0xe15375fE...38f86BA4F
0.00049459 ETH
179187792023-08-15 7:33:47333 days ago1692084827
0xe15375fE...38f86BA4F
0.00049459 ETH
179183052023-08-15 5:57:59333 days ago1692079079
0xe15375fE...38f86BA4F
0.00057759 ETH
179183052023-08-15 5:57:59333 days ago1692079079
0xe15375fE...38f86BA4F
0.00057759 ETH
179183022023-08-15 5:57:23333 days ago1692079043
0xe15375fE...38f86BA4F
0.00068343 ETH
179183022023-08-15 5:57:23333 days ago1692079043
0xe15375fE...38f86BA4F
0.00068343 ETH
179177742023-08-15 4:11:11333 days ago1692072671
0xe15375fE...38f86BA4F
0.00055704 ETH
179177742023-08-15 4:11:11333 days ago1692072671
0xe15375fE...38f86BA4F
0.00055704 ETH
179177622023-08-15 4:08:47333 days ago1692072527
0xe15375fE...38f86BA4F
0.00058981 ETH
179177622023-08-15 4:08:47333 days ago1692072527
0xe15375fE...38f86BA4F
0.00058981 ETH
179177532023-08-15 4:06:59333 days ago1692072419
0xe15375fE...38f86BA4F
0.00059168 ETH
179177532023-08-15 4:06:59333 days ago1692072419
0xe15375fE...38f86BA4F
0.00059168 ETH
179177512023-08-15 4:06:35333 days ago1692072395
0xe15375fE...38f86BA4F
0.00071371 ETH
179177512023-08-15 4:06:35333 days ago1692072395
0xe15375fE...38f86BA4F
0.00071371 ETH
179176942023-08-15 3:55:11333 days ago1692071711
0xe15375fE...38f86BA4F
0.00096049 ETH
179176942023-08-15 3:55:11333 days ago1692071711
0xe15375fE...38f86BA4F
0.00096049 ETH
179176772023-08-15 3:51:47333 days ago1692071507
0xe15375fE...38f86BA4F
0.00102257 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RugGPT

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-28
*/

// ██████  ███████ ██    ██  ██████  ██      ██    ██ ███████ ██  ██████  ███    ██                   
// ██   ██ ██      ██    ██ ██    ██ ██      ██    ██     ██  ██ ██    ██ ████   ██                  
// ██████  █████   ██    ██ ██    ██ ██      ██    ██   ██    ██ ██    ██ ██ ██  ██                   
// ██   ██ ██       ██  ██  ██    ██ ██      ██    ██  ██     ██ ██    ██ ██  ██ ██                   
// ██   ██ ███████   ████    ██████  ███████  ██████  ███████ ██  ██████  ██   ████    

// SAFU CONTRACT BY REVOLUZION

//Revoluzion Ecosystem
//WEB: https://revoluzion.io
//DAPP: https://revoluzion.app

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

// Library

abstract contract Ownable {
    
    // DATA

    address private _owner;

    // MODIFIER

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    // CONSTRUCTOR

    constructor() {
        _transferOwnership(msg.sender);
    }

    // EVENT

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

    // FUNCTION

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

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// Interface

interface IERC20 {
    
    //EVENT 

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

    // FUNCTION

    function name() external view returns (string memory);
    
    function symbol() external view returns (string memory);
    
    function decimals() external view returns (uint8);
    
    function totalSupply() external view returns (uint256);
    
    function balanceOf(address account) external view returns (uint256);
    
    function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
}

interface IFactory {

    // FUNCTION

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

interface IRouter {

    // FUNCTION

    function WETH() external pure returns (address);
        
    function factory() external pure returns (address);

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

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

// Token

contract RugGPT is Ownable, IERC20 {

    // DATA

    string private constant NAME = "RugGPT";
    string private constant SYMBOL = "RUGGPT";

    uint8 private constant DECIMALS = 18;

    uint256 private _totalSupply;
    
    uint256 public constant FEEDENOMINATOR = 10_000;

    uint256 public buyMarketingFee = 100;
    uint256 public buyLiquidityFee = 100;
    uint256 public sellMarketingFee = 100;
    uint256 public sellLiquidityFee = 100;
    uint256 public transferMarketingFee = 0;
    uint256 public transferLiquidityFee = 0;
    uint256 public marketingFeeCollected = 0;
    uint256 public liquidityFeeCollected = 0;
    uint256 public totalFeeCollected = 0;
    uint256 public marketingFeeRedeemed = 0;
    uint256 public liquidityFeeRedeemed = 0;
    uint256 public totalFeeRedeemed = 0;
    uint256 public minSwap = 100 ether;

    bool private constant ISRUGGPT = true;

    bool public tradeEnabled = false;
    bool public isFeeActive = false;
    bool public isFeeLocked = false;
    bool public isSwapEnabled = false;
    bool public inSwap = false;

    address public immutable projectOwner;
    address public immutable liquidityReceiver;

    address public constant ZERO = address(0);
    address public constant DEAD = address(0xdead);

    address public pair;
    address public marketingReceiver;
    address public presaleAddress;
    address public presaleFactory;
    
    IRouter public router;

    // MAPPING

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isExcludeFromFees;

    // MODIFIER

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    // CONSTRUCTOR

    constructor(
        address routerAddress,
        address projectOwnerAddress,
        address marketing,
        uint256 supplyTotal
    ) Ownable () {
        require(marketing != ZERO, "Cannot set marketing receiver as zero address.");
        _mint(msg.sender, supplyTotal * 10**DECIMALS);
        projectOwner = projectOwnerAddress;

        marketingReceiver = marketing;
        liquidityReceiver = address(0);
        router = IRouter(routerAddress);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
    }

    // EVENT

    event UpdateRouter(address oldRouter, address newRouter, uint256 timestamp);

    event UpdateMinSwap(uint256 oldMinSwap, uint256 newMinSwap, uint256 timestamp);

    event UpdateFeeActive(bool oldStatus, bool newStatus, uint256 timestamp);

    event UpdateSwapEnabled(bool oldStatus, bool newStatus, uint256 timestamp);

    event RedeemLiquidity(uint256 amountToken, uint256 amountETH, uint256 liquidity, uint256 timestamp);

    event UpdateMarketingReceiver(address oldMarketingReceiver, address newMarketingReceiver, uint256 timestamp);
    
    event AutoRedeem(uint256 marketingFeeDistribution, uint256 liquidityFeeDistribution, uint256 amountToRedeem, uint256 timestamp);

    event SetPresaleAddress(address adr, uint256 timestamp);

    event SetPresaleFactory(address adr, uint256 timestamp);

    // FUNCTION

    /* General */

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradeEnabled, "Enable Trading: Trading already enabled.");
        require(!isFeeActive, "Finalize Presale: Fee already active.");
        require(!isSwapEnabled, "Finalize Presale: Swap already enabled.");
        tradeEnabled = true;
        isFeeActive = true;
        isSwapEnabled = true;
    }

    function finalizePresale() external onlyOwner {
        require(!isFeeActive, "Finalize Presale: Fee already active.");
        require(!isSwapEnabled, "Finalize Presale: Swap already enabled.");
        isFeeActive = true;
        isSwapEnabled = true;
    }

    function lockFees() external onlyOwner {
        require(!isFeeLocked, "Lock Fees: All fees were already locked.");
        isFeeLocked = true;
    }

    function redeemAllMarketingFee() external {
        uint256 amountToRedeem = marketingFeeCollected - marketingFeeRedeemed;
        
        _redeemMarketingFee(amountToRedeem);
    }

    function redeemPartialMarketingFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= marketingFeeCollected - marketingFeeRedeemed, "Redeem Partial Marketing Fee: Insufficient marketing fee collected.");
        
        _redeemMarketingFee(amountToRedeem);
    }

    function _redeemMarketingFee(uint256 amountToRedeem) internal swapping { 
        marketingFeeRedeemed += amountToRedeem;
        totalFeeRedeemed += amountToRedeem;
 
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), amountToRedeem);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToRedeem,
            0,
            path,
            marketingReceiver,
            block.timestamp
        );
    }

    function redeemAllLiquidityFee() external {
        uint256 amountToRedeem = liquidityFeeCollected - liquidityFeeRedeemed;
        
        _redeemLiquidityFee(amountToRedeem);
    }

    function redeemPartialLiquidityFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= liquidityFeeCollected - liquidityFeeRedeemed, "Redeem Partial Liquidity Fee: Insufficient liquidity fee collected.");
        
        _redeemLiquidityFee(amountToRedeem);
    }

    function _redeemLiquidityFee(uint256 amountToRedeem) internal swapping returns (uint256) {   
        require(msg.sender != liquidityReceiver, "Redeem Liquidity Fee: Liquidity receiver cannot call this function.");
        uint256 initialBalance = address(this).balance;
        uint256 firstLiquidityHalf = amountToRedeem / 2;
        uint256 secondLiquidityHalf = amountToRedeem - firstLiquidityHalf;

        liquidityFeeRedeemed += amountToRedeem;
        totalFeeRedeemed += amountToRedeem;

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

        _approve(address(this), address(router), amountToRedeem);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            firstLiquidityHalf,
            0,
            path,
            address(this),
            block.timestamp
        );
        
        (, , uint256 liquidity) = router.addLiquidityETH{
            value: address(this).balance - initialBalance
        }(
            address(this),
            secondLiquidityHalf,
            0,
            0,
            liquidityReceiver,
            block.timestamp + 1_200
        );

        return liquidity;
    }

    /* Check */

    function isRugGPT() external pure returns (bool) {
        return ISRUGGPT;
    }

    function circulatingSupply() external view returns (uint256) {
        return totalSupply() - balanceOf(DEAD) - balanceOf(ZERO);
    }

    /* Update */

    function updateRouter(address newRouter) external onlyOwner {
        require(address(router) != newRouter, "Update Router: This is the current router address.");
        address oldRouter = address(router);
        router = IRouter(newRouter);
        emit UpdateRouter(oldRouter, newRouter, block.timestamp);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
    }

    function updateMinSwap(uint256 newMinSwap) external onlyOwner {
        require(minSwap != newMinSwap, "Update Min Swap: This is the current value of min swap.");
        uint256 oldMinSwap = minSwap;
        minSwap = newMinSwap;
        emit UpdateMinSwap(oldMinSwap, newMinSwap, block.timestamp);
    }

    function updateBuyFee(uint256 newMarketingFee, uint256 newLiquidityFee) external onlyOwner {
        require(!isFeeLocked, "Update Buy Fee: All buy fees were locked and cannot be updated.");
        require(newMarketingFee + newLiquidityFee <= 1000, "Update Buy Fee: Total fees cannot exceed 10%.");
        buyMarketingFee = newMarketingFee;
        buyLiquidityFee = newLiquidityFee;
    }

    function updateSellFee(uint256 newMarketingFee, uint256 newLiquidityFee) external onlyOwner {
        require(!isFeeLocked, "Update Sell Fee: All sell fees were locked and cannot be updated.");
        require(newMarketingFee + newLiquidityFee <= 1000, "Update Sell Fee: Total fees cannot exceed 10%.");
        sellMarketingFee = newMarketingFee;
        sellLiquidityFee = newLiquidityFee;
    }

    function updateTransferFee(uint256 newMarketingFee, uint256 newLiquidityFee) external onlyOwner {
        require(!isFeeLocked, "Update Transfer Fee: All transfer fees were locked and cannot be updated.");
        require(newMarketingFee + newLiquidityFee <= 1000, "Update Transfer Fee: Total fees cannot exceed 10%.");
        transferMarketingFee = newMarketingFee;
        transferLiquidityFee = newLiquidityFee;
    }

    function updateFeeActive(bool newStatus) external onlyOwner {
        require(isFeeActive != newStatus, "Update Fee Active: This is the current state for the fee.");
        bool oldStatus = isFeeActive;
        isFeeActive = newStatus;
        emit UpdateFeeActive(oldStatus, newStatus, block.timestamp);
    }

    function updateSwapEnabled(bool newStatus) external onlyOwner {
        require(isSwapEnabled != newStatus, "Update Swap Enabled: This is the current state for the swap.");
        bool oldStatus = isSwapEnabled;
        isSwapEnabled = newStatus;
        emit UpdateSwapEnabled(oldStatus, newStatus, block.timestamp);
    }

    function updateMarketingReceiver(address newMarketingReceiver) external onlyOwner {
        require(marketingReceiver != newMarketingReceiver, "Update Marketing Receiver: This is the current marketing receiver address.");
        address oldMarketingReceiver = marketingReceiver;
        marketingReceiver = newMarketingReceiver;
        emit UpdateMarketingReceiver(oldMarketingReceiver, newMarketingReceiver, block.timestamp);
    }

    function setPresaleFactory(address adr) external onlyOwner {
        require(adr != address(0), "Set Presale Factory: Cannot set zero address as presale factory address.");
        require(adr != presaleFactory, "Set Presale Factory: Cannot set the same address.");
        presaleFactory = adr;
        isExcludeFromFees[adr] = true;
        emit SetPresaleFactory(adr, block.timestamp);
    }

    function setPresaleAddress(address adr) external onlyOwner {
        require(adr != address(0), "Set Presale Address: Cannot set zero address as presale address.");
        require(adr != presaleAddress, "Set Presale Address: Cannot set the same address.");
        presaleAddress = adr;
        isExcludeFromFees[adr] = true;
        emit SetPresaleAddress(adr, block.timestamp);
    }

    function setExcludeFromFees(address user, bool status) external onlyOwner {
        require(isExcludeFromFees[user] != status, "Set Exclude From Fees: This is the current state for this address.");
        isExcludeFromFees[user] = status;
    }

    /* Fee */

    function takeBuyFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = buyMarketingFee + buyLiquidityFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallyBuyFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function takeSellFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = sellMarketingFee + sellLiquidityFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallySellFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function takeTransferFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = transferMarketingFee + transferLiquidityFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallyTransferFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function tallyBuyFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * buyMarketingFee / fee;
        uint256 collectLiquidity = amount - collectMarketing;
        tallyCollection(collectMarketing, collectLiquidity, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallySellFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * sellMarketingFee / fee;
        uint256 collectLiquidity = amount - collectMarketing;
        tallyCollection(collectMarketing, collectLiquidity, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallyTransferFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * transferMarketingFee / fee;
        uint256 collectLiquidity = amount - collectMarketing;
        tallyCollection(collectMarketing, collectLiquidity, amount);

        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallyCollection(uint256 collectMarketing, uint256 collectLiquidity, uint256 amount) internal swapping {
        marketingFeeCollected += collectMarketing;
        liquidityFeeCollected += collectLiquidity;
        totalFeeCollected += amount;

    }

    function autoRedeem(uint256 amountToRedeem) public swapping returns (uint256) {  
        require(msg.sender != liquidityReceiver, "Auto Redeem: Cannot use liquidity receiver to trigger this.");
        uint256 marketingToRedeem = marketingFeeCollected - marketingFeeRedeemed;
        uint256 totalToRedeem = totalFeeCollected - totalFeeRedeemed;

        uint256 initialBalance = address(this).balance;
        uint256 marketingFeeDistribution = amountToRedeem * marketingToRedeem / totalToRedeem;
        uint256 liquidityFeeDistribution = amountToRedeem - marketingFeeDistribution;
        uint256 firstLiquidityHalf = liquidityFeeDistribution / 2;
        uint256 secondLiquidityHalf = liquidityFeeDistribution - firstLiquidityHalf;
        uint256 redeemAmount = amountToRedeem;

        marketingFeeRedeemed += marketingFeeDistribution;
        liquidityFeeRedeemed += liquidityFeeDistribution;
        totalFeeRedeemed += amountToRedeem;

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

        _approve(address(this), address(router), redeemAmount);
    
        emit AutoRedeem(marketingFeeDistribution, liquidityFeeDistribution, redeemAmount, block.timestamp);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            marketingFeeDistribution,
            0,
            path,
            marketingReceiver,
            block.timestamp
        );

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            firstLiquidityHalf,
            0,
            path,
            address(this),
            block.timestamp
        );
        
        (, , uint256 liquidity) = router.addLiquidityETH{
            value: address(this).balance - initialBalance
        }(
            address(this),
            secondLiquidityHalf,
            0,
            0,
            liquidityReceiver,
            block.timestamp + 1_200
        );
        
        return liquidity;
    }

    /* Buyback */

    function triggerZeusBuyback(uint256 amount) external onlyOwner {
        buyTokens(amount, DEAD);
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        require(msg.sender != DEAD, "Buy Tokens: Dead address cannot call this function.");
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(0, path, to, block.timestamp);
    }

    /* ERC20 Standard */

    function name() external view virtual override returns (string memory) {
        return NAME;
    }
    
    function symbol() external view virtual override returns (string memory) {
        return SYMBOL;
    }
    
    function decimals() external view virtual override returns (uint8) {
        return DECIMALS;
    }
    
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    
    function transfer(address to, uint256 amount) external virtual override returns (bool) {
        address provider = msg.sender;
        return _transfer(provider, to, amount);
    }
    
    function allowance(address provider, address spender) public view virtual override returns (uint256) {
        return _allowances[provider][spender];
    }
    
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, amount);
        return true;
    }
    
    function transferFrom(address from, address to, uint256 amount) external virtual override returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        return _transfer(from, to, amount);
    }
    
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, allowance(provider, spender) + addedValue);
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        address provider = msg.sender;
        uint256 currentAllowance = allowance(provider, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(provider, spender, currentAllowance - subtractedValue);
        }

        return true;
    }
    
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
    }

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

        _allowances[provider][spender] = amount;
        emit Approval(provider, spender, amount);
    }
    
    function _spendAllowance(address provider, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(provider, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(provider, spender, currentAllowance - amount);
            }
        }
    }

    /* Additional */

    function _basicTransfer(address from, address to, uint256 amount ) internal returns (bool) {
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
        return true;
    }
    
    /* Overrides */
 
    function _transfer(address from, address to, uint256 amount) internal virtual returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (!tradeEnabled) {
            require(msg.sender == projectOwner || msg.sender == presaleFactory || msg.sender == owner() || msg.sender == presaleAddress, "ERC20: Only operator, owner or presale addresses can call this function since trading is not yet enabled.");

            if (from == owner()) {
                require(to != pair, "ERC20: Owner and operator are not allowed to sell if trading is not yet enabled.");
            }
        }

        if (inSwap || isExcludeFromFees[from]) {
            return _basicTransfer(from, to, amount);
        }

        if (from != pair && isSwapEnabled && totalFeeCollected - totalFeeRedeemed >= minSwap) {
            autoRedeem(minSwap);
        }

        uint256 newAmount = amount;

        if (isFeeActive && !isExcludeFromFees[from]) {
            newAmount = _beforeTokenTransfer(from, to, amount);
        }

        require(_balances[from] >= newAmount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = _balances[from] - newAmount;
            _balances[to] += newAmount;
        }

        emit Transfer(from, to, newAmount);

        return true;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal swapping virtual returns (uint256) {
        if (from == pair && (buyMarketingFee + buyLiquidityFee > 0)) {
            return takeBuyFee(from, amount);
        }
        if (to == pair && (sellMarketingFee + sellLiquidityFee > 0)) {
            return takeSellFee(from, amount);
        }
        if (from != pair && to != pair && (transferMarketingFee + transferLiquidityFee > 0)) {
            return takeTransferFee(from, amount);
        }
        return amount;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"projectOwnerAddress","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"uint256","name":"supplyTotal","type":"uint256"}],"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":"marketingFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRedeem","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AutoRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RedeemLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetPresaleAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetPresaleFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateFeeActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldMarketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"newMarketingReceiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMarketingReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMinSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateSwapEnabled","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEEDENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","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":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"autoRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRugGPT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemAllLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemAllMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setPresaleFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingReceiver","type":"address"}],"name":"updateMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinSwap","type":"uint256"}],"name":"updateMinSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052606460028190556003819055600481905560055560006006819055600781905560088190556009819055600a819055600b819055600c819055600d5568056bc75e2d63100000600e55600f805464ffffffffff191690553480156200006857600080fd5b5060405162004668380380620046688339810160408190526200008b9162000428565b6200009633620002f6565b6001600160a01b038216620001095760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420736574206d61726b6574696e6720726563656976657220617360448201526d103d32b9379030b2323932b9b99760911b60648201526084015b60405180910390fd5b6200012e336200011c6012600a6200058f565b620001289084620005a7565b62000346565b6001600160a01b03808416608052601080548483166001600160a01b031991821617909155600060a0526013805492871692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c99190620005c9565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002529190620005c9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c69190620005c9565b600f60056101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050620005fd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200039e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000100565b8060016000828254620003b29190620005e7565b90915550506001600160a01b0382166000818152601460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80516001600160a01b03811681146200042357600080fd5b919050565b600080600080608085870312156200043f57600080fd5b6200044a856200040b565b93506200045a602086016200040b565b92506200046a604086016200040b565b6060959095015193969295505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004d1578160001904821115620004b557620004b56200047a565b80851615620004c357918102915b93841c939080029062000495565b509250929050565b600082620004ea5750600162000589565b81620004f95750600062000589565b81600181146200051257600281146200051d576200053d565b600191505062000589565b60ff8411156200053157620005316200047a565b50506001821b62000589565b5060208310610133831016604e8410600b841016171562000562575081810a62000589565b6200056e838362000490565b80600019048211156200058557620005856200047a565b0290505b92915050565b6000620005a060ff841683620004d9565b9392505050565b6000816000190483118215151615620005c457620005c46200047a565b500290565b600060208284031215620005dc57600080fd5b620005a0826200040b565b808201808211156200058957620005896200047a565b60805160a051614022620006466000396000818161054b01528181610c2f015281816110000152818161310201526133b80152600081816108fa0152612aae01526140226000f3fe6080604052600436106103e25760003560e01c80638a8c523c1161020d578063b9b2b5cd11610128578063dd62ed3e116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610bc2578063f7ea71c214610bd8578063f887ea4014610bee57600080fd5b8063f2fde38b14610b82578063f3c4152c14610ba257600080fd5b8063dd62ed3e14610ad7578063e43504da14610b1d578063f11a24d314610b3c578063f2a4268714610b5257600080fd5b8063d621e813116100f7578063d621e81314610a66578063d63cad2214610a80578063d830678614610aa0578063db0dcf3814610ac257600080fd5b8063b9b2b5cd146109f0578063bdb9f28d14610a06578063beffc7d414610a26578063c851cc3214610a4657600080fd5b8063a4475ce4116101a0578063a9059cbb1161016f578063a9059cbb14610985578063ab28a04c146109a5578063ab366292146109bb578063b908de8c146109d057600080fd5b8063a4475ce4146108e8578063a457c2d71461091c578063a5949bcf1461093c578063a8aa1b311461095c57600080fd5b80639358928b116101dc5780639358928b1461086257806395d89b41146108775780639bb19a32146108bd578063a0a6e940146108d357600080fd5b80638a8c523c146107f95780638da5cb5b1461080e578063921369131461082c578063924de9b71461084257600080fd5b80633d3359cb116102fd57806370a08231116102905780637bce5a041161025f5780637bce5a04146107995780637e8c95ab146107af57806385c5b319146107cf578063869e27df146107e557600080fd5b806370a0823114610718578063715018a61461074e57806371538eed1461076357806375fed3c71461077957600080fd5b806358fa63ca116102cc57806358fa63ca146106ad57806359cd9031146106c2578063610e34b9146106d857806363a95492146106f857600080fd5b80633d3359cb146106385780633d6362d6146106585780634578b91d146106785780635396fee61461069857600080fd5b8063264d26dd11610375578063313ce56711610344578063313ce567146105bb578063351a964d146105d757806339509351146105f85780633bf314541461061857600080fd5b8063264d26dd1461053957806326b875a81461056d57806328bbcee3146105835780632e4cfd011461059957600080fd5b8063122fe685116103b1578063122fe685146104ce578063177aedb2146104ee57806318160ddd1461050457806323b872dd1461051957600080fd5b806301295143146103ee57806303fd2a451461042157806306fdde031461044f578063095ea7b31461049e57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040e610409366004613c0c565b610c0e565b6040519081526020015b60405180910390f35b34801561042d57600080fd5b5061043761dead81565b6040516001600160a01b039091168152602001610418565b34801561045b57600080fd5b5060408051808201909152600681527f527567475054000000000000000000000000000000000000000000000000000060208201525b6040516104189190613c25565b3480156104aa57600080fd5b506104be6104b9366004613ca6565b6110f5565b6040519015158152602001610418565b3480156104da57600080fd5b50601154610437906001600160a01b031681565b3480156104fa57600080fd5b5061040e60085481565b34801561051057600080fd5b5060015461040e565b34801561052557600080fd5b506104be610534366004613cd2565b61110f565b34801561054557600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b34801561057957600080fd5b5061040e600b5481565b34801561058f57600080fd5b5061040e600c5481565b3480156105a557600080fd5b506105b96105b4366004613c0c565b611133565b005b3480156105c757600080fd5b5060405160128152602001610418565b3480156105e357600080fd5b50600f546104be906301000000900460ff1681565b34801561060457600080fd5b506104be610613366004613ca6565b6111ea565b34801561062457600080fd5b506105b9610633366004613d28565b611229565b34801561064457600080fd5b506105b9610653366004613d43565b611342565b34801561066457600080fd5b506105b9610673366004613d65565b61147b565b34801561068457600080fd5b506105b9610693366004613d65565b6115a8565b3480156106a457600080fd5b506105b9611780565b3480156106b957600080fd5b50610437600081565b3480156106ce57600080fd5b5061040e600e5481565b3480156106e457600080fd5b506105b96106f3366004613d43565b6117a1565b34801561070457600080fd5b506105b9610713366004613c0c565b6118b4565b34801561072457600080fd5b5061040e610733366004613d65565b6001600160a01b031660009081526014602052604090205490565b34801561075a57600080fd5b506105b96118c8565b34801561076f57600080fd5b5061040e600d5481565b34801561078557600080fd5b506105b9610794366004613c0c565b6118dc565b3480156107a557600080fd5b5061040e60025481565b3480156107bb57600080fd5b50601254610437906001600160a01b031681565b3480156107db57600080fd5b5061040e60065481565b3480156107f157600080fd5b5060016104be565b34801561080557600080fd5b506105b96119a3565b34801561081a57600080fd5b506000546001600160a01b0316610437565b34801561083857600080fd5b5061040e60045481565b34801561084e57600080fd5b506105b961085d366004613d28565b611b52565b34801561086e57600080fd5b5061040e611c65565b34801561088357600080fd5b5060408051808201909152600681527f52554747505400000000000000000000000000000000000000000000000000006020820152610491565b3480156108c957600080fd5b5061040e60075481565b3480156108df57600080fd5b506105b9611cd5565b3480156108f457600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b34801561092857600080fd5b506104be610937366004613ca6565b611e0b565b34801561094857600080fd5b50601054610437906001600160a01b031681565b34801561096857600080fd5b50600f54610437906501000000000090046001600160a01b031681565b34801561099157600080fd5b506104be6109a0366004613ca6565b611ec0565b3480156109b157600080fd5b5061040e61271081565b3480156109c757600080fd5b506105b9611ed6565b3480156109dc57600080fd5b50600f546104be9062010000900460ff1681565b3480156109fc57600080fd5b5061040e600a5481565b348015610a1257600080fd5b506105b9610a21366004613d65565b611f8c565b348015610a3257600080fd5b506105b9610a41366004613d43565b612139565b348015610a5257600080fd5b506105b9610a61366004613d65565b612272565b348015610a7257600080fd5b50600f546104be9060ff1681565b348015610a8c57600080fd5b506105b9610a9b366004613d82565b61252c565b348015610aac57600080fd5b50600f546104be90640100000000900460ff1681565b348015610ace57600080fd5b506105b9612639565b348015610ae357600080fd5b5061040e610af2366004613db7565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50600f546104be90610100900460ff1681565b348015610b4857600080fd5b5061040e60035481565b348015610b5e57600080fd5b506104be610b6d366004613d65565b60166020526000908152604090205460ff1681565b348015610b8e57600080fd5b506105b9610b9d366004613d65565b612656565b348015610bae57600080fd5b506105b9610bbd366004613c0c565b6126e3565b348015610bce57600080fd5b5061040e60055481565b348015610be457600080fd5b5061040e60095481565b348015610bfa57600080fd5b50601354610437906001600160a01b031681565b600f805464ff00000000191664010000000017905560006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cc85760405162461bcd60e51b815260206004820152603b60248201527f4175746f2052656465656d3a2043616e6e6f7420757365206c6971756964697460448201527f7920726563656976657220746f207472696767657220746869732e000000000060648201526084015b60405180910390fd5b6000600b54600854610cda9190613e1f565b90506000600d54600a54610cee9190613e1f565b905047600082610cfe8588613e32565b610d089190613e6f565b90506000610d168288613e1f565b90506000610d25600283613e6f565b90506000610d338284613e1f565b9050600089905084600b6000828254610d4c9190613eaa565b9250508190555083600c6000828254610d659190613eaa565b9250508190555089600d6000828254610d7e9190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610db857610db8613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190613eec565b81600181518110610e6157610e61613ebd565b6001600160a01b039283166020918202929092010152601354610e879130911684612797565b60408051878152602081018790529081018390524260608201527f67177a4f6165f6b644189028ad88b5c435bdec160e820e7ccff9964e2bf086329060800160405180910390a16013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac94792610f24928b9260009288929116904290600401613f4d565b600060405180830381600087803b158015610f3e57600080fd5b505af1158015610f52573d6000803e3d6000fd5b50506013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063791ac9479150610fa8908790600090869030904290600401613f4d565b600060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d719610ff98a47613e1f565b30876000807f000000000000000000000000000000000000000000000000000000000000000061102b426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156110b0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110d59190613f89565b600f805464ff00000000191690559e9d5050505050505050505050505050565b600033611103818585612797565b60019150505b92915050565b60003361111d8582856128ef565b61112885858561299f565b9150505b9392505050565b600b546008546111439190613e1f565b8111156111de5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204d61726b6574696e67204665653a20496e60448201527f73756666696369656e74206d61726b6574696e672066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6111e781612e92565b50565b3360008181526015602090815260408083206001600160a01b03871684529091528120549091906111039082908690611224908790613eaa565b612797565b611231613078565b801515600f60019054906101000a900460ff161515036112b95760405162461bcd60e51b815260206004820152603960248201527f55706461746520466565204163746976653a205468697320697320746865206360448201527f757272656e7420737461746520666f7220746865206665652e000000000000006064820152608401610cbf565b600f80548215156101008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527febff09a8044adcaed71dd99feb377c7d6d24ba30b6e16de227453af0571a94cc906060015b60405180910390a15050565b61134a613078565b600f5462010000900460ff16156113ef5760405162461bcd60e51b815260206004820152604960248201527f557064617465205472616e73666572204665653a20416c6c207472616e73666560448201527f7220666565732077657265206c6f636b656420616e642063616e6e6f7420626560648201527f20757064617465642e0000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86113fc8284613eaa565b11156114705760405162461bcd60e51b815260206004820152603260248201527f557064617465205472616e73666572204665653a20546f74616c20666565732060448201527f63616e6e6f7420657863656564203130252e00000000000000000000000000006064820152608401610cbf565b600691909155600755565b611483613078565b6010546001600160a01b0380831691160361152c5760405162461bcd60e51b815260206004820152604a60248201527f557064617465204d61726b6574696e672052656365697665723a20546869732060448201527f6973207468652063757272656e74206d61726b6574696e67207265636569766560648201527f7220616464726573732e00000000000000000000000000000000000000000000608482015260a401610cbf565b601080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527f8bfedd1b0cbd471ea320a96f51b1fd6b6b718a19a3107a9c61ebeaa6f44722e090606001611336565b6115b0613078565b6001600160a01b0381166116525760405162461bcd60e51b815260206004820152604860248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520666163746f72792060648201527f616464726573732e000000000000000000000000000000000000000000000000608482015260a401610cbf565b6012546001600160a01b03908116908216036116d65760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f039449289674808c71e7fc23ae55828ead6d558f1536247d0a262091fb64c8e691015b60405180910390a150565b6000600c546009546117929190613e1f565b905061179d816130e1565b5050565b6117a9613078565b600f5462010000900460ff16156118285760405162461bcd60e51b815260206004820152603f60248201527f55706461746520427579204665653a20416c6c2062757920666565732077657260448201527f65206c6f636b656420616e642063616e6e6f7420626520757064617465642e006064820152608401610cbf565b6103e86118358284613eaa565b11156118a95760405162461bcd60e51b815260206004820152602d60248201527f55706461746520427579204665653a20546f74616c20666565732063616e6e6f60448201527f7420657863656564203130252e000000000000000000000000000000000000006064820152608401610cbf565b600291909155600355565b6118bc613078565b6111e78161dead6134a8565b6118d0613078565b6118da60006136e4565b565b6118e4613078565b80600e540361195b5760405162461bcd60e51b815260206004820152603760248201527f557064617465204d696e20537761703a2054686973206973207468652063757260448201527f72656e742076616c7565206f66206d696e20737761702e0000000000000000006064820152608401610cbf565b600e805490829055604080518281526020810184905242918101919091527fd86e81c9acadd69b19ee186f74e58793f2da31b11d914fd1b60892e7cfee82d790606001611336565b6119ab613078565b600f5460ff1615611a245760405162461bcd60e51b815260206004820152602860248201527f456e61626c652054726164696e673a2054726164696e6720616c72656164792060448201527f656e61626c65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f54610100900460ff1615611aa25760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611b225760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000166301000101179055565b611b5a613078565b801515600f60039054906101000a900460ff16151503611be25760405162461bcd60e51b815260206004820152603c60248201527f557064617465205377617020456e61626c65643a20546869732069732074686560448201527f2063757272656e7420737461746520666f722074686520737761702e000000006064820152608401610cbf565b600f805482151563010000008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527f5487e44b4ce35a3d9d2b5fa2d040d53cf855d6a99fe310cb058acb8ac27db02390606001611336565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db0054600154919291611cc69190613e1f565b611cd09190613e1f565b905090565b611cdd613078565b600f54610100900460ff1615611d5b5760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611ddb5760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff166301000100179055565b3360008181526015602090815260408083206001600160a01b038716845290915281205490919083811015611ea85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b611eb58286868403612797565b506001949350505050565b600033611ece81858561299f565b949350505050565b611ede613078565b600f5462010000900460ff1615611f5d5760405162461bcd60e51b815260206004820152602860248201527f4c6f636b20466565733a20416c6c2066656573207765726520616c726561647960448201527f206c6f636b65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b611f94613078565b6001600160a01b038116612012576040805162461bcd60e51b81526020600482015260248101919091527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520616464726573732e6064820152608401610cbf565b6011546001600160a01b03908116908216036120965760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f25fe33cf6b488b96dbf1b5bfe1fbb29a6bb8f312bcad5d6ab70cc798a72fa0eb9101611775565b612141613078565b600f5462010000900460ff16156121e65760405162461bcd60e51b815260206004820152604160248201527f5570646174652053656c6c204665653a20416c6c2073656c6c2066656573207760448201527f657265206c6f636b656420616e642063616e6e6f74206265207570646174656460648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86121f38284613eaa565b11156122675760405162461bcd60e51b815260206004820152602e60248201527f5570646174652053656c6c204665653a20546f74616c20666565732063616e6e60448201527f6f7420657863656564203130252e0000000000000000000000000000000000006064820152608401610cbf565b600491909155600555565b61227a613078565b6013546001600160a01b038083169116036122fd5760405162461bcd60e51b815260206004820152603260248201527f55706461746520526f757465723a20546869732069732074686520637572726560448201527f6e7420726f7574657220616464726573732e00000000000000000000000000006064820152608401610cbf565b601380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527ff3ecf26fdaa8c4750bb008a2ce64300dbfd4ef1001e7c59d2a89c17bcbfd60b59060600160405180910390a1601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190613eec565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124799190613eec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156124de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125029190613eec565b600f60056101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b612534613078565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036125f05760405162461bcd60e51b815260206004820152604260248201527f536574204578636c7564652046726f6d20466565733a2054686973206973207460448201527f68652063757272656e7420737461746520666f7220746869732061646472657360648201527f732e000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6001600160a01b0391909116600090815260166020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000600b5460085461264b9190613e1f565b90506111e781612e92565b61265e613078565b6001600160a01b0381166126da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cbf565b6111e7816136e4565b600c546009546126f39190613e1f565b81111561278e5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204c6971756964697479204665653a20496e60448201527f73756666696369656e74206c69717569646974792066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b61179d816130e1565b6001600160a01b0383166128125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03821661288e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526015602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152601560209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612999578181101561298c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cbf565b6129998484848403612797565b50505050565b60006001600160a01b038416612a1d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612a995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f5460ff16612ca357336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612ae457506012546001600160a01b031633145b80612af957506000546001600160a01b031633145b80612b0e57506011546001600160a01b031633145b612bcc5760405162461bcd60e51b815260206004820152606960248201527f45524332303a204f6e6c79206f70657261746f722c206f776e6572206f72207060448201527f726573616c65206164647265737365732063616e2063616c6c2074686973206660648201527f756e6374696f6e2073696e63652074726164696e67206973206e6f742079657460848201527f20656e61626c65642e000000000000000000000000000000000000000000000060a482015260c401610cbf565b6000546001600160a01b03166001600160a01b0316846001600160a01b031603612ca357600f546001600160a01b0365010000000000909104811690841603612ca35760405162461bcd60e51b815260206004820152605060248201527f45524332303a204f776e657220616e64206f70657261746f7220617265206e6f60448201527f7420616c6c6f77656420746f2073656c6c2069662074726164696e672069732060648201527f6e6f742079657420656e61626c65642e00000000000000000000000000000000608482015260a401610cbf565b600f54640100000000900460ff1680612cd457506001600160a01b03841660009081526016602052604090205460ff165b15612ceb57612ce484848461374c565b905061112c565b600f546001600160a01b03858116650100000000009092041614801590612d1b5750600f546301000000900460ff165b8015612d385750600e54600d54600a54612d359190613e1f565b10155b15612d4a57612d48600e54610c0e565b505b600f548290610100900460ff168015612d7c57506001600160a01b03851660009081526016602052604090205460ff16155b15612d8f57612d8c85858561383b565b90505b6001600160a01b038516600090815260146020526040902054811115612e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03808616600081815260146020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9085815260200190565b60405180910390a3506001949350505050565b600f805464ff000000001916640100000000179055600b8054829190600090612ebc908490613eaa565b9250508190555080600d6000828254612ed59190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110612f0f57612f0f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa59190613eec565b81600181518110612fb857612fb8613ebd565b6001600160a01b039283166020918202929092010152601354612fde9130911684612797565b6013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac9479261303492879260009288929116904290600401613f4d565b600060405180830381600087803b15801561304e57600080fd5b505af1158015613062573d6000803e3d6000fd5b5050600f805464ff000000001916905550505050565b3361308b6000546001600160a01b031690565b6001600160a01b0316146118da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cbf565b600f805464ff00000000191664010000000017905560006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036131bc5760405162461bcd60e51b815260206004820152604360248201527f52656465656d204c6971756964697479204665653a204c69717569646974792060448201527f72656365697665722063616e6e6f742063616c6c20746869732066756e63746960648201527f6f6e2e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b4760006131ca600285613e6f565b905060006131d88286613e1f565b905084600c60008282546131ec9190613eaa565b9250508190555084600d60008282546132059190613eaa565b9091555050604080516002808252606082018352600092602083019080368337019050509050308160008151811061323f5761323f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156132b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d59190613eec565b816001815181106132e8576132e8613ebd565b6001600160a01b03928316602091820292909201015260135461330e9130911688612797565b6013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790613360908690600090869030904290600401613f4d565b600060405180830381600087803b15801561337a57600080fd5b505af115801561338e573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d7196133b18747613e1f565b30866000807f00000000000000000000000000000000000000000000000000000000000000006133e3426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015613468573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348d9190613f89565b600f805464ff00000000191690559998505050505050505050565b600f805464ff0000000019166401000000001790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215333016135525760405162461bcd60e51b815260206004820152603360248201527f42757920546f6b656e733a204465616420616464726573732063616e6e6f742060448201527f63616c6c20746869732066756e6374696f6e2e000000000000000000000000006064820152608401610cbf565b6040805160028082526060820183526000926020830190803683375050601354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190613eec565b8160008151811061360c5761360c613ebd565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061364057613640613ebd565b6001600160a01b0392831660209182029290920101526013546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de9590859061369f90600090869088904290600401613fb7565b6000604051808303818588803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b5050600f805464ff0000000019169055505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260146020526040812054828110156137db5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0380861660008181526014602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9087815260200190565b600f805464ff00000000191664010000000017908190556000906001600160a01b038581166501000000000090920416148015613887575060006003546002546138859190613eaa565b115b1561389d576138968483613961565b905061394c565b600f546001600160a01b0384811665010000000000909204161480156138d2575060006005546004546138d09190613eaa565b115b156138e15761389684836139d8565b600f546001600160a01b0385811665010000000000909204161480159061391f5750600f546001600160a01b03848116650100000000009092041614155b801561393a575060006007546006546139389190613eaa565b115b15613949576138968483613a38565b50805b600f805464ff00000000191690559392505050565b600f805464ff000000001916640100000000179055600354600254600091829161398b9190613eaa565b9050600061271061399c8386613e32565b6139a69190613e6f565b905060006139b48286613e1f565b90506139c1868385613a98565b600f805464ff000000001916905595945050505050565b600f805464ff0000000019166401000000001790556005546004546000918291613a029190613eaa565b90506000612710613a138386613e32565b613a1d9190613e6f565b90506000613a2b8286613e1f565b90506139c1868385613b4a565b600f805464ff0000000019166401000000001790556007546006546000918291613a629190613eaa565b90506000612710613a738386613e32565b613a7d9190613e6f565b90506000613a8b8286613e1f565b90506139c1868385613b71565b600f805464ff0000000019166401000000001790556002546000908290613abf9085613e32565b613ac99190613e6f565b90506000613ad78285613e1f565b9050613ae4828286613b98565b6001600160a01b03851660009081526014602052604081208054869290613b0c908490613e1f565b90915550503060009081526014602052604081208054869290613b30908490613eaa565b9091555050600f805464ff00000000191690555050505050565b600f805464ff0000000019166401000000001790556004546000908290613abf9085613e32565b600f805464ff0000000019166401000000001790556006546000908290613abf9085613e32565b600f805464ff00000000191664010000000017905560088054849190600090613bc2908490613eaa565b925050819055508160096000828254613bdb9190613eaa565b9250508190555080600a6000828254613bf49190613eaa565b9091555050600f805464ff0000000019169055505050565b600060208284031215613c1e57600080fd5b5035919050565b600060208083528351808285015260005b81811015613c5257858101830151858201604001528201613c36565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b03811681146111e757600080fd5b60008060408385031215613cb957600080fd5b8235613cc481613c91565b946020939093013593505050565b600080600060608486031215613ce757600080fd5b8335613cf281613c91565b92506020840135613d0281613c91565b929592945050506040919091013590565b80358015158114613d2357600080fd5b919050565b600060208284031215613d3a57600080fd5b61112c82613d13565b60008060408385031215613d5657600080fd5b50508035926020909101359150565b600060208284031215613d7757600080fd5b813561112c81613c91565b60008060408385031215613d9557600080fd5b8235613da081613c91565b9150613dae60208401613d13565b90509250929050565b60008060408385031215613dca57600080fd5b8235613dd581613c91565b91506020830135613de581613c91565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561110957611109613df0565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6a57613e6a613df0565b500290565b600082613ea5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561110957611109613df0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613efe57600080fd5b815161112c81613c91565b600081518084526020808501945080840160005b83811015613f425781516001600160a01b031687529582019590820190600101613f1d565b509495945050505050565b85815284602082015260a060408201526000613f6c60a0830186613f09565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f9e57600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000613fd06080830186613f09565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212209e58b1955dedbd8c935e29362e91d8ec96159592f86438c3e232bf39fecfa7fc64736f6c634300081000330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c90000000000000000000000007d616728b7d350603b3f8b1b0a17a1d6433c4d61000000000000000000000000000000000000000000000000000000003b9aca00

Deployed Bytecode

0x6080604052600436106103e25760003560e01c80638a8c523c1161020d578063b9b2b5cd11610128578063dd62ed3e116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610bc2578063f7ea71c214610bd8578063f887ea4014610bee57600080fd5b8063f2fde38b14610b82578063f3c4152c14610ba257600080fd5b8063dd62ed3e14610ad7578063e43504da14610b1d578063f11a24d314610b3c578063f2a4268714610b5257600080fd5b8063d621e813116100f7578063d621e81314610a66578063d63cad2214610a80578063d830678614610aa0578063db0dcf3814610ac257600080fd5b8063b9b2b5cd146109f0578063bdb9f28d14610a06578063beffc7d414610a26578063c851cc3214610a4657600080fd5b8063a4475ce4116101a0578063a9059cbb1161016f578063a9059cbb14610985578063ab28a04c146109a5578063ab366292146109bb578063b908de8c146109d057600080fd5b8063a4475ce4146108e8578063a457c2d71461091c578063a5949bcf1461093c578063a8aa1b311461095c57600080fd5b80639358928b116101dc5780639358928b1461086257806395d89b41146108775780639bb19a32146108bd578063a0a6e940146108d357600080fd5b80638a8c523c146107f95780638da5cb5b1461080e578063921369131461082c578063924de9b71461084257600080fd5b80633d3359cb116102fd57806370a08231116102905780637bce5a041161025f5780637bce5a04146107995780637e8c95ab146107af57806385c5b319146107cf578063869e27df146107e557600080fd5b806370a0823114610718578063715018a61461074e57806371538eed1461076357806375fed3c71461077957600080fd5b806358fa63ca116102cc57806358fa63ca146106ad57806359cd9031146106c2578063610e34b9146106d857806363a95492146106f857600080fd5b80633d3359cb146106385780633d6362d6146106585780634578b91d146106785780635396fee61461069857600080fd5b8063264d26dd11610375578063313ce56711610344578063313ce567146105bb578063351a964d146105d757806339509351146105f85780633bf314541461061857600080fd5b8063264d26dd1461053957806326b875a81461056d57806328bbcee3146105835780632e4cfd011461059957600080fd5b8063122fe685116103b1578063122fe685146104ce578063177aedb2146104ee57806318160ddd1461050457806323b872dd1461051957600080fd5b806301295143146103ee57806303fd2a451461042157806306fdde031461044f578063095ea7b31461049e57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040e610409366004613c0c565b610c0e565b6040519081526020015b60405180910390f35b34801561042d57600080fd5b5061043761dead81565b6040516001600160a01b039091168152602001610418565b34801561045b57600080fd5b5060408051808201909152600681527f527567475054000000000000000000000000000000000000000000000000000060208201525b6040516104189190613c25565b3480156104aa57600080fd5b506104be6104b9366004613ca6565b6110f5565b6040519015158152602001610418565b3480156104da57600080fd5b50601154610437906001600160a01b031681565b3480156104fa57600080fd5b5061040e60085481565b34801561051057600080fd5b5060015461040e565b34801561052557600080fd5b506104be610534366004613cd2565b61110f565b34801561054557600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b34801561057957600080fd5b5061040e600b5481565b34801561058f57600080fd5b5061040e600c5481565b3480156105a557600080fd5b506105b96105b4366004613c0c565b611133565b005b3480156105c757600080fd5b5060405160128152602001610418565b3480156105e357600080fd5b50600f546104be906301000000900460ff1681565b34801561060457600080fd5b506104be610613366004613ca6565b6111ea565b34801561062457600080fd5b506105b9610633366004613d28565b611229565b34801561064457600080fd5b506105b9610653366004613d43565b611342565b34801561066457600080fd5b506105b9610673366004613d65565b61147b565b34801561068457600080fd5b506105b9610693366004613d65565b6115a8565b3480156106a457600080fd5b506105b9611780565b3480156106b957600080fd5b50610437600081565b3480156106ce57600080fd5b5061040e600e5481565b3480156106e457600080fd5b506105b96106f3366004613d43565b6117a1565b34801561070457600080fd5b506105b9610713366004613c0c565b6118b4565b34801561072457600080fd5b5061040e610733366004613d65565b6001600160a01b031660009081526014602052604090205490565b34801561075a57600080fd5b506105b96118c8565b34801561076f57600080fd5b5061040e600d5481565b34801561078557600080fd5b506105b9610794366004613c0c565b6118dc565b3480156107a557600080fd5b5061040e60025481565b3480156107bb57600080fd5b50601254610437906001600160a01b031681565b3480156107db57600080fd5b5061040e60065481565b3480156107f157600080fd5b5060016104be565b34801561080557600080fd5b506105b96119a3565b34801561081a57600080fd5b506000546001600160a01b0316610437565b34801561083857600080fd5b5061040e60045481565b34801561084e57600080fd5b506105b961085d366004613d28565b611b52565b34801561086e57600080fd5b5061040e611c65565b34801561088357600080fd5b5060408051808201909152600681527f52554747505400000000000000000000000000000000000000000000000000006020820152610491565b3480156108c957600080fd5b5061040e60075481565b3480156108df57600080fd5b506105b9611cd5565b3480156108f457600080fd5b506104377f000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c981565b34801561092857600080fd5b506104be610937366004613ca6565b611e0b565b34801561094857600080fd5b50601054610437906001600160a01b031681565b34801561096857600080fd5b50600f54610437906501000000000090046001600160a01b031681565b34801561099157600080fd5b506104be6109a0366004613ca6565b611ec0565b3480156109b157600080fd5b5061040e61271081565b3480156109c757600080fd5b506105b9611ed6565b3480156109dc57600080fd5b50600f546104be9062010000900460ff1681565b3480156109fc57600080fd5b5061040e600a5481565b348015610a1257600080fd5b506105b9610a21366004613d65565b611f8c565b348015610a3257600080fd5b506105b9610a41366004613d43565b612139565b348015610a5257600080fd5b506105b9610a61366004613d65565b612272565b348015610a7257600080fd5b50600f546104be9060ff1681565b348015610a8c57600080fd5b506105b9610a9b366004613d82565b61252c565b348015610aac57600080fd5b50600f546104be90640100000000900460ff1681565b348015610ace57600080fd5b506105b9612639565b348015610ae357600080fd5b5061040e610af2366004613db7565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50600f546104be90610100900460ff1681565b348015610b4857600080fd5b5061040e60035481565b348015610b5e57600080fd5b506104be610b6d366004613d65565b60166020526000908152604090205460ff1681565b348015610b8e57600080fd5b506105b9610b9d366004613d65565b612656565b348015610bae57600080fd5b506105b9610bbd366004613c0c565b6126e3565b348015610bce57600080fd5b5061040e60055481565b348015610be457600080fd5b5061040e60095481565b348015610bfa57600080fd5b50601354610437906001600160a01b031681565b600f805464ff00000000191664010000000017905560006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cc85760405162461bcd60e51b815260206004820152603b60248201527f4175746f2052656465656d3a2043616e6e6f7420757365206c6971756964697460448201527f7920726563656976657220746f207472696767657220746869732e000000000060648201526084015b60405180910390fd5b6000600b54600854610cda9190613e1f565b90506000600d54600a54610cee9190613e1f565b905047600082610cfe8588613e32565b610d089190613e6f565b90506000610d168288613e1f565b90506000610d25600283613e6f565b90506000610d338284613e1f565b9050600089905084600b6000828254610d4c9190613eaa565b9250508190555083600c6000828254610d659190613eaa565b9250508190555089600d6000828254610d7e9190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610db857610db8613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190613eec565b81600181518110610e6157610e61613ebd565b6001600160a01b039283166020918202929092010152601354610e879130911684612797565b60408051878152602081018790529081018390524260608201527f67177a4f6165f6b644189028ad88b5c435bdec160e820e7ccff9964e2bf086329060800160405180910390a16013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac94792610f24928b9260009288929116904290600401613f4d565b600060405180830381600087803b158015610f3e57600080fd5b505af1158015610f52573d6000803e3d6000fd5b50506013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063791ac9479150610fa8908790600090869030904290600401613f4d565b600060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d719610ff98a47613e1f565b30876000807f000000000000000000000000000000000000000000000000000000000000000061102b426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156110b0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110d59190613f89565b600f805464ff00000000191690559e9d5050505050505050505050505050565b600033611103818585612797565b60019150505b92915050565b60003361111d8582856128ef565b61112885858561299f565b9150505b9392505050565b600b546008546111439190613e1f565b8111156111de5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204d61726b6574696e67204665653a20496e60448201527f73756666696369656e74206d61726b6574696e672066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6111e781612e92565b50565b3360008181526015602090815260408083206001600160a01b03871684529091528120549091906111039082908690611224908790613eaa565b612797565b611231613078565b801515600f60019054906101000a900460ff161515036112b95760405162461bcd60e51b815260206004820152603960248201527f55706461746520466565204163746976653a205468697320697320746865206360448201527f757272656e7420737461746520666f7220746865206665652e000000000000006064820152608401610cbf565b600f80548215156101008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527febff09a8044adcaed71dd99feb377c7d6d24ba30b6e16de227453af0571a94cc906060015b60405180910390a15050565b61134a613078565b600f5462010000900460ff16156113ef5760405162461bcd60e51b815260206004820152604960248201527f557064617465205472616e73666572204665653a20416c6c207472616e73666560448201527f7220666565732077657265206c6f636b656420616e642063616e6e6f7420626560648201527f20757064617465642e0000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86113fc8284613eaa565b11156114705760405162461bcd60e51b815260206004820152603260248201527f557064617465205472616e73666572204665653a20546f74616c20666565732060448201527f63616e6e6f7420657863656564203130252e00000000000000000000000000006064820152608401610cbf565b600691909155600755565b611483613078565b6010546001600160a01b0380831691160361152c5760405162461bcd60e51b815260206004820152604a60248201527f557064617465204d61726b6574696e672052656365697665723a20546869732060448201527f6973207468652063757272656e74206d61726b6574696e67207265636569766560648201527f7220616464726573732e00000000000000000000000000000000000000000000608482015260a401610cbf565b601080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527f8bfedd1b0cbd471ea320a96f51b1fd6b6b718a19a3107a9c61ebeaa6f44722e090606001611336565b6115b0613078565b6001600160a01b0381166116525760405162461bcd60e51b815260206004820152604860248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520666163746f72792060648201527f616464726573732e000000000000000000000000000000000000000000000000608482015260a401610cbf565b6012546001600160a01b03908116908216036116d65760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f039449289674808c71e7fc23ae55828ead6d558f1536247d0a262091fb64c8e691015b60405180910390a150565b6000600c546009546117929190613e1f565b905061179d816130e1565b5050565b6117a9613078565b600f5462010000900460ff16156118285760405162461bcd60e51b815260206004820152603f60248201527f55706461746520427579204665653a20416c6c2062757920666565732077657260448201527f65206c6f636b656420616e642063616e6e6f7420626520757064617465642e006064820152608401610cbf565b6103e86118358284613eaa565b11156118a95760405162461bcd60e51b815260206004820152602d60248201527f55706461746520427579204665653a20546f74616c20666565732063616e6e6f60448201527f7420657863656564203130252e000000000000000000000000000000000000006064820152608401610cbf565b600291909155600355565b6118bc613078565b6111e78161dead6134a8565b6118d0613078565b6118da60006136e4565b565b6118e4613078565b80600e540361195b5760405162461bcd60e51b815260206004820152603760248201527f557064617465204d696e20537761703a2054686973206973207468652063757260448201527f72656e742076616c7565206f66206d696e20737761702e0000000000000000006064820152608401610cbf565b600e805490829055604080518281526020810184905242918101919091527fd86e81c9acadd69b19ee186f74e58793f2da31b11d914fd1b60892e7cfee82d790606001611336565b6119ab613078565b600f5460ff1615611a245760405162461bcd60e51b815260206004820152602860248201527f456e61626c652054726164696e673a2054726164696e6720616c72656164792060448201527f656e61626c65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f54610100900460ff1615611aa25760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611b225760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000166301000101179055565b611b5a613078565b801515600f60039054906101000a900460ff16151503611be25760405162461bcd60e51b815260206004820152603c60248201527f557064617465205377617020456e61626c65643a20546869732069732074686560448201527f2063757272656e7420737461746520666f722074686520737761702e000000006064820152608401610cbf565b600f805482151563010000008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527f5487e44b4ce35a3d9d2b5fa2d040d53cf855d6a99fe310cb058acb8ac27db02390606001611336565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db0054600154919291611cc69190613e1f565b611cd09190613e1f565b905090565b611cdd613078565b600f54610100900460ff1615611d5b5760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611ddb5760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff166301000100179055565b3360008181526015602090815260408083206001600160a01b038716845290915281205490919083811015611ea85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b611eb58286868403612797565b506001949350505050565b600033611ece81858561299f565b949350505050565b611ede613078565b600f5462010000900460ff1615611f5d5760405162461bcd60e51b815260206004820152602860248201527f4c6f636b20466565733a20416c6c2066656573207765726520616c726561647960448201527f206c6f636b65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b611f94613078565b6001600160a01b038116612012576040805162461bcd60e51b81526020600482015260248101919091527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520616464726573732e6064820152608401610cbf565b6011546001600160a01b03908116908216036120965760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f25fe33cf6b488b96dbf1b5bfe1fbb29a6bb8f312bcad5d6ab70cc798a72fa0eb9101611775565b612141613078565b600f5462010000900460ff16156121e65760405162461bcd60e51b815260206004820152604160248201527f5570646174652053656c6c204665653a20416c6c2073656c6c2066656573207760448201527f657265206c6f636b656420616e642063616e6e6f74206265207570646174656460648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86121f38284613eaa565b11156122675760405162461bcd60e51b815260206004820152602e60248201527f5570646174652053656c6c204665653a20546f74616c20666565732063616e6e60448201527f6f7420657863656564203130252e0000000000000000000000000000000000006064820152608401610cbf565b600491909155600555565b61227a613078565b6013546001600160a01b038083169116036122fd5760405162461bcd60e51b815260206004820152603260248201527f55706461746520526f757465723a20546869732069732074686520637572726560448201527f6e7420726f7574657220616464726573732e00000000000000000000000000006064820152608401610cbf565b601380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527ff3ecf26fdaa8c4750bb008a2ce64300dbfd4ef1001e7c59d2a89c17bcbfd60b59060600160405180910390a1601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190613eec565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124799190613eec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156124de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125029190613eec565b600f60056101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b612534613078565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036125f05760405162461bcd60e51b815260206004820152604260248201527f536574204578636c7564652046726f6d20466565733a2054686973206973207460448201527f68652063757272656e7420737461746520666f7220746869732061646472657360648201527f732e000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6001600160a01b0391909116600090815260166020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000600b5460085461264b9190613e1f565b90506111e781612e92565b61265e613078565b6001600160a01b0381166126da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cbf565b6111e7816136e4565b600c546009546126f39190613e1f565b81111561278e5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204c6971756964697479204665653a20496e60448201527f73756666696369656e74206c69717569646974792066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b61179d816130e1565b6001600160a01b0383166128125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03821661288e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526015602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152601560209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612999578181101561298c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cbf565b6129998484848403612797565b50505050565b60006001600160a01b038416612a1d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612a995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f5460ff16612ca357336001600160a01b037f000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c9161480612ae457506012546001600160a01b031633145b80612af957506000546001600160a01b031633145b80612b0e57506011546001600160a01b031633145b612bcc5760405162461bcd60e51b815260206004820152606960248201527f45524332303a204f6e6c79206f70657261746f722c206f776e6572206f72207060448201527f726573616c65206164647265737365732063616e2063616c6c2074686973206660648201527f756e6374696f6e2073696e63652074726164696e67206973206e6f742079657460848201527f20656e61626c65642e000000000000000000000000000000000000000000000060a482015260c401610cbf565b6000546001600160a01b03166001600160a01b0316846001600160a01b031603612ca357600f546001600160a01b0365010000000000909104811690841603612ca35760405162461bcd60e51b815260206004820152605060248201527f45524332303a204f776e657220616e64206f70657261746f7220617265206e6f60448201527f7420616c6c6f77656420746f2073656c6c2069662074726164696e672069732060648201527f6e6f742079657420656e61626c65642e00000000000000000000000000000000608482015260a401610cbf565b600f54640100000000900460ff1680612cd457506001600160a01b03841660009081526016602052604090205460ff165b15612ceb57612ce484848461374c565b905061112c565b600f546001600160a01b03858116650100000000009092041614801590612d1b5750600f546301000000900460ff165b8015612d385750600e54600d54600a54612d359190613e1f565b10155b15612d4a57612d48600e54610c0e565b505b600f548290610100900460ff168015612d7c57506001600160a01b03851660009081526016602052604090205460ff16155b15612d8f57612d8c85858561383b565b90505b6001600160a01b038516600090815260146020526040902054811115612e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03808616600081815260146020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9085815260200190565b60405180910390a3506001949350505050565b600f805464ff000000001916640100000000179055600b8054829190600090612ebc908490613eaa565b9250508190555080600d6000828254612ed59190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110612f0f57612f0f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa59190613eec565b81600181518110612fb857612fb8613ebd565b6001600160a01b039283166020918202929092010152601354612fde9130911684612797565b6013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac9479261303492879260009288929116904290600401613f4d565b600060405180830381600087803b15801561304e57600080fd5b505af1158015613062573d6000803e3d6000fd5b5050600f805464ff000000001916905550505050565b3361308b6000546001600160a01b031690565b6001600160a01b0316146118da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cbf565b600f805464ff00000000191664010000000017905560006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036131bc5760405162461bcd60e51b815260206004820152604360248201527f52656465656d204c6971756964697479204665653a204c69717569646974792060448201527f72656365697665722063616e6e6f742063616c6c20746869732066756e63746960648201527f6f6e2e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b4760006131ca600285613e6f565b905060006131d88286613e1f565b905084600c60008282546131ec9190613eaa565b9250508190555084600d60008282546132059190613eaa565b9091555050604080516002808252606082018352600092602083019080368337019050509050308160008151811061323f5761323f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156132b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d59190613eec565b816001815181106132e8576132e8613ebd565b6001600160a01b03928316602091820292909201015260135461330e9130911688612797565b6013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790613360908690600090869030904290600401613f4d565b600060405180830381600087803b15801561337a57600080fd5b505af115801561338e573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d7196133b18747613e1f565b30866000807f00000000000000000000000000000000000000000000000000000000000000006133e3426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015613468573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348d9190613f89565b600f805464ff00000000191690559998505050505050505050565b600f805464ff0000000019166401000000001790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215333016135525760405162461bcd60e51b815260206004820152603360248201527f42757920546f6b656e733a204465616420616464726573732063616e6e6f742060448201527f63616c6c20746869732066756e6374696f6e2e000000000000000000000000006064820152608401610cbf565b6040805160028082526060820183526000926020830190803683375050601354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190613eec565b8160008151811061360c5761360c613ebd565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061364057613640613ebd565b6001600160a01b0392831660209182029290920101526013546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de9590859061369f90600090869088904290600401613fb7565b6000604051808303818588803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b5050600f805464ff0000000019169055505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260146020526040812054828110156137db5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0380861660008181526014602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9087815260200190565b600f805464ff00000000191664010000000017908190556000906001600160a01b038581166501000000000090920416148015613887575060006003546002546138859190613eaa565b115b1561389d576138968483613961565b905061394c565b600f546001600160a01b0384811665010000000000909204161480156138d2575060006005546004546138d09190613eaa565b115b156138e15761389684836139d8565b600f546001600160a01b0385811665010000000000909204161480159061391f5750600f546001600160a01b03848116650100000000009092041614155b801561393a575060006007546006546139389190613eaa565b115b15613949576138968483613a38565b50805b600f805464ff00000000191690559392505050565b600f805464ff000000001916640100000000179055600354600254600091829161398b9190613eaa565b9050600061271061399c8386613e32565b6139a69190613e6f565b905060006139b48286613e1f565b90506139c1868385613a98565b600f805464ff000000001916905595945050505050565b600f805464ff0000000019166401000000001790556005546004546000918291613a029190613eaa565b90506000612710613a138386613e32565b613a1d9190613e6f565b90506000613a2b8286613e1f565b90506139c1868385613b4a565b600f805464ff0000000019166401000000001790556007546006546000918291613a629190613eaa565b90506000612710613a738386613e32565b613a7d9190613e6f565b90506000613a8b8286613e1f565b90506139c1868385613b71565b600f805464ff0000000019166401000000001790556002546000908290613abf9085613e32565b613ac99190613e6f565b90506000613ad78285613e1f565b9050613ae4828286613b98565b6001600160a01b03851660009081526014602052604081208054869290613b0c908490613e1f565b90915550503060009081526014602052604081208054869290613b30908490613eaa565b9091555050600f805464ff00000000191690555050505050565b600f805464ff0000000019166401000000001790556004546000908290613abf9085613e32565b600f805464ff0000000019166401000000001790556006546000908290613abf9085613e32565b600f805464ff00000000191664010000000017905560088054849190600090613bc2908490613eaa565b925050819055508160096000828254613bdb9190613eaa565b9250508190555080600a6000828254613bf49190613eaa565b9091555050600f805464ff0000000019169055505050565b600060208284031215613c1e57600080fd5b5035919050565b600060208083528351808285015260005b81811015613c5257858101830151858201604001528201613c36565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b03811681146111e757600080fd5b60008060408385031215613cb957600080fd5b8235613cc481613c91565b946020939093013593505050565b600080600060608486031215613ce757600080fd5b8335613cf281613c91565b92506020840135613d0281613c91565b929592945050506040919091013590565b80358015158114613d2357600080fd5b919050565b600060208284031215613d3a57600080fd5b61112c82613d13565b60008060408385031215613d5657600080fd5b50508035926020909101359150565b600060208284031215613d7757600080fd5b813561112c81613c91565b60008060408385031215613d9557600080fd5b8235613da081613c91565b9150613dae60208401613d13565b90509250929050565b60008060408385031215613dca57600080fd5b8235613dd581613c91565b91506020830135613de581613c91565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561110957611109613df0565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6a57613e6a613df0565b500290565b600082613ea5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561110957611109613df0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613efe57600080fd5b815161112c81613c91565b600081518084526020808501945080840160005b83811015613f425781516001600160a01b031687529582019590820190600101613f1d565b509495945050505050565b85815284602082015260a060408201526000613f6c60a0830186613f09565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f9e57600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000613fd06080830186613f09565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212209e58b1955dedbd8c935e29362e91d8ec96159592f86438c3e232bf39fecfa7fc64736f6c63430008100033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c90000000000000000000000007d616728b7d350603b3f8b1b0a17a1d6433c4d61000000000000000000000000000000000000000000000000000000003b9aca00

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : projectOwnerAddress (address): 0xAF895347b991399Df0ee7462136f46BDCB1Cc9C9
Arg [2] : marketing (address): 0x7d616728b7D350603B3F8B1b0A17A1D6433C4D61
Arg [3] : supplyTotal (uint256): 1000000000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c9
Arg [2] : 0000000000000000000000007d616728b7d350603b3f8b1b0a17a1d6433c4d61
Arg [3] : 000000000000000000000000000000000000000000000000000000003b9aca00


Deployed Bytecode Sourcemap

4117:22353:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18032:2044;;;;;;;;;;-1:-1:-1;18032:2044:0;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;18032:2044:0;;;;;;;;5373:46;;;;;;;;;;;;5412:6;5373:46;;;;;-1:-1:-1;;;;;545:55:1;;;527:74;;515:2;500:18;5373:46:0;381:226:1;20678:101:0;;;;;;;;;;-1:-1:-1;20767:4:0;;;;;;;;;;;;;;;;;20678:101;;;;;;;:::i;21645:205::-;;;;;;;;;;-1:-1:-1;21645:205:0;;;;;:::i;:::-;;:::i;:::-;;;1868:14:1;;1861:22;1843:41;;1831:2;1816:18;21645:205:0;1703:187:1;5493:29:0;;;;;;;;;;-1:-1:-1;5493:29:0;;;;-1:-1:-1;;;;;5493:29:0;;;4680:40;;;;;;;;;;;;;;;;21021:108;;;;;;;;;;-1:-1:-1;21109:12:0;;21021:108;;21862:246;;;;;;;;;;-1:-1:-1;21862:246:0;;;;;:::i;:::-;;:::i;5274:42::-;;;;;;;;;;;;;;;4817:39;;;;;;;;;;;;;;;;4863;;;;;;;;;;;;;;;;8437:285;;;;;;;;;;-1:-1:-1;8437:285:0;;;;;:::i;:::-;;:::i;:::-;;20908:101;;;;;;;;;;-1:-1:-1;20908:101:0;;4306:2;2498:36:1;;2486:2;2471:18;20908:101:0;2356:184:1;5155:33:0;;;;;;;;;;-1:-1:-1;5155:33:0;;;;;;;;;;;22120:247;;;;;;;;;;-1:-1:-1;22120:247:0;;;;;:::i;:::-;;:::i;13309:316::-;;;;;;;;;;-1:-1:-1;13309:316:0;;;;;:::i;:::-;;:::i;12875:426::-;;;;;;;;;;-1:-1:-1;12875:426:0;;;;;:::i;:::-;;:::i;13970:439::-;;;;;;;;;;-1:-1:-1;13970:439:0;;;;;:::i;:::-;;:::i;14417:400::-;;;;;;;;;;-1:-1:-1;14417:400:0;;;;;:::i;:::-;;:::i;9310:186::-;;;;;;;;;;;;;:::i;5325:41::-;;;;;;;;;;;;5364:1;5325:41;;4951:34;;;;;;;;;;;;;;;;12061:396;;;;;;;;;;-1:-1:-1;12061:396:0;;;;;:::i;:::-;;:::i;20105:105::-;;;;;;;;;;-1:-1:-1;20105:105:0;;;;;:::i;:::-;;:::i;21141:127::-;;;;;;;;;;-1:-1:-1;21141:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;21242:18:0;21215:7;21242:18;;;:9;:18;;;;;;;21141:127;1754:103;;;;;;;;;;;;;:::i;4909:35::-;;;;;;;;;;;;;;;;11743:310;;;;;;;;;;-1:-1:-1;11743:310:0;;;;;:::i;:::-;;:::i;4414:36::-;;;;;;;;;;;;;;;;5529:29;;;;;;;;;;-1:-1:-1;5529:29:0;;;;-1:-1:-1;;;;;5529:29:0;;;4588:39;;;;;;;;;;;;;;;;11074:83;;;;;;;;;;-1:-1:-1;5027:4:0;11074:83;;7434:369;;;;;;;;;;;;;:::i;1521:87::-;;;;;;;;;;-1:-1:-1;1567:7:0;1594:6;-1:-1:-1;;;;;1594:6:0;1521:87;;4500:37;;;;;;;;;;;;;;;;13633:329;;;;;;;;;;-1:-1:-1;13633:329:0;;;;;:::i;:::-;;:::i;11165:136::-;;;;;;;;;;;;;:::i;20791:105::-;;;;;;;;;;-1:-1:-1;20882:6:0;;;;;;;;;;;;;;;;;20791:105;;4634:39;;;;;;;;;;;;;;;;7811:264;;;;;;;;;;;;;:::i;5230:37::-;;;;;;;;;;;;;;;22379:445;;;;;;;;;;-1:-1:-1;22379:445:0;;;;;:::i;:::-;;:::i;5454:32::-;;;;;;;;;;-1:-1:-1;5454:32:0;;;;-1:-1:-1;;;;;5454:32:0;;;5428:19;;;;;;;;;;-1:-1:-1;5428:19:0;;;;;;;-1:-1:-1;;;;;5428:19:0;;;21280:184;;;;;;;;;;-1:-1:-1;21280:184:0;;;;;:::i;:::-;;:::i;4358:47::-;;;;;;;;;;;;4399:6;4358:47;;8083:152;;;;;;;;;;;;;:::i;5117:31::-;;;;;;;;;;-1:-1:-1;5117:31:0;;;;;;;;;;;4774:36;;;;;;;;;;;;;;;;14825:392;;;;;;;;;;-1:-1:-1;14825:392:0;;;;;:::i;:::-;;:::i;12465:402::-;;;;;;;;;;-1:-1:-1;12465:402:0;;;;;:::i;:::-;;:::i;11329:406::-;;;;;;;;;;-1:-1:-1;11329:406:0;;;;;:::i;:::-;;:::i;5040:32::-;;;;;;;;;;-1:-1:-1;5040:32:0;;;;;;;;15225:248;;;;;;;;;;-1:-1:-1;15225:248:0;;;;;:::i;:::-;;:::i;5195:26::-;;;;;;;;;;-1:-1:-1;5195:26:0;;;;;;;;;;;8243:186;;;;;;;;;;;;;:::i;21476:157::-;;;;;;;;;;-1:-1:-1;21476:157:0;;;;;:::i;:::-;-1:-1:-1;;;;;21595:21:0;;;21568:7;21595:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;21476:157;5079:31;;;;;;;;;;-1:-1:-1;5079:31:0;;;;;;;;;;;4457:36;;;;;;;;;;;;;;;;5745:49;;;;;;;;;;-1:-1:-1;5745:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;1865:201;;;;;;;;;;-1:-1:-1;1865:201:0;;;;;:::i;:::-;;:::i;9504:285::-;;;;;;;;;;-1:-1:-1;9504:285:0;;;;;:::i;:::-;;:::i;4544:37::-;;;;;;;;;;;;;;;;4727:40;;;;;;;;;;;;;;;;5571:21;;;;;;;;;;-1:-1:-1;5571:21:0;;;;-1:-1:-1;;;;;5571:21:0;;;18032:2044;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;18101:7;-1:-1:-1;;;;;18145:17:0::1;18131:31;:10;:31:::0;18123:103:::1;;;::::0;-1:-1:-1;;;18123:103:0;;4561:2:1;18123:103:0::1;::::0;::::1;4543:21:1::0;4600:2;4580:18;;;4573:30;4639:34;4619:18;;;4612:62;4710:29;4690:18;;;4683:57;4757:19;;18123:103:0::1;;;;;;;;;18237:25;18289:20;;18265:21;;:44;;;;:::i;:::-;18237:72;;18320:21;18364:16;;18344:17;;:36;;;;:::i;:::-;18320:60:::0;-1:-1:-1;18418:21:0::1;18393:22;18320:60:::0;18485:34:::1;18502:17:::0;18485:14;:34:::1;:::i;:::-;:50;;;;:::i;:::-;18450:85:::0;-1:-1:-1;18546:32:0::1;18581:41;18450:85:::0;18581:14;:41:::1;:::i;:::-;18546:76:::0;-1:-1:-1;18633:26:0::1;18662:28;18689:1;18546:76:::0;18662:28:::1;:::i;:::-;18633:57:::0;-1:-1:-1;18701:27:0::1;18731:45;18633:57:::0;18731:24;:45:::1;:::i;:::-;18701:75;;18787:20;18810:14;18787:37;;18861:24;18837:20;;:48;;;;;;;:::i;:::-;;;;;;;;18920:24;18896:20;;:48;;;;;;;:::i;:::-;;;;;;;;18975:14;18955:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;19026:16:0::1;::::0;;19040:1:::1;19026:16:::0;;;;;::::1;::::0;;19002:21:::1;::::0;19026:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;19026:16:0::1;19002:40;;19071:4;19053;19058:1;19053:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19053:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;19097:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;19053:7;;19097:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19087:4;19092:1;19087:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19087:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;19155:6:::1;::::0;19123:54:::1;::::0;19140:4:::1;::::0;19155:6:::1;19164:12:::0;19123:8:::1;:54::i;:::-;19199:93;::::0;;6616:25:1;;;6672:2;6657:18;;6650:34;;;6700:18;;;6693:34;;;19276:15:0::1;6758:2:1::0;6743:18;;6736:34;19199:93:0::1;::::0;6603:3:1;6588:19;19199:93:0::1;;;;;;;19305:6;::::0;19451:17:::1;::::0;19305:204:::1;::::0;;;;-1:-1:-1;;;;;19305:6:0;;::::1;::::0;:57:::1;::::0;:204:::1;::::0;19377:24;;19305:6:::1;::::0;19432:4;;19451:17;::::1;::::0;19483:15:::1;::::0;19305:204:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19522:6:0::1;::::0;:194:::1;::::0;;;;-1:-1:-1;;;;;19522:6:0;;::::1;::::0;-1:-1:-1;19522:57:0::1;::::0;-1:-1:-1;19522:194:0::1;::::0;19594:18;;19522:6:::1;::::0;19643:4;;19670::::1;::::0;19690:15:::1;::::0;19522:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19763:6:0::1;::::0;19742:17:::1;::::0;-1:-1:-1;;;;;;19763:6:0::1;::::0;-1:-1:-1;19763:22:0::1;19807:38;19831:14:::0;19807:21:::1;:38;:::i;:::-;19879:4;19899:19:::0;19933:1:::1;::::0;19965:17:::1;19997:23;:15;20015:5;19997:23;:::i;:::-;19763:268;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;8262:15:1;;;19763:268:0::1;::::0;::::1;8244:34:1::0;8294:18;;;8287:34;;;;8337:18;;;8330:34;;;;8380:18;;;8373:34;;;;8444:15;;;8423:19;;;8416:44;8476:19;;;8469:35;;;;8155:19;;19763:268:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;19737:294;18032:2044;-1:-1:-1;;;;;;;;;;;;;;18032:2044:0:o;21645:205::-;21728:4;21764:10;21785:35;21764:10;21804:7;21813:6;21785:8;:35::i;:::-;21838:4;21831:11;;;21645:205;;;;;:::o;21862:246::-;21961:4;21996:10;22017:38;22033:4;21996:10;22048:6;22017:15;:38::i;:::-;22073:27;22083:4;22089:2;22093:6;22073:9;:27::i;:::-;22066:34;;;21862:246;;;;;;:::o;8437:285::-;8566:20;;8542:21;;:44;;;;:::i;:::-;8524:14;:62;;8516:142;;;;-1:-1:-1;;;8516:142:0;;9028:2:1;8516:142:0;;;9010:21:1;9067:2;9047:18;;;9040:30;9106:34;9086:18;;;9079:62;9177:34;9157:18;;;9150:62;9249:5;9228:19;;;9221:34;9272:19;;8516:142:0;8826:471:1;8516:142:0;8679:35;8699:14;8679:19;:35::i;:::-;8437:285;:::o;22120:247::-;22246:10;22210:4;21595:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;21595:30:0;;;;;;;;;;22210:4;;22246:10;22267:70;;22246:10;;21595:30;;22295:41;;22326:10;;22295:41;:::i;:::-;22267:8;:70::i;13309:316::-;1260:13;:11;:13::i;:::-;13403:9:::1;13388:24;;:11;;;;;;;;;;;:24;;::::0;13380:94:::1;;;::::0;-1:-1:-1;;;13380:94:0;;9504:2:1;13380:94:0::1;::::0;::::1;9486:21:1::0;9543:2;9523:18;;;9516:30;9582:34;9562:18;;;9555:62;9653:27;9633:18;;;9626:55;9698:19;;13380:94:0::1;9302:421:1::0;13380:94:0::1;13502:11;::::0;;13524:23;::::1;;13502:11;13524:23:::0;;::::1;::::0;;::::1;;::::0;;;13563:54:::1;::::0;;13502:11:::1;::::0;;;::::1;::::0;;;::::1;9943:14:1::0;;9936:22;9918:41;;9990:2;9975:18;;9968:50;;;;13601:15:0::1;10034:18:1::0;;;10027:34;;;;13563:54:0::1;::::0;9906:2:1;9891:18;13563:54:0::1;;;;;;;;13369:256;13309:316:::0;:::o;12875:426::-;1260:13;:11;:13::i;:::-;12991:11:::1;::::0;;;::::1;;;12990:12;12982:98;;;::::0;-1:-1:-1;;;12982:98:0;;10274:2:1;12982:98:0::1;::::0;::::1;10256:21:1::0;10313:2;10293:18;;;10286:30;10352:34;10332:18;;;10325:62;10423:34;10403:18;;;10396:62;10495:11;10474:19;;;10467:40;10524:19;;12982:98:0::1;10072:477:1::0;12982:98:0::1;13136:4;13099:33;13117:15:::0;13099;:33:::1;:::i;:::-;:41;;13091:104;;;::::0;-1:-1:-1;;;13091:104:0;;10756:2:1;13091:104:0::1;::::0;::::1;10738:21:1::0;10795:2;10775:18;;;10768:30;10834:34;10814:18;;;10807:62;10905:20;10885:18;;;10878:48;10943:19;;13091:104:0::1;10554:414:1::0;13091:104:0::1;13206:20;:38:::0;;;;13255:20:::1;:38:::0;12875:426::o;13970:439::-;1260:13;:11;:13::i;:::-;14071:17:::1;::::0;-1:-1:-1;;;;;14071:41:0;;::::1;:17:::0;::::1;:41:::0;14063:128:::1;;;::::0;-1:-1:-1;;;14063:128:0;;11175:2:1;14063:128:0::1;::::0;::::1;11157:21:1::0;11214:2;11194:18;;;11187:30;11253:34;11233:18;;;11226:62;11324:34;11304:18;;;11297:62;11396:12;11375:19;;;11368:41;11426:19;;14063:128:0::1;10973:478:1::0;14063:128:0::1;14233:17;::::0;;-1:-1:-1;;;;;14261:40:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;14317:84:::1;::::0;;14233:17;;;::::1;11719:34:1::0;;;11784:2;11769:18;;11762:43;;;;14385:15:0::1;11821:18:1::0;;;11814:34;;;;14317:84:0::1;::::0;11646:2:1;11631:18;14317:84:0::1;11456:398:1::0;14417:400:0;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;14495:17:0;::::1;14487:102;;;::::0;-1:-1:-1;;;14487:102:0;;12061:2:1;14487:102:0::1;::::0;::::1;12043:21:1::0;12100:2;12080:18;;;12073:30;12139:34;12119:18;;;12112:62;12210:34;12190:18;;;12183:62;12282:10;12261:19;;;12254:39;12310:19;;14487:102:0::1;11859:476:1::0;14487:102:0::1;14615:14;::::0;-1:-1:-1;;;;;14615:14:0;;::::1;14608:21:::0;;::::1;::::0;14600:83:::1;;;::::0;-1:-1:-1;;;14600:83:0;;12542:2:1;14600:83:0::1;::::0;::::1;12524:21:1::0;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;12691:19;12671:18;;;12664:47;12728:19;;14600:83:0::1;12340:413:1::0;14600:83:0::1;14694:14;:20:::0;;;::::1;-1:-1:-1::0;;;;;14694:20:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14725:22:0;;;:17:::1;:22;::::0;;;;;;;;:29;;;::::1;-1:-1:-1::0;14725:29:0::1;::::0;;14770:39;;12932:74:1;;;14793:15:0::1;13022:18:1::0;;;13015:34;14770:39:0::1;::::0;12905:18:1;14770:39:0::1;;;;;;;;14417:400:::0;:::o;9310:186::-;9363:22;9412:20;;9388:21;;:44;;;;:::i;:::-;9363:69;;9453:35;9473:14;9453:19;:35::i;:::-;;9352:144;9310:186::o;12061:396::-;1260:13;:11;:13::i;:::-;12172:11:::1;::::0;;;::::1;;;12171:12;12163:88;;;::::0;-1:-1:-1;;;12163:88:0;;13262:2:1;12163:88:0::1;::::0;::::1;13244:21:1::0;13301:2;13281:18;;;13274:30;13340:34;13320:18;;;13313:62;13411:33;13391:18;;;13384:61;13462:19;;12163:88:0::1;13060:427:1::0;12163:88:0::1;12307:4;12270:33;12288:15:::0;12270;:33:::1;:::i;:::-;:41;;12262:99;;;::::0;-1:-1:-1;;;12262:99:0;;13694:2:1;12262:99:0::1;::::0;::::1;13676:21:1::0;13733:2;13713:18;;;13706:30;13772:34;13752:18;;;13745:62;13843:15;13823:18;;;13816:43;13876:19;;12262:99:0::1;13492:409:1::0;12262:99:0::1;12372:15;:33:::0;;;;12416:15:::1;:33:::0;12061:396::o;20105:105::-;1260:13;:11;:13::i;:::-;20179:23:::1;20189:6;5412;20179:9;:23::i;1754:103::-:0;1260:13;:11;:13::i;:::-;1819:30:::1;1846:1;1819:18;:30::i;:::-;1754:103::o:0;11743:310::-;1260:13;:11;:13::i;:::-;11835:10:::1;11824:7;;:21:::0;11816:89:::1;;;::::0;-1:-1:-1;;;11816:89:0;;14108:2:1;11816:89:0::1;::::0;::::1;14090:21:1::0;14147:2;14127:18;;;14120:30;14186:34;14166:18;;;14159:62;14257:25;14237:18;;;14230:53;14300:19;;11816:89:0::1;13906:419:1::0;11816:89:0::1;11937:7;::::0;;11955:20;;;;11991:54:::1;::::0;;14532:25:1;;;14588:2;14573:18;;14566:34;;;12029:15:0::1;14616:18:1::0;;;14609:34;;;;11991:54:0::1;::::0;14520:2:1;14505:18;11991:54:0::1;14330:319:1::0;7434:369:0;1260:13;:11;:13::i;:::-;7498:12:::1;::::0;::::1;;7497:13;7489:66;;;::::0;-1:-1:-1;;;7489:66:0;;14856:2:1;7489:66:0::1;::::0;::::1;14838:21:1::0;14895:2;14875:18;;;14868:30;14934:34;14914:18;;;14907:62;15005:10;14985:18;;;14978:38;15033:19;;7489:66:0::1;14654:404:1::0;7489:66:0::1;7575:11;::::0;::::1;::::0;::::1;;;7574:12;7566:62;;;::::0;-1:-1:-1;;;7566:62:0;;15265:2:1;7566:62:0::1;::::0;::::1;15247:21:1::0;15304:2;15284:18;;;15277:30;15343:34;15323:18;;;15316:62;15414:7;15394:18;;;15387:35;15439:19;;7566:62:0::1;15063:401:1::0;7566:62:0::1;7648:13;::::0;;;::::1;;;7647:14;7639:66;;;::::0;-1:-1:-1;;;7639:66:0;;15671:2:1;7639:66:0::1;::::0;::::1;15653:21:1::0;15710:2;15690:18;;;15683:30;15749:34;15729:18;;;15722:62;15820:9;15800:18;;;15793:37;15847:19;;7639:66:0::1;15469:403:1::0;7639:66:0::1;7716:12;:19:::0;;7775:20;;;;;;7434:369::o;13633:329::-;1260:13;:11;:13::i;:::-;13731:9:::1;13714:26;;:13;;;;;;;;;;;:26;;::::0;13706:99:::1;;;::::0;-1:-1:-1;;;13706:99:0;;16079:2:1;13706:99:0::1;::::0;::::1;16061:21:1::0;16118:2;16098:18;;;16091:30;16157:34;16137:18;;;16130:62;16228:30;16208:18;;;16201:58;16276:19;;13706:99:0::1;15877:424:1::0;13706:99:0::1;13833:13;::::0;;13857:25;::::1;;13833:13:::0;13857:25;;::::1;::::0;;::::1;;::::0;;;13898:56:::1;::::0;;13833:13:::1;::::0;;;::::1;::::0;;;::::1;9943:14:1::0;;9936:22;9918:41;;9990:2;9975:18;;9968:50;;;;13938:15:0::1;10034:18:1::0;;;10027:34;;;;13898:56:0::1;::::0;9906:2:1;9891:18;13898:56:0::1;9728:339:1::0;11165:136:0;21242:9;:18;;;;5412:6;11217:7;21242:18;;;;;21109:12;;11217:7;;21242:18;11244:31;;21242:18;11244:31;:::i;:::-;:49;;;;:::i;:::-;11237:56;;11165:136;:::o;7811:264::-;1260:13;:11;:13::i;:::-;7877:11:::1;::::0;::::1;::::0;::::1;;;7876:12;7868:62;;;::::0;-1:-1:-1;;;7868:62:0;;15265:2:1;7868:62:0::1;::::0;::::1;15247:21:1::0;15304:2;15284:18;;;15277:30;15343:34;15323:18;;;15316:62;15414:7;15394:18;;;15387:35;15439:19;;7868:62:0::1;15063:401:1::0;7868:62:0::1;7950:13;::::0;;;::::1;;;7949:14;7941:66;;;::::0;-1:-1:-1;;;7941:66:0;;15671:2:1;7941:66:0::1;::::0;::::1;15653:21:1::0;15710:2;15690:18;;;15683:30;15749:34;15729:18;;;15722:62;15820:9;15800:18;;;15793:37;15847:19;;7941:66:0::1;15469:403:1::0;7941:66:0::1;8018:11;:18:::0;;8047:20;;;;;;7811:264::o;22379:445::-;22510:10;22474:4;21595:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;21595:30:0;;;;;;;;;;22474:4;;22510:10;22625:15;22605:16;:35;;22597:85;;;;-1:-1:-1;;;22597:85:0;;16508:2:1;22597:85:0;;;16490:21:1;16547:2;16527:18;;;16520:30;16586:34;16566:18;;;16559:62;16657:7;16637:18;;;16630:35;16682:19;;22597:85:0;16306:401:1;22597:85:0;22718:63;22727:8;22737:7;22765:15;22746:16;:34;22718:8;:63::i;:::-;-1:-1:-1;22812:4:0;;22379:445;-1:-1:-1;;;;22379:445:0:o;21280:184::-;21361:4;21397:10;21425:31;21397:10;21445:2;21449:6;21425:9;:31::i;:::-;21418:38;21280:184;-1:-1:-1;;;;21280:184:0:o;8083:152::-;1260:13;:11;:13::i;:::-;8142:11:::1;::::0;;;::::1;;;8141:12;8133:65;;;::::0;-1:-1:-1;;;8133:65:0;;16914:2:1;8133:65:0::1;::::0;::::1;16896:21:1::0;16953:2;16933:18;;;16926:30;16992:34;16972:18;;;16965:62;17063:10;17043:18;;;17036:38;17091:19;;8133:65:0::1;16712:404:1::0;8133:65:0::1;8209:11;:18:::0;;;::::1;::::0;::::1;::::0;;8083:152::o;14825:392::-;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;14903:17:0;::::1;14895:94;;;::::0;;-1:-1:-1;;;14895:94:0;;17323:2:1;14895:94:0::1;::::0;::::1;17305:21:1::0;17342:18;;;17335:30;;;;17401:34;17381:18;;;17374:62;17472:34;17452:18;;;17445:62;17524:19;;14895:94:0::1;17121:428:1::0;14895:94:0::1;15015:14;::::0;-1:-1:-1;;;;;15015:14:0;;::::1;15008:21:::0;;::::1;::::0;15000:83:::1;;;::::0;-1:-1:-1;;;15000:83:0;;17756:2:1;15000:83:0::1;::::0;::::1;17738:21:1::0;17795:2;17775:18;;;17768:30;17834:34;17814:18;;;17807:62;17905:19;17885:18;;;17878:47;17942:19;;15000:83:0::1;17554:413:1::0;15000:83:0::1;15094:14;:20:::0;;;::::1;-1:-1:-1::0;;;;;15094:20:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;15125:22:0;;;:17:::1;:22;::::0;;;;;;;;:29;;;::::1;-1:-1:-1::0;15125:29:0::1;::::0;;15170:39;;12932:74:1;;;15193:15:0::1;13022:18:1::0;;;13015:34;15170:39:0::1;::::0;12905:18:1;15170:39:0::1;12758:297:1::0;12465:402:0;1260:13;:11;:13::i;:::-;12577:11:::1;::::0;;;::::1;;;12576:12;12568:90;;;::::0;-1:-1:-1;;;12568:90:0;;18174:2:1;12568:90:0::1;::::0;::::1;18156:21:1::0;18213:2;18193:18;;;18186:30;18252:34;18232:18;;;18225:62;18323:34;18303:18;;;18296:62;18395:3;18374:19;;;18367:32;18416:19;;12568:90:0::1;17972:469:1::0;12568:90:0::1;12714:4;12677:33;12695:15:::0;12677;:33:::1;:::i;:::-;:41;;12669:100;;;::::0;-1:-1:-1;;;12669:100:0;;18648:2:1;12669:100:0::1;::::0;::::1;18630:21:1::0;18687:2;18667:18;;;18660:30;18726:34;18706:18;;;18699:62;18797:16;18777:18;;;18770:44;18831:19;;12669:100:0::1;18446:410:1::0;12669:100:0::1;12780:16;:34:::0;;;;12825:16:::1;:34:::0;12465:402::o;11329:406::-;1260:13;:11;:13::i;:::-;11416:6:::1;::::0;-1:-1:-1;;;;;11408:28:0;;::::1;11416:6:::0;::::1;11408:28:::0;11400:91:::1;;;::::0;-1:-1:-1;;;11400:91:0;;19063:2:1;11400:91:0::1;::::0;::::1;19045:21:1::0;19102:2;19082:18;;;19075:30;19141:34;19121:18;;;19114:62;19212:20;19192:18;;;19185:48;19250:19;;11400:91:0::1;18861:414:1::0;11400:91:0::1;11530:6;::::0;;-1:-1:-1;;;;;11548:27:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;11591:51:::1;::::0;;11530:6;;;::::1;11719:34:1::0;;;11784:2;11769:18;;11762:43;;;;11626:15:0::1;11821:18:1::0;;;11814:34;;;;11591:51:0::1;::::0;11646:2:1;11631:18;11591:51:0::1;;;;;;;11669:6;;;;;;;;;-1:-1:-1::0;;;;;11669:6:0::1;-1:-1:-1::0;;;;;11669:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11660:37:0::1;;11706:4;11713:6;;;;;;;;;-1:-1:-1::0;;;;;11713:6:0::1;-1:-1:-1::0;;;;;11713:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11660:67;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;19533:15:1;;;11660:67:0::1;::::0;::::1;19515:34:1::0;19585:15;;19565:18;;;19558:43;19427:18;;11660:67:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11653:4;;:74;;;;;-1:-1:-1::0;;;;;11653:74:0::1;;;;;-1:-1:-1::0;;;;;11653:74:0::1;;;;;;11389:346;11329:406:::0;:::o;15225:248::-;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;15318:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:33;::::1;;:23;::::0;;::::1;:33;;::::0;15310:112:::1;;;::::0;-1:-1:-1;;;15310:112:0;;19814:2:1;15310:112:0::1;::::0;::::1;19796:21:1::0;19853:2;19833:18;;;19826:30;19892:34;19872:18;;;19865:62;19963:34;19943:18;;;19936:62;20035:4;20014:19;;;20007:33;20057:19;;15310:112:0::1;19612:470:1::0;15310:112:0::1;-1:-1:-1::0;;;;;15433:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;15225:248::o;8243:186::-;8296:22;8345:20;;8321:21;;:44;;;;:::i;:::-;8296:69;;8386:35;8406:14;8386:19;:35::i;1865:201::-;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;1954:22:0;::::1;1946:73;;;::::0;-1:-1:-1;;;1946:73:0;;20289:2:1;1946:73:0::1;::::0;::::1;20271:21:1::0;20328:2;20308:18;;;20301:30;20367:34;20347:18;;;20340:62;20438:8;20418:18;;;20411:36;20464:19;;1946:73:0::1;20087:402:1::0;1946:73:0::1;2030:28;2049:8;2030:18;:28::i;9504:285::-:0;9633:20;;9609:21;;:44;;;;:::i;:::-;9591:14;:62;;9583:142;;;;-1:-1:-1;;;9583:142:0;;20696:2:1;9583:142:0;;;20678:21:1;20735:2;20715:18;;;20708:30;20774:34;20754:18;;;20747:62;20845:34;20825:18;;;20818:62;20917:5;20896:19;;;20889:34;20940:19;;9583:142:0;20494:471:1;9583:142:0;9746:35;9766:14;9746:19;:35::i;23156:358::-;-1:-1:-1;;;;;23261:22:0;;23253:71;;;;-1:-1:-1;;;23253:71:0;;21172:2:1;23253:71:0;;;21154:21:1;21211:2;21191:18;;;21184:30;21250:34;21230:18;;;21223:62;21321:6;21301:18;;;21294:34;21345:19;;23253:71:0;20970:400:1;23253:71:0;-1:-1:-1;;;;;23343:21:0;;23335:68;;;;-1:-1:-1;;;23335:68:0;;21577:2:1;23335:68:0;;;21559:21:1;21616:2;21596:18;;;21589:30;21655:34;21635:18;;;21628:62;21726:4;21706:18;;;21699:32;21748:19;;23335:68:0;21375:398:1;23335:68:0;-1:-1:-1;;;;;23416:21:0;;;;;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;:39;;;23471:35;;345:25:1;;;23471:35:0;;318:18:1;23471:35:0;;;;;;;23156:358;;;:::o;23526:428::-;-1:-1:-1;;;;;21595:21:0;;;23630:24;21595:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;23720:17;23700:37;;23696:251;;23782:6;23762:16;:26;;23754:68;;;;-1:-1:-1;;;23754:68:0;;21980:2:1;23754:68:0;;;21962:21:1;22019:2;21999:18;;;21992:30;22058:31;22038:18;;;22031:59;22107:18;;23754:68:0;21778:353:1;23754:68:0;23866:54;23875:8;23885:7;23913:6;23894:16;:25;23866:8;:54::i;:::-;23619:335;23526:428;;;:::o;24441:1451::-;24528:4;-1:-1:-1;;;;;24553:18:0;;24545:68;;;;-1:-1:-1;;;24545:68:0;;22338:2:1;24545:68:0;;;22320:21:1;22377:2;22357:18;;;22350:30;22416:34;22396:18;;;22389:62;22487:7;22467:18;;;22460:35;22512:19;;24545:68:0;22136:401:1;24545:68:0;-1:-1:-1;;;;;24632:16:0;;24624:64;;;;-1:-1:-1;;;24624:64:0;;22744:2:1;24624:64:0;;;22726:21:1;22783:2;22763:18;;;22756:30;22822:34;22802:18;;;22795:62;22893:5;22873:18;;;22866:33;22916:19;;24624:64:0;22542:399:1;24624:64:0;24706:12;;;;24701:454;;24743:10;-1:-1:-1;;;;;24757:12:0;24743:26;;;:58;;-1:-1:-1;24787:14:0;;-1:-1:-1;;;;;24787:14:0;24773:10;:28;24743:58;:83;;;-1:-1:-1;1567:7:0;1594:6;-1:-1:-1;;;;;1594:6:0;24805:10;:21;24743:83;:115;;;-1:-1:-1;24844:14:0;;-1:-1:-1;;;;;24844:14:0;24830:10;:28;24743:115;24735:233;;;;-1:-1:-1;;;24735:233:0;;23148:2:1;24735:233:0;;;23130:21:1;23187:3;23167:18;;;23160:31;23227:34;23207:18;;;23200:62;23298:34;23278:18;;;23271:62;23370:34;23349:19;;;23342:63;23442:11;23421:19;;;23414:40;23471:19;;24735:233:0;22946:550:1;24735:233:0;1567:7;1594:6;-1:-1:-1;;;;;1594:6:0;-1:-1:-1;;;;;24989:15:0;:4;-1:-1:-1;;;;;24989:15:0;;24985:159;;25039:4;;-1:-1:-1;;;;;25039:4:0;;;;;;25033:10;;;;25025:103;;;;-1:-1:-1;;;25025:103:0;;23703:2:1;25025:103:0;;;23685:21:1;23742:2;23722:18;;;23715:30;23781:34;23761:18;;;23754:62;23852:34;23832:18;;;23825:62;23924:18;23903:19;;;23896:47;23960:19;;25025:103:0;23501:484:1;25025:103:0;25171:6;;;;;;;;:33;;-1:-1:-1;;;;;;25181:23:0;;;;;;:17;:23;;;;;;;;25171:33;25167:105;;;25228:32;25243:4;25249:2;25253:6;25228:14;:32::i;:::-;25221:39;;;;25167:105;25296:4;;-1:-1:-1;;;;;25288:12:0;;;25296:4;;;;;25288:12;;;;:29;;-1:-1:-1;25304:13:0;;;;;;;25288:29;:80;;;;;25361:7;;25341:16;;25321:17;;:36;;;;:::i;:::-;:47;;25288:80;25284:132;;;25385:19;25396:7;;25385:10;:19::i;:::-;;25284:132;25471:11;;25448:6;;25471:11;;;;;:39;;;;-1:-1:-1;;;;;;25487:23:0;;;;;;:17;:23;;;;;;;;25486:24;25471:39;25467:122;;;25539:38;25560:4;25566:2;25570:6;25539:20;:38::i;:::-;25527:50;;25467:122;-1:-1:-1;;;;;25609:15:0;;;;;;:9;:15;;;;;;:28;-1:-1:-1;25609:28:0;25601:79;;;;-1:-1:-1;;;25601:79:0;;24192:2:1;25601:79:0;;;24174:21:1;24231:2;24211:18;;;24204:30;24270:34;24250:18;;;24243:62;24341:8;24321:18;;;24314:36;24367:19;;25601:79:0;23990:402:1;25601:79:0;-1:-1:-1;;;;;25734:15:0;;;;;;;:9;:15;;;;;;;;:27;;;25716:45;;25776:13;;;;;;;;;;:26;;;;;;25831:29;;;;;;25752:9;345:25:1;;333:2;318:18;;199:177;25831:29:0;;;;;;;;-1:-1:-1;25880:4:0;;24441:1451;-1:-1:-1;;;;24441:1451:0:o;8730:572::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;8813:20:::1;:38:::0;;8837:14;;8813:20;5853:13;;8813:38:::1;::::0;8837:14;;8813:38:::1;:::i;:::-;;;;;;;;8882:14;8862:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8934:16:0::1;::::0;;8948:1:::1;8934:16:::0;;;;;::::1;::::0;;8910:21:::1;::::0;8934:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;8934:16:0::1;8910:40;;8979:4;8961;8966:1;8961:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8961:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;9005:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;8961:7;;9005:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8995:4;9000:1;8995:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8995:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;9063:6:::1;::::0;9031:56:::1;::::0;9048:4:::1;::::0;9063:6:::1;9072:14:::0;9031:8:::1;:56::i;:::-;9100:6;::::0;9236:17:::1;::::0;9100:194:::1;::::0;;;;-1:-1:-1;;;;;9100:6:0;;::::1;::::0;:57:::1;::::0;:194:::1;::::0;9172:14;;9100:6:::1;::::0;9217:4;;9236:17;::::1;::::0;9268:15:::1;::::0;9100:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;;8730:572:0:o;1616:130::-;1691:10;1680:7;1567;1594:6;-1:-1:-1;;;;;1594:6:0;;1521:87;1680:7;-1:-1:-1;;;;;1680:21:0;;1672:66;;;;-1:-1:-1;;;1672:66:0;;24599:2:1;1672:66:0;;;24581:21:1;;;24618:18;;;24611:30;24677:34;24657:18;;;24650:62;24729:18;;1672:66:0;24397:356:1;9797:1250:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;9877:7;-1:-1:-1;;;;;9922:17:0::1;9908:31;:10;:31:::0;9900:111:::1;;;::::0;-1:-1:-1;;;9900:111:0;;24960:2:1;9900:111:0::1;::::0;::::1;24942:21:1::0;24999:2;24979:18;;;24972:30;25038:34;25018:18;;;25011:62;25109:34;25089:18;;;25082:62;25181:5;25160:19;;;25153:34;25204:19;;9900:111:0::1;24758:471:1::0;9900:111:0::1;10047:21;10022:22;10108:18;10125:1;10108:14:::0;:18:::1;:::i;:::-;10079:47:::0;-1:-1:-1;10137:27:0::1;10167:35;10079:47:::0;10167:14;:35:::1;:::i;:::-;10137:65;;10239:14;10215:20;;:38;;;;;;;:::i;:::-;;;;;;;;10284:14;10264:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;10335:16:0::1;::::0;;10349:1:::1;10335:16:::0;;;;;::::1;::::0;;10311:21:::1;::::0;10335:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;10335:16:0::1;10311:40;;10380:4;10362;10367:1;10362:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10362:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;10406:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;10362:7;;10406:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10396:4;10401:1;10396:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10396:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;10464:6:::1;::::0;10432:56:::1;::::0;10449:4:::1;::::0;10464:6:::1;10473:14:::0;10432:8:::1;:56::i;:::-;10501:6;::::0;:194:::1;::::0;;;;-1:-1:-1;;;;;10501:6:0;;::::1;::::0;:57:::1;::::0;:194:::1;::::0;10573:18;;10501:6:::1;::::0;10622:4;;10649::::1;::::0;10669:15:::1;::::0;10501:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10742:6:0::1;::::0;10721:17:::1;::::0;-1:-1:-1;;;;;;10742:6:0::1;::::0;-1:-1:-1;10742:22:0::1;10786:38;10810:14:::0;10786:21:::1;:38;:::i;:::-;10858:4;10878:19:::0;10912:1:::1;::::0;10944:17:::1;10976:23;:15;10994:5;10976:23;:::i;:::-;10742:268;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;8262:15:1;;;10742:268:0::1;::::0;::::1;8244:34:1::0;8294:18;;;8287:34;;;;8337:18;;;8330:34;;;;8380:18;;;8373:34;;;;8444:15;;;8423:19;;;8416:44;8476:19;;;8469:35;;;;8155:19;;10742:268:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;10716:294;9797:1250;-1:-1:-1;;;;;;;;;9797:1250:0:o;20218:424::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;20302:18;:10:::1;:18:::0;20294:82:::1;;;::::0;-1:-1:-1;;;20294:82:0;;25436:2:1;20294:82:0::1;::::0;::::1;25418:21:1::0;25475:2;25455:18;;;25448:30;25514:34;25494:18;;;25487:62;25585:21;25565:18;;;25558:49;25624:19;;20294:82:0::1;25234:415:1::0;20294:82:0::1;20411:16;::::0;;20425:1:::1;20411:16:::0;;;;;::::1;::::0;;20387:21:::1;::::0;20411:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;20448:6:0::1;::::0;:13:::1;::::0;;;;;;;20387:40;;-1:-1:-1;;;;;;20448:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;20448:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20438:4;20443:1;20438:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;20438:23:0::1;;;-1:-1:-1::0;;;;;20438:23:0::1;;;::::0;::::1;20490:4;20472;20477:1;20472:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20472:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;20508:6:::1;::::0;:126:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;20587:6;;20508:126:::1;::::0;:6:::1;::::0;20608:4;;20614:2;;20618:15:::1;::::0;20508:126:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;;;;20218:424:0:o;2074:191::-;2148:16;2167:6;;-1:-1:-1;;;;;2184:17:0;;;;;;;;;;2217:40;;2167:6;;;;;;;2217:40;;2148:16;2217:40;2137:128;2074:191;:::o;23986:419::-;-1:-1:-1;;;;;24110:15:0;;24071:4;24110:15;;;:9;:15;;;;;;24144:21;;;;24136:72;;;;-1:-1:-1;;;24136:72:0;;24192:2:1;24136:72:0;;;24174:21:1;24231:2;24211:18;;;24204:30;24270:34;24250:18;;;24243:62;24341:8;24321:18;;;24314:36;24367:19;;24136:72:0;23990:402:1;24136:72:0;-1:-1:-1;;;;;24244:15:0;;;;;;;:9;:15;;;;;;24262:20;;;24244:38;;24297:13;;;;;;;;;;:23;;;;;;24349:26;;;;;;24276:6;345:25:1;;333:2;318:18;;199:177;25900:565:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;;;26007:7;;-1:-1:-1;;;;;26031:12:0;;::::1;26039:4:::0;;;::::1;;26031:12;:55:::0;::::1;;;;26084:1;26066:15;;26048;;:33;;;;:::i;:::-;:37;26031:55;26027:119;;;26110:24;26121:4;26127:6;26110:10;:24::i;:::-;26103:31;;;;26027:119;26166:4;::::0;-1:-1:-1;;;;;26160:10:0;;::::1;26166:4:::0;;;::::1;;26160:10;:55:::0;::::1;;;;26213:1;26194:16;;26175;;:35;;;;:::i;:::-;:39;26160:55;26156:120;;;26239:25;26251:4;26257:6;26239:11;:25::i;26156:120::-;26298:4;::::0;-1:-1:-1;;;;;26290:12:0;;::::1;26298:4:::0;;;::::1;;26290:12;::::0;::::1;::::0;:26:::1;;-1:-1:-1::0;26312:4:0::1;::::0;-1:-1:-1;;;;;26306:10:0;;::::1;26312:4:::0;;;::::1;;26306:10;;26290:26;:79;;;;;26367:1;26344:20;;26321;;:43;;;;:::i;:::-;:47;26290:79;26286:148;;;26393:29;26409:4;26415:6;26393:15;:29::i;26286:148::-;-1:-1:-1::0;26451:6:0;5877:1:::1;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;25900:565;;-1:-1:-1;;;25900:565:0:o;15498:347::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;15632:15:::1;::::0;15614::::1;::::0;15575:7;;;;15614:33:::1;::::0;15632:15;15614:33:::1;:::i;:::-;15595:52:::0;-1:-1:-1;15658:17:0::1;4399:6;15678:17;15595:52:::0;15678:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;15658:54:::0;-1:-1:-1;15723:17:0::1;15743:18;15658:54:::0;15743:6;:18:::1;:::i;:::-;15723:38;;15772;15784:4;15790:9;15801:8;15772:11;:38::i;:::-;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;15828:9;15498:347;-1:-1:-1;;;;;15498:347:0:o;15853:351::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;15989:16:::1;::::0;5853:6;15970:16;15931:7;;;;15970:35:::1;::::0;15989:16;15970:35:::1;:::i;:::-;15951:54:::0;-1:-1:-1;16016:17:0::1;4399:6;16036:17;15951:54:::0;16036:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;16016:54:::0;-1:-1:-1;16081:17:0::1;16101:18;16016:54:::0;16101:6;:18:::1;:::i;:::-;16081:38;;16130:39;16143:4;16149:9;16160:8;16130:12;:39::i;16212:367::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;16356:20:::1;::::0;16333::::1;::::0;16294:7;;;;16333:43:::1;::::0;16356:20;16333:43:::1;:::i;:::-;16314:62:::0;-1:-1:-1;16387:17:0::1;4399:6;16407:17;16314:62:::0;16407:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;16387:54:::0;-1:-1:-1;16452:17:0::1;16472:18;16387:54:::0;16472:6;:18:::1;:::i;:::-;16452:38;;16501:43;16518:4;16524:9;16535:8;16501:16;:43::i;16587:382::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;16716:15:::1;::::0;5853:13;;16734:3;;16707:24:::1;::::0;:6;:24:::1;:::i;:::-;:30;;;;:::i;:::-;16680:57:::0;-1:-1:-1;16748:24:0::1;16775:25;16680:57:::0;16775:6;:25:::1;:::i;:::-;16748:52;;16811:59;16827:16;16845;16863:6;16811:15;:59::i;:::-;-1:-1:-1::0;;;;;16891:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25;;16910:6;;16891:15;:25:::1;::::0;16910:6;;16891:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;16945:4:0::1;16927:24;::::0;;;:9:::1;:24;::::0;;;;:34;;16955:6;;16927:24;:34:::1;::::0;16955:6;;16927:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;;;16587:382:0:o;16977:384::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;:6;17107:16;5853:13;;17126:3;;17098:25:::1;::::0;:6;:25:::1;:::i;17369:384::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;17503:20:::1;::::0;5853:13;;17526:3;;17494:29:::1;::::0;:6;:29:::1;:::i;17761:263::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;17883:21:::1;:41:::0;;17908:16;;17883:21;5853:13;;17883:41:::1;::::0;17908:16;;17883:41:::1;:::i;:::-;;;;;;;;17960:16;17935:21;;:41;;;;;;;:::i;:::-;;;;;;;;18008:6;17987:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;17761:263:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;612:607::-;724:4;753:2;782;771:9;764:21;814:6;808:13;857:6;852:2;841:9;837:18;830:34;882:1;892:140;906:6;903:1;900:13;892:140;;;1001:14;;;997:23;;991:30;967:17;;;986:2;963:26;956:66;921:10;;892:140;;;896:3;1081:1;1076:2;1067:6;1056:9;1052:22;1048:31;1041:42;1210:2;1140:66;1135:2;1127:6;1123:15;1119:88;1108:9;1104:104;1100:113;1092:121;;;;612:607;;;;:::o;1224:154::-;-1:-1:-1;;;;;1303:5:1;1299:54;1292:5;1289:65;1279:93;;1368:1;1365;1358:12;1383:315;1451:6;1459;1512:2;1500:9;1491:7;1487:23;1483:32;1480:52;;;1528:1;1525;1518:12;1480:52;1567:9;1554:23;1586:31;1611:5;1586:31;:::i;:::-;1636:5;1688:2;1673:18;;;;1660:32;;-1:-1:-1;;;1383:315:1:o;1895:456::-;1972:6;1980;1988;2041:2;2029:9;2020:7;2016:23;2012:32;2009:52;;;2057:1;2054;2047:12;2009:52;2096:9;2083:23;2115:31;2140:5;2115:31;:::i;:::-;2165:5;-1:-1:-1;2222:2:1;2207:18;;2194:32;2235:33;2194:32;2235:33;:::i;:::-;1895:456;;2287:7;;-1:-1:-1;;;2341:2:1;2326:18;;;;2313:32;;1895:456::o;2545:160::-;2610:20;;2666:13;;2659:21;2649:32;;2639:60;;2695:1;2692;2685:12;2639:60;2545:160;;;:::o;2710:180::-;2766:6;2819:2;2807:9;2798:7;2794:23;2790:32;2787:52;;;2835:1;2832;2825:12;2787:52;2858:26;2874:9;2858:26;:::i;2895:248::-;2963:6;2971;3024:2;3012:9;3003:7;2999:23;2995:32;2992:52;;;3040:1;3037;3030:12;2992:52;-1:-1:-1;;3063:23:1;;;3133:2;3118:18;;;3105:32;;-1:-1:-1;2895:248:1:o;3148:247::-;3207:6;3260:2;3248:9;3239:7;3235:23;3231:32;3228:52;;;3276:1;3273;3266:12;3228:52;3315:9;3302:23;3334:31;3359:5;3334:31;:::i;3400:315::-;3465:6;3473;3526:2;3514:9;3505:7;3501:23;3497:32;3494:52;;;3542:1;3539;3532:12;3494:52;3581:9;3568:23;3600:31;3625:5;3600:31;:::i;:::-;3650:5;-1:-1:-1;3674:35:1;3705:2;3690:18;;3674:35;:::i;:::-;3664:45;;3400:315;;;;;:::o;3720:388::-;3788:6;3796;3849:2;3837:9;3828:7;3824:23;3820:32;3817:52;;;3865:1;3862;3855:12;3817:52;3904:9;3891:23;3923:31;3948:5;3923:31;:::i;:::-;3973:5;-1:-1:-1;4030:2:1;4015:18;;4002:32;4043:33;4002:32;4043:33;:::i;:::-;4095:7;4085:17;;;3720:388;;;;;:::o;4787:184::-;4839:77;4836:1;4829:88;4936:4;4933:1;4926:15;4960:4;4957:1;4950:15;4976:128;5043:9;;;5064:11;;;5061:37;;;5078:18;;:::i;5109:228::-;5149:7;5275:1;5207:66;5203:74;5200:1;5197:81;5192:1;5185:9;5178:17;5174:105;5171:131;;;5282:18;;:::i;:::-;-1:-1:-1;5322:9:1;;5109:228::o;5342:274::-;5382:1;5408;5398:189;;5443:77;5440:1;5433:88;5544:4;5541:1;5534:15;5572:4;5569:1;5562:15;5398:189;-1:-1:-1;5601:9:1;;5342:274::o;5621:125::-;5686:9;;;5707:10;;;5704:36;;;5720:18;;:::i;5940:184::-;5992:77;5989:1;5982:88;6089:4;6086:1;6079:15;6113:4;6110:1;6103:15;6129:251;6199:6;6252:2;6240:9;6231:7;6227:23;6223:32;6220:52;;;6268:1;6265;6258:12;6220:52;6300:9;6294:16;6319:31;6344:5;6319:31;:::i;6781:484::-;6834:3;6872:5;6866:12;6899:6;6894:3;6887:19;6925:4;6954:2;6949:3;6945:12;6938:19;;6991:2;6984:5;6980:14;7012:1;7022:218;7036:6;7033:1;7030:13;7022:218;;;7101:13;;-1:-1:-1;;;;;7097:62:1;7085:75;;7180:12;;;;7215:15;;;;7058:1;7051:9;7022:218;;;-1:-1:-1;7256:3:1;;6781:484;-1:-1:-1;;;;;6781:484:1:o;7270:605::-;7569:6;7558:9;7551:25;7612:6;7607:2;7596:9;7592:18;7585:34;7655:3;7650:2;7639:9;7635:18;7628:31;7532:4;7676:57;7728:3;7717:9;7713:19;7705:6;7676:57;:::i;:::-;-1:-1:-1;;;;;7769:55:1;;;;7764:2;7749:18;;7742:83;-1:-1:-1;7856:3:1;7841:19;7834:35;7668:65;7270:605;-1:-1:-1;;;7270:605:1:o;8515:306::-;8603:6;8611;8619;8672:2;8660:9;8651:7;8647:23;8643:32;8640:52;;;8688:1;8685;8678:12;8640:52;8717:9;8711:16;8701:26;;8767:2;8756:9;8752:18;8746:25;8736:35;;8811:2;8800:9;8796:18;8790:25;8780:35;;8515:306;;;;;:::o;25654:533::-;25925:6;25914:9;25907:25;25968:3;25963:2;25952:9;25948:18;25941:31;25888:4;25989:57;26041:3;26030:9;26026:19;26018:6;25989:57;:::i;:::-;-1:-1:-1;;;;;26082:55:1;;;;26077:2;26062:18;;26055:83;-1:-1:-1;26169:2:1;26154:18;26147:34;25981:65;25654:533;-1:-1:-1;;25654:533:1:o

Swarm Source

ipfs://9e58b1955dedbd8c935e29362e91d8ec96159592f86438c3e232bf39fecfa7fc

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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